/** * \fn BOOL HandleModConEEPROMProgram(void) * \brief Program a byte in EEPROM by given address. * \return TRUE if EEPROM program successfully. */ BOOL HandleModConEEPROMProgram(void) { UINT8 volatile * const address = (UINT8 volatile *)Packet_Parameter12; if ((UINT16)address >= MODCON_EEPROM_ADDRESS_BEGIN && (UINT16)address <= MODCON_EEPROM_ADDRESS_END) { if (address != (UINT8 volatile * const)MODCON_EEPROM_ADDRESS_END) { if (!EEPROM_Write8(address, Packet_Parameter3)) { #ifndef NO_DEBUG DEBUG(__LINE__, ERR_EEPROM_WRITE); #endif return bFALSE; } return bTRUE; } if (!EEPROM_Erase()) { #ifndef NO_DEBUG DEBUG(__LINE__, ERR_EEPROM_ERASE); #endif return bFALSE; } return bTRUE; } return bFALSE; }
static rt_bool_t calibration_data_save(calculate_data_t *data) { rt_uint8_t count; rt_uint8_t *buf; count = sizeof(calculate_data_t) + 1; buf = (rt_uint8_t *)rt_malloc(count); buf[0] = CALIBRATION_DATA_MAGIC; rt_memcpy(&buf[1], data, count - 1); /* power up the eeprom */ EEPROM_PowerDown(DISABLE); /* erase the page for touch data */ EEPROM_Erase(CALIBRATION_DATA_PAGE); EEPROM_Write(0, CALIBRATION_DATA_PAGE, buf, MODE_8_BIT, count); rt_free(buf); return RT_TRUE; }