master/fsm_slave.c
changeset 802 b947d0b09f9a
parent 799 068a58b96965
child 813 bfc3f1ab52de
equal deleted inserted replaced
801:6b1e2b0ed8bc 802:b947d0b09f9a
    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;