diff --git a/Makefile b/Makefile index 4935f5e..1112a26 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ ENABLE_TX_WHEN_AM := 0 ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 ENABLE_MAIN_KEY_HOLD := 1 ENABLE_BOOT_BEEPS := 1 -ENABLE_COMPANDER := 1 ENABLE_DTMF_DECODER := 1 +ENABLE_COMPANDER := 1 #ENABLE_SINGLE_VFO_CHAN := 1 #ENABLE_BAND_SCOPE := 1 diff --git a/README.md b/README.md index 67be230..c7d650a 100644 --- a/README.md +++ b/README.md @@ -25,11 +25,11 @@ ENABLE_KEEP_MEM_NAME := 1 maintain channel name when (re)saving m ENABLE_CHAN_NAME_FREQ := 1 show channel frequency below channel name/number ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though frontend not tuned over full range) ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM -ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method +ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method ENABLE_MAIN_KEY_HOLD := 1 initial F-key press not needed, instead hold down keys 0-9 ENABLE_BOOT_BEEPS := 1 give user audio feedback on volume knob position at boot-up +ENABLE_DTMF_DECODER := 1 live on-screen DTMF decoder ENABLE_COMPANDER := 1 compander option - setting not yet saved -ENABLE_DTMF_DECODER := 1 enable real time on-screen DTMF decoder #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented - single VFO on display when possible #ENABLE_BAND_SCOPE := 1 not yet implemented - spectrum/pan-adapter ``` @@ -40,7 +40,7 @@ ENABLE_DTMF_DECODER := 1 enable real time on-screen DTMF decoder * Added new bugs * Finer RSSI bar steps * Mic menu includes max gain possible -* AM RX everywhere (not that AM really works) +* AM RX everywhere * Better backlight times (inc always on) * Nicer/cleaner big numeric font than original Quansheng big numeric font * Various menu re-wordings (trying to reduce 'WTH does that mean ?') @@ -86,6 +86,7 @@ Many thanks to various people on Telegram for putting up with me during this eff * @Davide * @Ismo OH2FTG * [OneOfEleven](https://github.com/OneOfEleven) +* @d1ced95 * and others I forget # License @@ -109,6 +110,6 @@ You may obtain a copy of the License at

- - + +

