diff --git a/app/aircopy.c b/app/aircopy.c index 1fb0f9a..1d6daf6 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -131,8 +131,7 @@ static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } gInputBoxIndex = 0; - - NUMBER_Get(gInputBox, &Frequency); + Frequency = StrToUL(INPUTBOX_GetAscii()) * 100; for (i = 0; i < ARRAY_SIZE(frequencyBandTable); i++) { diff --git a/app/fm.c b/app/fm.c index 2da0da0..eef6a7e 100644 --- a/app/fm.c +++ b/app/fm.c @@ -277,8 +277,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) uint32_t Frequency; gInputBoxIndex = 0; - NUMBER_Get(gInputBox, &Frequency); - Frequency /= 10000; + Frequency = StrToUL(INPUTBOX_GetAscii()); if (Frequency < gEeprom.FM_LowerLimit || gEeprom.FM_UpperLimit < Frequency) { diff --git a/app/main.c b/app/main.c index c1acbc1..4cd80fa 100644 --- a/app/main.c +++ b/app/main.c @@ -18,15 +18,19 @@ #include "app/action.h" #include "app/app.h" + #ifdef ENABLE_FMRADIO #include "app/fm.h" #endif + #include "app/generic.h" #include "app/main.h" #include "app/scanner.h" + #ifdef ENABLE_SPECTRUM #include "app/spectrum.h" #endif + #include "audio.h" #include "board.h" #include "driver/bk4819.h" @@ -37,9 +41,7 @@ #include "settings.h" #include "ui/inputbox.h" #include "ui/ui.h" -#ifdef ENABLE_SPECTRUM -// #include "app/spectrum.h" -#endif +#include void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting @@ -98,26 +100,31 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) break; case KEY_1: - if (!IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) - { + if (!IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) { gWasFKeyPressed = false; gUpdateStatus = true; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; return; } - Band = gTxVfo->Band + 1; - if (gSetting_350EN || Band != BAND5_350MHz) - { - if (Band > BAND7_470MHz) - Band = BAND1_50MHz; + if(gTxVfo->Band == 6 && gTxVfo->pRX->Frequency < 100000000) { + gTxVfo->pRX->Frequency = 100000000; + return; } - else - Band = BAND6_400MHz; - gTxVfo->Band = Band; + else { + Band = gTxVfo->Band + 1; + if (gSetting_350EN || Band != BAND5_350MHz) { + if (Band > BAND7_470MHz) + Band = BAND1_50MHz; + } + else + Band = BAND6_400MHz; - gEeprom.ScreenChannel[Vfo] = FREQ_CHANNEL_FIRST + Band; - gEeprom.FreqChannel[Vfo] = FREQ_CHANNEL_FIRST + Band; + gTxVfo->Band = Band; + + gEeprom.ScreenChannel[Vfo] = FREQ_CHANNEL_FIRST + Band; + gEeprom.FreqChannel[Vfo] = FREQ_CHANNEL_FIRST + Band; + } gRequestSaveVFO = true; gVfoConfigureMode = VFO_CONFIGURE_RELOAD; @@ -361,8 +368,8 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { // user is entering a frequency uint32_t Frequency; - - if (gInputBoxIndex < 6) + bool isGigaF = gTxVfo->pRX->Frequency >= 100000000; + if (gInputBoxIndex < 6 + isGigaF) { #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; @@ -372,8 +379,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } gInputBoxIndex = 0; - - NUMBER_Get(gInputBox, &Frequency); + Frequency = StrToUL(INPUTBOX_GetAscii()) * 100; // clamp the frequency entered to some valid value if (Frequency < frequencyBandTable[0].lower) diff --git a/app/menu.c b/app/menu.c index 826c709..f74c63d 100644 --- a/app/menu.c +++ b/app/menu.c @@ -1261,8 +1261,8 @@ static void MENU_Key_0_to_9(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif - - NUMBER_Get(gInputBox, &Frequency); + + Frequency = StrToUL(INPUTBOX_GetAscii()); gSubMenuSelection = FREQUENCY_FloorToStep(Frequency + 75, gTxVfo->StepFrequency, 0); gInputBoxIndex = 0; diff --git a/misc.c b/misc.c index 76b6a21..c6322c4 100644 --- a/misc.c +++ b/misc.c @@ -254,20 +254,7 @@ int16_t gCurrentRSSI[2] = {0, 0}; // now one per VFO uint8_t gIsLocked = 0xFF; -void NUMBER_Get(char *pDigits, uint32_t *pInteger) -{ - unsigned int i; - uint32_t Multiplier = 10000000; - uint32_t Value = 0; - for (i = 0; i < 8; i++) - { - if (pDigits[i] > 9) - break; - Value += pDigits[i] * Multiplier; - Multiplier /= 10U; - } - *pInteger = Value; -} + int32_t NUMBER_AddWithWraparound(int32_t Base, int32_t Add, int32_t LowerLimit, int32_t UpperLimit) { @@ -281,3 +268,15 @@ int32_t NUMBER_AddWithWraparound(int32_t Base, int32_t Add, int32_t LowerLimit, return Base; } + +unsigned long StrToUL(const char * str) +{ + unsigned long ul = 0; + for(uint8_t i = 0; i < strlen(str); i++){ + char c = str[i]; + if(c < '0' || c > '9') + break; + ul = ul * 10 + (uint8_t)(c-'0'); + } + return ul; +} \ No newline at end of file diff --git a/misc.h b/misc.h index 5bac68c..7c27991 100644 --- a/misc.h +++ b/misc.h @@ -324,8 +324,8 @@ extern int16_t gCurrentRSSI[2]; // now one per VFO extern uint8_t gIsLocked; extern volatile uint8_t boot_counter_10ms; -void NUMBER_Get(char *pDigits, uint32_t *pInteger); int32_t NUMBER_AddWithWraparound(int32_t Base, int32_t Add, int32_t LowerLimit, int32_t UpperLimit); +unsigned long StrToUL(const char * str); #endif diff --git a/ui/lock.c b/ui/lock.c index 1dca0a2..08183d1 100644 --- a/ui/lock.c +++ b/ui/lock.c @@ -102,10 +102,9 @@ void UI_DisplayLock(void) uint32_t Password; gInputBoxIndex = 0; + Password = StrToUL(INPUTBOX_GetAscii()); - NUMBER_Get(gInputBox, &Password); - - if ((gEeprom.POWER_ON_PASSWORD * 100) == Password) + if ((gEeprom.POWER_ON_PASSWORD) == Password) { AUDIO_PlayBeep(BEEP_1KHZ_60MS_OPTIONAL); return; diff --git a/ui/main.c b/ui/main.c index cd10028..f773956 100644 --- a/ui/main.c +++ b/ui/main.c @@ -433,6 +433,8 @@ void UI_DisplayMain(void) } #endif + uint32_t frequency = gEeprom.VfoInfo[vfo_num].pRX->Frequency; + if (state != VFO_STATE_NORMAL) { const char *state_list[] = {"", "BUSY", "BAT LOW", "TX DISABLE", "TIMEOUT", "ALARM", "VOLT HIGH"}; @@ -442,12 +444,27 @@ void UI_DisplayMain(void) else if (gInputBoxIndex > 0 && IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num]) && gEeprom.TX_VFO == vfo_num) { // user entering a frequency const char * ascii = INPUTBOX_GetAscii(); - sprintf(String, "%.3s.%.3s", ascii, ascii + 3); - UI_DisplayFrequency(String, 32, line, false); + bool isGigaF = frequency>=100000000; + sprintf(String, "%.*s.%.3s", 3 + isGigaF, ascii, ascii + 3 + isGigaF); +#ifdef ENABLE_BIG_FREQ + if(!isGigaF) { + // show the remaining 2 small frequency digits + UI_PrintStringSmall(String + 7, 113, 0, line + 1); + String[7] = 0; + // show the main large frequency digits + UI_DisplayFrequency(String, 32, line, false); + } + else +#endif + { + // show the frequency in the main font + UI_PrintString(String, 32, 0, line, 8); + } + + break; } else { - uint32_t frequency = gEeprom.VfoInfo[vfo_num].pRX->Frequency; if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting if (activeTxVFO == vfo_num)