1 #include "TangoHKLAdapter.h"
2 #include "PseudoAxisAdapter.h"
5 namespace Diffractometer_ns
8 PseudoAxisAdapter::PseudoAxisAdapter(TangoHKLAdapter
&hklAdapter
, HklPseudoAxis
*pseudo_r
, HklPseudoAxis
*pseudo_w
):
9 _hklAdapter(hklAdapter
),
16 std::vector
<AxisAdapter
> & axes
= hklAdapter
.get_axes();
19 _state
= Tango::UNKNOWN
;
22 len
= HKL_LIST_LEN(_pseudo_r
->engine
->mode
->axes_names
);
23 names
= _pseudo_r
->engine
->mode
->axes_names
;
25 for(j
=0; j
<axes
.size(); ++j
){
26 AxisAdapter
& axis
= axes
[j
];
27 if(axis
.get_name() == names
[i
]) {
28 _axes
.push_back(&axis
);
33 len
= HKL_LIST_LEN(_pseudo_r
->engine
->modes
);
34 _mode_names
.resize(len
, 1);
36 _mode_names
.data
[i
] = const_cast<char *>(_pseudo_r
->engine
->modes
[i
]->name
);
39 PseudoAxisAdapter::~PseudoAxisAdapter(void)
43 void PseudoAxisAdapter::update(void)
45 HklDiffractometer
*diffractometer
= _hklAdapter
.diffractometer();
47 _read
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_r
);
48 _write
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_w
);
51 if(!diffractometer
|| !diffractometer
->samples
){
52 _state
= Tango::FAULT
;
53 _status
= "Internal Error";
58 if(!diffractometer
->samples
->current
){
59 _state
= Tango::FAULT
;
60 _status
= "Sample not set";
64 // now compute the state ans status of the pseudo axes.
65 _state
= Tango::STANDBY
;
66 std::string extra_status
;
68 _status
= "REAL Mode: Motors will REALLY move.";
69 if (!this->is_ready()) {
70 _state
= Tango::FAULT
;
71 extra_status
= "\nCan not connect to axes proxies";
73 for(size_t i
=0;i
<_axes
.size();++i
) {
74 AxisAdapter
const * axis
= _axes
[i
];
75 ::compose_state(_state
, axis
->get_state());
76 if (axis
->get_state() != Tango::STANDBY
)
77 extra_status
+= "\n" + axis
->get_proxy_name() + " is in " + Tango::DevStateName
[axis
->get_state()];
80 extra_status
+= "\nPseudoAxe status: ";
81 extra_status
+= Tango::DevStateName
[_state
];
82 _status
+= extra_status
;
85 void PseudoAxisAdapter::to_proxies(void)
87 #ifdef WRITE_TO_PROXY_ALLOWED
89 for (size_t i
=0; i
<_axes
.size(); ++i
) {
91 _axes
[i
]->from_HklAxis();
92 _axes
[i
]->set_state(Tango::MOVING
);
98 bool PseudoAxisAdapter::is_ready(void)
103 for(i
=0; i
<_axes
.size(); ++i
)
104 if(!_axes
[i
]->is_ready())
111 Tango::DevString
*PseudoAxisAdapter::get_mode(void) const
113 return _hklAdapter
.pseudo_axis_get_mode(this);
116 void PseudoAxisAdapter::set_mode(Tango::DevString
const & mode
)
118 _hklAdapter
.pseudo_axis_set_mode(this, mode
);
121 void PseudoAxisAdapter::get_mode_parameters(Tango::DevVarDoubleStringArray
*argout
)
123 _hklAdapter
.pseudo_axis_get_mode_parameters(this, argout
);
126 void PseudoAxisAdapter::set_mode_parameters(const Tango::DevVarDoubleStringArray
*argin
)
128 _hklAdapter
.pseudo_axis_set_mode_parameters(this, argin
);
131 bool PseudoAxisAdapter::get_is_initialised(void)
133 return _hklAdapter
.pseudo_axis_get_is_initialised(this);
136 void PseudoAxisAdapter::set_is_initialised(Tango::DevBoolean init
)
138 _hklAdapter
.pseudo_axis_set_is_initialised(this, init
);
141 void PseudoAxisAdapter::on(void)
143 _hklAdapter
.pseudo_axis_on(this);