From 547d27e256c94cab7ebf6299f119a8defb4ba426 Mon Sep 17 00:00:00 2001 From: Jelmer Date: Sun, 31 Dec 2023 12:37:40 +0100 Subject: [PATCH] Better EEPROM handling (9.7") --- .../Newton_M3_Universal-full-flash.bin | Bin 125288 -> 125780 bytes .../Newton_M3_Universal-full-flash.hex | 11903 ++++++++-------- .../Newton_M3_Universal-ota.bin | Bin 108904 -> 109396 bytes ARM_Tag_FW/Newton_M3_nRF52811/src/eeprom.cpp | 2 + .../Newton_M3_nRF52811/src/userinterface.cpp | 47 +- 5 files changed, 5997 insertions(+), 5955 deletions(-) diff --git a/ARM_Tag_FW/Newton_M3_nRF52811/Newton_M3_Universal-full-flash.bin b/ARM_Tag_FW/Newton_M3_nRF52811/Newton_M3_Universal-full-flash.bin index b001e5c80c99973229130bba10b092cef9986d3d..0c8390eeff6cc03f26b6f38133aa083c9bbb7878 100644 GIT binary patch delta 11883 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 delta 11324 zcmZ{K30zgx_WwTTjv(SyK#|Ei03xV?L*i5jdIT?uLpf9`=7gn%T8XAzG*d~R(>5*j zmF3Gc^Cb|48lq|Qs|Ti~FDo?(O{?S3@0@$@Ip_Yr``nAE@BR6F)>(U4d#$zCu&2w( zZ!MQjSoRxpJe7wCIRp3}@B`o{zL>BaOOcmK0XpGFDwe;&yNN% z>u-T2g@2V>+JMKAB_I9Ij#~q7BfizvqTK)L3$}gGc!o>mHs;!s8ZL3fT4Qj>R~iZo z`S0E!<<>ejeiI?~hD-Fm+$7$k(n-0gtrJx{=|ZexYuPFqsyE~sIR15&Zq9S^YtGYy zd7nk3*O4P6=OPAfJzu?ca59&4S~GWDQ%@Y6qpjT{HfntLV67c$Uud*p$nwaQ+Izm` z*9yWI!BW<=h@KT95(a9f+eY52z3*EAA~r5FNc7y$2-{VayN#$xWup^}-GVY~pnY96 z-bS!hrJ4CFlE$k1ZH+}LcbiiAIuAOcAi`!;4Y!f03S%D2IT+gymEeSGftgD0DO4%A zHx&~Iv?(|#8=tm{tK=ea?I4TT5U_~(TDY4yE#fbVMck^<@x#*1HWW|z>8fGr{D=PP z_l8~M>_u8+fkhl22#(vKS;Sa1IPQJFMSM)9BA-mp7G`GekuBoqKD!W*&S^zA&u8)Z zb(d^87IAegsb3yT?4>mcBYKoA%QXp|8sZ9V)x^;nI$rY8!Nc?0UGZ^xwK;?j`RJ>| z*L$}5B0v-4BMu`l^+n?w=`-3nhece2THPgUjzu&bBqY1WBw#9DqmYmvkaGM6r%i~1 z;`e)t#2tCx$Pt~LH*n>&I1f&j!EaC@VF5aAP6~kmkG6^KU#^0Jr{gIO#Nf|-N;qxtuya7czK@r7g zbS4!rYQIcriLyQ)O!kNsh7;$24LQm&?)ii&YkJqin4lEOJIh z%MG-MWpa!dFkNX3@+y$K=(6X47vnh#b*A%l*)C+)*=i8K9$o2)A)yn{5s)?p7Scpo{sXVt)4XllPuV;;EuThASjSq8_=qBwEqVKNL&(!HHVrMAB4CRtZ z@;kXnZ5o2}O^~^5afz{I+{S=3Iz-w|ra5Dh`E%##j4|_!W^qw~o*lEMms#u);MNDE zCj-5Pz26*bH;d_deP$qQ*gy5UQ?E}BbRV`$ug3-G_6PpaPW+jW-GF}q3IWT1t{(m1 zBA)-yxAW_995482!}vHp$ya@K{8a5|aTPzxN4rlN z$r-6y*#C)?jR!xJyKlY~yCh-%E=1-s2L&0L9M}`n#H;E@T zyP!#b`Z-609uOw+%fqELW+4K-#1VsG$29um^nS^29*(eE5l|*^hi0;C(osLb_ptw% z#dneoHi?@wI$%Z;zg(k_%;=st`|tr|>AHGCx?R38XfMhY0jqPCKv1G|s4=6TS*%cq zJ~B^R4_?!Bj#KpSB>nra{vGfCC@rk~W=U=?2@boq$MV+X_k0zMsOzU-uKN z$tJN>F+it1x<7XL?ctiV)6ewVk?hYB(m=i(5yS`|(T9EKCr-{W9qN=qU=028v5tvW zCFlCtk(w0nvcOs7)1;UEIXBE?FwqbY+~Xa%nY82My}55_(c^i8K2G8?IykhvqRV7zZt^F(K6MgmaQw?L6Qwep!yuIA_wX-3<46>r@HM=g)YdrMFF4Pu)pq7W{xK1(8p)L;5iFVnqZ**u&5chkN;Pp zNF-t3%OrDaMJHc{oI7ODnTIN#Ek0o-4m%bbr~GWmLlwkv!pfGOc$qi{2`pK+2RM{6 zQQ8uyy++!EHNcnH%ox{*5O=E|yseD)1n^#U<8%7t99N>x8+MHgd%sze5<~P&zP8Za z182NS-<{LbQ{iLr5{V7zz^T5CFltg+A+4k=kaX1rw>IajZD!9j`T!()2Q z>9g41M876IiaI+gnZ($GmKs%(18vaG-1nf*;>v_8nT3mdR(CvRx~<}jrz*Z3w}DWj zfggbngwj1L&1RUc3Cbmi6^{2$rsB>%JV{3VW=?K_kxdf z%W1TMt%fNwgHMEV%rp~xB=xjz?5fr3ZnDy$nlB zpnu7PihSX7t0onA`>?jIm%ww zJn?`gjn=nj6OK`g?=`Kfz@_YMCf)q-+SlNai!Ga}7w(I$v}3b|MkbuKc3f%2v6C#D z;|KMmz69%2iv_AtXGcHWQ%YEB7hWHk$;_-uyXslnHn@*P`g7jT>?*>AIntV=NzWW$ zl&VBQ#oYCTH&|aCVD4gzj%PK7m~cYlLVmmN0P|Z?;6V@!2f?%6aFlMK^o*WBSt!l* z4sa3LNvf&rb7(xh#6Z>Q20Z74rad8?pZ+KeZIj^^%mX!cpCAOAf(l zQBq3CYb;xtS<1b%v@|-(qM5I8t(dDULMPv9zb5@ox0H72wi>&pN$jqj(IY)u_tylO z)ml7uS{*G+5SYJ?(cel_Jdf%}50jXVOf`v|?vIy3{`gTUK^Od1 zN4kE{$X4~ZJGj515@(S6a`k94>H20P3$Y0mK~0P@tF>tIyvjKzU{eB#{ zeMTm(*F)t}+2ooZDnBM?xt1p%^ z6LG_>5ry@P&);x`ZAo;N)SSaTTu-B^64IIhZfpV12ER0TgD#MeF4X3Tp7Og!4 z7b>P!L=FDl#`Qm8xb8 zO6>v}f)xSeup6;GmgcBZSiOWk0ewd3XcRxxSbZq!ipJ{id9?CWw(oNH9&?doLjURf z)MdiSN|ml^yz4cm!NJ+dCRJ+EcnoA}p3@AjdZ!WUAvy=E(rJxPd5!Jdy`6$fFgk{S z=4*{jiYfQG)%!BNi){Efa_uWiAs)Mp1+HS|F<;J{=*c zNg4kBC2>pAD<@Qp6pr5bl*7Ts%R;(QVIln#dRY$(=^g5KGAaKntdsmNgQHOxQ;h_% z@qJr3^0zqJLmU@+Rgbhs83~4kI>VNzU!cBU^;R=874H~<8Ki2&6(_7}PDgfCHqTA? z78{rDC=S+o1(N|gR_viv`|M^U#5%TTS!<$# z8v4}qiLIGhgv`JMnmpOKb`dKw}}~eXe-5YPX`MV7*=Sr6Fjoy zUbmGh(kMD=anJkj@lJ9p&bU%ln&-C*ie!L|6^SU1mO0AC=bOY%-V0@~myJUy&im*> z$HE6tit%1p`1-;zDB0+-#q&G-=(mFJ7_Y1B=V}8K%2%xiIB_o>zN9CItY0#Oua)U% zOVW}oP1v6SxlpSNYPE-2V^AIkD85J|pL2T7A0+j)W~QwoP4Owx$G(>5D{GEHRP@Iy zTa6(9_Xlnb+y?ED zz^#B;=30OwfHOik;59fc1&s40+2HJCE?~@mmW@thK`VVpGKyzwCq75W9KaGf+|xOW z`lCf-oA$#aa9UceUs8?Y4R1!7tCH9i=>!5cqtt0Jp33t zcOUN%gxzi;rwp0CjFtLm|LAvq@A>Nd6$fG9K(9}#RJLt>;j$xx2_9V z@%LhmYuaz#N6q1SP zDzea3=03pbDzHZ_D^%&}uc9OQGA1u_f`VZ*prHsqQc0@Cq-1*#h8Z%gCDmw>@*fX^<{cFWT3-)q71 z@|zDG+{;p-30>J(*(3AY3^$7Z!rgpXX1fgSW^;HGA&fvq1a@ztuP&S2dY9MeY<-32 zvhffRNjp5hA$FnHRp=U#Tx3g$cVf%Q|4H7y-YA|_=#l69Wv=xZ#DqXOqO)UQ#}z9v zrL{htk1b@9k4wAxLqOUcxRNF|wql3aJfqlDN7I+5n*ZHQ$al?j?DFxcaVj(Q7L|kH zL|K&xo=iztt80r@{Ju%dkx|YEj)GY@B{w;`#;OQ=E1A6J?^1P zUU)vGx5gL@lMP~f?I-!=4dl{q3J6}v>&Lf z{v{Vi8v_^#7zG&6OxLbV@(jkr9t6w;%mZu&Ot%ud38P~avXyg1l@|YEKrK?4iwD$w z=syVPc3B)`783Ilhqr;*aRp6w;6lyyGK%y3wyttxY<@>LZZ=+UxB*771o;p!%8ftC zbQs#Qb0#n9;R2ss!&!JjoT4fsJn*Gp^;&kx7YBEKy;ICxlSFuRnAgN))s zhuT7ccz^@Y8E`Kk0|2G+_WhZ$#4H$hw-Gi7i2^5vX~x~0ctK^4dNC*7ykfK(uY?i2 znaxYzqe|1h)oTAFo?Ib)Pg*@|H16ibWnSZ-+ z-4F(AtnynOR=ij*)?<39-{vU6{rPE}>svzsDEj<)DAWUnZgYu7R>XBN;XOLP@uVD< zNiqgEl!L`dpJ#Y^QLu%GmE~;F_e+g*RK*y+v!Cv&D2yk5E;W;#<=35-t(iZ`C6(jz z>^QlrQVMPTVjf@MqoZFG`2Gsr`r_su@!mh1vmi0~5`2lIWbQtVgl!9$1)n~R_Dr-* z1Kfx5m`n80)yd8m)og4i3sgl9YDHS6W)=1r!KHLS?%V@C&&hQ6>iasptQo{qKe=YI z8bqf*XGqr*nHV;Us;ftFk+f({pLXGD|H1(ya5~1oz8F{{)0fvQk5N^FxY{=~(IBq! z)#fJZ!~RXP{>arD}{iQH&fv_7M~K|BOM1SCNrX)iRy zZv(C5I+m^QRu zMp^rXURXcA?Y-(LIm~`a=Ey18Wb;ecse3~o{EanH^qcZtU+DW*aO4z4dM$L{dMEL+-2&ZosGP> zK0pg;Dt}I)Ptj~{C*4PT4x9`v*hb3SIvbd|xW%p4u`C|kdvNa`hxh%+mc|6oc4Kf^ zD(XA}Cs~@fsbkuYs@5EJ(^F(GGBnsB^jlSP^)Gb@{mK%tMlN0t*l!T?@I&DyXXF*^ zaBNu}2`$GcbnT|3?(u3XcS13HAQIOxd(DSb7ECLF{|Rsm9bUi|4;Ex6o9KTwrE+DI zdnsnf95til^eVDB)|HSQhm&l1l_FhNSlc~rLSwUCf>W@fmD{99v-S3LwA-?|O)jB_ z&_<^(rVqc=IlhnTD(P5pdKH(_-WAt39^5Lb%B#prij+?O{!)j;eRw%!{Wgq`>KmKQ zZSDyUj7CAuG``fyLpE|G8Njx(a+q-TF&uen*e-1J1T) z->pco+LeVu1`&^!C!HRY(X}BLTKKtq4E@{EBcgq2Axcrprs2DEnJRtgjbyf6`dq=%B1U{sC8@k~ zvCgt5W4T$88ngwvI^U`bf~=>uus){YP+swr+dxxYJe}`O>j%M8H&*o&Ob*7aT6?mv ze+ez$?u?q@j=rmNGxcog;u#OC8C+$sYPxRoV+w5^Rxm^oFEsLs+=Jff7i2QWWRZ4>hIK6QFQ zcsjGX!VEE0Hv}^RPuun_29q8_PlRRoZe|cg+Dwz?xJh9wTrf?36RKC9O%foo?=rZho3fVP1X(CPq4Vk9BKA>za+zu%z(^r%%IG; z5x)}M!0Z;mjM`$*c(i9C?dBHD3n_ovAMPx@L-~)DIl78p`e)yze63Q#dfMTa8>an? zTiQ?8wSNP1DrVZJjQ=kazMwo1n#(9h(ajUMfo!Ig+fv31MJt=i4#zZmb5q}fz9F?{ zLajS(`hXI&=|lehcd0d03EFhHu2pwBaeE@4rO?IOv!kMw_>fo#oqHC?v=k=R)8>}g zqMOS~pKc=cEmmx?VESDaYza$dJr!qW7aZzb$(!EX*^G*%~;aW($nGE`Z9M0~fLEko~=vt?*cc|iKZk6W77 zX1`chrnBCICuoav!5yx8$v;o;+vb}`J%4w29&`8BE6Ht?t!}4t|75sc}Ka2>n&YEEyuk>-C26e%b}J- z-oYVdTUx5nqDO09OUs^q-a+m;w}xdl-xIRZTe8L3{|@yxdAsQ9Z_q`l**W^yfZ9|hQcYKD)T+|{%lPkJeF}LXE z_R=z>5!-&4er$jL|IDe|E#>jNgf)4UKOkL|*|ATN799$OdKaB=H) z5>gL%3-Br6-+=D{u}#&fyJkf2nN8JetJ-nquFV{|+El%(dXbTLH&r`pN1OP?&GebN z?q>XYO3q%QZ`TQi=bO3e_;3@?dz!0#^^17(dJL;=u3q$!ljCcf>8r@?Iib9AW9fok=NkHf=S;rBuOlLB5zE^+k9jxk0~9O0v@I@+sGetnV8 zcm)3sxEL@1z`Hpiwj?0EhTq>}v0!A^mY-{<*Om7yj1(8u!hKR)1AF zTAxViizh$2qpedX2Q51l8#nhyLMY%%z#jmvfQT>P`M=9I^zBnC%utSe{0-GQO`}`C zjpVa0RlohMnd8w^_1(tU8_Ld-ZSgycT_s6_Q;UiHES_+Q$f@*^)9-MDXxN!`oR_|G z#=%{pht5<)ZwIqC0J{L}?}t;6UG9jZ^ZxTME|uQ@{ZZ~?%AM`ZRnk$el}T(0Y{+83 z0Kn}--#T6W_1QOgt~H(e(@gU|^d7!MfBfmu4s1}%09#FjQ0a}d5iy;PJGYL1H9#+& zOX99l%XtU)Gwp)!f2jMsE2%-wOW+$_C5Fn3;_SNQj>N9(7y8ih^A~%5df15{RiDvP z@JJ%p5&W~!j@&jUg8y)FKr;y>?RrBNE@2yOq^-(FPd$Gbl9 zV=~_h&z4_r2gdHyCubb~kBL7Q^)9{{_bPYu`1StY9|lp4oMi*eBz|;}Le@5eJ8rL` z%uxF76;y8py%2g4A?Bltcs!j*KceEh>6DOuDuV_iD<=t7uBWw;Hc<3>6~An7(ldX= z`wd5eqYt2iDE}u|_~4JN>x@ZM;%Az9$l6Zipd4Y0h3nMlq5fVt^!91E%e12Z6WV*? zik`9{LNK2UEyice!SNZI>4ud_+WX>jKt$Fh`iYiUfm2;<#~e@A}>Omuof z!E(@u6e~Ah2rc_YFg{`Bp7d36>k6#g0l~tJ&}?qxv~b@j7H+kMr`yuas%+s7%6PRc zo!%|CzGwT1V#aCx%d8wLkaZSroo3<8s(;;1AfB$`eZjZpz2dWQA4m+V@#oaat3PDZ zr5zXS`4(r-4g-)mV{pq zdBL+<3I-a3gd9e|OQlHomPI2&IV{{_=yhDM=3BTc`w_}(GqJD@(a6S^YJ9$AaN60} zG7Fa}R&v{lz7~R0omcaReFB)Y3j=Kn_o0a5nhNd5=Q0}KsxY1TolK_zq}(N;wBO5* zO}v~{)o~#&U*n@bv~asbD$ZPL<#>URlmm%)>{l=9JopWTk|!gy?#Et5UI0Y~fg+%+ zGqH?NcjE>9qp&^HdiPT|h@5|e$QUBB>$=3R_glDoL1GX{Y}F-NiNr1ocN>hFV6;i_ z-XwkTkNC;Z-#jHESO|p9157M84loUP6ks#p;ebtmvqj_}%4I@70`OqK#Ky^hqX0W# zJ{oWWV6wgd#>x6|VwCO!;0JbFp$)0c>(Kamjbe$^p&lS3Vrjr+nd5 z2$(QB@57IWHG7`-AzfZWK;BB|6MjpfPu4#ReX@Rv&zg*qA{gYDi!9tiUnKKWi-oKA zS@#xml#$R<<1F0$z5$$Ox^&F1`$*qlUG|;8i}1W1`b6icK8DTfu(v@7dvvAU0ihFN zLgP1RgxsGgLxuTJ(%%XbL%aO@wfU$mu?f+2)CP^O4v-=r&W}iLF4CZxs%@a5?e;={Rgz{N$===yWYP?8#?K)dfzJGS0i_ZAN(1iI)GOJ;sI{` zxwU%0Vw&D9?f5E+qH`tO6&*_lORc{||6-s+eE7TgMEZLPi}B<0ruizbqFM`gOfa() z%Q*8`#ChbLXP69Imm|a3l?AE(rC{JXrH%_iKH@44L^EdYbqUud45L>_cxS?DdV++9 zCRS0Gu_rMTwlhk=&56&@TQod$P&56PPJC`q8l9S`Ry3pp9lO zUBJ_mM$qR~{6f;U=uPsrS<~ASO3hrcng;&aP1f|%-sQe)b!S?~_6N~r_ zS#08#X?Sc(BE3+0^T^O%0IqlIyzkV%r|aL-^zUlvQ>fCV(Yu3f`HzfrdjSFRf~HC>+bRCd51pkOJ+;02c!O z5uh62Apj4+7JvmXw-De6w3~mzAEzaax?Ar`n_cbfRw6-&O#Pazok6=FWvbQ08! zJire_JtF1_RyF=9JZSLnd8vWbmz2<WA&bRw70 zK~`glXhHN|CndN(cOq?_R5zv218Vju~Xf4z^6hP~d znbK1*SOv`*$qB7l(3&Gr$p?whskC!C2)!4^X26oc?0wL>RllVa!f9nW+h*ZD}}-rwtABj1djZ zcL_!bb-o7|XcC9nANub+ncYIAiQ6xp6@IEm$;;Ux>_qk+aixed^N-nqlb|0zCaxr~ z>jDX-oDxvh=7yHS?9&cUX^5Y38=> zL!EhWiuGFH?M}Z1;Q6G6WNi86sw`qzh2Pdm#cl&}|7CjMlCtiXQ*-qSsn6tv;OI3c14?>d40k?amBBUQb+48F>9yZga}U*zc+SEO64yv7e*v$_8l1TjPB9ZVP&*BNp3#s8 z4pI530_pWS@Ss}F&R~iAI`9u!$)1_|4aCHSi)3ZDO5F2Oz&)oFg)i6q?x96AWONt9 z!kG_Icj5pV^1(4u)g$|GU#cRfpZgN!kQWWvb&N!uUlWB_HPY+Vlr zH#*yi7b8`ZYZiDz0NPpsxwb>wLpl!%Cf8$uiMc|yYe}Gew@~le7idq11sekGY9Y+E zD$p($%&ygeHY;SgngZ>7fp*!PPy~k=9UEQ9Ns8bIVKfBF?an!YKp85m8mC7}Z*-*W zgXk!#hx>rahX^D#AfbK!gjV<-a22V9`C>RzM6WA&d2tnekOKY=CvVs>1) zF@X=siiaPr`a|TBkOUbFzAA#Ft^@FLgh;_^h4l6N>w3B>{7$9UI~Dt`C#}LirIDn4 zN%1GG!q10f^{45YKUd`LBYaoseDU#|@OjT@$ie8&R`@4j0Xe};+^Yhq&rwi-NbedT2#MD_F~5tq?N~#t6q=ZN9=AI(e95VNO*;LFP`4^e009n%;laqt&O7^OYL$ zi3=qm{EqW;mkF*`3V&XuU0a<7IOfrd3V&9mVIfiTJJsOobQ(cD2*_fEKd#crTgeGM z+{wCFqoV|9jzBtwu|&B~)M2b&xdSQ@?S!#*)y3}d8k=i7GQ07U!?Q+jQQL*!taic9 z#1==`j61pBovQATB# zwMWZth)ai{RQY6SOik>w>3e51RI!Jyd``gy#z%tsOPK`qOqrZBReDfwR=yQb{q?{$ z%Nv2Ck)7JQPYAZtqk1{YVlPJ~!0|C31nmyF3K-_<4142#f%1OKn_gln+A$e+z^KR- z%dYmOLw@b`E{Hz~2b#h^CzE_Ia%1&c8zGZ?xHC{OX$j&_Ch1`0hG@C|bbxw^K1yL8 z*2@?nx){!EbhM3tO!RyVjF`0u*yb+n1itpcxwlA6r zEdhTp_OYl_l9fU5MD42kvDE;wOBHK7#r=*8#^q40_=#~P^a>yTXk1$2mGcz33J`uC z9zx;W(?APiT+mJh$U2Yd@lMa*;SRIUOe`VucZxFKDfYg!vgRAPpZ1YgR`xbSX(Vgl z?gBg8At%Wg?KZ+LWPTB>Cv0iAN$)TCvv1J*^8$S<0QUoI06Gg`4bEqRU2wSy0nEcKwLjo1fJxH+ zu0N<4fggG3F>+qf;Ixzx&Rsr(bC9`=F#pnLbQ;V0>D9-`9d4hu1ffL$4Y*)JYWDL| zBxejASP={trIi6T--{V_uDytn`F}ucX4E<@#uF-^t{{lkX?W9wLAIAbu^`~xDB_PN zB*iTjQ!M5a*=~x72Ir>=D*wBjZ0>hL=3m29{@{$oa0446aqUUq=7T~$xOKf|h3_vk zn#&b~p|wh@3V(|f;f}7`*3-{m&sg2r55!*(cbJ1u^e=bS zx!WmSg+X8gE2t7D;&<`~Mvn&fqhHZEBN9!u;L8y3pUjIL_)Pv`suFK6NR1gIy6UtH zLs!rwYExsOxl7{@YnD2{7$NoK0z^e_W@}Oq- zFAc3Ql85}N!mRKJ?W*@Xm>>iK1e|&vZzy~?WE)sMvDPh|sD>9{poGOLGVY*1AUHzxVH))sB zxMTewlZ7H9ck}>GEKV_R?MCR$Zak@YdJ3%)%f12+feL?7PcV%e-tj=OLcz^!Y{(f6dx?uqX);_dzh#GqPlIa$ zvhV$){+@`_NkCYk;KYfOJ;}Y!w-8rd$!Vv(6i!cTHXZ?^&OP`M&^Uc5?-0HlZ}3A{5*)OGZhK z1bEb@a*f;_vVDkfEV?uX+<&VKV`Gh6m5i;W@ty)X`>r&gA170}oYz)r1Co)lJ;_fr zOpfFaWjZGBy zg-TxX4LH8*lF@3s6olX%+QRg=6uwK{_XqNL3fc6x(mKhYv5Dp$6peqN$GzTpz=q~t z7ysFfTpt#iJ6j5=B$O1=6$IO^m8}jdyu^M+&wzQd-BAP2$4@{p3;_i|(dBzVsbOHs zv$|Q}TF$O2H!}0%HGZ~ab>16Kg8NqyrIjA*|BVoog))k}>Vfe`63!}%q`t%@WmD-; z8E-BtkGmjIDOu#|w*Hi0%{nX8?44f3z)fD^2VrVb5uGhzb`nd6DR|wamu&{|4{tUI zzS@n4x(9}rT!gv~-MIk$q3ybeZ*wO(S15UK(kxJ9z7Yan=ATir%ZE*-lA|EMZUH@x z`0%Ul@lhL81J_?hJtnJxv&s1-Lyl*`vN^cNJ%zf4i^@la814;*$8@bI;Ggbag4c_GWNNcV(`PwW-;u*1@+gTS|8w_I`;Sq|d zI|e~K5<=({TmT*fyb7QcEVcSwxXxEXRK^CvbIy(GU~bS@UK+` zVTtMqA&5C4Q0RnUvP=9gc*2yC^g$KZO}UMF4*$=TG4x3d2Uq9QZ5p0j?WBg|1=Xo^ znTj`8r^PSUV0G60@$Pnb>lmK}hijM`-9D+*z&!#lH>*cbKjHyXQ;i0$PQdw7Q|KcK zu9=!gy@t0>%^7zKC`Qg;lI0HrUI;J`GM2diV=qGc_w3*E`+>LrMat|i&{qI5yZOr0 z$#CDrVYkMleWt43h^wATrqa;GfY1Y~>Kaq)U`N*_K)rqD1%PG)m!ab7Tb+0OEci=w z6=*p|$!b3>L}u+MT+z7(Zhi4AHT*|!usgUkwhn%T;0$U%cl<2!-iTXI>{|q)Ni^OL zcnN@GVnrD#E+k5Kdhu7crerKsGHOn(rcwsF;__lylcT-`y)5$&=%eW6XjeRp8evoh z6Azje6?4B#=+oT@+w-UwUFCb;Ssr8p^<%^`dEZZ)GOw&78?0jIcV{D?bkG?}(Fx!4UYCWp+Q*5_;7 zF?B(WGwQ63o9Zl$r|Zm(F^f!%GZq;eH!U(We!qyuv)qyT$_*_pmUa*oKT>VyN+eA!(1-n>lV*ZKMr|16#1E-SAj#LWsyp`DX-ZF7jWVEcBPWy5rW%*c(+AqpMP;s}j{mmEmfbuF4oC<|b9rK$X+0Lv&TbM$x#EGg$k<+M^Je zIS?2PEiXc@lQ=}vD8$`Lkr!7U=9WtcjRzoC;|jp!WV{>j41nhVjsnz_&8wVOPWFRz zl^*D$(l5$fU8T$NoSRfSs}Pm$(N!Yq&^T<=OjtXN%>i}5|B#gRaA{QVx!aN=D*wYq z&A4*L;Hm;JQC(gUTgcWq%DofHhF6Zzb=f4N6pJ&rk1i{fOkI~X@(A}>-BY0fPt_^u z`pgm;U${MqzSl1^)*VBFMfZzM_gD#$=?VT*Cgb?wJTVw~LL#;y_9DhR1Gv{_y|%Ig z-6a^WEn5H@q7<1QDBGO#`)FuT9@g~;k{`NB!)x*b`iv~OQo(HZ1%k?uI+rjQmBUtE z-LjCF4ZR}s=irBdd&;qWx-;eW|JcJP@>I~DSb3Zy|8lZj=D!g!H-qu)SwvwLrbe?C zSDhn`nQ=a^EH9wyF3IK`(MQz{a*nRhMrrg-s;-o8(P!33F3>ddPfauai>C8I)0Fbq z23K7W9xy!t+wTaEtd?T~3QloUUOf(vPIIm+*gv4)Hpg7%!q3E}#P-DQ#1CS?{=K#* zJ|XsxhuTHrHRu<(ZjnSWB;0vjNO6uoG6 zTA-B9kv8Hfvm71=)HjI!63P|rl=(^0T6bKX0k3sqAIhTfnm~n4hYC#!@Mvij%+q+4 z-)>Nv{o_L=ThpR4na>rMx}#U;Ks~J2IT&%})y0oBOILafQkY>&%h7H+;%Rrr^|J2K z>w2g}mOT0Y)OGYCNmObosp>>+nZF|XtNMxhgWT8kq^ft-ld68SUgL8lng2uyZRR?v zb$fYzq*P4p69`|6LFM}7Y2Res8inrReQJA~Sg6~hAYhMt_ryN)yToz2J;u6c^cmkI z+M0%zWmS$YhsRmp2(Sq`BZmKfSX|+ellgAgm!Nd zH9|XCHwyfB04(O}W3gb7(dWWx-yq#$(e9CbYV2>mNZn$Q0gFYr%lgd!%V*IU{3L|v zmJ122ue`cy0p%J7#}mo$Q=kM%2cq~@X#Y3mv)Y;}nmlFen@J?>6G%1;>q>wN$SrUI z$?VF{a2$I>7xk`yk}S?``aVbk5c(~?*W58gu_D?*E+jI)!55_85RTN(_?kpg=~5C& zB}+B_YagVGTyS}H7R^2F3xyvw*8pDxX|+snSe$DEjA00FHS>Kdb)ioPkSTC4dk(CW z`pC04xJrWGeV%Za=)!FQ;YGeD{Sj2uJ2Kk0(EZ4tG_QH@4~WbYEY3&zNKE$4(j{gH zvvrC05{aJaeI%A^6ujTBb*8&UI+EZa;12ax_c)#Vkbnj~!W4IfJ~B8k0&fi5+4{)F zz{pvlIG}g$$VnK{BfqG3jan|5RsqWkPf;x%nRpB+j3H7zW#qk6{?*nt(lJ9~hK zqzX|YaFf$7Cq!wolU~Jp6@(X#a3r;e8b44VmwB1rx!b+;xiSxlRsfmJ)ZTVID?CFq^q_~WI5wM#aXOT1UYA1`~IjLlx|B1a68oS}P zKGTcw=-7&L@Tw2sO@J=}s4~Q@gr9p%C-7JJIdc-Q-+lt$@!~={>0;|wFPbSDx+h=S z5dEvXqh?Foj#;i6cm+2LF=ycAJ>n!8*T4KXY7EYNWj%ETcf8`D{*BMR(h$BH7_9@? z06;$N-{Qp^FHj7gv*{4kiIX>{QhRX4=2eMgQ-s*RvA&Czf7g0>^BXi}!7sh`fO!*8 z?Y@ZV*JnqOMZF8`ZNcnbUw=E|lJL{7uczNvaq!ke>O7vmbpX!a8ch8YS8R1q-$36L z{)JE!PakvD81`n&%IipqK@4u*`cux)15Wrs{TVeGUU&%|h)Wf=6^0)7|GTDBHL)n| za#uF%gkNRL)NK7fH}|)GzAc7|H62FizeB6Iy_$-7A;{XO6 p{NVjJsYHsdzx|byO;k$18=T+x!xVdRAwq-U-TvF~uWt(4{|oBpaNhs` delta 11307 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 diff --git a/ARM_Tag_FW/Newton_M3_nRF52811/src/eeprom.cpp b/ARM_Tag_FW/Newton_M3_nRF52811/src/eeprom.cpp index 4f8ad754..09bd6b3f 100644 --- a/ARM_Tag_FW/Newton_M3_nRF52811/src/eeprom.cpp +++ b/ARM_Tag_FW/Newton_M3_nRF52811/src/eeprom.cpp @@ -136,6 +136,8 @@ boolean eepromInit(void) { uint8_t buf[8]; uint8_t i, nParamHdrs; + eepromPrvWakeFromPowerdown(); + delay(1); eepromPrvWakeFromPowerdown(); // process SFDP diff --git a/ARM_Tag_FW/Newton_M3_nRF52811/src/userinterface.cpp b/ARM_Tag_FW/Newton_M3_nRF52811/src/userinterface.cpp index 5af0f5a0..735ad340 100644 --- a/ARM_Tag_FW/Newton_M3_nRF52811/src/userinterface.cpp +++ b/ARM_Tag_FW/Newton_M3_nRF52811/src/userinterface.cpp @@ -62,9 +62,8 @@ void showSplashScreen() { fr.setFont(&FreeSans9pt7b); fr.epdPrintf(2, 2, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink"); fr.epdPrintf(10, 38, COLOR_RED, rotation::ROTATE_0, "Newton M3 2.2\""); - // fr.setFont(&FreeSans9pt7b); - // fr.epdPrintf(5, epd->Yres - 40, 0, rotation::ROTATE_0, "FW: %04X-%s", fwVersion, fwVersionSuffix); - // fr.epdPrintf(5, epd->Yres - 20, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); + fr.epdPrintf(5, epd->Yres - 40, 0, rotation::ROTATE_0, "FW: %04X-%s", fwVersion, fwVersionSuffix); + fr.epdPrintf(2, epd->Yres - 20, 0, rotation::ROTATE_0, "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); break; case STYPE_SIZE_022: fr.setFont(&FreeSansBold18pt7b); @@ -165,7 +164,14 @@ void showAPFound() { switch (tag.solumType) { case STYPE_SIZE_016: fr.setFont(&FreeSans9pt7b); - fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "AP Found"); + fr.epdPrintf(7, 6, COLOR_BLACK, rotation::ROTATE_0, "AP Found"); + fr.epdPrintf(0, 24, COLOR_RED, rotation::ROTATE_0, "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", APmac[7], APmac[6], APmac[5], APmac[4], APmac[3], APmac[2], APmac[1], APmac[0]); + fr.epdPrintf(5, 42, COLOR_RED, rotation::ROTATE_0, "RSSI: %ddBm LQI: %d", mLastRSSI, mLastLqi); + fr.epdPrintf(5, 60, COLOR_RED, rotation::ROTATE_0, "Ch %d", currentChannel); + fr.setFont(&FreeSans9pt7b); + fr.epdPrintf(5, epd->Yres - 43, 0, rotation::ROTATE_0, "Battery: %d.%dV Temp: %d'C", batteryVoltage / 1000, batteryVoltage % 1000, temperature); + fr.epdPrintf(0, epd->Yres - 25, 0, rotation::ROTATE_0, "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); + break; case STYPE_SIZE_022: fr.setFont(&FreeSansBold18pt7b); @@ -202,20 +208,20 @@ void showAPFound() { fr.epdPrintf(10, epd->Yres - 43, 0, rotation::ROTATE_0, "Battery: %d.%dV Temp: %d'C", batteryVoltage / 1000, batteryVoltage % 1000, temperature); fr.epdPrintf(10, epd->Yres - 25, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); addQR(epd->Xres - 66, 47, 3, 2, "https://openepaperlink.eu/tag/1/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); - break; - case STYPE_SIZE_043: - fr.setFont(&FreeSansBold18pt7b); - fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "AP Found - Waiting for data"); - fr.setFont(&FreeSans9pt7b); - fr.epdPrintf(15, 55, COLOR_RED, rotation::ROTATE_0, "AP: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", APmac[7], APmac[6], APmac[5], APmac[4], APmac[3], APmac[2], APmac[1], APmac[0]); - fr.epdPrintf(15, 73, COLOR_RED, rotation::ROTATE_0, "RSSI: %ddBm LQI: %d", mLastRSSI, mLastLqi); - fr.setFont(&FreeSansBold18pt7b); - fr.epdPrintf(270, 55, COLOR_RED, rotation::ROTATE_0, "Ch %d", currentChannel); - fr.setFont(&FreeSans9pt7b); - fr.epdPrintf(10, epd->Yres - 43, 0, rotation::ROTATE_0, "Battery: %d.%dV Temp: %d'C", batteryVoltage / 1000, batteryVoltage % 1000, temperature); - fr.epdPrintf(10, epd->Yres - 25, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); - addQR(epd->Xres - 66, 47, 3, 2, "https://openepaperlink.eu/tag/1/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); - break; + break; + case STYPE_SIZE_043: + fr.setFont(&FreeSansBold18pt7b); + fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "AP Found - Waiting for data"); + fr.setFont(&FreeSans9pt7b); + fr.epdPrintf(15, 55, COLOR_RED, rotation::ROTATE_0, "AP: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", APmac[7], APmac[6], APmac[5], APmac[4], APmac[3], APmac[2], APmac[1], APmac[0]); + fr.epdPrintf(15, 73, COLOR_RED, rotation::ROTATE_0, "RSSI: %ddBm LQI: %d", mLastRSSI, mLastLqi); + fr.setFont(&FreeSansBold18pt7b); + fr.epdPrintf(270, 55, COLOR_RED, rotation::ROTATE_0, "Ch %d", currentChannel); + fr.setFont(&FreeSans9pt7b); + fr.epdPrintf(10, epd->Yres - 43, 0, rotation::ROTATE_0, "Battery: %d.%dV Temp: %d'C", batteryVoltage / 1000, batteryVoltage % 1000, temperature); + fr.epdPrintf(10, epd->Yres - 25, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); + addQR(epd->Xres - 66, 47, 3, 2, "https://openepaperlink.eu/tag/1/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); + break; case STYPE_SIZE_060: fr.setFont(&FreeSansBold18pt7b); fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "AP Found - Waiting for data"); @@ -265,7 +271,8 @@ void showNoAP() { switch (tag.solumType) { case STYPE_SIZE_016: fr.setFont(&FreeSans9pt7b); - fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "AP Found"); + fr.epdPrintf(7, 7, COLOR_BLACK, rotation::ROTATE_0, "NO AP Found"); + fr.epdPrintf(2, 25, COLOR_BLACK, rotation::ROTATE_0, "Couldn't find an AP :("); break; case STYPE_SIZE_022: fr.setFont(&FreeSansBold18pt7b); @@ -356,6 +363,8 @@ void showLongTermSleep() { } void showNoEEPROM() { selectLUT(EPD_LUT_NO_REPEATS); + fontrender fr(&FreeSans9pt7b); + fr.epdPrintf(2, 2, COLOR_BLACK, rotation::ROTATE_0, "EEPROM FAILED!"); draw(); }