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;
24 len
= HKL_LIST_LEN(_pseudo_r
->engine
->mode
->axes_names
);
25 names
= _pseudo_r
->engine
->mode
->axes_names
;
27 for(j
=0; j
<axes
.size(); ++j
){
28 AxisAdapter
& axis
= axes
[j
];
29 if(axis
.get_name() == names
[i
]) {
30 _axes
.push_back(&axis
);
35 // compute once for all the _mode_names attribute.
36 len
= HKL_LIST_LEN(_pseudo_r
->engine
->modes
);
37 _mode_names
.resize(len
, 1);
39 _mode_names
.data
[i
] = const_cast<char *>(_pseudo_r
->engine
->modes
[i
]->name
);
42 PseudoAxisAdapter::~PseudoAxisAdapter(void)
46 void PseudoAxisAdapter::update(void)
48 HklDiffractometer
*diffractometer
= _hklAdapter
.diffractometer();
50 _config
.read
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_r
);
51 _config
.write
= hkl_parameter_get_value_unit((HklParameter
*)_pseudo_w
);
54 if(!diffractometer
|| !diffractometer
->samples
){
55 _config
.state
= Tango::FAULT
;
56 _config
.status
= "Internal Error";
61 if(!diffractometer
->samples
->current
){
62 _config
.state
= Tango::FAULT
;
63 _config
.status
= "Sample not set";
67 // now compute the state ans status of the pseudo axes.
68 _config
.state
= Tango::STANDBY
;
69 std::string extra_status
;
71 _config
.status
= "REAL Mode: Motors will REALLY move.";
72 if (!this->is_ready()) {
73 _config
.state
= Tango::FAULT
;
74 extra_status
= "\nCan not connect to axes proxies";
76 for(size_t i
=0;i
<_axes
.size();++i
) {
77 AxisAdapter
const * axis
= _axes
[i
];
78 ::compose_state(_config
.state
, axis
->get_state());
79 if (axis
->get_state() != Tango::STANDBY
)
80 extra_status
+= "\n" + axis
->get_proxy_name() + " is in " + Tango::DevStateName
[axis
->get_state()];
83 extra_status
+= "\nPseudoAxe status: ";
84 extra_status
+= Tango::DevStateName
[_config
.state
];
85 _config
.status
+= extra_status
;
88 _config
.mode
= const_cast<Tango::DevString
>(this->_pseudo_r
->engine
->mode
->name
);
91 if(this->_pseudo_r
->engine
->mode
->initialize
== NULL
)
92 _config
.initialized
= true;
95 PseudoAxisConfig
PseudoAxisAdapter::get_config(void)
97 return _hklAdapter
.pseudo_axis_get_config(this);
100 void PseudoAxisAdapter::to_proxies(void)
102 #ifdef WRITE_TO_PROXY_ALLOWED
104 for (size_t i
=0; i
<_axes
.size(); ++i
) {
106 _axes
[i
]->from_HklAxis();
107 _axes
[i
]->set_state(Tango::MOVING
);
108 _axes
[i
]->to_proxy();
113 bool PseudoAxisAdapter::is_ready(void)
118 for(i
=0; i
<_axes
.size(); ++i
)
119 if(!_axes
[i
]->is_ready())
126 void PseudoAxisAdapter::set_mode(Tango::DevString
const & mode
)
128 _hklAdapter
.pseudo_axis_set_mode(this, mode
);
131 void PseudoAxisAdapter::get_mode_parameters(Tango::DevVarDoubleStringArray
*argout
)
133 _hklAdapter
.pseudo_axis_get_mode_parameters(this, argout
);
136 void PseudoAxisAdapter::set_mode_parameters(const Tango::DevVarDoubleStringArray
*argin
)
138 _hklAdapter
.pseudo_axis_set_mode_parameters(this, argin
);
141 void PseudoAxisAdapter::set_initialized(Tango::DevBoolean initialized
)
143 _hklAdapter
.pseudo_axis_set_initialized(this, initialized
);
146 void PseudoAxisAdapter::on(void)
148 _hklAdapter
.pseudo_axis_on(this);