62 public yarp::dev::IAxisInfoRaw,
63 public yarp::dev::IControlLimitsRaw,
64 public yarp::dev::IControlModeRaw,
65 public yarp::dev::ICurrentControlRaw,
66 public yarp::dev::IEncodersTimedRaw,
67 public yarp::dev::IImpedanceControlRaw,
68 public yarp::dev::IInteractionModeRaw,
69 public yarp::dev::IJointFaultRaw,
70 public yarp::dev::IMotorRaw,
71 public yarp::dev::IMotorEncodersRaw,
72 public yarp::dev::IPidControlRaw,
73 public yarp::dev::IPositionControlRaw,
74 public yarp::dev::IPositionDirectRaw,
75 public yarp::dev::IRemoteVariablesRaw,
76 public yarp::dev::ITorqueControlRaw,
77 public yarp::dev::IVelocityControlRaw,
82#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
83 using return_t = yarp::dev::ReturnValue;
85 constexpr static auto ret_not_ok = return_t::return_code::return_value_error_not_implemented_by_device;
87 using return_t = bool;
89 constexpr static auto ret_not_ok =
false;
98 bool open(yarp::os::Searchable & config)
override;
99 bool close()
override;
103 unsigned int getId()
override;
112 return_t getAxisNameRaw(
int axis, std::string & name)
override;
113 return_t getJointTypeRaw(
int axis, yarp::dev::JointTypeEnum & type)
override;
117#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
118 return_t setPosLimitsRaw(
int axis,
double min,
double max)
override;
119 return_t getPosLimitsRaw(
int axis,
double * min,
double * max)
override;
121 return_t setLimitsRaw(
int axis,
double min,
double max)
override;
122 return_t getLimitsRaw(
int axis,
double * min,
double * max)
override;
124 return_t setVelLimitsRaw(
int axis,
double min,
double max)
override;
125 return_t getVelLimitsRaw(
int axis,
double * min,
double * max)
override;
129#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
130 return_t getControlModesRaw(std::vector<yarp::dev::ControlModeEnum> & modes)
override
131 {
return getControlModeRaw(0, modes[0]); }
133 return_t getControlModesRaw(
const std::vector<int> & joints, std::vector<yarp::dev::ControlModeEnum> & modes)
override
134 {
return getControlModeRaw(joints[0], modes[0]); }
136 return_t setControlModesRaw(
const std::vector<yarp::dev::SelectableControlModeEnum> & modes)
override
137 {
return setControlModeRaw(0, modes[0]); }
139 return_t setControlModesRaw(
const std::vector<int> & joints,
const std::vector<yarp::dev::SelectableControlModeEnum> & modes)
override
140 {
return setControlModeRaw(joints[0], modes[0]); }
142 return_t getControlModesRaw(
int * modes)
override
143 {
return getControlModeRaw(0, &modes[0]); }
145 return_t getControlModesRaw(
int n_joint,
const int * joints,
int * modes)
override
146 {
return getControlModeRaw(joints[0], &modes[0]); }
148 return_t setControlModesRaw(
int * modes)
override
149 {
return setControlModeRaw(0, modes[0]); }
151 return_t setControlModesRaw(
int n_joint,
const int * joints,
int * modes)
override
152 {
return setControlModeRaw(joints[0], modes[0]); }
157 return_t getCurrentRaw(
int m,
double * curr)
override;
159 return_t getCurrentsRaw(
double * currs)
override
160 {
return getCurrentRaw(0, &currs[0]); }
162 return_t getCurrentRangeRaw(
int m,
double * min,
double * max)
override;
164 return_t getCurrentRangesRaw(
double * min,
double * max)
override
165 {
return getCurrentRangeRaw(0, min, max); }
167 return_t setRefCurrentRaw(
int m,
double curr)
override;
169 return_t setRefCurrentsRaw(
const double * currs)
override
170 {
return setRefCurrentRaw(0, currs[0]); }
172 return_t setRefCurrentsRaw(
int n_motor,
const int * motors,
const double * currs)
override
173 {
return setRefCurrentRaw(motors[0], currs[0]); }
175 return_t getRefCurrentRaw(
int m,
double * curr)
override;
177 return_t getRefCurrentsRaw(
double * currs)
override
178 {
return getRefCurrentRaw(0, &currs[0]); }
182#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
183 return_t getAxes(std::size_t & ax)
override;
185 return_t getAxes(
int * ax)
override;
188 return_t resetEncoderRaw(
int j)
override;
190 return_t resetEncodersRaw()
override
191 {
return resetEncoderRaw(0); }
193 return_t setEncoderRaw(
int j,
double val)
override;
195 return_t setEncodersRaw(
const double * vals)
override
196 {
return setEncoderRaw(0, vals[0]); }
198 return_t getEncoderRaw(
int j,
double * v)
override;
200 return_t getEncodersRaw(
double * encs)
override
201 {
return getEncoderRaw(0, &encs[0]); }
203 return_t getEncoderSpeedRaw(
int j,
double * sp)
override;
205 return_t getEncoderSpeedsRaw(
double * spds)
override
206 {
return getEncoderSpeedRaw(0, &spds[0]); }
208 return_t getEncoderAccelerationRaw(
int j,
double * spds)
override;
210 return_t getEncoderAccelerationsRaw(
double * accs)
override
211 {
return getEncoderAccelerationRaw(0, &accs[0]); }
213 return_t getEncoderTimedRaw(
int j,
double * encs,
double * time)
override;
215 return_t getEncodersTimedRaw(
double * encs,
double * times)
override
216 {
return getEncoderTimedRaw(0, &encs[0], ×[0]); }
220 return_t getImpedanceRaw(
int j,
double * stiffness,
double * damping)
override
221 {
return ret_not_ok; }
223 return_t setImpedanceRaw(
int j,
double stiffness,
double damping)
override
224 {
return ret_not_ok; }
226 return_t setImpedanceOffsetRaw(
int j,
double offset)
override
227 {
return ret_not_ok; }
229 return_t getImpedanceOffsetRaw(
int j,
double * offset)
override
230 {
return ret_not_ok; }
232 return_t getCurrentImpedanceLimitRaw(
int j,
double * min_stiff,
double * max_stiff,
double * min_damp,
double * max_damp)
override
233 {
return ret_not_ok; }
237#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
238 return_t getInteractionModeRaw(
int axis, yarp::dev::InteractionModeEnum & mode)
override
239 {
return ret_not_ok; }
241 return_t getInteractionModesRaw(std::vector<yarp::dev::InteractionModeEnum> & modes)
override
242 {
return getInteractionModeRaw(0, modes[0]); }
244 return_t getInteractionModesRaw(
const std::vector<int> & joints, std::vector<yarp::dev::InteractionModeEnum> & modes)
override
245 {
return getInteractionModeRaw(joints[0], modes[0]); }
247 return_t setInteractionModeRaw(
int axis, yarp::dev::InteractionModeEnum mode)
override
248 {
return ret_not_ok; }
250 return_t setInteractionModesRaw(
const std::vector<yarp::dev::InteractionModeEnum> & modes)
override
251 {
return setInteractionModeRaw(0, modes[0]); }
253 return_t setInteractionModesRaw(
const std::vector<int> & joints,
const std::vector<yarp::dev::InteractionModeEnum> & modes)
override
254 {
return setInteractionModeRaw(joints[0], modes[0]); }
256 return_t getInteractionModeRaw(
int axis, yarp::dev::InteractionModeEnum * mode)
override
257 {
return ret_not_ok; }
259 return_t getInteractionModesRaw(
int n_joints,
int * joints, yarp::dev::InteractionModeEnum * modes)
override
260 {
return getInteractionModeRaw(joints[0], &modes[0]); }
262 return_t getInteractionModesRaw(yarp::dev::InteractionModeEnum * modes)
override
263 {
return getInteractionModeRaw(0, &modes[0]); }
265 return_t setInteractionModeRaw(
int axis, yarp::dev::InteractionModeEnum mode)
override
266 {
return ret_not_ok; }
268 return_t setInteractionModesRaw(
int n_joints,
int * joints, yarp::dev::InteractionModeEnum * modes)
override
269 {
return setInteractionModeRaw(joints[0], modes[0]); }
271 return_t setInteractionModesRaw(yarp::dev::InteractionModeEnum * modes)
override
272 {
return setInteractionModeRaw(0, modes[0]); }
277 return_t getLastJointFaultRaw(
int j,
int & fault, std::string & message)
override;
281 return_t getNumberOfMotorsRaw(
int * num)
override;
282 return_t getTemperatureRaw(
int m,
double * val)
override;
283 return_t getTemperaturesRaw(
double * vals)
override;
284 return_t getTemperatureLimitRaw(
int m,
double * temp)
override;
285 return_t setTemperatureLimitRaw(
int m,
double temp)
override;
286 return_t getGearboxRatioRaw(
int m,
double * val)
override;
287 return_t setGearboxRatioRaw(
int m,
double val)
override;
291 return_t getNumberOfMotorEncodersRaw(
int * num)
override;
292 return_t resetMotorEncoderRaw(
int m)
override;
294 return_t resetMotorEncodersRaw()
override
295 {
return resetMotorEncoderRaw(0); }
297 return_t setMotorEncoderCountsPerRevolutionRaw(
int m,
double cpr)
override;
298 return_t getMotorEncoderCountsPerRevolutionRaw(
int m,
double * cpr)
override;
299 return_t setMotorEncoderRaw(
int m,
double val)
override;
301 return_t setMotorEncodersRaw(
const double * vals)
override
302 {
return setMotorEncoderRaw(0, vals[0]); }
304 return_t getMotorEncoderRaw(
int m,
double * v)
override;
306 return_t getMotorEncodersRaw(
double * encs)
override
307 {
return getMotorEncoderSpeedRaw(0, &encs[0]); }
309 return_t getMotorEncoderTimedRaw(
int m,
double * encs,
double * stamp)
override;
311 return_t getMotorEncodersTimedRaw(
double * encs,
double * stamps)
override
312 {
return getMotorEncoderTimedRaw(0, &encs[0], &stamps[0]); }
314 return_t getMotorEncoderSpeedRaw(
int m,
double * sp)
override;
316 return_t getMotorEncoderSpeedsRaw(
double * spds)
override
317 {
return getMotorEncoderSpeedRaw(0, &spds[0]); }
319 return_t getMotorEncoderAccelerationRaw(
int m,
double * spds)
override;
321 return_t getMotorEncoderAccelerationsRaw(
double * accs)
override
322 {
return getMotorEncoderAccelerationRaw(0, &accs[0]); }
326#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
327 return_t getAvailablePidsRaw(
int j, std::vector<yarp::dev::PidControlTypeEnum> & avail)
override
328 {
return ret_not_ok; }
331 return_t setPidRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
const yarp::dev::Pid & pid)
override
332 {
return ret_not_ok; }
334 return_t setPidsRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
const yarp::dev::Pid * pids)
override
335 {
return setPidRaw(pidtype, 0, pids[0]); }
337 return_t setPidReferenceRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double ref)
override
338 {
return ret_not_ok; }
340 return_t setPidReferencesRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
const double * refs)
override
341 {
return setPidReferenceRaw(pidtype, 0, refs[0]); }
343 return_t setPidErrorLimitRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double limit)
override
344 {
return ret_not_ok; }
346 return_t setPidErrorLimitsRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
const double * limits)
override
347 {
return setPidErrorLimitRaw(pidtype, 0, limits[0]); }
349 return_t getPidErrorRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double * err)
override
350 {
return ret_not_ok; }
352 return_t getPidErrorsRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
double * errs)
override
353 {
return getPidErrorRaw(pidtype, 0, &errs[0]); }
355 return_t getPidOutputRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double * out)
override
356 {
return ret_not_ok; }
358 return_t getPidOutputsRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
double * outs)
override
359 {
return getPidOutputRaw(pidtype, 0, &outs[0]); }
361 return_t getPidRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j, yarp::dev::Pid * pid)
override
362 {
return ret_not_ok; }
364 return_t getPidsRaw(
const yarp::dev::PidControlTypeEnum & pidtype, yarp::dev::Pid * pids)
override
365 {
return getPidRaw(pidtype, 0, &pids[0]); }
367#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
368 return_t getPidOffsetRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double & v)
override
369 {
return ret_not_ok; }
371 return_t getPidFeedforwardRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double & v)
override
372 {
return ret_not_ok; }
374 return_t getPidExtraInfoRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j, yarp::dev::PidExtraInfo & info)
override
375 {
return ret_not_ok; }
377 return_t getPidExtraInfosRaw(
const yarp::dev::PidControlTypeEnum & pidtype, std::vector<yarp::dev::PidExtraInfo> & info)
override
378 {
return ret_not_ok; }
381 return_t getPidReferenceRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double * ref)
override
382 {
return ret_not_ok; }
384 return_t getPidReferencesRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
double * refs)
override
385 {
return getPidReferenceRaw(pidtype, 0, &refs[0]); }
387 return_t getPidErrorLimitRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double * limit)
override
388 {
return ret_not_ok; }
390 return_t getPidErrorLimitsRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
double * limits)
override
391 {
return getPidErrorLimitRaw(pidtype, 0, &limits[0]); }
393 return_t resetPidRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j)
override
394 {
return ret_not_ok; }
396 return_t disablePidRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j)
override
397 {
return ret_not_ok; }
399 return_t enablePidRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j)
override
400 {
return ret_not_ok; }
402 return_t setPidOffsetRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double v)
override
403 {
return ret_not_ok; }
405#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
406 return_t setPidFeedforwardRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
double v)
override
407 {
return ret_not_ok; }
409 return_t isPidEnabledRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
bool & enabled)
override
410 {
return ret_not_ok; }
412 return_t isPidEnabledRaw(
const yarp::dev::PidControlTypeEnum & pidtype,
int j,
bool * enabled)
override
413 {
return ret_not_ok; }
418 using yarp::dev::IPositionControlRaw::positionMoveRaw;
420 return_t positionMoveRaw(
const double * refs)
override
421 {
return positionMoveRaw(0, refs[0]); }
423 return_t positionMoveRaw(
int n_joint,
const int * joints,
const double * refs)
override
424 {
return positionMoveRaw(joints[0], refs[0]); }
426 using yarp::dev::IPositionControlRaw::relativeMoveRaw;
428 return_t relativeMoveRaw(
const double * deltas)
override
429 {
return relativeMoveRaw(0, deltas[0]); }
431 return_t relativeMoveRaw(
int n_joint,
const int * joints,
const double * deltas)
override
432 {
return relativeMoveRaw(joints[0], deltas[0]); }
434 using yarp::dev::IPositionControlRaw::checkMotionDoneRaw;
436#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
437 return_t checkMotionDoneRaw(
bool & flag)
override
438 {
return checkMotionDoneRaw(0, flag); }
440 return_t checkMotionDoneRaw(
const std::vector<int> & joints,
bool & flag)
override
441 {
return checkMotionDoneRaw(joints[0], flag); }
443 return_t setTrajSpeedsRaw(
const double * spds)
override
444 {
return setTrajSpeedRaw(0, spds[0]); }
446 return_t setTrajSpeedsRaw(
int n_joint,
const int * joints,
const double * spds)
override
447 {
return setTrajSpeedRaw(joints[0], spds[0]); }
449 using yarp::dev::IPositionControlRaw::setTrajAccelerationRaw;
451 return_t setTrajAccelerationsRaw(
const double * accs)
override
452 {
return setTrajAccelerationRaw(0, accs[0]); }
454 return_t setTrajAccelerationsRaw(
int n_joint,
const int * joints,
const double * accs)
override
455 {
return setTrajAccelerationRaw(joints[0], accs[0]); }
457 return_t getTrajSpeedsRaw(
double * spds)
override
458 {
return getTrajSpeedRaw(0, &spds[0]); }
460 return_t getTrajSpeedsRaw(
int n_joint,
const int * joints,
double * spds)
override
461 {
return getTrajSpeedRaw(joints[0], &spds[0]); }
463 using yarp::dev::IPositionControlRaw::getTrajAccelerationRaw;
465 return_t getTrajAccelerationsRaw(
double * accs)
override
466 {
return getTrajAccelerationRaw(0, &accs[0]); }
468 return_t getTrajAccelerationsRaw(
int n_joint,
const int * joints,
double * accs)
override
469 {
return getTrajAccelerationRaw(joints[0], &accs[0]); }
471 return_t checkMotionDoneRaw(
bool * flag)
override
472 {
return checkMotionDoneRaw(0, flag); }
474 return_t checkMotionDoneRaw(
int n_joint,
const int * joints,
bool * flag)
override
475 {
return checkMotionDoneRaw(joints[0], flag); }
477 return_t setRefSpeedsRaw(
const double * spds)
override
478 {
return setRefSpeedRaw(0, spds[0]); }
480 return_t setRefSpeedsRaw(
int n_joint,
const int * joints,
const double * spds)
override
481 {
return setRefSpeedRaw(joints[0], spds[0]); }
483 using yarp::dev::IPositionControlRaw::setRefAccelerationRaw;
485 return_t setRefAccelerationsRaw(
const double * accs)
override
486 {
return setRefAccelerationRaw(0, accs[0]); }
488 return_t setRefAccelerationsRaw(
int n_joint,
const int * joints,
const double * accs)
override
489 {
return setRefAccelerationRaw(joints[0], accs[0]); }
491 return_t getRefSpeedsRaw(
double * spds)
override
492 {
return getRefSpeedRaw(0, &spds[0]); }
494 return_t getRefSpeedsRaw(
int n_joint,
const int * joints,
double * spds)
override
495 {
return getRefSpeedRaw(joints[0], &spds[0]); }
497 using yarp::dev::IPositionControlRaw::getRefAccelerationRaw;
499 return_t getRefAccelerationsRaw(
double * accs)
override
500 {
return getRefAccelerationRaw(0, &accs[0]); }
502 return_t getRefAccelerationsRaw(
int n_joint,
const int * joints,
double * accs)
override
503 {
return getRefAccelerationRaw(joints[0], &accs[0]); }
506 using yarp::dev::IPositionControlRaw::stopRaw;
508 return_t stopRaw()
override
509 {
return stopRaw(0); }
511 return_t stopRaw(
int n_joint,
const int * joints)
override
512 {
return stopRaw(joints[0]); }
514 return_t getTargetPositionsRaw(
double * refs)
override
515 {
return getTargetPositionRaw(0, &refs[0]); }
517 return_t getTargetPositionsRaw(
int n_joint,
const int * joints,
double * refs)
override
518 {
return getTargetPositionRaw(joints[0], &refs[0]); }
522 return_t setPositionsRaw(
const double * refs)
override
523 {
return setPositionRaw(0, refs[0]); }
525 return_t setPositionsRaw(
int n_joint,
const int * joints,
const double * refs)
override
526 {
return setPositionRaw(joints[0], refs[0]); }
528 return_t getRefPositionsRaw(
double * refs)
override
529 {
return getRefPositionRaw(0, &refs[0]); }
531 return_t getRefPositionsRaw(
int n_joint,
const int * joints,
double * refs)
override
532 {
return getRefPositionRaw(joints[0], &refs[0]); }
536 return_t getRefTorqueRaw(
int j,
double * t)
override;
538 return_t getRefTorquesRaw(
double * t)
override
539 {
return getRefTorqueRaw(0, &t[0]); }
541 return_t setRefTorqueRaw(
int j,
double t)
override;
543 return_t setRefTorquesRaw(
int n_joint,
const int * joints,
const double * t)
override
544 {
return setRefTorqueRaw(joints[0], t[0]); }
546 return_t setRefTorquesRaw(
const double * t)
override
547 {
return setRefTorqueRaw(0, t[0]); }
549 return_t getTorqueRaw(
int j,
double * t)
override;
551 return_t getTorquesRaw(
double * t)
override
552 {
return getTorqueRaw(0, &t[0]); }
554 return_t getTorqueRangeRaw(
int j,
double * min,
double * max)
override;
556 return_t getTorqueRangesRaw(
double * min,
double * max)
override
557 {
return getTorqueRangeRaw(0, &min[0], &max[0]); }
559 return_t getMotorTorqueParamsRaw(
int j, yarp::dev::MotorTorqueParameters * params)
override;
560 return_t setMotorTorqueParamsRaw(
int j,
const yarp::dev::MotorTorqueParameters params)
override;
564 using yarp::dev::IVelocityControlRaw::velocityMoveRaw;
566 return_t velocityMoveRaw(
const double * sp)
override
567 {
return velocityMoveRaw(0, sp[0]); }
569 return_t velocityMoveRaw(
int n_joint,
const int * joints,
const double * spds)
override
570 {
return velocityMoveRaw(joints[0], spds[0]); }
572#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
573 return_t getTargetVelocitiesRaw(
double * vels)
override
574 {
return getTargetVelocityRaw(0, &vels[0]); }
576 return_t getTargetVelocitiesRaw(
int n_joint,
const int * joints,
double * vels)
override
577 {
return getTargetVelocityRaw(joints[0], &vels[0]); }
579 return_t getRefVelocitiesRaw(
double * vels)
override
580 {
return getRefVelocityRaw(0, &vels[0]); }
582 return_t getRefVelocitiesRaw(
int n_joint,
const int * joints,
double * vels)
override
583 {
return getRefVelocityRaw(joints[0], &vels[0]); }
588 enum report_level { NONE, INFO, WARN, FAULT };
589 enum limit_switch { POSITIVE, NEGATIVE, INACTIVE };
594 const std::bitset<16> & actual;
595 const std::bitset<16> & stored;
598 bool reportBitToggle(
report_storage report,
int level, std::size_t pos,
const char * msgSet,
const char * msgReset =
nullptr);
600 virtual void interpretModesOfOperation(std::int8_t modesOfOperation) = 0;
601 virtual void interpretIpStatus(std::uint16_t ipStatus) {}
602 virtual void onPositionLimitTriggered() = 0;
603 virtual void reset() = 0;
630 CommandBuffer commandBuffer;
632 std::unique_ptr<StateObserver> controlModeObserverPtr {
new StateObserver(1.0)};
633 std::unique_ptr<EncoderRead> lastEncoderRead {
nullptr};
640 std::bitset<16> der2;
643 std::int8_t modesOfOperation {0};
647 bool configuredOnce {
false};
651 std::atomic<std::int16_t> lastCurrentRead {0};
653 std::atomic<yarp::conf::vocab32_t> actualControlMode {0};
654 std::atomic<yarp::conf::vocab32_t> requestedcontrolMode {0};
656 std::atomic<double> tr {0.0};
657 std::atomic<double> k {0.0};
658 std::atomic<int> encoderPulses {0};
660 std::atomic<double> maxVel {0.0};
661 std::atomic<double> min {0.0};
662 std::atomic<double> max {0.0};
663 std::atomic<double> refSpeed {0.0};
664 std::atomic<double> refAcceleration {0.0};
666 std::atomic<double> lastHeartbeat {0.0};
667 std::atomic<std::uint8_t> lastNmtState {0};
668 std::atomic<std::uint16_t> lastFaultCode {0};
669 std::atomic<const char *> lastFaultMessage;
671 std::atomic<limit_switch> limitSwitchState {INACTIVE};
675 yarp::conf::vocab32_t initialControlMode {0};
676 yarp::conf::vocab32_t jointType {0};
678 PdoConfiguration tpdo1Conf;
679 PdoConfiguration tpdo2Conf;
680 PdoConfiguration tpdo3Conf;
689 void interpretMsr(std::uint16_t msr);
690 void interpretMer(std::uint16_t mer);
691 void interpretDer(std::uint16_t der);
692 void interpretDer2(std::uint16_t der2);
693 void interpretCer(std::uint16_t cer);
694 void interpretStatusword(std::uint16_t statusword);
696 void handleTpdo1(std::uint16_t statusword, std::uint16_t msr, std::int8_t modesOfOperation);
697 void handleTpdo2(std::uint16_t mer, std::uint16_t der);
698 void handleTpdo3(std::int32_t position, std::int16_t current);
702 bool monitorWorker(
const yarp::os::YarpTimerEvent & event);
704 bool setPosLimitRaw(
double limit,
bool isMin);
705 bool getPosLimitRaw(
double * limit,
bool isMin);
707 yarp::dev::PolyDriver externalEncoderDevice;
708 yarp::dev::IEncodersTimedRaw * iEncodersTimedRawExternal {
nullptr};
711 yarp::os::Timer * monitorThread {
nullptr};