equal
deleted
inserted
replaced
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 |