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