master/fsm_master.c
changeset 612 aede068f9a74
parent 610 29489a43ecee
child 637 d5d04c868e0e
equal deleted inserted replaced
611:16498ed938f4 612:aede068f9a74
    76     fsm->state = ec_fsm_master_state_start;
    76     fsm->state = ec_fsm_master_state_start;
    77     fsm->slaves_responding = 0;
    77     fsm->slaves_responding = 0;
    78     fsm->topology_change_pending = 0;
    78     fsm->topology_change_pending = 0;
    79     fsm->slave_states = EC_SLAVE_STATE_UNKNOWN;
    79     fsm->slave_states = EC_SLAVE_STATE_UNKNOWN;
    80     fsm->validate = 0;
    80     fsm->validate = 0;
       
    81     fsm->tainted = 0;
    81 
    82 
    82     // init sub-state-machines
    83     // init sub-state-machines
    83     ec_fsm_slave_init(&fsm->fsm_slave, fsm->datagram);
    84     ec_fsm_slave_init(&fsm->fsm_slave, fsm->datagram);
    84     ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);
    85     ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);
    85     ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);
    86     ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);
   204             if (fsm->slaves_responding == master->slave_count) {
   205             if (fsm->slaves_responding == master->slave_count) {
   205                 fsm->validate = 1; // start validation later
   206                 fsm->validate = 1; // start validation later
   206             }
   207             }
   207             else {
   208             else {
   208                 EC_WARN("Invalid slave count. Bus in tainted state.\n");
   209                 EC_WARN("Invalid slave count. Bus in tainted state.\n");
       
   210                 fsm->tainted = 1;
   209             }
   211             }
   210         }
   212         }
   211     }
   213     }
   212 
   214 
   213     // slave states changed?
   215     // slave states changed?
   638         return;
   640         return;
   639     }
   641     }
   640 
   642 
   641     // have all states been validated?
   643     // have all states been validated?
   642     if (slave->list.next == &fsm->master->slaves) {
   644     if (slave->list.next == &fsm->master->slaves) {
       
   645         fsm->tainted = 0;
   643         fsm->slave = list_entry(fsm->master->slaves.next, ec_slave_t, list);
   646         fsm->slave = list_entry(fsm->master->slaves.next, ec_slave_t, list);
   644         // start writing addresses to offline slaves
   647         // start writing addresses to offline slaves
   645         ec_fsm_master_action_addresses(fsm);
   648         ec_fsm_master_action_addresses(fsm);
   646         return;
   649         return;
   647     }
   650     }