From f436a84bd56a2f9d652ff00255da2a302fcb18ce Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Tue, 12 Sep 2023 16:53:47 +0100 Subject: [PATCH] Fixed WX/Cross-band display indicator, some menu renames --- app/action.c | 8 +- app/app.c | 42 ++++++++-- firmware | Bin 172892 -> 172892 bytes firmware.bin | Bin 56664 -> 56736 bytes firmware.packed.bin | Bin 56682 -> 56754 bytes functions.c | 194 +++++++++++++++++++++++--------------------- helper/boot.c | 3 + ui/aircopy.c | 2 +- ui/helper.c | 18 +++- ui/helper.h | 2 +- ui/main.c | 15 ++-- ui/menu.c | 40 ++++----- 12 files changed, 190 insertions(+), 134 deletions(-) diff --git a/app/action.c b/app/action.c index db0dc8c..e57da3e 100644 --- a/app/action.c +++ b/app/action.c @@ -74,6 +74,7 @@ static void ACTION_Monitor(void) RADIO_SetupRegisters(true); APP_StartListening(FUNCTION_MONITOR); + return; } @@ -88,7 +89,7 @@ static void ACTION_Monitor(void) if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF && gIsNoaaMode) { gNOAA_Countdown = 500; - gScheduleNOAA = false; + gScheduleNOAA = false; } #endif @@ -207,6 +208,7 @@ void ACTION_FM(void) if (gFmRadioMode) { FM_TurnOff(); + gInputBoxIndex = 0; gVoxResumeCountdown = 80; gFlagReconfigureVfos = true; @@ -216,7 +218,9 @@ void ACTION_FM(void) RADIO_SelectVfos(); RADIO_SetupRegisters(true); + FM_Start(); + gInputBoxIndex = 0; gRequestDisplayScreen = DISPLAY_FM; } @@ -246,6 +250,7 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) #ifndef DISABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif + gRequestDisplayScreen = DISPLAY_MAIN; gDTMF_InputMode = false; } @@ -286,6 +291,7 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) switch (Short) { default: + case ACTION_OPT_NONE: break; case ACTION_OPT_FLASHLIGHT: ACTION_FlashLight(); diff --git a/app/app.c b/app/app.c index d41462a..c6e06aa 100644 --- a/app/app.c +++ b/app/app.c @@ -421,7 +421,6 @@ void APP_StartListening(FUNCTION_Type_t Function) #ifndef DISABLE_VOICE if (gVoiceWriteIndex == 0) -// BK4819_SetAF(gRxVfo->IsAM ? BK4819_AF_AM : BK4819_AF_OPEN); #endif BK4819_SetAF(gRxVfo->IsAM ? BK4819_AF_AM : BK4819_AF_OPEN); @@ -685,7 +684,11 @@ static void APP_HandleVox(void) gVoxPauseCountdown = 0; } - if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && !gFmRadioMode) + if (gCurrentFunction != FUNCTION_RECEIVE && + gCurrentFunction != FUNCTION_MONITOR && + gScanState == SCAN_OFF && + gCssScanMode == CSS_SCAN_MODE_OFF && + !gFmRadioMode) { if (gVOX_NoiseDetected) { @@ -704,6 +707,7 @@ static void APP_HandleVox(void) else { APP_EndTransmission(); + if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0) FUNCTION_Select(FUNCTION_FOREGROUND); else @@ -727,7 +731,9 @@ static void APP_HandleVox(void) if (gCurrentFunction != FUNCTION_TRANSMIT) { gDTMF_ReplyState = DTMF_REPLY_NONE; + RADIO_PrepareTX(); + gUpdateDisplay = true; } } @@ -749,9 +755,13 @@ void APP_Update(void) { gTxTimeoutReached = false; gFlagEndTransmission = true; + APP_EndTransmission(); + AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP); + RADIO_SetVfoState(VFO_STATE_TIMEOUT); + GUI_DisplayScreen(); } @@ -809,6 +819,7 @@ void APP_Update(void) { NOAA_IncreaseChannel(); RADIO_SetupRegisters(false); + gScheduleNOAA = false; gNOAA_Countdown = 7; } @@ -840,7 +851,11 @@ void APP_Update(void) } } - if (gFM_ScanState != FM_SCAN_OFF && gScheduleFM && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_TRANSMIT) + if (gFM_ScanState != FM_SCAN_OFF && + gScheduleFM && + gCurrentFunction != FUNCTION_MONITOR && + gCurrentFunction != FUNCTION_RECEIVE && + gCurrentFunction != FUNCTION_TRANSMIT) { FM_Play(); gScheduleFM = false; @@ -852,7 +867,14 @@ void APP_Update(void) if (gSchedulePowerSave) { #ifndef DISABLE_NOAA - if (gEeprom.BATTERY_SAVE == 0 || gScanState != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF || gFmRadioMode || gPttIsPressed || gScreenToDisplay != DISPLAY_MAIN || gKeyBeingHeld || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (gEeprom.BATTERY_SAVE == 0 || + gScanState != SCAN_OFF || + gCssScanMode != CSS_SCAN_MODE_OFF || + gFmRadioMode || + gPttIsPressed || + gScreenToDisplay != DISPLAY_MAIN || + gKeyBeingHeld || + gDTMF_CallState != DTMF_CALL_STATE_NONE) gBatterySaveCountdown = 1000; else if ((IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[0]) && IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[1])) || !gIsNoaaMode) @@ -860,7 +882,14 @@ void APP_Update(void) else gBatterySaveCountdown = 1000; #else - if (gEeprom.BATTERY_SAVE == 0 || gScanState != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF || gFmRadioMode || gPttIsPressed || gScreenToDisplay != DISPLAY_MAIN || gKeyBeingHeld || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (gEeprom.BATTERY_SAVE == 0 || + gScanState != SCAN_OFF || + gCssScanMode != CSS_SCAN_MODE_OFF || + gFmRadioMode || + gPttIsPressed || + gScreenToDisplay != DISPLAY_MAIN || + gKeyBeingHeld || + gDTMF_CallState != DTMF_CALL_STATE_NONE) gBatterySaveCountdown = 1000; else FUNCTION_Select(FUNCTION_POWER_SAVE); @@ -889,6 +918,7 @@ void APP_Update(void) } FUNCTION_Init(); + gBatterySave = 10; gRxIdleMode = false; } @@ -923,7 +953,7 @@ void APP_Update(void) // called every 10ms void APP_CheckKeys(void) { - const uint16_t key_repeat_delay = 70; // 700ms + const uint16_t key_repeat_delay = 60; // 600ms KEY_Code_t Key; #ifndef DISABLE_AIRCOPY diff --git a/firmware b/firmware index 3d80b94b682f89c05a0fb66fa20d7f0ae393f445..d60bb5d2cf6616eed6afcb8db6339efdfabf61cf 100644 GIT binary patch delta 13077 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 Ad;kCd delta 13083 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

