equal
deleted
inserted
replaced
59 void ec_fsm_slave_config_state_op(ec_fsm_slave_config_t *); |
59 void ec_fsm_slave_config_state_op(ec_fsm_slave_config_t *); |
60 |
60 |
61 void ec_fsm_slave_config_enter_mbox_sync(ec_fsm_slave_config_t *); |
61 void ec_fsm_slave_config_enter_mbox_sync(ec_fsm_slave_config_t *); |
62 void ec_fsm_slave_config_enter_preop(ec_fsm_slave_config_t *); |
62 void ec_fsm_slave_config_enter_preop(ec_fsm_slave_config_t *); |
63 void ec_fsm_slave_config_enter_sdo_conf(ec_fsm_slave_config_t *); |
63 void ec_fsm_slave_config_enter_sdo_conf(ec_fsm_slave_config_t *); |
|
64 void ec_fsm_slave_config_enter_pdo_conf(ec_fsm_slave_config_t *); |
64 void ec_fsm_slave_config_enter_pdo_sync(ec_fsm_slave_config_t *); |
65 void ec_fsm_slave_config_enter_pdo_sync(ec_fsm_slave_config_t *); |
65 void ec_fsm_slave_config_enter_fmmu(ec_fsm_slave_config_t *); |
66 void ec_fsm_slave_config_enter_fmmu(ec_fsm_slave_config_t *); |
66 void ec_fsm_slave_config_enter_safeop(ec_fsm_slave_config_t *); |
67 void ec_fsm_slave_config_enter_safeop(ec_fsm_slave_config_t *); |
67 |
68 |
68 void ec_fsm_slave_config_state_end(ec_fsm_slave_config_t *); |
69 void ec_fsm_slave_config_state_end(ec_fsm_slave_config_t *); |
438 { |
439 { |
439 ec_slave_t *slave = fsm->slave; |
440 ec_slave_t *slave = fsm->slave; |
440 |
441 |
441 // No CoE configuration to be applied? |
442 // No CoE configuration to be applied? |
442 if (list_empty(&slave->config->sdo_configs)) { // skip Sdo configuration |
443 if (list_empty(&slave->config->sdo_configs)) { // skip Sdo configuration |
443 ec_fsm_slave_config_enter_pdo_sync(fsm); |
444 ec_fsm_slave_config_enter_pdo_conf(fsm); |
444 return; |
445 return; |
445 } |
446 } |
446 |
447 |
447 // start Sdo configuration |
448 // start Sdo configuration |
448 fsm->state = ec_fsm_slave_config_state_sdo_conf; |
449 fsm->state = ec_fsm_slave_config_state_sdo_conf; |
480 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
481 ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately |
481 return; |
482 return; |
482 } |
483 } |
483 |
484 |
484 // All Sdos are now configured. |
485 // All Sdos are now configured. |
|
486 ec_fsm_slave_config_enter_pdo_conf(fsm); |
|
487 } |
|
488 |
|
489 /*****************************************************************************/ |
|
490 |
|
491 /** PDO_CONF entry function. |
|
492 */ |
|
493 void ec_fsm_slave_config_enter_pdo_conf( |
|
494 ec_fsm_slave_config_t *fsm /**< slave state machine */ |
|
495 ) |
|
496 { |
|
497 // Start configuring Pdos |
|
498 ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave); |
|
499 fsm->state = ec_fsm_slave_config_state_pdo_conf; |
|
500 fsm->state(fsm); // execute immediately |
|
501 } |
|
502 |
|
503 /*****************************************************************************/ |
|
504 |
|
505 /** Slave configuration state: PDO_CONF. |
|
506 */ |
|
507 void ec_fsm_slave_config_state_pdo_conf( |
|
508 ec_fsm_slave_config_t *fsm /**< slave state machine */ |
|
509 ) |
|
510 { |
|
511 if (ec_fsm_pdo_exec(fsm->fsm_pdo)) |
|
512 return; |
|
513 |
|
514 if (!ec_fsm_pdo_success(fsm->fsm_pdo)) { |
|
515 EC_WARN("Pdo configuration failed on slave %u.\n", |
|
516 fsm->slave->ring_position); |
|
517 } |
|
518 |
485 ec_fsm_slave_config_enter_pdo_sync(fsm); |
519 ec_fsm_slave_config_enter_pdo_sync(fsm); |
486 } |
520 } |
487 |
521 |
488 /*****************************************************************************/ |
522 /*****************************************************************************/ |
489 |
523 |
507 offset = 0; |
541 offset = 0; |
508 } |
542 } |
509 |
543 |
510 if (slave->sii.sync_count <= offset) { |
544 if (slave->sii.sync_count <= offset) { |
511 // no Pdo sync managers to configure |
545 // no Pdo sync managers to configure |
512 ec_fsm_slave_config_enter_safeop(fsm); |
546 ec_fsm_slave_config_enter_fmmu(fsm); |
513 return; |
547 return; |
514 } |
548 } |
515 |
549 |
516 num_pdo_syncs = slave->sii.sync_count - offset; |
550 num_pdo_syncs = slave->sii.sync_count - offset; |
517 |
551 |
561 fsm->state = ec_fsm_slave_config_state_error; |
595 fsm->state = ec_fsm_slave_config_state_error; |
562 EC_ERR("Failed to set process data sync managers of slave %u: ", |
596 EC_ERR("Failed to set process data sync managers of slave %u: ", |
563 slave->ring_position); |
597 slave->ring_position); |
564 ec_datagram_print_wc_error(datagram); |
598 ec_datagram_print_wc_error(datagram); |
565 return; |
599 return; |
566 } |
|
567 |
|
568 // Start configuring Pdos |
|
569 ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave); |
|
570 fsm->state = ec_fsm_slave_config_state_pdo_conf; |
|
571 fsm->state(fsm); // execute immediately |
|
572 } |
|
573 |
|
574 /*****************************************************************************/ |
|
575 |
|
576 /** Slave configuration state: PDO_CONF. |
|
577 */ |
|
578 void ec_fsm_slave_config_state_pdo_conf( |
|
579 ec_fsm_slave_config_t *fsm /**< slave state machine */ |
|
580 ) |
|
581 { |
|
582 if (ec_fsm_pdo_exec(fsm->fsm_pdo)) |
|
583 return; |
|
584 |
|
585 if (!ec_fsm_pdo_success(fsm->fsm_pdo)) { |
|
586 EC_WARN("Pdo configuration failed on slave %u.\n", |
|
587 fsm->slave->ring_position); |
|
588 } |
600 } |
589 |
601 |
590 ec_fsm_slave_config_enter_fmmu(fsm); |
602 ec_fsm_slave_config_enter_fmmu(fsm); |
591 } |
603 } |
592 |
604 |