diff --git a/Makefile b/Makefile index 752f819..93b0ce3 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ ENABLE_RX_SIGNAL_BAR := 1 # Tx Audio Bar 300 B ENABLE_TX_AUDIO_BAR := 0 # Side Button Menu 300 B -ENABLE_SIDE_BUTT_MENU := 0 +ENABLE_SIDE_BUTT_MENU := 1 # Key Lock 400 B ENABLE_KEYLOCK := 0 #ENABLE_PANADAPTER := 0 diff --git a/app/menu.c b/app/menu.c index 9623b57..4e347c7 100644 --- a/app/menu.c +++ b/app/menu.c @@ -538,7 +538,8 @@ void MENU_AcceptSetting(void) case MENU_MEM_NAME: { // trailing trim - for (int i = 9; i >= 0; i--) + int i; + for (i = 9; i >= 0; i--) { if (g_edit[i] != ' ' && g_edit[i] != '_' && g_edit[i] != 0x00 && g_edit[i] != 0xff) break; @@ -547,8 +548,8 @@ void MENU_AcceptSetting(void) } // save the channel name - memset(g_tx_vfo->channel_name, 0, sizeof(g_tx_vfo->channel_name)); - memcpy(g_tx_vfo->channel_name, g_edit, 10); + memset(&g_tx_vfo->channel_name, 0, sizeof(g_tx_vfo->channel_name)); + memcpy(g_tx_vfo->channel_name.name, g_edit, sizeof(g_tx_vfo->channel_name.name)); SETTINGS_save_channel(g_sub_menu_selection, g_eeprom.config.setting.tx_vfo_num, g_tx_vfo, 3); g_flag_reconfigure_vfos = true; return; diff --git a/firmware.bin b/firmware.bin index 6bfebff..e9b7a0b 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 92f608e..377bd36 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/radio.c b/radio.c index 8d4864b..3e56428 100644 --- a/radio.c +++ b/radio.c @@ -211,7 +211,7 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur attributes = g_user_channel_attributes[channel]; #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) - UART_printf("config chan 1 %u %u %u %u %u\r\n", channel, chan, attributes.band, attributes.scanlist1, attributes.scanlist2); +// UART_printf("config chan 1 %u %u %u %u %u\r\n", channel, chan, attributes.band, attributes.scanlist1, attributes.scanlist2); #endif if (attributes.attributes == 0xff) @@ -277,13 +277,13 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur p_vfo->freq_config_tx.code = p_vfo->channel.tx_ctcss_cdcss_code; #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) - UART_printf("config chan 2 %u %u %u %u %u %uHz\r\n", channel, chan, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); +// UART_printf("config chan 2 %u %u %u %u %u %uHz\r\n", channel, chan, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); #endif } else { #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) - UART_printf("config chan 3 %u %u %u %u %uHz\r\n", channel, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); +// UART_printf("config chan 3 %u %u %u %u %uHz\r\n", channel, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); #endif } @@ -333,10 +333,10 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur RADIO_ApplyOffset(p_vfo, true); // channel name - memset(p_vfo->channel_name, 0, sizeof(p_vfo->channel_name)); + memset(&p_vfo->channel_name, 0, sizeof(p_vfo->channel_name)); if (channel <= USER_CHANNEL_LAST) // EEPROM_ReadBuffer(0x0F50 + (channel * 16), p_vfo->channel_name, 10); // only 10 bytes used - memcpy(p_vfo->channel_name, &g_eeprom.config.channel_name[channel].name, sizeof(g_eeprom.config.channel_name[channel].name)); + memcpy(p_vfo->channel_name.name, &g_eeprom.config.channel_name[channel].name, sizeof(p_vfo->channel_name.name)); if (p_vfo->channel.am_mode > 0) { // freq/chan is in AM mode diff --git a/settings.c b/settings.c index 672abb4..4df2442 100644 --- a/settings.c +++ b/settings.c @@ -425,10 +425,11 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, v if (IS_USER_CHANNEL(channel)) g_eeprom.config.channel_attributes[channel] = g_user_channel_attributes[channel]; -// memcpy(g_eeprom.config.channel_name[channel], p_vfo->channel_name, 16); + memset(&g_eeprom.config.channel_name[channel], 0, sizeof(g_eeprom.config.channel_name[channel])); + memcpy(g_eeprom.config.channel_name[channel].name, p_vfo->channel_name.name, sizeof(g_eeprom.config.channel_name[channel].name)); #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) - UART_printf("save chan %04X %3u %3u %u %u %uHz\r\n", eeprom_addr, chan, channel, vfo, mode, p_channel->frequency * 10); +// UART_printf("save chan %04X %3u %3u %u %u %uHz\r\n", eeprom_addr, chan, channel, vfo, mode, p_channel->frequency * 10); #endif } else @@ -453,19 +454,19 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, v #ifndef ENABLE_KEEP_MEM_NAME // clear/reset the channel name - EEPROM_WriteBuffer8(eeprom_addr + 0, g_eeprom.config.channel_name[channel] + 0); - EEPROM_WriteBuffer8(eeprom_addr + 8, g_eeprom.config.channel_name[channel] + 8); + EEPROM_WriteBuffer8(eeprom_addr + 0, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 0); + EEPROM_WriteBuffer8(eeprom_addr + 8, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 8); #else if (p_vfo != NULL) - memcpy(&g_eeprom.config.channel_name[channel], p_vfo->channel_name, 10); + memcpy(g_eeprom.config.channel_name[channel].name, p_vfo->channel_name.name, sizeof(g_eeprom.config.channel_name[channel].name)); if (mode >= 3 || p_vfo == NULL) { // save the channel name - EEPROM_WriteBuffer8(eeprom_addr + 0, &g_eeprom.config.channel_name[channel] + 0); - EEPROM_WriteBuffer8(eeprom_addr + 8, &g_eeprom.config.channel_name[channel] + 8); + EEPROM_WriteBuffer8(eeprom_addr + 0, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 0); + EEPROM_WriteBuffer8(eeprom_addr + 8, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 8); } #endif @@ -474,7 +475,7 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, v void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_t *p_vfo) { - const unsigned int index = channel & ~7ul; // eeprom writes are always 8 bytes in length + const unsigned int index = channel & ~7u; // eeprom writes are always 8 bytes in length if (channel >= ARRAY_SIZE(g_user_channel_attributes)) return; @@ -486,11 +487,10 @@ void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_ { // channel attributes t_channel_attrib attribs = p_vfo->channel_attributes; - attribs.unused = 3u; g_user_channel_attributes[channel] = attribs; // remember new attributes g_eeprom.config.channel_attributes[channel] = attribs; - EEPROM_WriteBuffer8(0x0D60 + index, g_user_channel_attributes + index); + EEPROM_WriteBuffer8(0x0D60 + index, &g_user_channel_attributes[index]); } else if (channel <= USER_CHANNEL_LAST) @@ -498,7 +498,7 @@ void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_ g_user_channel_attributes[channel].attributes = 0xff; g_eeprom.config.channel_attributes[channel].attributes = 0xff; - EEPROM_WriteBuffer8(0x0D60 + index, g_user_channel_attributes + index); + EEPROM_WriteBuffer8(0x0D60 + index, &g_user_channel_attributes[index]); } if (channel <= USER_CHANNEL_LAST) @@ -508,15 +508,23 @@ void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_ if (p_vfo != NULL) { memset(&g_eeprom.config.channel_name[channel], 0, sizeof(g_eeprom.config.channel_name[channel])); - memcpy(&g_eeprom.config.channel_name[channel], p_vfo->channel_name, 10); + memcpy(g_eeprom.config.channel_name[channel].name, p_vfo->channel_name.name, sizeof(g_eeprom.config.channel_name[channel].name)); } else { memset(&g_eeprom.config.channel_name[channel], 0xff, sizeof(g_eeprom.config.channel_name[channel])); } - EEPROM_WriteBuffer8(0x0F50 + 0 + index, &g_eeprom.config.channel_name[channel] + 0); - EEPROM_WriteBuffer8(0x0F50 + 8 + index, &g_eeprom.config.channel_name[channel] + 8); +// #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) +// { +// char str[17] = {0}; +// memcpy(str, &g_eeprom.config.channel_name[channel], 10); +// UART_printf("saved name %u %s\r\n", channel, str); +// } +// #endif + + EEPROM_WriteBuffer8(0x0F50 + 0 + index, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 0); + EEPROM_WriteBuffer8(0x0F50 + 8 + index, ((uint8_t *)&g_eeprom.config.channel_name[channel]) + 8); } } diff --git a/settings.h b/settings.h index 4ac7a89..4f89b96 100644 --- a/settings.h +++ b/settings.h @@ -530,7 +530,10 @@ typedef struct vfo_info_t t_channel_attrib channel_attributes; - char channel_name[16]; + struct { + char name[10]; + uint8_t unused[6]; + } channel_name; uint16_t step_freq;