From af9b0d6cb71fe3befbe57f756ad344b439b1fd36 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Wed, 20 Sep 2023 08:29:11 +0100 Subject: [PATCH] Fix big freq digits moving 1 pixel to the right + added chan name edit menu --- app/dtmf.c | 32 ++- app/dtmf.h | 2 + app/fm.c | 8 +- app/main.c | 3 +- app/menu.c | 615 +++++++++++++++++++++++++++----------------- app/scanner.c | 2 +- board.c | 36 ++- board.h | 1 + driver/st7565.c | 7 +- firmware | Bin 165728 -> 165748 bytes firmware.bin | Bin 49976 -> 50684 bytes firmware.packed.bin | Bin 49994 -> 50702 bytes frequencies.c | 2 +- helper/boot.c | 2 +- misc.c | 2 +- misc.h | 15 +- radio.c | 12 +- settings.c | 56 ++-- ui/main.c | 72 ++---- ui/menu.c | 143 ++++++---- ui/menu.h | 4 + version.c | 2 +- win_make.bat | 2 +- 23 files changed, 619 insertions(+), 399 deletions(-) diff --git a/app/dtmf.c b/app/dtmf.c index fc70b0c..8c9a9c1 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -86,7 +86,7 @@ bool DTMF_ValidateCodes(char *pCode, uint8_t Size) bool DTMF_GetContact(const int Index, char *pContact) { int i = -1; - if (Index >= 0 && Index < 16 && pContact != NULL) // max 16 DTMF contacts + if (Index >= 0 && Index < MAX_DTMF_CONTACTS && pContact != NULL) { EEPROM_ReadBuffer(0x1C00 + (Index * 16), pContact, 16); i = (int)pContact[0] - ' '; @@ -96,10 +96,10 @@ bool DTMF_GetContact(const int Index, char *pContact) bool DTMF_FindContact(const char *pContact, char *pResult) { - char Contact [16]; + char Contact[16]; unsigned int i; - for (i = 0; i < 16; i++) + for (i = 0; i < MAX_DTMF_CONTACTS; i++) { unsigned int j; @@ -130,7 +130,6 @@ char DTMF_GetCharacter(const uint8_t code) bool DTMF_CompareMessage(const char *pMsg, const char *pTemplate, uint8_t Size, bool bCheckGroup) { unsigned int i; - for (i = 0; i < Size; i++) { if (pMsg[i] != pTemplate[i]) @@ -147,7 +146,6 @@ bool DTMF_CompareMessage(const char *pMsg, const char *pTemplate, uint8_t Size, bool DTMF_CheckGroupCall(const char *pMsg, uint32_t Size) { uint32_t i; - for (i = 0; i < Size; i++) if (pMsg[i] == gEeprom.DTMF_GROUP_CALL_CODE) break; @@ -189,12 +187,15 @@ void DTMF_HandleRequest(void) { Offset = gDTMF_WriteIndex - 9; sprintf(String, "%s%c%s", gEeprom.ANI_DTMF_ID, gEeprom.DTMF_SEPARATE_CODE, gEeprom.KILL_CODE); + if (DTMF_CompareMessage(gDTMF_Received + Offset, String, 9, true)) { if (gEeprom.PERMIT_REMOTE_KILL) { gSetting_KILLED = true; + SETTINGS_SaveSettings(); + gDTMF_ReplyState = DTMF_REPLY_AB; #ifdef ENABLE_FMRADIO @@ -220,12 +221,12 @@ void DTMF_HandleRequest(void) sprintf(String, "%s%c%s", gEeprom.ANI_DTMF_ID, gEeprom.DTMF_SEPARATE_CODE, gEeprom.REVIVE_CODE); if (DTMF_CompareMessage(gDTMF_Received + Offset, String, 9, true)) { - gSetting_KILLED = false; + gSetting_KILLED = false; SETTINGS_SaveSettings(); gDTMF_ReplyState = DTMF_REPLY_AB; - gDTMF_CallState = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; - gUpdateStatus = true; + gDTMF_CallState = DTMF_CALL_STATE_NONE; + gUpdateDisplay = true; + gUpdateStatus = true; return; } } @@ -234,7 +235,7 @@ void DTMF_HandleRequest(void) { if (DTMF_CompareMessage(gDTMF_Received + (gDTMF_WriteIndex - 2), "AB", 2, true)) { - gDTMF_State = DTMF_STATE_TX_SUCC; + gDTMF_State = DTMF_STATE_TX_SUCC; gUpdateDisplay = true; return; } @@ -243,10 +244,12 @@ void DTMF_HandleRequest(void) if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT && gDTMF_CallMode == DTMF_CALL_MODE_NOT_GROUP && gDTMF_WriteIndex >= 9) { Offset = gDTMF_WriteIndex - 9; + sprintf(String, "%s%c%s", gDTMF_String, gEeprom.DTMF_SEPARATE_CODE, "AAAAA"); + if (DTMF_CompareMessage(gDTMF_Received + Offset, String, 9, false)) { - gDTMF_State = DTMF_STATE_CALL_OUT_RSP; + gDTMF_State = DTMF_STATE_CALL_OUT_RSP; gUpdateDisplay = true; } } @@ -257,12 +260,16 @@ void DTMF_HandleRequest(void) if (gDTMF_WriteIndex >= 7) { Offset = gDTMF_WriteIndex - 7; + sprintf(String, "%s%c", gEeprom.ANI_DTMF_ID, gEeprom.DTMF_SEPARATE_CODE); + gDTMF_IsGroupCall = false; + if (DTMF_CompareMessage(gDTMF_Received + Offset, String, 4, true)) { gDTMF_CallState = DTMF_CALL_STATE_RECEIVED; - memmove(gDTMF_Callee, gDTMF_Received + Offset, 3); + + memmove(gDTMF_Callee, gDTMF_Received + Offset + 0, 3); memmove(gDTMF_Caller, gDTMF_Received + Offset + 4, 3); gUpdateDisplay = true; @@ -364,4 +371,3 @@ void DTMF_Reply(void) BK4819_ExitDTMF_TX(false); } - diff --git a/app/dtmf.h b/app/dtmf.h index fdcf614..1ffd8b3 100644 --- a/app/dtmf.h +++ b/app/dtmf.h @@ -20,6 +20,8 @@ #include #include +#define MAX_DTMF_CONTACTS 16 + enum DTMF_State_t { DTMF_STATE_0 = 0, DTMF_STATE_TX_SUCC, diff --git a/app/fm.c b/app/fm.c index 1573ab9..39e6a53 100644 --- a/app/fm.c +++ b/app/fm.c @@ -59,7 +59,11 @@ uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) for (i = 0; i < ARRAY_SIZE(gFM_Channels); i++) { - Channel %= ARRAY_SIZE(gFM_Channels); + if (Channel == 0xFF) + Channel = ARRAY_SIZE(gFM_Channels) - 1; + else + if (Channel >= ARRAY_SIZE(gFM_Channels)) + Channel = 0; if (FM_CheckValidChannel(Channel)) return Channel; Channel += Direction; @@ -182,7 +186,7 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) const uint16_t Status = BK1080_ReadRegister(BK1080_REG_10); if ((Status & BK1080_REG_10_MASK_AFCRL) == BK1080_REG_10_AFCRL_NOT_RAILED && BK1080_REG_10_GET_RSSI(Status) >= 10) { - // if (Deviation > -281 && Deviation < 280) + //if (Deviation > -281 && Deviation < 280) if (Deviation < 280 || Deviation > 3815) { // not BLE(less than or equal) diff --git a/app/main.c b/app/main.c index 3cbe149..5a9b0ec 100644 --- a/app/main.c +++ b/app/main.c @@ -314,6 +314,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gInputBoxIndex = 0; Channel = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; + if (!RADIO_CheckValidChannel(Channel, false, 0)) { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; @@ -398,7 +399,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gInputBoxIndex = 0; Channel = (gInputBox[0] * 10) + gInputBox[1]; - if (Channel >= 1 && Channel <= 10) + if (Channel >= 1 && Channel <= ARRAY_SIZE(NoaaFrequencyTable)) { Channel += NOAA_CHANNEL_FIRST; #ifdef ENABLE_VOICE diff --git a/app/menu.c b/app/menu.c index 46552c5..02bdb9e 100644 --- a/app/menu.c +++ b/app/menu.c @@ -39,6 +39,7 @@ #endif #include "ui/inputbox.h" #include "ui/menu.h" +#include "ui/menu.h" #include "ui/ui.h" #ifndef ARRAY_SIZE @@ -64,15 +65,16 @@ VOICE_ID_BUSY_LOCKOUT, // BUSYCL VOICE_ID_MEMORY_CHANNEL, // CH-SAV VOICE_ID_DELETE_CHANNEL, // CH-DEL + VOICE_ID_INVALID, // CH-EDIT VOICE_ID_INVALID, // CH-DIS VOICE_ID_SAVE_MODE, // BATSAV VOICE_ID_VOX, // VOX VOICE_ID_INVALID, // BACKLT VOICE_ID_DUAL_STANDBY, // DUALRX VOICE_ID_BEEP_PROMPT, // BEEP - #ifdef ENABLE_VOICE + #ifdef ENABLE_VOICE VOICE_ID_VOICE_PROMPT, // VOICE - #endif + #endif VOICE_ID_INVALID, // SC-REV VOICE_ID_INVALID, // KEYLOC VOICE_ID_INVALID, // S-ADD1 @@ -285,17 +287,16 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_MEM_CH: case MENU_1_CALL: -// case MENU_SLIST1: -// case MENU_SLIST2: case MENU_DEL_CH: + case MENU_MEM_NAME: *pMin = 0; - *pMax = 199; + *pMax = MR_CHANNEL_LAST; break; case MENU_SLIST1: case MENU_SLIST2: *pMin = -1; - *pMax = 199; + *pMax = MR_CHANNEL_LAST; break; case MENU_SAVE: @@ -344,8 +345,8 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) break; case MENU_F_CALI: - *pMin = -1000; - *pMax = +1000; + *pMin = -50; + *pMax = +50; break; default: @@ -373,7 +374,7 @@ void MENU_AcceptSetting(void) { default: return; - + case MENU_SQL: gEeprom.SQUELCH_LEVEL = gSubMenuSelection; gVfoConfigureMode = VFO_CONFIGURE_1; @@ -479,7 +480,28 @@ void MENU_AcceptSetting(void) case MENU_MEM_CH: gTxVfo->CHANNEL_SAVE = gSubMenuSelection; gRequestSaveChannel = 2; - gEeprom.MrChannel[0] = gSubMenuSelection; + #if 0 + gEeprom.MrChannel[0] = gSubMenuSelection; + #else + gEeprom.MrChannel[gEeprom.TX_CHANNEL] = gSubMenuSelection; + #endif + return; + + case MENU_MEM_NAME: + { // trailing trim + for (int i = 9; i >= 0; i--) + { + if (edit[i] != ' ' && edit[i] != '_' && edit[i] != 0 && edit[i] != 0xff) + break; + edit[i] = ' '; + } + } + + // save the channel name + memset(gTxVfo->Name, 0xff, sizeof(gTxVfo->Name)); + memmove(gTxVfo->Name, edit, 10); + SETTINGS_SaveChannel(gSubMenuSelection, gEeprom.TX_CHANNEL, gTxVfo, 2); + gFlagReconfigureVfos = true; return; case MENU_SAVE: @@ -623,13 +645,15 @@ void MENU_AcceptSetting(void) case MENU_BAT_TXT: gSetting_battery_text = gSubMenuSelection; break; - + case MENU_D_DCD: gTxVfo->DTMF_DECODING_ENABLE = gSubMenuSelection; gRequestSaveChannel = 1; return; case MENU_D_LIVE_DEC: + gDTMF_RecvTimeoutSaved = 0; + gDTMF_ReceivedSaved[0] = '\0'; gSetting_live_DTMF_decoder = gSubMenuSelection; break; @@ -873,6 +897,10 @@ void MENU_ShowCurrentSetting(void) #endif break; + case MENU_MEM_NAME: + gSubMenuSelection = gEeprom.MrChannel[gEeprom.TX_CHANNEL]; + break; + case MENU_SAVE: gSubMenuSelection = gEeprom.BATTERY_SAVE; break; @@ -990,7 +1018,7 @@ void MENU_ShowCurrentSetting(void) case MENU_BAT_TXT: gSubMenuSelection = gSetting_battery_text; return; - + case MENU_D_DCD: gSubMenuSelection = gTxVfo->DTMF_DECODING_ENABLE; break; @@ -1065,12 +1093,12 @@ void MENU_ShowCurrentSetting(void) static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { + uint8_t Offset; + int32_t Min; + int32_t Max; uint16_t Value = 0; - if (bKeyHeld) - return; - - if (!bKeyPressed) + if (bKeyHeld || !bKeyPressed) return; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; @@ -1106,89 +1134,92 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } gInputBoxIndex = 0; + + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + return; } - else + + if (gMenuCursor == MENU_OFFSET) { - if (gMenuCursor == MENU_OFFSET) - { - uint32_t Frequency; + uint32_t Frequency; - if (gInputBoxIndex < 6) - { - #ifdef ENABLE_VOICE - gAnotherVoiceID = (VOICE_ID_t)Key; - #endif - return; - } - - gInputBoxIndex = 0; - NUMBER_Get(gInputBox, &Frequency); - Frequency += 75; + if (gInputBoxIndex < 6) + { // invalid frequency #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif - gSubMenuSelection = FREQUENCY_FloorToStep(Frequency, gTxVfo->StepFrequency, 0); return; } - if (gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH || gMenuCursor == MENU_1_CALL) + #ifdef ENABLE_VOICE + gAnotherVoiceID = (VOICE_ID_t)Key; + #endif + + NUMBER_Get(gInputBox, &Frequency); + gSubMenuSelection = FREQUENCY_FloorToStep(Frequency + 62, gTxVfo->StepFrequency, 0); + + gInputBoxIndex = 0; + return; + } + + if (gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH || gMenuCursor == MENU_1_CALL || gMenuCursor == MENU_MEM_NAME) + { // enter 3-digit channel number + + if (gInputBoxIndex < 3) { - if (gInputBoxIndex < 3) - { - #ifdef ENABLE_VOICE - gAnotherVoiceID = (VOICE_ID_t)Key; - #endif - gRequestDisplayScreen = DISPLAY_MENU; - return; - } - - gInputBoxIndex = 0; - - Value = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; - - if (IS_MR_CHANNEL(Value)) - { - #ifdef ENABLE_VOICE - gAnotherVoiceID = (VOICE_ID_t)Key; - #endif - gSubMenuSelection = Value; - return; - } + #ifdef ENABLE_VOICE + gAnotherVoiceID = (VOICE_ID_t)Key; + #endif + gRequestDisplayScreen = DISPLAY_MENU; + return; } - else + + gInputBoxIndex = 0; + + Value = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; + + if (IS_MR_CHANNEL(Value)) { - int32_t Min; - int32_t Max; - - if (!MENU_GetLimits(gMenuCursor, &Min, &Max)) - { - const uint8_t Offset = (Max >= 100) ? 3 : (Max >= 10) ? 2 : 1; - - switch (gInputBoxIndex) - { - case 1: - Value = gInputBox[0]; - break; - case 2: - Value = (gInputBox[0] * 10) + gInputBox[1]; - break; - case 3: - Value = (gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]; - break; - } - - if (Offset == gInputBoxIndex) - gInputBoxIndex = 0; - - if (Value <= Max) - { - gSubMenuSelection = Value; - return; - } - } - else - gInputBoxIndex = 0; + #ifdef ENABLE_VOICE + gAnotherVoiceID = (VOICE_ID_t)Key; + #endif + gSubMenuSelection = Value; + return; } + + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + return; + } + + if (MENU_GetLimits(gMenuCursor, &Min, &Max)) + { + gInputBoxIndex = 0; + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + return; + } + + Offset = (Max >= 100) ? 3 : (Max >= 10) ? 2 : 1; + + switch (gInputBoxIndex) + { + case 1: + Value = gInputBox[0]; + break; + case 2: + Value = (gInputBox[0] * 10) + gInputBox[1]; + break; + case 3: + Value = (gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]; + break; + } + + if (Offset == gInputBoxIndex) + gInputBoxIndex = 0; + + if (Value <= Max) + { + gSubMenuSelection = Value; + return; } gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; @@ -1196,162 +1227,213 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) { - if (!bKeyHeld && bKeyPressed) + if (bKeyHeld || !bKeyPressed) + return; + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + + if (gCssScanMode == CSS_SCAN_MODE_OFF) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - - if (gCssScanMode == CSS_SCAN_MODE_OFF) + if (gIsInSubMenu) { - if (gIsInSubMenu) + if (gInputBoxIndex == 0 || gMenuCursor != MENU_OFFSET) { - if (gInputBoxIndex == 0 || gMenuCursor != MENU_OFFSET) - { - gAskForConfirmation = 0; // fix bug - gIsInSubMenu = false; - gInputBoxIndex = 0; - gFlagRefreshSetting = true; - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_CANCEL; - #endif - } - else - gInputBox[--gInputBoxIndex] = 10; + gAskForConfirmation = 0; + gIsInSubMenu = false; + gInputBoxIndex = 0; + gFlagRefreshSetting = true; - gRequestDisplayScreen = DISPLAY_MENU; - return; - } - - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_CANCEL; - #endif - gRequestDisplayScreen = DISPLAY_MAIN; - } - else - { - MENU_StopCssScan(); - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; - #endif - gRequestDisplayScreen = DISPLAY_MENU; - } - - gPttWasReleased = true; - } -} - -static void MENU_Key_MENU(bool bKeyPressed, bool bKeyHeld) -{ - if (!bKeyHeld && bKeyPressed) - { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gRequestDisplayScreen = DISPLAY_MENU; - - if (!gIsInSubMenu) - { - #ifdef ENABLE_VOICE - if (gMenuCursor != MENU_SCR) - gAnotherVoiceID = MenuVoices[gMenuCursor]; - #endif - - gAskForConfirmation = 0; - gIsInSubMenu = true; - } - else - { - if (gMenuCursor == MENU_RESET || gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH) - { - switch (gAskForConfirmation) - { - case 0: - gAskForConfirmation = 1; - break; - case 1: - gAskForConfirmation = 2; - - UI_DisplayMenu(); - - if (gMenuCursor == MENU_RESET) - { - #ifdef ENABLE_VOICE - AUDIO_SetVoiceID(0, VOICE_ID_CONFIRM); - AUDIO_PlaySingleVoice(true); - #endif - MENU_AcceptSetting(); - - #if defined(ENABLE_OVERLAY) - overlay_FLASH_RebootToBootloader(); - #else - NVIC_SystemReset(); - #endif - } - - gFlagAcceptSetting = true; - gIsInSubMenu = false; - gAskForConfirmation = 0; - } + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_CANCEL; + #endif } else - { - gFlagAcceptSetting = true; - gIsInSubMenu = false; - } + gInputBox[--gInputBoxIndex] = 10; - gCssScanMode = CSS_SCAN_MODE_OFF; - gUpdateStatus = true; - - #ifdef ENABLE_VOICE - if (gMenuCursor == MENU_SCR) - gAnotherVoiceID = (gSubMenuSelection == 0) ? VOICE_ID_SCRAMBLER_OFF : VOICE_ID_SCRAMBLER_ON; - else - gAnotherVoiceID = VOICE_ID_CONFIRM; - #endif - } - - gInputBoxIndex = 0; - } -} - -static void MENU_Key_STAR(bool bKeyPressed, bool bKeyHeld) -{ - if (!bKeyHeld && bKeyPressed) - { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - - RADIO_SelectVfos(); - - #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && !gRxVfo->IsAM) - #else - if (!gRxVfo->IsAM) - #endif - { - if (gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) - { - if (gCssScanMode == CSS_SCAN_MODE_OFF) - { - MENU_StartCssScan(1); - gRequestDisplayScreen = DISPLAY_MENU; - #ifdef ENABLE_VOICE - AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); - AUDIO_PlaySingleVoice(1); - #endif - } - else - { - MENU_StopCssScan(); - gRequestDisplayScreen = DISPLAY_MENU; - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; - #endif - } - } - - gPttWasReleased = true; + gRequestDisplayScreen = DISPLAY_MENU; return; } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_CANCEL; + #endif + + gRequestDisplayScreen = DISPLAY_MAIN; } + else + { + MENU_StopCssScan(); + + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; + #endif + + gRequestDisplayScreen = DISPLAY_MENU; + } + + gPttWasReleased = true; +} + +static void MENU_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) +{ + if (bKeyHeld || !bKeyPressed) + return; + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gRequestDisplayScreen = DISPLAY_MENU; + + if (!gIsInSubMenu) + { + #ifdef ENABLE_VOICE + if (gMenuCursor != MENU_SCR) + gAnotherVoiceID = MenuVoices[gMenuCursor]; + #endif + + #if 1 + if (gMenuCursor == MENU_DEL_CH || gMenuCursor == MENU_MEM_NAME) + if (!RADIO_CheckValidChannel(gSubMenuSelection, false, 0)) + return; // invalid channel + #endif + + gAskForConfirmation = 0; + gIsInSubMenu = true; + gInputBoxIndex = 0; + edit_index = -1; + + return; + } + + if (gMenuCursor == MENU_MEM_NAME) + { + if (edit_index < 0) + { // enter channel name edit mode + if (!RADIO_CheckValidChannel(gSubMenuSelection, false, 0)) + { + return; + } + + BOARD_fetchChannelName(edit, gSubMenuSelection); + + // pad the channel name out with '_' + edit_index = strlen(edit); + while (edit_index < 10) + edit[edit_index++] = '_'; + edit[edit_index] = 0; + edit_index = 0; // 'edit_index' is going to be used as the cursor position + + return; + } + else + if (edit_index >= 0 && edit_index < 10) + { // editing the channel name characters + + if (++edit_index < 10) + return; // next char + + // exit + gFlagAcceptSetting = false; + gAskForConfirmation = 0; + } + } + + if (gMenuCursor == MENU_RESET || + gMenuCursor == MENU_MEM_CH || + gMenuCursor == MENU_DEL_CH || + gMenuCursor == MENU_MEM_NAME) + { + switch (gAskForConfirmation) + { + case 0: + gAskForConfirmation = 1; + break; + + case 1: + gAskForConfirmation = 2; + + UI_DisplayMenu(); + + if (gMenuCursor == MENU_RESET) + { + #ifdef ENABLE_VOICE + AUDIO_SetVoiceID(0, VOICE_ID_CONFIRM); + AUDIO_PlaySingleVoice(true); + #endif + + MENU_AcceptSetting(); + + #if defined(ENABLE_OVERLAY) + overlay_FLASH_RebootToBootloader(); + #else + NVIC_SystemReset(); + #endif + } + + gFlagAcceptSetting = true; + gIsInSubMenu = false; + gAskForConfirmation = 0; + } + } + else + { + gFlagAcceptSetting = true; + gIsInSubMenu = false; + } + + gCssScanMode = CSS_SCAN_MODE_OFF; + gUpdateStatus = true; + + #ifdef ENABLE_VOICE + if (gMenuCursor == MENU_SCR) + gAnotherVoiceID = (gSubMenuSelection == 0) ? VOICE_ID_SCRAMBLER_OFF : VOICE_ID_SCRAMBLER_ON; + else + gAnotherVoiceID = VOICE_ID_CONFIRM; + #endif + + gInputBoxIndex = 0; +} + +static void MENU_Key_STAR(const bool bKeyPressed, const bool bKeyHeld) +{ + if (bKeyHeld || !bKeyPressed) + return; + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + + RADIO_SelectVfos(); + + #ifdef ENABLE_NOAA + if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && !gRxVfo->IsAM) + #else + if (!gRxVfo->IsAM) + #endif + { + if (gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) + { // scan CTCSS or DCS to find the tone/code of the incoming signal + + if (gCssScanMode == CSS_SCAN_MODE_OFF) + { + MENU_StartCssScan(1); + gRequestDisplayScreen = DISPLAY_MENU; + #ifdef ENABLE_VOICE + AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); + AUDIO_PlaySingleVoice(1); + #endif + } + else + { + MENU_StopCssScan(); + gRequestDisplayScreen = DISPLAY_MENU; + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; + #endif + } + } + + gPttWasReleased = true; + return; + } + + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) @@ -1360,12 +1442,76 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) uint8_t Channel; bool bCheckScanList; + if (gMenuCursor == MENU_MEM_NAME && gIsInSubMenu && edit_index >= 0) + { // change the character + if (bKeyPressed && edit_index < 10) + { + #if 0 + char c1 = edit[edit_index]; + char c2 = 0; + + if (Direction == 0) + return; + + if (Direction < 0) + { + switch (c1) + { + case 'a': c2 = 'Z'; break; + case 'A': c2 = '9'; break; + case '0': c2 = '.'; break; + case '.': c2 = '-'; break; + case '-': c2 = '_'; break; + case '_': c2 = ' '; break; + case ' ': c2 = 'z'; break; + } + } + else + { + switch (c1) + { + case ' ': c2 = '_'; break; + case '_': c2 = '-'; break; + case '-': c2 = '.'; break; + case '.': c2 = '0'; break; + case '9': c2 = 'A'; break; + case 'Z': c2 = 'a'; break; + case 'z': c2 = ' '; break; + } + } + + if (c2 == 0) + { + if ((c1 >= '0' && c1 <= '9') || + (c1 >= 'A' && c1 <= 'Z') || + (c1 >= 'a' && c1 <= 'z')) + { + c2 = c1 + Direction; + } + else + { + c2 = 'A'; + } + } + + edit[edit_index] = c2; + #else + const char c = edit[edit_index] + Direction; + edit[edit_index] = (c < 32) ? 126 : (c > 126) ? 32 : c; + #endif + + gRequestDisplayScreen = DISPLAY_MENU; + } + return; + } + if (!bKeyHeld) { if (!bKeyPressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gInputBoxIndex = 0; } else @@ -1375,6 +1521,7 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (gCssScanMode != CSS_SCAN_MODE_OFF) { MENU_StartCssScan(Direction); + gPttWasReleased = true; gRequestDisplayScreen = DISPLAY_MENU; return; @@ -1410,14 +1557,12 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) { case MENU_DEL_CH: case MENU_1_CALL: + case MENU_MEM_NAME: bCheckScanList = false; break; case MENU_SLIST2: VFO = 1; - - // Fallthrough - case MENU_SLIST1: bCheckScanList = true; break; diff --git a/app/scanner.c b/app/scanner.c index 862b716..17a925b 100644 --- a/app/scanner.c +++ b/app/scanner.c @@ -300,7 +300,7 @@ static void SCANNER_Key_UP_DOWN(bool bKeyPressed, bool pKeyHeld, int8_t Directio if (gScannerEditState == 1) { - gScanChannel = NUMBER_AddWithWraparound(gScanChannel, Direction, 0, 199); + gScanChannel = NUMBER_AddWithWraparound(gScanChannel, Direction, 0, MR_CHANNEL_LAST); gShowChPrefix = RADIO_CheckValidChannel(gScanChannel, false, 0); gRequestDisplayScreen = DISPLAY_SCANNER; } diff --git a/board.c b/board.c index a6c73f2..46d6650 100644 --- a/board.c +++ b/board.c @@ -595,11 +595,8 @@ void BOARD_EEPROM_Init(void) gEeprom.KEY_1_SHORT_PRESS_ACTION = (Data[1] < ACTION_OPT_LEN) ? Data[1] : ACTION_OPT_MONITOR; gEeprom.KEY_1_LONG_PRESS_ACTION = (Data[2] < ACTION_OPT_LEN) ? Data[2] : ACTION_OPT_FLASHLIGHT; gEeprom.KEY_2_SHORT_PRESS_ACTION = (Data[3] < ACTION_OPT_LEN) ? Data[3] : ACTION_OPT_SCAN; - #ifdef ENABLE_FMRADIO - gEeprom.KEY_2_LONG_PRESS_ACTION = (Data[4] < ACTION_OPT_LEN) ? Data[4] : ACTION_OPT_NONE; - #else - gEeprom.SCAN_RESUME_MODE = (Data[5] < 3) ? Data[5] : SCAN_RESUME_CO; - #endif + gEeprom.KEY_2_LONG_PRESS_ACTION = (Data[4] < ACTION_OPT_LEN) ? Data[4] : ACTION_OPT_NONE; + gEeprom.SCAN_RESUME_MODE = (Data[5] < 3) ? Data[5] : SCAN_RESUME_CO; gEeprom.AUTO_KEYPAD_LOCK = (Data[6] < 2) ? Data[6] : false; gEeprom.POWER_ON_DISPLAY_MODE = (Data[7] < 4) ? Data[7] : POWER_ON_DISPLAY_MODE_VOLTAGE; @@ -791,6 +788,35 @@ void BOARD_EEPROM_LoadMoreSettings(void) } } +void BOARD_fetchChannelName(char *s, const int channel) +{ + int i; + + if (s == NULL) + return; + + memset(s, 0, 11); // 's' had better be large enough ! + + if (channel < 0) + return; + + if (!RADIO_CheckValidChannel(channel, false, 0)) + return; + + + EEPROM_ReadBuffer(0x0F50 + (channel * 16), s + 0, 8); + EEPROM_ReadBuffer(0x0F58 + (channel * 16), s + 8, 2); + + for (i = 0; i < 10; i++) + if (s[i] < 32 || s[i] > 127) + break; // invalid char + + s[i--] = 0; // null term + + while (i >= 0 && s[i] == 32) // trim trailing spaces + s[i--] = 0; // null term +} + void BOARD_FactoryReset(bool bIsAll) { uint16_t i; diff --git a/board.h b/board.h index 0d6405f..e5dcef6 100644 --- a/board.h +++ b/board.h @@ -27,6 +27,7 @@ void BOARD_ADC_GetBatteryInfo(uint16_t *pVoltage, uint16_t *pCurrent); void BOARD_Init(void); void BOARD_EEPROM_Init(void); void BOARD_EEPROM_LoadMoreSettings(void); +void BOARD_fetchChannelName(char *s, const int channel); void BOARD_FactoryReset(bool bIsAll); #endif diff --git a/driver/st7565.c b/driver/st7565.c index 0c1e4aa..03f802d 100644 --- a/driver/st7565.c +++ b/driver/st7565.c @@ -22,6 +22,7 @@ #include "driver/spi.h" #include "driver/st7565.h" #include "driver/system.h" +#include "misc.h" uint8_t gStatusLine[128]; uint8_t gFrameBuffer[7][128]; @@ -66,12 +67,12 @@ void ST7565_BlitFullScreen(void) ST7565_WriteByte(0x40); - for (Line = 0; Line < 7; Line++) + for (Line = 0; Line < ARRAY_SIZE(gFrameBuffer); Line++) { unsigned int Column; ST7565_SelectColumnAndLine(4, Line + 1); GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0); - for (Column = 0; Column < 128; Column++) + for (Column = 0; Column < ARRAY_SIZE(gFrameBuffer[0]); Column++) { while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {} SPI0->WDR = gFrameBuffer[Line][Column]; @@ -102,7 +103,7 @@ void ST7565_BlitStatusLine(void) GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0); - for (i = 0; i < sizeof(gStatusLine); i++) + for (i = 0; i < ARRAY_SIZE(gStatusLine); i++) { while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {} SPI0->WDR = gStatusLine[i]; diff --git a/firmware b/firmware index 026e5df8ceafac4eb10af781474b26a705686456..1d6ce71c832e40a41d123c4ef28790c84ecebca4 100644 GIT binary patch delta 26158 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 delta 25438 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 delta 31679 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 C7cBY! diff --git a/frequencies.c b/frequencies.c index 92ad4e0..3fb5122 100644 --- a/frequencies.c +++ b/frequencies.c @@ -174,7 +174,7 @@ int FREQUENCY_Check(VFO_Info_t *pInfo) const uint32_t Frequency = pInfo->pTX->Frequency; #ifdef ENABLE_NOAA - if (pInfo->CHANNEL_SAVE >= NOAA_CHANNEL_FIRST) + if (pInfo->CHANNEL_SAVE > FREQ_CHANNEL_LAST) return -1; #endif diff --git a/helper/boot.c b/helper/boot.c index eb2314d..c6f6c43 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -90,7 +90,7 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) gEeprom.KEY_2_SHORT_PRESS_ACTION = 0; gEeprom.KEY_2_LONG_PRESS_ACTION = 0; - RADIO_InitInfo(gRxVfo, 205, 5, 41002500); + RADIO_InitInfo(gRxVfo, FREQ_CHANNEL_LAST - 1, 5, 41002500); gRxVfo->CHANNEL_BANDWIDTH = BANDWIDTH_NARROW; gRxVfo->OUTPUT_POWER = 0; diff --git a/misc.c b/misc.c index 2e134d1..a1aa6d5 100644 --- a/misc.c +++ b/misc.c @@ -83,7 +83,7 @@ uint16_t gEEPROM_RSSI_CALIB[3][4]; uint16_t gEEPROM_1F8A; uint16_t gEEPROM_1F8C; -uint8_t gMR_ChannelAttributes[207]; +uint8_t gMR_ChannelAttributes[FREQ_CHANNEL_LAST + 1]; volatile uint16_t gBatterySaveCountdown_10ms = battery_save_count_10ms; volatile bool gBatterySaveCountdownExpired; diff --git a/misc.h b/misc.h index 7566e4e..fc3b3cc 100644 --- a/misc.h +++ b/misc.h @@ -22,10 +22,12 @@ #define IS_MR_CHANNEL(x) ((x) >= MR_CHANNEL_FIRST && (x) <= MR_CHANNEL_LAST) #define IS_FREQ_CHANNEL(x) ((x) >= FREQ_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST) -#define IS_VALID_CHANNEL(x) ((x) <= NOAA_CHANNEL_LAST) +#define IS_VALID_CHANNEL(x) ((x) < LAST_CHANNEL) -#define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST) -#define IS_NOT_NOAA_CHANNEL(x) ((x) >= MR_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST) +#ifdef ENABLE_NOAA + #define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST) + #define IS_NOT_NOAA_CHANNEL(x) ((x) >= MR_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST) +#endif #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) @@ -36,8 +38,11 @@ enum { MR_CHANNEL_LAST = 199u, FREQ_CHANNEL_FIRST = 200u, FREQ_CHANNEL_LAST = 206u, - NOAA_CHANNEL_FIRST = 207u, - NOAA_CHANNEL_LAST = 216u + #ifdef ENABLE_NOAA + NOAA_CHANNEL_FIRST = 207u, + NOAA_CHANNEL_LAST = 216u + #endif + LAST_CHANNEL }; enum { diff --git a/radio.c b/radio.c index ceba43c..b110374 100644 --- a/radio.c +++ b/radio.c @@ -100,7 +100,7 @@ uint8_t RADIO_FindNextChannel(uint8_t Channel, int8_t Direction, bool bCheckScan { unsigned int i; - for (i = 0; i < 200; i++) + for (i = 0; i <= MR_CHANNEL_LAST; i++) { if (Channel == 0xFF) Channel = MR_CHANNEL_LAST; @@ -159,11 +159,11 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg) if (!gSetting_350EN) { - if (gEeprom.FreqChannel[VFO] == 204) - gEeprom.FreqChannel[VFO]++; + if (gEeprom.FreqChannel[VFO] == (FREQ_CHANNEL_LAST - 2)) + gEeprom.FreqChannel[VFO] = FREQ_CHANNEL_LAST - 1; - if (gEeprom.ScreenChannel[VFO] == 204) - gEeprom.ScreenChannel[VFO]++; + if (gEeprom.ScreenChannel[VFO] == (FREQ_CHANNEL_LAST - 2)) + gEeprom.ScreenChannel[VFO] = FREQ_CHANNEL_LAST - 1; } Channel = gEeprom.ScreenChannel[VFO]; @@ -201,7 +201,7 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg) } } else - Channel = 205; + Channel = FREQ_CHANNEL_LAST - 1; Attributes = gMR_ChannelAttributes[Channel]; if (Attributes == 0xFF) diff --git a/settings.c b/settings.c index dc8c083..7837e1e 100644 --- a/settings.c +++ b/settings.c @@ -39,8 +39,6 @@ EEPROM_Config_t gEeprom; uint8_t Padding[4]; } State; - UART_LogSend("sFm\r\n", 5); - memset(&State, 0xFF, sizeof(State)); State.Channel = gEeprom.FM_SelectedChannel; State.Frequency = gEeprom.FM_SelectedFrequency; @@ -56,8 +54,10 @@ void SETTINGS_SaveVfoIndices(void) { uint8_t State[8]; - UART_LogSend("sidx\r\n", 6); - + #ifndef ENABLE_NOAA + EEPROM_ReadBuffer(0x0E80, State, sizeof(State)); + #endif + State[0] = gEeprom.ScreenChannel[0]; State[1] = gEeprom.MrChannel[0]; State[2] = gEeprom.FreqChannel[0]; @@ -67,9 +67,6 @@ void SETTINGS_SaveVfoIndices(void) #ifdef ENABLE_NOAA State[6] = gEeprom.NoaaChannel[0]; State[7] = gEeprom.NoaaChannel[1]; - #else - State[6] = NOAA_CHANNEL_FIRST; - State[7] = NOAA_CHANNEL_FIRST; #endif EEPROM_WriteBuffer(0x0E80, State); @@ -80,8 +77,6 @@ void SETTINGS_SaveSettings(void) uint8_t State[8]; uint32_t Password[2]; - UART_LogSend("spub\r\n", 6); - State[0] = gEeprom.CHAN_1_CALL; State[1] = gEeprom.SQUELCH_LEVEL; State[2] = gEeprom.TX_TIMEOUT_TIMER; @@ -178,8 +173,6 @@ void SETTINGS_SaveSettings(void) void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode) { - UART_LogSend("schn\r\n", 6); - #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) #endif @@ -218,22 +211,28 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, SETTINGS_UpdateChannel(Channel, pVFO, true); - #ifndef KEEP_MEM_NAME - if (IS_MR_CHANNEL(Channel)) - { // clear/reset the channel name + if (IS_MR_CHANNEL(Channel)) + { + #ifndef KEEP_MEM_NAME + // clear/reset the channel name memset(&State8, 0xFF, sizeof(State8)); EEPROM_WriteBuffer(0x0F50 + OffsetMR, State8); EEPROM_WriteBuffer(0x0F58 + OffsetMR, State8); - } - #endif + #else + // save the channel name + memmove(State8, pVFO->Name + 0, 8); + EEPROM_WriteBuffer(0x0F50 + OffsetMR, State8); + memset(State8, 0xFF, sizeof(State8)); + memmove(State8, pVFO->Name + 8, 2); + EEPROM_WriteBuffer(0x0F58 + OffsetMR, State8); + #endif + } } } } void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep) { - UART_LogSend("svalid\r\n", 8); - #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) #endif @@ -265,12 +264,23 @@ void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep) gMR_ChannelAttributes[Channel] = Attributes; // #ifndef KEEP_MEM_NAME - if (IS_MR_CHANNEL(Channel) && !keep) - { // clear/reset the channel name + if (IS_MR_CHANNEL(Channel)) + { const uint16_t OffsetMR = Channel * 16; - memset(&State, 0xFF, sizeof(State)); - EEPROM_WriteBuffer(0x0F50 + OffsetMR, State); - EEPROM_WriteBuffer(0x0F58 + OffsetMR, State); + if (!keep) + { // clear/reset the channel name + memset(&State, 0xFF, sizeof(State)); + EEPROM_WriteBuffer(0x0F50 + OffsetMR, State); + EEPROM_WriteBuffer(0x0F58 + OffsetMR, State); + } +// else +// { // update the channel name +// memmove(State, pVFO->Name + 0, 8); +// EEPROM_WriteBuffer(0x0F50 + OffsetMR, State); +// memset(State, 0xFF, sizeof(State)); +// memmove(State, pVFO->Name + 8, 2); +// EEPROM_WriteBuffer(0x0F58 + OffsetMR, State); +// } } // #endif } diff --git a/ui/main.c b/ui/main.c index eeb110e..f8e5429 100644 --- a/ui/main.c +++ b/ui/main.c @@ -18,6 +18,7 @@ #include "app/dtmf.h" #include "bitmaps.h" +#include "board.h" #include "driver/st7565.h" #include "external/printf/printf.h" #include "functions.h" @@ -150,9 +151,7 @@ void UI_DisplayMain(void) #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_ALARM) - { duff_beer = 2; - } else #endif { @@ -227,7 +226,7 @@ void UI_DisplayMain(void) else if (gInputBoxIndex > 0 && IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num]) && gEeprom.TX_CHANNEL == vfo_num) { // user entering a frequency - UI_DisplayFrequency(gInputBox, 31, Line, true, false); + UI_DisplayFrequency(gInputBox, 32, Line, true, false); center_line_is_free = false; } @@ -263,9 +262,9 @@ void UI_DisplayMain(void) #ifdef ENABLE_BIG_FREQ NUMBER_ToDigits(frequency, String); // show the main large frequency digits - UI_DisplayFrequency(String, 31, Line, false, false); + UI_DisplayFrequency(String, 32, Line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 7, 112, Line + 1, true); + UI_DisplaySmallDigits(2, String + 7, 113, Line + 1, true); #else // show the frequency in the main font sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); @@ -276,38 +275,26 @@ void UI_DisplayMain(void) case MDF_CHANNEL: // show the channel number sprintf(String, "CH-%03u", gEeprom.ScreenChannel[vfo_num] + 1); UI_PrintString(String, 32, 0, Line, 8); - frequency = 0; break; case MDF_NAME: // show the channel name - if (gEeprom.VfoInfo[vfo_num].Name[0] <= 32 || gEeprom.VfoInfo[vfo_num].Name[0] >= 127) + case MDF_NAME_FREQ: // show the channel name and frequency + BOARD_fetchChannelName(String, gEeprom.ScreenChannel[vfo_num]); + if (String[0] == 0) { // no channel name, show the channel number instead sprintf(String, "CH-%03u", gEeprom.ScreenChannel[vfo_num] + 1); } - else - { // channel name - memset(String, 0, sizeof(String)); - memmove(String, gEeprom.VfoInfo[vfo_num].Name, 10); - } -// UI_PrintString(String, 32, 112, Line, 8); - UI_PrintString(String, 32, 0, Line, 8); - break; - - case MDF_NAME_FREQ: // show the channel name and frequency - if (gEeprom.VfoInfo[vfo_num].Name[0] <= 32 || gEeprom.VfoInfo[vfo_num].Name[0] >= 127) - { // no channel name, show channel number instead - sprintf(String, "CH-%03u", gEeprom.ScreenChannel[vfo_num] + 1); + if (gEeprom.CHANNEL_DISPLAY_MODE == MDF_NAME) + { + UI_PrintString(String, 32, 0, Line, 8); } else - { // channel name - memset(String, 0, sizeof(String)); - memmove(String, gEeprom.VfoInfo[vfo_num].Name, 10); + { + UI_PrintStringSmall(String, 32 + 4, 0, Line); + // show the channel frequency below the channel number/name + sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); + UI_PrintStringSmall(String, 32 + 4, 0, Line + 1); } - UI_PrintStringSmall(String, 32 + 4, 0, Line); - - // show the channel frequency below the channel number/name - sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); - UI_PrintStringSmall(String, 32 + 4, 0, Line + 1); break; } } @@ -318,26 +305,22 @@ void UI_DisplayMain(void) // show the main large frequency digits UI_DisplayFrequency(String, 32, Line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 7, 112, Line + 1, true); + UI_DisplaySmallDigits(2, String + 7, 113, Line + 1, true); #else // show the frequency in the main font sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); UI_PrintString(String, 32, 0, Line, 8); #endif - // show the channel symbols - const uint8_t attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; - (void)attributes; // stop compiler warning/error - #ifdef ENABLE_BIG_FREQ - #ifdef ENABLE_COMPANDER - if ((attributes & MR_CH_COMPAND) > 0) + #ifdef ENABLE_COMPANDER + // show the channel symbols + const uint8_t attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; + if ((attributes & MR_CH_COMPAND) > 0) + #ifdef ENABLE_BIG_FREQ memmove(pLine0 + 120, BITMAP_compand, sizeof(BITMAP_compand)); - #endif - #else - #ifdef ENABLE_COMPANDER - if ((attributes & MR_CH_COMPAND) > 0) + #else memmove(pLine0 + 120 + LCD_WIDTH, BITMAP_compand, sizeof(BITMAP_compand)); - #endif + #endif #endif } } @@ -423,12 +406,9 @@ void UI_DisplayMain(void) if (gEeprom.VfoInfo[vfo_num].ConfigRX.Frequency != gEeprom.VfoInfo[vfo_num].ConfigTX.Frequency) { // show the TX offset symbol - String[0] = '\0'; - switch (gEeprom.VfoInfo[vfo_num].TX_OFFSET_FREQUENCY_DIRECTION) - { - case TX_OFFSET_FREQUENCY_DIRECTION_ADD: String[0] = '+'; break; - case TX_OFFSET_FREQUENCY_DIRECTION_SUB: String[0] = '-'; break; - } + const char dir_list[] = "\0+-"; + const unsigned int i = gEeprom.VfoInfo[vfo_num].TX_OFFSET_FREQUENCY_DIRECTION; + String[0] = (i < sizeof(dir_list)) ? dir_list[i] : '?'; String[1] = '\0'; UI_PrintStringSmall(String, LCD_WIDTH + 54, 0, Line + 1); } diff --git a/ui/menu.c b/ui/menu.c index 7449440..de8dd1c 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -19,6 +19,7 @@ #include "app/dtmf.h" #include "bitmaps.h" +#include "board.h" #include "dcs.h" #include "driver/bk4819.h" #include "driver/eeprom.h" // EEPROM_ReadBuffer() @@ -55,6 +56,7 @@ const char MenuList[][7] = "BUSYCL", // was "BCL" "CH-SAV", // was "MEM-CH" "CH-DEL", // was "DEL-CH" + "CH-NAM", "CH-DIS", // was "MDF" "BATSAV", // was "SAVE" "VOX", @@ -261,6 +263,10 @@ uint8_t gMenuCursor; int8_t gMenuScrollDirection; int32_t gSubMenuSelection; +// edit box +char edit[17]; +int edit_index; + void UI_DisplayMenu(void) { unsigned int i; @@ -281,26 +287,11 @@ void UI_DisplayMenu(void) } // draw vertical separating line - #if 0 - // original thick line - for (i = 0; i < 7; i++) - { - gFrameBuffer[i][48] = 0xFF; - gFrameBuffer[i][49] = 0xFF; - } - #else - // a less intense thinner dotted line - for (i = 0; i < 6; i++) - gFrameBuffer[i][49] = 0xAA; - #endif + for (i = 0; i < 6; i++) + gFrameBuffer[i][49] = 0xAA; - #if 0 - NUMBER_ToDigits(1 + gMenuCursor, String); - UI_DisplaySmallDigits(2, String + 6, 33, 6, false); - #else - sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount); - UI_PrintStringSmall(String, 8, 0, 6); - #endif + sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount); + UI_PrintStringSmall(String, 8, 0, 6); if (gIsInSubMenu) memmove(gFrameBuffer[0] + 50, BITMAP_CurrentIndicator, sizeof(BITMAP_CurrentIndicator)); @@ -451,11 +442,76 @@ void UI_DisplayMenu(void) case MENU_MEM_CH: case MENU_1_CALL: case MENU_DEL_CH: - UI_GenerateChannelStringEx(String, RADIO_CheckValidChannel(gSubMenuSelection, false, 0), gSubMenuSelection); + { + const bool valid = RADIO_CheckValidChannel(gSubMenuSelection, false, 0); + + UI_GenerateChannelStringEx(String, valid, gSubMenuSelection); UI_PrintString(String, 50, 127, 0, 8); + + if (valid && !gAskForConfirmation) + { // show the frequency so that the user knows the channels frequency + struct + { + uint32_t Frequency; + uint32_t Offset; + } __attribute__((packed)) Info; + EEPROM_ReadBuffer(gSubMenuSelection * 16, &Info, sizeof(Info)); + + sprintf(String, "%03u.%05u", Info.Frequency / 100000, Info.Frequency % 100000); +// UI_PrintStringSmall(String, 50, 127, 5); + UI_PrintString(String, 50, 127, 4, 8); + } + already_printed = true; break; + } + + case MENU_MEM_NAME: + { + const bool valid = RADIO_CheckValidChannel(gSubMenuSelection, false, 0); + + UI_GenerateChannelStringEx(String, valid, gSubMenuSelection); + UI_PrintString(String, 50, 127, 0, 8); + + if (valid) + { + struct + { + uint32_t Frequency; + uint32_t Offset; + } __attribute__((packed)) Info; + EEPROM_ReadBuffer(gSubMenuSelection * 16, &Info, sizeof(Info)); + + if (!gIsInSubMenu || edit_index < 0) + { // show the channel name + BOARD_fetchChannelName(String, gSubMenuSelection); + if (String[0] == 0) + strcpy(String, "--"); + UI_PrintString(String, 50, 127, 2, 8); + } + else + { // show the channel name being edited + UI_PrintString(edit, 50, 0, 2, 8); + if (edit_index < 10) +// UI_PrintString("^", 50 + (8 * edit_index), 0, 4, 8); // show the cursor + UI_PrintStringSmall("^", 50 + (8 * edit_index), 0, 4); + } + + if (!gAskForConfirmation) + { // show the frequency so that the user knows the channels frequency + sprintf(String, "%03u.%05u", Info.Frequency / 100000, Info.Frequency % 100000); + if (!gIsInSubMenu || edit_index < 0) + UI_PrintString(String, 50, 127, 4, 8); + else + UI_PrintString(String, 50, 127, 5, 8); +// UI_PrintStringSmall(String, 50, 127, 5); + } + } + already_printed = true; + break; + } + case MENU_SAVE: strcpy(String, gSubMenu_SAVE[gSubMenuSelection]); break; @@ -635,41 +691,17 @@ void UI_DisplayMenu(void) } } - if (gMenuCursor == MENU_MEM_CH || - gMenuCursor == MENU_DEL_CH || - gMenuCursor == MENU_1_CALL || - gMenuCursor == MENU_SLIST1 || + if (gMenuCursor == MENU_MEM_CH || + gMenuCursor == MENU_DEL_CH || + gMenuCursor == MENU_1_CALL || + gMenuCursor == MENU_SLIST1 || gMenuCursor == MENU_SLIST2) { // display the channel name - if (gSubMenuSelection >= 0) - { - const uint16_t channel = (uint16_t)gSubMenuSelection; - const bool valid = RADIO_CheckValidChannel(channel, false, 0); - if (valid) - { // 16 bytes allocated to the channel name but only 12 used - char s[17] = {0}; - EEPROM_ReadBuffer(0x0F50 + (channel * 16), s + 0, 8); - EEPROM_ReadBuffer(0x0F58 + (channel * 16), s + 8, 2); - { // make invalid chars '0' - i = 0; - while (i < sizeof(s)) - { - if (s[i] < 32 || s[i] >= 128) - break; - i++; - } - while (i < sizeof(s)) - s[i++] = 0; - while (--i > 0) - { - if (s[i] != 0 && s[i] != 32) - break; - s[i] = 0; - } - } - UI_PrintString(s, 50, 127, 2, 8); - } - } + char s[11]; + BOARD_fetchChannelName(s, gSubMenuSelection); + if (s[0] == 0) + strcpy(s, "--"); + UI_PrintString(s, 50, 127, 2, 8); } if ((gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) && gCssScanMode != CSS_SCAN_MODE_OFF) @@ -703,7 +735,10 @@ void UI_DisplayMenu(void) UI_DisplaySmallDigits(Offset, String + (8 - Offset), 105, 0, false); } - if ((gMenuCursor == MENU_RESET || gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH) && gAskForConfirmation) + if ((gMenuCursor == MENU_RESET || + gMenuCursor == MENU_MEM_CH || + gMenuCursor == MENU_MEM_NAME || + gMenuCursor == MENU_DEL_CH) && gAskForConfirmation) { // display confirmation strcpy(String, (gAskForConfirmation == 1) ? "SURE?" : "WAIT!"); UI_PrintString(String, 50, 127, 5, 8); diff --git a/ui/menu.h b/ui/menu.h index 2a12275..1b0cac8 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -38,6 +38,7 @@ enum MENU_BCL, MENU_MEM_CH, MENU_DEL_CH, + MENU_MEM_NAME, MENU_MDF, MENU_SAVE, MENU_VOX, @@ -131,6 +132,9 @@ extern uint8_t gMenuCursor; extern int8_t gMenuScrollDirection; extern int32_t gSubMenuSelection; +extern char edit[17]; +extern int edit_index; + void UI_DisplayMenu(void); #endif diff --git a/version.c b/version.c index aea9735..2cbe055 100644 --- a/version.c +++ b/version.c @@ -2,7 +2,7 @@ #ifdef GIT_HASH #define VER GIT_HASH #else - #define VER "230919" + #define VER "230920" #endif const char Version[] = "OEFW-"VER; diff --git a/win_make.bat b/win_make.bat index cbd5692..1dc179a 100644 --- a/win_make.bat +++ b/win_make.bat @@ -21,7 +21,7 @@ del /S /Q *.d >nul 2>nul :: https://github.com/OneOfEleven/k5prog-win :: ::python -m pip install --upgrade pip crcmod -fw-pack.py firmware.bin 230919 firmware.packed.bin +fw-pack.py firmware.bin 230920 firmware.packed.bin ::arm-none-eabi-size firmware