equal
deleted
inserted
replaced
2140 |
2140 |
2141 void ec_fsm_coe_down_response(ec_fsm_t *fsm /**< finite state machine */) |
2141 void ec_fsm_coe_down_response(ec_fsm_t *fsm /**< finite state machine */) |
2142 { |
2142 { |
2143 ec_datagram_t *datagram = &fsm->datagram; |
2143 ec_datagram_t *datagram = &fsm->datagram; |
2144 ec_slave_t *slave = fsm->slave; |
2144 ec_slave_t *slave = fsm->slave; |
2145 uint8_t *data, mbox_type; |
2145 uint8_t *data, mbox_prot; |
2146 size_t rec_size; |
2146 size_t rec_size; |
2147 ec_sdo_data_t *sdodata = fsm->sdodata; |
2147 ec_sdo_data_t *sdodata = fsm->sdodata; |
2148 |
2148 |
2149 if (datagram->state != EC_DATAGRAM_RECEIVED |
2149 if (datagram->state != EC_DATAGRAM_RECEIVED |
2150 || datagram->working_counter != 1) { |
2150 || datagram->working_counter != 1) { |
2152 EC_ERR("Reception of CoE download response failed.\n"); |
2152 EC_ERR("Reception of CoE download response failed.\n"); |
2153 return; |
2153 return; |
2154 } |
2154 } |
2155 |
2155 |
2156 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
2156 if (!(data = ec_slave_mbox_fetch(slave, datagram, |
2157 &mbox_type, &rec_size))) { |
2157 &mbox_prot, &rec_size))) { |
2158 fsm->coe_state = ec_fsm_error; |
2158 fsm->coe_state = ec_fsm_error; |
2159 return; |
2159 return; |
2160 } |
2160 } |
2161 |
2161 |
2162 if (mbox_type != 0x03) { |
2162 if (mbox_prot != 0x03) { // CoE |
2163 EC_WARN("Received mailbox protocol 0x%02X as a response." |
2163 EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot); |
2164 " Trying again.\n", mbox_type); |
2164 fsm->coe_state = ec_fsm_error; |
2165 fsm->coe_start = get_cycles(); |
|
2166 ec_slave_mbox_prepare_check(slave, datagram); // can not fail. |
|
2167 ec_master_queue_datagram(fsm->master, datagram); |
|
2168 fsm->coe_state = ec_fsm_coe_down_check; |
|
2169 return; |
2165 return; |
2170 } |
2166 } |
2171 |
2167 |
2172 if (rec_size < 6) { |
2168 if (rec_size < 6) { |
2173 fsm->coe_state = ec_fsm_error; |
2169 fsm->coe_state = ec_fsm_error; |