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 _config
.state
= Tango::UNKNOWN
;
21 _config
.initialized
= false;
22 _config
.state
= Tango::FAULT
;
23 _config
.status
= "Not yet initialized";
25 // compute once for all the _mode_names attribute.
26 len
= HKL_LIST_LEN(_pseudo_r
->engine
->modes
);
27 _config
.mode_names
.resize(len
, 1);
29 _config
.mode_names
.data
[i
] = const_cast<char *>(_pseudo_r
->engine
->modes
[i
]->name
);
32 len
= HKL_LIST_LEN(_pseudo_r
->engine
->mode
->axes_names
);
33 names
= _pseudo_r
->engine
->mode
->axes_names
;
35 for(j
=0; j
<axes
.size(); ++j
){
36 AxisAdapter
& axis
= axes
[j
];
37 if(axis
.get_name() == names
[i
]) {
38 _axes
.push_back(&axis
);
44 PseudoAxisAdapter::~PseudoAxisAdapter(void)
48 void PseudoAxisAdapter::update(void)
50 HklDiffractometer
*diffractometer
= _hklAdapter
.diffractometer();
52 // compute the positions
53 _config
.position_r
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_r
) + _config
.offset
;
54 _config
.position_w
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_w
) + _config
.offset
;
57 if(!diffractometer
|| !diffractometer
->samples
){
58 _config
.state
= Tango::FAULT
;
59 _config
.status
= "Internal Error";
64 if(!diffractometer
->samples
->current
){
65 _config
.state
= Tango::FAULT
;
66 _config
.status
= "Sample not set";
70 // now compute the state ans status of the pseudo axes.
71 _config
.state
= Tango::STANDBY
;
72 std::string extra_status
;
74 _config
.status
= "REAL Mode: Motors will REALLY move.";
75 if (!this->is_ready()) {
76 _config
.state
= Tango::FAULT
;
77 extra_status
= "\nCan not connect to axes proxies";
79 for(size_t i
=0;i
<_axes
.size();++i
) {
80 AxisAdapter
const * axis
= _axes
[i
];
81 ::compose_state(_config
.state
, axis
->get_state());
82 if (axis
->get_state() != Tango::STANDBY
)
83 extra_status
+= "\n" + axis
->get_proxy_name() + " is in " + Tango::DevStateName
[axis
->get_state()];
86 extra_status
+= "\nPseudoAxe status: ";
87 extra_status
+= Tango::DevStateName
[_config
.state
];
88 _config
.status
+= extra_status
;
91 _config
.mode
= const_cast<Tango::DevString
>(this->_pseudo_r
->engine
->mode
->name
);
94 if(this->_pseudo_r
->engine
->mode
->initialize
== NULL
)
95 _config
.initialized
= true;
98 PseudoAxisConfig
PseudoAxisAdapter::get_config(void)
100 return _hklAdapter
.pseudo_axis_get_config(this);
103 void PseudoAxisAdapter::to_proxies(void)
105 #ifdef WRITE_TO_PROXY_ALLOWED
107 for (size_t i
=0; i
<_axes
.size(); ++i
) {
109 _axes
[i
]->from_HklAxis();
110 _axes
[i
]->set_state(Tango::MOVING
);
111 _axes
[i
]->to_proxy();
116 bool PseudoAxisAdapter::is_ready(void)
121 for(i
=0; i
<_axes
.size(); ++i
)
122 if(!_axes
[i
]->is_ready())
129 void PseudoAxisAdapter::set_position(const Tango::DevDouble
& position
)
131 _hklAdapter
.pseudo_axis_set_position(this, position
);
134 void PseudoAxisAdapter::set_offset(const Tango::DevDouble
& offset
)
136 _config
.offset
= offset
;
139 void PseudoAxisAdapter::set_mode(Tango::DevString
const & mode
)
141 _hklAdapter
.pseudo_axis_set_mode(this, mode
);
144 void PseudoAxisAdapter::get_mode_parameters(Tango::DevVarDoubleStringArray
*argout
)
146 _hklAdapter
.pseudo_axis_get_mode_parameters(this, argout
);
149 void PseudoAxisAdapter::set_mode_parameters(const Tango::DevVarDoubleStringArray
*argin
)
151 _hklAdapter
.pseudo_axis_set_mode_parameters(this, argin
);
154 void PseudoAxisAdapter::set_initialized(Tango::DevBoolean initialized
)
156 _hklAdapter
.pseudo_axis_set_initialized(this, initialized
);
159 Tango::DevDouble
PseudoAxisAdapter::compute_new_offset(const Tango::DevDouble
& position
)
161 return position
- hkl_parameter_get_value_unit((HklParameter
*)_pseudo_r
);
164 void PseudoAxisAdapter::on(void)
166 _hklAdapter
.pseudo_axis_on(this);
169 void PseudoAxisAdapter::stop(void)
171 #ifdef WRITE_TO_PROXY_ALLOWED
173 for(size_t i
=0; i
<_axes
.size(); ++i
)