58 void ec_fsm_slave_conf_state_start(ec_fsm_slave_t *); |
58 void ec_fsm_slave_conf_state_start(ec_fsm_slave_t *); |
59 void ec_fsm_slave_conf_state_init(ec_fsm_slave_t *); |
59 void ec_fsm_slave_conf_state_init(ec_fsm_slave_t *); |
60 void ec_fsm_slave_conf_state_clear_fmmus(ec_fsm_slave_t *); |
60 void ec_fsm_slave_conf_state_clear_fmmus(ec_fsm_slave_t *); |
61 void ec_fsm_slave_conf_state_mbox_sync(ec_fsm_slave_t *); |
61 void ec_fsm_slave_conf_state_mbox_sync(ec_fsm_slave_t *); |
62 void ec_fsm_slave_conf_state_preop(ec_fsm_slave_t *); |
62 void ec_fsm_slave_conf_state_preop(ec_fsm_slave_t *); |
|
63 void ec_fsm_slave_conf_state_sdo_conf(ec_fsm_slave_t *); |
|
64 void ec_fsm_slave_conf_state_mapping(ec_fsm_slave_t *); |
63 void ec_fsm_slave_conf_state_pdo_sync(ec_fsm_slave_t *); |
65 void ec_fsm_slave_conf_state_pdo_sync(ec_fsm_slave_t *); |
64 void ec_fsm_slave_conf_state_fmmu(ec_fsm_slave_t *); |
66 void ec_fsm_slave_conf_state_fmmu(ec_fsm_slave_t *); |
65 void ec_fsm_slave_conf_state_sdoconf(ec_fsm_slave_t *); |
|
66 void ec_fsm_slave_conf_state_mapconf(ec_fsm_slave_t *); |
|
67 void ec_fsm_slave_conf_state_saveop(ec_fsm_slave_t *); |
67 void ec_fsm_slave_conf_state_saveop(ec_fsm_slave_t *); |
68 void ec_fsm_slave_conf_state_op(ec_fsm_slave_t *); |
68 void ec_fsm_slave_conf_state_op(ec_fsm_slave_t *); |
69 |
69 |
70 void ec_fsm_slave_conf_enter_mbox_sync(ec_fsm_slave_t *); |
70 void ec_fsm_slave_conf_enter_mbox_sync(ec_fsm_slave_t *); |
71 void ec_fsm_slave_conf_enter_preop(ec_fsm_slave_t *); |
71 void ec_fsm_slave_conf_enter_preop(ec_fsm_slave_t *); |
72 void ec_fsm_slave_conf_enter_pdo_sync(ec_fsm_slave_t *); |
72 void ec_fsm_slave_conf_enter_pdo_sync(ec_fsm_slave_t *); |
73 void ec_fsm_slave_conf_enter_fmmu(ec_fsm_slave_t *); |
73 void ec_fsm_slave_conf_enter_fmmu(ec_fsm_slave_t *); |
74 void ec_fsm_slave_conf_enter_sdoconf(ec_fsm_slave_t *); |
74 void ec_fsm_slave_conf_enter_sdo_conf(ec_fsm_slave_t *); |
75 void ec_fsm_slave_conf_enter_mapconf(ec_fsm_slave_t *); |
75 void ec_fsm_slave_conf_enter_mapping(ec_fsm_slave_t *); |
76 void ec_fsm_slave_conf_enter_saveop(ec_fsm_slave_t *); |
76 void ec_fsm_slave_conf_enter_saveop(ec_fsm_slave_t *); |
77 |
77 |
78 void ec_fsm_slave_state_end(ec_fsm_slave_t *); |
78 void ec_fsm_slave_state_end(ec_fsm_slave_t *); |
79 void ec_fsm_slave_state_error(ec_fsm_slave_t *); |
79 void ec_fsm_slave_state_error(ec_fsm_slave_t *); |
80 |
80 |
863 slave->ring_position); |
863 slave->ring_position); |
864 } |
864 } |
865 return; |
865 return; |
866 } |
866 } |
867 |
867 |
868 ec_fsm_slave_conf_enter_sdoconf(fsm); |
868 ec_fsm_slave_conf_enter_sdo_conf(fsm); |
869 } |
869 } |
870 |
870 |
871 /*****************************************************************************/ |
871 /*****************************************************************************/ |
872 |
872 |
873 /** |
873 /** |
874 * Check for SDO configurations to be applied. |
874 * Check for SDO configurations to be applied. |
875 */ |
875 */ |
876 |
876 |
877 void ec_fsm_slave_conf_enter_sdoconf(ec_fsm_slave_t *fsm /**< slave state machine */) |
877 void ec_fsm_slave_conf_enter_sdo_conf(ec_fsm_slave_t *fsm /**< slave state machine */) |
878 { |
878 { |
879 ec_slave_t *slave = fsm->slave; |
879 ec_slave_t *slave = fsm->slave; |
880 |
880 |
881 if (!slave->config) { |
881 if (!slave->config) { |
882 EC_DBG("Slave %u is not configured.\n", slave->ring_position); |
882 EC_DBG("Slave %u is not configured.\n", slave->ring_position); |
884 return; |
884 return; |
885 } |
885 } |
886 |
886 |
887 // No CoE configuration to be applied? FIXME |
887 // No CoE configuration to be applied? FIXME |
888 if (list_empty(&slave->config->sdo_configs)) { // skip SDO configuration |
888 if (list_empty(&slave->config->sdo_configs)) { // skip SDO configuration |
889 ec_fsm_slave_conf_enter_mapconf(fsm); |
889 ec_fsm_slave_conf_enter_mapping(fsm); |
890 return; |
890 return; |
891 } |
891 } |
892 |
892 |
893 // start SDO configuration |
893 // start SDO configuration |
894 fsm->state = ec_fsm_slave_conf_state_sdoconf; |
894 fsm->state = ec_fsm_slave_conf_state_sdo_conf; |
895 fsm->sdodata = |
895 fsm->sdodata = |
896 list_entry(fsm->slave->config->sdo_configs.next, ec_sdo_data_t, list); |
896 list_entry(fsm->slave->config->sdo_configs.next, ec_sdo_data_t, list); |
897 ec_fsm_coe_download(&fsm->fsm_coe, fsm->slave, fsm->sdodata); |
897 ec_fsm_coe_download(&fsm->fsm_coe, fsm->slave, fsm->sdodata); |
898 ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately |
898 ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately |
899 } |
899 } |
900 |
900 |
901 /*****************************************************************************/ |
901 /*****************************************************************************/ |
902 |
902 |
903 /** |
903 /** |
904 Slave configuration state: SDOCONF. |
904 Slave configuration state: SDO_CONF. |
905 */ |
905 */ |
906 |
906 |
907 void ec_fsm_slave_conf_state_sdoconf( |
907 void ec_fsm_slave_conf_state_sdo_conf( |
908 ec_fsm_slave_t *fsm /**< slave state machine */ |
908 ec_fsm_slave_t *fsm /**< slave state machine */ |
909 ) |
909 ) |
910 { |
910 { |
911 if (ec_fsm_coe_exec(&fsm->fsm_coe)) return; |
911 if (ec_fsm_coe_exec(&fsm->fsm_coe)) return; |
912 |
912 |
926 ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately |
926 ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately |
927 return; |
927 return; |
928 } |
928 } |
929 |
929 |
930 // All SDOs are now configured. |
930 // All SDOs are now configured. |
931 ec_fsm_slave_conf_enter_mapconf(fsm); |
931 ec_fsm_slave_conf_enter_mapping(fsm); |
932 } |
932 } |
933 |
933 |
934 /*****************************************************************************/ |
934 /*****************************************************************************/ |
935 |
935 |
936 /** |
936 /** |
937 * Check for alternative PDO mappings to be applied. |
937 * Check for PDO mappings to be applied. |
938 */ |
938 */ |
939 |
939 |
940 void ec_fsm_slave_conf_enter_mapconf( |
940 void ec_fsm_slave_conf_enter_mapping( |
941 ec_fsm_slave_t *fsm /**< slave state machine */ |
941 ec_fsm_slave_t *fsm /**< slave state machine */ |
942 ) |
942 ) |
943 { |
943 { |
944 ec_slave_t *slave = fsm->slave; |
944 ec_slave_t *slave = fsm->slave; |
945 |
945 |
948 ec_fsm_slave_conf_enter_pdo_sync(fsm); |
948 ec_fsm_slave_conf_enter_pdo_sync(fsm); |
949 return; |
949 return; |
950 } |
950 } |
951 |
951 |
952 // start configuring PDO mapping |
952 // start configuring PDO mapping |
953 fsm->state = ec_fsm_slave_conf_state_mapconf; |
953 fsm->state = ec_fsm_slave_conf_state_mapping; |
954 ec_fsm_mapping_start(&fsm->fsm_map, fsm->slave); |
954 ec_fsm_mapping_start(&fsm->fsm_map, fsm->slave); |
955 ec_fsm_mapping_exec(&fsm->fsm_map); // execute immediately |
955 ec_fsm_mapping_exec(&fsm->fsm_map); // execute immediately |
956 } |
956 } |
957 |
957 |
958 /*****************************************************************************/ |
958 /*****************************************************************************/ |
959 |
959 |
960 /** |
960 /** |
961 Slave configuration state: MAPCONF. |
961 Slave configuration state: MAPPING. |
962 */ |
962 */ |
963 |
963 |
964 void ec_fsm_slave_conf_state_mapconf( |
964 void ec_fsm_slave_conf_state_mapping( |
965 ec_fsm_slave_t *fsm /**< slave state machine */ |
965 ec_fsm_slave_t *fsm /**< slave state machine */ |
966 ) |
966 ) |
967 { |
967 { |
968 if (ec_fsm_mapping_exec(&fsm->fsm_map)) return; |
968 if (ec_fsm_mapping_exec(&fsm->fsm_map)) return; |
969 |
969 |