From 9cbff0390ef3bfde272423c64713d415290be5ad Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Sun, 31 Mar 2024 17:16:55 +0200 Subject: [PATCH 01/20] Add power fixed or unfixed flag --- Makefile | 4 + archive/f4hwn.fixed.packed.v2.4.bin | Bin 0 -> 61450 bytes archive/f4hwn.unfixed.packed.v2.4.bin | Bin 0 -> 61450 bytes radio.c | 190 +++++++++++++------------- 4 files changed, 102 insertions(+), 92 deletions(-) create mode 100644 archive/f4hwn.fixed.packed.v2.4.bin create mode 100644 archive/f4hwn.unfixed.packed.v2.4.bin diff --git a/Makefile b/Makefile index fea9d9d..9ccede1 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,7 @@ ENABLE_BYP_RAW_DEMODULATORS ?= 0 ENABLE_BLMIN_TMP_OFF ?= 0 ENABLE_SCAN_RANGES ?= 1 ENABLE_FEAT_F4HWN ?= 1 +ENABLE_FEAT_F4HWN_FIXED_PWR ?= 0 # ---- DEBUGGING ---- ENABLE_AM_FIX_SHOW_DATA ?= 0 @@ -399,6 +400,9 @@ ifeq ($(ENABLE_FEAT_F4HWN),1) CFLAGS += -DAUTHOR_STRING_1=\"$(AUTHOR_STRING_1)\" -DVERSION_STRING_1=\"$(VERSION_STRING_1)\" CFLAGS += -DAUTHOR_STRING_2=\"$(AUTHOR_STRING_2)\" -DVERSION_STRING_2=\"$(VERSION_STRING_2)\" endif +ifeq ($(ENABLE_FEAT_F4HWN_FIXED_PWR),1) + CFLAGS += -DENABLE_FEAT_F4HWN_FIXED_PWR +endif LDFLAGS = LDFLAGS += -z noexecstack -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld -Wl,--gc-sections diff --git a/archive/f4hwn.fixed.packed.v2.4.bin b/archive/f4hwn.fixed.packed.v2.4.bin new file mode 100644 index 0000000000000000000000000000000000000000..6fb20867ae1a6ec60039998365a117697c1042e8 GIT binary patch literal 61450 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 N_#kjmxW|;LzW^m05X=Ao literal 0 HcmV?d00001 diff --git a/archive/f4hwn.unfixed.packed.v2.4.bin b/archive/f4hwn.unfixed.packed.v2.4.bin new file mode 100644 index 0000000000000000000000000000000000000000..12233521beb493fc4f348fca5e526db72e9f5833 GIT binary patch literal 61450 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 La8bC&lu9lDJ2e*1 literal 0 HcmV?d00001 diff --git a/radio.c b/radio.c index 1d0db46..16ffc7a 100644 --- a/radio.c +++ b/radio.c @@ -473,105 +473,111 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->OUTPUT_POWER * 3), Txp, 3); #ifdef ENABLE_FEAT_F4HWN - // make low and mid even lower - // and fix values - // because of toxic fucking closed firmwares + #ifdef ENABLE_FEAT_F4HWN_FIXED_PWR + // make low and mid even lower + // and fix values + // because of toxic fucking closed firmwares - uint8_t shift[] = {0, 0, 0, 0, 0, 0, 0}; + uint8_t shift[] = {0, 0, 0, 0, 0, 0, 0}; - if(Band == 5) - { - shift[0] = 2; - shift[1] = 1; - shift[2] = 2; - shift[3] = 2; - shift[4] = 2; - shift[5] = 2; - shift[6] = 2; - } - - if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) { - for(uint8_t p = 0; p < 3; p++ ) + if(Band == 5) { - switch (gSetting_set_low) { - case 0: - Txp[p] = 16 - shift[gSetting_set_low]; - break; - case 1: - Txp[p] = 21 + shift[gSetting_set_low]; - break; - case 2: - Txp[p] = 29 + shift[gSetting_set_low]; - break; - case 3: - Txp[p] = 37 + shift[gSetting_set_low]; - break; - case 4: - Txp[p] = 50 + shift[gSetting_set_low]; - break; - } - + shift[0] = 2; + shift[1] = 1; + shift[2] = 2; + shift[3] = 2; + shift[4] = 2; + shift[5] = 2; + shift[6] = 2; } - } - else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){ - Txp[0] = 77 + shift[5]; - Txp[1] = 77 + shift[5]; - Txp[2] = 77 + shift[5]; - } - // increase high - else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){ - Txp[0] = 165 + shift[6]; - Txp[1] = 165 + shift[6]; - Txp[2] = 165 + shift[6]; - } - // uint8_t shift[] = {0, 0, 0, 0, 0}; + if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) { + for(uint8_t p = 0; p < 3; p++ ) + { + switch (gSetting_set_low) { + case 0: + Txp[p] = 16 - shift[gSetting_set_low]; + break; + case 1: + Txp[p] = 21 + shift[gSetting_set_low]; + break; + case 2: + Txp[p] = 29 + shift[gSetting_set_low]; + break; + case 3: + Txp[p] = 37 + shift[gSetting_set_low]; + break; + case 4: + Txp[p] = 50 + shift[gSetting_set_low]; + break; + } - // /* - // if(Band == 5) - // { - // shift[0] = 3; - // shift[1] = 3; - // shift[2] = 4; - // shift[3] = 7; - // shift[4] = 8; - // } - // */ - - // if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) { - // for(uint8_t p = 0; p < 3; p++ ) - // { - // switch (gSetting_set_low) { - // case 0: - // Txp[p] = (Txp[p] * 4) / 25 + shift[gSetting_set_low]; - // break; - // case 1: - // Txp[p] = (Txp[p] * 4) / 19 + shift[gSetting_set_low]; - // break; - // case 2: - // Txp[p] = (Txp[p] * 4) / 13 + shift[gSetting_set_low]; - // break; - // case 3: - // Txp[p] = (Txp[p] * 4) / 10 + shift[gSetting_set_low]; - // break; - // case 4: - // Txp[p] = (Txp[p] * 4) / 7 + shift[gSetting_set_low]; - // break; - // } + } + } + else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){ + Txp[0] = 77 + shift[5]; + Txp[1] = 77 + shift[5]; + Txp[2] = 77 + shift[5]; + } + // increase high + else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){ + Txp[0] = 165 + shift[6]; + Txp[1] = 165 + shift[6]; + Txp[2] = 165 + shift[6]; + } + #else + // make low and mid even lower + // and use calibration values + // be aware with toxic fucking closed firmwares - // } - // } - // else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){ - // Txp[0] = (Txp[0] * 3) / 4; - // Txp[1] = (Txp[1] * 3) / 4; - // Txp[2] = (Txp[2] * 3) / 4; - // } - // // increase high - // else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){ - // Txp[0] = Txp[0] + 30; - // Txp[1] = Txp[1] + 30; - // Txp[2] = Txp[2] + 30; - // } + uint8_t shift[] = {0, 0, 0, 0, 0}; + + /* + if(Band == 5) // UHF + { + shift[0] = 0; + shift[1] = 0; + shift[2] = 0; + shift[3] = 0; + shift[4] = 0; + } + */ + + if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) { + for(uint8_t p = 0; p < 3; p++ ) + { + switch (gSetting_set_low) { + case 0: + Txp[p] = (Txp[p] * 4) / 25 + shift[gSetting_set_low]; + break; + case 1: + Txp[p] = (Txp[p] * 4) / 19 + shift[gSetting_set_low]; + break; + case 2: + Txp[p] = (Txp[p] * 4) / 13 + shift[gSetting_set_low]; + break; + case 3: + Txp[p] = (Txp[p] * 4) / 10 + shift[gSetting_set_low]; + break; + case 4: + Txp[p] = (Txp[p] * 4) / 7 + shift[gSetting_set_low]; + break; + } + + } + } + else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){ + Txp[0] = (Txp[0] * 3) / 4; + Txp[1] = (Txp[1] * 3) / 4; + Txp[2] = (Txp[2] * 3) / 4; + } + // increase high + else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){ + Txp[0] = Txp[0] + 30; + Txp[1] = Txp[1] + 30; + Txp[2] = Txp[2] + 30; + } + #endif #else #ifdef ENABLE_REDUCE_LOW_MID_TX_POWER // make low and mid even lower From 208551f5dcbe5fd5c0e89873cb263d69a0653eca Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 03:08:27 +0200 Subject: [PATCH 02/20] Let's go to 2.5 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9ccede1..fcf1573 100644 --- a/Makefile +++ b/Makefile @@ -211,7 +211,7 @@ ifeq ($(ENABLE_FEAT_F4HWN),1) VERSION_STRING_1 ?= v0.22 AUTHOR_STRING_2 ?= F4HWN - VERSION_STRING_2 ?= v2.4 + VERSION_STRING_2 ?= v2.5 AUTHOR_STRING ?= $(AUTHOR_STRING_1)+$(AUTHOR_STRING_2) VERSION_STRING ?= $(VERSION_STRING_2) From a9a4cc5d41ee81a14a8dcb53566e7508d11e1301 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 03:16:01 +0200 Subject: [PATCH 03/20] Remove slashed zero --- font.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/font.c b/font.c index 74fcfc9..1b9832f 100644 --- a/font.c +++ b/font.c @@ -254,7 +254,7 @@ const uint8_t gFontBig[95 - 1][16 - 2] = const uint8_t gFontBigDigits[11][26 - 6] = { - {/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x86, 0xC6, 0xE6, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x67, 0x63, 0x61, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/}, + {/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/}, {/*0x00, 0x00,*/ 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, /*0x00*/}, {/*0x00, 0x00,*/ 0x1C, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x60, 0x70, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, /*0x00*/}, {/*0x00, 0x00,*/ 0x0C, 0x0E, 0x0E, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3E, /*0x00*/}, From 53283d779832a517bbc24b801faa778bd3c49117 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 03:55:04 +0200 Subject: [PATCH 04/20] Remove slashed zero --- font.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/font.c b/font.c index 1b9832f..8d1192b 100644 --- a/font.c +++ b/font.c @@ -133,7 +133,7 @@ const uint8_t gFontBig[95 - 1][16 - 2] = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '-' {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // '.' {0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00}, // '/' - {0xF8, 0xFC, 0x84, 0xC4, 0x64, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x09, 0x08, 0x08, 0x0F, 0x07}, // '0' + {0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '0' {0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08}, // '1' {0x18, 0x1C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // '2' {0x18, 0x1C, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '3' From cf9594a99ff46d5589add1d96f2270a0ae5ae46b Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 06:53:30 +0200 Subject: [PATCH 05/20] Save 116 bytes --- app/app.c | 6 -- audio.c | 19 ++---- audio.h | 184 +++++++++++++++++++++++++++--------------------------- main.c | 4 -- ui/menu.c | 168 ++++++++++++++++++++++++------------------------- ui/menu.h | 1 - 6 files changed, 181 insertions(+), 201 deletions(-) diff --git a/app/app.c b/app/app.c index f438d83..66cc322 100644 --- a/app/app.c +++ b/app/app.c @@ -1253,12 +1253,6 @@ void APP_TimeSlice10ms(void) gNextTimeslice = false; gFlashLightBlinkCounter++; -#ifdef ENABLE_BOOT_BEEPS - if (boot_counter_10ms > 0 && (boot_counter_10ms % 25) == 0) { - AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); - } -#endif - #ifdef ENABLE_AM_FIX if (gRxVfo->Modulation == MODULATION_AM) { AM_fix_10ms(gEeprom.RX_VFO); diff --git a/audio.c b/audio.c index 1ac21a8..4211f61 100644 --- a/audio.c +++ b/audio.c @@ -40,8 +40,8 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (Beep != BEEP_880HZ_60MS_TRIPLE_BEEP && Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && Beep != BEEP_440HZ_500MS && - Beep != BEEP_880HZ_200MS && #ifndef ENABLE_FEAT_F4HWN + Beep != BEEP_880HZ_200MS && Beep != BEEP_880HZ_500MS && #endif #ifdef ENABLE_FEAT_F4HWN @@ -91,14 +91,12 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) case BEEP_500HZ_60MS_DOUBLE_BEEP: ToneFrequency = 500; break; - case BEEP_440HZ_40MS_OPTIONAL: case BEEP_440HZ_500MS: ToneFrequency = 440; break; - case BEEP_880HZ_40MS_OPTIONAL: case BEEP_880HZ_60MS_TRIPLE_BEEP: - case BEEP_880HZ_200MS: #ifndef ENABLE_FEAT_F4HWN + case BEEP_880HZ_200MS: case BEEP_880HZ_500MS: #endif ToneFrequency = 880; @@ -147,15 +145,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) BK4819_ExitTxMute(); Duration = 60; break; - case BEEP_880HZ_40MS_OPTIONAL: - case BEEP_440HZ_40MS_OPTIONAL: - BK4819_ExitTxMute(); - Duration = 40; - break; - case BEEP_880HZ_200MS: - BK4819_ExitTxMute(); - Duration = 200; - break; #ifdef ENABLE_FEAT_F4HWN case BEEP_400HZ_30MS: case BEEP_500HZ_30MS: @@ -166,6 +155,10 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) #endif case BEEP_440HZ_500MS: #ifndef ENABLE_FEAT_F4HWN + case BEEP_880HZ_200MS: + BK4819_ExitTxMute(); + Duration = 200; + break; case BEEP_880HZ_500MS: #endif default: diff --git a/audio.h b/audio.h index 1e5d001..2e8bc9b 100644 --- a/audio.h +++ b/audio.h @@ -29,13 +29,11 @@ enum BEEP_Type_t BEEP_1KHZ_60MS_OPTIONAL, BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL, BEEP_440HZ_500MS, - BEEP_880HZ_200MS, #ifndef ENABLE_FEAT_F4HWN + BEEP_880HZ_200MS, BEEP_880HZ_500MS, #endif BEEP_500HZ_60MS_DOUBLE_BEEP, - BEEP_440HZ_40MS_OPTIONAL, - BEEP_880HZ_40MS_OPTIONAL, #ifdef ENABLE_FEAT_F4HWN BEEP_400HZ_30MS, BEEP_500HZ_30MS, @@ -49,96 +47,6 @@ typedef enum BEEP_Type_t BEEP_Type_t; extern BEEP_Type_t gBeepToPlay; void AUDIO_PlayBeep(BEEP_Type_t Beep); - -enum -{ - VOICE_ID_CHI_BASE = 0x10U, - VOICE_ID_ENG_BASE = 0x60U, -}; - -enum VOICE_ID_t -{ - VOICE_ID_0 = 0x00U, - VOICE_ID_1 = 0x01U, - VOICE_ID_2 = 0x02U, - VOICE_ID_3 = 0x03U, - VOICE_ID_4 = 0x04U, - VOICE_ID_5 = 0x05U, - VOICE_ID_6 = 0x06U, - VOICE_ID_7 = 0x07U, - VOICE_ID_8 = 0x08U, - VOICE_ID_9 = 0x09U, - VOICE_ID_10 = 0x0AU, - VOICE_ID_100 = 0x0BU, - VOICE_ID_WELCOME = 0x0CU, - VOICE_ID_LOCK = 0x0DU, - VOICE_ID_UNLOCK = 0x0EU, - VOICE_ID_SCANNING_BEGIN = 0x0FU, - VOICE_ID_SCANNING_STOP = 0x10U, - VOICE_ID_SCRAMBLER_ON = 0x11U, - VOICE_ID_SCRAMBLER_OFF = 0x12U, - VOICE_ID_FUNCTION = 0x13U, - VOICE_ID_CTCSS = 0x14U, - VOICE_ID_DCS = 0x15U, - VOICE_ID_POWER = 0x16U, - VOICE_ID_SAVE_MODE = 0x17U, - VOICE_ID_MEMORY_CHANNEL = 0x18U, - VOICE_ID_DELETE_CHANNEL = 0x19U, - VOICE_ID_FREQUENCY_STEP = 0x1AU, - VOICE_ID_SQUELCH = 0x1BU, - VOICE_ID_TRANSMIT_OVER_TIME = 0x1CU, - VOICE_ID_BACKLIGHT_SELECTION = 0x1DU, - VOICE_ID_VOX = 0x1EU, - VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION = 0x1FU, - VOICE_ID_TX_OFFSET_FREQUENCY = 0x20U, - VOICE_ID_TRANSMITING_MEMORY = 0x21U, - VOICE_ID_RECEIVING_MEMORY = 0x22U, - VOICE_ID_EMERGENCY_CALL = 0x23U, - VOICE_ID_LOW_VOLTAGE = 0x24U, - VOICE_ID_CHANNEL_MODE = 0x25U, - VOICE_ID_FREQUENCY_MODE = 0x26U, - VOICE_ID_VOICE_PROMPT = 0x27U, - VOICE_ID_BAND_SELECTION = 0x28U, - VOICE_ID_DUAL_STANDBY = 0x29U, - VOICE_ID_CHANNEL_BANDWIDTH = 0x2AU, - VOICE_ID_OPTIONAL_SIGNAL = 0x2BU, - VOICE_ID_MUTE_MODE = 0x2CU, - VOICE_ID_BUSY_LOCKOUT = 0x2DU, - VOICE_ID_BEEP_PROMPT = 0x2EU, - VOICE_ID_ANI_CODE = 0x2FU, - VOICE_ID_INITIALISATION = 0x30U, - VOICE_ID_CONFIRM = 0x31U, - VOICE_ID_CANCEL = 0x32U, - VOICE_ID_ON = 0x33U, - VOICE_ID_OFF = 0x34U, - VOICE_ID_2_TONE = 0x35U, - VOICE_ID_5_TONE = 0x36U, - VOICE_ID_DIGITAL_SIGNAL = 0x37U, - VOICE_ID_REPEATER = 0x38U, - VOICE_ID_MENU = 0x39U, - VOICE_ID_11 = 0x3AU, - VOICE_ID_12 = 0x3BU, - VOICE_ID_13 = 0x3CU, - VOICE_ID_14 = 0x3DU, - VOICE_ID_15 = 0x3EU, - VOICE_ID_16 = 0x3FU, - VOICE_ID_17 = 0x40U, - VOICE_ID_18 = 0x41U, - VOICE_ID_19 = 0x42U, - VOICE_ID_20 = 0x43U, - VOICE_ID_30 = 0x44U, - VOICE_ID_40 = 0x45U, - VOICE_ID_50 = 0x46U, - VOICE_ID_60 = 0x47U, - VOICE_ID_70 = 0x48U, - VOICE_ID_80 = 0x49U, - VOICE_ID_90 = 0x4AU, - VOICE_ID_END = 0x4BU, - - VOICE_ID_INVALID = 0xFFU, -}; - -typedef enum VOICE_ID_t VOICE_ID_t; static inline void AUDIO_AudioPathOn(void) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); @@ -149,6 +57,96 @@ static inline void AUDIO_AudioPathOff(void) { } #ifdef ENABLE_VOICE + typedef enum VOICE_ID_t VOICE_ID_t; + + enum + { + VOICE_ID_CHI_BASE = 0x10U, + VOICE_ID_ENG_BASE = 0x60U, + }; + + enum VOICE_ID_t + { + VOICE_ID_0 = 0x00U, + VOICE_ID_1 = 0x01U, + VOICE_ID_2 = 0x02U, + VOICE_ID_3 = 0x03U, + VOICE_ID_4 = 0x04U, + VOICE_ID_5 = 0x05U, + VOICE_ID_6 = 0x06U, + VOICE_ID_7 = 0x07U, + VOICE_ID_8 = 0x08U, + VOICE_ID_9 = 0x09U, + VOICE_ID_10 = 0x0AU, + VOICE_ID_100 = 0x0BU, + VOICE_ID_WELCOME = 0x0CU, + VOICE_ID_LOCK = 0x0DU, + VOICE_ID_UNLOCK = 0x0EU, + VOICE_ID_SCANNING_BEGIN = 0x0FU, + VOICE_ID_SCANNING_STOP = 0x10U, + VOICE_ID_SCRAMBLER_ON = 0x11U, + VOICE_ID_SCRAMBLER_OFF = 0x12U, + VOICE_ID_FUNCTION = 0x13U, + VOICE_ID_CTCSS = 0x14U, + VOICE_ID_DCS = 0x15U, + VOICE_ID_POWER = 0x16U, + VOICE_ID_SAVE_MODE = 0x17U, + VOICE_ID_MEMORY_CHANNEL = 0x18U, + VOICE_ID_DELETE_CHANNEL = 0x19U, + VOICE_ID_FREQUENCY_STEP = 0x1AU, + VOICE_ID_SQUELCH = 0x1BU, + VOICE_ID_TRANSMIT_OVER_TIME = 0x1CU, + VOICE_ID_BACKLIGHT_SELECTION = 0x1DU, + VOICE_ID_VOX = 0x1EU, + VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION = 0x1FU, + VOICE_ID_TX_OFFSET_FREQUENCY = 0x20U, + VOICE_ID_TRANSMITING_MEMORY = 0x21U, + VOICE_ID_RECEIVING_MEMORY = 0x22U, + VOICE_ID_EMERGENCY_CALL = 0x23U, + VOICE_ID_LOW_VOLTAGE = 0x24U, + VOICE_ID_CHANNEL_MODE = 0x25U, + VOICE_ID_FREQUENCY_MODE = 0x26U, + VOICE_ID_VOICE_PROMPT = 0x27U, + VOICE_ID_BAND_SELECTION = 0x28U, + VOICE_ID_DUAL_STANDBY = 0x29U, + VOICE_ID_CHANNEL_BANDWIDTH = 0x2AU, + VOICE_ID_OPTIONAL_SIGNAL = 0x2BU, + VOICE_ID_MUTE_MODE = 0x2CU, + VOICE_ID_BUSY_LOCKOUT = 0x2DU, + VOICE_ID_BEEP_PROMPT = 0x2EU, + VOICE_ID_ANI_CODE = 0x2FU, + VOICE_ID_INITIALISATION = 0x30U, + VOICE_ID_CONFIRM = 0x31U, + VOICE_ID_CANCEL = 0x32U, + VOICE_ID_ON = 0x33U, + VOICE_ID_OFF = 0x34U, + VOICE_ID_2_TONE = 0x35U, + VOICE_ID_5_TONE = 0x36U, + VOICE_ID_DIGITAL_SIGNAL = 0x37U, + VOICE_ID_REPEATER = 0x38U, + VOICE_ID_MENU = 0x39U, + VOICE_ID_11 = 0x3AU, + VOICE_ID_12 = 0x3BU, + VOICE_ID_13 = 0x3CU, + VOICE_ID_14 = 0x3DU, + VOICE_ID_15 = 0x3EU, + VOICE_ID_16 = 0x3FU, + VOICE_ID_17 = 0x40U, + VOICE_ID_18 = 0x41U, + VOICE_ID_19 = 0x42U, + VOICE_ID_20 = 0x43U, + VOICE_ID_30 = 0x44U, + VOICE_ID_40 = 0x45U, + VOICE_ID_50 = 0x46U, + VOICE_ID_60 = 0x47U, + VOICE_ID_70 = 0x48U, + VOICE_ID_80 = 0x49U, + VOICE_ID_90 = 0x4AU, + VOICE_ID_END = 0x4BU, + + VOICE_ID_INVALID = 0xFFU, + }; + extern VOICE_ID_t gVoiceID[8]; extern uint8_t gVoiceReadIndex; extern uint8_t gVoiceWriteIndex; diff --git a/main.c b/main.c index bbbf5e8..7a831bb 100644 --- a/main.c +++ b/main.c @@ -177,10 +177,6 @@ void Main(void) boot_counter_10ms = 0; break; } -#ifdef ENABLE_BOOT_BEEPS - if ((boot_counter_10ms % 25) == 0) - AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); -#endif } } diff --git a/ui/menu.c b/ui/menu.c index 6f7fbfe..24eff34 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -40,124 +40,124 @@ const t_menu_item MenuList[] = { // text, voice ID, menu ID - {"Step", VOICE_ID_FREQUENCY_STEP, MENU_STEP }, - {"TxPwr", VOICE_ID_POWER, MENU_TXP }, // was "TXP" - {"RxDCS", VOICE_ID_DCS, MENU_R_DCS }, // was "R_DCS" - {"RxCTCS", VOICE_ID_CTCSS, MENU_R_CTCS }, // was "R_CTCS" - {"TxDCS", VOICE_ID_DCS, MENU_T_DCS }, // was "T_DCS" - {"TxCTCS", VOICE_ID_CTCSS, MENU_T_CTCS }, // was "T_CTCS" - {"TxODir", VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION, MENU_SFT_D }, // was "SFT_D" - {"TxOffs", VOICE_ID_TX_OFFSET_FREQUENCY, MENU_OFFSET }, // was "OFFSET" - {"W/N", VOICE_ID_CHANNEL_BANDWIDTH, MENU_W_N }, + {"Step", MENU_STEP }, + {"TxPwr", MENU_TXP }, // was "TXP" + {"RxDCS", MENU_R_DCS }, // was "R_DCS" + {"RxCTCS", MENU_R_CTCS }, // was "R_CTCS" + {"TxDCS", MENU_T_DCS }, // was "T_DCS" + {"TxCTCS", MENU_T_CTCS }, // was "T_CTCS" + {"TxODir", MENU_SFT_D }, // was "SFT_D" + {"TxOffs", MENU_OFFSET }, // was "OFFSET" + {"W/N", MENU_W_N }, #ifndef ENABLE_FEAT_F4HWN - {"Scramb", VOICE_ID_SCRAMBLER_ON, MENU_SCR }, // was "SCR" + {"Scramb", MENU_SCR }, // was "SCR" #endif - {"BusyCL", VOICE_ID_BUSY_LOCKOUT, MENU_BCL }, // was "BCL" - {"Compnd", VOICE_ID_INVALID, MENU_COMPAND }, - {"Demodu", VOICE_ID_INVALID, MENU_AM }, // was "AM" - {"ScAdd1", VOICE_ID_INVALID, MENU_S_ADD1 }, - {"ScAdd2", VOICE_ID_INVALID, MENU_S_ADD2 }, - {"ChSave", VOICE_ID_MEMORY_CHANNEL, MENU_MEM_CH }, // was "MEM-CH" - {"ChDele", VOICE_ID_DELETE_CHANNEL, MENU_DEL_CH }, // was "DEL-CH" - {"ChName", VOICE_ID_INVALID, MENU_MEM_NAME }, + {"BusyCL", MENU_BCL }, // was "BCL" + {"Compnd", MENU_COMPAND }, + {"Demodu", MENU_AM }, // was "AM" + {"ScAdd1", MENU_S_ADD1 }, + {"ScAdd2", MENU_S_ADD2 }, + {"ChSave", MENU_MEM_CH }, // was "MEM-CH" + {"ChDele", MENU_DEL_CH }, // was "DEL-CH" + {"ChName", MENU_MEM_NAME }, - {"SList", VOICE_ID_INVALID, MENU_S_LIST }, - {"SList1", VOICE_ID_INVALID, MENU_SLIST1 }, - {"SList2", VOICE_ID_INVALID, MENU_SLIST2 }, - {"ScnRev", VOICE_ID_INVALID, MENU_SC_REV }, + {"SList", MENU_S_LIST }, + {"SList1", MENU_SLIST1 }, + {"SList2", MENU_SLIST2 }, + {"ScnRev", MENU_SC_REV }, #ifdef ENABLE_NOAA - {"NOAA-S", VOICE_ID_INVALID, MENU_NOAA_S }, + {"NOAA-S", MENU_NOAA_S }, #endif - {"F1Shrt", VOICE_ID_INVALID, MENU_F1SHRT }, - {"F1Long", VOICE_ID_INVALID, MENU_F1LONG }, - {"F2Shrt", VOICE_ID_INVALID, MENU_F2SHRT }, - {"F2Long", VOICE_ID_INVALID, MENU_F2LONG }, - {"M Long", VOICE_ID_INVALID, MENU_MLONG }, + {"F1Shrt", MENU_F1SHRT }, + {"F1Long", MENU_F1LONG }, + {"F2Shrt", MENU_F2SHRT }, + {"F2Long", MENU_F2LONG }, + {"M Long", MENU_MLONG }, - {"KeyLck", VOICE_ID_INVALID, MENU_AUTOLK }, // was "AUTOLk" - {"TxTOut", VOICE_ID_TRANSMIT_OVER_TIME, MENU_TOT }, // was "TOT" - {"BatSav", VOICE_ID_SAVE_MODE, MENU_SAVE }, // was "SAVE" - {"Mic", VOICE_ID_INVALID, MENU_MIC }, + {"KeyLck", MENU_AUTOLK }, // was "AUTOLk" + {"TxTOut", MENU_TOT }, // was "TOT" + {"BatSav", MENU_SAVE }, // was "SAVE" + {"Mic", MENU_MIC }, #ifdef ENABLE_AUDIO_BAR - {"MicBar", VOICE_ID_INVALID, MENU_MIC_BAR }, + {"MicBar", MENU_MIC_BAR }, #endif - {"ChDisp", VOICE_ID_INVALID, MENU_MDF }, // was "MDF" - {"POnMsg", VOICE_ID_INVALID, MENU_PONMSG }, - {"BatTxt", VOICE_ID_INVALID, MENU_BAT_TXT }, - {"BackLt", VOICE_ID_INVALID, MENU_ABR }, // was "ABR" - {"BLMin", VOICE_ID_INVALID, MENU_ABR_MIN }, - {"BLMax", VOICE_ID_INVALID, MENU_ABR_MAX }, - {"BltTRX", VOICE_ID_INVALID, MENU_ABR_ON_TX_RX }, - {"Beep", VOICE_ID_BEEP_PROMPT, MENU_BEEP }, + {"ChDisp", MENU_MDF }, // was "MDF" + {"POnMsg", MENU_PONMSG }, + {"BatTxt", MENU_BAT_TXT }, + {"BackLt", MENU_ABR }, // was "ABR" + {"BLMin", MENU_ABR_MIN }, + {"BLMax", MENU_ABR_MAX }, + {"BltTRX", MENU_ABR_ON_TX_RX }, + {"Beep", MENU_BEEP }, #ifdef ENABLE_VOICE - {"Voice", VOICE_ID_VOICE_PROMPT, MENU_VOICE }, + {"Voice", MENU_VOICE }, #endif - {"Roger", VOICE_ID_INVALID, MENU_ROGER }, - {"STE", VOICE_ID_INVALID, MENU_STE }, - {"RP STE", VOICE_ID_INVALID, MENU_RP_STE }, - {"1 Call", VOICE_ID_INVALID, MENU_1_CALL }, + {"Roger", MENU_ROGER }, + {"STE", MENU_STE }, + {"RP STE", MENU_RP_STE }, + {"1 Call", MENU_1_CALL }, #ifdef ENABLE_ALARM - {"AlarmT", VOICE_ID_INVALID, MENU_AL_MOD }, + {"AlarmT", MENU_AL_MOD }, #endif #ifdef ENABLE_DTMF_CALLING - {"ANI ID", VOICE_ID_ANI_CODE, MENU_ANI_ID }, + {"ANI ID", MENU_ANI_ID }, #endif - {"UPCode", VOICE_ID_INVALID, MENU_UPCODE }, - {"DWCode", VOICE_ID_INVALID, MENU_DWCODE }, - {"PTT ID", VOICE_ID_INVALID, MENU_PTT_ID }, - {"D ST", VOICE_ID_INVALID, MENU_D_ST }, + {"UPCode", MENU_UPCODE }, + {"DWCode", MENU_DWCODE }, + {"PTT ID", MENU_PTT_ID }, + {"D ST", MENU_D_ST }, #ifdef ENABLE_DTMF_CALLING - {"D Resp", VOICE_ID_INVALID, MENU_D_RSP }, - {"D Hold", VOICE_ID_INVALID, MENU_D_HOLD }, + {"D Resp", MENU_D_RSP }, + {"D Hold", MENU_D_HOLD }, #endif - {"D Prel", VOICE_ID_INVALID, MENU_D_PRE }, + {"D Prel", MENU_D_PRE }, #ifdef ENABLE_DTMF_CALLING - {"D Decd", VOICE_ID_INVALID, MENU_D_DCD }, - {"D List", VOICE_ID_INVALID, MENU_D_LIST }, + {"D Decd", MENU_D_DCD }, + {"D List", MENU_D_LIST }, #endif - {"D Live", VOICE_ID_INVALID, MENU_D_LIVE_DEC }, // live DTMF decoder + {"D Live", MENU_D_LIVE_DEC }, // live DTMF decoder #ifdef ENABLE_AM_FIX - {"AM Fix", VOICE_ID_INVALID, MENU_AM_FIX }, + {"AM Fix", MENU_AM_FIX }, #endif #ifdef ENABLE_VOX - {"VOX", VOICE_ID_VOX, MENU_VOX }, + {"VOX", MENU_VOX }, #endif #ifdef ENABLE_FEAT_F4HWN - {"SysInf", VOICE_ID_INVALID, MENU_VOL }, // was "VOL" + {"SysInf", MENU_VOL }, // was "VOL" #else - {"BatVol", VOICE_ID_INVALID, MENU_VOL }, // was "VOL" + {"BatVol", MENU_VOL }, // was "VOL" #endif - {"RxMode", VOICE_ID_DUAL_STANDBY, MENU_TDR }, - {"Sql", VOICE_ID_SQUELCH, MENU_SQL }, + {"RxMode", MENU_TDR }, + {"Sql", MENU_SQL }, #ifdef ENABLE_FEAT_F4HWN - {"SetLow", VOICE_ID_INVALID, MENU_SET_LOW }, - {"SetPtt", VOICE_ID_INVALID, MENU_SET_PTT }, - {"SetTot", VOICE_ID_INVALID, MENU_SET_TOT }, - {"SetEot", VOICE_ID_INVALID, MENU_SET_EOT }, - {"SetCtr", VOICE_ID_INVALID, MENU_SET_CTR }, - {"SetInv", VOICE_ID_INVALID, MENU_SET_INV }, - {"SetLck", VOICE_ID_INVALID, MENU_SET_LCK }, - {"SetMet", VOICE_ID_INVALID, MENU_SET_MET }, - {"SetGui", VOICE_ID_INVALID, MENU_SET_GUI }, + {"SetLow", MENU_SET_LOW }, + {"SetPtt", MENU_SET_PTT }, + {"SetTot", MENU_SET_TOT }, + {"SetEot", MENU_SET_EOT }, + {"SetCtr", MENU_SET_CTR }, + {"SetInv", MENU_SET_INV }, + {"SetLck", MENU_SET_LCK }, + {"SetMet", MENU_SET_MET }, + {"SetGui", MENU_SET_GUI }, #endif // hidden menu items from here on // enabled if pressing both the PTT and upper side button at power-on - {"F Lock", VOICE_ID_INVALID, MENU_F_LOCK }, - {"Tx 200", VOICE_ID_INVALID, MENU_200TX }, // was "200TX" - {"Tx 350", VOICE_ID_INVALID, MENU_350TX }, // was "350TX" - {"Tx 500", VOICE_ID_INVALID, MENU_500TX }, // was "500TX" - {"350 En", VOICE_ID_INVALID, MENU_350EN }, // was "350EN" + {"F Lock", MENU_F_LOCK }, + {"Tx 200", MENU_200TX }, // was "200TX" + {"Tx 350", MENU_350TX }, // was "350TX" + {"Tx 500", MENU_500TX }, // was "500TX" + {"350 En", MENU_350EN }, // was "350EN" #ifndef ENABLE_FEAT_F4HWN - {"ScraEn", VOICE_ID_INVALID, MENU_SCREN }, // was "SCREN" + {"ScraEn", MENU_SCREN }, // was "SCREN" #endif #ifdef ENABLE_F_CAL_MENU - {"FrCali", VOICE_ID_INVALID, MENU_F_CALI }, // reference xtal calibration + {"FrCali", MENU_F_CALI }, // reference xtal calibration #endif - {"BatCal", VOICE_ID_INVALID, MENU_BATCAL }, // battery voltage calibration - {"BatTyp", VOICE_ID_INVALID, MENU_BATTYP }, // battery type 1600/2200mAh - {"Reset", VOICE_ID_INITIALISATION, MENU_RESET }, // might be better to move this to the hidden menu items ? + {"BatCal", MENU_BATCAL }, // battery voltage calibration + {"BatTyp", MENU_BATTYP }, // battery type 1600/2200mAh + {"Reset", MENU_RESET }, // might be better to move this to the hidden menu items ? - {"", VOICE_ID_INVALID, 0xff } // end of list - DO NOT delete or move this this + {"", 0xff } // end of list - DO NOT delete or move this this }; const uint8_t FIRST_HIDDEN_MENU_ITEM = MENU_F_LOCK; diff --git a/ui/menu.h b/ui/menu.h index 04a808a..1322200 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -25,7 +25,6 @@ typedef struct { const char name[7]; // menu display area only has room for 6 characters - VOICE_ID_t voice_id; uint8_t menu_id; } t_menu_item; From a56850c3acae48ef55beefb207fef618f6fe18bd Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 07:03:24 +0200 Subject: [PATCH 06/20] Save 24 bytes --- audio.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/audio.c b/audio.c index 4211f61..91e8cc6 100644 --- a/audio.c +++ b/audio.c @@ -104,19 +104,21 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) #ifdef ENABLE_FEAT_F4HWN case BEEP_400HZ_30MS: ToneFrequency = 400; - BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); break; case BEEP_500HZ_30MS: ToneFrequency = 500; - BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); break; case BEEP_600HZ_30MS: ToneFrequency = 600; - BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); break; #endif } + if(Beep == BEEP_400HZ_30MS || Beep == BEEP_500HZ_30MS || Beep == BEEP_600HZ_30MS) + { + BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); + } + BK4819_PlayTone(ToneFrequency, true); SYSTEM_DelayMs(2); From 4276211ed94edc8278048466ae92703bf19b7cf5 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 1 Apr 2024 07:17:25 +0200 Subject: [PATCH 07/20] Refactoring --- app/app.c | 2 +- audio.c | 6 +++--- audio.h | 2 +- driver/backlight.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/app.c b/app/app.c index 66cc322..0f3a564 100644 --- a/app/app.c +++ b/app/app.c @@ -894,7 +894,7 @@ void APP_Update(void) APP_EndTransmission(); - AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); RADIO_SetVfoState(VFO_STATE_TIMEOUT); diff --git a/audio.c b/audio.c index 91e8cc6..f14a6a4 100644 --- a/audio.c +++ b/audio.c @@ -37,7 +37,7 @@ BEEP_Type_t gBeepToPlay = BEEP_NONE; void AUDIO_PlayBeep(BEEP_Type_t Beep) { - if (Beep != BEEP_880HZ_60MS_TRIPLE_BEEP && + if (Beep != BEEP_880HZ_60MS_DOUBLE_BEEP && Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && Beep != BEEP_440HZ_500MS && #ifndef ENABLE_FEAT_F4HWN @@ -94,7 +94,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) case BEEP_440HZ_500MS: ToneFrequency = 440; break; - case BEEP_880HZ_60MS_TRIPLE_BEEP: + case BEEP_880HZ_60MS_DOUBLE_BEEP: #ifndef ENABLE_FEAT_F4HWN case BEEP_880HZ_200MS: case BEEP_880HZ_500MS: @@ -130,7 +130,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) uint16_t Duration; switch (Beep) { - case BEEP_880HZ_60MS_TRIPLE_BEEP: + case BEEP_880HZ_60MS_DOUBLE_BEEP: BK4819_ExitTxMute(); SYSTEM_DelayMs(60); BK4819_EnterTxMute(); diff --git a/audio.h b/audio.h index 2e8bc9b..98161a0 100644 --- a/audio.h +++ b/audio.h @@ -39,7 +39,7 @@ enum BEEP_Type_t BEEP_500HZ_30MS, BEEP_600HZ_30MS, #endif - BEEP_880HZ_60MS_TRIPLE_BEEP + BEEP_880HZ_60MS_DOUBLE_BEEP }; typedef enum BEEP_Type_t BEEP_Type_t; diff --git a/driver/backlight.c b/driver/backlight.c index 7186d4c..7868900 100644 --- a/driver/backlight.c +++ b/driver/backlight.c @@ -62,8 +62,8 @@ static void BACKLIGHT_Sound(void) { if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL) { - AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); - AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); gK5startup = false; } else From 6171da9fd0d6cc5f247db83a680091f7f6edfc5c Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Tue, 2 Apr 2024 05:36:20 +0200 Subject: [PATCH 08/20] Save 68 bytes --- driver/st7565.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ ui/status.c | 2 +- ui/welcome.c | 2 +- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/driver/st7565.c b/driver/st7565.c index d3680fb..dc6b125 100644 --- a/driver/st7565.c +++ b/driver/st7565.c @@ -46,6 +46,53 @@ void ST7565_DrawLine(const unsigned int Column, const unsigned int Line, const u SPI_ToggleMasterMode(&SPI0->CR, true); } + +// Optimization +// +// ST7565_BlitScreen(0) = ST7565_BlitStatusLine() +// ST7565_BlitScreen(1..7) = ST7565_BlitLine() +// ST7565_BlitScreen(8) = ST7565_BlitFullScreen() +// + +static void ST7565_BlitScreen(uint8_t line) +{ + SPI_ToggleMasterMode(&SPI0->CR, false); + ST7565_WriteByte(0x40); + + if(line == 0) + { + DrawLine(0, 0, gStatusLine, LCD_WIDTH); + } + else if(line <= FRAME_LINES) + { + DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH); + } + else + { + for (line = 1; line <= FRAME_LINES; line++) { + DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH); + } + } + + SPI_ToggleMasterMode(&SPI0->CR, true); +} + +void ST7565_BlitFullScreen(void) +{ + ST7565_BlitScreen(8); +} + +void ST7565_BlitLine(unsigned line) +{ + ST7565_BlitScreen(line + 1); +} + +void ST7565_BlitStatusLine(void) +{ + ST7565_BlitScreen(0); +} + +/* void ST7565_BlitFullScreen(void) { SPI_ToggleMasterMode(&SPI0->CR, false); @@ -71,6 +118,9 @@ void ST7565_BlitStatusLine(void) DrawLine(0, 0, gStatusLine, LCD_WIDTH); SPI_ToggleMasterMode(&SPI0->CR, true); } +*/ + + void ST7565_FillScreen(uint8_t value) { diff --git a/ui/status.c b/ui/status.c index 10f6d4f..6e1b8aa 100644 --- a/ui/status.c +++ b/ui/status.c @@ -181,7 +181,7 @@ void UI_DisplayStatus() for (uint8_t i = 71; i < 79; i++) { - gFrameBuffer[-1][i] ^= 0x7F; + gStatusLine[i] ^= 0x7F; } x1 = x; } diff --git a/ui/welcome.c b/ui/welcome.c index 6b1357f..3b98583 100644 --- a/ui/welcome.c +++ b/ui/welcome.c @@ -121,7 +121,7 @@ void UI_DisplayWelcome(void) UI_PrintStringSmallNormal(Version, 0, 127, 6); #endif - ST7565_BlitStatusLine(); // blank status line + //ST7565_BlitStatusLine(); // blank status line : I think it's useless ST7565_BlitFullScreen(); } } From 96664f93b98cfbfbe13d230c52960c2dfd8f97d2 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Tue, 2 Apr 2024 05:57:47 +0200 Subject: [PATCH 09/20] Refactoring --- driver/st7565.c | 122 ++++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/driver/st7565.c b/driver/st7565.c index dc6b125..af17e24 100644 --- a/driver/st7565.c +++ b/driver/st7565.c @@ -47,80 +47,78 @@ void ST7565_DrawLine(const unsigned int Column, const unsigned int Line, const u } -// Optimization -// -// ST7565_BlitScreen(0) = ST7565_BlitStatusLine() -// ST7565_BlitScreen(1..7) = ST7565_BlitLine() -// ST7565_BlitScreen(8) = ST7565_BlitFullScreen() -// +#ifdef ENABLE_FEAT_F4HWN + // Optimization + // + // ST7565_BlitScreen(0) = ST7565_BlitStatusLine() + // ST7565_BlitScreen(1..7) = ST7565_BlitLine() + // ST7565_BlitScreen(8) = ST7565_BlitFullScreen() + // -static void ST7565_BlitScreen(uint8_t line) -{ - SPI_ToggleMasterMode(&SPI0->CR, false); - ST7565_WriteByte(0x40); + static void ST7565_BlitScreen(uint8_t line) + { + SPI_ToggleMasterMode(&SPI0->CR, false); + ST7565_WriteByte(0x40); - if(line == 0) - { - DrawLine(0, 0, gStatusLine, LCD_WIDTH); - } - else if(line <= FRAME_LINES) - { - DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH); - } - else - { - for (line = 1; line <= FRAME_LINES; line++) { + if(line == 0) + { + DrawLine(0, 0, gStatusLine, LCD_WIDTH); + } + else if(line <= FRAME_LINES) + { DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH); } + else + { + for (line = 1; line <= FRAME_LINES; line++) { + DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH); + } + } + + SPI_ToggleMasterMode(&SPI0->CR, true); } - SPI_ToggleMasterMode(&SPI0->CR, true); -} + void ST7565_BlitFullScreen(void) + { + ST7565_BlitScreen(8); + } -void ST7565_BlitFullScreen(void) -{ - ST7565_BlitScreen(8); -} + void ST7565_BlitLine(unsigned line) + { + ST7565_BlitScreen(line + 1); + } -void ST7565_BlitLine(unsigned line) -{ - ST7565_BlitScreen(line + 1); -} + void ST7565_BlitStatusLine(void) + { + ST7565_BlitScreen(0); + } +#else + void ST7565_BlitFullScreen(void) + { + SPI_ToggleMasterMode(&SPI0->CR, false); + ST7565_WriteByte(0x40); + for (unsigned line = 0; line < FRAME_LINES; line++) { + DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH); + } + SPI_ToggleMasterMode(&SPI0->CR, true); + } -void ST7565_BlitStatusLine(void) -{ - ST7565_BlitScreen(0); -} - -/* -void ST7565_BlitFullScreen(void) -{ - SPI_ToggleMasterMode(&SPI0->CR, false); - ST7565_WriteByte(0x40); - for (unsigned line = 0; line < FRAME_LINES; line++) { + void ST7565_BlitLine(unsigned line) + { + SPI_ToggleMasterMode(&SPI0->CR, false); + ST7565_WriteByte(0x40); // start line ? DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH); + SPI_ToggleMasterMode(&SPI0->CR, true); } - SPI_ToggleMasterMode(&SPI0->CR, true); -} - -void ST7565_BlitLine(unsigned line) -{ - SPI_ToggleMasterMode(&SPI0->CR, false); - ST7565_WriteByte(0x40); // start line ? - DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH); - SPI_ToggleMasterMode(&SPI0->CR, true); -} - -void ST7565_BlitStatusLine(void) -{ // the top small text line on the display - SPI_ToggleMasterMode(&SPI0->CR, false); - ST7565_WriteByte(0x40); // start line ? - DrawLine(0, 0, gStatusLine, LCD_WIDTH); - SPI_ToggleMasterMode(&SPI0->CR, true); -} -*/ - + void ST7565_BlitStatusLine(void) + { // the top small text line on the display + SPI_ToggleMasterMode(&SPI0->CR, false); + ST7565_WriteByte(0x40); // start line ? + DrawLine(0, 0, gStatusLine, LCD_WIDTH); + SPI_ToggleMasterMode(&SPI0->CR, true); + } +#endif void ST7565_FillScreen(uint8_t value) { From 95d2b1f4ecddfd2d050aef55f18bfe02945f6561 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Tue, 2 Apr 2024 19:06:45 +0200 Subject: [PATCH 10/20] Try to fix a strange issue on FAGCI Spectrum exit --- app/spectrum.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/spectrum.c b/app/spectrum.c index 6979afb..bf419d3 100644 --- a/app/spectrum.c +++ b/app/spectrum.c @@ -248,6 +248,8 @@ static void RestoreRegisters() { for (uint32_t i = 0; i < ARRAY_SIZE(registers_to_save); i++){ BK4819_WriteRegister(registers_to_save[i], registers_stack[i]); } + + gVfoConfigureMode = VFO_CONFIGURE; } static void ToggleAFDAC(bool on) { From fe1c3d010a1451a95e92f92d81c25186ba966b60 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Tue, 2 Apr 2024 19:47:16 +0200 Subject: [PATCH 11/20] Try to fix a strange issue on FAGCI Spectrum exit --- app/spectrum.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/spectrum.c b/app/spectrum.c index bf419d3..6d28028 100644 --- a/app/spectrum.c +++ b/app/spectrum.c @@ -249,7 +249,9 @@ static void RestoreRegisters() { BK4819_WriteRegister(registers_to_save[i], registers_stack[i]); } +#ifdef ENABLE_FEAT_F4HWN gVfoConfigureMode = VFO_CONFIGURE; +#endif } static void ToggleAFDAC(bool on) { From a562ff8479d2713c65250395c0bfe67ca28d3b3e Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Thu, 4 Apr 2024 20:10:49 +0200 Subject: [PATCH 12/20] Add F_LOCK_PMR --- frequencies.c | 7 +++++++ settings.h | 3 +++ ui/menu.c | 3 +++ 3 files changed, 13 insertions(+) diff --git a/frequencies.c b/frequencies.c index df3a193..c435dbe 100644 --- a/frequencies.c +++ b/frequencies.c @@ -222,6 +222,13 @@ int32_t TX_freq_check(const uint32_t Frequency) return 0; break; +#ifdef ENABLE_FEAT_F4HWN + case F_LOCK_PMR: + if (Frequency >= 44600625 && Frequency <= 44619375) + return 0; + break; +#endif + case F_LOCK_ALL: break; diff --git a/settings.h b/settings.h index 374c3c5..e91cb1d 100644 --- a/settings.h +++ b/settings.h @@ -45,6 +45,9 @@ enum TxLockModes_t { F_LOCK_GB, F_LOCK_430, F_LOCK_438, +#ifdef ENABLE_FEAT_F4HWN + F_LOCK_PMR, +#endif F_LOCK_ALL, // disable TX on all frequencies F_LOCK_NONE, // enable TX on all frequencies F_LOCK_LEN diff --git a/ui/menu.c b/ui/menu.c index 24eff34..32da365 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -305,6 +305,9 @@ const char * const gSubMenu_F_LOCK[] = "GB HAM\n144-148\n430-440", "137-174\n400-430", "137-174\n400-438", +#ifdef ENABLE_FEAT_F4HWN + "PMR 446", +#endif "DISABLE\nALL", "UNLOCK\nALL", }; From d489dedf51bc0cb9467436172cfdd046e3db2f37 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Fri, 5 Apr 2024 05:03:40 +0200 Subject: [PATCH 13/20] Improve BackLt (35/63) --- app/action.c | 4 ++-- app/app.c | 2 +- app/menu.c | 2 +- driver/backlight.c | 14 +++++--------- helper/battery.c | 2 +- main.c | 2 +- settings.c | 2 +- ui/menu.c | 30 +++++++++++++++++------------- ui/menu.h | 1 - 9 files changed, 29 insertions(+), 30 deletions(-) diff --git a/app/action.c b/app/action.c index d3ccb61..1f6afcb 100644 --- a/app/action.c +++ b/app/action.c @@ -504,7 +504,7 @@ void ACTION_BackLightOnDemand(void) if(gBackLight == false) { gBacklightTimeOriginal = gEeprom.BACKLIGHT_TIME; - gEeprom.BACKLIGHT_TIME = 7; + gEeprom.BACKLIGHT_TIME = 17; gBackLight = true; } else @@ -515,7 +515,7 @@ void ACTION_BackLightOnDemand(void) } else { - gEeprom.BACKLIGHT_TIME = 7; + gEeprom.BACKLIGHT_TIME = 17; } } diff --git a/app/app.c b/app/app.c index 0f3a564..a23ca02 100644 --- a/app/app.c +++ b/app/app.c @@ -1483,7 +1483,7 @@ void APP_TimeSlice500ms(void) // don't turn off backlight if user is in backlight menu option && !(gScreenToDisplay == DISPLAY_MENU && (UI_MENU_GetCurrentMenuId() == MENU_ABR || UI_MENU_GetCurrentMenuId() == MENU_ABR_MAX)) && --gBacklightCountdown_500ms == 0 - && gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1) + && gEeprom.BACKLIGHT_TIME < 17 ) { BACKLIGHT_TurnOff(); } diff --git a/app/menu.c b/app/menu.c index b8d8724..d6471a7 100644 --- a/app/menu.c +++ b/app/menu.c @@ -129,7 +129,7 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax) case MENU_ABR: //*pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1; + *pMax = 17; break; case MENU_ABR_MIN: diff --git a/driver/backlight.c b/driver/backlight.c index 7868900..79a093b 100644 --- a/driver/backlight.c +++ b/driver/backlight.c @@ -110,17 +110,13 @@ void BACKLIGHT_TurnOn(void) switch (gEeprom.BACKLIGHT_TIME) { default: - case 1: // 5 sec - case 2: // 10 sec - case 3: // 20 sec - gBacklightCountdown_500ms = 1 + (2 << (gEeprom.BACKLIGHT_TIME - 1)) * 5; + case 1 ... 11: // 5 sec * value + gBacklightCountdown_500ms = 1 + (gEeprom.BACKLIGHT_TIME * 5) * 2; break; - case 4: // 1 min - case 5: // 2 min - case 6: // 4 min - gBacklightCountdown_500ms = 1 + (2 << (gEeprom.BACKLIGHT_TIME - 4)) * 60; + case 12 ... 16: // 1 min $ value + gBacklightCountdown_500ms = 1 + ((gEeprom.BACKLIGHT_TIME - 11) * 60) * 2; break; - case 7: // always on + case 17: // always on gBacklightCountdown_500ms = 0; break; } diff --git a/helper/battery.c b/helper/battery.c index 6267c16..f000a4a 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -219,7 +219,7 @@ void BATTERY_TimeSlice500ms(void) ST7565_HardwareReset(); - if (gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1)) { + if (gEeprom.BACKLIGHT_TIME < 17) { BACKLIGHT_TurnOff(); } } diff --git a/main.c b/main.c index 7a831bb..5e71a79 100644 --- a/main.c +++ b/main.c @@ -151,7 +151,7 @@ void Main(void) { FUNCTION_Select(FUNCTION_POWER_SAVE); - if (gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1)) // backlight is not set to be always on + if (gEeprom.BACKLIGHT_TIME < 17) // backlight is not set to be always on BACKLIGHT_TurnOff(); // turn the backlight OFF else BACKLIGHT_TurnOn(); // turn the backlight ON diff --git a/settings.c b/settings.c index 06dbdfe..74b6902 100644 --- a/settings.c +++ b/settings.c @@ -67,7 +67,7 @@ void SETTINGS_InitEEPROM(void) gEeprom.CROSS_BAND_RX_TX = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF; gEeprom.BATTERY_SAVE = (Data[3] < 5) ? Data[3] : 4; gEeprom.DUAL_WATCH = (Data[4] < 3) ? Data[4] : DUAL_WATCH_CHAN_A; - gEeprom.BACKLIGHT_TIME = (Data[5] < ARRAY_SIZE(gSubMenu_BACKLIGHT)) ? Data[5] : 3; + gEeprom.BACKLIGHT_TIME = (Data[5] < 18) ? Data[5] : 3; gEeprom.TAIL_TONE_ELIMINATION = (Data[6] < 2) ? Data[6] : false; gEeprom.VFO_OPEN = (Data[7] < 2) ? Data[7] : true; diff --git a/ui/menu.c b/ui/menu.c index 32da365..0b7fcf4 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -312,18 +312,6 @@ const char * const gSubMenu_F_LOCK[] = "UNLOCK\nALL", }; -const char gSubMenu_BACKLIGHT[][7] = -{ - "OFF", - "5 sec", - "10 sec", - "20 sec", - "1 min", - "2 min", - "4 min", - "ON" -}; - const char gSubMenu_RX_TX[][6] = { "OFF", @@ -668,7 +656,23 @@ void UI_DisplayMenu(void) #endif case MENU_ABR: - strcpy(String, gSubMenu_BACKLIGHT[gSubMenuSelection]); + if(gSubMenuSelection == 0) + { + sprintf(String, "%s", "OFF"); + } + else if(gSubMenuSelection < 12) + { + sprintf(String, "%d sec", gSubMenuSelection * 5); + } + else if(gSubMenuSelection < 17) + { + sprintf(String, "%d min", gSubMenuSelection - 11); + } + else + { + sprintf(String, "%s", "ON"); + } + if(BACKLIGHT_GetBrightness() < 4) BACKLIGHT_SetBrightness(4); break; diff --git a/ui/menu.h b/ui/menu.h index 1322200..902c9e4 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -180,7 +180,6 @@ extern const char* const gSubMenu_PTT_ID[5]; extern const char gSubMenu_ROGER[3][6]; extern const char gSubMenu_RESET[2][4]; extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN]; -extern const char gSubMenu_BACKLIGHT[8][7]; extern const char gSubMenu_RX_TX[4][6]; extern const char gSubMenu_BAT_TXT[3][8]; extern const char gSubMenu_BATTYP[2][9]; From 623a86b298a8127464a756af4f520e8b21d3ac51 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Fri, 5 Apr 2024 06:05:49 +0200 Subject: [PATCH 14/20] Improve TxTOut (28/63) --- app/menu.c | 3 ++- radio.c | 5 +++++ settings.c | 2 +- ui/menu.c | 4 +++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/menu.c b/app/menu.c index d6471a7..533ba32 100644 --- a/app/menu.c +++ b/app/menu.c @@ -269,7 +269,8 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax) case MENU_TOT: //*pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_TOT) - 1; + *pMin = 5; + *pMax = 179; break; #ifdef ENABLE_VOX diff --git a/radio.c b/radio.c index 16ffc7a..c4c0c9f 100644 --- a/radio.c +++ b/radio.c @@ -1113,12 +1113,17 @@ void RADIO_PrepareTX(void) if (gAlarmState == ALARM_STATE_OFF) #endif { + + gTxTimerCountdown_500ms = ((gEeprom.TX_TIMEOUT_TIMER + 1) * 5) * 2; + + /* if (gEeprom.TX_TIMEOUT_TIMER == 0) gTxTimerCountdown_500ms = 60; // 30 sec else if (gEeprom.TX_TIMEOUT_TIMER < (ARRAY_SIZE(gSubMenu_TOT) - 1)) gTxTimerCountdown_500ms = 120 * gEeprom.TX_TIMEOUT_TIMER; // minutes else gTxTimerCountdown_500ms = 120 * 15; // 15 minutes + */ #ifdef ENABLE_FEAT_F4HWN gTxTimerCountdownAlert_500ms = gTxTimerCountdown_500ms; diff --git a/settings.c b/settings.c index 74b6902..77cd2c0 100644 --- a/settings.c +++ b/settings.c @@ -45,7 +45,7 @@ void SETTINGS_InitEEPROM(void) EEPROM_ReadBuffer(0x0E70, Data, 8); gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST; gEeprom.SQUELCH_LEVEL = (Data[1] < 10) ? Data[1] : 1; - gEeprom.TX_TIMEOUT_TIMER = (Data[2] < 11) ? Data[2] : 1; + gEeprom.TX_TIMEOUT_TIMER = (Data[2] > 4 && Data[2] < 180) ? Data[2] : 11; #ifdef ENABLE_NOAA gEeprom.NOAA_AUTO_SCAN = (Data[3] < 2) ? Data[3] : false; #endif diff --git a/ui/menu.c b/ui/menu.c index 0b7fcf4..3b85c2f 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -197,6 +197,7 @@ const char gSubMenu_SAVE[][4] = "1:4" }; +/* const char gSubMenu_TOT[][7] = { "30 sec", @@ -211,6 +212,7 @@ const char gSubMenu_TOT[][7] = "9 min", "15 min" }; +*/ const char* const gSubMenu_RXMode[] = { @@ -791,7 +793,7 @@ void UI_DisplayMenu(void) break; case MENU_TOT: - strcpy(String, gSubMenu_TOT[gSubMenuSelection]); + sprintf(String, "%02dm:%02ds", (((gSubMenuSelection + 1) * 5) / 60), (((gSubMenuSelection + 1) * 5) % 60)); break; #ifdef ENABLE_VOICE From 4cd00a0a976a8a8032724457dd8eaebb690efc31 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Fri, 5 Apr 2024 06:28:51 +0200 Subject: [PATCH 15/20] Improve BackLt (35/63) --- app/action.c | 4 ++-- app/app.c | 2 +- app/menu.c | 2 +- driver/backlight.c | 7 ++----- helper/battery.c | 2 +- main.c | 2 +- settings.c | 2 +- ui/menu.c | 8 ++------ 8 files changed, 11 insertions(+), 18 deletions(-) diff --git a/app/action.c b/app/action.c index 1f6afcb..c91879b 100644 --- a/app/action.c +++ b/app/action.c @@ -504,7 +504,7 @@ void ACTION_BackLightOnDemand(void) if(gBackLight == false) { gBacklightTimeOriginal = gEeprom.BACKLIGHT_TIME; - gEeprom.BACKLIGHT_TIME = 17; + gEeprom.BACKLIGHT_TIME = 61; gBackLight = true; } else @@ -515,7 +515,7 @@ void ACTION_BackLightOnDemand(void) } else { - gEeprom.BACKLIGHT_TIME = 17; + gEeprom.BACKLIGHT_TIME = 61; } } diff --git a/app/app.c b/app/app.c index a23ca02..65d8a56 100644 --- a/app/app.c +++ b/app/app.c @@ -1483,7 +1483,7 @@ void APP_TimeSlice500ms(void) // don't turn off backlight if user is in backlight menu option && !(gScreenToDisplay == DISPLAY_MENU && (UI_MENU_GetCurrentMenuId() == MENU_ABR || UI_MENU_GetCurrentMenuId() == MENU_ABR_MAX)) && --gBacklightCountdown_500ms == 0 - && gEeprom.BACKLIGHT_TIME < 17 + && gEeprom.BACKLIGHT_TIME < 61 ) { BACKLIGHT_TurnOff(); } diff --git a/app/menu.c b/app/menu.c index 533ba32..de8eb1e 100644 --- a/app/menu.c +++ b/app/menu.c @@ -129,7 +129,7 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax) case MENU_ABR: //*pMin = 0; - *pMax = 17; + *pMax = 61; break; case MENU_ABR_MIN: diff --git a/driver/backlight.c b/driver/backlight.c index 79a093b..c072ef5 100644 --- a/driver/backlight.c +++ b/driver/backlight.c @@ -110,13 +110,10 @@ void BACKLIGHT_TurnOn(void) switch (gEeprom.BACKLIGHT_TIME) { default: - case 1 ... 11: // 5 sec * value + case 1 ... 60: // 5 sec * value gBacklightCountdown_500ms = 1 + (gEeprom.BACKLIGHT_TIME * 5) * 2; break; - case 12 ... 16: // 1 min $ value - gBacklightCountdown_500ms = 1 + ((gEeprom.BACKLIGHT_TIME - 11) * 60) * 2; - break; - case 17: // always on + case 61: // always on gBacklightCountdown_500ms = 0; break; } diff --git a/helper/battery.c b/helper/battery.c index f000a4a..c5ee465 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -219,7 +219,7 @@ void BATTERY_TimeSlice500ms(void) ST7565_HardwareReset(); - if (gEeprom.BACKLIGHT_TIME < 17) { + if (gEeprom.BACKLIGHT_TIME < 61) { BACKLIGHT_TurnOff(); } } diff --git a/main.c b/main.c index 5e71a79..90fc23b 100644 --- a/main.c +++ b/main.c @@ -151,7 +151,7 @@ void Main(void) { FUNCTION_Select(FUNCTION_POWER_SAVE); - if (gEeprom.BACKLIGHT_TIME < 17) // backlight is not set to be always on + if (gEeprom.BACKLIGHT_TIME < 61) // backlight is not set to be always on BACKLIGHT_TurnOff(); // turn the backlight OFF else BACKLIGHT_TurnOn(); // turn the backlight ON diff --git a/settings.c b/settings.c index 77cd2c0..5524f8e 100644 --- a/settings.c +++ b/settings.c @@ -67,7 +67,7 @@ void SETTINGS_InitEEPROM(void) gEeprom.CROSS_BAND_RX_TX = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF; gEeprom.BATTERY_SAVE = (Data[3] < 5) ? Data[3] : 4; gEeprom.DUAL_WATCH = (Data[4] < 3) ? Data[4] : DUAL_WATCH_CHAN_A; - gEeprom.BACKLIGHT_TIME = (Data[5] < 18) ? Data[5] : 3; + gEeprom.BACKLIGHT_TIME = (Data[5] < 62) ? Data[5] : 12; gEeprom.TAIL_TONE_ELIMINATION = (Data[6] < 2) ? Data[6] : false; gEeprom.VFO_OPEN = (Data[7] < 2) ? Data[7] : true; diff --git a/ui/menu.c b/ui/menu.c index 3b85c2f..c96b765 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -662,13 +662,9 @@ void UI_DisplayMenu(void) { sprintf(String, "%s", "OFF"); } - else if(gSubMenuSelection < 12) + else if(gSubMenuSelection < 61) { - sprintf(String, "%d sec", gSubMenuSelection * 5); - } - else if(gSubMenuSelection < 17) - { - sprintf(String, "%d min", gSubMenuSelection - 11); + sprintf(String, "%02dm:%02ds", (((gSubMenuSelection) * 5) / 60), (((gSubMenuSelection) * 5) % 60)); } else { From 6b41546bbe8f22f91ff3556c7286549330b68f52 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Fri, 5 Apr 2024 06:38:13 +0200 Subject: [PATCH 16/20] Clean code --- ui/menu.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/ui/menu.c b/ui/menu.c index c96b765..369427f 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -39,7 +39,7 @@ const t_menu_item MenuList[] = { -// text, voice ID, menu ID +// text, menu ID {"Step", MENU_STEP }, {"TxPwr", MENU_TXP }, // was "TXP" {"RxDCS", MENU_R_DCS }, // was "R_DCS" @@ -197,23 +197,6 @@ const char gSubMenu_SAVE[][4] = "1:4" }; -/* -const char gSubMenu_TOT[][7] = -{ - "30 sec", - "1 min", - "2 min", - "3 min", - "4 min", - "5 min", - "6 min", - "7 min", - "8 min", - "9 min", - "15 min" -}; -*/ - const char* const gSubMenu_RXMode[] = { "MAIN\nONLY", // TX and RX on main only From 58bdcfb92224e75709f64e35e16ac109437e7fb6 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Sun, 7 Apr 2024 19:08:29 +0200 Subject: [PATCH 17/20] Shift index --- ui/menu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/menu.c b/ui/menu.c index 369427f..191af19 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -518,10 +518,11 @@ void UI_DisplayMenu(void) // draw the menu index number/count #ifdef ENABLE_FEAT_F4HWN sprintf(String, "%02u/%u", 1 + gMenuCursor, gMenuListCount); + UI_PrintStringSmallNormal(String, 6, 0, 6); #else sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount); -#endif UI_PrintStringSmallNormal(String, 2, 0, 6); +#endif } else if (menu_index >= 0 && menu_index < (int)gMenuListCount) { // current menu item From 8b6abd95508a0150e250de937029bcf298dafecc Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Thu, 11 Apr 2024 03:01:40 +0200 Subject: [PATCH 18/20] Refactoring and save 4 bytes --- ui/welcome.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/ui/welcome.c b/ui/welcome.c index 3b98583..5e8d89b 100644 --- a/ui/welcome.c +++ b/ui/welcome.c @@ -68,35 +68,28 @@ void UI_DisplayWelcome(void) memset(WelcomeString0, 0, sizeof(WelcomeString0)); memset(WelcomeString1, 0, sizeof(WelcomeString1)); - if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE) - { - strcpy(WelcomeString0, "VOLTAGE"); - sprintf(WelcomeString1, "%u.%02uV %u%%", + sprintf(WelcomeString1, "%u.%02uV %u%%", gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100, BATTERY_VoltsToPercent(gBatteryVoltageAverage)); + + if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE) + { + strcpy(WelcomeString0, "VOLTAGE"); } -#ifdef ENABLE_FEAT_F4HWN - else if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_MESSAGE || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL) -#else - else -#endif + else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL) + { + EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16); + } + else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_MESSAGE) { EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16); EEPROM_ReadBuffer(0x0EC0, WelcomeString1, 16); -#ifdef ENABLE_FEAT_F4HWN - if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL) + if(strlen(WelcomeString1) == 0) { - sprintf(WelcomeString1, "%u.%02uV %u%%", - gBatteryVoltageAverage / 100, - gBatteryVoltageAverage % 100, - BATTERY_VoltsToPercent(gBatteryVoltageAverage)); - } - else if(strlen(WelcomeString1) == 0) { - UI_PrintString("BIENVENUE", 0, 127, 2, 10); + strcpy(WelcomeString1, "BIENVENUE"); } -#endif } UI_PrintString(WelcomeString0, 0, 127, 0, 10); From 0b0dac694dc54e0a998f5c4fbc7b32e69965a7bd Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Thu, 11 Apr 2024 18:58:25 +0200 Subject: [PATCH 19/20] Fix bug on MO if RX at startup --- main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/main.c b/main.c index 90fc23b..68de643 100644 --- a/main.c +++ b/main.c @@ -178,6 +178,7 @@ void Main(void) break; } } + RADIO_SetupRegisters(true); } #ifdef ENABLE_PWRON_PASSWORD From 0923f4fa3df0b6ab83a69a8c816ab9c6a59e97b0 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Thu, 11 Apr 2024 19:08:30 +0200 Subject: [PATCH 20/20] Fix for Windows users... --- compile-with-docker.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compile-with-docker.bat b/compile-with-docker.bat index e1c888b..8c3cf90 100644 --- a/compile-with-docker.bat +++ b/compile-with-docker.bat @@ -1,4 +1,4 @@ @echo off docker build -t uvk5 . -docker run --rm -v %CD%\compiled-firmware:/app/compiled-firmware uvk5 /bin/bash -c "cd /app && make clean && make && cp firmware* compiled-firmware/" +docker run --rm -v %CD%\compiled-firmware:/app/compiled-firmware uvk5 /bin/bash -c "cd /app && make clean && make && cp f4hwn* compiled-firmware/" pause \ No newline at end of file