equal
deleted
inserted
replaced
282 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
282 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
283 return; |
283 return; |
284 } |
284 } |
285 |
285 |
286 // finished reading PDO configuration |
286 // finished reading PDO configuration |
287 |
287 |
288 ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos); |
288 ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos); |
289 ec_pdo_list_clear_pdos(&fsm->pdos); |
289 ec_pdo_list_clear_pdos(&fsm->pdos); |
290 |
290 |
291 // next sync manager |
291 // next sync manager |
292 ec_fsm_pdo_read_action_next_sync(fsm); |
292 ec_fsm_pdo_read_action_next_sync(fsm); |
387 ec_pdo_t *ec_fsm_pdo_conf_action_next_pdo( |
387 ec_pdo_t *ec_fsm_pdo_conf_action_next_pdo( |
388 const ec_fsm_pdo_t *fsm, /**< PDO configuration state machine. */ |
388 const ec_fsm_pdo_t *fsm, /**< PDO configuration state machine. */ |
389 const struct list_head *list /**< current PDO list item */ |
389 const struct list_head *list /**< current PDO list item */ |
390 ) |
390 ) |
391 { |
391 { |
392 list = list->next; |
392 list = list->next; |
393 if (list == &fsm->pdos.list) |
393 if (list == &fsm->pdos.list) |
394 return NULL; // no next PDO |
394 return NULL; // no next PDO |
395 return list_entry(list, ec_pdo_t, list); |
395 return list_entry(list, ec_pdo_t, list); |
396 } |
396 } |
397 |
397 |
404 ) |
404 ) |
405 { |
405 { |
406 fsm->sync_index++; |
406 fsm->sync_index++; |
407 |
407 |
408 for (; fsm->sync_index < EC_MAX_SYNC_MANAGERS; fsm->sync_index++) { |
408 for (; fsm->sync_index < EC_MAX_SYNC_MANAGERS; fsm->sync_index++) { |
409 if (!fsm->slave->config) { |
409 if (!fsm->slave->config) { |
410 // slave configuration removed in the meantime |
410 // slave configuration removed in the meantime |
411 fsm->state = ec_fsm_pdo_state_error; |
411 fsm->state = ec_fsm_pdo_state_error; |
412 return; |
412 return; |
413 } |
413 } |
414 |
414 |
416 &fsm->slave->config->sync_configs[fsm->sync_index].pdos)) |
416 &fsm->slave->config->sync_configs[fsm->sync_index].pdos)) |
417 { |
417 { |
418 fsm->state = ec_fsm_pdo_state_error; |
418 fsm->state = ec_fsm_pdo_state_error; |
419 return; |
419 return; |
420 } |
420 } |
421 |
421 |
422 if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) { |
422 if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) { |
423 if (!list_empty(&fsm->pdos.list)) |
423 if (!list_empty(&fsm->pdos.list)) |
424 EC_SLAVE_WARN(fsm->slave, "PDOs configured for SM%u," |
424 EC_SLAVE_WARN(fsm->slave, "PDOs configured for SM%u," |
425 " but slave does not provide the" |
425 " but slave does not provide the" |
426 " sync manager information!\n", |
426 " sync manager information!\n", |
462 } |
462 } |
463 |
463 |
464 if (list_empty(&fsm->slave_pdo.entries)) { |
464 if (list_empty(&fsm->slave_pdo.entries)) { |
465 EC_SLAVE_DBG(fsm->slave, 1, "Reading mapping of PDO 0x%04X.\n", |
465 EC_SLAVE_DBG(fsm->slave, 1, "Reading mapping of PDO 0x%04X.\n", |
466 fsm->pdo->index); |
466 fsm->pdo->index); |
467 |
467 |
468 // pdo mapping is unknown; start loading it |
468 // pdo mapping is unknown; start loading it |
469 ec_fsm_pdo_entry_start_reading(&fsm->fsm_pdo_entry, fsm->slave, |
469 ec_fsm_pdo_entry_start_reading(&fsm->fsm_pdo_entry, fsm->slave, |
470 &fsm->slave_pdo); |
470 &fsm->slave_pdo); |
471 fsm->state = ec_fsm_pdo_conf_state_read_mapping; |
471 fsm->state = ec_fsm_pdo_conf_state_read_mapping; |
472 fsm->state(fsm); // execute immediately |
472 fsm->state(fsm); // execute immediately |
637 |
637 |
638 // the sync manager's assigned PDOs have been cleared |
638 // the sync manager's assigned PDOs have been cleared |
639 ec_pdo_list_clear_pdos(&fsm->sync->pdos); |
639 ec_pdo_list_clear_pdos(&fsm->sync->pdos); |
640 |
640 |
641 // assign all PDOs belonging to the current sync manager |
641 // assign all PDOs belonging to the current sync manager |
642 |
642 |
643 // find first PDO |
643 // find first PDO |
644 if (!(fsm->pdo = ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdos.list))) { |
644 if (!(fsm->pdo = ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdos.list))) { |
645 |
645 |
646 // check for mapping to be altered |
646 // check for mapping to be altered |
647 ec_fsm_pdo_conf_action_next_sync(fsm); |
647 ec_fsm_pdo_conf_action_next_sync(fsm); |
667 0x1C10 + fsm->sync_index, fsm->pdo_pos); |
667 0x1C10 + fsm->sync_index, fsm->pdo_pos); |
668 ecrt_sdo_request_write(&fsm->request); |
668 ecrt_sdo_request_write(&fsm->request); |
669 |
669 |
670 EC_SLAVE_DBG(fsm->slave, 1, "Assigning PDO 0x%04X at position %u.\n", |
670 EC_SLAVE_DBG(fsm->slave, 1, "Assigning PDO 0x%04X at position %u.\n", |
671 fsm->pdo->index, fsm->pdo_pos); |
671 fsm->pdo->index, fsm->pdo_pos); |
672 |
672 |
673 fsm->state = ec_fsm_pdo_conf_state_assign_pdo; |
673 fsm->state = ec_fsm_pdo_conf_state_assign_pdo; |
674 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
674 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
675 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
675 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
676 } |
676 } |
677 |
677 |
704 ecrt_sdo_request_write(&fsm->request); |
704 ecrt_sdo_request_write(&fsm->request); |
705 |
705 |
706 EC_SLAVE_DBG(fsm->slave, 1, |
706 EC_SLAVE_DBG(fsm->slave, 1, |
707 "Setting number of assigned PDOs to %u.\n", |
707 "Setting number of assigned PDOs to %u.\n", |
708 fsm->pdo_pos); |
708 fsm->pdo_pos); |
709 |
709 |
710 fsm->state = ec_fsm_pdo_conf_state_set_pdo_count; |
710 fsm->state = ec_fsm_pdo_conf_state_set_pdo_count; |
711 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
711 ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request); |
712 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
712 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
713 return; |
713 return; |
714 } |
714 } |
715 |
715 |
716 // add next PDO to assignment |
716 // add next PDO to assignment |
717 fsm->pdo_pos++; |
717 fsm->pdo_pos++; |
718 ec_fsm_pdo_conf_action_assign_pdo(fsm); |
718 ec_fsm_pdo_conf_action_assign_pdo(fsm); |
719 } |
719 } |
720 |
720 |
721 /*****************************************************************************/ |
721 /*****************************************************************************/ |
722 |
722 |
723 /** Set the number of assigned PDOs. |
723 /** Set the number of assigned PDOs. |
724 */ |
724 */ |
725 void ec_fsm_pdo_conf_state_set_pdo_count( |
725 void ec_fsm_pdo_conf_state_set_pdo_count( |