diff -r 1a7067207637 -r 7bc131b92039 master/fsm_change.c --- a/master/fsm_change.c Fri Aug 10 15:08:44 2007 +0000 +++ b/master/fsm_change.c Fri Aug 10 15:27:08 2007 +0000 @@ -158,7 +158,6 @@ // write new state to slave ec_datagram_npwr(datagram, slave->station_address, 0x0120, 2); EC_WRITE_U16(datagram->data, fsm->requested_state); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_change_state_check; } @@ -175,15 +174,14 @@ ec_datagram_t *datagram = fsm->datagram; ec_slave_t *slave = fsm->slave; - if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { - ec_master_queue_datagram(fsm->slave->master, datagram); - return; - } + if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) + return; if (datagram->state != EC_DATAGRAM_RECEIVED) { fsm->state = ec_fsm_change_state_error; - EC_ERR("Failed to receive state datagram from slave %i!\n", - fsm->slave->ring_position); + EC_ERR("Failed to receive state datagram from slave %i" + " (datagram state %i)!\n", + fsm->slave->ring_position, datagram->state); return; } @@ -205,7 +203,6 @@ // repeat writing new state to slave ec_datagram_npwr(datagram, slave->station_address, 0x0120, 2); EC_WRITE_U16(datagram->data, fsm->requested_state); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; return; } @@ -214,7 +211,6 @@ // read AL status from slave ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_change_state_status; } @@ -231,15 +227,14 @@ ec_datagram_t *datagram = fsm->datagram; ec_slave_t *slave = fsm->slave; - if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { - ec_master_queue_datagram(fsm->slave->master, datagram); - return; - } + if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) + return; if (datagram->state != EC_DATAGRAM_RECEIVED) { fsm->state = ec_fsm_change_state_error; - EC_ERR("Failed to receive state checking datagram from slave %i.\n", - slave->ring_position); + EC_ERR("Failed to receive state checking datagram from slave %i" + " (datagram state %i).\n", + slave->ring_position, datagram->state); return; } @@ -289,7 +284,6 @@ req_state, slave->ring_position, cur_state); // fetch AL status error code ec_datagram_nprd(datagram, slave->station_address, 0x0134, 2); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_change_state_code; return; @@ -310,7 +304,6 @@ again: // no timeout yet. check again ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; } @@ -367,15 +360,14 @@ uint32_t code; const ec_code_msg_t *al_msg; - if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { - ec_master_queue_datagram(fsm->slave->master, datagram); - return; - } + if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) + return; if (datagram->state != EC_DATAGRAM_RECEIVED) { fsm->state = ec_fsm_change_state_error; - EC_ERR("Failed to receive AL status code datagram from slave %i.\n", - fsm->slave->ring_position); + EC_ERR("Failed to receive AL status code datagram from slave %i" + " (datagram state %i).\n", + fsm->slave->ring_position, datagram->state); return; } @@ -413,7 +405,6 @@ ec_datagram_npwr(datagram, slave->station_address, 0x0120, 2); EC_WRITE_U16(datagram->data, slave->current_state); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_change_state_ack; } @@ -429,15 +420,14 @@ ec_datagram_t *datagram = fsm->datagram; ec_slave_t *slave = fsm->slave; - if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { - ec_master_queue_datagram(fsm->slave->master, datagram); - return; - } + if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) + return; if (datagram->state != EC_DATAGRAM_RECEIVED) { fsm->state = ec_fsm_change_state_error; - EC_ERR("Failed to receive state ack datagram for slave %i.\n", - slave->ring_position); + EC_ERR("Failed to receive state ack datagram for slave %i" + " (datagram state %i).\n", + slave->ring_position, datagram->state); return; } @@ -452,7 +442,6 @@ // read new AL status ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_change_state_check_ack; } @@ -469,15 +458,14 @@ ec_datagram_t *datagram = fsm->datagram; ec_slave_t *slave = fsm->slave; - if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { - ec_master_queue_datagram(fsm->slave->master, datagram); - return; - } + if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) + return; if (datagram->state != EC_DATAGRAM_RECEIVED) { fsm->state = ec_fsm_change_state_error; - EC_ERR("Failed to receive state ack check datagram from slave %i.\n", - slave->ring_position); + EC_ERR("Failed to receive state ack check datagram from slave %i" + " (datagram state %i).\n", + slave->ring_position, datagram->state); return; } @@ -521,7 +509,6 @@ // reread new AL status ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); - ec_master_queue_datagram(fsm->slave->master, datagram); fsm->retries = EC_FSM_RETRIES; }