yebJdiwT7ftM|X>}>m%rBYEp{BM@C+ok*H{{eHt Bj&J|~ diff --git a/firmware.bin b/firmware.bin index fe3f4a40ec3cfa557bdd3c9259dacf319be940c9..f35bb526b71d5b9ac38fe92ec31e317a88c7fda5 100644 GIT binary patch delta 8222 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 delta 8228 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 diff --git a/firmware.packed.bin b/firmware.packed.bin index 664c1194f8df2bbbef2d2a7b2f3c4111fe7ea22a..63710d00b888aa07a23a453bac1c2d67a042e22d 100644 GIT binary patch delta 20947 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 delta 20874 zcmYIPRajL0*JbDqK{^NN5<%(i?(U93T0+1>qaqT6bayi_NDKl42oi#TN=k+Xciiwid-iX~T5GS<+==xIg_R-=2}+e&hR`FKAe97=NaO(F83BYH*+sPvf!ssZ zQ*+_6%~~_llJI!n=smXN_I_Xj#U{Ot-!j%`q#pl~IdUWMn+$ovn2d}0t`Hf|{+a~x z4M`!a0ijSke#|p}Fjov-F7pmgJB%K8 zqq_{QAo~+fePey+V}%b~NR9`x3b&A}haAK4pkK%CtePbHum9`nc%3DDMd@&BregTu1Q-y~qFfr&s zb49!Rw4O!y>D_x@Fphzc{3*d*3+yyQ`jAM4rw|A!oK1;=CSz&!DJ=_oP0T$+I{KL} z6>2DYkg@axZluHx@qh;_@o@2@Gqhe&6A<~X^ft*xsEVVe90py(A8eid!aL?R-RRDM zyA77-c)>p@89*eFbjqU;A|9#R@~S;w=fI-?_`XUga3Lvf2a3Cb}>^YC^pE!p`e=ym*L_Srogb?l1u#%raG3-#38*mm)0UV9B>=`V$ zf#wl}2C1Tj2Z4wob+la|kTN7vXB7gOgTK>LVtXu9^PGL!@#KRIqJHX8 zW0K3QtZ43@zNpjGeNJ7tpD7c>7M^U%262HmnVvxW;gx1QkV*KY*%z?hip}L9kOKIs z#Uv(53*KUxK~pl=F4bk`M=MXz)I&dX$f;MbQ!~w zpQJ1mu3MRoh(gx}U;13Qj_oc)5iViJ1Zjtx*$qSL;cWKHkUb>CK@9@wf@?Smfl-D! zCSpQfBXL{;AY|$@+<`uMO;^T-Xn)(v0%U@#2L$}z1Gg9mCi0m(76kGG9_k?hS%V`z zxFDVI1rIF(bzG#>{BVDT1YF4T4q^uvf*C!kyMs3Uit(qKUh;Sj%l z$T=VBQ#ii=BZx9w%72dO@;+XcZ5pLWW{jE8!S0<>Nt-Bk zEhsWjK?xTMEr;BLe-HJ6Ov6>48<8k;Vb~PHRd76BX5?nV%b!O;vf=Duk0Ek!i?9KR zESx3W27HT%a0>#_t%d0(Om>oR@^ByWTt0=bqFA-zY>aY!*u|fflC%Bu{n2NNtMFhTpMeE@_@7jFkxmx1mpjQ> ztTIbj&CSg#mID>TaG}V@5O1VQBoTyYdt{p5?kcH7YR(fL7R5kRO7A^~VVkh7f8q`= zj!K05feS>NKs@0w(Q=p>EXa@16%dFZ92WZ&(twLMnXD+L&b&s>^^LKtAMd3(#j<*(TI;T3qv%jRM&VRN;QDMQf zwlz@pT42??(%E%T$^lV`0-N#ky#hQp3oC<>0%q|yKcb+vXO{Tqlc)&hvD=Cx9xtkwL2nPJa5e7AZyCa}^XSQXht$$7am z;*tTp*Cm-(|2-liQ=EK16J@ca<3;o5Y}MEJ;nT|}Qp$o)iVb~9u2xj23rA=Tr5t%AIs92SjY0H`>8leqG%}oA2P+n;$YS%yLyw!$HikJ+fnVAk zI!!N90&{iL<{a3J_$$S0#(y#3ZLFI-xzr2+-k`KemMaV-+S2aZl~(&{+=L08I;=e! z2=HB8^%3zYqzHo}3cvkv*Q_#%Hlr$!txlhUeWb@$I62Eg66)`h@Tfv^GFHM9` zaoQ$wOpMzRkqc+z4%S#os~zP*`+M4{x8T6+uPk@9tsg2)*N$v*pohRGP&0MZ+mi%h z*H^YA+G;TU6@Cg@A9#jZG?>t&$0Ot`p3FA{5mR;9e`MBt*i*1&sHwgGeC`RY(m_5r z(*NEhd?jdA(C_-&{>EkF+gSEqjjW}nRCY!C7h{g*y^DJX+~I7v@6kwFId?TK^|n-6 ztJ>vat-347OewACgFe%044Z-~-8c#$A!Ut=pMLlia0xKb%BZW96EmlT&0n8$&c#*6Et@7p`{6nQKo5Bt;-I`uo3In(e z=-1yXOuBBqvT_H1Tu!Tn^P&CQY}H##z3i`=_O-1o6{c&azznocVAx54MF=p8WNJNf zCSK@m{JA~F+|9g1rdZ&bOxBtZI1uo8Zc|rCFONbY<$b}(?^k1cTLomh(IxTEVGOie zr(q{&c&DBrgzbQ1(%NaK7 zsvbV)IA@75&R?s0K~L6Jr3*x?`Xv!H7ii+di*H6Ra>|z!MHv#g0VJ*?VuMZtysO@N zU>C@{A`0sped&Kw7U0nt)qVVs&MbR=5QoV-ZfKvPp3U*}_o*#<*@H2T;U^pC*hyPZ z{OZN$b6m0SFvGD=E#`*hYs%@JYW0Jr>zd($T@67*d#`t8D}YGVDN)ue!FeT<&nL(#(o@^KcYj?OC6aw+>-!r2aweY7V?0h> zIG@)iEv5KzKAS9B3@pO0U=b2Y9TNvOKP468*$>AdjqOW(@g*RfMz<@a-Tp{dMB8*e zXQr4<`mqf+j2!3zzBDZV^u-Mhr@$X>k`!rmqRo3OHh3AY)nSnIMhFYno$>f2I76+I zl;`EspYh^)F7MOCaf7vw#j+Rx@Ws^3>$fDuLKW^2vFO&l zz5W+!!W!S6-4NQ+{5o4DHxYc=$B)vMDZ~2nb-JI(-B4wJZ$ZMy+^8j;nvbX2=aFA` zIc@6va}|@p7oyK$hO6YBr423SamH#R05`2;oZ0YORF7)Y7F{cuI$k;okg3Q`M+1FX2>O?v zsXeFf{AeX>P}J*X?~=09i80RoKbbJ~1^lZX`jg?_ zV64%~19{byV*ZS|OZH}fB5){r-dox<}2gNEU_XKmIO&7-)~6eKu4mzDYS?^AJPeIg1PJrU`j z1C^kx_J$-3(UwYl8&6eaZz8|4kMl%q#yk2cF-z3ER1RY_!lF2Cpdea^)+Q~H;+X*? z@kozEf{W->3EO%qnkvt{q-eyVjTDc(I`CEinly2pvc&kd5J_v1rc;3{-QNXIhPK*_ zN6IWeMYs1gQwfSxKwMXU$f&rIsy+eP+1E#5L%ho0CEBBcV z(0W&lFV{6{{9}jyt4_4HYkQml-xn+0zayM&(}&n}17)&<4~_{{*v4pjz@zn(*Ednz2#chii1tTGd8N599}3fX|gT9pYV-rrZ&1ERH&tl*f7XTXcaM z7!D-#F*~VM>CBRke8kaZE^lt{N2l4#SZd7s}SYhwzxDQ+RW1mAwG=iAe)UbwC zukvXv2iRw7?Iluz~EW4Koioy)Bwb{ryw=O~2GO@lf2l zi6wsl5+%(jIXNB0Tc^Hvtm&y!+lexMvtpIyG3r;WJ~lCWG(Mt%>Jj>zdQJi}YrSI* zhfS~fFQbjzppPAGOyyf6?N>Z9s6NE+Xl?^&^52{1x>xwR zat8H>r0B2e3j$~Bwe&0c7|v#?^k}Ju7cQmcXRAIY^xfxzd}Jo|ogjJr94JaKY2_l< zY%fn&u!QI9lpZ-x+$OL7{pyaHVR;~4qfyh@{~^USeC34nX`foB9N{k);fmhN_4`}y zx?BMpi1R}JZRXybSs38o&XY%rr*lpXG?f}YJCpq66kv|s8RdC6KH&aotLof;u)zyw z`n}+TSb99p7ra8EtHtyoZ;Wfi7b8TeZh4G$)o?1AC3kI`JQoRBriwcyQO_#w7_+Z0 zuRH?gg&DwI@Y3*QHvr=@tN4*t`vt6lMJGzw_?+f~*q(NHEdWlU!S`xw-XVSwjiw5^ z+q9(jo7G795F#72y@B~z_Ae=q1(+8f{N-`Iq$55llr;H}`J57wAsQ%3@8pmUvmz&Y z#J3sGeVIom61J)E5YbsJlPj$I9L{F&BzubDSbav+v;Q9=f^rAPgGJbuskUYjq=o&1 zJDZ<{PTK}(flSo$qE)TQqik zQVS`i>o#bfU!(XbDx6+%|HltTqX^;DX}Y1qvl!?+Vb<5C1*Mwz;-n7Ec|OvK$F%|% z5wD1?o26fJ8i)l-WelQi9mLBI>u6`w@WYyY69a*8)-L%VidgTP%nE$RPT%zBPMj)K zQUL@oPnVkS5FX{(PRGPyr;lWKhx#7_niuAD`?FdYQaqaqWDTnZ558$0??>!O0ne>A`5D;|gmQ~&0_$rBa}`(Fn51oS`ge-Gq| zNRheV4qjxd@RLt_xUay1aH7o%f0qeRy^M6OA47-k{YJG27R6N5*Bu%TK6uk)`dLHc zx2tGKQx7vcaiT$CRV6I=7grpP%cE*3z`kP09#QBB@&Zy25m}1usa}H?`TB~R zV|+#>zOEA#4VL;H>0A5jys^*)!nfa>kt?FwCtJ5^$5p#4cMPYdpJXSE=Q*di^mzat zT=I9S_ye!81zVjg3$p-zXBO*T)~-iEqeL&VHQ-hNS4Z99@u1Ti#0$dCIglAS*r*Mg zN-4Gm|AH)DL`v5&on6Q}v3O?`tA9BD@!dY*!^7NDIzJ`I?goR@MTP$+N87k*>RJ1n z(;nBUps;9{mm8BQkH8Gfp(1j-z%KYVihD8-nPqv@d&&{Ow+p)}=J39e>1virxfCZj zC0@^v(KmdhujW?*^{;t&#v|wTv|n{j84PAs;XPeSpdRMaUDL(4jwmQni1L;&Pw*m~oDSsh<%Hz2-t?-F ztiHf@obs**t)q9T`IfDe`F>N0=LSz-P&=~}seDFu z)pwt>Uo^+-xhvk|FP#UCl48Ehd~aO*R|5}0ZdjAaES?9}Ks;Cj!V{6JV<{w$SMu13JOw44+G-JE9Me8yr}sV|TKY0C-ESfLY$mSc)SQXt;F7Q_ zW)ALP_OsDmW6fR%T`_=sxr*EuDPBb;M@babk8I!;r%y8ztALv&?NFq2BDYA;yj80j zy`UDljj|dH6iZJ%p_Qr7dU_=b<9Oy>q=5AKF5m}Yt4XRfqf-ZEIi{i2hDeDEJq`1P z)aw64+msChuBs-?itVs{P_*Uq47GM-0%sgkOuCvQIA9Dtv=s*@{qdimkfLiTB4#`Bx_h(yqtttEE7%%G5+Cr&WKGMS} zYkxvvy~9y1)~OzmC|Zz*N;T(PlT0P}@i7c{k~}7> z3)HWpOG@Yqv*5}a+JGA3 zJQk8G%|GpY>8+_ga}wHRxe0+3W7F^2wK=Yk%_|b9hO(%yZREEupU)h6#mxF}O#5^V zc&xv7-kZC4_uWV`iZ9O2fMEz?_*)!@ts?XU7b}$eDqqwa=svDY*$ZGKen{BxFMu;J zfI15zv(n91z)`y4y5TaIff5R(h206`V}UO3Agh`PFo1aNN|@~f#xbsp1@83MY4o0# zb4xlydbq!|i0Nj2((jn`F>uj!45xX2eC0WN@zKP(FPoN%3Uk3gU)ky9W_C)pKjdbb z;gu00JXP2?Y~O{L3KyW7AmQk$N)Ow9Kf z=SraRw$QF>-N`x6Kp3SJNaey(_*&z)o#?iy-sn`Dl4?qk%LLXA&li7tP$lzzmVsoe z{q*j;lV7nti5Wg9&pU1q8|^ft1&Dxnps%JD+yzh1!eC>oLC94Y@8&W8KS-v=#chTH zX44Y)`O$`P7V7EMKK2Xq;3#eYF`@EL4zv{51!JH_lLr=IKiCDs6l*)e>xw&a3Rbr; zJG{2P`!dv`oU|P)?+^ntJhj~tT_Lp5w0UpW%I?2GkUca%yn#{*O*!Fowx3#s9n|L2!#mkgxE0hbeyEaG{cx=9qNre|R4|%=RPqbNqCdL57 zc8odbl2c(HykBXxNlit4Gd15)!d=lW^0U%QPqZJP!igiUN>}xQ=e=7_%gH$mTS!%BV2_Tp1QA{m3rXbY6e2G z*(uBSEzrywHSrPm#LjN%RAT5k5%#Kwguz4V*Yk0gF0aX-_r=|S~( zycLi3?~ABI9&Ag3sEhU!mnW#y`e76|@vBX4kFLNr1Tcx?UGrZZsSzy1Ff$sa z7a01N`V3pw_kPSob2~qnDuBI|>3js!-c7U5yPwX)faEz{7fA>!LQ;6eMR18OpI(hQ zvHd62>WF2tH`9DF@f|=&t>V!8Tdg6bso4)XbuJ$*TN1znI_s~*7jI+QEXFL=iKZhl zw~T|cU@+jGlcW&zI?@W}(RZmVr0)DD%k!MPS9^aJHi3Ag%t5}&Mqijy<*$9Dm|;Qu zimIv9aczA*!L6wEm10iNTPoU_C|Lm|7nTmoRJVaLbp-!ptdV3pqF`pTwj@5oi?(VF z7L~%jWJ?%-S${v1ZQ_0QhN_9bFy#yLPb1UaCSAY{IWKo`CRSQvu^`%iGg>{}7*r}J zL3$jlI9(eHcELD!wF(DEF%$R%0Qdys;3#H@QQL97QOx*hM%GHrC>=`#S=HTlavjv} zLG(R-2LP=JJlICcdQY5DQmun8=8)lII)r?J>vP5r)g!lKHf{8L7H%c$3$`*%khv08uis=nyV zpdt_>w-sUFE(rKeF>MUafk*()p;IhcL`YydAyEN}?zOIT^dyG5VaA_pug-6G&skBeD2<@`%7VVX@5|G8X(trgV_XP3yCclA=$8)(lJ~4uh z8SWyqNSidPi9D7x<(ccL$5=o>vPg&lsGFK(@N#CJzxO7dZIxdCbKi{ppt_y2!F7Q1 z&&F#R69%%K0!{v)`bf{v%H9OO5%!I8E+#jtT|{xBB{SYC8^`>Gxqs~sdF{iQ+qfAX zJ0&dYV^@Ith(1X1LQR%2@BSp7%M*7{EPgni!z2GybWreNf4;Qa^;Je)m*`O*m zUSv+#dh(v*S$it|<}SXjD%~Q9Qj9(9&Tn=^x~%1JRaa}?r?$*9_tW6p=ey04>9~vx zmQmF1kL{~QYW>;T-iD`0bp^p$-b&e}=u20UQJeyHaVG>^*Zjv~M9`pn(=<}g4SP$b zYH^oqY3&c-BHFfnl7it2G~U&EbNF~C)t}XNe%(tf+amdLzv@(@|G9$rHOg`@D_B$Q zY&Y}^#FVi^JHvIn6xBx{WvGarZ72uZFs4|zm099*LFAzV1Vxy7$!%l)_AY42-pjpAx|>6NP04J$o81`{TE-P2i8IT>10_l5$o3*_>~Q)-?jX+`Vgj-4lj_ z^t+jQ3*0F$yCm{=S4>qDP>xzjSycw^WU}dOQ0NY|j z<3P=7MItLpQdM}zf?5rijD*U9h>=}*RfVN?o+%r5thmw$`1cVv5gPrG|Lx;Q6{}hz^12fRcEKcJtTNubwP(nIZ-dqcd(NT2 zGNm%M+N>DUxJTqzdp#{9*XbSEa)(60>)t?>A(W#!v$EY^2TxJyaw6>AEy+S^CLy-! zPlIpVc55V4k{L=xUdt>end~$~@~{e+W7QM#k!uhB6$*vD0ahZaDQ+8Am-zo)1yc?$ z-K*j~PU%rY^aa>FtL5w*D&%KmR{xn7KGQA=aE9Uk!rJTpZ2ZlAF+*GY73su>QOCG1 zcWyiKxR;t9CuH4cw9K(?KD%3ES-x~+NxjF5i@p>TLwjD1^zsCVp01&|Le@=<|0Ejl z==4U)L1GCo84JpKHBxym-X%z}LqXS3M2P*S-;&wGlHVo*ONE!t{=&oWOm;c#HbH;clWrl~MI>5zYMnb=jhe4l z*^j^t(QC>P%_;UKp99;l*3li6Blspqi`x6{=^3f3tcYkO1NQ17ovzMSO<$Sq>R!xZ zzJU)~hQ1{uWAW(jdtqYDH^O_<&!wL;Xbs!~75~m=hXfR-SzE{aBF+(=#vniUo=>ag z0Tl`&@OB&TZhs{P-fjy(Jm4z%KNrjU$Hq7Zd;fE>yaMsS4R}32=2C1`eMOcr%OV|H zzPGBo?dm#+Q-tU_^YN8*r7FNnFt;)Ywq>S;Ge%*a9$4bTDNr`D(`BG(nwSRbU3*tpf`yN_@owEXlQ`FsC@V2^YgF=WUg(X1K#_khCP)(wR-^=}+hjkmN3$Nva9+Yi?~Y2;Pc3 zL}FXvq!Plql!3vUGNJFY{QgJTLiJ3?H$8?nozg^6%+*`)F!6SeCR#Z4k66QUCbnyZW`6&Sv6H2eb7D~@7f6SG2kKnO`yB=qlhE0 zpjf`cTVsD!8716#`jU551gYZXx6&P-vN;X?i<1h20BtF!G%;-^gF(48$FiYuj6sSL ziU1MoXW{frD@BwJ1BaV`10ux|N>TL@*#yGjC8|IMj)XR>HsY3-}rw*3!)~&Ri=)a{x48lVBRqd=*yVGo)Vk%{{x1e6M>#K?3yl4GDkCF?w^aNyUc`$+o`s@vYlV z)mOs1J0DV4V_`WK4C@sa#~$agOB5o#KQM&$+@PBa)I6gecnSE*ci)p27O+6R21+}F z9B7u}6T7`k21Lj?xrff$K$$E>@*Llc_qe9-;9hSDYoit!FTMR=PZ6*13HP$i_nM>|nNNFl*>!Xp11+2M@@)c& z9UKdY>7((|Gye0WMSXon`x(icSy}hlAwQ3G@_Ekz)WGyv8_fpqXs4lKAR7$c!oq)pk726*KlhiRLYq zbnGu(%)z&r(X+fC5IwTKzLHNsp^_uV%Fn}wnYI&bLl03)fExqs!~4Xy@hDS$Mr=?b zQMowgCj;rR{5rSU7E4+pHK!iPi zo{r|f;Rh@UpQMy>gb#`hVAW}O`G=8jxCWfC1oi2pem=)EdwEjYVQl!zaL>hRBSx`s z=VRNgEmugya%}}p*3YEe$K7A=41Q&HgLq&KyHsl9*Gizu@YnZU3c6)Evme1HU^(6K zs^UCsD9YiNpHA>)NTV&7IjRdIi2Y!K#$_A5qXKU3@eIyySW|u~N;uA+W4ghdnsF6o z7RW+IqE5NDOj*CBysBp((l<1*$*^*GJs-DL5z(i{JdkuF^6UbQ&z(b2ic;N%RoGS22eGW6&(ZYhBh9}VGxTwYlivCzqbo+FQFAV83 zq)-Q*u&Xi0 z_Zapyd(*qYXZ!*GGEiA(1hQj(iTUX$AeD2le3=%S&Ea-)SN~EO$IKn1$1hi||HFhN z_|I85e}kBCVVyTTTv_Fo+n#TTQQ3GIzEq_*&Jpn9TwAPjw)QZxzlAbQ1%vn8a81Ir zTCcZ@Tk{=l1R2i2_VdpyOw1jQ87c*@6so-A{=gJbBCpTr{jBF3sn2kaupW+99z^iC&%n2f)^P$vY)vKLQop`V1Ec*~-qd`+5Tg&N@ z#W?XS*{3YouCEa+J9LGXdfC#DcaGO5&<)kTQXZ>w6S2P^&gj%!ML37>#O^dVNo13}bMhk#0ggw3)$LC1nhjguU%AG5PUT?}X-hyHvBP4Z3oGz z*cxL**6Ivy!|1=Ox_mCKgW(`M9g9PY=8gRO+b^}bzvVEczF$!M578o>-i?|FSbN=5u1ATf;} zSgyu@$DhVB^F#>(4KKeZxS~6k^MoG9nDZkeDZBq8nXAr+>vRXs8CFK+N^#DCmuhpn z6eS0y?Dq(LygnDBB9mxn{0NM+vxxVj!xb$zfybVQC%=4OB{x~p$b6=bXt*dJTAnpo z-Eho*Z+?us?nq^$=UC4y*_~NBbSYX+ST~T_;^r~&r{-g>1(v>7Q+YAoSW0x3Y|Xc| zWIt+XEiUmy(`c4pH;WwUEK24sTr52!S5Ue_+5N9BKHjadO@4*K@tB{adrd3XMp?(( z8^B-9D7G-iv*QNq%cqpm$4;B?2mXG?x?)v#Ec_Qhup`v^>39gERCj6>u|p#R0|IAx znI{a{vQCnl2I=hMjpZ28CeX>c!=}`Y2}r^^f92Zz`sQWid6Pg<5;exn3o(NCA6^@e z3HL7HSaXKI%}Po-F52@ne0x{!g(YQc2wcuQH~1smp}}FSD4(*fRO2L3IJWj(-7A2P z0LDUZLkJ3!5T>J8z&5}H8wbTiDHS+L;E@9 zMZoc{ko0Ylj7aB_KkXJv*LG{ZGtoX{7`o4OzrNBOO6Y9Q>qt=iHwjyq+{=M@S(uqo zcVX^p?^dIt*G45ax3QNd@W^@FfO)zRq39ISwyKt5AI~2}J_0j+D$s4i+M@8M9ZL4< zp0gshzrbB^P9QKYj}Ng%_qsmlmCU@+&Gy7@2D#x;a6~c6?aIg}oDApS@SD>W=p|EX zb=_Kc!FBQF{C`}^60D?hK$_au}*LLD7>@RD> z29aPJax1p-#FJ$hQAo!Qf^BF42B6W5=-~+Pl{5td_zi%lv>WWhuk%sRTnfA#AKpcJOCDvW#WS!}`odC_z~0!p^xtxCRaXvLhvsg`NT?uORh|Ka!Edjgc{Ou-Bgfol2a?@U<# zf=HWjTE9Zc(xyY#_fN+_e97CKUYYg+=fg}%qm42IlD9Iw-VayY5_osZ;4>@Iq4OQ1 zdMQ%2xX0ok_3jZ1MgqNP-Hg5I_H*=WQvc%X(k-I{0Rx^0f83s46H9amMZ9`XGQ#af zrNPSfA0T+0bzb;8k57maCBT*?A#V zc+OO+`rh?Vc>rx0VDOHHzI5#M`*w!j`RQm@i56qpR6fxPhhJBAwRuLeFiniDMzsHo zZ$XGB4G-TlvBLOHwW;oEn?UWrX4Qa<32Ys^8_j82u5r?ph&c>9bt>EQoCGt070}X& z1KtaC!0Y)xNEQk1g4r+9W$OE@x=x_U|Ed(xljY?r2`o$&aJ>LA*))jB7N?@1eao8p zsh85fPY0{UW4u29bYi18tIsxk@L zpmLI?5Q+)3tee)C1vut?PsN^X5?|Tw9Z*r|8u_4bUc%CHwk^xgFb#iCOXD_Hiahy8 z&jE^*;dyV`tA_Y%7`P6PW7whI=8@?u$~Eg!f68LI3|j(@v;^RwK=CYF&lB68_YTS_ z>Z^v^<7*P=k=}IV7~nPAoLJq)7A{7?u5axu`lL&%81(L#y@}?KYpQYl+mvIf+TX$& zaNUM;=^+1*c%1L){SM`H=dD`LW}59iAa1Por!`uP?wPpLI3og&E%7Fs-U=&fl)27YJp9H{rD ze@$E`d5Y=#;QjtHc)$M&qT+TvqI*l7 zp-*$cIj~x5zt9a1B5e3{;;Rh~^keX5iXvkc@iBN$7th%uFczv|f$^gy=O&HNS`+W<9e>9BBf5;g8 zy-}LNXtBT&B+8<)|E*|R^8MG9;eY0G+3ScDo5QPdd`5|ew4&0(&%R2`wm+Iua-dD1 zr!!c4x^^9OHs7bj04%_h4GU;&o(G9Z9n;#*V>`8BGSEX3XinCu1R5AbKz-nmyX&BL z5rF7D;kyNxF?(P#WRLNUz*5)+H2h+H=C z2~t4|g$YPZbk-D?t7)B%Jf(UPW8QyzEBZiAohi4s{h#Sk|1Pz(TltUvVS5KKiGyC{$?2H0Fyg) zXX$LE(x*cN^~V@jXbxvtcY8S2uUgoh+TKobFeN`RG!@q&tZ%@lsN14VL9&EzabIC5 z;LqGgY~}}P00k2q`2bzc&9)?!%B4sy>8a@S;wO4KDvj<&#UVRDuZB(PxFn{>xWyC8 z`?#@;5Yz{rQOXdSJ%gU5v2=WIuQm@9Yi&|^2KNaD=Rgx%I04NRjRv$P%eY^^?t(Vc zQ#E@V$42sSclb_iTN^h|9RZqH%)v=03T7bL8E_r^2Et-~&_FOf2JYk6R(>Oq2s_F; z9GOKB59C5nHckQW&{n_Ag#4id)8?N(PWX~VbOt!OFc~_%+(mr1tu8KVda9a4Gt;7S<&XPkMCX m*fjty^hn#r+*fG(E3Awo8W8@!~J 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 F{|DQi#LoZ# diff --git a/functions.c b/functions.c index d19189c..c1f7c49 100644 --- a/functions.c +++ b/functions.c @@ -42,12 +42,7 @@ void FUNCTION_Init(void) { gCurrentCodeType = gSelectedCodeType; if (gCssScanMode == CSS_SCAN_MODE_OFF) - { - if (gRxVfo->IsAM) - gCurrentCodeType = CODE_TYPE_OFF; - else - gCurrentCodeType = gRxVfo->pRX->CodeType; - } + gCurrentCodeType = gRxVfo->IsAM ? CODE_TYPE_OFF : gRxVfo->pRX->CodeType; } #ifndef DISABLE_NOAA else @@ -77,108 +72,119 @@ void FUNCTION_Init(void) void FUNCTION_Select(FUNCTION_Type_t Function) { FUNCTION_Type_t PreviousFunction; - bool bWasPowerSave; - uint16_t Countdown = 0; + bool bWasPowerSave; + uint16_t Countdown = 0; PreviousFunction = gCurrentFunction; - bWasPowerSave = (PreviousFunction == FUNCTION_POWER_SAVE); + bWasPowerSave = (PreviousFunction == FUNCTION_POWER_SAVE); gCurrentFunction = Function; - if (bWasPowerSave) { - if (Function != FUNCTION_POWER_SAVE) { + if (bWasPowerSave) + { + if (Function != FUNCTION_POWER_SAVE) + { BK4819_Conditional_RX_TurnOn_and_GPIO6_Enable(); gRxIdleMode = false; UI_DisplayStatus(); } } - switch (Function) { - case FUNCTION_FOREGROUND: - if (gDTMF_ReplyState != DTMF_REPLY_NONE) { - RADIO_PrepareCssTX(); - } - if (PreviousFunction == FUNCTION_TRANSMIT) { - gVFO_RSSI_Level[0] = 0; - gVFO_RSSI_Level[1] = 0; - } else if (PreviousFunction == FUNCTION_RECEIVE) { - if (gFmRadioMode) { - Countdown = 500; - } - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) { - gDTMF_AUTO_RESET_TIME = 1 + (gEeprom.DTMF_AUTO_RESET_TIME * 2); - } - } - return; - - case FUNCTION_MONITOR: - case FUNCTION_INCOMING: - case FUNCTION_RECEIVE: - break; - - case FUNCTION_POWER_SAVE: - gBatterySave = gEeprom.BATTERY_SAVE * 10; - gRxIdleMode = true; - BK4819_DisableVox(); - BK4819_Sleep(); - BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); - gBatterySaveCountdownExpired = false; - gUpdateStatus = true; - GUI_SelectNextDisplay(DISPLAY_MAIN); - return; - - case FUNCTION_TRANSMIT: - if (gFmRadioMode) - BK1080_Init(0, false); - - #ifndef DISABLE_ALARM - if (gAlarmState == ALARM_STATE_TXALARM && gEeprom.ALARM_MODE != ALARM_MODE_TONE) - { - gAlarmState = ALARM_STATE_ALARM; - GUI_DisplayScreen(); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - SYSTEM_DelayMs(20); - BK4819_PlayTone(500, 0); - SYSTEM_DelayMs(2); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; - SYSTEM_DelayMs(60); - BK4819_ExitTxMute(); - gAlarmToneCounter = 0; - break; - } - #endif - - GUI_DisplayScreen(); - RADIO_SetTxParameters(); - BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_RED, true); - - DTMF_Reply(); - - #ifndef DISABLE_ALARM - if (gAlarmState != ALARM_STATE_OFF) - { - if (gAlarmState == ALARM_STATE_TX1750) - BK4819_TransmitTone(true, 1750); - else - BK4819_TransmitTone(true, 500); + switch (Function) + { + case FUNCTION_FOREGROUND: + if (gDTMF_ReplyState != DTMF_REPLY_NONE) + RADIO_PrepareCssTX(); - SYSTEM_DelayMs(2); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gAlarmToneCounter = 0; - gEnableSpeaker = true; - break; + if (PreviousFunction == FUNCTION_TRANSMIT) + { + gVFO_RSSI_Level[0] = 0; + gVFO_RSSI_Level[1] = 0; } - #endif + else + if (PreviousFunction == FUNCTION_RECEIVE) + { + if (gFmRadioMode) + Countdown = 500; + + if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) + gDTMF_AUTO_RESET_TIME = 1 + (gEeprom.DTMF_AUTO_RESET_TIME * 2); + } + + return; + + case FUNCTION_MONITOR: + case FUNCTION_INCOMING: + case FUNCTION_RECEIVE: + break; + + case FUNCTION_POWER_SAVE: + gBatterySave = gEeprom.BATTERY_SAVE * 10; + gRxIdleMode = true; + + BK4819_DisableVox(); + BK4819_Sleep(); + BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); + + gBatterySaveCountdownExpired = false; + gUpdateStatus = true; + + GUI_SelectNextDisplay(DISPLAY_MAIN); + return; + + case FUNCTION_TRANSMIT: + if (gFmRadioMode) + BK1080_Init(0, false); + + #ifndef DISABLE_ALARM + if (gAlarmState == ALARM_STATE_TXALARM && gEeprom.ALARM_MODE != ALARM_MODE_TONE) + { + gAlarmState = ALARM_STATE_ALARM; + GUI_DisplayScreen(); + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + SYSTEM_DelayMs(20); + BK4819_PlayTone(500, 0); + SYSTEM_DelayMs(2); + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + gEnableSpeaker = true; + SYSTEM_DelayMs(60); + BK4819_ExitTxMute(); + gAlarmToneCounter = 0; + break; + } + #endif + + GUI_DisplayScreen(); + + RADIO_SetTxParameters(); + + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_RED, true); + + DTMF_Reply(); + + #ifndef DISABLE_ALARM + if (gAlarmState != ALARM_STATE_OFF) + { + BK4819_TransmitTone(true, (gAlarmState == ALARM_STATE_TX1750) ? 1750 : 500); - if (gCurrentVfo->SCRAMBLING_TYPE && gSetting_ScrambleEnable) - BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1U); - else - BK4819_DisableScramble(); + SYSTEM_DelayMs(2); - break; + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + + gAlarmToneCounter = 0; + gEnableSpeaker = true; + break; + } + #endif + + if (gCurrentVfo->SCRAMBLING_TYPE && gSetting_ScrambleEnable) + BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1U); + else + BK4819_DisableScramble(); + + break; } + gBatterySaveCountdown = 1000; - gSchedulePowerSave = false; - gFM_RestoreCountdown = Countdown; + gSchedulePowerSave = false; + gFM_RestoreCountdown = Countdown; } - diff --git a/helper/boot.c b/helper/boot.c index 5ffbfd0..f755bf0 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -74,6 +74,9 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) #ifdef DISABLE_VOICE gMenuListCount--; #endif + #ifdef DISABLE_ALARM + gMenuListCount--; + #endif #ifdef DISABLE_NOAA gMenuListCount--; #endif diff --git a/ui/aircopy.c b/ui/aircopy.c index 85ba8ab..242769c 100644 --- a/ui/aircopy.c +++ b/ui/aircopy.c @@ -46,7 +46,7 @@ void UI_DisplayAircopy(void) { NUMBER_ToDigits(gRxVfo->ConfigRX.Frequency, String); UI_DisplayFrequency(String, 16, 2, 0, 0); - UI_DisplaySmallDigits(2, String + 6, 97, 3); + UI_DisplaySmallDigits(2, String + 6, 97, 3, true); } else UI_DisplayFrequency(gInputBox, 16, 2, 1, 0); diff --git a/ui/helper.c b/ui/helper.c index 6cc64f3..358e558 100644 --- a/ui/helper.c +++ b/ui/helper.c @@ -217,11 +217,21 @@ void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bD } } -void UI_DisplaySmallDigits(uint8_t Size, const char *pString, uint8_t X, uint8_t Y) +void UI_DisplaySmallDigits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros) { const unsigned int char_width = 7; - unsigned int x = X; + bool display = display_leading_zeros; + unsigned int xx; unsigned int i; - for (i = 0; i < Size; i++, x += char_width) - memcpy(gFrameBuffer[Y] + x, gFontSmallDigits[(unsigned int)pString[i]], char_width); + for (i = 0, xx = x; i < size; i++) + { + const unsigned int c = (unsigned int)str[i]; + if (c > 0) + display = true; + if (display && c < ARRAY_SIZE(gFontSmallDigits)) + { + memcpy(gFrameBuffer[y] + xx, gFontSmallDigits[c], char_width); + xx += char_width; + } + } } diff --git a/ui/helper.h b/ui/helper.h index dbd4353..213b149 100644 --- a/ui/helper.h +++ b/ui/helper.h @@ -26,7 +26,7 @@ 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); 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); +void UI_DisplaySmallDigits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros); #endif diff --git a/ui/main.c b/ui/main.c index 1d86942..8fbc57c 100644 --- a/ui/main.c +++ b/ui/main.c @@ -116,8 +116,9 @@ 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 (gEeprom.CROSS_BAND_RX_TX != CROSS_BAND_OFF) + memcpy(pLine0 + 2, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); } else if (!single_vfo) @@ -169,7 +170,7 @@ void UI_DisplayMain(void) NUMBER_ToDigits(gEeprom.ScreenChannel[vfo_num] + 1, String); else memcpy(String + 5, gInputBox, 3); - UI_DisplaySmallDigits(3, String + 5, x + sizeof(BITMAP_M), Line + 1); + UI_DisplaySmallDigits(3, String + 5, x + sizeof(BITMAP_M), Line + 1, false); } else if (IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num])) @@ -179,7 +180,7 @@ void UI_DisplayMain(void) char c; memcpy(pLine1 + x, BITMAP_FB, sizeof(BITMAP_FB)); c = (gEeprom.ScreenChannel[vfo_num] - FREQ_CHANNEL_FIRST) + 1; - UI_DisplaySmallDigits(1, &c, x + sizeof(BITMAP_FB), Line + 1); + UI_DisplaySmallDigits(1, &c, x + sizeof(BITMAP_FB), Line + 1, false); } else { @@ -195,7 +196,7 @@ void UI_DisplayMain(void) String[6] = gInputBox[0]; String[7] = gInputBox[1]; } - UI_DisplaySmallDigits(2, String + 6, 15, Line + 1); + UI_DisplaySmallDigits(2, String + 6, 15, Line + 1, true); } // ************ @@ -285,7 +286,7 @@ void UI_DisplayMain(void) // show the main large frequency digits UI_DisplayFrequency(String, 31, Line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); + UI_DisplaySmallDigits(2, String + 6, 112, Line + 1, true); #else // show the frequency in the main font sprintf(String, "%9.5f", frequency_Hz * 0.00001); @@ -346,7 +347,7 @@ void UI_DisplayMain(void) // show the main large frequency digits UI_DisplayFrequency(String, 31, Line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); + UI_DisplaySmallDigits(2, String + 6, 112, Line + 1, true); #else // show the frequency in the main font sprintf(String, "%9.5f", frequency_Hz * 0.00001); diff --git a/ui/menu.c b/ui/menu.c index b136962..d588895 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -34,22 +34,22 @@ static const char MenuList[][7] = { "SQL", "STEP", - "TX-PWR", - "R_DCS", - "R_CTCS", - "T_DCS", - "T_CTCS", + "TX-PWR", // was "TXP" + "R-DCS", // was "R_DCS" + "R-CTCS", // was "R_CTCS" + "T-DCS", // was "T_DCS" + "T-CTCS", // was "T_CTCS" "SFT-D", "OFFSET", "W/N", - "SCRAM", + "SCRAM", // was "SCR" "BCL", "MEM-CH", - "B-SAVE", + "B-SAVE", // was "SAVE" "VOX", - "BAK-LT", - "TDR", - "CROS-B", + "BAK-LT", // was "ABR" + "DUAL-W", // was "TDR" + "CROS-B", // was "WX" "BEEP", "TOT", #ifndef DISABLE_VOICE @@ -82,8 +82,8 @@ static const char MenuList[][7] = "D-LIST", "PONMSG", "ROGER", - "BATVOL", - "MODE", + "BATVOL", // was "VOL" + "MODE", // was "AM" #ifndef DISABLE_NOAA "NOAA_S", #endif @@ -93,12 +93,12 @@ static const char MenuList[][7] = // normally hidden menu items from here on. // enabled if pressing PTT and side button below PTT at power-on. - "350TX", + "350-TX", // was "350TX" "F-LOCK", - "200TX", - "500TX", - "350EN", - "SCREN" + "200-TX", // was "200TX" + "500-TX", // was "500TX" + "350-EN", // was "350EN" + "SCR-EN" // was "SCREN" }; #if 0 @@ -293,7 +293,7 @@ void UI_DisplayMenu(void) #endif NUMBER_ToDigits(gMenuCursor + 1, String); - UI_DisplaySmallDigits(2, String + 6, 33, 6); + UI_DisplaySmallDigits(2, String + 6, 33, 6, false); if (gIsInSubMenu) memcpy(gFrameBuffer[0] + 50, BITMAP_CurrentIndicator, sizeof(BITMAP_CurrentIndicator)); @@ -628,10 +628,10 @@ void UI_DisplayMenu(void) gMenuCursor == MENU_T_DCS || gMenuCursor == MENU_D_LIST) { - uint8_t Offset; + unsigned int Offset; NUMBER_ToDigits((uint8_t)gSubMenuSelection, String); Offset = (gMenuCursor == MENU_D_LIST) ? 2 : 3; - UI_DisplaySmallDigits(Offset, String + (8 - Offset), 105, 0); + UI_DisplaySmallDigits(Offset, String + (8 - Offset), 105, 0, false); } if (gMenuCursor == MENU_SLIST1 || gMenuCursor == MENU_SLIST2)