40 |
40 |
41 #include "fsm_pdo_entry.h" |
41 #include "fsm_pdo_entry.h" |
42 |
42 |
43 /*****************************************************************************/ |
43 /*****************************************************************************/ |
44 |
44 |
45 void ec_fsm_pdo_entry_read_state_start(ec_fsm_pdo_entry_t *); |
45 void ec_fsm_pdo_entry_read_state_start(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
46 void ec_fsm_pdo_entry_read_state_count(ec_fsm_pdo_entry_t *); |
46 void ec_fsm_pdo_entry_read_state_count(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
47 void ec_fsm_pdo_entry_read_state_entry(ec_fsm_pdo_entry_t *); |
47 void ec_fsm_pdo_entry_read_state_entry(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
48 |
48 |
49 void ec_fsm_pdo_entry_read_action_next(ec_fsm_pdo_entry_t *); |
49 void ec_fsm_pdo_entry_read_action_next(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
50 |
50 |
51 void ec_fsm_pdo_entry_conf_state_start(ec_fsm_pdo_entry_t *); |
51 void ec_fsm_pdo_entry_conf_state_start(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
52 void ec_fsm_pdo_entry_conf_state_zero_entry_count(ec_fsm_pdo_entry_t *); |
52 void ec_fsm_pdo_entry_conf_state_zero_entry_count(ec_fsm_pdo_entry_t *, |
53 void ec_fsm_pdo_entry_conf_state_map_entry(ec_fsm_pdo_entry_t *); |
53 ec_datagram_t *); |
54 void ec_fsm_pdo_entry_conf_state_set_entry_count(ec_fsm_pdo_entry_t *); |
54 void ec_fsm_pdo_entry_conf_state_map_entry(ec_fsm_pdo_entry_t *, |
55 |
55 ec_datagram_t *); |
56 void ec_fsm_pdo_entry_conf_action_map(ec_fsm_pdo_entry_t *); |
56 void ec_fsm_pdo_entry_conf_state_set_entry_count(ec_fsm_pdo_entry_t *, |
57 |
57 ec_datagram_t *); |
58 void ec_fsm_pdo_entry_state_end(ec_fsm_pdo_entry_t *); |
58 |
59 void ec_fsm_pdo_entry_state_error(ec_fsm_pdo_entry_t *); |
59 void ec_fsm_pdo_entry_conf_action_map(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
|
60 |
|
61 void ec_fsm_pdo_entry_state_end(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
|
62 void ec_fsm_pdo_entry_state_error(ec_fsm_pdo_entry_t *, ec_datagram_t *); |
60 |
63 |
61 /*****************************************************************************/ |
64 /*****************************************************************************/ |
62 |
65 |
63 /** Constructor. |
66 /** Constructor. |
64 */ |
67 */ |
101 |
104 |
102 /** Start reading a PDO's entries. |
105 /** Start reading a PDO's entries. |
103 */ |
106 */ |
104 void ec_fsm_pdo_entry_start_reading( |
107 void ec_fsm_pdo_entry_start_reading( |
105 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
108 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
106 ec_slave_t *slave, /**< slave to configure */ |
109 ec_slave_t *slave, /**< Slave to configure. */ |
107 ec_pdo_t *pdo /**< PDO to read entries for. */ |
110 ec_pdo_t *pdo /**< PDO to read entries for. */ |
108 ) |
111 ) |
109 { |
112 { |
110 fsm->slave = slave; |
113 fsm->slave = slave; |
111 fsm->target_pdo = pdo; |
114 fsm->target_pdo = pdo; |
112 |
115 |
113 ec_pdo_clear_entries(fsm->target_pdo); |
116 ec_pdo_clear_entries(fsm->target_pdo); |
114 |
117 |
115 fsm->state = ec_fsm_pdo_entry_read_state_start; |
118 fsm->state = ec_fsm_pdo_entry_read_state_start; |
116 } |
119 } |
117 |
120 |
118 /*****************************************************************************/ |
121 /*****************************************************************************/ |
119 |
122 |
120 /** Start PDO mapping state machine. |
123 /** Start PDO mapping state machine. |
121 */ |
124 */ |
122 void ec_fsm_pdo_entry_start_configuration( |
125 void ec_fsm_pdo_entry_start_configuration( |
123 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
126 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
124 ec_slave_t *slave, /**< slave to configure */ |
127 ec_slave_t *slave, /**< Slave to configure. */ |
125 const ec_pdo_t *pdo, /**< PDO with the desired entries. */ |
128 const ec_pdo_t *pdo, /**< PDO with the desired entries. */ |
126 const ec_pdo_t *cur_pdo /**< Current PDO mapping. */ |
129 const ec_pdo_t *cur_pdo /**< Current PDO mapping. */ |
127 ) |
130 ) |
128 { |
131 { |
129 fsm->slave = slave; |
132 fsm->slave = slave; |
185 *****************************************************************************/ |
190 *****************************************************************************/ |
186 |
191 |
187 /** Request reading the number of mapped PDO entries. |
192 /** Request reading the number of mapped PDO entries. |
188 */ |
193 */ |
189 void ec_fsm_pdo_entry_read_state_start( |
194 void ec_fsm_pdo_entry_read_state_start( |
190 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
195 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
191 ) |
196 ec_datagram_t *datagram /**< Datagram to use. */ |
192 { |
197 ) |
193 ec_sdo_request_address(&fsm->request, fsm->target_pdo->index, 0); |
198 { |
|
199 ecrt_sdo_request_index(&fsm->request, fsm->target_pdo->index, 0); |
194 ecrt_sdo_request_read(&fsm->request); |
200 ecrt_sdo_request_read(&fsm->request); |
195 |
201 |
196 fsm->state = ec_fsm_pdo_entry_read_state_count; |
202 fsm->state = ec_fsm_pdo_entry_read_state_count; |
197 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
203 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
198 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
204 ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately |
199 } |
205 } |
200 |
206 |
201 /*****************************************************************************/ |
207 /*****************************************************************************/ |
202 |
208 |
203 /** Read number of mapped PDO entries. |
209 /** Read number of mapped PDO entries. |
204 */ |
210 */ |
205 void ec_fsm_pdo_entry_read_state_count( |
211 void ec_fsm_pdo_entry_read_state_count( |
206 ec_fsm_pdo_entry_t *fsm /**< finite state machine */ |
212 ec_fsm_pdo_entry_t *fsm, /**< finite state machine */ |
207 ) |
213 ec_datagram_t *datagram /**< Datagram to use. */ |
208 { |
214 ) |
209 if (ec_fsm_coe_exec(fsm->fsm_coe)) |
215 { |
210 return; |
216 if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) { |
|
217 return; |
|
218 } |
211 |
219 |
212 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
220 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
213 EC_SLAVE_ERR(fsm->slave, |
221 EC_SLAVE_ERR(fsm->slave, |
214 "Failed to read number of mapped PDO entries.\n"); |
222 "Failed to read number of mapped PDO entries.\n"); |
215 fsm->state = ec_fsm_pdo_entry_state_error; |
223 fsm->state = ec_fsm_pdo_entry_state_error; |
229 |
237 |
230 EC_SLAVE_DBG(fsm->slave, 1, "%u PDO entries mapped.\n", fsm->entry_count); |
238 EC_SLAVE_DBG(fsm->slave, 1, "%u PDO entries mapped.\n", fsm->entry_count); |
231 |
239 |
232 // read first PDO entry |
240 // read first PDO entry |
233 fsm->entry_pos = 1; |
241 fsm->entry_pos = 1; |
234 ec_fsm_pdo_entry_read_action_next(fsm); |
242 ec_fsm_pdo_entry_read_action_next(fsm, datagram); |
235 } |
243 } |
236 |
244 |
237 /*****************************************************************************/ |
245 /*****************************************************************************/ |
238 |
246 |
239 /** Read next PDO entry. |
247 /** Read next PDO entry. |
240 */ |
248 */ |
241 void ec_fsm_pdo_entry_read_action_next( |
249 void ec_fsm_pdo_entry_read_action_next( |
242 ec_fsm_pdo_entry_t *fsm /**< finite state machine */ |
250 ec_fsm_pdo_entry_t *fsm, /**< finite state machine */ |
|
251 ec_datagram_t *datagram /**< Datagram to use. */ |
243 ) |
252 ) |
244 { |
253 { |
245 if (fsm->entry_pos <= fsm->entry_count) { |
254 if (fsm->entry_pos <= fsm->entry_count) { |
246 ec_sdo_request_address(&fsm->request, fsm->target_pdo->index, fsm->entry_pos); |
255 ecrt_sdo_request_index(&fsm->request, fsm->target_pdo->index, |
|
256 fsm->entry_pos); |
247 ecrt_sdo_request_read(&fsm->request); |
257 ecrt_sdo_request_read(&fsm->request); |
248 fsm->state = ec_fsm_pdo_entry_read_state_entry; |
258 fsm->state = ec_fsm_pdo_entry_read_state_entry; |
249 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
259 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
250 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
260 ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately |
251 return; |
261 return; |
252 } |
262 } |
253 |
263 |
254 // finished reading entries. |
264 // finished reading entries. |
255 fsm->state = ec_fsm_pdo_entry_state_end; |
265 fsm->state = ec_fsm_pdo_entry_state_end; |
258 /*****************************************************************************/ |
268 /*****************************************************************************/ |
259 |
269 |
260 /** Read PDO entry information. |
270 /** Read PDO entry information. |
261 */ |
271 */ |
262 void ec_fsm_pdo_entry_read_state_entry( |
272 void ec_fsm_pdo_entry_read_state_entry( |
263 ec_fsm_pdo_entry_t *fsm /**< finite state machine */ |
273 ec_fsm_pdo_entry_t *fsm, /**< finite state machine */ |
264 ) |
274 ec_datagram_t *datagram /**< Datagram to use. */ |
265 { |
275 ) |
266 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
276 { |
|
277 if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) { |
|
278 return; |
|
279 } |
267 |
280 |
268 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
281 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
269 EC_SLAVE_ERR(fsm->slave, "Failed to read mapped PDO entry.\n"); |
282 EC_SLAVE_ERR(fsm->slave, "Failed to read mapped PDO entry.\n"); |
270 fsm->state = ec_fsm_pdo_entry_state_error; |
283 fsm->state = ec_fsm_pdo_entry_state_error; |
271 return; |
284 return; |
312 |
325 |
313 list_add_tail(&pdo_entry->list, &fsm->target_pdo->entries); |
326 list_add_tail(&pdo_entry->list, &fsm->target_pdo->entries); |
314 |
327 |
315 // next PDO entry |
328 // next PDO entry |
316 fsm->entry_pos++; |
329 fsm->entry_pos++; |
317 ec_fsm_pdo_entry_read_action_next(fsm); |
330 ec_fsm_pdo_entry_read_action_next(fsm, datagram); |
318 } |
331 } |
319 } |
332 } |
320 |
333 |
321 /****************************************************************************** |
334 /****************************************************************************** |
322 * Configuration state functions. |
335 * Configuration state functions. |
323 *****************************************************************************/ |
336 *****************************************************************************/ |
324 |
337 |
325 /** Start PDO mapping. |
338 /** Start PDO mapping. |
326 */ |
339 */ |
327 void ec_fsm_pdo_entry_conf_state_start( |
340 void ec_fsm_pdo_entry_conf_state_start( |
328 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
341 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
|
342 ec_datagram_t *datagram /**< Datagram to use. */ |
329 ) |
343 ) |
330 { |
344 { |
331 if (ec_sdo_request_alloc(&fsm->request, 4)) { |
345 if (ec_sdo_request_alloc(&fsm->request, 4)) { |
332 fsm->state = ec_fsm_pdo_entry_state_error; |
346 fsm->state = ec_fsm_pdo_entry_state_error; |
333 return; |
347 return; |
334 } |
348 } |
335 |
349 |
336 // set mapped PDO entry count to zero |
350 // set mapped PDO entry count to zero |
337 EC_WRITE_U8(fsm->request.data, 0); |
351 EC_WRITE_U8(fsm->request.data, 0); |
338 fsm->request.data_size = 1; |
352 fsm->request.data_size = 1; |
339 ec_sdo_request_address(&fsm->request, fsm->source_pdo->index, 0); |
353 ecrt_sdo_request_index(&fsm->request, fsm->source_pdo->index, 0); |
340 ecrt_sdo_request_write(&fsm->request); |
354 ecrt_sdo_request_write(&fsm->request); |
341 |
355 |
342 EC_SLAVE_DBG(fsm->slave, 1, "Setting entry count to zero.\n"); |
356 EC_SLAVE_DBG(fsm->slave, 1, "Setting entry count to zero.\n"); |
343 |
357 |
344 fsm->state = ec_fsm_pdo_entry_conf_state_zero_entry_count; |
358 fsm->state = ec_fsm_pdo_entry_conf_state_zero_entry_count; |
345 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
359 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
346 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
360 ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately |
347 } |
361 } |
348 |
362 |
349 /*****************************************************************************/ |
363 /*****************************************************************************/ |
350 |
364 |
351 /** Process next PDO entry. |
365 /** Process next PDO entry. |
|
366 * |
|
367 * \return Next PDO entry, or NULL. |
352 */ |
368 */ |
353 ec_pdo_entry_t *ec_fsm_pdo_entry_conf_next_entry( |
369 ec_pdo_entry_t *ec_fsm_pdo_entry_conf_next_entry( |
354 const ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
370 const ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
355 const struct list_head *list /**< current entry list item */ |
371 const struct list_head *list /**< current entry list item */ |
356 ) |
372 ) |
357 { |
373 { |
358 list = list->next; |
374 list = list->next; |
359 if (list == &fsm->source_pdo->entries) |
375 if (list == &fsm->source_pdo->entries) |
360 return NULL; // no next entry |
376 return NULL; // no next entry |
361 return list_entry(list, ec_pdo_entry_t, list); |
377 return list_entry(list, ec_pdo_entry_t, list); |
362 } |
378 } |
363 |
379 |
364 /*****************************************************************************/ |
380 /*****************************************************************************/ |
365 |
381 |
366 /** Set the number of mapped entries to zero. |
382 /** Set the number of mapped entries to zero. |
367 */ |
383 */ |
368 void ec_fsm_pdo_entry_conf_state_zero_entry_count( |
384 void ec_fsm_pdo_entry_conf_state_zero_entry_count( |
369 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
385 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
370 ) |
386 ec_datagram_t *datagram /**< Datagram to use. */ |
371 { |
387 ) |
372 if (ec_fsm_coe_exec(fsm->fsm_coe)) |
388 { |
373 return; |
389 if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) { |
|
390 return; |
|
391 } |
374 |
392 |
375 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
393 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
376 EC_SLAVE_WARN(fsm->slave, "Failed to clear PDO mapping.\n"); |
394 EC_SLAVE_WARN(fsm->slave, "Failed to clear PDO mapping.\n"); |
377 EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_entry_print(fsm); |
395 EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_entry_print(fsm); |
378 fsm->state = ec_fsm_pdo_entry_state_error; |
396 fsm->state = ec_fsm_pdo_entry_state_error; |
380 } |
398 } |
381 |
399 |
382 // find first entry |
400 // find first entry |
383 if (!(fsm->entry = ec_fsm_pdo_entry_conf_next_entry( |
401 if (!(fsm->entry = ec_fsm_pdo_entry_conf_next_entry( |
384 fsm, &fsm->source_pdo->entries))) { |
402 fsm, &fsm->source_pdo->entries))) { |
385 |
403 |
386 EC_SLAVE_DBG(fsm->slave, 1, "No entries to map.\n"); |
404 EC_SLAVE_DBG(fsm->slave, 1, "No entries to map.\n"); |
387 |
405 |
388 fsm->state = ec_fsm_pdo_entry_state_end; // finished |
406 fsm->state = ec_fsm_pdo_entry_state_end; // finished |
389 return; |
407 return; |
390 } |
408 } |
391 |
409 |
392 // add first entry |
410 // add first entry |
393 fsm->entry_pos = 1; |
411 fsm->entry_pos = 1; |
394 ec_fsm_pdo_entry_conf_action_map(fsm); |
412 ec_fsm_pdo_entry_conf_action_map(fsm, datagram); |
395 } |
413 } |
396 |
414 |
397 /*****************************************************************************/ |
415 /*****************************************************************************/ |
398 |
416 |
399 /** Starts to add a PDO entry. |
417 /** Starts to add a PDO entry. |
400 */ |
418 */ |
401 void ec_fsm_pdo_entry_conf_action_map( |
419 void ec_fsm_pdo_entry_conf_action_map( |
402 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
420 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
|
421 ec_datagram_t *datagram /**< Datagram to use. */ |
403 ) |
422 ) |
404 { |
423 { |
405 uint32_t value; |
424 uint32_t value; |
406 |
425 |
407 EC_SLAVE_DBG(fsm->slave, 1, "Mapping PDO entry 0x%04X:%02X (%u bit)" |
426 EC_SLAVE_DBG(fsm->slave, 1, "Mapping PDO entry 0x%04X:%02X (%u bit)" |
411 |
430 |
412 value = fsm->entry->index << 16 |
431 value = fsm->entry->index << 16 |
413 | fsm->entry->subindex << 8 | fsm->entry->bit_length; |
432 | fsm->entry->subindex << 8 | fsm->entry->bit_length; |
414 EC_WRITE_U32(fsm->request.data, value); |
433 EC_WRITE_U32(fsm->request.data, value); |
415 fsm->request.data_size = 4; |
434 fsm->request.data_size = 4; |
416 ec_sdo_request_address(&fsm->request, fsm->source_pdo->index, fsm->entry_pos); |
435 ecrt_sdo_request_index(&fsm->request, fsm->source_pdo->index, |
|
436 fsm->entry_pos); |
417 ecrt_sdo_request_write(&fsm->request); |
437 ecrt_sdo_request_write(&fsm->request); |
418 |
438 |
419 fsm->state = ec_fsm_pdo_entry_conf_state_map_entry; |
439 fsm->state = ec_fsm_pdo_entry_conf_state_map_entry; |
420 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
440 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
421 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
441 ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately |
422 } |
442 } |
423 |
443 |
424 /*****************************************************************************/ |
444 /*****************************************************************************/ |
425 |
445 |
426 /** Add a PDO entry. |
446 /** Add a PDO entry. |
427 */ |
447 */ |
428 void ec_fsm_pdo_entry_conf_state_map_entry( |
448 void ec_fsm_pdo_entry_conf_state_map_entry( |
429 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
449 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
430 ) |
450 ec_datagram_t *datagram /**< Datagram to use. */ |
431 { |
451 ) |
432 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
452 { |
|
453 if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) { |
|
454 return; |
|
455 } |
433 |
456 |
434 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
457 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
435 EC_SLAVE_WARN(fsm->slave, "Failed to map PDO entry" |
458 EC_SLAVE_WARN(fsm->slave, "Failed to map PDO entry" |
436 " 0x%04X:%02X (%u bit) to position %u.\n", |
459 " 0x%04X:%02X (%u bit) to position %u.\n", |
437 fsm->entry->index, fsm->entry->subindex, |
460 fsm->entry->index, fsm->entry->subindex, |
446 fsm, &fsm->entry->list))) { |
469 fsm, &fsm->entry->list))) { |
447 |
470 |
448 // No more entries to add. Write entry count. |
471 // No more entries to add. Write entry count. |
449 EC_WRITE_U8(fsm->request.data, fsm->entry_pos); |
472 EC_WRITE_U8(fsm->request.data, fsm->entry_pos); |
450 fsm->request.data_size = 1; |
473 fsm->request.data_size = 1; |
451 ec_sdo_request_address(&fsm->request, fsm->source_pdo->index, 0); |
474 ecrt_sdo_request_index(&fsm->request, fsm->source_pdo->index, 0); |
452 ecrt_sdo_request_write(&fsm->request); |
475 ecrt_sdo_request_write(&fsm->request); |
453 |
476 |
454 EC_SLAVE_DBG(fsm->slave, 1, "Setting number of PDO entries to %u.\n", |
477 EC_SLAVE_DBG(fsm->slave, 1, "Setting number of PDO entries to %u.\n", |
455 fsm->entry_pos); |
478 fsm->entry_pos); |
456 |
479 |
457 fsm->state = ec_fsm_pdo_entry_conf_state_set_entry_count; |
480 fsm->state = ec_fsm_pdo_entry_conf_state_set_entry_count; |
458 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
481 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
459 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
482 ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately |
460 return; |
483 return; |
461 } |
484 } |
462 |
485 |
463 // add next entry |
486 // add next entry |
464 fsm->entry_pos++; |
487 fsm->entry_pos++; |
465 ec_fsm_pdo_entry_conf_action_map(fsm); |
488 ec_fsm_pdo_entry_conf_action_map(fsm, datagram); |
466 } |
489 } |
467 |
490 |
468 /*****************************************************************************/ |
491 /*****************************************************************************/ |
469 |
492 |
470 /** Set the number of entries. |
493 /** Set the number of entries. |
471 */ |
494 */ |
472 void ec_fsm_pdo_entry_conf_state_set_entry_count( |
495 void ec_fsm_pdo_entry_conf_state_set_entry_count( |
473 ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ |
496 ec_fsm_pdo_entry_t *fsm, /**< PDO mapping state machine. */ |
474 ) |
497 ec_datagram_t *datagram /**< Datagram to use. */ |
475 { |
498 ) |
476 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
499 { |
|
500 if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) { |
|
501 return; |
|
502 } |
477 |
503 |
478 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
504 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
479 EC_SLAVE_WARN(fsm->slave, "Failed to set number of entries.\n"); |
505 EC_SLAVE_WARN(fsm->slave, "Failed to set number of entries.\n"); |
480 EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_entry_print(fsm); |
506 EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_entry_print(fsm); |
481 fsm->state = ec_fsm_pdo_entry_state_error; |
507 fsm->state = ec_fsm_pdo_entry_state_error; |