From 71375f31b216108a8d3b9f0be48b58c33e5f35a3 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Sun, 17 Sep 2023 15:36:23 +0100 Subject: [PATCH] Bargraph level resolution fix --- app/app.c | 2 +- driver/bk4819.h | 33 ++++++++++++++++---------- firmware | Bin 165092 -> 165176 bytes firmware.bin | Bin 48812 -> 48844 bytes firmware.packed.bin | Bin 48830 -> 48862 bytes misc.c | 3 +++ misc.h | 3 +++ ui/main.c | 48 +++++++++++++++++++++++++------------ ui/rssi.c | 56 ++++++++++++++++++++++++++++++++++---------- 9 files changed, 105 insertions(+), 40 deletions(-) diff --git a/app/app.c b/app/app.c index 783a60e..b87fbf0 100644 --- a/app/app.c +++ b/app/app.c @@ -452,7 +452,7 @@ void APP_StartListening(FUNCTION_Type_t Function) // help improve AM RX audio by reducing the PGA gain // - // I think the solution is to set the RX AGC to limit the front end gain + // I think the solution is to set the RX AGC to limit the front end/I.F gain // // LNA_SHORT .. 0dB // LNA ........ 14dB diff --git a/driver/bk4819.h b/driver/bk4819.h index 5438026..a06c5d6 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -24,30 +24,39 @@ enum BK4819_AF_Type_t { - BK4819_AF_MUTE = 0U, - BK4819_AF_OPEN = 1U, - BK4819_AF_ALAM = 2U, - BK4819_AF_BEEP = 3U, - BK4819_AF_CTCO = 6U, - BK4819_AF_AM = 7U, - BK4819_AF_FSKO = 8U, + BK4819_AF_MUTE = 0u, + BK4819_AF_OPEN = 1u, + BK4819_AF_ALAM = 2u, + BK4819_AF_BEEP = 3u, + BK4819_AF_UNKNOWN1 = 4u, + BK4819_AF_UNKNOWN2 = 5u, + BK4819_AF_CTCO = 6u, + BK4819_AF_AM = 7u, + BK4819_AF_FSKO = 8u, + BK4819_AF_UNKNOWN3 = 9u, + BK4819_AF_UNKNOWN4 = 10u, + BK4819_AF_UNKNOWN5 = 11u, + BK4819_AF_UNKNOWN6 = 12u, + BK4819_AF_UNKNOWN7 = 13u, + BK4819_AF_UNKNOWN8 = 14u, + BK4819_AF_UNKNOWN9 = 15u }; typedef enum BK4819_AF_Type_t BK4819_AF_Type_t; enum BK4819_FilterBandwidth_t { - BK4819_FILTER_BW_WIDE = 0U, - BK4819_FILTER_BW_NARROW = 1U, + BK4819_FILTER_BW_WIDE = 0, + BK4819_FILTER_BW_NARROW }; typedef enum BK4819_FilterBandwidth_t BK4819_FilterBandwidth_t; enum BK4819_CssScanResult_t { - BK4819_CSS_RESULT_NOT_FOUND = 0U, - BK4819_CSS_RESULT_CTCSS = 1U, - BK4819_CSS_RESULT_CDCSS = 2U, + BK4819_CSS_RESULT_NOT_FOUND = 0, + BK4819_CSS_RESULT_CTCSS, + BK4819_CSS_RESULT_CDCSS }; typedef enum BK4819_CssScanResult_t BK4819_CssScanResult_t; diff --git a/firmware b/firmware index b75429de5a70df29d51656e78a2d8acbfa748223..df10284f80da9609ba61be3f3f92bc491a7bd3a6 100644 GIT binary patch delta 11102 zcmaKS4P4Y!*8e>}W?&FeP)QIKW=0epP+kAu4_T|qCDbgEoED6(#r;IFW}2+ZN^$zW33J_4D)=?z$Eqg{~!Du@BN;8@44rm zd+xa}zxlef%gM*PY>%gPJB;SBFTJjmkY33j;h+3z@?X606h@dPTZFQFQqFkcy_(BvlQk?VMTWFa^CC=0sDx}D@zKH6GDuZi& zN4m)QWFNW^N^kM<0rW-ax-bRJ>42nO-6$vSE0AL zv4+{yattp^l!Xu2#pALRVkH=d3YyOsgwNj5Xz=vzB+^!Qy-pb zA!Co%+cecZQQt7Bf1Wi3?Wm0(v(V?p8cb3IdMiLTThMbZC=WCqbSzZG+xU?rvc!m@ z1Ac$WL2B=6~-`?5>=i3OMRkhSpFr{ zc8*V`LT!P_>w<2tKvpU8GVpNVp`h-dZlGk4-w-GlW6eYz59*JSeo-bmoCR(LB>`VR zDu&EJemGwnMxW71=X)viHqj5fC5^JEhTlztC#~jdY1A`01#pKpUBJndo82%fLgCiUz?*b)ZyG4JV9&#yM;q0|9sN z%VTIJ{SVVvYM`Ocb7Lun=sCVV4l6yK`(;zCRlLlMmd7En9wgI>u;CwzG6d(y^gjg> zTZuiTcd^rPv>S+eso;Ge;e^*`(~ofNl{rXy@`7AS=>AHJFFqnk)hFH&ax|rS74Oca z(O7zQxiIH0_U2NI*3ILL&ZBbb`S0dBsQFd?FFptCASjRB4YtwQHH*RFW8Z3XHiVv>uK3n`U`^Ie5Bf?{}g zA=&5(e_2RgdenJw3LVr2pGJF8`W>VqQ^Kvtk}&NLyGX@J(zs$ege39B=@f;ve0@57 zLGSQKGbk=W+DV%}pa+m&3A!J2A4qf(nRbqxN%uuccV|G--6j-me9rs zim1u2r|2fe7u}>Y(NFv(5M=_oz7L*^DGDT$SIu7WQn9>#Td&W7#XRCJa>VYbQ0mA> zKHvG*d_Gmx-L~y$cWY3&wo~VNj6c2$o7Q41huXbbJ(j~1Z*MGpNv#l{}=EG#vZ#_D>GUo&~elAU>9 z)|Hr)amhrTtHqi9d%8e0kNYj6-U-sx5FBKNg7VSzag1O-(!TI_8R!5QAc>0>(FR(^ z7Z%YL|IX)MfLO^A7@xurl*SWH=gWV9RdYCG85ZVH zwk!kc$Av)I(nE1KrS^gjAYYEO9wZTC`-@8b2YCrT5@ec?zl_w-T`4!xAlLWKSC>%& z4Hn-PKay~DKPcei;zwhlnT$uwx}Cj$q}UN7y+&m)jmr;mrTKGXkW2QCDKMCfYIJ^! zdwH9bj{?`^FV92{`Yxxpr{_RQCMX4z2#Nrm>915Y(sWN8PeJ_q;;z6zlcWc}EwiP(92m7OgR96AB}WQ5n#hslD-8PIpd|is6(xk$dMT-Io#tA{-S4AU$B$_{*Vyci z^qp%A?4%OXo4wWaJtBd8dJmhNir%~`#cUZ+sm1!bmp@%l%pXOvh%9QRp7n1P_KI;GBY z#iR7*FE!8eN(YVfyN8T=7aw!bKYux1kApvr;vMVA9A!mz1+18fF8+m@vPY(J%{sVG zF<)OtNBsMt*jp3`Y{zbA)q2@0w}ST#S`D7}H2p1y%* z>h~g6?c$0J^d?>Ar5kCnal3EX#NVwntF`ITC0&fO?%ya{)f1-x<-jn+Ts@8Z}dG};H<{=dtdFK?n1`sY!5EEhdSAJeNm zcr&HzXTcoFykIj;3YA!X0u`$G*k;O3U)^-Ak<#?mPbz~&PBrmF7P zx`I_drMU+2GbJ=OVzw`2BxQUL&y-3LFY&h}loy`tOI6{fcom*XsF+nsx!r<&gE4KR z{4C|;l2S^d8(dY2{rF?PQc8onzt%=0j_3Vc=dKn}6>NN*riN~5OHo%Ly@J;~PO-@! zx0#FQ^flRO_~lu2Da7J#uvg14T~#z-+LY;q22&SfirREE$xg0Q{MO?%H)>1UC2SB+ zsWJH&RNEM#ujT9Ra<5aLwEn>pSO}R@=5RG zwwPiyII1qf)E(^2oUjdth!33CwvnDFpWRPTvO}cz69;`wsR^L*=u!5npP-2xn8nHM zpfu3!D4&Hi3~3B#Hu7@$SPGg7Yyzc#76YHgZYF_h1h9kMT>;5>0gGXFi_=YG7^P!_r~ zxQsC3pD+E*7Q4ide!-z7tA^{BXvA`LwepSpZzv-=Md?k|)^#c5decM6s_vUhDJsZx z%DM@h6CTvByKrftuufP@zF3teH>RlVR&sT1!3}%IHssbf zhm>h*E9TqnF7z18c9Yo0qQc7G|3+6<_K0!x9hQ&=ec489pJMn#n%m(X<@v5L0=_9O zveBd4*Tr;8s^k+r7aIdjOlVRZXyP_{ESS`=@M^6{AjtN)H+m9(>1Wz6{W##4Eni?9ccN(pgoNyvhg^UEIOh0;eB07Kj)53Q zSz~aSX3^Kpwgo-?%sjdDcWqSWu<{_gu55-i_7P?2StlM~uX}iD_X>lGU9*2;p{;NF zq7N3Gj$INof8oR+i?04@HT`!o#04JZ7#Q}l=(yLIsC@2p&v;w+ow~9<52dT1AynV} zNZCAPve;iSnpL8@*Y0zhJfoMqh67)Ct*&gSU1oA@t!5clEA}v}6UIE$iSWQ~4`D)U zMe-ZQVQ|i1@M0e(s4l#}8!h0qw&=O#N4LuvwW5Mt!-@J-cNg9szW<2Ke>OcSFUf_ zvl9pGH+b_d9ANL|BS<1u^CE0OFWiIqX}wgw)weG147;bq_guSGT@sd(j$gho{w@{>ESmtH8Ex+Gd^&%AUB2Qr_t(CRZ<2=& zs57*e@6?xvjBax``0lfmYf%&s-cdnk-@UMSgD|R4e6bXPR+#zLc*+ zxyjPCZd^Xb;4>tKGz7}0`pfMoH=}$c%Ikksp6@T8kMbdw=(=>j^jAi0If zjZ1D@ec^k};CVsC*eB(rbOsAl4<8es#A7Mt%dlj_uviM1gE2Nm>2 zkcfxd=C-NioLappUYX&#UwbJzsW!-Dw9fCRTo=4razbr9_UZmsLyB^J<_${LHwcck zh5>)%)wN@XDcaf%jCZ~IjtWuMNZ@L3a0l*T?FC%rU6{8pHx(y}-X_G^_$K#LE%#Li z4Gb%AHYO>T|9&O6qaiqm{aCnf%oPGeWHxzdDh&T$`ITBd0X>> zYWK}LUFmZ#^x3P$iiwzOxgjTX;S>95T4aV7b~b57oTvSZ^^e^98C<$%@uX+4@r?5} zxo7i(&(PTJ7hB(K95UHr{bY`YIjiTlpF!aLoEx8^+pHrnHGAPR(~!z@%PORKpr?`F z2a>=y7g&PfJxGf|JHVG$9C5s7k$)6v32%B9cb9`a;W?VLU^80D_VFfcC#p9hO*=BX)NmLLR9?wkTwAMZpc?6pNxDo^776YiF`I_I%py2Q%t*Oaf)b!`Z@8We8*v!c79@YANe1yqRA^G90 zU*Mh)IIGK0WtGZGmKD1bhA9KdLsUrBvWfL8Lx!f4F~p zdfibTuRGLB@m}|E?|9pMm8woh)9_aJb1k~08+8i&_j&4{so%KdCW|B3n3b=y+*0p$ zdpsj;WKs!z>`m@O?}!4k|5H`7`z23;J>8Ffs%>_^*P3Aeq0#NW?%@~zOeRNmt3?e< zk1ZZNAjs0c&g*V>Xjg60Dxi3$7=#vA}F^bARMf_`Z+=75g@KHTKJQyPclCw$~cd zix-YRSJ}m))d$D7y7x3i9_aNY{#YyK+^kc5@Y<7;3A2ew<%01cO!_$p zFZ^sfL@_aPot7Ou8&OhT-SBFbBd^BWosS%%*L&ox?r;}z8*v{}?SF?Mv=;Ok=mO|J zAQ$KcNXitVY7i*oHRnSo=q>G*jI_+VQ&JY->(SH+6K_xMfX?Zs=*fx4wWC3FjgJLs zaYp@Nr9MP2_%f+{_#>sQ?bbEik8{8~&(~0mzUD}smQE!+L8lGF!}V%O&hud%%D(4! zb=pj-b;jtm?vartSS9U$q;x@8W6rEwv|-)wHo0_w_FSaA6b6dF!!yV8&X@!UiIkVV z0KX0VGi)8GInYPVK=3I0O&X`P1YP~pKiZd-GQ@KeJA`U;IDCgZT}-B z*nWavi`V))X6^hn->~Z@7CFV8u(Z?d`E_|jCoJVTov^h3uoIT@)_uQfpQhG6eUl*- z)|LGlA2{)Ae44Ke)#B2&{-)ZP{Wq&gze_q{5qoAoKV;JSN7ny_pU>7|T3lrLvp1Vd z^}p~MuyZ30{F*(y6P8{wJ7H{EzXo@y0^3#K=A3fP(gKRUom zB{|NelAPfRN#I0CB3*}WHYvo5j*FWisfP|rp#6{33b1vDc~q)4l|J z8Oz&BXDo4{GsY>tGuG4y4o%nM`b%7I|7*9H1gZe84d&<5wV|3Pm_J9lxIf;mmqO17 zRM4mxNY zp2lM`wW;{U#?nkgr5tX^)Ut8yi^@-f0{*AqNBOB<*4J;9G>X;ZY= z7x`=!7L%MRBQ{Q#u0J$rah?X*JhmL)JuY zMiME{&;cFaL#2hBl>>L^+G$8pQS#7Rnxn;OcxrtyN1KAFY(_1b%vre*mCQ?XF^AcF zDi?KnJNay`_9*S(qC6NbgKP3&^<8Wouf;{lVGfSr*Kr=qKX@zdHT=kUZLX$2%xA}I zQzGS?MY~3%#>8MR<*Zv_>$SY^RwyQ)c>?+x`Y2V(SERI-trM^ZUqIXTDJQiDrE&-h z$T|pI!=)3TOeTj;gx;e#Ya$F{<)Vq2BhrSt?dBpip|4Vfd_^kZ$$k=?Nq!v=Fy?-g zzQfi@*d_D$$|O{}m1FWDse!X3!3Vy4jC?cKhv?ov=tR-QzPZA zC*T5yz>eTk1=`1Sj7tmQH@9Jv&4hU*5a6o;P9)8R(CiE^oq~>D;!;U!xI&V}Tr&l_ z?C0hw(5!@ureeM~^1i8v2JgaBfu(aP0hidnv|GK0M(P@H4quVl2YK)`NJ?VsG)$bF z%>o)fHxMsPyiZC`^C?L#bHg-v<5Vn4IHBJ?`V3Mki({s1*^X`4WzT~xia!W8<-zGY z@CM+mI3NaOGw@REuJ(@d!@%;jGEja3I2T5^v!nb2;NhKgI}6;u6TUJ?Ig}hW0|LCL zFr|}U#bTj)u?i&uiGoSM4TyrXI`A0a#cQEN2QCEe2PuKs@Z@(TfkC_vEN{Gl^?ng}U8g?3k#blOdzoKHd>K*~4z;f@S*g*$a;vXJ zxfp2xa9zL%C?5`7s@k{E9!hhl0x+6kWf;caU=FbSjHO*6P1%9vhiCx>Hv`MZ>;T>m zY(o%E=}_oZVEIX4p!_Z1nVn|w9I(83v>VY8q%I2sBa~^9z3;!ka{35ZjgoMMdjOwr zJ38nMT#A*{UZ2!JVEK(1X5HUD3s}BN_w{2^Gl1ob;|_iM0OtZ9oQd!t@@`e6mV+VB z8Uc+T0si=&n~qunJRBov?|{@HV0nrUOwmcFezxWq6g*?`y^9vFa&CA;yIW_NJ#p$? zGiJ`TIvdw(%L!kDwcc_Z+JGJPD4*J(#p&gTuC;t&gLWu%-E=q()Va>38?{*dtl64+ Umn$}EW_`>CO)cUtH)uWo7o{nNY5)KL delta 10951 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 diff --git a/firmware.bin b/firmware.bin index 2409f83c9139249385653313d2841b3c6b159132..e906558434abe6f6d9b0de33a8579d6625fe7980 100644 GIT binary patch delta 7060 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 E1FwYntN;K2 delta 6972 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 diff --git a/firmware.packed.bin b/firmware.packed.bin index 787e1eabc77f03a3cf80fd9f5229815d5b3c95db..533fde5090cc7235d8e38d5fef628edb8cd13aad 100644 GIT binary patch delta 16009 zcmYkjby!sG7d6b#DJdN?)KHQljpWc>0wW+L3^9a?)QBJ;pu|CtkPZofVWb9WNfiNg z01+ug5ra;F@8&_g;7m@vMAE{z;UfG#mf!tC+xOe*BCRD3?0 zHVifb&7J=a>&6eTqe)@%csVXJ81tVnhobTCc2x*;$s8uohZTWOAr)cDg z_?3Ttj)kv5C=o86^9Cx{6=dMY>CSqSPW5I#jhfrt+$G`s&H2nwhKK;e#Y3HJj2&ak zTEBX^BED0E2S$^NPg?);Kj`(2_Z1dB3! zF#^#@h*8`_>a?JsOA>PDa>QpnZ4=lgy$pHQU4B?eo1RYCw!HOXdNkNvCYU8XfLoZUq@wrPsj3*-HSfFf4q9B2hdAA$9T8%uq z;g0) zB}1Vm-V-tcQAo=OuvBKx{luwP^X$H@PLg?KZ=I5Tc_8PAacHwp34}W!{Yg;n#FT=WD54FxVd`UtR?k z4t5Kq$)0ORJ+U$dRTao$N$=#+E%0%BIX> zAT6Y=puojs7?rDhom@<_@^KH!y76xyC`-=`x1(9;p+YNZNfzEfQIk|UV9_wE*2C@S z=!dDx&nv`Qqpu=8N)sfmn|8JoBeFRrW#Bz!OiQcd;617kPDuz>2z^wNggwH;E(gGb zj-@SGr(C>kJCD!K!4A%GmR4yO!xtiGx1;uNrcuoJ3}povj0_r35r8p6-&BMcwuo-C z;&!G{VmS7cFzCFhJ2OgKigul%|TiaJkDg* z)WuhqSj+ZTq{rhuiK{)x#R7=2F^0CI6~s6IVoU+KsE0183&EP8tLh#w1E^Eo28M>1 zHD+Kj_%#hK7_1MX&=P}fLeg41MvT=M?p&5as(L49E8nO5%Hx1kq$f_)6yt#{A?>j4Wz z9&Ae;(nWXB0V?2vGE>f|zyaOY`zyHI9-Y4lN8By}e+@ zM4b!p91ifz0hB-o3P7p>U{oW8fb_jZTENar{;(DC1(eASpr0)SwF!1bjtoO`Mzstr zyH3<1Q-tWFv6D(NXw}FaR*W|>rXq!vK{lrPFa;>r)Y(W25St$4TJvLOts{v0_cg;8 z;r;-;AlD~G#9DzBk)G*E5?3wo8W*J;lWG9d8t@uCVCEr7t%)O>Zni~~di)xsVI~I? zfr88~!K$GOGZO%a4YOmQ%zw>GNX0n~h_#L1MS7AxlDM8ld;-u^3m#Ps9yJHh^cbMY z$AN}80JU3P0uuk%>O3q9qOhKVtw3|u0wOJQnYAt;JS0fi5I`tDNNb%ou~rv6Qxk;u zY}HmI7ZS7yWnNzp>4^t#iTrCT;t%qo2vyi9z*M0bn>7tK@Bhh0B~Kw0#Z_l33`n#5 zr&#!#Z71scAkAOjo>U^!E!7j2zrMdZ4iopG+FBR062RU*mmMjOhuOV`!Gxf<_8w{x z$2!?twu~(b1M21Z(u;wHKHh^wfTLD`qcNcDz5qx4pmp2>IQnR4g}6W4aMM!&@=5e( z!lNBlVN5N)(r$gn_ukLZZck=OHda8MSNAotH=L*~LBS?QPbvd|df|cib^tzf0n~&P zAso*5Fa%hi>umTU64b~H(DW^k5*bh*M zaig)@90aEdf_nslt1jeM761TK0RZcQ7Ex6UBOt4%Yo;!iAgdVY@wF zgivn%bd$Z!=qFh9jO1WVvK4QU!j;aI1B|) z|4fi+O`!f~jJ*Q#*8ur?#=$tD-<~O4wSbqaiE1@ERY&n5Qq&5Eu{4xBwpmIVU~EH+w41lK8zkQ z<;Rl9LM%A5jFBw`Ofd)T_n7!$QkO5i5U``U~;w*WiL9As^ za3Cw}9&|r&ipB}ZihG@m>o(*Sqy<}tDuT{h2MtCN)&X6@1i=!a3XHfUk25$~qcy7Mh~2xDJ>=F zMZdwR*+7LRKrgbVVcz|xyiI?m>t;ahS==&HP(ZO`fj+teJezxx}IMo0b#}p8s*}mJh{0aF~mD+$|Xx^MC!Z9hRUbZpmBK!c269Hg2=RbRdfG zNQ%~+9_w%T`{BUYKEe;(c?@Gdll*0HimTx4q2NDWLjjRIFfQmpyPd<7EeYKvSg*wSf1J2PfWLhUi#G-sC62>>)7ip5^0 zNdpi%^F9qwFZMk{InZB4z<^lbV%|d~cZJTces1ipevaY32b%pW(Cl$QY5Jj=yON+e zP{h`rKl8|n4vZ~l&yfLkP7Ui;>3|=I1+DBQcvua{QFiz2P}{u+fvKQDJb=XGBpF12 zmJS2Qpa!Z`1-ZxBP@JwXW_v*Gaow;_(4BZM!O^M1r%O`E!F$d5Y)%>>Te;$|Zuz5Z zo5+&HO5nGIL|LHIcn&^1SJ2E|(<<~e;UA+1S+fYXluT~7!3}%6YoL6iAb6=0e%ji^a$!r)KZZDB-iZXWj5zAnW=u(T?0T%d;~-@*^LAn<77+0 zpO%7d8{mlR;@%q>vPVX=fmjrhjN}@`@hRHA!yZmIF1YI6TdsN50pt1rzPtstbTnat z$PrdZF4=S*cPUt~0k2E%2CT@+gr@iNTX=ews{?qgXtmN6b*PsPIwBY61 zXNH8r-HM&$>>EW>Wza;j^LgWERj&!-<1Nk{=e$EMlf316w9xej(oT5}Q-l7doY(yU zx|<_l*aN_@x4?mL0uy>Jhy+`^U@O823_14=`q_N0rB&L$$klWIrw?e)&ai_vpxVD+hA-O zb>^-q>_ry#fm4~dYD*CWB%x=T{)h&@G?MoVxypE~gUwd?#+bcnE&7ibaHyoFN2P@K zOG@SAxW&BEW9!c~dY4+2Xf$$YR!a&G)Tc?`k2;?(7Z#C1bv5ng6Q<*a1*$jA2j1^5 zbMGK79A#QJ_4WG5I#h@~(3z3~M$n$yO2SL%Dbr-F;3{Srnv9R#;k``)wkmVT%^3`?eo!H+(3AfIuc zcY0R!ve0y0q+U4Bq2PLWHsLiD3v^3%iRntqOsNp|`OHGl7-Q!qs~RsKc?6ZQs}K7~ zMw{@{vYUT9?>?bO}f9Y!h<|TPg^tg1wN(8;Sd6D6Fp1ol7w)#<@TqE@E z`F!Jr43y{Bor~q24QoI51&KX(c0Ru}G3$^Q*XI`!oec4Z_gO3P>#7^%_+KzxHobO= zo)db4a0a#UGN1~iRvqMAsJcDKmVtqR!XS9hAO*h*<8S+skoyd1Wi3soId=on<68(&=d zJ9>omTqV5!lw;w#?*2+1`;M*o+eg9kb}MC9a6TjF*1QR-%?>X@!h>_OFgF+k%MQ36 zFI*wbZGGs58sB~L)#|eOd)DKOh3#`u+}AoDQ2U9^3Eso#wmTzGQD%CXZf*w?eIANp zo#PnA+nV`in-uj0%eG=NJTHYTa@S$au?Nk)*l0cFOv2SMpDi}Cy22ZhCfHR1xk5VT@V`hdoD6k%Q199?j9@S>$5x8 znFGuLcP=ep;%);6XagKzBcLJqGBIUUUt}Q$Z>s8X95L<26CIvIjaa4mw=&4`o$+X`vX^59i=lXGY&Ymed-wiLXEh;=i6#P@S~Y z&?UR)ts%SfnaMD^@PQZ7gtR`hOmC|P>ymIY3z_&nJuKf0=}g_=B;RW-7d%6PVtQs4 zy`g#yA$#q7O5^oq>=E^OgHIi?Aq82FG_p}Y8Ct0A-uEN!yzd04W<0PX%Ls~S)itzmVEGX*HF|10f!w;y!Zkq68pL>#-5!m;3VO0nQ;>y#Ssd>gsT<;r5=Wlil zllV6wuJEMt$fBSFPApc`h^#gWhNU@jCoVN(POr2!G4x=6a?3*b0y^4elo1vUZQjr8 zM*e&;4dSSFr1E}?B&_TV6-ug#=wwmCZJcBM(4w4Co+(0b2HL68*`I7HVb<=iKPrSp z$tM#%rgCg==fb-G}@Z|zcb=zk#YE;+~(7DY5p?~~=t7r@StVvlNGEv<49 z%(g_wuvK@te=PST+@3}2nrC?J%%zDw)oA5pU@batX3|sIAMu9#KwGs@zGzRvJ-NRV z&)c;1&4y>I+J(%6wrx*$M|v}T)l%!it$Srr`cGeDG8{Ki+6vymk2(BBjC;aACGvz$ zP@81>y?$3dO;EgvV-;G^o1w+xmz^lyh5kv+7Q;sJ=Gf$1{4St)uAoi9iu|(p{N9qf z-R<62R8~n8kD7!Uvj)S?&poj^?vb^0wh9J!Xs*k^wZagPV2PNefk)RsczP1hmoH%v4%`yfzYlbE;*=C zdsGYrpbi3Xl__|Kr8*fT3-V?s%S!4t`w2$1vtQ_E z$xBgGtSRN2QN`xu_ou5LHKq97?X7HJYxld-vdB)W3DZo9C_KPBGzQ-1CsOhLFr)}bvc z+tEVPiV5||F-dNc{Gj3BzIPH0F_MwRq1t?gV#`6!Z;qR^kloV339pSfXxlZ{S`!qYtxn=q5cE{2};0w@AL<#b@IHp}Mq z>%@Nfquq%onO1eGsVx0g6vx}QPrh1S_Ib~|U73IJS`^Qn2Qlu5DjD(j zeWpnRhqc89=yqL!gCI-{>T~dWp)nqJfuNF4?k`8|u%G*x6A8^d8b=c$0-Dp$JTuZi z>G*g>Fg7Pl+Euc0(EL;Tm&=@!`FLpNNq$m?Lc(ddTDdb$uX+DlQG5-Y;q%lcUjLRm zJ8^jDewjxof|-(T{2$|O!N|K;=(ul*#rQ`V&M8+!)H(}m&lNvCqoEq0;S4aPT^=OZ zkRMoE5qjWCk>FnV{Q1&|GH|6xKtlm=casC%@IAN#YJTuuQ3f;|tT<9TbjlE81KqGn zhM)7ZTP*20FpRn6MnKhrVGJd3#rwb&KLo?90GjBINzjhxz>QJ?j8Aob8D^c0upQr; zKJS12<(Vv2Xx2)d-nJ8~5P5O+Cn2@bGzco@j*8r{C-4W;>lFGtk_z7YGtwk2_RF6% zXxz5GuM;t7_vTfTYP}f8VO;_{`XcAyO5BA~3%givDeh9kum7Yu<5RS4l+BN;R<{|Q zAuMx%+!3kJVqAImR$r5g+tm&fF8I)*UwdjMlvt{yA>FTVMDh#!u+LKSYi88L8Wx5g zg{$nG`S54wI>ytK;+XU4ruaJ7)3<~St#!Xfp|4qekJJCdfM2_=n<07{n}57P zOgXz#y8|V}zOl!ee^pIo#pxp@pI9B>dZS5{3A5zhZg&u$7S_}&)I=A%A~L*RFA$oa zu2k5B5`IK{;)%Ik($u15mH9e$^OVGq;ssqE%IE9CyOcW1UzH~;M>VS-q{7m@Hx;=M zRevS3D|L<*tgqd)oa?r9ldR!4vYLZ-QxwKzt5K_1k~C6&Ys9bRRy5v}zo|lENhPdS zxOS#7w8iHQ=L=xT%9kfXUl>k$_0)<|IsUA;J4Xj@M(@G+IzN+NnF$+9dTi^2Fbg4| zI)hFU>@HdI7K2`Z&E1wlwM6Gz6ln3bHQeuEhf|Z7@F(!T{2^(xj5a~tpdPzQxnuLg z47<>%Q731oZWNx_UU&P(R-=$k%4od7I2>>6nToV6++8mp>v029;Ho2|qKi!o_zf4~gMuTB#OO^&zK z*@n4Ju-2N)upI$?Z366zNmZNr+^aaTe>B$!=BoO)FK1jJ6f&J&Q6>B!`7B{W?C)si z|FI}tLt1Qc%N+_et?5wJcCRKz+Lc^ojk!7`HU7>nDqUuug#Ro9^7G%hEN@%?%8{fl zx|L6LU7JooWsC>A#cO`dUX-72C;oM*1>Q7BPdEO(@7~|rsEp1@$6fCLdd)o*9A7tll z&&^?&J4OoW_~Wc?a^_SlH${t1$Xm26AFp@Z_x!nTpV1X&=U~Dt`tl9^EYXC4lJ7rH zh;cR}S>%arH0{RYLJlxBCHb@NAFxjFF}3P)O;X!Vc>}SX(6H1x5so;V90}L^FqdL) z_IvAZuQIk6^r)8?q%NA9gW;ioe`C?vd=G^y6nksuY^9^Y&&fU>3!eitbekhYWBpGO z67wz9+rdOMC2w2mPIGkrL$HlvjLJ-L75U$ut$5UJ))JK9!2*_;Vq+k(@B|FxM!|gh zAg$;^E&I9g*3reK!31Pq$Ay>L-X#K()SAzt7kc^IZ)6n0e8Gf-$dtyCKb#goBRQ?` zOpjmfxM(s&{GpvYX)R9LFHL$k>DM*8@KAxG@+*g4QGKDCidRMXFV>$M(c63tce$lE z|BT7~(DRuKeJ@sZQ0V|HbIwL2F<@%?8mx?Dyy<6qSe91T0S2u1b+WZx7+a?Q&ocJ) zrV|qw=-)jl6y+~>Kt2e+Ww(Iti(j@k^G0^TN>0g?wRa+<>)&WbE@~2$)u z)(5rxE=93&?Z!UOW&`Vbd|(r4u2v_pI8-`MNFUaXLESPWvB;6Q;Mb#oy*7;==$8$j z(T?a`xzWg; zDOp|}vWc;Ja_ZS1hIevC_7S(|1sy|?uoF%X0jFP0OozEfSoz?~z48MovIFFDMhC}9 znLOBtzdZFqFZ8*E41ROT@A4VECVX%lEP5t}?z=DWkB4Eou-*%a>0F@*Tlk4%4`$iBVpRANTCV;0HQ z9Q+FBI@FW3=B3i=Ht6zH6!~RMS4Uq#XYY4;bgKEwjbRZvZM}*EC;8l20-p;Q7@sY3 zMZmh-LuH%31gs2F01bbD6;-ulPsm@eV!++-#^#@`;WfdakRI&!z6FwC@0K`I%$%*^ z18FhSKs!&|8i~P z`nn!^hZ`|HizkyF#Pr?0aKRbV>XyEu{6b2zDQxkUcqOZ#-_jc-Nt_e$ygIVU7rT}# zD{FDfhC0(x;d_0lCoNg1V#!q^J7=M9=?BI=RmTPH_j=}Q^Mcx)zxdeo_rxzfnwIvX zSAF^Xn;T~7M8EzhyyNwG;ZH_1vYSPZowg`OVN2hseKW`91ia4g+}BMYMK#joWz{ch zU2J_ObNEuI?7R>K*MmgmOjdqWKd}*umz-%h;MbVFf*O(2y110uZ>8{R zZx)xG-FuAL3{>UT@6}!6H!X@v(QvR76SVcc==E0;f%AV`-gx21Rg_Eyvr}nA))&&^ z98%iqZs#NJ*$AXkV&^03FIMlA$tK<$2RAF-c8fX=xS`B!oe|(~kOQ{&Rc-!QJg~(< zqaAhi&nw?3)Lbl6U?4<boBdUCp|#CS`+YV)9M7e_wA&4)5pXX%qk9kh{NkVIv`HevTb^RUce=}pflxr7OmOFWh=D>yj+q#r%2TnOAtB}szdOS%t!G}7T=Vf z`}C_3YfO8h`iy$JX|8=nK7?zM;y#xa5MV%oQ3)S)J$BdDbuQf?3OwK3jolQZaD1Gx zsq-*I@KNv9Y`Rk;+r-!&CLWzg)p4vU2`+WO4`0<{l(#`kGJ0AXjr1DpylB&@Y z38j7#Z(EB7u-0@&hFw>1IqH7P+}AHXf0Hr@c8D+ilQf!D=lO!e)7zIZ^b<{^h{t54 z29w%CO>{SIlACXi_~r4?a}}zY)({AOE^9;CE8)5$fjwMd_Q7dcJkBS?d!+Q8H~k2- z4XCiA_h~YpuzaRGid{{X8F~_v)9*`--fGD&S*$t1vE%Lw=Lz~BM1%G{hRlq1Oo}pv z>f8<-^O+kI2>Z6b>FF?dogJZO!8^S@UY}PTR#WOdqs|izFRH|wDPOA=4EhYSoNw;d zFID;Zhq92tHO?`(sp&(_y3*atLcN|x=|9q?9pWh+?l!s&qzdw66XX|zP%St1Whr&bwS@j(dQqSQAQcETj{N%j|#tkm|%tpQ;JODN61>-fY;j%*(SH`phxy6n{mpm8JcJYF6kVl;$&Rv z=Q#|M_6WA;+w+PvIkv(lTi4@^D?6OCHVOz!Plrw_?;)&h_wip{@8dj22`=y>iixp{=WPf?8L&Z+qK#_ua4}W za)J=|;Jw4RuLxeUQ0A6*vU}pxtuY-}ZuqkE60yH)T}ivGHFdAtopck(6s?Jf8uH7o zmHEX}!tg{B`+3iWIeCDcC~}k=sF=?;(#b?xclv^S)JGRFiGLVgMkPA$A0e;Sv3U76 zsFmOb98*)CodK6Rn{+W%(iX?Uq_02J(E?%=t*$hsRGD=rJi~#|7 zU~}G&QevO7!X0k4tP2X}T`XnL$fe5}4Sw#l;FoTsv|Hm%F-={LZVaS9T6ZjYxNnbK zjcbN&i@Gvq4<0c#UKCw4R}1o9DfVmZ-pbIWPT?#RUXtL2z?$1TOtB@u6|%J%wV!w_>Hg-^+|qtDj|p$`^6!6( z+0&n6T$b9%S5=1mHsSG> zDU3l0S|EPTP2$rF9>-3IjJzk>o`WX|)pt#mLdm$kWGMfWy4|EPD}WV8IKaQ;#aY06 ztWlQ{Sva=~N7yyPnCY-H4Dc+N=IW4~mf8BWp})X)11}QxZE8<@&25fqA6d6t;WmEX zw60FD4thpK6Xf%K!lU`+AfytyW%W!KJQgQYCQCdwbb9-^4%W<=rIq>Rj*SzL7E8?sOfLplq1jkdBPGdM&Jx z?RFDZ|1>gy!~yK(KW9>!8+jHRNR^_#75HoH3Xx_7pYr(XVJhCI-mSR=)_ZbFe zH=O3rFpym{LkTdzSlv3J9`AE;fNfK1hAxN~*kf(r|nl+H3o1T&>bFW0s)r(o*<+=~zf8 zfQ*?av(AQfv8a#J*E(at#N&tB!h_OqD|5gC{tBA=65L&NOboKWME1j~-2~?2gjIJz z0EU^#(U%K6E#}NY0Dq!~C^ZB3;&(^ zdF1Cm0cC&%)4e-O$8ymm>Wst&S#0V!PVq>iz2QRxoR|q=ZAui>l~ii$-P~q_Jl_0s z9JQxw{3Wtr3O@JkTCyYmq4s}u;H(57fDN4%ADO+tM34a<(L*~R#ruVRjj_}J3qXvU zwKjIc^N-`^WFepElD^cUko@G@wXuZz>5jrC^z1F~u(I2At&`DZ3Nn)Rs$-dI-9Ouw z<{XeICBZ?ju*?2BgT|l){{=vT?OuMdvmt*L0Nr*qEePP6E0@z*02Um%>m%x~W-Hwv zMF#mSSNY=G`au8@(`UWF3DW`zaBUJ}&vXEhF`MTe4p{E3ZRF3-xixi{Rb$Cy+}B3_u(TCC6FRC`*6l;JT00vTARC=sCs~pJ%)9=o@ z{c}OTLwz(E|Ew`y$3@~+3^1@OQUn>U#FO=MZxX*4IP5kvH`NC@a8&M%DHPBt9q1_J z6#i+;v+O1kf+R{ga%Glk-?vxS@l*dE$zWAov<4Xn(RUgAlUtB##T$xUUL31Z{>6K{ zIi&2OvY6qgi!5|QpOme23_%I7*x8`97xCj~82G1p>M{c`uvT}xsG57TIEHl_$HFbA z-J-QYSVUEO1D|p#_bQbK_yI}Go!!QeI;7^ubYq=`LS+ijjOtTX7Var&AAUO4znn4K zp%W>3t}rFO_#ZZuoPVqvaU_W~zOT?a;piYg@-QC>??9;6gt|DypAf^DhGn;Mbb;)tsn zLvitr^20S197$|AH_R)yEfW-W{3*dI?^>UdrB_vMT6v2DsJEw-xV>g}%1$m^ZPdkldDXgjNo6b-t zBA3saQ6k6yy;|_6>ohPTa<^gw)e?Ti!v6MyD7}2qMJwST?}P52nA3!BjRXQm>}6VA zy_gN#LdPa{7-=bKMO*Bv=DG5OE=sKKXG>Op)>v`N#uvZ#Le4UvY^X7qnPN~%!oqi! zfg5**qjxOBp3sVhV(QM6kkPH-$YnrWHK!I6NWWcAyE*v904W}^p>wOsl`&&~LO6wY zMG%b6$s_wfto^^T^v?>q6YPIw zf62O+_?L-^KbxAY&x->fw6->MjK{gTm2oVaMok+Nvt)o0>P>{FX?cKAtwfS%V<7Kx zJL%@c$p4jM;EIz+2IKvNY0PHOrGFQF8@mmx$y7}XtiG#JZD!W?0hJKilQ#i3M7`t7OT`RLx900n=(j&gc%!|1gl5 zvXtLr{qT=rmM8dyMU#_hlq~p#MGyFvk^sJ?JM!79|foAj?+zWoBEnWiMaNOGv#wLoJb-V^xU>|YT3mzy=OSg~Ps}eIFOwLr z-kC-(OVW2PyW-EfVa;YE{h1@0Zi&AGy5S;81l+86Q>JkPT2)si7*F}4Y@CI*Us-E! zW{uhV9Xt62 z0U1~;+!4D$;CzF<#zY;A8#HjPd^|~dtAZchH;X0EsNb&{7%w2#yKJmWZ1Ak}klVi4 zaf8wu&@gkF91|;ma-i*9QW44ts;7}lp}U(B@;n&NkVYcD-f>35j}luVR~m5FT9Y1< z3#|UBW?M(NGJa@E^#>VfW)Hfc&{V9lm6^35s(N7gDbR?_S#|rZwF8bgDdW-3&y|5q z%Hh3m?@hw^@cFZT9DmAJ6)xW-yBT$cfyZ-$9RBgv{t;6Q@De(~z_hw=7gT?bv1TRuGSfihr7TOl1NvGVZ^a(*xF#?lT^__{}sXH-d|gX7Z05=P}sUt+!Ph{1r?jJ8I1 z>Dk33$GqPp=%_C=0r$oQnKv4Lp(DUGY9YJAZh>8DQNxjndacH9Yj5rD73z1Kb3vDH zp>N3UUXteRx;UCkfe$)o(Jyc@rCd@n>=;}(LI6We|VXk)XT(BnC~KHAMEZIyp5 z%_YekvXb?;X^^qhkGZ+{;P9OJ6tY_n*-+$kgE&#?*$Wl4QMm&5UdeW2nrK!?5GOSx z!m9!m{DmfWjmk3cDbT9W_6G)a`6O;6a zB>k|*FVVNV>4Vii4&=l=o7eO_8LM1BP~cTJV_r>X+@@ijXZxr{ZyL?IQo5oDPvtpB z7O;rZCw~?+h_GLc=-8JXu^jVVm8V@@4#o@#RG|g}wehdHamjZ%k;NykeFl6OQS*aa zTpK*M@KiK*x=^vy(qT@Kokf;LJxh=cpV0Pzu>ACXEfzsNg+WZF9r&34`cPNhV(BV& zMRMyC|HM_T;po$-2o_eVm6ESCaEO(T<#yJRpi-gTvVc}D`R;J^OS%PtJZ-t6iu0xw zY&jaIa7V(f>(Z|m;n!!9;@PrwBqZ=>7Za|41JRBfm8;{@n1e~XTM-?~1^zI#e)+R~ z!HOt0Q738snny}UM~qME-#00$6Y2P#O@AMq$Rjmc2|k6c++kat#`Dot<{z50 zJu-aCT-j`BJ`M||+Ew|BQ)+ee*;^c1^CHU5MZL`U`Sn3om_ccAhWrM$frf}$(|89n z$e)=wI%hjUpz`IMW`680%9CxAQWMy%2Ud!pH_%Mtr=R*q?)^YjjsdM4j zdl}k#a0Ztfv4LHve7USUaW87$-ctA@sQ2#J=RLuFw&#oEvpK;xVMtoFI7eRFf95$| z!m7Q7m-mg|tX;7BR%r+_fM>PV-x$r1#EY;)O;)(%K3>}gqb>K=gTUhQ+a2|I1>*N} zlAo@xxIQJlGI&4jE!Fofv2W$?ADMe3V81g6dL7@McLpV>S%^~FA5;$#fG~#V3vODP z%qwej9`}v?V1}z@qIKb_4rWWO9{WXZN9k;sII+&JVefd}3b^=_W4romH(w64qAhZD z$eX#BRy9j#*z-25>2Ci#*Fvos7O4=(-~J-q{COMglRXvd!-1zZ2}li|@&rXRR>kIL zOQrD~?Wd{M^rvi5l~fgu1;%0ahIB2-k$?284}501K?$gyCarbAc&w3H{`0jY`TH-H z?b!}tZ`N3AyFt)Hv$C;rJz-&2IPhn$Wuk@Iz4r zD$j}<+GpJ=iD;!7$A>;7+*j1vvD^I0i!CubAIXd#KaeD#z7C!Y7WrH9?vXKPr}b=0 zoi;@u@ys9`>WP`J!HkGS#KG{xO&{=!%Vkq_bu(fL(^rw=8xtg2X=}Fn8X7t1cyIcS z2P{hu7_5-12?sj6XC*Kh1HW8M_<8Q#yMW5GIpP1g9gBUdbHdP?Ki=hG0GGoR{{Igu C+Z`GJ delta 15976 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 Nw30&(X2U0f{~uh~C5!+7 diff --git a/misc.c b/misc.c index 8d07fab..28b0a10 100644 --- a/misc.c +++ b/misc.c @@ -99,7 +99,10 @@ uint8_t gUpdateStatus; uint8_t gFoundCTCSS; uint8_t gFoundCDCSS; bool gEndOfRxDetectedMaybe; + +uint16_t gVFO_RSSI[2]; uint8_t gVFO_RSSI_Level[2]; + uint8_t gReducedService; uint8_t gBatteryVoltageIndex; CssScanMode_t gCssScanMode; diff --git a/misc.h b/misc.h index 8b1627e..96ad66f 100644 --- a/misc.h +++ b/misc.h @@ -159,7 +159,10 @@ extern uint8_t gUpdateStatus; extern uint8_t gFoundCTCSS; extern uint8_t gFoundCDCSS; extern bool gEndOfRxDetectedMaybe; + +extern uint16_t gVFO_RSSI[2]; extern uint8_t gVFO_RSSI_Level[2]; + extern uint8_t gReducedService; extern uint8_t gBatteryVoltageIndex; extern CssScanMode_t gCssScanMode; diff --git a/ui/main.c b/ui/main.c index 919e08e..9856e75 100644 --- a/ui/main.c +++ b/ui/main.c @@ -57,7 +57,7 @@ void UI_DisplayMain(void) #ifdef ENABLE_DTMF_DECODER bool show_dtmf_rx = true; #endif - + for (vfo_num = 0; vfo_num < 2; vfo_num++) { uint8_t Channel = gEeprom.TX_CHANNEL; @@ -131,7 +131,7 @@ void UI_DisplayMain(void) #ifdef ENABLE_DTMF_DECODER show_dtmf_rx = false; #endif - + continue; } @@ -354,32 +354,49 @@ void UI_DisplayMain(void) else if (SomeValue == 2) { // RX signal level - if (gVFO_RSSI_Level[vfo_num]) - Level = gVFO_RSSI_Level[vfo_num]; + #ifdef ENABLE_DBM + // dBm + // + // this doesn't yet quite fit into the available screen space + const uint16_t rssi = gVFO_RSSI[vfo_num]; + if (rssi > 0) + { + const int16_t dBm = (int16_t)(rssi / 2) - 160; + sprintf(String, "%-3d", dBm); + UI_PrintStringSmall(String, 2, 0, Line + 2); + } + #else + // bar graph + if (gVFO_RSSI_Level[vfo_num] > 0) + Level = gVFO_RSSI_Level[vfo_num]; + #endif } if (Level >= 1) { - memmove(pLine1 + display_width + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); - memmove(pLine1 + display_width + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); + uint8_t *pLine = pLine1 + display_width; + memmove(pLine + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); if (Level >= 2) - memmove(pLine1 + display_width + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); + memmove(pLine + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); if (Level >= 3) - memmove(pLine1 + display_width + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); + memmove(pLine + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); if (Level >= 4) - memmove(pLine1 + display_width + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); + memmove(pLine + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); if (Level >= 5) - memmove(pLine1 + display_width + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); + memmove(pLine + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); if (Level >= 6) - memmove(pLine1 + display_width + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); + memmove(pLine + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); + if (Level >= 7) + memmove(pLine + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); } } // ************ + String[0] = '\0'; if (gEeprom.VfoInfo[vfo_num].IsAM) { // show the AM symbol - UI_PrintStringSmall("AM", display_width + 27, 0, Line + 1); + strcpy(String, "AM"); } else { // show the CTCSS/DCS symbol @@ -387,8 +404,9 @@ void UI_DisplayMain(void) const unsigned int code_type = pConfig->CodeType; const char *code_list[] = {"", "CT", "DCS", "DCR"}; if (code_type >= 0 && code_type < ARRAY_SIZE(code_list)) - UI_PrintStringSmall(code_list[code_type], display_width + 24, 0, Line + 1); + strcpy(String, code_list[code_type]); } + UI_PrintStringSmall(String, display_width + 24, 0, Line + 1); { // show the TX power const char pwr_list[] = "LMH"; @@ -423,7 +441,7 @@ void UI_DisplayMain(void) UI_PrintStringSmall("DTMF", display_width + 78, 0, Line + 1); // show the audio scramble symbol - if (gEeprom.VfoInfo[vfo_num].SCRAMBLING_TYPE && gSetting_ScrambleEnable) + if (gEeprom.VfoInfo[vfo_num].SCRAMBLING_TYPE > 0 && gSetting_ScrambleEnable) UI_PrintStringSmall("SCR", display_width + 106, 0, Line + 1); } @@ -433,6 +451,6 @@ void UI_DisplayMain(void) UI_PrintStringSmall(gDTMF_ReceivedSaved, 8, 0, 3); } #endif - + ST7565_BlitFullScreen(); } diff --git a/ui/rssi.c b/ui/rssi.c index 0aa7cc3..49f07b5 100644 --- a/ui/rssi.c +++ b/ui/rssi.c @@ -15,19 +15,48 @@ */ #include + #include "bitmaps.h" #include "driver/st7565.h" +#include "external/printf/printf.h" #include "functions.h" #include "misc.h" #include "settings.h" +#include "ui/helper.h" #include "ui/rssi.h" #include "ui/ui.h" -static void Render(uint8_t RssiLevel, uint8_t VFO) -{ +#ifdef ENABLE_DBM + +void UI_UpdateRSSI(uint16_t RSSI) +{ // dBm + // + // this doesn't yet quite fit into the available screen space + + char s[8]; + const uint8_t line = (gEeprom.RX_CHANNEL == 0) ? 3 : 7; + + gVFO_RSSI[gEeprom.RX_CHANNEL] = RSSI; + gVFO_RSSI_Level[gEeprom.RX_CHANNEL] = 0; + + if (RSSI > 0) + { // drop the '.5' + const int16_t dBm = (int16_t)(RSSI / 2) - 160; + sprintf(s, "%-3d", dBm); + } + else + strcpy(s, " "); + + UI_PrintStringSmall(s, 2, 0, line); +} + +#else + +void Render(const uint8_t rssi, const uint8_t RssiLevel, const uint8_t VFO) +{ // bar graph + uint8_t *pLine; uint8_t Line; - bool bIsClearMode = false; if (gCurrentFunction == FUNCTION_TRANSMIT || gScreenToDisplay != DISPLAY_MAIN) return; @@ -36,7 +65,6 @@ static void Render(uint8_t RssiLevel, uint8_t VFO) { pLine = gFrameBuffer[2]; Line = 3; -// Line = 4; } else { @@ -45,15 +73,15 @@ static void Render(uint8_t RssiLevel, uint8_t VFO) } memset(pLine, 0, 23); - + if (RssiLevel == 0) { - pLine = NULL; - bIsClearMode = true; + pLine = NULL; } else { - memmove(pLine, BITMAP_Antenna, 5); + //if (RssiLevel >= 1) + memmove(pLine, BITMAP_Antenna, 5); if (RssiLevel >= 2) memmove(pLine + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); if (RssiLevel >= 3) @@ -68,14 +96,16 @@ static void Render(uint8_t RssiLevel, uint8_t VFO) memmove(pLine + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); } - ST7565_DrawLine(0, Line, 23 , pLine, bIsClearMode); + ST7565_DrawLine(0, Line, 23, pLine, (pLine == NULL) ? true : false); } void UI_UpdateRSSI(uint16_t RSSI) { - //const int16_t dB = (int16_t)(RSSI / 2) - 160; + gVFO_RSSI[gEeprom.RX_CHANNEL] = RSSI; + + //const int16_t dBm = (int16_t)(RSSI / 2) - 160; -// const unsigned int band = gRxVfo->Band; + //const unsigned int band = gRxVfo->Band; const unsigned int band = 0; const uint16_t level0 = gEEPROM_RSSI_CALIB[band][0]; @@ -105,6 +135,8 @@ void UI_UpdateRSSI(uint16_t RSSI) if (gVFO_RSSI_Level[gEeprom.RX_CHANNEL] != Level) { gVFO_RSSI_Level[gEeprom.RX_CHANNEL] = Level; - Render(Level, gEeprom.RX_CHANNEL); + Render(RSSI, Level, gEeprom.RX_CHANNEL); } } + +#endif