1 #include "TangoHKLAdapter.h"
2 #include "PseudoAxesAttrib.h"
3 #include "PseudoAxesAdapter.h"
4 #include "Diffractometer.h"
6 namespace Diffractometer_ns
9 PseudoAxesAdapter::PseudoAxesAdapter(TangoHKLAdapter
*hklAdapter
, size_t idx
):
10 _hklAdapter(hklAdapter
),
13 HklPseudoAxisEngine
*engine
;
17 engine
= _hklAdapter
->diffractometer()->engines_r
->engines
[_idx
];
18 len
= HKL_LIST_LEN(engine
->pseudoAxes
);
20 _write
.resize(len
, 1);
22 // update the _mode_names
23 len
= HKL_LIST_LEN(engine
->modes
);
24 _mode_names
.resize(len
, 1);
26 _mode_names
.data
[i
] = const_cast<char *>(engine
->modes
[i
]->name
);
28 // update the _pseudo_axis_names and create the dynamic attributes
29 len
= HKL_LIST_LEN(engine
->pseudoAxes
);
30 _pseudo_axis_names
.resize(len
, 1);
35 name
= ((HklParameter
*)(engine
->pseudoAxes
[i
]))->name
;
36 _pseudo_axis_names
.data
[i
] = const_cast<char *>(name
);
37 att
= new PseudoAxesAxisAttrib(name
, *this, i
);
38 _dynamic_attribute_pseudo_axes_axis
.push_back(att
);
41 // compute the proxy name
42 _proxy_name
= _hklAdapter
->get_device()->get_name();
43 _proxy_name
+= "-sim-";
44 _proxy_name
+= engine
->name
;
46 this->update_axes_i(engine
);
48 // update the state and status
49 _state
= Tango::STANDBY
;
55 char const * PseudoAxesAdapter::get_name(void) const
57 return _hklAdapter
->diffractometer()->engines_r
->engines
[_idx
]->name
;
60 void PseudoAxesAdapter::write(Matrix
<double> const & write
)
62 _hklAdapter
->pseudo_axes_write(_idx
, write
);
65 void PseudoAxesAdapter::set_axis_value(size_t idx
, double value
)
67 _write
.data
[idx
] = value
;
71 Tango::DevString
*PseudoAxesAdapter::get_mode(void)
73 return _hklAdapter
->pseudo_axes_get_mode(_idx
);
76 void PseudoAxesAdapter::set_mode(const Tango::DevString name
)
78 _hklAdapter
->pseudo_axes_set_mode(_idx
, name
);
81 Matrix
<char *> & PseudoAxesAdapter::get_mode_parameters_names(void)
83 return _hklAdapter
->pseudo_axes_get_mode_parameters_names(_idx
);
86 Matrix
<double> const & PseudoAxesAdapter::get_mode_parameters(void)
88 return _hklAdapter
->pseudo_axes_get_mode_parameters(_idx
);
91 void PseudoAxesAdapter::set_mode_parameters(Matrix
<double> const & values
)
93 _hklAdapter
->pseudo_axes_set_mode_parameters(_idx
, values
);
96 void PseudoAxesAdapter::init(void)
98 _hklAdapter
->pseudo_axes_init(_idx
);
101 void PseudoAxesAdapter::add_dynamic_attributes(void)
103 _hklAdapter
->pseudo_axes_add_dynamic_attributes(_idx
);
106 void PseudoAxesAdapter::remove_dynamic_attributes(void)
108 _hklAdapter
->pseudo_axes_remove_dynamic_attributes(_idx
);
115 void PseudoAxesAdapter::update_axes_i(HklPseudoAxisEngine
*engine
)
121 // fill the _axes with the right AxisAdapters
122 std::vector
<AxisAdapter
> & axes
= _hklAdapter
->get_axes();
123 len
= HKL_LIST_LEN(engine
->mode
->axes_names
);
124 names
= engine
->mode
->axes_names
;
127 for(j
=0; j
<axes
.size(); ++j
){
128 AxisAdapter
& axis
= axes
[j
];
129 if(axis
.get_name() == names
[i
]) {
130 _axes
.push_back(&axis
);
136 void PseudoAxesAdapter::update_state_and_status_i(void)
138 std::string status_extra
;
140 _status
= "PseudoAxes status: ";
142 // now compute the state and status
143 if(_hklAdapter
->simulated
)
144 _state
= Tango::STANDBY
;
148 _state
= Tango::STANDBY
;
149 for(i
=0;i
<_axes
.size();++i
) {
150 AxisAdapter
const * axis
= _axes
[i
];
151 ::compose_state(_state
, axis
->get_state());
152 if (axis
->get_state() != Tango::STANDBY
)
153 status_extra
+= "\n" + axis
->get_device_name() + " is in " + Tango::DevStateName
[axis
->get_state()];
156 _status
+= Tango::DevStateName
[_state
];
157 _status
+= status_extra
;