equal
deleted
inserted
replaced
42 #include "master.h" |
42 #include "master.h" |
43 #include "mailbox.h" |
43 #include "mailbox.h" |
44 #include "sdo_request.h" |
44 #include "sdo_request.h" |
45 #include "fsm_coe_map.h" |
45 #include "fsm_coe_map.h" |
46 |
46 |
|
47 /** Retry reading the number of assigned Pdos if this time is not elapsed. |
|
48 */ |
|
49 #define EC_FSM_COE_MAP_TIMEOUT 5 |
|
50 |
47 /*****************************************************************************/ |
51 /*****************************************************************************/ |
48 |
52 |
49 void ec_fsm_coe_map_state_start(ec_fsm_coe_map_t *); |
53 void ec_fsm_coe_map_state_start(ec_fsm_coe_map_t *); |
50 void ec_fsm_coe_map_state_pdo_count(ec_fsm_coe_map_t *); |
54 void ec_fsm_coe_map_state_pdo_count(ec_fsm_coe_map_t *); |
51 void ec_fsm_coe_map_state_pdo(ec_fsm_coe_map_t *); |
55 void ec_fsm_coe_map_state_pdo(ec_fsm_coe_map_t *); |
181 |
185 |
182 ec_pdo_list_clear_pdos(&fsm->pdos); |
186 ec_pdo_list_clear_pdos(&fsm->pdos); |
183 |
187 |
184 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0); |
188 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0); |
185 ecrt_sdo_request_read(&fsm->request); |
189 ecrt_sdo_request_read(&fsm->request); |
186 fsm->retries = 5; |
190 fsm->jiffies_start = jiffies; |
187 fsm->state = ec_fsm_coe_map_state_pdo_count; |
191 fsm->state = ec_fsm_coe_map_state_pdo_count; |
188 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
192 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
189 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
193 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
190 return; |
194 return; |
191 } |
195 } |
208 ) |
212 ) |
209 { |
213 { |
210 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
214 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
211 |
215 |
212 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
216 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
213 if (fsm->retries--) { |
217 if (jiffies - fsm->jiffies_start < HZ * EC_FSM_COE_MAP_TIMEOUT) { |
214 if (fsm->slave->master->debug_level) |
218 if (fsm->slave->master->debug_level) |
215 EC_DBG("Failed to read number of assigned Pdos from " |
219 EC_DBG("Failed to read number of assigned Pdos from " |
216 "slave %u. Retrying...\n", fsm->slave->ring_position); |
220 "slave %u. Retrying...\n", fsm->slave->ring_position); |
217 ecrt_sdo_request_read(&fsm->request); |
221 ecrt_sdo_request_read(&fsm->request); |
218 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
222 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |