Remove redundant mensets. Memmove -> memcpy

* The whole gEeprom has been zero'd before. Moreover, strcpy null-terminates.
* There's no aliasing between gEeprom.* and Data.

Size: 60760 -> 60664
This commit is contained in:
Juan Antonio
2023-12-23 09:54:30 +01:00
committed by egzumer
parent edf1f983d6
commit 1281bbf033
2 changed files with 56 additions and 72 deletions

View File

@@ -47,15 +47,16 @@ void EEPROM_WriteBuffer(uint16_t Address, const void *pBuffer)
uint8_t buffer[8]; uint8_t buffer[8];
EEPROM_ReadBuffer(Address, buffer, 8); EEPROM_ReadBuffer(Address, buffer, 8);
if (memcmp(pBuffer, buffer, 8) != 0) if (memcmp(pBuffer, buffer, 8) == 0) {
{ return;
}
I2C_Start(); I2C_Start();
I2C_Write(0xA0); I2C_Write(0xA0);
I2C_Write((Address >> 8) & 0xFF); I2C_Write((Address >> 8) & 0xFF);
I2C_Write((Address >> 0) & 0xFF); I2C_Write((Address >> 0) & 0xFF);
I2C_WriteBuffer(pBuffer, 8); I2C_WriteBuffer(pBuffer, 8);
I2C_Stop(); I2C_Stop();
}
// give the EEPROM time to burn the data in (apparently takes 5ms) // give the EEPROM time to burn the data in (apparently takes 5ms)
SYSTEM_DelayMs(8); SYSTEM_DelayMs(8);

View File

