master/fsm_master.c
changeset 1225 4d5b739edcb5
parent 1219 aa030fb1e980
child 1277 1189e040fe12
equal deleted inserted replaced
1224:784bb76105cd 1225:4d5b739edcb5
   163         ec_fsm_master_t *fsm /**< Master state machine. */
   163         ec_fsm_master_t *fsm /**< Master state machine. */
   164         )
   164         )
   165 {
   165 {
   166     fsm->idle = 1;
   166     fsm->idle = 1;
   167     ec_datagram_brd(fsm->datagram, 0x0130, 2);
   167     ec_datagram_brd(fsm->datagram, 0x0130, 2);
       
   168     ec_datagram_zero(fsm->datagram);
   168     fsm->state = ec_fsm_master_state_broadcast;
   169     fsm->state = ec_fsm_master_state_broadcast;
   169 }
   170 }
   170 
   171 
   171 /*****************************************************************************/
   172 /*****************************************************************************/
   172 
   173 
   274     if (master->slave_count) {
   275     if (master->slave_count) {
   275         // fetch state from first slave
   276         // fetch state from first slave
   276         fsm->slave = master->slaves;
   277         fsm->slave = master->slaves;
   277         ec_datagram_fprd(fsm->datagram, fsm->slave->station_address,
   278         ec_datagram_fprd(fsm->datagram, fsm->slave->station_address,
   278                 0x0130, 2);
   279                 0x0130, 2);
       
   280         ec_datagram_zero(datagram);
   279         fsm->retries = EC_FSM_RETRIES;
   281         fsm->retries = EC_FSM_RETRIES;
   280         fsm->state = ec_fsm_master_state_read_state;
   282         fsm->state = ec_fsm_master_state_read_state;
   281     } else {
   283     } else {
   282         ec_fsm_master_restart(fsm);
   284         ec_fsm_master_restart(fsm);
   283     }
   285     }
   354         fsm->phy_request = request;
   356         fsm->phy_request = request;
   355 
   357 
   356         if (request->dir == EC_DIR_INPUT) {
   358         if (request->dir == EC_DIR_INPUT) {
   357             ec_datagram_fprd(fsm->datagram, request->slave->station_address,
   359             ec_datagram_fprd(fsm->datagram, request->slave->station_address,
   358                     request->offset, request->length);
   360                     request->offset, request->length);
       
   361             ec_datagram_zero(fsm->datagram);
   359         } else {
   362         } else {
   360             if (request->length > fsm->datagram->mem_size) {
   363             if (request->length > fsm->datagram->mem_size) {
   361                 EC_ERR("Request length (%u) exceeds maximum datagram size (%u)!\n",
   364                 EC_ERR("Request length (%u) exceeds maximum datagram size (%u)!\n",
   362                         request->length, fsm->datagram->mem_size);
   365                         request->length, fsm->datagram->mem_size);
   363                 request->state = EC_INT_REQUEST_FAILURE;
   366                 request->state = EC_INT_REQUEST_FAILURE;
   539     if (fsm->slave < master->slaves + master->slave_count) {
   542     if (fsm->slave < master->slaves + master->slave_count) {
   540         // fetch state from next slave
   543         // fetch state from next slave
   541         fsm->idle = 1;
   544         fsm->idle = 1;
   542         ec_datagram_fprd(fsm->datagram,
   545         ec_datagram_fprd(fsm->datagram,
   543                 fsm->slave->station_address, 0x0130, 2);
   546                 fsm->slave->station_address, 0x0130, 2);
       
   547         ec_datagram_zero(fsm->datagram);
   544         fsm->retries = EC_FSM_RETRIES;
   548         fsm->retries = EC_FSM_RETRIES;
   545         fsm->state = ec_fsm_master_state_read_state;
   549         fsm->state = ec_fsm_master_state_read_state;
   546         return;
   550         return;
   547     }
   551     }
   548 
   552