From 4dfa88277050822ee832c4f23a0b786b5b7c4203 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Tue, 12 Sep 2023 15:31:37 +0100 Subject: [PATCH] Display tidy ups --- app/main.c | 10 +-- bitmaps.c | 13 +++- bitmaps.h | 2 +- firmware | Bin 172924 -> 172892 bytes firmware.bin | Bin 56824 -> 56664 bytes firmware.packed.bin | Bin 56842 -> 56682 bytes ui/aircopy.c | 4 +- ui/fmradio.c | 6 +- ui/helper.c | 8 +- ui/helper.h | 4 +- ui/lock.c | 4 +- ui/main.c | 183 ++++++++++++++++++++++---------------------- ui/menu.c | 38 ++++----- ui/scanner.c | 7 +- ui/welcome.c | 7 +- 15 files changed, 145 insertions(+), 141 deletions(-) diff --git a/app/main.c b/app/main.c index d255572..8630fd0 100644 --- a/app/main.c +++ b/app/main.c @@ -99,10 +99,9 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) NUMBER_Get(gInputBox, &Frequency); - if (gSetting_350EN || (4999990 < (Frequency - 35000000))) + if (gSetting_350EN || Frequency < 35000000 || Frequency >= 40000000) { unsigned int i; - for (i = 0; i < 7; i++) { if (Frequency <= gUpperLimitFrequencyBandTable[i] && (gLowerLimitFrequencyBandTable[i] <= Frequency)) @@ -110,6 +109,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) #ifndef DISABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif + if (gTxVfo->Band != i) { gTxVfo->Band = i; @@ -117,15 +117,13 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gEeprom.FreqChannel[Vfo] = i + FREQ_CHANNEL_FIRST; SETTINGS_SaveVfoIndices(); + RADIO_ConfigureChannel(Vfo, 2); } Frequency += 75; - gTxVfo->ConfigRX.Frequency = FREQUENCY_FloorToStep( - Frequency, - gTxVfo->StepFrequency, - gLowerLimitFrequencyBandTable[gTxVfo->Band]); + gTxVfo->ConfigRX.Frequency = FREQUENCY_FloorToStep(Frequency, gTxVfo->StepFrequency, gLowerLimitFrequencyBandTable[gTxVfo->Band]); gRequestSaveChannel = 1; return; diff --git a/bitmaps.c b/bitmaps.c index e0783d9..a40c4dd 100644 --- a/bitmaps.c +++ b/bitmaps.c @@ -408,7 +408,7 @@ const uint8_t BITMAP_M[] = 0b01111111 }; -const uint8_t BITMAP_F[] = +const uint8_t BITMAP_FB[] = { 0b00000000, 0b01111111, @@ -417,7 +417,16 @@ const uint8_t BITMAP_F[] = 0b00001001, 0b00001001, 0b00001001, - 0b00000001 + 0b00000001, + + 0b00000000, + 0b01111111, + 0b01001001, + 0b01001001, + 0b01001001, + 0b01001001, + 0b01001001, + 0b00110110 }; const uint8_t BITMAP_ReverseMode[] = diff --git a/bitmaps.h b/bitmaps.h index 5695786..7fa284a 100644 --- a/bitmaps.h +++ b/bitmaps.h @@ -47,7 +47,7 @@ extern const uint8_t BITMAP_TX[16]; extern const uint8_t BITMAP_RX[16]; extern const uint8_t BITMAP_M[8]; -extern const uint8_t BITMAP_F[8]; +extern const uint8_t BITMAP_FB[16]; extern const uint8_t BITMAP_ReverseMode[8]; diff --git a/firmware b/firmware index 7763c96778eb31bf05b52f89503518398139c1da..3d80b94b682f89c05a0fb66fa20d7f0ae393f445 100644 GIT binary patch delta 15189 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 W_pW@js!C@-vzF^-yDV)Q)&Bt~kigCW diff --git a/firmware.packed.bin b/firmware.packed.bin index 26effc7b6d89576695cf3b2b0c88ef5c026a2f07..664c1194f8df2bbbef2d2a7b2f3c4111fe7ea22a 100644 GIT binary patch delta 14766 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
  • A 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 z

    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 H7i0b(3uI2p diff --git a/ui/aircopy.c b/ui/aircopy.c index b584f52..85ba8ab 100644 --- a/ui/aircopy.c +++ b/ui/aircopy.c @@ -40,7 +40,7 @@ void UI_DisplayAircopy(void) strcpy(String, "AIR COPY"); else strcpy(String, "AIR COPY(CMP)"); - UI_PrintString(String, 2, 127, 0, 8, true); + UI_PrintString(String, 2, 127, 0, 8); if (gInputBoxIndex == 0) { @@ -57,7 +57,7 @@ void UI_DisplayAircopy(void) else if (gAirCopyIsSendMode == 1) sprintf(String, "SND:%d", gAirCopyBlockNumber); - UI_PrintString(String, 2, 127, 4, 8, true); + UI_PrintString(String, 2, 127, 4, 8); ST7565_BlitFullScreen(); } diff --git a/ui/fmradio.c b/ui/fmradio.c index 851a010..f637cd5 100644 --- a/ui/fmradio.c +++ b/ui/fmradio.c @@ -35,7 +35,7 @@ void UI_DisplayFM(void) memset(String, 0, sizeof(String)); strcpy(String, "FM"); - UI_PrintString(String, 0, 127, 0, 12, true); + UI_PrintString(String, 0, 127, 0, 12); memset(String, 0, sizeof(String)); if (gAskToSave) { @@ -66,7 +66,7 @@ void UI_DisplayFM(void) } } - UI_PrintString(String, 0, 127, 2, 10, true); + UI_PrintString(String, 0, 127, 2, 10); memset(String, 0, sizeof(String)); if (gAskToSave || (gEeprom.FM_IsMrMode && gInputBoxIndex)) { @@ -84,7 +84,7 @@ void UI_DisplayFM(void) sprintf(String, "CH-%02d", gEeprom.FM_SelectedChannel + 1); } - UI_PrintString(String, 0, 127, 4, 10, true); + UI_PrintString(String, 0, 127, 4, 10); ST7565_BlitFullScreen(); } diff --git a/ui/helper.c b/ui/helper.c index 4d7ab48..6cc64f3 100644 --- a/ui/helper.c +++ b/ui/helper.c @@ -62,12 +62,12 @@ void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uin sprintf(pString, "%03d", ChannelNumber + 1); } -void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width, bool bCentered) +void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width) { size_t i; size_t Length = strlen(pString); - if (bCentered) + if (End > Start) Start += (((End - Start) - (Length * Width)) + 1) / 2; for (i = 0; i < Length; i++) @@ -82,12 +82,12 @@ void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Lin } } -void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, bool bCentered) +void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line) { const size_t Length = strlen(pString); size_t i; - if (bCentered) + if (End > Start) Start += (((End - Start) - (Length * 8)) + 1) / 2; #if 1 diff --git a/ui/helper.h b/ui/helper.h index 13a0b9f..dbd4353 100644 --- a/ui/helper.h +++ b/ui/helper.h @@ -22,8 +22,8 @@ void UI_GenerateChannelString(char *pString, const uint8_t Channel); void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uint8_t ChannelNumber); -void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width, bool bCentered); -void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, bool bCentered); +void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width); +void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line); void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero, bool bFlag); void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero); void UI_DisplaySmallDigits(uint8_t Size, const char *pString, uint8_t X, uint8_t Y); diff --git a/ui/lock.c b/ui/lock.c index 4856f69..8b0f27a 100644 --- a/ui/lock.c +++ b/ui/lock.c @@ -36,11 +36,11 @@ static void Render(void) memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); strcpy(String, "LOCK"); - UI_PrintString(String, 0, 127, 1, 10, true); + UI_PrintString(String, 0, 127, 1, 10); for (i = 0; i < 6; i++) String[i] = (gInputBox[i] == 10) ? '-' : '*'; String[6] = 0; - UI_PrintString(String, 0, 127, 3, 12, true); + UI_PrintString(String, 0, 127, 3, 12); ST7565_BlitStatusLine(); ST7565_BlitFullScreen(); diff --git a/ui/main.c b/ui/main.c index d0a7d80..1d86942 100644 --- a/ui/main.c +++ b/ui/main.c @@ -30,15 +30,16 @@ void UI_DisplayMain(void) { - char String[16]; - unsigned int vfo_num; + const unsigned int display_width = 128; + char String[16]; + unsigned int vfo_num; memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); if (gEeprom.KEY_LOCK && gKeypadLocked) { - UI_PrintString("Long Press #", 0, 127, 1, 8, true); - UI_PrintString("To Unlock", 0, 127, 3, 8, true); + UI_PrintString("Long press #", 0, display_width - 1, 1, 8); + UI_PrintString("to unlock", 0, display_width - 1, 3, 8); ST7565_BlitFullScreen(); return; } @@ -51,18 +52,17 @@ void UI_DisplayMain(void) for (vfo_num = 0; vfo_num < 2; vfo_num++) { - uint8_t Channel = gEeprom.TX_CHANNEL; - bool bIsSameVfo = !!(Channel == vfo_num); - uint8_t Line = (vfo_num == 0) ? 0 : 4; - uint8_t *pLine0 = gFrameBuffer[Line + 0]; - uint8_t *pLine1 = gFrameBuffer[Line + 1]; - uint32_t frequency_Hz = 0; + uint8_t Channel = gEeprom.TX_CHANNEL; + bool bIsSameVfo = !!(Channel == vfo_num); + uint8_t Line = (vfo_num == 0) ? 0 : 4; + uint8_t *pLine0 = gFrameBuffer[Line + 0]; + uint8_t *pLine1 = gFrameBuffer[Line + 1]; if (single_vfo) - { // we're in single VFO mode + { // we're in single VFO mode - screen is dedicated to just one VFO if (!bIsSameVfo) - continue; // skip the unused vfo .. screen is dedicated to just a single VFO + continue; // skip the unused vfo //Line = 1; //pLine0 = gFrameBuffer[Line + 0]; @@ -93,7 +93,7 @@ void UI_DisplayMain(void) } else sprintf(String, ">%s", gDTMF_InputBox); - UI_PrintString(String, 2, 127, vfo_num * 3, 8, false); + UI_PrintString(String, 2, 0, vfo_num * 3, 8); memset(String, 0, sizeof(String)); if (!gDTMF_InputMode) @@ -108,7 +108,7 @@ void UI_DisplayMain(void) if (gDTMF_IsTx) sprintf(String, ">%s", gDTMF_String); } - UI_PrintString(String, 2, 127, 2 + (vfo_num * 3), 8, false); + UI_PrintString(String, 2, 0, 2 + (vfo_num * 3), 8); continue; } @@ -116,14 +116,16 @@ void UI_DisplayMain(void) // highlight the selected/used VFO with a marker if (!single_vfo && bIsSameVfo) memcpy(pLine0 + 2, BITMAP_VFO_Default, sizeof(BITMAP_VFO_Default)); + //else + // memcpy(pLine0 + 2, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); } else if (!single_vfo) { // highlight the selected/used VFO with a marker if (bIsSameVfo) memcpy(pLine0 + 2, BITMAP_VFO_Default, sizeof(BITMAP_VFO_Default)); - //else - //memcpy(pLine0 + 2, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); + else + memcpy(pLine0 + 2, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); } uint32_t SomeValue = 0; @@ -148,7 +150,7 @@ void UI_DisplayMain(void) } } else - { // show the RX symbol + { // receiving .. show the RX symbol SomeValue = 2; if ((gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR) && gEeprom.RX_CHANNEL == vfo_num) memcpy(pLine0 + 14, BITMAP_RX, sizeof(BITMAP_RX)); @@ -157,29 +159,32 @@ void UI_DisplayMain(void) if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) { // channel mode - // show the memory symbol - memcpy(pLine1 + 2, BITMAP_M, sizeof(BITMAP_M)); + const unsigned int x = 2; + + // show the memory channel symbol + memcpy(pLine1 + x, BITMAP_M, sizeof(BITMAP_M)); // show the memory channel number if (gInputBoxIndex == 0 || gEeprom.TX_CHANNEL != vfo_num) NUMBER_ToDigits(gEeprom.ScreenChannel[vfo_num] + 1, String); else memcpy(String + 5, gInputBox, 3); - UI_DisplaySmallDigits(3, String + 5, 10, Line + 1); + UI_DisplaySmallDigits(3, String + 5, x + sizeof(BITMAP_M), Line + 1); } else if (IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num])) { + const unsigned int x = 2; // was 14 // show the frequency band number char c; - memcpy(pLine1 + 14, BITMAP_F, sizeof(BITMAP_F)); + memcpy(pLine1 + x, BITMAP_FB, sizeof(BITMAP_FB)); c = (gEeprom.ScreenChannel[vfo_num] - FREQ_CHANNEL_FIRST) + 1; - UI_DisplaySmallDigits(1, &c, 22, Line + 1); + UI_DisplaySmallDigits(1, &c, x + sizeof(BITMAP_FB), Line + 1); } else { - // show the 'N' narrow band symbol - memcpy(pLine1 + 7, BITMAP_NarrowBand, sizeof(BITMAP_NarrowBand)); + // show the 'N' narrow band symbol - why do we do that here ? + //memcpy(pLine1 + 7, BITMAP_NarrowBand, sizeof(BITMAP_NarrowBand)); if (gInputBoxIndex == 0 || gEeprom.TX_CHANNEL != vfo_num) { @@ -193,6 +198,8 @@ void UI_DisplayMain(void) UI_DisplaySmallDigits(2, String + 6, 15, Line + 1); } + // ************ + uint8_t State = VfoState[vfo_num]; #ifndef DISABLE_ALARM @@ -206,12 +213,14 @@ void UI_DisplayMain(void) if (State != VFO_STATE_NORMAL) { - uint8_t Width = 10; + //uint8_t Width = 10; memset(String, 0, sizeof(String)); switch (State) { + //case VFO_STATE_NORMAL: + // break; case VFO_STATE_BUSY: strcpy(String, "BUSY"); //Width = 15; @@ -230,15 +239,14 @@ void UI_DisplayMain(void) break; case VFO_STATE_VOLTAGE_HIGH: sprintf(String, "VOLT HIGH"); - Width = 8; + //Width = 8; break; } #if 0 - UI_PrintString(String, 31, 111, Line, Width, true); + UI_PrintString(String, 31, 111, Line, Width); // centered text #else - (void)Width; - UI_PrintString(String, 31, 111, Line, 8, false); + UI_PrintString(String, 34, 0, Line, 8); // left aligned text #endif } else @@ -250,17 +258,17 @@ void UI_DisplayMain(void) } else { - if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { // channel mode# - - frequency_Hz = gEeprom.VfoInfo[vfo_num].pRX->Frequency; - if (gCurrentFunction == FUNCTION_TRANSMIT) - { // transmitting - Channel = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_CHANNEL : gEeprom.TX_CHANNEL; - if (Channel == vfo_num) - frequency_Hz = gEeprom.VfoInfo[vfo_num].pTX->Frequency; - } + uint32_t frequency_Hz = gEeprom.VfoInfo[vfo_num].pRX->Frequency; + if (gCurrentFunction == FUNCTION_TRANSMIT) + { // transmitting + Channel = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_CHANNEL : gEeprom.TX_CHANNEL; + if (Channel == vfo_num) + frequency_Hz = gEeprom.VfoInfo[vfo_num].pTX->Frequency; + } + if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) + { // channel mode + { // show the scanlist symbols const uint8_t Attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; if (Attributes & MR_CH_SCANLIST1) @@ -281,15 +289,13 @@ void UI_DisplayMain(void) #else // show the frequency in the main font sprintf(String, "%9.5f", frequency_Hz * 0.00001); - UI_PrintString(String, 31, 112, Line, 8, true); + UI_PrintString(String, 31, 112, Line, 8); #endif - - frequency_Hz = 0; break; case MDF_CHANNEL: // show the channel number sprintf(String, "CH-%03d", gEeprom.ScreenChannel[vfo_num] + 1); - UI_PrintString(String, 31, 112, Line, 8, true); + UI_PrintString(String, 31, 112, Line, 8); frequency_Hz = 0; break; @@ -297,13 +303,12 @@ void UI_DisplayMain(void) if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) { // no channel name, show the channel number instead sprintf(String, "CH-%03d", gEeprom.ScreenChannel[vfo_num] + 1); - UI_PrintString(String, 31, 112, Line, 8, true); + UI_PrintString(String, 31, 112, Line, 8); } else { // channel name - UI_PrintString(gEeprom.VfoInfo[vfo_num].Name, 31, 112, Line, 8, true); + UI_PrintString(gEeprom.VfoInfo[vfo_num].Name, 31, 112, Line, 8); } - frequency_Hz = 0; break; #ifdef CHAN_NAME_FREQ @@ -311,14 +316,24 @@ void UI_DisplayMain(void) if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) { // no channel name, show channel number instead sprintf(String, "CH-%03d", gEeprom.ScreenChannel[vfo_num] + 1); - UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, Line, false); + 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, false); + UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, Line); } + + // show the channel frequency below the channel number/name + #if 1 + NUMBER_ToDigits(frequency_Hz, String); // 8 digits + UI_DisplayFrequencySmall(String, 31 + 8, Line + 1, false); + #else + sprintf(String, "%9.5f", frequency_Hz * 0.00001); + UI_PrintStringSmall(String, 31 + 8, 0, Line + 1); + #endif + break; #endif } @@ -326,14 +341,6 @@ void UI_DisplayMain(void) else { // frequency mode - frequency_Hz = gEeprom.VfoInfo[vfo_num].pRX->Frequency; - if (gCurrentFunction == FUNCTION_TRANSMIT) - { // transmitting - Channel = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_CHANNEL : gEeprom.TX_CHANNEL; - if (Channel == vfo_num) - frequency_Hz = gEeprom.VfoInfo[vfo_num].pTX->Frequency; - } - #ifndef DISABLE_BIG_FREQ NUMBER_ToDigits(frequency_Hz, String); // 8 digits // show the main large frequency digits @@ -343,14 +350,14 @@ void UI_DisplayMain(void) #else // show the frequency in the main font sprintf(String, "%9.5f", frequency_Hz * 0.00001); - UI_PrintString(String, 31, 112, Line, 8, true); + UI_PrintString(String, 38, 112, Line, 8); #endif - - frequency_Hz = 0; } } } + // ************ + { // show the TX/RX level uint8_t Level = 0; @@ -379,38 +386,41 @@ void UI_DisplayMain(void) if (Level >= 1) { - memcpy(pLine1 + 128 + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); - memcpy(pLine1 + 128 + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); + memcpy(pLine1 + display_width + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); + memcpy(pLine1 + display_width + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); if (Level >= 2) - memcpy(pLine1 + 128 + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); + memcpy(pLine1 + display_width + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); if (Level >= 3) - memcpy(pLine1 + 128 + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); + memcpy(pLine1 + display_width + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); if (Level >= 4) - memcpy(pLine1 + 128 + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); + memcpy(pLine1 + display_width + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); if (Level >= 5) - memcpy(pLine1 + 128 + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); + memcpy(pLine1 + display_width + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); if (Level >= 6) - memcpy(pLine1 + 128 + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); + memcpy(pLine1 + display_width + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); } } + // ************ + if (gEeprom.VfoInfo[vfo_num].IsAM) { // show the AM symbol - memcpy(pLine1 + 128 + 27, BITMAP_AM, sizeof(BITMAP_AM)); + memcpy(pLine1 + display_width + 27, BITMAP_AM, sizeof(BITMAP_AM)); } else { // show the CTCSS or DCS symbol const FREQ_Config_t *pConfig = (SomeValue == 1) ? gEeprom.VfoInfo[vfo_num].pTX : gEeprom.VfoInfo[vfo_num].pRX; switch (pConfig->CodeType) { + default: + case CODE_TYPE_OFF: + break; case CODE_TYPE_CONTINUOUS_TONE: // CTCSS - memcpy(pLine1 + 128 + 27, BITMAP_CT, sizeof(BITMAP_CT)); + memcpy(pLine1 + display_width + 27, BITMAP_CT, sizeof(BITMAP_CT)); break; case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: // DCS - memcpy(pLine1 + 128 + 24, BITMAP_DCS, sizeof(BITMAP_DCS)); - break; - default: + memcpy(pLine1 + display_width + 24, BITMAP_DCS, sizeof(BITMAP_DCS)); break; } } @@ -418,52 +428,39 @@ void UI_DisplayMain(void) switch (gEeprom.VfoInfo[vfo_num].OUTPUT_POWER) { // show the TX power level symbol case OUTPUT_POWER_LOW: - memcpy(pLine1 + 128 + 44, BITMAP_PowerLow, sizeof(BITMAP_PowerLow)); + memcpy(pLine1 + display_width + 44, BITMAP_PowerLow, sizeof(BITMAP_PowerLow)); break; case OUTPUT_POWER_MID: - memcpy(pLine1 + 128 + 44, BITMAP_PowerMid, sizeof(BITMAP_PowerMid)); + memcpy(pLine1 + display_width + 44, BITMAP_PowerMid, sizeof(BITMAP_PowerMid)); break; case OUTPUT_POWER_HIGH: - memcpy(pLine1 + 128 + 44, BITMAP_PowerHigh, sizeof(BITMAP_PowerHigh)); + memcpy(pLine1 + display_width + 44, BITMAP_PowerHigh, sizeof(BITMAP_PowerHigh)); break; } if (gEeprom.VfoInfo[vfo_num].ConfigRX.Frequency != gEeprom.VfoInfo[vfo_num].ConfigTX.Frequency) { // show the TX offset symbol if (gEeprom.VfoInfo[vfo_num].FREQUENCY_DEVIATION_SETTING == FREQUENCY_DEVIATION_ADD) - memcpy(pLine1 + 128 + 54, BITMAP_Add, sizeof(BITMAP_Add)); + memcpy(pLine1 + display_width + 54, BITMAP_Add, sizeof(BITMAP_Add)); if (gEeprom.VfoInfo[vfo_num].FREQUENCY_DEVIATION_SETTING == FREQUENCY_DEVIATION_SUB) - memcpy(pLine1 + 128 + 54, BITMAP_Sub, sizeof(BITMAP_Sub)); + memcpy(pLine1 + display_width + 54, BITMAP_Sub, sizeof(BITMAP_Sub)); } // show the TX/RX reverse symbol if (gEeprom.VfoInfo[vfo_num].FrequencyReverse) - memcpy(pLine1 + 128 + 64, BITMAP_ReverseMode, sizeof(BITMAP_ReverseMode)); + memcpy(pLine1 + display_width + 64, BITMAP_ReverseMode, sizeof(BITMAP_ReverseMode)); // show the narrow band symbol if (gEeprom.VfoInfo[vfo_num].CHANNEL_BANDWIDTH == BANDWIDTH_NARROW) - memcpy(pLine1 + 128 + 74, BITMAP_NarrowBand, sizeof(BITMAP_NarrowBand)); + memcpy(pLine1 + display_width + 74, BITMAP_NarrowBand, sizeof(BITMAP_NarrowBand)); // show the DTMF decoding symbol if (gEeprom.VfoInfo[vfo_num].DTMF_DECODING_ENABLE || gSetting_KILLED) - memcpy(pLine1 + 128 + 84, BITMAP_DTMF, sizeof(BITMAP_DTMF)); + memcpy(pLine1 + display_width + 84, BITMAP_DTMF, sizeof(BITMAP_DTMF)); // show the audio scramble symbol if (gEeprom.VfoInfo[vfo_num].SCRAMBLING_TYPE && gSetting_ScrambleEnable) - memcpy(pLine1 + 128 + 110, BITMAP_Scramble, sizeof(BITMAP_Scramble)); - - #ifdef CHAN_NAME_FREQ - if (frequency_Hz > 0) - { // show the channel frequency below the channel number/name - #if 1 - NUMBER_ToDigits(frequency_Hz, String); // 8 digits - UI_DisplayFrequencySmall(String, 31 + 8, Line + 1, false); - #else - sprintf(String, "%9.5f", frequency_Hz * 0.00001); - UI_PrintStringSmall(String, 31 + 8, 0, Line + 1, false); - #endif - } - #endif + memcpy(pLine1 + display_width + 110, BITMAP_Scramble, sizeof(BITMAP_Scramble)); } ST7565_BlitFullScreen(); diff --git a/ui/menu.c b/ui/menu.c index 3bfe237..b136962 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -270,7 +270,7 @@ void UI_DisplayMenu(void) for (i = 0; i < 3; i++) if (gMenuCursor || i) if ((gMenuListCount - 1) != gMenuCursor || i != 2) - UI_PrintString(MenuList[gMenuCursor + i - 1], 0, 127, i * 2, 8, false); + UI_PrintString(MenuList[gMenuCursor + i - 1], 0, 0, i * 2, 8); for (i = 0; i < 48; i++) { @@ -539,38 +539,38 @@ void UI_DisplayMenu(void) if (gMenuCursor == MENU_AM) { // the radio doesn't really do AM - UI_PrintString(String, 50, 127, 1, 8, true); + UI_PrintString(String, 50, 127, 1, 8); if (gSubMenuSelection > 0) { - UI_PrintString("not", 50, 127, 3, 8, true); - UI_PrintString("really", 50, 127, 5, 8, true); + UI_PrintString("not", 50, 127, 3, 8); + UI_PrintString("really", 50, 127, 5, 8); } } else if (gMenuCursor == MENU_VOL) { // 2nd text line .. percentage - UI_PrintString(String, 50, 127, 1, 8, true); + UI_PrintString(String, 50, 127, 1, 8); const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : (gBatteryVoltageAverage > gMax_bat_v) ? gMax_bat_v : gBatteryVoltageAverage; sprintf(String, "%u%%", (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); - UI_PrintString(String, 50, 127, 3, 8, true); + UI_PrintString(String, 50, 127, 3, 8); } else if (gMenuCursor == MENU_OFFSET) { - UI_PrintString(String, 50, 127, 1, 8, true); - UI_PrintString("MHz", 50, 127, 3, 8, true); + UI_PrintString(String, 50, 127, 1, 8); + UI_PrintString("MHz", 50, 127, 3, 8); } else { - UI_PrintString(String, 50, 127, 2, 8, true); + UI_PrintString(String, 50, 127, 2, 8); } if ((gMenuCursor == MENU_RESET || gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH) && gAskForConfirmation) { // display confirmation strcpy(String, (gAskForConfirmation == 1) ? "SURE?" : "WAIT!"); - UI_PrintString(String, 50, 127, 4, 8, true); + UI_PrintString(String, 50, 127, 4, 8); } else if ((gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH) && !gAskForConfirmation) @@ -599,27 +599,27 @@ void UI_DisplayMenu(void) s[i] = 0; } } - UI_PrintString(s, 50, 127, 4, 8, true); + UI_PrintString(s, 50, 127, 4, 8); } } if ((gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) && gCssScanMode != CSS_SCAN_MODE_OFF) - UI_PrintString("SCAN", 50, 127, 4, 8, true); + UI_PrintString("SCAN", 50, 127, 4, 8); if (gMenuCursor == MENU_UPCODE) if (strlen(gEeprom.DTMF_UP_CODE) > 8) - UI_PrintString(gEeprom.DTMF_UP_CODE + 8, 50, 127, 4, 8, true); + UI_PrintString(gEeprom.DTMF_UP_CODE + 8, 50, 127, 4, 8); if (gMenuCursor == MENU_DWCODE) if (strlen(gEeprom.DTMF_DOWN_CODE) > 8) - UI_PrintString(gEeprom.DTMF_DOWN_CODE + 8, 50, 127, 4, 8, true); + UI_PrintString(gEeprom.DTMF_DOWN_CODE + 8, 50, 127, 4, 8); if (gMenuCursor == MENU_D_LIST && gIsDtmfContactValid) { Contact[11] = 0; memcpy(&gDTMF_ID, Contact + 8, 4); sprintf(String, "ID:%s", Contact + 8); - UI_PrintString(String, 50, 127, 4, 8, true); + UI_PrintString(String, 50, 127, 4, 8); } if (gMenuCursor == MENU_R_CTCS || @@ -645,22 +645,22 @@ void UI_DisplayMenu(void) if (gSubMenuSelection == 0xFF || !gEeprom.SCAN_LIST_ENABLED[i]) { - UI_PrintString(String, 50, 127, 2, 8, 1); + UI_PrintString(String, 50, 127, 2, 8); } else { - UI_PrintString(String, 50, 127, 0, 8, 1); + UI_PrintString(String, 50, 127, 0, 8); if (IS_MR_CHANNEL(gEeprom.SCANLIST_PRIORITY_CH1[i])) { sprintf(String, "PRI1:%d", gEeprom.SCANLIST_PRIORITY_CH1[i] + 1); - UI_PrintString(String, 50, 127, 2, 8, 1); + UI_PrintString(String, 50, 127, 2, 8); } if (IS_MR_CHANNEL(gEeprom.SCANLIST_PRIORITY_CH2[i])) { sprintf(String, "PRI2:%d", gEeprom.SCANLIST_PRIORITY_CH2[i] + 1); - UI_PrintString(String, 50, 127, 4, 8, 1); + UI_PrintString(String, 50, 127, 4, 8); } } } diff --git a/ui/scanner.c b/ui/scanner.c index a01dc02..c953774 100644 --- a/ui/scanner.c +++ b/ui/scanner.c @@ -38,7 +38,7 @@ void UI_DisplayScanner(void) } else { sprintf(String, "FREQ:**.*****"); } - UI_PrintString(String, 2, 127, 1, 8, 0); + UI_PrintString(String, 2, 0, 1, 8); memset(String, 0, sizeof(String)); if (gScanCssState < SCAN_CSS_STATE_FOUND || !gScanUseCssResult) { @@ -49,7 +49,7 @@ void UI_DisplayScanner(void) sprintf(String, "DCS:D%03oN", DCS_Options[gScanCssResultCode]); } - UI_PrintString(String, 2, 127, 3, 8, 0); + UI_PrintString(String, 2, 0, 3, 8); memset(String, 0, sizeof(String)); if (gScannerEditState == 2) { @@ -74,7 +74,8 @@ void UI_DisplayScanner(void) bCentered = 0; } - UI_PrintString(String, Start, 127, 5, 8, bCentered); + UI_PrintString(String, Start, bCentered ? 127 : 0, 5, 8); + ST7565_BlitFullScreen(); } diff --git a/ui/welcome.c b/ui/welcome.c index 167a222..95f9756 100644 --- a/ui/welcome.c +++ b/ui/welcome.c @@ -60,10 +60,9 @@ void UI_DisplayWelcome(void) EEPROM_ReadBuffer(0x0EC0, WelcomeString1, 16); } - // UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width, bool bCentered); - UI_PrintString(WelcomeString0, 0, 127, 0, 10, true); - UI_PrintString(WelcomeString1, 0, 127, 2, 10, true); - UI_PrintString(Version, 0, 127, 5, 10, true); + UI_PrintString(WelcomeString0, 0, 127, 0, 10); + UI_PrintString(WelcomeString1, 0, 127, 2, 10); + UI_PrintString(Version, 0, 127, 5, 10); ST7565_BlitStatusLine(); ST7565_BlitFullScreen();