equal
deleted
inserted
replaced
59 void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *); |
59 void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *); |
60 void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *); |
60 void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *); |
61 |
61 |
62 /*****************************************************************************/ |
62 /*****************************************************************************/ |
63 |
63 |
|
64 /** Sdo upload timeout in ms for reading Pdo assigment/mapping. |
|
65 */ |
|
66 #define EC_FSM_COE_MAP_UPLOAD_TIMEOUT 3000 |
|
67 |
|
68 /*****************************************************************************/ |
|
69 |
64 /** |
70 /** |
65 Constructor. |
71 Constructor. |
66 */ |
72 */ |
67 |
73 |
68 void ec_fsm_coe_map_init( |
74 void ec_fsm_coe_map_init( |
71 ) |
77 ) |
72 { |
78 { |
73 fsm->fsm_coe = fsm_coe; |
79 fsm->fsm_coe = fsm_coe; |
74 fsm->state = NULL; |
80 fsm->state = NULL; |
75 ec_sdo_request_init(&fsm->request); |
81 ec_sdo_request_init(&fsm->request); |
|
82 fsm->request.response_timeout = EC_FSM_COE_MAP_UPLOAD_TIMEOUT; |
76 ec_pdo_list_init(&fsm->pdos); |
83 ec_pdo_list_init(&fsm->pdos); |
77 } |
84 } |
78 |
85 |
79 /*****************************************************************************/ |
86 /*****************************************************************************/ |
80 |
87 |
180 fsm->sync->index, slave->ring_position); |
187 fsm->sync->index, slave->ring_position); |
181 |
188 |
182 ec_pdo_list_clear_pdos(&fsm->pdos); |
189 ec_pdo_list_clear_pdos(&fsm->pdos); |
183 |
190 |
184 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0); |
191 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0); |
185 fsm->request.response_timeout = 10000; |
|
186 ecrt_sdo_request_read(&fsm->request); |
192 ecrt_sdo_request_read(&fsm->request); |
187 fsm->state = ec_fsm_coe_map_state_pdo_count; |
193 fsm->state = ec_fsm_coe_map_state_pdo_count; |
188 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
194 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
189 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
195 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
190 return; |
196 return; |
245 ) |
251 ) |
246 { |
252 { |
247 if (fsm->sync_subindex <= fsm->sync_subindices) { |
253 if (fsm->sync_subindex <= fsm->sync_subindices) { |
248 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, |
254 ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, |
249 fsm->sync_subindex); |
255 fsm->sync_subindex); |
250 fsm->request.response_timeout = 5000; |
|
251 ecrt_sdo_request_read(&fsm->request); |
256 ecrt_sdo_request_read(&fsm->request); |
252 fsm->state = ec_fsm_coe_map_state_pdo; |
257 fsm->state = ec_fsm_coe_map_state_pdo; |
253 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
258 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
254 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
259 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
255 return; |
260 return; |
312 EC_DBG(" Pdo 0x%04X.\n", fsm->pdo->index); |
317 EC_DBG(" Pdo 0x%04X.\n", fsm->pdo->index); |
313 |
318 |
314 list_add_tail(&fsm->pdo->list, &fsm->pdos.list); |
319 list_add_tail(&fsm->pdo->list, &fsm->pdos.list); |
315 |
320 |
316 ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0); |
321 ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0); |
317 fsm->request.response_timeout = 5000; |
|
318 ecrt_sdo_request_read(&fsm->request); |
322 ecrt_sdo_request_read(&fsm->request); |
319 fsm->state = ec_fsm_coe_map_state_pdo_entry_count; |
323 fsm->state = ec_fsm_coe_map_state_pdo_entry_count; |
320 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
324 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
321 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
325 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
322 } |
326 } |
368 ec_fsm_coe_map_t *fsm /**< finite state machine */ |
372 ec_fsm_coe_map_t *fsm /**< finite state machine */ |
369 ) |
373 ) |
370 { |
374 { |
371 if (fsm->pdo_subindex <= fsm->pdo_subindices) { |
375 if (fsm->pdo_subindex <= fsm->pdo_subindices) { |
372 ec_sdo_request_address(&fsm->request, fsm->pdo->index, fsm->pdo_subindex); |
376 ec_sdo_request_address(&fsm->request, fsm->pdo->index, fsm->pdo_subindex); |
373 fsm->request.response_timeout = 5000; |
|
374 ecrt_sdo_request_read(&fsm->request); |
377 ecrt_sdo_request_read(&fsm->request); |
375 fsm->state = ec_fsm_coe_map_state_pdo_entry; |
378 fsm->state = ec_fsm_coe_map_state_pdo_entry; |
376 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
379 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
377 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
380 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
378 return; |
381 return; |