diff --git a/app/app.c b/app/app.c index a6e1435..738fa5e 100644 --- a/app/app.c +++ b/app/app.c @@ -646,31 +646,29 @@ void APP_CheckRadioInterrupts(void) // g_CTCSS_Lost = true; if (interrupt_status_bits & BK4819_REG_02_DTMF_5TONE_FOUND) - { + { // save the new DTMF RX'ed character + + // fetch the RX'ed char + const char c = DTMF_GetCharacter(BK4819_GetDTMF_5TONE_Code()); + gDTMF_RequestPending = true; gDTMF_RecvTimeout = DTMF_RX_timeout_500ms; - - if (gDTMF_WriteIndex >= ARRAY_SIZE(gDTMF_Received)) - { // shift the RX buffer down one - unsigned int i; - for (i = 0; i < (ARRAY_SIZE(gDTMF_Received) - 1); i++) - gDTMF_Received[i] = gDTMF_Received[i + 1]; - gDTMF_WriteIndex--; - } - - // save new RX'ed character - gDTMF_Received[gDTMF_WriteIndex++] = DTMF_GetCharacter(BK4819_GetDTMF_5TONE_Code()); + // shift the RX buffer down one - if need be + if (gDTMF_WriteIndex >= sizeof(gDTMF_Received)) + memmove(gDTMF_Received, &gDTMF_Received[1], gDTMF_WriteIndex-- - 1); + gDTMF_Received[gDTMF_WriteIndex++] = c; if (gCurrentFunction == FUNCTION_RECEIVE) { #ifdef ENABLE_DTMF_DECODER - if (gDTMF_WriteIndex > 0) - { - memcpy(gDTMF_ReceivedSaved, gDTMF_Received, sizeof(gDTMF_ReceivedSaved)); - gDTMF_WriteIndexSaved = gDTMF_WriteIndex; - gDTMF_RecvTimeoutSaved = DTMF_RX_timeout_saved_500ms; - gUpdateDisplay = true; - } + gDTMF_RecvTimeoutSaved = DTMF_RX_timeout_saved_500ms; + size_t len = strlen(gDTMF_ReceivedSaved); + // shift the RX buffer down one + if (len >= (sizeof(gDTMF_ReceivedSaved) - 1)) + memmove(gDTMF_ReceivedSaved, &gDTMF_ReceivedSaved[1], len--); + gDTMF_ReceivedSaved[len++] = c; + gDTMF_ReceivedSaved[len] = '\0'; + gUpdateDisplay = true; #endif DTMF_HandleRequest(); @@ -1718,8 +1716,7 @@ void APP_TimeSlice500ms(void) { if (--gDTMF_RecvTimeoutSaved == 0) { - gDTMF_WriteIndexSaved = 0; - memset(gDTMF_ReceivedSaved, 0, sizeof(gDTMF_ReceivedSaved)); + gDTMF_ReceivedSaved[0] = '\0'; gUpdateDisplay = true; } } @@ -1789,6 +1786,14 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gEeprom.AUTO_KEYPAD_LOCK) gKeyLockCountdown = 30; // 15 seconds + #ifdef ENABLE_DTMF_DECODER + if (Key == KEY_EXIT && bKeyPressed && bKeyHeld) + { // clear the DTMF RX display buffer + gDTMF_RecvTimeoutSaved = 0; + gDTMF_ReceivedSaved[0] = '\0'; + } + #endif + if (!bKeyPressed) { if (gFlagSaveVfo) diff --git a/app/dtmf.c b/app/dtmf.c index 2ca91cd..6a93a75 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -40,8 +40,7 @@ uint8_t gDTMF_PreviousIndex = 0; uint8_t gDTMF_RecvTimeout = 0; #ifdef ENABLE_DTMF_DECODER - char gDTMF_ReceivedSaved[16]; - uint8_t gDTMF_WriteIndexSaved = 0; + char gDTMF_ReceivedSaved[17]; uint8_t gDTMF_RecvTimeoutSaved = 0; #endif diff --git a/app/dtmf.h b/app/dtmf.h index b7435a4..8d5d0d0 100644 --- a/app/dtmf.h +++ b/app/dtmf.h @@ -62,8 +62,7 @@ extern uint8_t gDTMF_PreviousIndex; extern uint8_t gDTMF_RecvTimeout; #ifdef ENABLE_DTMF_DECODER - extern char gDTMF_ReceivedSaved[16]; - extern uint8_t gDTMF_WriteIndexSaved; + extern char gDTMF_ReceivedSaved[17]; extern uint8_t gDTMF_RecvTimeoutSaved; #endif diff --git a/firmware b/firmware index 14150d4..33c0a7a 100644 Binary files a/firmware and b/firmware differ diff --git a/firmware.bin b/firmware.bin index ff64044..4f911f5 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 9e8f698..370dcfd 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/functions.c b/functions.c index 96defef..845184a 100644 --- a/functions.c +++ b/functions.c @@ -60,9 +60,8 @@ void FUNCTION_Init(void) memset(gDTMF_Received, 0, sizeof(gDTMF_Received)); #ifdef ENABLE_DTMF_DECODER -// gDTMF_RecvTimeoutSaved = 0; -// gDTMF_WriteIndexSaved = 0; -// memset(gDTMF_ReceivedSaved, 0, sizeof(gDTMF_ReceivedSaved)); +// gDTMF_RecvTimeoutSaved = 0; +// gDTMF_ReceivedSaved[0] = '\0'; #endif g_CxCSS_TAIL_Found = false; diff --git a/ui/main.c b/ui/main.c index 2a318b5..f9f7e38 100644 --- a/ui/main.c +++ b/ui/main.c @@ -262,30 +262,32 @@ void UI_DisplayMain(void) break; case MDF_NAME: // show the channel name - if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) + if (gEeprom.VfoInfo[vfo_num].Name[0] <= 32 || + gEeprom.VfoInfo[vfo_num].Name[0] >= 127) { // no channel name, show the channel number instead sprintf(String, "CH-%03u", gEeprom.ScreenChannel[vfo_num] + 1); } else { // channel name - strcpy(String, gEeprom.VfoInfo[vfo_num].Name); + memset(String, 0, sizeof(String)); + memcpy(String, gEeprom.VfoInfo[vfo_num].Name, 10); } UI_PrintString(String, 31, 112, Line, 8); break; #ifdef ENABLE_CHAN_NAME_FREQ case MDF_NAME_FREQ: // show the channel name and frequency - if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) + 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); - UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, Line); } else { // channel name memset(String, 0, sizeof(String)); - memcpy(String, gEeprom.VfoInfo[vfo_num].Name, 8); - UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, Line); + memcpy(String, gEeprom.VfoInfo[vfo_num].Name, 10); } + UI_PrintStringSmall(String, 31 + 8, 0, Line); // show the channel frequency below the channel number/name sprintf(String, "%03u.%05u", frequency_Hz / 100000, frequency_Hz % 100000); @@ -402,13 +404,9 @@ void UI_DisplayMain(void) } #ifdef ENABLE_DTMF_DECODER - if (gDTMF_WriteIndexSaved > 0) + if (gDTMF_ReceivedSaved[0] >= 32) { // show the incoming DTMF live on-screen - const unsigned int len = (gDTMF_WriteIndexSaved < ARRAY_SIZE(String)) ? gDTMF_WriteIndexSaved : ARRAY_SIZE(String) - 1; - memset(String, 0, sizeof(String)); - memcpy(String, gDTMF_ReceivedSaved, len); - UI_PrintStringSmall("D:", 2, 0, 3); - UI_PrintStringSmall(String, 2 + (7 * 2), 0, 3); + UI_PrintStringSmall(gDTMF_ReceivedSaved, 8, 0, 3); } #endif diff --git a/version.c b/version.c index c56e9ce..0ea25a0 100644 --- a/version.c +++ b/version.c @@ -2,7 +2,7 @@ #ifdef GIT_HASH #define VER GIT_HASH #else - #define VER "230916" + #define VER "230917" #endif const char Version[] = "OEFW-"VER; diff --git a/win_make.bat b/win_make.bat index 2f78ca0..747a8e5 100644 --- a/win_make.bat +++ b/win_make.bat @@ -13,7 +13,7 @@ del /S /Q *.o >nul 2>nul del /S /Q *.d >nul 2>nul ::python -m pip install --upgrade pip crcmod -fw-pack.py firmware.bin 230916 firmware.packed.bin +fw-pack.py firmware.bin 230917 firmware.packed.bin ::arm-none-eabi-size firmware