master/fsm_slave.c
changeset 795 c695e53940d4
parent 792 3778920f61e4
child 799 068a58b96965
equal deleted inserted replaced
794:684dea874956 795:c695e53940d4
    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