void rcv_actuator_status_cb(const ORTERecvInfo *info, void *vinstance,
void *recvCallBackParam)
{
+ static unsigned short old_lift_pos=0;
+ static unsigned short old_pusher_pos=0;
switch (info->status) {
case NEW_DATA:
- // requested position equals actual position...
- if (robot.orte.actuator_status.lift_pos == robot.orte.lift.pos)
+ // new data arrived and requested position equals actual position
+ if (robot.orte.actuator_status.lift_pos == robot.orte.lift.pos &&
+ robot.orte.actuator_status.lift_pos != old_lift_pos)
FSM_SIGNAL(ACT, EV_LIFT_IN_POS, NULL);
- if (robot.orte.actuator_status.pusher_pos == robot.orte.pusher.pos)
+ if (robot.orte.actuator_status.pusher_pos == robot.orte.pusher.pos &&
+ robot.orte.actuator_status.pusher_pos != old_pusher_pos)
FSM_SIGNAL(ACT, EV_PUSHER_IN_POS, NULL);
if (robot.orte.actuator_status.status == 0) {
robot.hw_status[STATUS_LFT]=HW_STATUS_OK;
} else {
robot.hw_status[STATUS_LFT]=HW_STATUS_WARNING;
}
+ old_lift_pos = robot.orte.actuator_status.lift_pos;
+ old_pusher_pos = robot.orte.actuator_status.pusher_pos;
break;
case DEADLINE:
robot.hw_status[STATUS_LFT]=HW_STATUS_FAILED;