70 void ec_fsm_slave_scan_init( |
70 void ec_fsm_slave_scan_init( |
71 ec_fsm_slave_scan_t *fsm, /**< Slave scanning state machine. */ |
71 ec_fsm_slave_scan_t *fsm, /**< Slave scanning state machine. */ |
72 ec_datagram_t *datagram, /**< Datagram to use. */ |
72 ec_datagram_t *datagram, /**< Datagram to use. */ |
73 ec_fsm_slave_config_t *fsm_slave_config, /**< Slave configuration |
73 ec_fsm_slave_config_t *fsm_slave_config, /**< Slave configuration |
74 state machine to use. */ |
74 state machine to use. */ |
75 ec_fsm_coe_map_t *fsm_coe_map /**< Pdo mapping state machine to use. |
75 ec_fsm_pdo_t *fsm_pdo /**< Pdo configuration machine to use. */ |
76 */ |
|
77 ) |
76 ) |
78 { |
77 { |
79 fsm->datagram = datagram; |
78 fsm->datagram = datagram; |
80 fsm->fsm_slave_config = fsm_slave_config; |
79 fsm->fsm_slave_config = fsm_slave_config; |
81 fsm->fsm_coe_map = fsm_coe_map; |
80 fsm->fsm_pdo = fsm_pdo; |
82 |
81 |
83 // init sub state machines |
82 // init sub state machines |
84 ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram); |
83 ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram); |
85 } |
84 } |
86 |
85 |
631 |
630 |
632 if (slave->master->debug_level) |
631 if (slave->master->debug_level) |
633 EC_DBG("Scanning Pdo assignment and mapping of slave %u.\n", |
632 EC_DBG("Scanning Pdo assignment and mapping of slave %u.\n", |
634 slave->ring_position); |
633 slave->ring_position); |
635 fsm->state = ec_fsm_slave_scan_state_pdos; |
634 fsm->state = ec_fsm_slave_scan_state_pdos; |
636 ec_fsm_coe_map_start(fsm->fsm_coe_map, slave); |
635 ec_fsm_pdo_start_reading(fsm->fsm_pdo, slave); |
637 ec_fsm_coe_map_exec(fsm->fsm_coe_map); // execute immediately |
636 ec_fsm_pdo_exec(fsm->fsm_pdo); // execute immediately |
638 } |
637 } |
639 |
638 |
640 /*****************************************************************************/ |
639 /*****************************************************************************/ |
641 |
640 |
642 /** Slave scan state: PDOS. |
641 /** Slave scan state: PDOS. |
643 */ |
642 */ |
644 void ec_fsm_slave_scan_state_pdos( |
643 void ec_fsm_slave_scan_state_pdos( |
645 ec_fsm_slave_scan_t *fsm /**< slave state machine */ |
644 ec_fsm_slave_scan_t *fsm /**< slave state machine */ |
646 ) |
645 ) |
647 { |
646 { |
648 if (ec_fsm_coe_map_exec(fsm->fsm_coe_map)) |
647 if (ec_fsm_pdo_exec(fsm->fsm_pdo)) |
649 return; |
648 return; |
650 |
649 |
651 if (!ec_fsm_coe_map_success(fsm->fsm_coe_map)) { |
650 if (!ec_fsm_pdo_success(fsm->fsm_pdo)) { |
652 fsm->state = ec_fsm_slave_scan_state_error; |
651 fsm->state = ec_fsm_slave_scan_state_error; |
653 return; |
652 return; |
654 } |
653 } |
655 |
654 |
656 // fetching of Pdo assignment/mapping finished |
655 // reading Pdo configuration finished |
657 fsm->state = ec_fsm_slave_scan_state_end; |
656 fsm->state = ec_fsm_slave_scan_state_end; |
658 } |
657 } |
659 |
658 |
660 /****************************************************************************** |
659 /****************************************************************************** |
661 * Common state functions |
660 * Common state functions |