918 { |
918 { |
919 ec_datagram_t *datagram = fsm->datagram; |
919 ec_datagram_t *datagram = fsm->datagram; |
920 ec_slave_t *slave = fsm->slave; |
920 ec_slave_t *slave = fsm->slave; |
921 |
921 |
922 if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { |
922 if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) { |
923 ec_master_queue_datagram(fsm->slave->master, datagram); |
923 ec_master_queue_datagram(slave->master, datagram); |
924 return; |
924 return; |
925 } |
925 } |
926 |
926 |
927 if (datagram->state != EC_DATAGRAM_RECEIVED) { |
927 if (datagram->state != EC_DATAGRAM_RECEIVED) { |
928 fsm->state = ec_fsm_slave_state_error; |
928 fsm->state = ec_fsm_slave_state_error; |
929 EC_ERR("Failed to receive FMMUs datagram for slave %i" |
929 EC_ERR("Failed to receive FMMUs datagram for slave %i" |
930 " (datagram state %i).\n", |
930 " (datagram state %i).\n", |
931 fsm->slave->ring_position, datagram->state); |
931 slave->ring_position, datagram->state); |
932 return; |
932 return; |
933 } |
933 } |
934 |
934 |
935 if (datagram->working_counter != 1) { |
935 if (datagram->working_counter != 1) { |
936 fsm->slave->error_flag = 1; |
936 slave->error_flag = 1; |
937 fsm->state = ec_fsm_slave_state_error; |
937 fsm->state = ec_fsm_slave_state_error; |
938 EC_ERR("Failed to set FMMUs - slave %i did not respond.\n", |
938 EC_ERR("Failed to set FMMUs - slave %i did not respond.\n", |
939 fsm->slave->ring_position); |
939 slave->ring_position); |
940 return; |
940 return; |
941 } |
941 } |
|
942 |
|
943 ec_fsm_slave_conf_enter_sdoconf(fsm); |
|
944 } |
|
945 |
|
946 /*****************************************************************************/ |
|
947 |
|
948 /** |
|
949 */ |
|
950 |
|
951 void ec_fsm_slave_conf_enter_sdoconf(ec_fsm_slave_t *fsm /**< slave state machine */) |
|
952 { |
|
953 ec_slave_t *slave = fsm->slave; |
942 |
954 |
943 // No CoE configuration to be applied? Jump to SAVEOP state. |
955 // No CoE configuration to be applied? Jump to SAVEOP state. |
944 if (list_empty(&slave->sdo_confs)) { // skip SDO configuration |
|
945 ec_fsm_slave_conf_enter_saveop(fsm); |
|
946 return; |
|
947 } |
|
948 |
|
949 ec_fsm_slave_conf_enter_sdoconf(fsm); |
|
950 } |
|
951 |
|
952 /*****************************************************************************/ |
|
953 |
|
954 /** |
|
955 */ |
|
956 |
|
957 void ec_fsm_slave_conf_enter_sdoconf(ec_fsm_slave_t *fsm /**< slave state machine */) |
|
958 { |
|
959 ec_slave_t *slave = fsm->slave; |
|
960 |
|
961 if (list_empty(&slave->sdo_confs)) { // skip SDO configuration |
956 if (list_empty(&slave->sdo_confs)) { // skip SDO configuration |
962 ec_fsm_slave_conf_enter_saveop(fsm); |
957 ec_fsm_slave_conf_enter_saveop(fsm); |
963 return; |
958 return; |
964 } |
959 } |
965 |
960 |