309 wake_up(&master->eeprom_queue); |
309 wake_up(&master->eeprom_queue); |
310 continue; |
310 continue; |
311 } |
311 } |
312 |
312 |
313 // found pending EEPROM write operation. execute it! |
313 // found pending EEPROM write operation. execute it! |
314 EC_INFO("Writing EEPROM of slave %i...\n", slave->ring_position); |
314 if (master->debug_level) |
|
315 EC_DBG("Writing EEPROM data to slave %i...\n", |
|
316 slave->ring_position); |
315 fsm->eeprom_request = request; |
317 fsm->eeprom_request = request; |
316 fsm->eeprom_index = 0; |
318 fsm->eeprom_index = 0; |
317 ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->offset, |
319 ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->offset, |
318 request->words, EC_FSM_SII_NODE); |
320 request->words, EC_FSM_SII_NODE); |
319 fsm->state = ec_fsm_master_state_write_eeprom; |
321 fsm->state = ec_fsm_master_state_write_eeprom; |
780 |
782 |
781 /** |
783 /** |
782 Master state: WRITE EEPROM. |
784 Master state: WRITE EEPROM. |
783 */ |
785 */ |
784 |
786 |
785 void ec_fsm_master_state_write_eeprom(ec_fsm_master_t *fsm /**< master state machine */) |
787 void ec_fsm_master_state_write_eeprom( |
|
788 ec_fsm_master_t *fsm /**< master state machine */) |
786 { |
789 { |
787 ec_master_t *master = fsm->master; |
790 ec_master_t *master = fsm->master; |
788 ec_eeprom_write_request_t *request = fsm->eeprom_request; |
791 ec_eeprom_write_request_t *request = fsm->eeprom_request; |
789 ec_slave_t *slave = request->slave; |
792 ec_slave_t *slave = request->slave; |
790 |
793 |
791 if (ec_fsm_sii_exec(&fsm->fsm_sii)) return; |
794 if (ec_fsm_sii_exec(&fsm->fsm_sii)) return; |
792 |
795 |
793 if (!ec_fsm_sii_success(&fsm->fsm_sii)) { |
796 if (!ec_fsm_sii_success(&fsm->fsm_sii)) { |
794 slave->error_flag = 1; |
797 slave->error_flag = 1; |
795 EC_ERR("Failed to write EEPROM contents to slave %i.\n", |
798 EC_ERR("Failed to write EEPROM data to slave %i.\n", |
796 slave->ring_position); |
799 slave->ring_position); |
797 request->state = EC_EEPROM_REQ_ERROR; |
800 request->state = EC_EEPROM_REQ_ERROR; |
798 wake_up(&master->eeprom_queue); |
801 wake_up(&master->eeprom_queue); |
799 fsm->state = ec_fsm_master_state_error; |
802 fsm->state = ec_fsm_master_state_error; |
800 return; |
803 return; |
801 } |
804 } |
809 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
812 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
810 return; |
813 return; |
811 } |
814 } |
812 |
815 |
813 // finished writing EEPROM |
816 // finished writing EEPROM |
814 EC_INFO("Finished writing EEPROM of slave %i.\n", slave->ring_position); |
817 if (master->debug_level) |
|
818 EC_DBG("Finished writing EEPROM data to slave %i.\n", |
|
819 slave->ring_position); |
815 request->state = EC_EEPROM_REQ_COMPLETED; |
820 request->state = EC_EEPROM_REQ_COMPLETED; |
816 wake_up(&master->eeprom_queue); |
821 wake_up(&master->eeprom_queue); |
817 |
822 |
818 // TODO: Evaluate new EEPROM contents! |
823 // TODO: Evaluate new EEPROM contents! |
819 |
824 |