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";
26 len
= HKL_LIST_LEN(_pseudo_r
->engine
->mode
->axes_names
);
27 names
= _pseudo_r
->engine
->mode
->axes_names
;
29 for(j
=0; j
<axes
.size(); ++j
){
30 AxisAdapter
& axis
= axes
[j
];
31 if(axis
.get_name() == names
[i
]) {
32 _axes
.push_back(&axis
);
37 // compute once for all the _mode_names attribute.
38 len
= HKL_LIST_LEN(_pseudo_r
->engine
->modes
);
39 _mode_names
.resize(len
, 1);
41 _mode_names
.data
[i
] = const_cast<char *>(_pseudo_r
->engine
->modes
[i
]->name
);
44 PseudoAxisAdapter::~PseudoAxisAdapter(void)
48 void PseudoAxisAdapter::update(void)
50 HklDiffractometer
*diffractometer
= _hklAdapter
.diffractometer();
52 _config
.read
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_r
);
53 _config
.write
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_w
);
56 if(!diffractometer
|| !diffractometer
->samples
){
57 _config
.state
= Tango::FAULT
;
58 _config
.status
= "Internal Error";
63 if(!diffractometer
->samples
->current
){
64 _config
.state
= Tango::FAULT
;
65 _config
.status
= "Sample not set";
69 // now compute the state ans status of the pseudo axes.
70 _config
.state
= Tango::STANDBY
;
71 std::string extra_status
;
73 _config
.status
= "REAL Mode: Motors will REALLY move.";
74 if (!this->is_ready()) {
75 _config
.state
= Tango::FAULT
;
76 extra_status
= "\nCan not connect to axes proxies";
78 for(size_t i
=0;i
<_axes
.size();++i
) {
79 AxisAdapter
const * axis
= _axes
[i
];
80 ::compose_state(_config
.state
, axis
->get_state());
81 if (axis
->get_state() != Tango::STANDBY
)
82 extra_status
+= "\n" + axis
->get_proxy_name() + " is in " + Tango::DevStateName
[axis
->get_state()];
85 extra_status
+= "\nPseudoAxe status: ";
86 extra_status
+= Tango::DevStateName
[_config
.state
];
87 _config
.status
+= extra_status
;
90 _config
.mode
= const_cast<Tango::DevString
>(this->_pseudo_r
->engine
->mode
->name
);
93 if(this->_pseudo_r
->engine
->mode
->initialize
== NULL
)
94 _config
.initialized
= true;
97 PseudoAxisConfig
PseudoAxisAdapter::get_config(void)
99 return _hklAdapter
.pseudo_axis_get_config(this);
102 void PseudoAxisAdapter::to_proxies(void)
104 #ifdef WRITE_TO_PROXY_ALLOWED
106 for (size_t i
=0; i
<_axes
.size(); ++i
) {
108 _axes
[i
]->from_HklAxis();
109 _axes
[i
]->set_state(Tango::MOVING
);
110 _axes
[i
]->to_proxy();
115 bool PseudoAxisAdapter::is_ready(void)
120 for(i
=0; i
<_axes
.size(); ++i
)
121 if(!_axes
[i
]->is_ready())
128 void PseudoAxisAdapter::set_mode(Tango::DevString
const & mode
)
130 _hklAdapter
.pseudo_axis_set_mode(this, mode
);
133 void PseudoAxisAdapter::get_mode_parameters(Tango::DevVarDoubleStringArray
*argout
)
135 _hklAdapter
.pseudo_axis_get_mode_parameters(this, argout
);
138 void PseudoAxisAdapter::set_mode_parameters(const Tango::DevVarDoubleStringArray
*argin
)
140 _hklAdapter
.pseudo_axis_set_mode_parameters(this, argin
);
143 void PseudoAxisAdapter::set_initialized(Tango::DevBoolean initialized
)
145 _hklAdapter
.pseudo_axis_set_initialized(this, initialized
);
148 void PseudoAxisAdapter::on(void)
150 _hklAdapter
.pseudo_axis_on(this);