master/fsm_master.c
branchstable-1.5
changeset 2100 da4640f9776d
parent 1961 48f536aefc18
child 2108 6d3620f2328f
equal deleted inserted replaced
2099:e485694c6427 2100:da4640f9776d
   564         )
   564         )
   565 {
   565 {
   566     ec_master_t *master = fsm->master;
   566     ec_master_t *master = fsm->master;
   567     ec_slave_t *slave = fsm->slave;
   567     ec_slave_t *slave = fsm->slave;
   568 
   568 
       
   569     if (master->config_changed) {
       
   570         // abort iterating through slaves,
       
   571         // first compensate DC system time offsets,
       
   572         // then begin configuring at slave 0
       
   573         EC_MASTER_DBG(master, 1, "Configuration changed"
       
   574                 " (aborting state check).\n");
       
   575 
       
   576         fsm->slave = master->slaves; // begin with first slave
       
   577         ec_fsm_master_enter_write_system_times(fsm);
       
   578     }
       
   579 
   569     // Does the slave have to be configured?
   580     // Does the slave have to be configured?
   570     if ((slave->current_state != slave->requested_state
   581     if ((slave->current_state != slave->requested_state
   571                 || slave->force_config) && !slave->error_flag) {
   582                 || slave->force_config) && !slave->error_flag) {
   572 
   583 
   573         // Start slave configuration, if it is allowed.
   584         // Start slave configuration, if it is allowed.
   855     ec_master_t *master = fsm->master;
   866     ec_master_t *master = fsm->master;
   856 
   867 
   857     EC_MASTER_DBG(master, 1, "Writing system time offsets...\n");
   868     EC_MASTER_DBG(master, 1, "Writing system time offsets...\n");
   858 
   869 
   859     if (master->has_app_time) {
   870     if (master->has_app_time) {
       
   871 
   860         while (fsm->slave < master->slaves + master->slave_count) {
   872         while (fsm->slave < master->slaves + master->slave_count) {
   861             if (!fsm->slave->base_dc_supported
   873             if (!fsm->slave->base_dc_supported
   862                     || !fsm->slave->has_dc_system_time) {
   874                     || !fsm->slave->has_dc_system_time) {
   863                 fsm->slave++;
   875                 fsm->slave++;
   864                 continue;
   876                 continue;
   871                     0x0910, 24);
   883                     0x0910, 24);
   872             fsm->retries = EC_FSM_RETRIES;
   884             fsm->retries = EC_FSM_RETRIES;
   873             fsm->state = ec_fsm_master_state_dc_read_offset;
   885             fsm->state = ec_fsm_master_state_dc_read_offset;
   874             return;
   886             return;
   875         }
   887         }
       
   888 
   876     } else {
   889     } else {
   877         EC_MASTER_DBG(master, 1, "No app_time received up to now.\n");
   890         if (master->active) {
       
   891             EC_MASTER_ERR(master, "No app_time received up to now,"
       
   892                     " but master already active).\n");
       
   893         } else {
       
   894             EC_MASTER_DBG(master, 1, "No app_time received up to now.\n");
       
   895         }
   878     }
   896     }
   879 
   897 
   880     ec_master_request_op(master);
   898     ec_master_request_op(master);
   881     ec_fsm_master_restart(fsm);
   899     ec_fsm_master_restart(fsm);
   882 }
   900 }