@@ -35,16 +35,11 @@ static const uint32_t gDefaultFrequencyTable[] =
43350000 // 43350000 //
}; };
EEPROM_Config_t gEeprom; EEPROM_Config_t gEeprom = { 0 };
void SETTINGS_InitEEPROM(void) void SETTINGS_InitEEPROM(void)
{ {
unsigned int i; uint8_t Data[16] = {0};
uint8_t Data[16];
memset(Data, 0, sizeof(Data));
memset(&gEeprom, 0, sizeof(gEeprom));
// 0E70..0E77 // 0E70..0E77
EEPROM_ReadBuffer(0x0E70, Data, 8); EEPROM_ReadBuffer(0x0E70, Data, 8);
gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST; gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST;
@@ -129,7 +124,7 @@ void SETTINGS_InitEEPROM(void)
// 0E98..0E9F // 0E98..0E9F
EEPROM_ReadBuffer(0x0E98, Data, 8); EEPROM_ReadBuffer(0x0E98, Data, 8);
memmove(&gEeprom.POWER_ON_PASSWORD, Data, 4); memcpy(&gEeprom.POWER_ON_PASSWORD, Data, 4);
// 0EA0..0EA7 // 0EA0..0EA7
EEPROM_ReadBuffer(0x0EA0, Data, 8); EEPROM_ReadBuffer(0x0EA0, Data, 8);
@@ -180,54 +175,44 @@ void SETTINGS_InitEEPROM(void)
// 0EE0..0EE7 // 0EE0..0EE7
EEPROM_ReadBuffer(0x0EE0, Data, 8); EEPROM_ReadBuffer(0x0EE0, Data, sizeof(gEeprom.ANI_DTMF_ID));
if (DTMF_ValidateCodes((char *)Data, 8)) if (DTMF_ValidateCodes((char *)Data, sizeof(gEeprom.ANI_DTMF_ID))) {
memmove(gEeprom.ANI_DTMF_ID, Data, 8); memcpy(gEeprom.ANI_DTMF_ID, Data, sizeof(gEeprom.ANI_DTMF_ID));
else } else {
{
memset(gEeprom.ANI_DTMF_ID, 0, sizeof(gEeprom.ANI_DTMF_ID));
strcpy(gEeprom.ANI_DTMF_ID, "123"); strcpy(gEeprom.ANI_DTMF_ID, "123");
} }
// 0EE8..0EEF // 0EE8..0EEF
EEPROM_ReadBuffer(0x0EE8, Data, 8); EEPROM_ReadBuffer(0x0EE8, Data, sizeof(gEeprom.KILL_CODE));
if (DTMF_ValidateCodes((char *)Data, 8)) if (DTMF_ValidateCodes((char *)Data, sizeof(gEeprom.KILL_CODE))) {
memmove(gEeprom.KILL_CODE, Data, 8); memcpy(gEeprom.KILL_CODE, Data, sizeof(gEeprom.KILL_CODE));
else } else {
{
memset(gEeprom.KILL_CODE, 0, sizeof(gEeprom.KILL_CODE));
strcpy(gEeprom.KILL_CODE, "ABCD9"); strcpy(gEeprom.KILL_CODE, "ABCD9");
} }
// 0EF0..0EF7 // 0EF0..0EF7
EEPROM_ReadBuffer(0x0EF0, Data, 8); EEPROM_ReadBuffer(0x0EF0, Data, sizeof(gEeprom.REVIVE_CODE));
if (DTMF_ValidateCodes((char *)Data, 8)) if (DTMF_ValidateCodes((char *)Data, sizeof(gEeprom.REVIVE_CODE))) {
memmove(gEeprom.REVIVE_CODE, Data, 8); memcpy(gEeprom.REVIVE_CODE, Data, sizeof(gEeprom.REVIVE_CODE));
else } else {
{
memset(gEeprom.REVIVE_CODE, 0, sizeof(gEeprom.REVIVE_CODE));
strcpy(gEeprom.REVIVE_CODE, "9DCBA"); strcpy(gEeprom.REVIVE_CODE, "9DCBA");
} }
#endif #endif
// 0EF8..0F07 // 0EF8..0F07
EEPROM_ReadBuffer(0x0EF8, Data, 16); EEPROM_ReadBuffer(0x0EF8, Data, sizeof(gEeprom.DTMF_UP_CODE));
if (DTMF_ValidateCodes((char *)Data, 16)) if (DTMF_ValidateCodes((char *)Data, sizeof(gEeprom.DTMF_UP_CODE))) {
memmove(gEeprom.DTMF_UP_CODE, Data, 16); memcpy(gEeprom.DTMF_UP_CODE, Data, sizeof(gEeprom.DTMF_UP_CODE));
else } else {
{
memset(gEeprom.DTMF_UP_CODE, 0, sizeof(gEeprom.DTMF_UP_CODE));
strcpy(gEeprom.DTMF_UP_CODE, "12345"); strcpy(gEeprom.DTMF_UP_CODE, "12345");
} }
// 0F08..0F17 // 0F08..0F17
EEPROM_ReadBuffer(0x0F08, Data, 16); EEPROM_ReadBuffer(0x0F08, Data, sizeof(gEeprom.DTMF_DOWN_CODE));
if (DTMF_ValidateCodes((char *)Data, 16)) if (DTMF_ValidateCodes((char *)Data, sizeof(gEeprom.DTMF_DOWN_CODE))) {
memmove(gEeprom.DTMF_DOWN_CODE, Data, 16); memcpy(gEeprom.DTMF_DOWN_CODE, Data, sizeof(gEeprom.DTMF_DOWN_CODE));
else } else {
{
memset(gEeprom.DTMF_DOWN_CODE, 0, sizeof(gEeprom.DTMF_DOWN_CODE));
strcpy(gEeprom.DTMF_DOWN_CODE, "54321"); strcpy(gEeprom.DTMF_DOWN_CODE, "54321");
} }
@@ -235,7 +220,7 @@ void SETTINGS_InitEEPROM(void)
EEPROM_ReadBuffer(0x0F18, Data, 8); EEPROM_ReadBuffer(0x0F18, Data, 8);
// gEeprom.SCAN_LIST_DEFAULT = (Data[0] < 2) ? Data[0] : false; // gEeprom.SCAN_LIST_DEFAULT = (Data[0] < 2) ? Data[0] : false;
gEeprom.SCAN_LIST_DEFAULT = (Data[0] < 3) ? Data[0] : false; // we now have 'all' channel scan option gEeprom.SCAN_LIST_DEFAULT = (Data[0] < 3) ? Data[0] : false; // we now have 'all' channel scan option
for (i = 0; i < 2; i++) for (unsigned int i = 0; i < 2; i++)
{ {
const unsigned int j = 1 + (i * 3); const unsigned int j = 1 + (i * 3);
gEeprom.SCAN_LIST_ENABLED[i] = (Data[j + 0] < 2) ? Data[j] : false; gEeprom.SCAN_LIST_ENABLED[i] = (Data[j + 0] < 2) ? Data[j] : false;
@@ -255,13 +240,13 @@ void SETTINGS_InitEEPROM(void)
gSetting_350EN = (Data[5] < 2) ? Data[5] : true; gSetting_350EN = (Data[5] < 2) ? Data[5] : true;
gSetting_ScrambleEnable = (Data[6] < 2) ? Data[6] : true; gSetting_ScrambleEnable = (Data[6] < 2) ? Data[6] : true;
//gSetting_TX_EN = (Data[7] & (1u << 0)) ? true : false; //gSetting_TX_EN = (Data[7] & (1u << 0)) ? true : false;
gSetting_live_DTMF_decoder = (Data[7] & (1u << 1)) ? true : false; gSetting_live_DTMF_decoder = !!(Data[7] & (1u << 1));
gSetting_battery_text = (((Data[7] >> 2) & 3u) <= 2) ? (Data[7] >> 2) & 3 : 2; gSetting_battery_text = (((Data[7] >> 2) & 3u) <= 2) ? (Data[7] >> 2) & 3 : 2;
#ifdef ENABLE_AUDIO_BAR #ifdef ENABLE_AUDIO_BAR
gSetting_mic_bar = (Data[7] & (1u << 4)) ? true : false; gSetting_mic_bar = !!(Data[7] & (1u << 4));
#endif #endif
#ifdef ENABLE_AM_FIX #ifdef ENABLE_AM_FIX
gSetting_AM_fix = (Data[7] & (1u << 5)) ? true : false; gSetting_AM_fix = !!(Data[7] & (1u << 5));
#endif #endif
gSetting_backlight_on_tx_rx = (Data[7] >> 6) & 3u; gSetting_backlight_on_tx_rx = (Data[7] >> 6) & 3u;
@@ -284,7 +269,7 @@ void SETTINGS_InitEEPROM(void)
// 0F30..0F3F // 0F30..0F3F
EEPROM_ReadBuffer(0x0F30, gCustomAesKey, sizeof(gCustomAesKey)); EEPROM_ReadBuffer(0x0F30, gCustomAesKey, sizeof(gCustomAesKey));
bHasCustomAesKey = false; bHasCustomAesKey = false;
for (i = 0; i < ARRAY_SIZE(gCustomAesKey); i++) for (unsigned int i = 0; i < ARRAY_SIZE(gCustomAesKey); i++)
{ {
if (gCustomAesKey[i] != 0xFFFFFFFFu) if (gCustomAesKey[i] != 0xFFFFFFFFu)
{ {
@@ -367,7 +352,7 @@ void SETTINGS_FetchChannelName(char *s, const int channel)
if (s == NULL) if (s == NULL)
return; return;
memset(s, 0, 11); // 's' had better be large enough ! s[0] = 0;
if (channel < 0) if (channel < 0)
return; return;
@@ -375,8 +360,7 @@ void SETTINGS_FetchChannelName(char *s, const int channel)
if (!RADIO_CheckValidChannel(channel, false, 0)) if (!RADIO_CheckValidChannel(channel, false, 0))
return; return;
EEPROM_ReadBuffer(0x0F50 + (channel * 16), s + 0, 8); EEPROM_ReadBuffer(0x0F50 + (channel * 16), s, 10);
EEPROM_ReadBuffer(0x0F58 + (channel * 16), s + 8, 2);
int i; int i;
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
@@ -680,8 +664,7 @@ void SETTINGS_SaveBatteryCalibration(const uint16_t * batteryCalibration)
void SETTINGS_SaveChannelName(uint8_t channel, const char * name) void SETTINGS_SaveChannelName(uint8_t channel, const char * name)
{ {
uint16_t offset = channel * 16; uint16_t offset = channel * 16;
uint8_t buf[16]; uint8_t buf[16] = {0};
memset(&buf, 0x00, sizeof(buf));
memcpy(buf, name, MIN(strlen(name), 10u)); memcpy(buf, name, MIN(strlen(name), 10u));
EEPROM_WriteBuffer(0x0F50 + offset, buf); EEPROM_WriteBuffer(0x0F50 + offset, buf);
EEPROM_WriteBuffer(0x0F58 + offset, buf + 8); EEPROM_WriteBuffer(0x0F58 + offset, buf + 8);
@@ -729,7 +712,7 @@ void SETTINGS_UpdateChannel(uint8_t channel, const VFO_Info_t *pVFO, bool keep)
void SETTINGS_WriteBuildOptions(void) void SETTINGS_WriteBuildOptions(void)
{ {
uint8_t buf[8]= {}; uint8_t buf[8] = {0};
buf[0] = 0 buf[0] = 0
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
| (1 << 0) | (1 << 0)