90 |
90 |
91 // init sub state machines |
91 // init sub state machines |
92 ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram); |
92 ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram); |
93 ec_fsm_change_init(&fsm->fsm_change, fsm->datagram); |
93 ec_fsm_change_init(&fsm->fsm_change, fsm->datagram); |
94 ec_fsm_coe_init(&fsm->fsm_coe, fsm->datagram); |
94 ec_fsm_coe_init(&fsm->fsm_coe, fsm->datagram); |
95 ec_fsm_mapping_init(&fsm->fsm_map, &fsm->fsm_coe); |
95 ec_fsm_pdo_mapping_init(&fsm->fsm_pdo_map, &fsm->fsm_coe); |
96 ec_fsm_pdo_config_init(&fsm->fsm_pdo, &fsm->fsm_coe); |
96 ec_fsm_pdo_config_init(&fsm->fsm_pdo_conf, &fsm->fsm_coe); |
97 } |
97 } |
98 |
98 |
99 /*****************************************************************************/ |
99 /*****************************************************************************/ |
100 |
100 |
101 /** Destructor. |
101 /** Destructor. |
104 { |
104 { |
105 // clear sub state machines |
105 // clear sub state machines |
106 ec_fsm_sii_clear(&fsm->fsm_sii); |
106 ec_fsm_sii_clear(&fsm->fsm_sii); |
107 ec_fsm_change_clear(&fsm->fsm_change); |
107 ec_fsm_change_clear(&fsm->fsm_change); |
108 ec_fsm_coe_clear(&fsm->fsm_coe); |
108 ec_fsm_coe_clear(&fsm->fsm_coe); |
109 ec_fsm_mapping_clear(&fsm->fsm_map); |
109 ec_fsm_pdo_mapping_clear(&fsm->fsm_pdo_map); |
110 ec_fsm_pdo_config_clear(&fsm->fsm_pdo); |
110 ec_fsm_pdo_config_clear(&fsm->fsm_pdo_conf); |
111 } |
111 } |
112 |
112 |
113 /*****************************************************************************/ |
113 /*****************************************************************************/ |
114 |
114 |
115 /** |
115 /** |
939 ec_fsm_slave_t *fsm /**< slave state machine */ |
939 ec_fsm_slave_t *fsm /**< slave state machine */ |
940 ) |
940 ) |
941 { |
941 { |
942 // start configuring PDO mapping |
942 // start configuring PDO mapping |
943 fsm->state = ec_fsm_slave_conf_state_mapping; |
943 fsm->state = ec_fsm_slave_conf_state_mapping; |
944 ec_fsm_mapping_start(&fsm->fsm_map, fsm->slave); |
944 ec_fsm_pdo_mapping_start(&fsm->fsm_pdo_map, fsm->slave); |
945 ec_fsm_mapping_exec(&fsm->fsm_map); // execute immediately |
945 ec_fsm_pdo_mapping_exec(&fsm->fsm_pdo_map); // execute immediately |
946 } |
946 } |
947 |
947 |
948 /*****************************************************************************/ |
948 /*****************************************************************************/ |
949 |
949 |
950 /** |
950 /** |
953 |
953 |
954 void ec_fsm_slave_conf_state_mapping( |
954 void ec_fsm_slave_conf_state_mapping( |
955 ec_fsm_slave_t *fsm /**< slave state machine */ |
955 ec_fsm_slave_t *fsm /**< slave state machine */ |
956 ) |
956 ) |
957 { |
957 { |
958 if (ec_fsm_mapping_exec(&fsm->fsm_map)) return; |
958 if (ec_fsm_pdo_mapping_exec(&fsm->fsm_pdo_map)) return; |
959 |
959 |
960 if (!ec_fsm_mapping_success(&fsm->fsm_map)) { |
960 if (!ec_fsm_pdo_mapping_success(&fsm->fsm_pdo_map)) { |
961 EC_ERR("PDO mapping configuration failed for slave %u.\n", |
961 EC_ERR("PDO mapping configuration failed for slave %u.\n", |
962 fsm->slave->ring_position); |
962 fsm->slave->ring_position); |
963 fsm->slave->error_flag = 1; |
963 fsm->slave->error_flag = 1; |
964 fsm->state = ec_fsm_slave_state_error; |
964 fsm->state = ec_fsm_slave_state_error; |
965 return; |
965 return; |
966 } |
966 } |
967 |
967 |
968 // Start Pdo configuration |
968 // Start Pdo configuration |
969 fsm->state = ec_fsm_slave_conf_state_pdo_conf; |
969 fsm->state = ec_fsm_slave_conf_state_pdo_conf; |
970 ec_fsm_pdo_config_start(&fsm->fsm_pdo, fsm->slave); |
970 ec_fsm_pdo_config_start(&fsm->fsm_pdo_conf, fsm->slave); |
971 ec_fsm_pdo_config_exec(&fsm->fsm_pdo); // execute immediately |
971 ec_fsm_pdo_config_exec(&fsm->fsm_pdo_conf); // execute immediately |
972 } |
972 } |
973 |
973 |
974 /*****************************************************************************/ |
974 /*****************************************************************************/ |
975 |
975 |
976 /** |
976 /** |
979 |
979 |
980 void ec_fsm_slave_conf_state_pdo_conf( |
980 void ec_fsm_slave_conf_state_pdo_conf( |
981 ec_fsm_slave_t *fsm /**< slave state machine */ |
981 ec_fsm_slave_t *fsm /**< slave state machine */ |
982 ) |
982 ) |
983 { |
983 { |
984 if (ec_fsm_pdo_config_exec(&fsm->fsm_pdo)) return; |
984 if (ec_fsm_pdo_config_exec(&fsm->fsm_pdo_conf)) return; |
985 |
985 |
986 if (!ec_fsm_pdo_config_success(&fsm->fsm_pdo)) { |
986 if (!ec_fsm_pdo_config_success(&fsm->fsm_pdo_conf)) { |
987 EC_ERR("Pdo configuration failed for slave %u.\n", |
987 EC_ERR("Pdo configuration failed for slave %u.\n", |
988 fsm->slave->ring_position); |
988 fsm->slave->ring_position); |
989 fsm->slave->error_flag = 1; |
989 fsm->slave->error_flag = 1; |
990 fsm->state = ec_fsm_slave_state_error; |
990 fsm->state = ec_fsm_slave_state_error; |
991 return; |
991 return; |