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:
@@ -47,16 +47,17 @@ 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_Write(0xA0);
|
|
||||||
I2C_Write((Address >> 8) & 0xFF);
|
|
||||||
I2C_Write((Address >> 0) & 0xFF);
|
|
||||||
I2C_WriteBuffer(pBuffer, 8);
|
|
||||||
I2C_Stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
I2C_Start();
|
||||||
|
I2C_Write(0xA0);
|
||||||
|
I2C_Write((Address >> 8) & 0xFF);
|
||||||
|
I2C_Write((Address >> 0) & 0xFF);
|
||||||
|
I2C_WriteBuffer(pBuffer, 8);
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
111
settings.c
111
settings.c
@@ -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,11 +124,11 @@ 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);
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gEeprom.VOICE_PROMPT = (Data[0] < 3) ? Data[0] : VOICE_PROMPT_ENGLISH;
|
gEeprom.VOICE_PROMPT = (Data[0] < 3) ? Data[0] : VOICE_PROMPT_ENGLISH;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_RSSI_BAR
|
#ifdef ENABLE_RSSI_BAR
|
||||||
@@ -166,7 +161,7 @@ void SETTINGS_InitEEPROM(void)
|
|||||||
gEeprom.DTMF_GROUP_CALL_CODE = DTMF_ValidateCodes((char *)(Data + 2), 1) ? Data[2] : '#';
|
gEeprom.DTMF_GROUP_CALL_CODE = DTMF_ValidateCodes((char *)(Data + 2), 1) ? Data[2] : '#';
|
||||||
gEeprom.DTMF_DECODE_RESPONSE = (Data[3] < 4) ? Data[3] : 0;
|
gEeprom.DTMF_DECODE_RESPONSE = (Data[3] < 4) ? Data[3] : 0;
|
||||||
gEeprom.DTMF_auto_reset_time = (Data[4] < 61) ? Data[4] : (Data[4] >= 5) ? Data[4] : 10;
|
gEeprom.DTMF_auto_reset_time = (Data[4] < 61) ? Data[4] : (Data[4] >= 5) ? Data[4] : 10;
|
||||||
#endif
|
#endif
|
||||||
gEeprom.DTMF_PRELOAD_TIME = (Data[5] < 101) ? Data[5] * 10 : 300;
|
gEeprom.DTMF_PRELOAD_TIME = (Data[5] < 101) ? Data[5] * 10 : 300;
|
||||||
gEeprom.DTMF_FIRST_CODE_PERSIST_TIME = (Data[6] < 101) ? Data[6] * 10 : 100;
|
gEeprom.DTMF_FIRST_CODE_PERSIST_TIME = (Data[6] < 101) ? Data[6] * 10 : 100;
|
||||||
gEeprom.DTMF_HASH_CODE_PERSIST_TIME = (Data[7] < 101) ? Data[7] * 10 : 100;
|
gEeprom.DTMF_HASH_CODE_PERSIST_TIME = (Data[7] < 101) ? Data[7] * 10 : 100;
|
||||||
@@ -180,62 +175,52 @@ 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");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0F18..0F1F
|
// 0F18..0F1F
|
||||||
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;
|
||||||
|
|
||||||
@@ -278,13 +263,13 @@ void SETTINGS_InitEEPROM(void)
|
|||||||
if(att->__val == 0xff){
|
if(att->__val == 0xff){
|
||||||
att->__val = 0;
|
att->__val = 0;
|
||||||
att->band = 0xf;
|
att->band = 0xf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
||||||
{
|
{
|
||||||
@@ -319,7 +304,7 @@ void SETTINGS_LoadCalibration(void)
|
|||||||
EEPROM_ReadBuffer(0x1F50 + (gEeprom.VOX_LEVEL * 2), &gEeprom.VOX1_THRESHOLD, 2);
|
EEPROM_ReadBuffer(0x1F50 + (gEeprom.VOX_LEVEL * 2), &gEeprom.VOX1_THRESHOLD, 2);
|
||||||
EEPROM_ReadBuffer(0x1F68 + (gEeprom.VOX_LEVEL * 2), &gEeprom.VOX0_THRESHOLD, 2);
|
EEPROM_ReadBuffer(0x1F68 + (gEeprom.VOX_LEVEL * 2), &gEeprom.VOX0_THRESHOLD, 2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//EEPROM_ReadBuffer(0x1F80 + gEeprom.MIC_SENSITIVITY, &Mic, 1);
|
//EEPROM_ReadBuffer(0x1F80 + gEeprom.MIC_SENSITIVITY, &Mic, 1);
|
||||||
//gEeprom.MIC_SENSITIVITY_TUNING = (Mic < 32) ? Mic : 15;
|
//gEeprom.MIC_SENSITIVITY_TUNING = (Mic < 32) ? Mic : 15;
|
||||||
gEeprom.MIC_SENSITIVITY_TUNING = gMicGain_dB2[gEeprom.MIC_SENSITIVITY];
|
gEeprom.MIC_SENSITIVITY_TUNING = gMicGain_dB2[gEeprom.MIC_SENSITIVITY];
|
||||||
@@ -358,7 +343,7 @@ uint32_t SETTINGS_FetchChannelFrequency(const int channel)
|
|||||||
} __attribute__((packed)) info;
|
} __attribute__((packed)) info;
|
||||||
|
|
||||||
EEPROM_ReadBuffer(channel * 16, &info, sizeof(info));
|
EEPROM_ReadBuffer(channel * 16, &info, sizeof(info));
|
||||||
|
|
||||||
return info.frequency;
|
return info.frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,17 +351,16 @@ 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;
|
||||||
|
|
||||||
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++)
|
||||||
@@ -538,7 +522,7 @@ void SETTINGS_SaveSettings(void)
|
|||||||
#ifdef ENABLE_RSSI_BAR
|
#ifdef ENABLE_RSSI_BAR
|
||||||
State[1] = gEeprom.S0_LEVEL;
|
State[1] = gEeprom.S0_LEVEL;
|
||||||
State[2] = gEeprom.S9_LEVEL;
|
State[2] = gEeprom.S9_LEVEL;
|
||||||
#endif
|
#endif
|
||||||
EEPROM_WriteBuffer(0x0EA0, State);
|
EEPROM_WriteBuffer(0x0EA0, State);
|
||||||
|
|
||||||
|
|
||||||
@@ -559,7 +543,7 @@ void SETTINGS_SaveSettings(void)
|
|||||||
State[2] = gEeprom.DTMF_GROUP_CALL_CODE;
|
State[2] = gEeprom.DTMF_GROUP_CALL_CODE;
|
||||||
State[3] = gEeprom.DTMF_DECODE_RESPONSE;
|
State[3] = gEeprom.DTMF_DECODE_RESPONSE;
|
||||||
State[4] = gEeprom.DTMF_auto_reset_time;
|
State[4] = gEeprom.DTMF_auto_reset_time;
|
||||||
#endif
|
#endif
|
||||||
State[5] = gEeprom.DTMF_PRELOAD_TIME / 10U;
|
State[5] = gEeprom.DTMF_PRELOAD_TIME / 10U;
|
||||||
State[6] = gEeprom.DTMF_FIRST_CODE_PERSIST_TIME / 10U;
|
State[6] = gEeprom.DTMF_FIRST_CODE_PERSIST_TIME / 10U;
|
||||||
State[7] = gEeprom.DTMF_HASH_CODE_PERSIST_TIME / 10U;
|
State[7] = gEeprom.DTMF_HASH_CODE_PERSIST_TIME / 10U;
|
||||||
@@ -603,7 +587,7 @@ void SETTINGS_SaveSettings(void)
|
|||||||
if (!gSetting_AM_fix) State[7] &= ~(1u << 5);
|
if (!gSetting_AM_fix) State[7] &= ~(1u << 5);
|
||||||
#endif
|
#endif
|
||||||
State[7] = (State[7] & ~(3u << 6)) | ((gSetting_backlight_on_tx_rx & 3u) << 6);
|
State[7] = (State[7] & ~(3u << 6)) | ((gSetting_backlight_on_tx_rx & 3u) << 6);
|
||||||
|
|
||||||
EEPROM_WriteBuffer(0x0F40, State);
|
EEPROM_WriteBuffer(0x0F40, State);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -653,7 +637,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO,
|
|||||||
|
|
||||||
SETTINGS_UpdateChannel(Channel, pVFO, true);
|
SETTINGS_UpdateChannel(Channel, pVFO, true);
|
||||||
|
|
||||||
if (IS_MR_CHANNEL(Channel)) {
|
if (IS_MR_CHANNEL(Channel)) {
|
||||||
#ifndef ENABLE_KEEP_MEM_NAME
|
#ifndef ENABLE_KEEP_MEM_NAME
|
||||||
// clear/reset the channel name
|
// clear/reset the channel name
|
||||||
SETTINGS_SaveChannelName(Channel, "");
|
SETTINGS_SaveChannelName(Channel, "");
|
||||||
@@ -680,9 +664,8 @@ 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)
|
||||||
|
Reference in New Issue
Block a user