From fc1c3d35d14ce49fa43b6f675838d824b8f88307 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Picca=20Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Thu, 18 Jun 2009 16:58:12 +0200 Subject: [PATCH] * implemente the state and status for the PseudoAxes class --- src/PseudoAxesAdapter.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/PseudoAxesAdapter.h | 5 +++++ src/TangoHKLAdapter.cpp | 11 +++++++++-- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/PseudoAxesAdapter.cpp b/src/PseudoAxesAdapter.cpp index da41322..b443ede 100644 --- a/src/PseudoAxesAdapter.cpp +++ b/src/PseudoAxesAdapter.cpp @@ -43,6 +43,8 @@ namespace Diffractometer_ns _proxy_name += "-sim-"; _proxy_name += engine->name; + this->update_axes_i(engine); + // update the state and status _state = Tango::STANDBY; _status = "READY"; @@ -93,4 +95,49 @@ namespace Diffractometer_ns { _hklAdapter->pseudo_axes_init(_idx); } + + void PseudoAxesAdapter::update_axes_i(HklPseudoAxisEngine *engine) + { + size_t i, j; + size_t len; + char const **names; + + // fill the _axes with the right AxisAdapters + std::vector & axes = _hklAdapter->get_axes(); + len = HKL_LIST_LEN(engine->mode->axes_names); + names = engine->mode->axes_names; + _axes.clear(); + for(i=0; isimulated) + _state = Tango::STANDBY; + else{ + size_t i; + + _state = Tango::STANDBY; + for(i=0;i<_axes.size();++i) { + AxisAdapter const * axis = _axes[i]; + ::compose_state(_state, axis->get_state()); + if (axis->get_state() != Tango::STANDBY) + status_extra += "\n" + axis->get_device_name() + " is in " + Tango::DevStateName[axis->get_state()]; + } + } + _status += Tango::DevStateName[_state]; + _status += status_extra; + } } diff --git a/src/PseudoAxesAdapter.h b/src/PseudoAxesAdapter.h index 237d4d4..e22b929 100644 --- a/src/PseudoAxesAdapter.h +++ b/src/PseudoAxesAdapter.h @@ -3,6 +3,7 @@ #include +#include "AxisAdapter.h" #include "Matrix.h" // forward declaration @@ -59,8 +60,12 @@ namespace Diffractometer_ns { Matrix _mode_parameters_names; std::string _proxy_name; std::vector _dynamic_attribute_pseudo_axes_axis; + std::vector _axes; Tango::DevState _state; std::string _status; + + void update_axes_i(HklPseudoAxisEngine *engine); + void update_state_and_status_i(void); }; } diff --git a/src/TangoHKLAdapter.cpp b/src/TangoHKLAdapter.cpp index 48fed90..7cee7aa 100644 --- a/src/TangoHKLAdapter.cpp +++ b/src/TangoHKLAdapter.cpp @@ -483,14 +483,19 @@ namespace Diffractometer_ns HklPseudoAxisEngine *engine_r, *engine_w; for(i=0; i<_pseudoAxesAdapters.size(); ++i){ + PseudoAxesAdapter *adapter; + + adapter = _pseudoAxesAdapters[i]; engine_r = _diffractometer->engines_r->engines[i]; engine_w = _diffractometer->engines_w->engines[i]; len = HKL_LIST_LEN(engine_r->pseudoAxes); for(j=0; j_read.data[j] = hkl_parameter_get_value_unit(&engine_r->pseudoAxes[j]->parent); - _pseudoAxesAdapters[i]->_write.data[j] = hkl_parameter_get_value_unit(&engine_w->pseudoAxes[j]->parent); + adapter->_read.data[j] = hkl_parameter_get_value_unit(&engine_r->pseudoAxes[j]->parent); + adapter->_write.data[j] = hkl_parameter_get_value_unit(&engine_w->pseudoAxes[j]->parent); } + + adapter->update_state_and_status_i(); } } @@ -1627,6 +1632,8 @@ namespace Diffractometer_ns hkl_pseudo_axis_engine_select_mode(_diffractometer->engines_w->engines[idx], i); hkl_pseudo_axis_engine_select_mode(_diffractometer->engines_r_real->engines[idx], i); hkl_pseudo_axis_engine_select_mode(_diffractometer->engines_w_real->engines[idx], i); + _pseudoAxesAdapters[idx]->update_axes_i(engine); + _pseudoAxesAdapters[idx]->update_state_and_status_i(); } } -- 2.11.4.GIT