diff --git a/Makefile b/Makefile index 3153b6d..86ae054 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,7 @@ ENABLE_WIDE_RX := 1 ENABLE_1250HZ_STEP := 1 ENABLE_TX_WHEN_AM := 0 ENABLE_F_CAL_MENU := 0 +ENABLE_TX_EVERYWHERE := 0 ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 ENABLE_BOOT_BEEPS := 0 ENABLE_SHOW_CHARGE_LEVEL := 0 @@ -300,6 +301,9 @@ endif ifeq ($(ENABLE_F_CAL_MENU),1) CFLAGS += -DENABLE_F_CAL_MENU endif +ifeq ($(ENABLE_TX_EVERYWHERE),1) + CFLAGS += -DENABLE_TX_EVERYWHERE +endif ifeq ($(ENABLE_CTCSS_TAIL_PHASE_SHIFT),1) CFLAGS += -DENABLE_CTCSS_TAIL_PHASE_SHIFT endif diff --git a/README.md b/README.md index 5df7bb0..485ab07 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though fron ENABLE_1250HZ_STEP := 1 enable smaller 1.25kHz frequency steps ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM ENABLE_F_CAL_MENU := 0 enable/disable the radios hidden frequency calibration menu +ENABLE_TX_EVERYWHERE := 0 '1' = allow TX everywhere EXCEPT airband (108~136) .. TX harmonic content will cause interference to other services, do so entirely at your own risk ! ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method ENABLE_BOOT_BEEPS := 0 gives user audio feedback on volume knob position at boot-up ENABLE_SHOW_CHARGE_LEVEL := 0 show the charge level when the radio is on charge diff --git a/app/menu.c b/app/menu.c index 9d444f4..0da7ce1 100644 --- a/app/menu.c +++ b/app/menu.c @@ -118,9 +118,9 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = ARRAY_SIZE(g_sub_menu_backlight) - 1; break; - case MENU_F_LOCK: + case MENU_FREQ_LOCK: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_f_lock) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_freq_lock) - 1; break; case MENU_MDF: @@ -791,7 +791,7 @@ void MENU_AcceptSetting(void) g_setting_350_tx_enable = g_sub_menu_selection; break; - case MENU_F_LOCK: + case MENU_FREQ_LOCK: g_setting_freq_lock = g_sub_menu_selection; break; @@ -1225,7 +1225,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_setting_350_tx_enable; break; - case MENU_F_LOCK: + case MENU_FREQ_LOCK: g_sub_menu_selection = g_setting_freq_lock; break; diff --git a/board.c b/board.c index 536197c..dcc17ae 100644 --- a/board.c +++ b/board.c @@ -723,7 +723,7 @@ void BOARD_EEPROM_load(void) // 0F40..0F47 EEPROM_ReadBuffer(0x0F40, Data, 8); - g_setting_freq_lock = (Data[0] < 6) ? Data[0] : F_LOCK_OFF; + g_setting_freq_lock = (Data[0] < 6) ? Data[0] : FREQ_LOCK_OFF; g_setting_350_tx_enable = (Data[1] < 2) ? Data[1] : false; // was true g_setting_killed = (Data[2] < 2) ? Data[2] : false; g_setting_200_tx_enable = (Data[3] < 2) ? Data[3] : false; diff --git a/firmware.bin b/firmware.bin index 1269404..92df78b 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index abb68d4..4d2827d 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/frequencies.c b/frequencies.c index 2756578..5c20cb9 100644 --- a/frequencies.c +++ b/frequencies.c @@ -134,59 +134,69 @@ int TX_freq_check(const uint32_t Frequency) { // return '0' if TX frequency is allowed // otherwise return '-1' - if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) - return -1; // not allowed outside this range + if (Frequency < BX4819_BAND1.lower || Frequency > BX4819_BAND2.upper) + return -1; // BX radio chip does not work out this range if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower) - return -1; // BX chip does not work in this range + return -1; // BX radio chip does not work in this range + + if (Frequency >= 10800000 && Frequency < 13600000) + return -1; // TX not allowed in the airband + + if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) + return -1; // TX not allowed outside this range switch (g_setting_freq_lock) { - case F_LOCK_OFF: - if (Frequency >= 13600000 && Frequency < 17400000) + case FREQ_LOCK_OFF: + #ifdef ENABLE_TX_EVERYWHERE return 0; - if (Frequency >= 17400000 && Frequency < 35000000) - if (g_setting_200_tx_enable) + #else + if (Frequency >= 13600000 && Frequency < 17400000) return 0; - if (Frequency >= 35000000 && Frequency < 40000000) - if (g_setting_350_tx_enable && g_setting_350_enable) - return 0; - if (Frequency >= 40000000 && Frequency < 47000000) - return 0; - if (Frequency >= 47000000 && Frequency <= 60000000) - if (g_setting_500_tx_enable) + if (Frequency >= 17400000 && Frequency < 35000000) + if (g_setting_200_tx_enable) + return 0; + if (Frequency >= 35000000 && Frequency < 40000000) + if (g_setting_350_tx_enable && g_setting_350_enable) + return 0; + if (Frequency >= 40000000 && Frequency < 47000000) return 0; + if (Frequency >= 47000000 && Frequency <= 60000000) + if (g_setting_500_tx_enable) + return 0; + #endif break; - case F_LOCK_FCC: + case FREQ_LOCK_FCC: if (Frequency >= 14400000 && Frequency < 14800000) return 0; if (Frequency >= 42000000 && Frequency < 45000000) return 0; break; - case F_LOCK_CE: + case FREQ_LOCK_CE: if (Frequency >= 14400000 && Frequency < 14600000) return 0; if (Frequency >= 43000000 && Frequency < 44000000) return 0; break; - case F_LOCK_GB: + case FREQ_LOCK_GB: if (Frequency >= 14400000 && Frequency < 14800000) return 0; if (Frequency >= 43000000 && Frequency < 44000000) return 0; break; - case F_LOCK_430: + case FREQ_LOCK_430: if (Frequency >= 13600000 && Frequency < 17400000) return 0; if (Frequency >= 40000000 && Frequency < 43000000) return 0; break; - case F_LOCK_438: + case FREQ_LOCK_438: if (Frequency >= 13600000 && Frequency < 17400000) return 0; if (Frequency >= 40000000 && Frequency < 43800000) diff --git a/settings.h b/settings.h index 3256a0a..c99af44 100644 --- a/settings.h +++ b/settings.h @@ -32,12 +32,12 @@ enum pwr_on_display_mode_e { typedef enum pwr_on_display_mode_e pwr_on_display_mode_t; enum { - F_LOCK_OFF = 0, - F_LOCK_FCC, - F_LOCK_CE, - F_LOCK_GB, - F_LOCK_430, - F_LOCK_438 + FREQ_LOCK_OFF = 0, + FREQ_LOCK_FCC, + FREQ_LOCK_CE, + FREQ_LOCK_GB, + FREQ_LOCK_430, + FREQ_LOCK_438 }; enum { @@ -353,7 +353,7 @@ typedef struct { uint8_t aes_key[16]; // 0x0F40 - uint8_t f_lock; + uint8_t freq_lock; uint8_t enable_tx_350; uint8_t killed; uint8_t enable_tx_200; diff --git a/ui/menu.c b/ui/menu.c index f7423f6..bfb4160 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -129,7 +129,7 @@ const t_menu_item g_menu_list[] = // hidden menu items from here on // enabled by pressing both the PTT and upper side button at power-on - {"F LOCK", VOICE_ID_INVALID, MENU_F_LOCK }, // country/area specific + {"F LOCK", VOICE_ID_INVALID, MENU_FREQ_LOCK }, // country/area specific {"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" @@ -281,7 +281,7 @@ const char g_sub_menu_RESET[2][4] = "ALL" }; -const char g_sub_menu_f_lock[6][8] = +const char g_sub_menu_freq_lock[6][8] = { "OFF", "FCC", @@ -1014,8 +1014,15 @@ void UI_DisplayMenu(void) strcpy(String, g_sub_menu_RESET[g_sub_menu_selection]); break; - case MENU_F_LOCK: - strcpy(String, g_sub_menu_f_lock[g_sub_menu_selection]); + case MENU_FREQ_LOCK: + #ifdef ENABLE_TX_EVERYWHERE + if (g_sub_menu_selection == FREQ_LOCK_OFF) + strcpy(String, " WARNING!\nTX\nUNLOCKED"); + else + strcpy(String, g_sub_menu_freq_lock[g_sub_menu_selection]); + #else + strcpy(String, g_sub_menu_freq_lock[g_sub_menu_selection]); + #endif break; #ifdef ENABLE_F_CAL_MENU diff --git a/ui/menu.h b/ui/menu.h index fed99c9..eda20c3 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -123,7 +123,7 @@ enum // ************************************ // items after here are normally hidden - MENU_F_LOCK, + MENU_FREQ_LOCK, MENU_200TX, MENU_350TX, MENU_500TX, @@ -165,7 +165,7 @@ extern const char g_sub_menu_PTT_ID[5][15]; extern const char g_sub_menu_pwr_on_msg[4][14]; extern const char g_sub_menu_roger_mode[3][16]; extern const char g_sub_menu_RESET[2][4]; -extern const char g_sub_menu_f_lock[6][8]; +extern const char g_sub_menu_freq_lock[6][8]; extern const char g_sub_menu_backlight[8][7]; extern const char g_sub_menu_rx_tx[4][6]; #ifdef ENABLE_AM_FIX_TEST1