diff --git a/Makefile b/Makefile index 3ab0672..5f923b9 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,6 @@ ENABLE_BYP_RAW_DEMODULATORS ?= 0 ENABLE_BLMIN_TMP_OFF ?= 0 ENABLE_SCAN_RANGES ?= 1 ENABLE_FEAT_F4HWN ?= 1 -ENABLE_FEAT_F4HWN_FIXED_PWR ?= 0 ENABLE_FEAT_F4HWN_SCREENSHOT ?= 0 ENABLE_FEAT_F4HWN_PMR ?= 1 @@ -402,9 +401,6 @@ 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 ifeq ($(ENABLE_FEAT_F4HWN_SCREENSHOT),1) CFLAGS += -DENABLE_FEAT_F4HWN_SCREENSHOT endif diff --git a/app/action.c b/app/action.c index 41e855c..021c72f 100644 --- a/app/action.c +++ b/app/action.c @@ -121,7 +121,7 @@ static_assert(ARRAY_SIZE(action_opt_table) == ACTION_OPT_LEN); void ACTION_Power(void) { if (++gTxVfo->OUTPUT_POWER > OUTPUT_POWER_HIGH) - gTxVfo->OUTPUT_POWER = OUTPUT_POWER_LOW; + gTxVfo->OUTPUT_POWER = OUTPUT_POWER_LOW1; gRequestSaveChannel = 1; diff --git a/app/menu.c b/app/menu.c index 8916f7d..6c65cf2 100644 --- a/app/menu.c +++ b/app/menu.c @@ -374,9 +374,8 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax) break; #ifdef ENABLE_FEAT_F4HWN - case MENU_SET_LOW: - //*pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SET_LOW) - 1; + case MENU_SET_PWR: + *pMax = ARRAY_SIZE(gSubMenu_SET_PWR) - 1; break; case MENU_SET_PTT: //*pMin = 0; @@ -866,8 +865,8 @@ void MENU_AcceptSetting(void) break; #ifdef ENABLE_FEAT_F4HWN - case MENU_SET_LOW: - gSetting_set_low = gSubMenuSelection; + case MENU_SET_PWR: + gSetting_set_pwr = gSubMenuSelection; gRequestSaveChannel = 1; break; case MENU_SET_PTT: @@ -1285,8 +1284,8 @@ void MENU_ShowCurrentSetting(void) } #ifdef ENABLE_FEAT_F4HWN - case MENU_SET_LOW: - gSubMenuSelection = gSetting_set_low; + case MENU_SET_PWR: + gSubMenuSelection = gSetting_set_pwr; break; case MENU_SET_PTT: gSubMenuSelection = gSetting_set_ptt_session; diff --git a/main.c b/main.c index efded8d..cd9760b 100644 --- a/main.c +++ b/main.c @@ -128,9 +128,9 @@ void Main(void) gEeprom.KEY_LOCK = 0; SETTINGS_SaveSettings(); #ifndef ENABLE_VOX - gMenuCursor = 63; // move to hidden section, fix me if change... !!! + gMenuCursor = 62; // move to hidden section, fix me if change... !!! #else - gMenuCursor = 64; // move to hidden section, fix me if change... !!! + gMenuCursor = 63; // move to hidden section, fix me if change... !!! #endif #endif } diff --git a/misc.c b/misc.c index 70c151a..785dfc9 100644 --- a/misc.c +++ b/misc.c @@ -105,7 +105,7 @@ enum BacklightOnRxTx_t gSetting_backlight_on_tx_rx; #endif #ifdef ENABLE_FEAT_F4HWN - uint8_t gSetting_set_low = 1; + uint8_t gSetting_set_pwr = 1; bool gSetting_set_ptt = 0; uint8_t gSetting_set_tot = 0; uint8_t gSetting_set_ctr = 11; diff --git a/misc.h b/misc.h index eab114a..14c57fd 100644 --- a/misc.h +++ b/misc.h @@ -157,7 +157,7 @@ extern enum BacklightOnRxTx_t gSetting_backlight_on_tx_rx; #endif #ifdef ENABLE_FEAT_F4HWN - extern uint8_t gSetting_set_low; + extern uint8_t gSetting_set_pwr; extern bool gSetting_set_ptt; extern uint8_t gSetting_set_tot; extern uint8_t gSetting_set_ctr; diff --git a/radio.c b/radio.c index 2b8315a..5a32ce1 100644 --- a/radio.c +++ b/radio.c @@ -140,7 +140,7 @@ void RADIO_InitInfo(VFO_Info_t *pInfo, const uint8_t ChannelSave, const uint32_t pInfo->StepFrequency = gStepFrequencyTable[pInfo->STEP_SETTING]; pInfo->CHANNEL_SAVE = ChannelSave; pInfo->FrequencyReverse = false; - pInfo->OUTPUT_POWER = OUTPUT_POWER_LOW; + pInfo->OUTPUT_POWER = OUTPUT_POWER_LOW1; pInfo->freq_config_RX.Frequency = Frequency; pInfo->freq_config_TX.Frequency = Frequency; pInfo->pRX = &pInfo->freq_config_RX; @@ -329,7 +329,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure { pVfo->FrequencyReverse = false; pVfo->CHANNEL_BANDWIDTH = BK4819_FILTER_BW_WIDE; - pVfo->OUTPUT_POWER = OUTPUT_POWER_LOW; + pVfo->OUTPUT_POWER = OUTPUT_POWER_LOW1; pVfo->BUSY_CHANNEL_LOCK = false; } else @@ -337,8 +337,8 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure const uint8_t d4 = data[4]; pVfo->FrequencyReverse = !!((d4 >> 0) & 1u); pVfo->CHANNEL_BANDWIDTH = !!((d4 >> 1) & 1u); - pVfo->OUTPUT_POWER = ((d4 >> 2) & 3u); - pVfo->BUSY_CHANNEL_LOCK = !!((d4 >> 4) & 1u); + pVfo->OUTPUT_POWER = ((d4 >> 2) & 7u); + pVfo->BUSY_CHANNEL_LOCK = !!((d4 >> 5) & 1u); } if (data[5] == 0xFF) @@ -508,114 +508,112 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) // 1F30 32 32 32 64 64 64 8c 8c 8c ff ff ff ff ff ff ff 470 MHz uint8_t Txp[3]; - EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->OUTPUT_POWER * 3), Txp, 3); + uint8_t Op = 0; + + if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID) + Op = 1; + else if(pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH) + Op = 2; + + EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (Op * 3), Txp, 3); #ifdef ENABLE_FEAT_F4HWN - #ifdef ENABLE_FEAT_F4HWN_FIXED_PWR - // make low and mid even lower - // and fix values - // because of toxic fucking closed firmwares + // make low and mid even lower + // and use calibration values + // be aware with toxic fucking closed firmwares - uint8_t shift[] = {0, 0, 0, 0, 0, 0, 0}; + uint8_t shift[] = {0, 0, 0, 0, 0}; + uint8_t currentPower = pInfo->OUTPUT_POWER; - if(Band == 5) + if(currentPower == OUTPUT_POWER_USER) + { + currentPower = gSetting_set_pwr; + } + else + { + currentPower--; + } + + /* + if(Band == 5) // UHF + { + shift[0] = 0; + shift[1] = 0; + shift[2] = 0; + shift[3] = 0; + shift[4] = 0; + } + */ + + for(uint8_t p = 0; p < 3; p++) + { + switch (currentPower) { - shift[0] = 2; - shift[1] = 1; - shift[2] = 2; - shift[3] = 2; - shift[4] = 2; - shift[5] = 2; - shift[6] = 2; + case 0: + Txp[p] = (Txp[p] * 4) / 25 + shift[pInfo->OUTPUT_POWER]; + break; + case 1: + Txp[p] = (Txp[p] * 4) / 19 + shift[pInfo->OUTPUT_POWER]; + break; + case 2: + Txp[p] = (Txp[p] * 4) / 13 + shift[pInfo->OUTPUT_POWER]; + break; + case 3: + Txp[p] = (Txp[p] * 4) / 10 + shift[pInfo->OUTPUT_POWER]; + break; + case 4: + Txp[p] = (Txp[p] * 4) / 7 + shift[pInfo->OUTPUT_POWER]; + break; + case 5: + Txp[p] = (Txp[p] * 3) / 4; + break; + case 6: + Txp[p] = Txp[p] + 30; + break; } + } + /* + // make low and mid even lower + // and use calibration values + // be aware with toxic fucking closed firmwares - 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; - } + uint8_t shift[] = {0, 0, 0, 0, 0}; - } - } - 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 - - uint8_t shift[] = {0, 0, 0, 0, 0}; - - /* - if(Band == 5) // UHF + if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) { + for(uint8_t p = 0; p < 3; p++ ) { - 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; - } - + 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 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; + } + */ #else #ifdef ENABLE_REDUCE_LOW_MID_TX_POWER // make low and mid even lower diff --git a/settings.c b/settings.c index 8173698..3e945ae 100644 --- a/settings.c +++ b/settings.c @@ -317,7 +317,7 @@ void SETTINGS_InitEEPROM(void) #ifdef ENABLE_FEAT_F4HWN // 1FF0..0x1FF7 EEPROM_ReadBuffer(0x1FF0, Data, 8); - gSetting_set_low = (((Data[7] & 0xF0) >> 4) < 5) ? ((Data[7] & 0xF0) >> 4) : 0; + gSetting_set_pwr = (((Data[7] & 0xF0) >> 4) < 7) ? ((Data[7] & 0xF0) >> 4) : 0; gSetting_set_ptt = (((Data[7] & 0x0F)) < 2) ? ((Data[7] & 0x0F)) : 0; gSetting_set_tot = (((Data[6] & 0xF0) >> 4) < 4) ? ((Data[6] & 0xF0) >> 4) : 0; @@ -707,7 +707,7 @@ void SETTINGS_SaveSettings(void) State[5] = ((tmp << 4) | (gSetting_set_ctr & 0x0F)); State[6] = ((gSetting_set_tot << 4) | (gSetting_set_eot & 0x0F)); - State[7] = ((gSetting_set_low << 4) | (gSetting_set_ptt & 0x0F)); + State[7] = ((gSetting_set_pwr << 4) | (gSetting_set_ptt & 0x0F)); gEeprom.KEY_LOCK_PTT = gSetting_set_lck; @@ -744,7 +744,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, State._8[2] = (pVFO->freq_config_TX.CodeType << 4) | pVFO->freq_config_RX.CodeType; State._8[3] = (pVFO->Modulation << 4) | pVFO->TX_OFFSET_FREQUENCY_DIRECTION; State._8[4] = 0 - | (pVFO->BUSY_CHANNEL_LOCK << 4) + | (pVFO->BUSY_CHANNEL_LOCK << 5) | (pVFO->OUTPUT_POWER << 2) | (pVFO->CHANNEL_BANDWIDTH << 1) | (pVFO->FrequencyReverse << 0); diff --git a/settings.h b/settings.h index acb7fb9..11c002c 100644 --- a/settings.h +++ b/settings.h @@ -82,7 +82,12 @@ enum { }; enum { - OUTPUT_POWER_LOW = 0, + OUTPUT_POWER_USER = 0, + OUTPUT_POWER_LOW1, + OUTPUT_POWER_LOW2, + OUTPUT_POWER_LOW3, + OUTPUT_POWER_LOW4, + OUTPUT_POWER_LOW5, OUTPUT_POWER_MID, OUTPUT_POWER_HIGH }; diff --git a/ui/main.c b/ui/main.c index 7482773..ce7d14d 100644 --- a/ui/main.c +++ b/ui/main.c @@ -1072,9 +1072,13 @@ void UI_DisplayMain(void) { // TX power level switch (gRxVfo->OUTPUT_POWER) { - case OUTPUT_POWER_LOW: Level = 2; break; - case OUTPUT_POWER_MID: Level = 4; break; - case OUTPUT_POWER_HIGH: Level = 6; break; + case OUTPUT_POWER_LOW1: Level = 2; break; + case OUTPUT_POWER_LOW2: Level = 2; break; + case OUTPUT_POWER_LOW3: Level = 2; break; + case OUTPUT_POWER_LOW4: Level = 2; break; + case OUTPUT_POWER_LOW5: Level = 2; break; + case OUTPUT_POWER_MID: Level = 4; break; + case OUTPUT_POWER_HIGH: Level = 6; break; } } else @@ -1190,36 +1194,22 @@ void UI_DisplayMain(void) if (state == VFO_STATE_NORMAL || state == VFO_STATE_ALARM) { // show the TX power - int i = vfoInfo->OUTPUT_POWER % 3; + int i = vfoInfo->OUTPUT_POWER % 8; #if ENABLE_FEAT_F4HWN if (isMainOnly(true)) { - const char pwr_short[][2] = {"L","M","H"}; - if(i == 0) - { - sprintf(String, "%s%d", pwr_short[i], gSetting_set_low + 1); - } - else - { - sprintf(String, "%s", pwr_short[i]); - } + const char pwr_short[][3] = {"U", "L1", "L2", "L3", "L4", "L5", "M", "H"}; + sprintf(String, "%s", pwr_short[i]); UI_PrintStringSmallNormal(String, LCD_WIDTH + 44, 0, line + 1); } else { - const char pwr_long[][5] = {"LOW", "MID", "HIGH"}; - if(i == 0) - { - sprintf(String, "%s%d", pwr_long[i], gSetting_set_low + 1); - } - else - { - sprintf(String, "%s", pwr_long[i]); - } + const char pwr_long[][5] = {"USER", "LOW1", "LOW2", "LOW3", "LOW4", "LOW5", "MID", "HIGH"}; + sprintf(String, "%s", pwr_long[i]); GUI_DisplaySmallest(String, 24, line == 0 ? 17 : 49, false, true); } #else - const char pwr_list[][2] = {"L","M","H"}; + const char pwr_list[][2] = {"U", "L","M","H"}; UI_PrintStringSmallNormal(pwr_list[i], LCD_WIDTH + 46, 0, line + 1); #endif } diff --git a/ui/menu.c b/ui/menu.c index 0d1f179..cabc34d 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -134,7 +134,7 @@ const t_menu_item MenuList[] = {"RxMode", MENU_TDR }, {"Sql", MENU_SQL }, #ifdef ENABLE_FEAT_F4HWN - {"SetLow", MENU_SET_LOW }, + {"SetPwr", MENU_SET_PWR }, {"SetPtt", MENU_SET_PTT }, {"SetTot", MENU_SET_TOT }, {"SetEot", MENU_SET_EOT }, @@ -166,9 +166,14 @@ const t_menu_item MenuList[] = const uint8_t FIRST_HIDDEN_MENU_ITEM = MENU_F_LOCK; -const char gSubMenu_TXP[][5] = +const char gSubMenu_TXP[][6] = { - "LOW", + "USER", + "LOW 1", + "LOW 2", + "LOW 3", + "LOW 4", + "LOW 5", "MID", "HIGH" }; @@ -344,13 +349,15 @@ const char gSubMenu_SCRAMBLER[][7] = #endif #ifdef ENABLE_FEAT_F4HWN - const char gSubMenu_SET_LOW[][7] = + const char gSubMenu_SET_PWR[][7] = { "< 20mW", "125mW", "250mW", "500mW", - "1W" + "1W", + "2W", + "5W" }; const char gSubMenu_SET_PTT[][8] = @@ -944,10 +951,10 @@ void UI_DisplayMenu(void) break; #ifdef ENABLE_FEAT_F4HWN - case MENU_SET_LOW: - strcpy(String, gSubMenu_SET_LOW[gSubMenuSelection]); + case MENU_SET_PWR: + strcpy(String, gSubMenu_SET_PWR[gSubMenuSelection]); break; - + case MENU_SET_PTT: strcpy(String, gSubMenu_SET_PTT[gSubMenuSelection]); break; diff --git a/ui/menu.h b/ui/menu.h index 5559dcb..89114fc 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -123,7 +123,7 @@ enum MENU_F_CALI, // reference xtal calibration #endif #ifdef ENABLE_FEAT_F4HWN - MENU_SET_LOW, + MENU_SET_PWR, MENU_SET_PTT, MENU_SET_TOT, MENU_SET_EOT, @@ -145,7 +145,7 @@ enum extern const uint8_t FIRST_HIDDEN_MENU_ITEM; extern const t_menu_item MenuList[]; -extern const char gSubMenu_TXP[3][5]; +extern const char gSubMenu_TXP[8][6]; extern const char gSubMenu_SFT_D[3][4]; extern const char gSubMenu_W_N[2][7]; extern const char gSubMenu_OFF_ON[2][4]; @@ -166,7 +166,7 @@ extern const char gSubMenu_D_RSP[4][11]; #endif #ifdef ENABLE_FEAT_F4HWN - extern const char gSubMenu_SET_LOW[5][7]; + extern const char gSubMenu_SET_PWR[7][7]; extern const char gSubMenu_SET_PTT[2][8]; extern const char gSubMenu_SET_TOT[4][7]; extern const char gSubMenu_SET_LCK[2][9];