diff -r 5a8959f77854 -r d4e0380d63b3 master/fsm_master.c --- a/master/fsm_master.c Mon Mar 17 09:06:21 2008 +0000 +++ b/master/fsm_master.c Mon Mar 17 09:38:48 2008 +0000 @@ -60,7 +60,7 @@ void ec_fsm_master_state_configure_slave(ec_fsm_master_t *); void ec_fsm_master_state_clear_addresses(ec_fsm_master_t *); void ec_fsm_master_state_scan_slaves(ec_fsm_master_t *); -void ec_fsm_master_state_write_eeprom(ec_fsm_master_t *); +void ec_fsm_master_state_write_sii(ec_fsm_master_t *); void ec_fsm_master_state_sdodict(ec_fsm_master_t *); void ec_fsm_master_state_sdo_request(ec_fsm_master_t *); void ec_fsm_master_state_end(ec_fsm_master_t *); @@ -313,50 +313,50 @@ /*****************************************************************************/ /** - * Check for pending EEPROM write requests and process one. - * \return non-zero, if an EEPROM write request is processed. + * Check for pending SII write requests and process one. + * \return non-zero, if an SII write request is processed. */ -int ec_fsm_master_action_process_eeprom( +int ec_fsm_master_action_process_sii( ec_fsm_master_t *fsm /**< master state machine */ ) { ec_master_t *master = fsm->master; - ec_eeprom_write_request_t *request; + ec_sii_write_request_t *request; ec_slave_t *slave; // search the first request to be processed while (1) { - down(&master->eeprom_sem); - if (list_empty(&master->eeprom_requests)) { - up(&master->eeprom_sem); + down(&master->sii_sem); + if (list_empty(&master->sii_requests)) { + up(&master->sii_sem); break; } // get first request - request = list_entry(master->eeprom_requests.next, - ec_eeprom_write_request_t, list); + request = list_entry(master->sii_requests.next, + ec_sii_write_request_t, list); list_del_init(&request->list); // dequeue request->state = EC_REQUEST_BUSY; - up(&master->eeprom_sem); + up(&master->sii_sem); slave = request->slave; if (slave->online_state == EC_SLAVE_OFFLINE) { - EC_ERR("Discarding EEPROM data, slave %i offline.\n", + EC_ERR("Discarding SII data, slave %i offline.\n", slave->ring_position); request->state = EC_REQUEST_FAILURE; - wake_up(&master->eeprom_queue); + wake_up(&master->sii_queue); continue; } - // found pending EEPROM write operation. execute it! + // found pending SII write operation. execute it! if (master->debug_level) - EC_DBG("Writing EEPROM data to slave %i...\n", + EC_DBG("Writing SII data to slave %i...\n", slave->ring_position); - fsm->eeprom_request = request; - fsm->eeprom_index = 0; + fsm->sii_request = request; + fsm->sii_index = 0; ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->word_offset, request->data, EC_FSM_SII_USE_CONFIGURED_ADDRESS); - fsm->state = ec_fsm_master_state_write_eeprom; + fsm->state = ec_fsm_master_state_write_sii; fsm->state(fsm); // execute immediately return 1; } @@ -562,9 +562,9 @@ return; } - // check for pending EEPROM write operations. - if (ec_fsm_master_action_process_eeprom(fsm)) - return; // EEPROM write request found + // check for pending SII write operations. + if (ec_fsm_master_action_process_sii(fsm)) + return; // SII write request found } fsm->state = ec_fsm_master_state_end; @@ -971,49 +971,49 @@ /*****************************************************************************/ /** - Master state: WRITE EEPROM. -*/ - -void ec_fsm_master_state_write_eeprom( + Master state: WRITE SII. +*/ + +void ec_fsm_master_state_write_sii( ec_fsm_master_t *fsm /**< master state machine */) { ec_master_t *master = fsm->master; - ec_eeprom_write_request_t *request = fsm->eeprom_request; + ec_sii_write_request_t *request = fsm->sii_request; ec_slave_t *slave = request->slave; if (ec_fsm_sii_exec(&fsm->fsm_sii)) return; if (!ec_fsm_sii_success(&fsm->fsm_sii)) { slave->error_flag = 1; - EC_ERR("Failed to write EEPROM data to slave %i.\n", + EC_ERR("Failed to write SII data to slave %i.\n", slave->ring_position); request->state = EC_REQUEST_FAILURE; - wake_up(&master->eeprom_queue); - fsm->state = ec_fsm_master_state_error; - return; - } - - fsm->eeprom_index++; - if (fsm->eeprom_index < request->word_size) { + wake_up(&master->sii_queue); + fsm->state = ec_fsm_master_state_error; + return; + } + + fsm->sii_index++; + if (fsm->sii_index < request->word_size) { ec_fsm_sii_write(&fsm->fsm_sii, slave, - request->word_offset + fsm->eeprom_index, - request->data + fsm->eeprom_index * 2, + request->word_offset + fsm->sii_index, + request->data + fsm->sii_index * 2, EC_FSM_SII_USE_CONFIGURED_ADDRESS); ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately return; } - // finished writing EEPROM + // finished writing SII if (master->debug_level) - EC_DBG("Finished writing %u words of EEPROM data to slave %u.\n", + EC_DBG("Finished writing %u words of SII data to slave %u.\n", request->word_size, slave->ring_position); request->state = EC_REQUEST_SUCCESS; - wake_up(&master->eeprom_queue); - - // TODO: Evaluate new EEPROM contents! - - // check for another EEPROM write request - if (ec_fsm_master_action_process_eeprom(fsm)) + wake_up(&master->sii_queue); + + // TODO: Evaluate new SII contents! + + // check for another SII write request + if (ec_fsm_master_action_process_sii(fsm)) return; // processing another request fsm->state = ec_fsm_master_state_end;