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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 L|FO*y2NakAC_UoB delta 13345 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 DTZRp6 diff --git a/firmware.packed.bin b/firmware.packed.bin index ea1e2855fd4fab085bd8fe0ec01b57d7c7afde27..02552f0553e09e282e27d4fc1c268b7723e03660 100644 GIT binary patch delta 32400 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�mBPSu{HLwq4jL7-4QC*xFRMA;Wc(-uo(0UC?r9nMhe{kboRFs3e@BuujHk zj@R>L#cMOy_;mT0z1beZx~uG-#gllR6@P;_&ix$5w*2!Q?oa7l@mF{BR<^_!E@G_L zN?X)x`DFjGr6%Gpyw9miiI-XayAdU^?f1oi^uJLRN9+5iizpo1wfgvd5t(9ln_172 z7w8zzH~f^Dqrsj#rAe|g4P< zPKhwxIQ^`*(%&eJdQgkRaKh!Y+xCc+GUlaizZ-gk$KsI0RrwqryRiL#pJp@li%T=4 zF1Z{Q{+9cqW7!SX$!F6KiZ)ffGn4LpY@OE^aa^a%$@k0@UN)wZlkPXW4;MBCWm>E| z*HL#op68ICoQ!j8tK^1%ElUlne@EU|w^yhW+PG9l`_uHpj%i1t>IJXP_#u<>{mj)r2fXtX)*ueOvoBVTFhr>xKax?Tp9zW3Qy z>d9PG_~~j;$fcQA!jyK_^QB(@{f^aV>guBhwgyC~`-Ok|o$)0>;*Qj8|7c&8z;7G7 zjeQ@e8(XV?zm=doOL=`+zv<|@9>%L6m{xxq3JFEoqi3`mA^lPKkA(-&G_== zCV_2=Li{&3_S+owD_ZB5VP&#-e%AAU{T~CZ=4-v?v{#D`xjMzvw*AKvBjNfEyR3=- z?iD+JJM;O(6)hQaHN~d~D!*_F&xz>fiqVkDS~F=^In!oyyYQ+d6NOoK(l(*Twkq zFZ%!Tgn5;CJ}=s5q}0YB!B(_ywx8EW*OO^Av*o64lsd+LD(y3a&Fcku3Ufp@$^8)F z+5gG&M(>lflD01&1-~0g8BAN!k#$f}Z4+;mqTAB9R`d2xeP&oPEAD|$f&`Djond`uhXQ5?P`z+_=a#~+7TJ$9^{*qdKyHol7=;ZF*r=)7kejL-> z7Z{$IoH%jwfloOl6QBODcZ?8F_&)6*yV7N=Q1QdpS1K3mmS56ibz|3s(*{Qr41IsF znXc)+@AfO|xz0wn4_cc8e=NKx8sF(F*7PBLJ?FKLO{#BBvu6KE$TnT-=&@*D&$HJ` zJA!)MvqWZ_@0>1Yajjmh-AR4B*W9Mf4`c1my?s`bedBSl_A9piy(U@ZPSwAaIdo(f zU2A;opX4p*DiZPKp!$Nj`NCc{C;ngRJ}>Pr@AL8Zx?Pu7e_}d1PeCM2V7A}eNoIBn zCB=5#+?k#vBK(iT?oqWL%TreA{F=56*9(3g3N5SJ_F_gl)8bgeP4`&}>OaoCj#|<*Yhs+oYxo3*WA>-nTCw=g3nt1ANH&W@HdXqnDPJNnY})LmHH3vcIVvpamVKJS057hnb|CPa`EoQ zBQruI=ToWj<+HH||!GBG4p5Ucn_g6BwPo5xhruiS^$3q%DcMea#DJ4E@gy8q{D9hTHA$74wkE|@*Pp!0igK`aRcElS zvReJ6-ah!nz6G8ZbJucv-Ckf?-Mi!&^FIIZhwNPYmPdTcuf3GI`vA9bw9&N2)3MpN zB|^|Bu!dRCNi=OFtJ9UD#?lM=s*jy+)^ZzoInOUfv}O riURxD0W!^trKUws_@4u657>h$qid78cicS~yeQ0bN@Vi<+XX2A%{-un delta 31679 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 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