return 0;
}
-int set_lift_cmd(uint16_t req_pos, unsigned char speed)
+int set_lift_cmd(struct robottype_orte_data *orte_data)
{
- unsigned char data[2];
+ unsigned char data[4];
- data[0] = req_pos >> 8;
- data[1] = req_pos & 0xff;
- data[2] = speed;
- can_send(CAN_LIFT_CMD, 3, data);
+ data[0] = orte_data->req_pos >> 8;
+ data[1] = orte_data->req_pos & 0xff;
+ data[2] = orte_data->speed;
+ data[3] = orte_data->homing;
+ can_send(CAN_LIFT_CMD, 4, data);
return 0;
}
uint8_t flags; //< CAN flags bits (defined in can_msg_def.h)
uint32_t time_start; /* For timeout detection */
bool trigger_can_send;
+ uint8_t can_req_homing;
};
fsm->act_pos=0;
fsm->current_state = wait_for_cmd;
fsm->flags |= CAN_LIFT_HOMED;
+ fsm->trigger_can_send=1;
+ fsm->can_req_homing=0;
// fsm->can_req_position = 0x54E2;
}
else if (timer_msec >= (time_start + 3000)) {
fsm->flags |= CAN_LIFT_TIMEOUT;
fsm->flags &= ~CAN_LIFT_HOMED;
fsm->trigger_can_send=1;
- }
-
+ fsm->can_req_homing=0;
+ }
break;
case EVENT_EXIT:
break;
fsm->current_state=homing;
}
//homing if match start, but did not homing before start
- if ((fsm->flags & CAN_LIFT_START) && !(fsm->flags & CAN_LIFT_HOMED)){
+ if ((fsm->can_req_homing) && !(fsm->flags & CAN_LIFT_HOMED)){
fsm->current_state=homing;
}
do_control(fsm, 2);
deb_led_on(LEDB);
req = ((rx_msg.data[0]<<8) | (rx_msg.data[1]));
spd = rx_msg.data[2];
+ fsm_lift.can_req_homing=rx_msg.data[3];
// range 0 - A9C5
if (req >= LIFT_IRC_VAL_MIN && req <= LIFT_IRC_VAL_MAX) {
fsm_lift.flags &= ~CAN_LIFT_OUT_OF_BOUNDS;
struct lift_cmd {
unsigned short req_pos;
octet speed;
+ octet homing;
};
struct lift_status {
unsigned short act_pos;
unsigned short response; // Equals to req_pos when the move is done
- octet flags; // Zero when everything OK, otherwise see CAN_VIDLE_FLAG_*
+ octet flags; // Zero when everything OK, otherwise see CAN_LIFT_FLAG_*
};
// FIXME: What's this??? M.S.