master/fsm_slave_config.c
changeset 1873 219be3742274
parent 1849 0a660edc7180
child 1889 131f655c03d3
equal deleted inserted replaced
1872:23d4e121faaf 1873:219be3742274
   810         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   810         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   811         return;
   811         return;
   812     }
   812     }
   813 
   813 
   814     // All SDOs are now configured.
   814     // All SDOs are now configured.
   815 	ec_fsm_slave_config_enter_soe_conf(fsm);
   815     ec_fsm_slave_config_enter_soe_conf(fsm);
   816 }
   816 }
   817 
   817 
   818 /*****************************************************************************/
   818 /*****************************************************************************/
   819 
   819 
   820 /** Check for SoE configurations to be applied.
   820 /** Check for SoE configurations to be applied.
   822 void ec_fsm_slave_config_enter_soe_conf(
   822 void ec_fsm_slave_config_enter_soe_conf(
   823         ec_fsm_slave_config_t *fsm /**< slave state machine */
   823         ec_fsm_slave_config_t *fsm /**< slave state machine */
   824         )
   824         )
   825 {
   825 {
   826     ec_slave_t *slave = fsm->slave;
   826     ec_slave_t *slave = fsm->slave;
   827 	ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe;
   827     ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe;
   828 
   828 
   829     if (!slave->config) {
   829     if (!slave->config) {
   830         ec_fsm_slave_config_enter_pdo_sync(fsm);
   830         ec_fsm_slave_config_enter_pdo_sync(fsm);
   831         return;
   831         return;
   832     }
   832     }
   840     // start SoE configuration
   840     // start SoE configuration
   841     fsm->state = ec_fsm_slave_config_state_soe_conf;
   841     fsm->state = ec_fsm_slave_config_state_soe_conf;
   842     fsm->soe_request = list_entry(fsm->slave->config->soe_configs.next,
   842     fsm->soe_request = list_entry(fsm->slave->config->soe_configs.next,
   843             ec_soe_request_t, list);
   843             ec_soe_request_t, list);
   844     ec_soe_request_copy(&fsm->soe_request_copy, fsm->soe_request);
   844     ec_soe_request_copy(&fsm->soe_request_copy, fsm->soe_request);
   845 	ec_soe_request_write(&fsm->soe_request_copy);
   845     ec_soe_request_write(&fsm->soe_request_copy);
   846     ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy);
   846     ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy);
   847     ec_fsm_soe_exec(fsm_soe); // execute immediately
   847     ec_fsm_soe_exec(fsm_soe); // execute immediately
       
   848     ec_master_queue_external_datagram(slave->master, fsm_soe->datagram);
   848 }
   849 }
   849 
   850 
   850 /*****************************************************************************/
   851 /*****************************************************************************/
   851 
   852 
   852 /** Slave configuration state: SOE_CONF.
   853 /** Slave configuration state: SOE_CONF.
   854 void ec_fsm_slave_config_state_soe_conf(
   855 void ec_fsm_slave_config_state_soe_conf(
   855         ec_fsm_slave_config_t *fsm /**< slave state machine */
   856         ec_fsm_slave_config_t *fsm /**< slave state machine */
   856         )
   857         )
   857 {
   858 {
   858     ec_slave_t *slave = fsm->slave;
   859     ec_slave_t *slave = fsm->slave;
   859 	ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe;
   860     ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe;
   860 
   861 
   861     if (ec_fsm_soe_exec(fsm_soe)) {
   862     if (ec_fsm_soe_exec(fsm_soe)) {
   862 		return;
   863         ec_master_queue_external_datagram(slave->master, fsm_soe->datagram);
   863 	}
   864         return;
       
   865     }
   864 
   866 
   865     if (!ec_fsm_soe_success(fsm_soe)) {
   867     if (!ec_fsm_soe_success(fsm_soe)) {
   866         EC_ERR("SoE configuration failed for slave %u.\n",
   868         EC_ERR("SoE configuration failed for slave %u.\n",
   867                 fsm->slave->ring_position);
   869                 fsm->slave->ring_position);
   868         fsm->slave->error_flag = 1;
   870         fsm->slave->error_flag = 1;
   881                 ec_soe_request_t, list);
   883                 ec_soe_request_t, list);
   882         ec_soe_request_copy(&fsm->soe_request_copy, fsm->soe_request);
   884         ec_soe_request_copy(&fsm->soe_request_copy, fsm->soe_request);
   883         ec_soe_request_write(&fsm->soe_request_copy);
   885         ec_soe_request_write(&fsm->soe_request_copy);
   884         ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy);
   886         ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy);
   885         ec_fsm_soe_exec(fsm_soe); // execute immediately
   887         ec_fsm_soe_exec(fsm_soe); // execute immediately
       
   888         ec_master_queue_external_datagram(slave->master, fsm_soe->datagram);
   886         return;
   889         return;
   887     }
   890     }
   888 
   891 
   889     // All SDOs are now configured.
   892     // All SDOs are now configured.
   890     ec_fsm_slave_config_enter_pdo_conf(fsm);
   893     ec_fsm_slave_config_enter_pdo_conf(fsm);