From 6240f5bc738b3ec9b8b53df9afae429033d707b1 Mon Sep 17 00:00:00 2001 From: hangpersonal Date: Fri, 28 Aug 2026 00:03:42 -0700 Subject: [PATCH] Update repo --- images/ESP8266_TCP_Client_VET6.png | Bin 40500 -> 34383 bytes .../Core/Inc/wifi_passthrough.h | 10 ++++---- .../Core/Src/wifi_passthrough.c | 24 +++++++++++++++++- .../Core/Inc/wifi_passthrough.h | 10 ++++---- .../Core/Src/wifi_passthrough.c | 24 +++++++++++++++++- 5 files changed, 56 insertions(+), 12 deletions(-) diff --git a/images/ESP8266_TCP_Client_VET6.png b/images/ESP8266_TCP_Client_VET6.png index 9383c435bce8942a5408c7678a6a781c99b4d68f..af87385c00263d91dc9d8d1cf79e443bd07a6f5d 100644 GIT binary patch literal 34383 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 Ja>bv$`hQyUa~c2u literal 40500 zcmbTe2RK}B*Ec$;5)%F)NFs8nTa~OZ%>}*dB68P=X}>W*KuLYp8MYW-s@iLx7Kg1wS{SEC|#$#LkR+buB#|N z*9L(u?twrT&RsbV9GM?0VFO;Sx+)vFgFw_ROcRK6%sQYP(Jz-Z*Z6I$X-T;#R?EN4nIep!u)rjAZ4K=3<=C zpq^tQ7G4WiDP$=AdLwd5DDfe-74mhIcIBU>j>7Gsid65r!8gL3o;-5fGPSsNYe442 zGP`#yKpL}sy5%PqsN6r@FAF={^T~i^9KrTvmvWMv&phCqMv1v9zO5gv=BFwV7K!GP z>OyM6qUx0bDsWDg44foru@>QZ)efy9o(qkkNb0#b(F;kq>a3(B%wn&Yvi(ER% zV5ve;Wd+y4o zN@dxo;OYE!D)A+lFSz6OgXe#Und>Ea^Sxt@?vJWSS{J!eJ#niAyBMNTXPHvN( zv@uF8XpggkbK0lo#tHbGBuI=|bi;Q=kufTn4_}g3z;a2D>B!ZX-sY09^Fx$o)lHb^^^tdhvRu9)B`tbG5*b(jYl%$4M$20 z;tb66fPR8Ng8Spb=uO+1fQA0XlP$3SK~JWw!P&w`R-J_vYs{Y&54a01+4;zXcrX%r zhAx`f?JHHdM4tE*e{6x-W5OKGg@HNyHNh|8R?Q#RWcL-4Y!PQuf%BM?5jpR68q*0+ zZ}M=EGJ3x2`qb&-PYLrcXc5@_!cJi)Jrlf_D(Pe^6ai(v^>>uD-|86aSttIOexf@L z+8}rkeM*?I@qbAE@b%Zy(;tYFx&G4*>BhQ!KV5_ z7528)hWP^*Lxs+kk^+z9j4*$UnSPK_02E^jx0Vze8z0APE1m7`9Gx9;9wbdbPscqD zr#qzs?j7|Jb5=;gCTF&1t2AeWAykaUlz%U&^&?O2WJNtq+}XovvU+7W^VB0P7Q54! zd5RYH?-V=(ey{k;otzH!YHSrX?9EAINF6&{<6~#5{1cO`X8Vj5J}3N`wBA#@6Y0F+ zNJpaY)S1^r2>5v|u5J^qHy{lqJn>wO4^Vx@m8X&Z5Lz)cf^=UhPI|M{m%dt%=2G7& zP~lLYwsy;lfGtqnBTN^m_K5VQOY=l$i596(7u;6i6qngk2&FE7&$mY_d1Yg>6hhgX zp9CD&;q0A<*gS`%f!i0c%RDd1O2G_e&#FwuBPlJoR05k2phI)J>BB>-W1% z)o!$e(K$LgM$7Cacli)dMA_XDCE2YT3618kjT(I&et!N!JTL@0|0e&SWn&se+TWayrIeb?R*J^CwKMY((MJT7-Yjtakwx4u7Qa8w z^lWDu{rQM8fu{{DDCvvaCLc|YNJInmf;Smbo`t@u!fwOr5+RKiS}1>K=Z#dyQn$5{ zWh~MixQ#dyb32OK+IF%Eh3)R{0+M5$!S5Gj9u@%a00ACk9w9?n1Ag^D^a76lG}D|N z_n(-q*zm;0xmoz{E{7BNo!=K<2oW$u)0zQ|RBOJKI6u8v|J{e0g zKkP#Z6>~G5?#cx&O`T?X_?OttkOf7vw?1JhQ)Agq{e}ZZBFOmeESH+0Mxs$(8^)%l zqWtR*4i@oFKuoAK0G;kwwkh9#He0I0F;DAoxirF*rc#*5Qm2C&ds7>Bo;{szE7GMFTf=0u^iLo#K_1PeOL0^IExAP*GR*+gf0K= zw3%vEz(jnu@SPh|h@t}(_ehU?;i?GWP399H$b4I*ueNd7&e-VAPkTM365Ga=?`b1= zz{sR``vzAKLa*HW$ZEUYFNd-2X4qzi5U|Ll3|OCUWN~jV{j|PPdo-(r$uQc)ah!%( zD#yGRMW}b|P81|dy~dVZT1zb7AgpN981|AVH2OW<9XK;?qg7K&9gr77Lf=7paJveCzZp>x*!4zIo{vY0l-EYs*ylepx-|}K&L&&2eXx? zg+von3$Cd{>uYQGc7`?6Y^hS@sw%h1`yKEki_2|!)nwpw^zr{y| zu^dWKPfqve9SXKP<9HA*(}fJL0txP!I-3^my zbm|2JETuzNbEn5xrch8K8D@6Zhc)F&-b(`df+pb{(O$q#-O7x7Wu_#-QgKrPC8BQb ze^9ydu^D`PGIfgDAjv^CQu5AL+RBcPr!dFcnrD4-C;b82iTIzJ6{a#Qq_bdy}Ea?sT$iOU#8}x<5 z@x^<8HnexEodxFP?CgBBw~_U0$EAUUgY{bN1E7d&nD$s5DR7>uT`_Z;@h8b__dL>P z_7^H8F@*xktLEJ3xi-dV?){9*X$k>0fXyE)Wg2Ye`)NB@I!}owu&gPLXv&>bYvhnk zO|!?#XFO8wWM>#Sf0=Kwv3_qoGvGK_O^l3G;CL#F{hx$sRDZg3-eS0Cb>Zac$q|Qi z@8r8fts20bYFGlMYMrx4t2&x8x!l_lE?95CPUZGL$Z74Ob%x2ZPpQc-&0hO#p6QgH zWMVAP>TfwOTx^l-q%3@YFAbo+>HHZG{Zvw#Fv7AcQqVC(Kbc;MYDHhy!u#rpIcWt@ae z+}*C+-8)X5o*D8y%Y`otIX$pLY^Tz%`KjLO5{Xka^E`diMKg_iL|?!J5s z$VLRwvkjgu(oCRJa}z#p(hNL1k~V8I~38c^D?r)2kEDJ&uW2ptG$E4cB%X7^rYi!b1RW{wvn z^irV!@K1N!%5LAT@o7QLoDlZ8>S~>*^m&Uk;dsDPAkR*ZN`3+sPH1JcsHP;Mh>ZZM zttGt_d?hYn04~>30{mnnp?+<|;Z6EgrBV+x;NysQ-VIQT@)wts6sVZFN2g$@05Lx0 z;g0KsHf}Q`j!k9`$E?`v@|^s!YigtLg|@bs?2WGdaIUuyIYScdv9QdM`o6 zm!xz$eYQ_L!&+bh-VAG+!FD6Zj}`Yy8D~f{7{7TrjSB`gvfh8bHgfi-LvaNUs{yf+ zv9{0^utzB~&jrkFfOFM`3Fu?;JpwWS92^oD0m#6lW}7T-uZD^hRcL4`+QYT_)qo@D-rJZe z3Depwc^A;B`((AgtB{kl78dP?=it%I7#YrsmOHI8mt0Txmj(SKEkR5zZa zZA1`0+sac#d+A1-0-HI)Wz8I>mo*#`0(YkkN|Vvvt}7=h@Z+U3 z{F(m&Mc}#_Q`vD-f-r8I=9HjkU?!HXp+<2IxF#r>-zYJJTU8CUFy4p9=avB;1JSr! zqQ0WW)VSL&=l7;r(`mm*?j#OjZR9nLKLGdXOEkng9Tp(Y4l>UUYR1jGi*J%o^fZ6( zSie)nt*mY?oC(~p*~SDu-sdkXE-SMLI9Om3cj~BIZ)R=$GwE2S&K<{J)=(K%PM!zi zRjsf8_0oD+H2o!al9`v0<*UC7(=sed>iJ7PzDnlQkp~9F-fR6!**;&qFGN1@np4^B z?^up!;bavB-MXr6N`7rpei_G!TrDiBr~b>Cf(n!W-)4p>hacgm?Nf0l_*^d5Cmyvg zC2VQ@MbJl`%4ybV0b7I}LExykBy9NuxHf(m&&76IFrF2kJA2a(Uy{s^eEjV-C%so? zjag3avBqZ^BDi))jl7iCQLVOajEwz$%kbdpFIAzkhsy+8)&{|$MQ0jW)X`vcVwWQW zjcnR|3})#Ne<*{=JUPu+iwLo*)sltt5H;jH7T@ah69RTV+GW__-F_y|_uRO|UQiyl z=H8h>T2uT&zQ|=>+pH~uKSlp~S*qiglez3p!j$J_M!W4pnWNhElbY27kCd3zPx$q$ z6B_@ytLX*in5EbcDvt9=tLL%G#?zfXZZAAod4Mwov2{r^l0K5B?Y_)Um)ZFtk@TYx ziQk!PDSja7vo}CN3>b|Zm8~DQUEqb zmp6i6jKg?UWH|gDx}nHk&=3ctmVhvHN55&T5$#c=_F|*uwo|Rg-+ft3#fNtxWcFKf zi(d2xoP5^Mklh(5D3d8#!e*FCR>5WnYMJN4QIgr3kMu7XQFe~efth=HRU=iV>OzSTFMB53DP9+)l zamm<`#yGB{+Lrt@*dwww-V&VkcPpFO?)dSDwZ1ND2iOQs8nb%7-NPv;PjrCCS;{oR zBGWYRi13IXvsV*w+r>_bFeI+Wf;W0&lEO3DaQo-OSW}Gc3=hj;jN5Pq(;hdt56!It zQ5D4Pec@dTKD6=j-5WR!{V6uHzD3HEsq=QzH;CrFqk@*6r~<1K@>|`juA^_0*YY`4 zq*d?g%3Ld}3+&Itht6D{a&zFq_>nZDja>v$c6%Tt!o3dM_h+$Y0^5+zv0sPwgN=K?A4fFI-QUX}g@u&8M6Xgu~nPq!c;#vvNt zi5fm3`q$28?Yi(#yqHEkCL`MC7R;_idTQ-p|1OMW;^YStq49ywvO*T0rXTwRY9Xw+ zCZ7AQ_EhXhZm9HxBd;47CvSb#*EaR^%;8jF>0$SL+b?#HR=fLuj`)(OjXm(1`jCQu z*vIiGGy5_yZ6Fs&bOJH6S?FIVeX2Js& zmo*n{-o|gcuXN4Iz;y4##=XI)%OXp~^O_2w9B-=bhMwz5gHXH~`qJ2$(rRXCn0$ML ze^xLaL03?gIYeVqW%T1lR#3h9%n%w;tH;)`2J-lH95*i#L`^SqC2nzN!0JTptg69_ zz<(oihfe%`>B!b0c`fdrMDuvQtH6tki@h_aDlCJ)Ix36p@Yx>gzbb%~SIwV8W6zNf9jv^_GRSe=Zx;f~TkK7#o6!>T z!bRNRMdqnbf43fex1 z*lWzZyyO{vf9Hk?@%^s6S@xGiC!NYTn2X9>EaM+mxI$lwq;F9PxgZlilGZc#Mv)ZK0BMyAb0 zKxKk{u=N(W4B|Cc7xaIOz>rMVxm z^3bV{XdEpFlnN9N=sI6SvRaMh@m(&-A~A_@S518O@c48Yqa~@XvkfW<*kM?#jWan9 zdP>zp^YxUI?XX#QtH8L_`Xt-;D^7(;##c9q;e;Va2 zez6lr^-HLtbhPF|;=S?TI;Ihv36XxvEkIag_wK;VdDpLU&+q%*@z~+uadK^AZPfa8 zqQU5*tiZHJ{)BfoPEI@=j<~D()+q8?b(3j-G2N^5miiRu<@+isC=RB=irhLGywKc| zBam>v35}{q^y){?huFmYq(C8I3qU1R$Ypu;DI3M=}(yw zT{BkYCBAx2?RJNj<3ZKTIZ1dQZEsDbJ}3)E<)2l|2kS2slwd1>jmwQ~T|zKLPeIHc zecMFeSZ(Dib6W=)i!4p(C~ntjO`uuys2U7zQGo9Kl<9w@t1c&$)D%Ben5C(Wn1EzX z_WBPX4h)`Wso8wwdn7^S(fWmPglDcW=iZKP!$n%LoVu|9gwQ=3bmG`Y!tK%e`&GN37k?7x0NvSRoT1J!;S$_%EWzc z`(EWCTrcH=mOyLCR=7Aq+n|w~M`E1o_GOTVVxAZ7kxdAzHhg7*meuR0k%ffunyduZ z`};D%A5{yFM_*M(S;AFVqf3rP_scHsxaa@*n;SRT86 zUHgYTTG#V%XQfo(7II->VRA~KT+67Aa~d6F=yC~RbNpVfySsa-KQl=QSIKQo4y{2q zqMvLjr+&xms9|)$RRA`WB7WT9Pt6t+6?@!pG$$k|=*diWZ$SY@CMIiA7dZ_q{A z-1EFNV6J>F4|at{$PODclDqBaJmgFQ-AgjZCqi%D0FE76ds8L6O7~fCwaKO!@iQ-vfUd7FDt1qlkUfhG~9$1lky5r z0<>uLKi*cMr}Vc;I{KXCv{0h6Kn%mm4Hk+ft5q(A^2(Mzh`gDf^arFpr?qnOq9D;^f#G}7%#21ok0F1HT9&m2-VwB1)FLN^GR zZn46X^AEZi`B0l9V%pG?G$u_X{pTz%Rg&JJ8J-#J!aQ5Q*`b`qbV)0n1kxs)7!j;? zA?>A$aJ_>cKcs$3RD4&c;|slS3aY8n7cOFD_5OX1SPagGKxdDZxS>E8}RrLmYvi>WwvW^|VaA%q*Sz?jPz9n*a0yd}SI4 zJ$klKczTstQg5`FuFUikbks2`5iRNCBD~d>_P9!Sf9W;h+KXk;M@2cAwwDYtJI?!- zmR|Vur(E9vKBiI0DAkBWGe+`|j!lRwjkqhF-sf6c>H4&6mtRFvXLI zslfCZ8or!TI_r?_Qa!22=R??)M!o0XpA~utrgX;lyuRs>C%Mt!bzBnmBep+V-$-<7 za>tV3_I-e)g_O=a#5=DzuSH%2y$t#OMmn?V`YR(B#{*|LXIwBc>L42|v??P!h{{kG zcBrX+NYuGAftA`GHe*d=DklhuQX-%#Jub{D!Gy|RS}M!3rMPsu$xtcIB5UZ9ce9AW zL#0VKs4;KDKt9JjgygV1{kB412erA>xTE*tTs21k=qht6Rti2tO)N{8LXq;<+MK-N zVFTMNUYryZ+rJh{EIl_)?6#xO%SCjP6-X3S)04QDrHf;3{DwMpiZG`Xsk7Re`%SSu zb8SnvrZu4?QO-A=SMWlDwS5~q8LLKi{$RpKB+RgGxwN!&p=x+^TvClaK7L%Rx?_1R zTWHcV%Q|?o1P@;MmJOO@^D{|&d_|4=J{&in=dDcrJN6fz!XZ69amq4F9t?8vj@6J% z28pEbj8XC!paDIgqN*9-cNTJE_6z54@UVJvE^$VI{#NiE&D9G*9TVlwb3vECW@6*D zwb=`Pn8{BKJ>y${i{;e?%}1?vtu}6+Z@)hrgptdOIm zuj&-kcbBDtbAAaBTszA$2mg80&4nR{OqbvI_#6NkRWqdrw*WXc3ytAad03M1+qg4L zlBxJ5Q8$T)gn zR&*p{Dg;VL%GTdHr|WUnqO^Mb*YWt|lbxpPS3v_|g-dh#{hp3&4RNrX#++C;5%9qp zPG^m`Uf`J$VF7!!!1`V*rvB%Z5?)*76Np8q&(UVPc zKf^w7q?}qmn4!e^tY@@e`-%u|Z^M3giQoA$@CI2;t74YD=GgOmgwMWS3G`I+C6)g` z9iTeIPuZ$iitTI~(ueTv0Px1C%FTlzDG2L#Y)IF_>7AJBFDS3c$rfqojr$V(@rG9f zSIjg^P$9T5Mn`$sYCXF%*F&KJ3Y>y!Liax{YMdrlj~tel*>0mq3WYmMYE}x4iFKwN zprEmvby(eH4ngE}DVe2BY(id^tGhF9l^Jb9XkKHZ7d$ioyMy+7Zs& zLiWO0d04fKo0NKn7;KJ`q@MXb;<`GTXZ~EiMu2ibrCn{!N;{T{NH68RNceJUnj3A( z2$C{bH^s{SKGmg9;c+$&A%vylcF|cnDhm?kZ~;(6i)HEfu9xk}gPX`t)#cVi+3JrR zDeq!;T*h_?FThF!WZk0vSlyg3e^6owb;l+ZdmUyMP#jp@ry1Uk=_im|I~k`j(mng3 z5%>$d9s*)(Eopq!=AC{5R{^F{azAjik7@RNE%rK>Cw>&~AHqWAsA?Sb#Yq5+On0Lf zbn@Yn1chNOT!}h*0Y4TfSh)g>RgXo!>Fj7-+oECgzx^Hp6VP40-gI4f=stxuXgNXU zr`zqi_{I#nwO-KEm1ed)+Tee?p7!h|C}FX$W5y=XvL@Ccl9ff2%GgA@cQIiWl=!m48#bZ=`h@ z*WXVqD}b?}{2Z;-Wg)Pa8mCV|jk(lN@zi&O*opU!{T~mzwfNB4)uJ+nu_s>ZhRuJ6 z^A_L=UO`pG5jHvRWfcr@#3#3K{%)b~=^UB#h|{Lhn3wsv3*O;4E`YSX))1}U8Bc`^ zPHSWe2adAYxGhC_?$!8A`I@~wv2(t4e{)fd>me@~v|0WtbvOLNa0cr`lj)G$Lrs??dxO)cN%~IxAjK4=k#IP;sJ z?U&w80-LQVq^Y)2jU78Fnvt-4y&;ciP+Q)PWU0#=7ZtqHNu3ABb|R@#%SXcpgYY`z z4EM8VPPx@@mVfum@hPpQpQ#IRjB$?usoBS4tTsICAWc(^yOx|R&?2ldMCryIgM8|s z?KchewZ0xlHZ@usSi-ZDPBoGa|s@E451wy5cRg2g|38jZPL5Ndd;EJE+9Uxa33$c zm@Sp)o0dav)|vQl>|C}inTcD^gp@G`amOE7fBqY*)d-|6F9u{7tA%iE)-h4S5aI>i z>qE|C@SXFwN(W|E)6cHcgxPE3w*@?oxcTQJd&WrzY0ku6qKVYRi{cPLbxYdp-{T|O3TOsC`!~6W#mxGUg zYgrFEISxl}zPowSC=6ZF&1?`vJELO(m`zAX04NkDH#e7?P;LA=3-U@|J5T5BZqs3f zFO*AGcn`SB0hTA5b;HDpZN;+z`!M3>lLST$#9< zAB3k34`AKXSJ2~1k;G%=;Mnv6B&<17>7h1gmy$VVz8x`;ay+(^P2!9nSUJJpUFU?M`C14v|zsU8E)8vt0;9z zRr9itX;UI9%k^7Li=Pu7KP2xN%oWSpi-~K9c5g0a(c~<|p1eLakzxU<#~o{{MbU3r zEPV@&->>KCWRsyyJHD0tz2Nkr#t;nITuEOp(Kn|5?%XogR_#tQU*f_qV;*Vm7Zg(8JO6%0sn7u;g^U)#I)YNL) z-k*!Z%WcPT^!6(Q(cfWN&1dRF7i}!xorb0zzjA^)7*}ha;`DNwG zm|usn1}k{VW1f!*7rS&7TY51c`ioNST9S;wRas5gXxdJS7^}17QFabbD2i0`NBq{z z1<+!s&$ogjr&cOy8GwV2O}?Iftw5ERHUOz^PHR;(lTUdeczsp46&+|IA}v9E9sQ|6 zMg$QIKBeWcTZaFQ(=g@gXHiPDgD+qgMfw{IXi76?zTMTvN-mfU&>Q8fmU2~bzeAgZ zsCJ!*y{?%*8FaAF=Fw(ZF{^_}OMqs-&1m&-?Y-FboR`5;-jZ@xFE%oq3tBm)RS76j zJ^Lw6(la3ZLbGb;%2~|u>i|`dAlgMi%tpU=XwqD1aj^%pJV#<;;^dRw#~v&OyfHVZhpyi<~EZEhsS3D;z?XsT7 zzkIt959#*SqVa!XHkVL5>TF*xmYr*JEnPR$=N6aOrNy}a0f+4>2-3GrZyKV0md|d1 za`0VL5Rx8q8i({iYK7l&sO<-cj^{tl;!Q@T3x8&t%|idt-N`@$)?p`*co!bMv0vNU zGFm9#-QVztEz2Fp9%$FrZ^9D(Vw{)S1q`C^TzXX`km~Gw_<%I$rC9dt7P#s^MD^)e zCvpFd<`U2ZYEd7e+^t{5rl`~V@td=JqLofmvwGd(YEg(7Ig{loAif>^vS{G&(NEQ8 z_Ph*ZgWAtueiTUv95Mz;PuX8uIbAN5*dDujX=P)2n(rYi6Xy0u6b%RD2>y9wDn7?z zTd9-KHO*JaYMA?3@}|_icHvLIGt7uAIP|0DO{Po8G$kRr-!jiQpvjvwjGYu(%b#q= z!X)(U(C`C8AVB$QqLALYfx+Q026aJ#Pz4ocA2A)Pt!Mj|cC@1=JP-%BCyTUPxr`7- z=LzW{+DG(owDDX1qL|w>J(9D+_F?m3_#o~T8FDyi@OZ~jNK(rr#6Hy+`h>5#T|NW{ z!v0}Thx~IP$egWJk+sIhx6sPCQb8;uWBebYy%Tfm`LFl=>l{Gs3?M-hb8~YO6P@VY z559v=bZs$nAGhN6Rp84ddluQU82-b%X+vjM&gr(4Nd`#*`Mwd)E4&=)LqGEBe(HS> zhncgJ;mpt%HpT`~ucs!z0R>6rC^GN~3kWQ?S4|X~M%Re4FPVR+I0-X#?=Ysaq#zGD z(B5gRlX_rcX!wcKe$zH2@=9wN{Y~R$?4tYvKya;*cm(-WTBzb3d20#hweZHkr-Mfw zh|V5+AhD5!AaapEzOifSqMC;yTq`*m@zb`T+O9BbW~2%5#?ed9Vdq%S|aF8r_2=?IqXEV99n-4ELq9;O?MdSo*9|f zsDH;^oc90(UuP|1>?EDXExdN2CCDg*n}~y+297+5;P)x)b$3H+8fAvKccbVE*AuaF z&^a?$?`*g3I2=}#KH&ID?MaptuDTX0eJ+{e=gg;XMSPr?&$$Ul>}7)%e(9f#xztHl zK+7Mh2j~+NdR~sI+Hq)(^6m`McFydJZUumujYd{a?wAnwjom>Gg=7>&9vw@>~ms8_O7b0A9R{&E7Eh zG72h9h6Q%cO-F8_v-p%2t?Ttt$Xo=QWlI5hI-P^80gbK^{dTO>zQvX-^%n7)T zq4XKmJxEwQU$6d`2fUL>dfEidA{UE@zL~2}`&AzDvvp?Gm2#G(TM2tKc*2D5Xc7(( zxM6?v4M_ZjHck(EHfTm!X^LDCGxyD+x@HT=3%8LDo z4EUwjWBRxwnU=Df0GEc$RUkI8iSyE?0kz4a=}AVd#h`qSjV}&|P^-)X9c@|%9z^WG zb;q7ZFBBq^1wY%cBbwwFG7QbkHl!{Fbt-_ib8Cudp1YP`8o0_I89#!6Xds?LIP@IR z9yvw`^%5=4`3`U#XUdk(x%g&Q6VT$tP-)P1G48g;0kfVv>XGoKiA?#8PF0-f-$IAh zdkuAdn>^gn_-i<)pV;5#sU$mgSaF3q`hBXvxb}Kuoqu^{<&fu=lO8OsqjI)gtFOhDOOBstX_+Ud7 zG7)Rxq~E^lINL>fv@P-71&TWnm$plLBfjp7tIV>=QLsQY$4fV%m4i}{Uf5*Kh*O0AWZx#^E;k7TCQNjeR zoxK+0lZq0#!D&oUvD9L8EbZ(E`DfJp)?LimVnUr6V16%<3>@~)9vNO;!aNP50!!>! z-ec$C2fzHqGY*aIb0)sxFDO?AVijBn0LIZUOI#)47}Mv)MN}=(m$d>#J;c}v5z?6d z%Bh7xHzMD>4CHTV7yBN2o>wXP-olvM)Mfxwzxz$zbM0{tmVCNbML8=h=RObZm!2D8 zy>1rCs|H_r>~aTx((u`@t@#LDgF>-e7>72lBnjvWZIWUn`t}PS9Xx!ENFVYag~&QI z-00-Rrfwz9TPE!+OlK;3fkdDUYx-R$hrt1x5iVToMOia0o#d!(VXpIJPVb@iX&b1m zuzwtMr}`VC2yGYK>R}5%U)qppLZC>yCT}YLSbMoSX@Q}z-Pbu;ueTRmBITm8V&|!Y zOWd`Pbm1#PY>jQ!>UlSM@Sin9|lW{dm%IxRw~T3ur(yuJl5FVdCevvOZ_m_;%Xgk!X^z=BnGL zv785Mh0mFZ--2%VNwVKoB>dun(La5)s2UT_8Tu9~23~12etai5N^;ZDNF}%rQ{&t3 zocNg$mw5%mM1_=uBSRs zU2y!Ut>JonfawlS%Y`bEGF^Cbu|2xJDp7C9m?%Vi{*DxIEz8mJW1k1TxtI19V-S51 zbRxM%Ys^7%D;JgE+d8#LJ#$?cGU;GtnuW5C->2$Szdx@Qp+Lpx-Y#T%Z+a3-Epk5V z0_6Dp6~e(8VOHi;ZKIb-VQCa*xo2J~`CoC`qo2ieVAX)nyBTS8G@vHlX@H^Gj2$*z zpo!;S;XOXk-U{!MNeRA7`KWutZ@iPSyp@Wayi?ubx?e_Xl@o=p5cy4;S7N+G-_6wT zY|)s>#r4t}B>%HnIgCz$6Ei|CAml1j3jhTKRv`yurRRINUvvm1`dr^a<7|JnS9#{U*x95zppin$le#t6e-gg~Wr3nhm8mUc9qthga!d|D4v=JDA#=;I1bwe9$E#ye7~(C>kj!;akgAse_M4*708FRXh^152$$WD z>H#yLg}oq!(6$yWT{232_wm5Ls>7@J#ry?eN8zN_jj{iWqXHh7wKS)AAl4W_4N%D; zHB5Ews(0FuXM^DLJN+Af=friOx`AzR9saat%#9ospO)Zp)h?{`wG%#4j4 zz8L|l``NICNpUH#?d<`0U_zbe&Y}x*m19w=kxR%Mvz9@=u$;f)Q!GnMGOsnBUgI;`H8V9`}7gc%u^a5z$frgJiKN>`tes9PEZquQ8dJEJStp zIPI!`;6y8>hQ}M8gU!dcTmvmD>;L}#40wdm;bA;-uTwK%t19!vY5Wxk^xI&;x7Cv^ z?ji`UMulTcS_>1KEy&AQl>%}h?>hv~fj-32zjTY^oTziNeDpWh`_!WRQ_UsyVw(ks z4q5Ad|6m_`Ay$zprdF9@?&2`~^XID5nCIVy>cu+|h7`7NPIS+|nw)v<;GF)Z1wA)` zjQ|C`nW!!Y^iuizbl)6-Q{|MGCJ0krijp1yV4 z{>g(q?pc>GC=DoC(~94J;AG+Z&e2mYM3veMgAE(;7O3gdRk|Fkl#8^!Jg<||xBubK zdg#Z#?dhlHFbnIBF)%QAK#G#e%ld2z2mETa(iWqu)Rw~4fWYM`T~FtWs`BTD_&x>I zM8^b^p;6OHzS}6HcH>afZ>WxsV*+l-7ogAA9A6zdO@?->uLKWE$(fwgNu~ALRDDw^ z(6hiSF+9F>7bJ3VVXU#O-+vU_ir}Ipmv@Z$?uNBbYyCpisI)%OK^UnGQN6|*MogOc zr?f_z1{UMWWOk}u&46A=t#lwK05SQKI5KKL)oE_`acl!^_XN2#Qit|Y&>(*`Lqg{P3sC*}*Z&20nWa9g z(db^BobKh_CQj4<+PMoM=(+kBmGjG4V`JY|Q^X}$!)BDYwe8IEJ528|3)9rlt&G^@y z*Sw=KI=To;Rhv)fZ>8^>W}IYpNz>c2$!E6l06aj@!Qfd4+JYPN{lqyqfK2sX@KMFH!5$d_%f|yJYXv6YT;l zdDZZ?_i#a(PhUyS%;H=py!Z%E&$Z7!npw3kaDCSy!)ZnhX@m9dq&qn%`lSlRs~D+XWZJz zvq61D3dg`6xwQ9xuJQDI0JJpG@aY|*eBH}Y_2*nA2_}TeHu?mVS-vT|5xIc=Iqm-+ z0^E`T%vmQjXIfZyZ%!R}#zf-h#rue;si=g1D5qk1V@Jf&DOUeo9d-|?$v;W(LTdr- z+R1;bEIXa)q1Q?t2pPAd^b{u2t=4Ur9ho6v1a>Cls+NU2=R_VBD{fS&jGx=z1ky4+ zl4y3svObcFk5%V?gpcjcwJik5l&;_iP#Z~Bh=t+5aVgrmksr5ddwUM_I)Kc4RT549 z)pwGb^*@*|eDgd|wvK!5`}`EoBRAnH0$iwIKO{n3kD<3#{De1UIsuW0a_6HiY-5%$ zrRtF!`{pI29tYHZ6Ci=zi0!=aQ?J!E0Wm6sg8Fz57rMjGNS>#!hsf6Ton?u0Z%iMg%~b>Y6_jq;__)0jX(58m8Z`^OD=|KGj}wrbxXpHrh1opp%Y zw&!{P`#&4vjn}|T>)Yf9WIA;I?VSc5GE`9CBp>?3hPVj2_F{58?J`;6Kw2Zu0~D>v ze}N7^8v(8nc#+$lX`hNOop)v%@^%q+VZ^Byw<9f+M#7+X9DY!C{-=%M zDLD4%vtjD@W@$#~n>ShHo;tgjuGmU};gvX5M7$Pr72tK4#?@0idrEh!^u?;Q z#hEC3?j}i7l4B`?%jeG{(;K+)pHr{>Xh2T|JN(1D-;!Fzpvz9;MF`tz?+w8VAd%;b z&t0CABO$Z5vU+L{xj!T4xI>=*E9>onm(9MB)~YAm1N8G z1x-W6QkhefRh>4-Es%wA?89zhC2ei(N_G6edwJhz6CdA`+;;=E^pN`guBLw6!o$m@ zv)W6gDHQVKOdRX12OtkvxE{IE2Mj8_*d<(g^$f-he`|c%tnMcp{jjp;&a3U010hV3 z;cMS$Bcr3DFbs3|9`t#kV$G?g3+I}-`g*mspO_`Z0heNGYz6t@kco=3X!COgDLR~`>mA*Cb6iy$5G_WVdk7r=McU3lJfF*#aj zh4SV!1}_RhGY7{?d>!%jY*G|rT@Ny=2wwV1Em$H(Ys6zx3Iw!l|0pdU4bhzyLnN6h zbz3~oiGEU1G?xAQ=DVmjv0{u@JzL*4GYM}(Ny zUvKh4klZo_eOxxFk#bkCg2#>zG@Q?C221)I(w{wzNV+j4b4vrmu0+KmbKYYPsKacN znY~yVj9>ZOMdL+xH5EI_pd*d{Idr3xbaoVO;HHwD+xoO}D<6;tH&;$*Ss1QJ^ws1I zA9IfjH&4bn+1f%-y+6j>tz11;HCBc>=VQBB5m2{z)Ay_^WStG7dN5;W2wk7Xc&@(5 zeT8H?89Zn`w(>UN9ExODi3Ziep|~vLEP=2k|BeY2bKDl-pm%h8**6P=JfiQc8pwwNQ zrf0Yt`NWfw9~tXoXxqQW7qeg>MKosy;0TdQRuqx&>2ae8n-)0CjC)v5A#P0m4^36Mr~*57V=8eeY@ z+jdIaR^^PSH+Mki)T1}OZG#9RuZlIAwI^#MGy_SoRL-UvS`}8KhBrYm%EE3qMLUhRw>^Sp6VCM3GSDOQcK&* zAGiV{zdTsYaTxca0yKXtghA$O`S8D~cg{)>ZPVq}WN&XT=M#V|^8e>T=jDm=_Ume0 z*0Jp8qltCw-z>i+K{QEKicuE&0BsR6Fh>*oC?9!t6=8P;oDpU5>TU z19r&oIj5zdnr`L^=(=lV#@DB9A|?EX7eE1S-C8jv>I3TU)eZ@B!nc;?L+$8PN3S2w zp~B-C7d~CwM->LX%S^|^@H1uafSqL~EDcrTvND#BhxHK)4A1tA$j|5XPBEbhi;yA- zN^@~XlsrO(X)nJ&uu*?G=p58R?tJS}7Ep^|B!CLQ&=`QEu&kd2g~e%bRcRCJqyhOn zF$mQ7a(R5byg=$1*UHM#r-3V?prF8R0W3o|5d}?w7oW5lctvNF>GgeStV08c^r@vM zy|0=T#rQ1CaZG7Uy`UtTc`z&CT)a~_)n57y8=v5haVLnDs`JGgq1Kg(KI8g!o5Z9a zzet!>e&4JXnQk_h7d`0Rt5QjwyFPD5QTqrtRfO%!Wf^HIr^dJuKk+3^xjM4Eon47D z0rOc6z0}8J8hKlHy*D(Q3H`#kxtwRD6~g4T)VJp69W|50lHSuojYtwrvlO+NW)0f1 z@`KTMH1fL~mciPD2*^O9}Nf&Qw<10{&RL5o{%zNa} zK;A!*PRaiv4{ZTzh>#LSHnw1{dMrDJZy84ht-b^wXJdGGu;K(<&8UK>vXutOw3~bF zlwBWTFVlbu-B_9Mv{XK#?)m!!_{rSj`2H6xFYQOOn4Rht}^Ruq*N^a76g?DaWS^m(#%H0U01%>gs?Ps zjED+JM-@+(!I7Xn(vWx)Z4ZHhwTnbwYoA+(!Ek?Gw1O zzo7~fOPq)Z{OhFjVKJxttVn#hSnd0C7IeQt2nHxEF>!@@dpN2=vJkkQ@|Lg*>P^il(sJeQ} z*ycFVdj0l17PkjA_gWX4nv`u5z+fD|3=svHbbRqX@_4s4bwF+ssHGGW;YLRJ%o>>5 z+FEN-D-=EPy^h2y`r)DecZ3EIOj1cZ@9nrF?M+Q@$l}_0G}jj2DI|+tRZML)6M{G7 z5*^Lt?HBK-(c2HZmAc`Xoo!}9(tC4xCGB%Mlnq`cy|bNG#23A#osdar{y^Ey8`Is) z-Y0@@-y(yqJ5Qm_dzn056FWe>4)cG9g}v_EqK=EmQ%_goiPm(PE|BLiOV;9Adr%oG zc6Q#1cI^29LfqM$n>xZ3YlS^keIsi*`DizwX+moNUz24hhL@xK>2h;gLaUm-@_*rUSD#`sge>(J(r<_yUp(f>GKu5G%S0~R zCv2IZQa|(bRP@tASG@iPO$LE)Wc5KfLDbu=v`Xlh+Q*7fjxu7pXN}l419Lv%G2X5` zNQ?(&nw}Zz5DRZn{$lgd;2xNCWcN%yr%zPWOeFfwOONz3UIfVqktB1QOKEKT8yzhw zzPN%Op;9Rc>w?)zg%_wIhNF>3AirBOq58iBg||5od0We(IqKLbY$^6Obb_f|eY#8O zo^>){=sysc8-SUd|H+hjwWCjki0sawMG+H3G>7$XeLVR5noLVaKy=>SFY~$wk^FfJ zHp+Om4P01i%D_HJcv?(ruO{rqHpkzk~p^+<1Z`r84>?*@Qr&SaUc#DQ5y&!dHuluI)Y7$)zdMPJi`lGlo;Z4tSOJ4cqlKBOc z5NLk=%N}r67?CsAGF?5%XSUPPgK!V3*td1-04{8ay*}<-ml@L9OpqW&iB; zpLlwZAiv%DpL-O5?K8LUVz=BuXgtD##HYma_tazP51J(y2KEG)CM<+qSce4U%gKf@Jw&9U0?I|8)R*8&jct`sFvlJW-LE2T|SA_@mg&I8!~8i3sr`S(LieXbDp z@s>mRh|YbUMwQ7ba%IJ1ke?aHt*Nw7Hl5|(qADy+(P6xl`Hby#QkjCQiy0?R^i-Pu zUiJ@t5X&EZ5RhgKy7QxY{W;580e)vMTkkt%OFJt}*baSn>Hu_-3-m|+KIa6z`Qkm) z^S!+6aYM{@r{rOL!X@OKuA2KTP68T8nFHu(%J6=eDllIY_%0$z?Lx#MB3+Wu9R4tt zz17FWO()ospaNP4I?6*~QU*GBVBROnIiO=<+iM?%m5#?te5kBkKsQ_^89q4?>gi@y zg0%dQo%l=##e~c!tqXO;oGVBor)CZlZ5a^&3SS74M>>ov*p3G9Hl`ciAbM9#hxb|v z3s6<8$&Hg%858Kv?h?^C%7Am+b47X@Q`kLO27L3(=X_)Y z@c$0#T8%G=h)a%g1Kd}WvN_Hk)0Zp+)39P@%6is$Jl? z{HVOR=%x>k-8I*RzL&P;BWZEZtuxKza)b{+7L-LGt*?cZpG0>2cf=^5p}w7YU$Sz| zDA=D4+On(-C;`YnzAZOfjH3}TFX2$^p?%rZY5Sj$l!Ub8*Qc%RLsYrJ03jTf(*wX=o z3gl>eDCpC%rx(_S3pgWESCl7z^9eR(_(&T26}BP$?4-_0Raw#CTx~5UfdT^LWa(oM zu>~P9lg2AVYV{>l-u?=aB+M7{ZSF9pZ{D0P)|mQD_cz>A@2MjTOzHd!5=P)BnF(fY4F*Z@;>XCT{4i3|w1wSTonogz_H)zA6)Ert@BS+*`kN4QNGUHC+ z?Sm@t11$?jSScGtck zBx}1N<2K6u%cUnRrI7SU3Or}uIMGNyOH!7Y1U%fcvSIf4`t*>ADga{P z+dH9n6_xa|hWe9XaprMu$?^snVkQRmf+LAv-El6 zBiYFdFhQ51kP@o$o33G$d3xUv!O+>_Q|wf1XMZ=`Br@NAQ!_u(!GEEvY>PNtqKDHT zCr72y1KLa}+}`g9^!9;7Q8xB9d$Y67Y7{Of3hZFAmcoKQw%qinK6+YIrJe$k4ohz# zy7Ivl_a1JF(Ba10j!$@FDW}>x0N~I2;2sf^Mmc>(|E z4Nj)!c2*J*J^$37gWjHw>;9la1P`kzP3zC+4vrd+~0f!c03$;SX&O_ z1^_7zpxsUS!`<5gMt3)fGXV`GU=j?BwMaN7UFpMvh7hpf#F>eNON3uw%rRZ;G1-qu z;)A0HiEk#pR*aN;2_V2`ORilaMp(UXeMEZZuLJCb$>)GEU3>ZOGz1`ta2P5Cd>8hx zn0qR=G>>4%3_yKf!v4V4I9x58z<5gOCgb8MkU}g4ZN5JN7iZ#1|L52MjxH{--(IJ_ zp6qI)+03h)#Jo2ULQT3v+j4(MPPEDIItIOEvJ6)hX8`&J`6)S!oWW#NrkCo~ZSGU1 zQc`w^OXps*GvjN=pKE;XYnuL{(@f@7<0M{dzqX%z3^M<;VvczvjhQGj9`ui~Ti8d~ zWiv4F{8pe00|Wrx7m^h7J}i|byc8Du@@^1}P1~$D4s*x#pCyOhz7tluMo$m<@w=;k zq)f1SJTg%apzUC+Ypcy)@RWa0G52Cs^|TLy^3lJ4uND0%c!?Kt`&WNSQTwJMZu0cw zn|wMO*mIYSGKmB`Iwno^C+S$`cJ~iDzs2yh6-hmF=wA4}C>2SS3FJzYV}ot$Ow=$OmG$MR zM`^h-7)XsuZDdyxKM$-$@^4y8if{}&IS-MLd-GRmdFy^Sg48JF`cr#pO(&KPZ{@KX z_VUxQ`eNk{peI>61$Sg5>0m)i(wUYAuPZk$DBw=Z5KU@HipqhOP z=(xe}aPhzC%!JW)hIwxKGu&;CM7th&?v!9~R>qv;mlojX9H+`_vbTzygT=&7-}OBlZ=DsNkV+G2xFtsfCkAml2irAj1+Z z4m|2vf5Zwucl=KDM2Mv#M5Pmss0$=iBSvujFe2FjVlK-C#M zpWY&2*1x3()K{5+2J?ucJZu)y%oIS>UbzD8)f~Nbd=c zyBTx3Ry$}@ldtj3aP-57xm|@H9Y<*GqyLXy(BCzlhorD!BuM{_ZipLsbMnFSKjh$z zZ`qgK=$UomSxdEL8gjxq4qT_sGbTmvHNU?y9FK3o{r#lojpv``ERWri^~ti|LpUP3|oHTcO3cH=w)8OQX>!hrS)J>9K*KP2~A z2&S2<=b3)~0$S)!>OAJ>;sL#PC!k%hNb*NF`|clFt0w+b5^?nu=s~WWzx>NyKC%y9 z|G5Y9iSRFrslT8`^K&WW*@uG?zZOT5NazuvUrp=%{S6$yb`+oN2@kC#8An;O{Pxmw z_6kB&46Hk+Zv4KW8>aeD$nPfeh4Zg31Rq?1F`r!aKU(oiv+?!F58czq#A`UADl6X_~fe9ST?)Dh3mJcmWi=W3NacGhy$amJ6T zr$~G26zI=aXKy(Xs{6CEi($IqeX};%Io-o@>C2r)UHl$mLCm2c=u}u$cQW0(SGCoh zQ}WbZuOM+55Ufm`ht6kN#`1eV?#}DGlTgT>*DZn-q3t8Dz$FG}2Lz0auMJ|&0uN9$ zM24_3c`7A1iJ2+H;x@1kI)_bssG-7VD3|UFkZxddOxG6+8d}&fMUF8IPo?^R)=wSpUNTKqW944WZfzNXFz4k!A|FPAvbt; z9Up&~nsNgdOBvGE(Uw%1P_)U+MrM*eJZv_vs0iua0po-vX^sfqP@MdHW$0UTL@UvqvLLdDmED1;~Jg4 zLvi=^*r>&7@=?p%5bxW3Q5+zRa=NB&t93igYQ))=Je~9BuuRBb&d(}@4LB35HTifK zm^0cpL?zGYisw6>nH^A>ORcyn)a8UEFu%YaS@i@=TaRWZ)i!#TBgwd7-& z>|T!r8g++s8aY?DTfeZsJGywvFLD57c@pB~`J499Np!#5yJaU`Gx8KvhP-lVH$*Ph zdbyz+O&i}Tf18E7NjW|j*WZjU;7mTOn>IuX4BZ`WCQ_Xh&g*K-71Gwut>QoERz-l1 z&*qI*v`CKTzN9yi76tjK=3CSB-DzGa8JL0u!$khz*O?QGJB`EF;_z2#ps8UGfg^s0 z*Asu2bjr7MiilfN5I40#TiLFP9ak1((VspKugiAjl^;JY;4UJZzar6DlQMj4T~sTv zTR}1v&<#-~CAmi+I!(95(N0OsnZ$s&S%*v?{AMx7Rdel|=D10rp4%0M<)9Xg$ycQC zJb3$4v(w`s!J2IAXeuyGR&lML2TLEr4vo(#fJim*j|M@?aQ2*}Rk!ivq&Q`Mf1KYI zB)Isagu26ilL3UpyeCOXfh1Fq)mL=(h?|>RD}80@RUBRX0;~3}A?1NURs`NDGvHF{ zl3np;#}i?8h>l1U=BmW8iKum_soS7>8M04Dr8=YPE7EHvO#4TQ?v@l5ddABP4=>y? z87u3$n@ao;Tz$*!?h&jfuLolbo(zimkOkm_AMM%L%fT->?~eJ~YtqP+L_g$R%y}5G zxoh^2rt`_hu^MITN5GSF?bWPx#V>j*pZ*g58lgXQ?P4{box9UQ=Sy7iNUuobU}2n1 zV)rpfv1r-s1jKWO|MQ4tPG`6%i&cQP+OsPxMs^5Y!OUmiRU497SMp4Mv_aWS|#F(zZvn;eHM0$(43YCe=|_d+$lA1~OI^azZr zEwUGqrs~B@CzY~KwLG6`L3=%Au#Dy*007;+ZeeN%S-Qo*`0gIjjkKAxIR|}-bwq#j z4pTaCB|B?APs4%Ck4SoPJuGq}Vwyr0#t33D7XJh_sOtqvULC0Ujm4qLRyFo zQ(6O=Q!kPg`k}6Z5HbI6hKMxl>?Y5v5U-s@y0BpE&4AOjca^^P7=^ztE(lkfBE*F$ z-J~93gLsH$_%9?7tw%(&{ktI|C4ESk==@!%md8FC9D2Aa*!hGct*B!~%U<}3`fh`2 z*BI9-y>kLJ9zagxH~FWAAr9&gx?a!YI3O|aRI}}39P`gx&o6Hsy>w~B%Ob(ii8crO z{zNcOv z%YD{{X*SOcb16sQ6Mhqfhth2vdG$1Uwuk1CpGX$cc@iY93+8R>&k2B`s>wvzHYH(W0RGxjVQoZV#A@p63E}p5Vxyo&ugqJ!TmXCr z0U!+Z3{331W2(=^t2F<&QpfqxA|zJi|G+SAVXAf$&(K5Krhjf3IZJJx#Cum;EArlS z%zy2&+69$+O_r9^{yU|Wlb!Dsg;3otI{lhvpKMFrVQkR(Mo;3_&YZs+H)cwsz8$Dp z`Af@qi~(G1&B~vo53}qXPvCWa9RK?SLRXw63gD>jJy1j`;_Wru=xoy)lD7a3j`|$0 zcPgPgy8RB@B4QFNdGHa6nQwve0;NEA7Dp2_-zgjnF6P;*(;ju(tPzJyFg6?@03d*( zA^tfE@dG;CWcv{lNSk`akE-#J{wmc&tlJ=ae#5)xpeTB*XDM1<-751+9x)I6tsD|k z-~h_&T(y5MiO}6Ay7Z?GRm+FMLC3lLQ^J?B(CiN^jXC04@M3Hc&zOr9A?;dV-@3YG zoT9w(uVm85A1Wzd<6De>H5!GKlGw0Na2>+U#WqUEKh4?x`TlOFI|n~aVM0RaQrFac*h;rW;jLKx>UwE3{)S}_r4 znkwmMAhYseb`&x7ik?apGb8LC;M#{vY{CNdpUEBHSBRsQzAb;ij_Ek>c^!%8P755)T_bPKS)ztLLvPtV z*_4KA?h(QNae1M%uugXF_>&>ZwHX`XFVnmutp%$`U#hZtbTE_Y1}%00t{G0BA4EyP zm8x!eKrj3rOhuAw0y)VS8X_IrnNV7RN*82wDQb0OAp2?osMs2Y015}!p~uCktquC7 z#-~|Z0{i36N1e!KPXwAop^RrKk?ot0Y4rV^hpdqV;swE>{;~vN24LO9eR4I^k&c;# zi;amA(Qj?<^wect@A1J!gLk-2=yHjyLtnAO? z1>8l#CX|x)KT?U-;2wqS$`j%{bBBJFAr8*yUG)AJS3ai0P@xgv>0n=`u+lp5Ac=fE zZ|$=su;)sA0|a>%Zl+c5&;R_3Nu(fn&YVQifUIcqUYhu8-Mzo1%#OI-ZszZL={IVCs z5z1-PdF~+ai!EV`oR?Nt0l3KU*;Aa)gxP7p6R>oG!J!-BE}a!hYi>k;UrC@UIT>(f zFIbetuew8~LV-aQ-&4ll$T3o8W2BQISOK z7P`4|wYABOtnYz_4h{%0DR`0;6N;9;i=UgdcvWHcBt@urmCJ70x~kze^rjtjUJ6tH z9V_4j-u16p0T^S>Rn!nM$N;zA-7#OMQb14%Qnu#HA%g^epo)BAK@E(7S+sSr>ms=G zH8R#D0m|1CJNzh6jG~xm6!tWoKa8R$6rvWQm6xvh=^5MAfL zM_8m;SJEG>VK}olBenIB=_i}DdEnKC)`!L&A0fe@nH!#mOgKu3!ANf`cA(H+ZtJyA zZnRg2`nKSe|EW+N2mP?WunZR5uY4ksJs(Ukhjb19x=u}Z0H9viXj5t~KA@qY@wVa< zj0ofTgyaNScS-YAX@vtdUjKfPibVE-GWGtyT&B_jcc^*xi?QG+RRJV-ZY+kzPoq<_ zH9cDuNYy~~A?g!LEJLNNf0Q2X1DZ#h9R&D^530@u>@X-@->Bk>n1^@dChe1qjE(U< zYwPRIQ?H!V7l(L(Nnsnk+dhdF-P;5wJxLzf-rc?M_?lyCw>g>@5|;(2Wd3W4JHVC!EXRT->+ora|e&ZIhv2p3MT^XVyk12b}Rk|eL<8Tergu;2; zV5YwAfHW*=(Z=Ocp}pbkrLOnUJxZ<*%u;7<@zQi?$|(Y5-!&n_m79;$g3E$4K?#Gl zrP31hreht}d->H~Yo*YC!h*rGMC@+nOodV5tJ`{bzpS!S)e3{bIBoMM7}&8C3j}29e}8)=7VA=5Tc}@V zswCCPlj2%vJ`0Xhqh^-Ul{gM5`2P%MsCRA_!OQv19!LqW^j`3vk+CjqdAr^mBFRR_ z$C$k8sVTmbQ)sp2 zCov0)#Z14n$r%%yNsdTXcd+r;8a@K$Dk_<2WfG(YiXR$#GhG~Hj7?S}MLaJ_?h^$v zkwJIrDKcO(EHOX6 zFbfskeZz9Q@usb&?C2CA>>7u0Vl*ath$P25{lhI>EqA(D_)fBT8)Dt?6!$aoJXl6s zjRhcaa&*R5sst;BNzd6}`**Vq!m~}pGQCpF^o4%N{WfYL)ISyJbg{7MkRwq1rSkT{ zf&2+%{TkPCsEp#LcZ7qL1@i0NF^wzpwA3TYT#f=s$qI9*5S&|aH!~ymk8*5Qxk{Og z>n6@o+*!Kx&ZfnAIHa5R(@*S0Cu9P!t@?8?kQ%DEBCiX1EMB2%$psf<%!C%$;Y z`b&qv2)uftRHKxqvvW!4D;F0Bhr3$6;9S^bgQ~K!V=PE&s!jnYbu~Z0AUN@LT;fQq z?3n1NjuPUH?A=n=Pqo+-HM6OhpQtQey1YGTN@m!jA)u+CYHO}TLp@1GjiO@2p^U9l zl#%%fTQNquq=A{NtVmffM-DyxF`Z+3ZvI#!w&R4&5V6lNHGJ39Z9PlXU(iTg1(DQe zIVp3r+VW0?WPSnhu`2m!ieC~Va2(#uwVZMo%D9By>U;%&or>8V0_$jV{-BB5qb%}~ z$YNPiU)XtR@6(h>v zoJyGR(u}AaS}k(Ac-9GL0YSW0?|~DkpaYK!RkPeQNTcp@IZjWVx_l2E6b{q@X3`Zicmu!4!1|3)({`hHuWP8=03+ve<^+8rTu#0S)-)Ypz*0b7e6u+ z&LEDO^N1uigDFGI((iD`x!jJSbg+%v?{K4ch_&Mk6)Iq4Y%*im_%b-82|j7Bj7GNI z8Si9Wf%Uh+j)D+xBeftLd~JUv;SNY6x$&3`?jX>mxN5qoB%=0~`lpj?|8}R%FM^YB?XFt4b(1+@Y1u3s zQ#V8lZMJ&S4aR~^f0WBsl~&xjr(H&*8MP=VDjH^s(5+O5=|XszZV~I|S=*ME!Xu05 zhIh!1JIs*DWkzz~s2~5ljOlxuKW|gi47dS5G)4dCrvazCGK7EQRl1y!mT-DycqK}) zfw^@CHVlVr#86fYPF)Lz?1kfoi0ny{{Y4ziAULXcQIWV-4#o2 zQ)e8CSFRbW$x#%_IcwPvE9Gy0$&D!sYn2f3o=M<86f;($;u7+bzAG+mQ=Tsm`NhO$ z4@C)R`hZhEEfSiWRr>pn_#sH)S;A{k9H;?Hm2Te9v|<>U;6$H-4d??kAjt^=`>rYK zyq{xg?kKDMFK*CDb(tIz2a^)rB_mlI5nSqm?M85TYlwLiI6X8w8~A2uAuY6U>(9#L z|AtPp&j(rkG4c#DI~yFb;XIQC&hr6N2@Vbp&vplxllwpv0w6{Ap2d(hWbfKiZnRwW zh5fhji0$}zRKB)T_glE}ans#Z85mS}p`3$=VW?8`=f_8cXWlA)tIQYzj&Pclpx1HL z%wag`Jn9oBZ=Z_(cVuWv+Ss3fd}=29+cGa6wrl=Q}<30 z76hCMs2txBnIf61IJMgDa45|>3Joi1V0_jrw}tds)t`}Xt!5y2#Sc~@6p^R2+X;7J?jw+s0X z7fcf@m{$C8f{Y49pSu~zU?G_4o4r~ke7=%Z<>lAF>`%>hdY*S{()N%N{V43VlcHm_ zMV38hqSLPw1dsDn^7xGuB%HNaWx8w6i%pAa3;oqMECNL#IqxRh5w_4FEW)joz>x zm!fg+Cq~}uy~!EiAbN?lp1Qiai!R=-hQsp1E~n_2-?0g>K>&>b=ZxOYov$jZU{2gf z>t-5xGUqX<;u`375hRNYIh^B_)+r0Ff%8t*8SCA|GNgV&M#VCF>MWto#uqU|<+%Np zhunPNQ}~+f^r4d_5iU%18UtoLaQ0W0<*un9Eu4F`%^SBZtma&)hk=Qe+P|9BbQ7bO zUFCXJoRFD1ye+BrIgl)HF_j~Q?Xcex{j|gt%{P5nN&N;iy$j5Q(kok<>Cs*R$)Mqy zRO-9Jwn!h86Kt1oTQPPcSwm#cRqi%JmjBP^3>Wep(3~=+hA8!88=wwA{ zr3Qs33q7Q2usu{ECmum~>X=x;iApIqF4h!3t&aLtVC1)=+0ivj>;ye2Le@M}dmS2u zYQl_v4>53Qm4>+T*o(Mdmv$I@D5wf~wLsb0k&ebQw9jlJ!6^wF3YW$MR@n%Rx{kOa zo9r&v2`~(P@TlXEwwn`~I4y~rZDj^KbY)+K2VpXOs#-zMHv&0g$6n*{#e1bMetQ9| z$ZTzG{p|^vpJWEm;esVPDP97(r=$G&*4iAYCWB|E(4(i{MWwu1{d69+gb;pC5(233 z5Ja{1Cb<&Ym?(dxq@Fku)0;zbu7I2{*ExW~B!u*Q(BIa!>N~Yl#*YgPxgqIuU;f4BR1!pXq(GlNW%|%)K>HPKrS;A%VOAy>@JwYSm- zzIbbY`$`e{$(z1yC@^4=3aF!~Ih}OQ-s4PM=>x~~{t_+doT1LUiY2#$e2^Nn(X9 zeosy)DUcQy9;u$cq1;as-ye3w#2FmfGem*dtGC;!2ls2ZdQk&NxUyiHT-`9c)>1iq zQRjGZgI9}XfN*W*Ja+7abL=2rj7>8^7is=<=rS)E?m~Gx!}$lv2#IB;)~Bx33MX3M z5OBDe>E}*19x`w2bFglL@Pjp~V18aD5USY&aG>}6#X6=TMN{|2@me|s>PFaZ;uhHv zlLTgIk7B1|&_WW%oU&AML^#vn-eE{}6|fvfshN2}7XicouE&9KNA$q+tJ1(cXHP=7 z%$1i4I7gI=Zl;%`qvMy`(ARu7FlXI$QI%a*_IH2_jZr2Jd*>1}Q8G|L($hJ+GwwooQ-1iW;yq7yRIk%zBnOZJ$$ujUSrG zTAzOzVT2@faJ2t>tIQhm zFk;4{i4LG<=F^Vk8;(sHCW(A zUrgbq#q&3VQX`_>`mrHRu-~G9Z!+zq-xzCH@^QsT$S#n5J+sL!UE5=Yr@vUi)CNZ1 zC__AMJp!9`rf&BaPO6|9EKPHU?TwQ<7d=L>8OKk5nQ`hX{7AlOjvt!JOx&5e_n}#4b$cfL-wYG2>G|#Wsd-xv-YI?{)apG^iZMKv|CoOY$r||*h)zAr1<8YsiG-s;EVO9c>PO({zWp649qysI^ z>&64O8BXz@@NaG)REVMrC&SyrJK3Z~0Pp^6Eh1-U6?f9yF)e0Hd1W}ER@|v&#X#H> zk#yK*Rp&;$-OTu^y&X=T&o%5s9?RL?Lc(u{YVHlG=g&BD!`B%i*KB*Y^Bx%k((YXL zSah((;_}RtrP5fBRgYz3R*|HQ(Y*s05h8dDaVXDn%5vR1=w?xiMh>=U$2?(ZEvJSD zvgxaQodC^o!L`naq&mL+bdl*4KHr9f&TYcNd!MP=yOJeRHjXiT7YKSr-mjb0f}^6P z68mcJDDBlUP8tKu0_h`?CVSTbsWDv-b|NKvo=fh)kGoNRKk*ANwhhP-)(CdTz%qughd6GTjVNE{2LC@)|tf8DxieG%CMT5K~0>4`;;} z0p%K%IWq2u!@FFbgSyoCM#%nxnug6olFleF_($W1S(M20LeTadF>_CT+;~GMKpY_H z6lH@tCGCs1-0)+^Qi@0b^bj-rAXrh2)Ojg-)*YM}`N%^q>#;Ti$W8fn58oqE&SIlc z(Ntr1z^I>%b7Djp-gCWIhk9ragf;Nrs`F#C)URB*lU{gguH0(c7Aibr*F3F=)6mj_ z_YcoiIvUE@&*(^9H~L=wJx##dvQxLO4!r1?U2}YnjkAP~Cg6xHSPYGg1(=$Zvgc9P zx;20Z=4<>HZ_eRGgvLmSEt9(|a^%+4*Dq))akffuQzbB0W={{OryiG#p^*?~=^75_ z5Kc6~&h5)^0|!S#Fayx;yab*pqUOkjdoe8BI?D_se|~a^B!Fx+#(LZd-M0(|_JWUp zA}7qx&$m2r%86`Vc%BL5?BdrDNo^jENhoYfB}S8R3lxv8{_ko_QxhseL+1}H>|#W_|lHi;hJT412f9DO|Z2SMS_F=)U1Oa@Sp z7w=B*es`!0lMlyS!qKG!@~>|z`HIR8+cG#gEWgdpo}YJyujd3m4)~4iN^pT1l!E{U zJSo#4Hfe~7@toM&O1Cn-VS1v!Uu;pg@8nr1KpDq1mUtRcbd0iVMkGZP#T4EtA7SH4 zST;74vY=j63OxY8wEEWZ>MN9yp`~B}qWNYiFX7rX3SLd4I7vh*SzA{JA+=bF_ngOx z8dYqR4vv39W*gWKs>3UD!hhmuue8xLE0|*adU8UBr`3DzaZy1!Y8H>XZl=7^JDVI# zl`T1tAp&lRiC}sA?mePRDkw*Wxo zh2c*3NrA*9IrdmXUS7FbQH9g`gFs5y`DQ53;u~eMc=fz-y<` zAD2D2>p@(QS|}5jEgDP|wOu1k_(0QdExCz9I)FL{Jv`$7fCvR#B30sI8t^KBo`3M@ zpG)DHJ2RarX>4PDAWngL6XkRUid2t(Mld&Va9y(5q@vn{4Qgxs0cgkr5n$;&Ks@-> zJl2WbbGjHNa5&<2JlaO9S4#^l3FT!XholtZ3ltK!oCeR<;=iUnBsz<5exTTEa{J;A}f2bQ)O6-Z=M_)jgAhvF9ym3 zSUXQaML#?%zdU;P_!FtA#LJhj z-DD5we7f&W)6f~nTL|+pHrnW)a5~DoNk6TjCs*=`7pEeCUaJ%ES+1iuwvL@jVHw$3 z5!g4D-T5TDMp3cwH1y*dFI_ljGj}B&iv6y3 z;$M#`%552#p%%|oN4(rikJ~&Zg_kZW+hqBWfJ>_iCx7LXpR%)E(;!zZU#(tSx2rVNvD4P-)fCXu+L>kC^ZA-XbHx}R{T<8B z=W(((Xh;fof$AM0!fwhAg--ggY0RABrd?qdD7e3aDA=Vk-wRxLRp;utHY>ZieSNE4 zl<)FF4iB#v*+Gt-D$I%%;^9XQ&GE~)IJ>IVz`YLqev3IaCwo6V+csxz(0Ci~JDK4# zmsU+sk=@^#H{MMg-LBi;oR-}}kM3rj1LiBz~_Et#JcKQCo z>FW8={qLc^`IfQimRO(dMXYugo2F5?OvOqJnaL^a>8F@wX^l6VuA{e)pZ+dA*dA!D zV8+i;w7|C?B((+@|54a6x1pO>_@Ku|`-O@=#xhd{jRDnXGMcrz2DB%SsbnhWXL=cE zC1qwWt}|9|)g$-5?tgdnX>V=y-2wM&YGWg=by3XNYk8`4b6V!^i0^8v*lONQ79Dxn z)f3VK>%z=mUj|oo=WW<{JIp33_1nWN9_lC5QRaQbHH8ZL?|OZ4AyeEm#n*maDep*N zekeEOja2RQyoYl@J*{YwEsokfsb^2F)yQiL*J{t6+mpmsZbt7l?Jq~O?5mHiCs50* zFNoHjac~e$6)%MwL#>?{$3It2YWpw=1g4c7tShk-kgRn5yOay144q`q2GZ-->)k zcf^{3^>-n6@t01fTKIc8Yb-(3LeSHe#+}etJ+1q%m;~1>C7o&?U)m3f-yG6JtdH-g z_o7*rQ{aJo)ax?lh_e=(-tL3O5gFdFJQrVPTk_uTa+9Ixl@%SIb+mxjo{sNY(I{bK zxS)Ec33#B-et-46>wZn>UeF6W?^PD?-IlPj+cB~`>jl2j-L)O>lU#0l_)eS!RkQhc zNxzYSgg-iF|Kc#Yx^9!#5Nw-9+YQmUs=#JO4g!7XcaTqzPRF*3 z6R8I)5Ar!zSkd103>L$~6AkGjq0ZL^GED&f2RvV>K2-}&{laqy{r zmlJ(f6RMX8KHKvG-VIZW>0800?i(7ulhaXD0K-D*-)D_?_7kgCDn`rqyU>e-y$&Qc z$H;egT|jzwj3eBtRk4#bcF> zbA5DYv3hyJ*B8HmwnMMCsR(#YOwt?cN@#-j&McQ8vAcBzyKPq0KD(P->iaJ13C6n{ z>UMLe?3}Ft-{p2qtzKa@ut*yG^Ml#~BRR$>osm&ZXSi7FwrgwNJjyZ~MfpR5hd*T`Yf^Fb#i|1i{rK~%FaP$+0H-i z*0#-_+BAus{$%xgM(zH~`~a1ny&}m9bc7 zks2+_Gt+bb<^abmEhEh54}e z{>ORQ%q1^(t)r5>)%mFk0dqqEgh`aHA7}#^K|9gM%k5!XJ!@Psmy#t!2o)zHi z(bdntEuNfa(kndNsE+$D z?=|-})%IR>e_P$J>-(GPBX#vcUAs=8NI?^f08@7;doTW^2m z>u-JYy%*kW?!Q}YZ|izdkwbx^Ak?yLI(; z^VZkjefF(q)w8Ouw)g67bz4`rbyHRKru~Bc{-<2?!584Fsy0ns&;0CLiF%ih;o^TN z;rH$~gZn@emVfxJ6Sn+ZFU@nG@y~zC)%6Eov_E_$H}AhC*3Z{}{)<9gRn;c`SN6dx zwt4Q~QT_b4^*XFs*G*M5&9mzMH}Adl&CSaL_(&8FToRrCJ?yE{B?5iZkl P00000NkvXXu0mjf(KoRu diff --git a/workspace/ESP8266_AT_CMD_VET6/Core/Inc/wifi_passthrough.h b/workspace/ESP8266_AT_CMD_VET6/Core/Inc/wifi_passthrough.h index 8793dc4..8044c08 100644 --- a/workspace/ESP8266_AT_CMD_VET6/Core/Inc/wifi_passthrough.h +++ b/workspace/ESP8266_AT_CMD_VET6/Core/Inc/wifi_passthrough.h @@ -9,15 +9,15 @@ extern "C" { #endif // Replace these values for the Wi-Fi network and TCP server used for testing -#define WIFI_PASSTHROUGH_SSID "HC_HOME" -#define WIFI_PASSTHROUGH_PASSWORD "$Bb1988121!" -#define WIFI_PASSTHROUGH_SERVER_IP "192.168.1.176" +#define WIFI_PASSTHROUGH_SSID "WIFI_SSID" +#define WIFI_PASSTHROUGH_PASSWORD "WIFI_PASSWORD" +#define WIFI_PASSTHROUGH_SERVER_IP "SERVER_IP" #define WIFI_PASSTHROUGH_SERVER_PORT 8000U // Set to 0 to disable generated traffic and use only the USART1 bridge #define WIFI_PASSTHROUGH_ENABLE_TEST_PAYLOAD 1U -#define WIFI_PASSTHROUGH_TEST_INTERVAL_MS 1000U -#define WIFI_PASSTHROUGH_TEST_LINE_REPEAT 40U +#define WIFI_PASSTHROUGH_TEST_INTERVAL_MS 2000U +#define WIFI_PASSTHROUGH_TEST_LINE_REPEAT 2U void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, ringBuffer_t *console_rx_buffer); diff --git a/workspace/ESP8266_AT_CMD_VET6/Core/Src/wifi_passthrough.c b/workspace/ESP8266_AT_CMD_VET6/Core/Src/wifi_passthrough.c index 3546681..bb48447 100644 --- a/workspace/ESP8266_AT_CMD_VET6/Core/Src/wifi_passthrough.c +++ b/workspace/ESP8266_AT_CMD_VET6/Core/Src/wifi_passthrough.c @@ -4,8 +4,18 @@ #include "stm32f407xx_esp8266.h" #include "wifi_passthrough.h" +/* Maximum bytes transferred per loop iteration in either direction: + * UART1 console <-> UART3 ESP8266/TCP. */ #define WIFI_BRIDGE_CHUNK_SIZE 64U +#if (WIFI_BRIDGE_CHUNK_SIZE == 0U) || \ + (WIFI_BRIDGE_CHUNK_SIZE >= RING_BUFFER_SIZE) +#error "WIFI_BRIDGE_CHUNK_SIZE must be between 1 and RING_BUFFER_SIZE - 1" +#endif + +/* Configure the ESP8266, open the TCP connection, and leave the module in + * transparent mode. Once this succeeds, bytes written to the ESP8266 UART + * are TCP payload rather than AT commands. */ static HAL_StatusTypeDef WiFiPassthrough_Connect(void) { HAL_StatusTypeDef status; @@ -68,6 +78,8 @@ static bool WiFiPassthrough_UpdateClosedState(uint8_t data) { return false; } +/* Move all currently queued console bytes (up to one chunk) to the TCP connection. + * HAL_OK with an empty console buffer is normal, not an error. */ static HAL_StatusTypeDef WiFiPassthrough_ForwardConsole( ringBuffer_t *console_rx_buffer) { uint8_t data[WIFI_BRIDGE_CHUNK_SIZE]; @@ -89,6 +101,9 @@ static HAL_StatusTypeDef WiFiPassthrough_ForwardConsole( return ESP8266_Transmit(data, length, 1000U); } +/* Move all currently queued ESP8266 bytes (up to one chunk) to the console. + * The bytes are also inspected for the asynchronous "CLOSED" notification. + * Returning true tells the caller to reset and reconnect the module. */ static bool WiFiPassthrough_ForwardNetwork(UART_HandleTypeDef *console_uart) { uint8_t data[WIFI_BRIDGE_CHUNK_SIZE]; uint16_t length = 0U; @@ -120,6 +135,8 @@ static HAL_StatusTypeDef WiFiPassthrough_SendTestPayload(void) { return status; } } + static const uint8_t end_line[] = "\r\n"; + ESP8266_Transmit(end_line, (uint16_t) (sizeof(end_line) - 1U), 1000U); return HAL_OK; } @@ -130,6 +147,8 @@ void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, uint32_t next_test_tick = 0U; bool connection_closed = false; + /* Initial connection failures are retried forever because this function is + * the application's long-running bridge task. */ while (WiFiPassthrough_Connect() != HAL_OK) { printf("ESP8266: Connection failed; resetting and retrying\r\n"); ESP8266_Reset(); @@ -139,10 +158,13 @@ void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, next_test_tick = HAL_GetTick(); for (;;) { + /* A UART transmit failure is treated as loss of the ESP8266 data path. + * This is the first path that can set connection_closed. */ if (WiFiPassthrough_ForwardConsole(console_rx_buffer) != HAL_OK) { connection_closed = true; } - + /* A "CLOSED" notification received from the ESP8266 is the second + * path that can set connection_closed. */ if (WiFiPassthrough_ForwardNetwork(console_uart)) { connection_closed = true; } diff --git a/workspace/ESP8266_TCP_Client_VET6/Core/Inc/wifi_passthrough.h b/workspace/ESP8266_TCP_Client_VET6/Core/Inc/wifi_passthrough.h index 8793dc4..8044c08 100644 --- a/workspace/ESP8266_TCP_Client_VET6/Core/Inc/wifi_passthrough.h +++ b/workspace/ESP8266_TCP_Client_VET6/Core/Inc/wifi_passthrough.h @@ -9,15 +9,15 @@ extern "C" { #endif // Replace these values for the Wi-Fi network and TCP server used for testing -#define WIFI_PASSTHROUGH_SSID "HC_HOME" -#define WIFI_PASSTHROUGH_PASSWORD "$Bb1988121!" -#define WIFI_PASSTHROUGH_SERVER_IP "192.168.1.176" +#define WIFI_PASSTHROUGH_SSID "WIFI_SSID" +#define WIFI_PASSTHROUGH_PASSWORD "WIFI_PASSWORD" +#define WIFI_PASSTHROUGH_SERVER_IP "SERVER_IP" #define WIFI_PASSTHROUGH_SERVER_PORT 8000U // Set to 0 to disable generated traffic and use only the USART1 bridge #define WIFI_PASSTHROUGH_ENABLE_TEST_PAYLOAD 1U -#define WIFI_PASSTHROUGH_TEST_INTERVAL_MS 1000U -#define WIFI_PASSTHROUGH_TEST_LINE_REPEAT 40U +#define WIFI_PASSTHROUGH_TEST_INTERVAL_MS 2000U +#define WIFI_PASSTHROUGH_TEST_LINE_REPEAT 2U void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, ringBuffer_t *console_rx_buffer); diff --git a/workspace/ESP8266_TCP_Client_VET6/Core/Src/wifi_passthrough.c b/workspace/ESP8266_TCP_Client_VET6/Core/Src/wifi_passthrough.c index 3546681..bb48447 100644 --- a/workspace/ESP8266_TCP_Client_VET6/Core/Src/wifi_passthrough.c +++ b/workspace/ESP8266_TCP_Client_VET6/Core/Src/wifi_passthrough.c @@ -4,8 +4,18 @@ #include "stm32f407xx_esp8266.h" #include "wifi_passthrough.h" +/* Maximum bytes transferred per loop iteration in either direction: + * UART1 console <-> UART3 ESP8266/TCP. */ #define WIFI_BRIDGE_CHUNK_SIZE 64U +#if (WIFI_BRIDGE_CHUNK_SIZE == 0U) || \ + (WIFI_BRIDGE_CHUNK_SIZE >= RING_BUFFER_SIZE) +#error "WIFI_BRIDGE_CHUNK_SIZE must be between 1 and RING_BUFFER_SIZE - 1" +#endif + +/* Configure the ESP8266, open the TCP connection, and leave the module in + * transparent mode. Once this succeeds, bytes written to the ESP8266 UART + * are TCP payload rather than AT commands. */ static HAL_StatusTypeDef WiFiPassthrough_Connect(void) { HAL_StatusTypeDef status; @@ -68,6 +78,8 @@ static bool WiFiPassthrough_UpdateClosedState(uint8_t data) { return false; } +/* Move all currently queued console bytes (up to one chunk) to the TCP connection. + * HAL_OK with an empty console buffer is normal, not an error. */ static HAL_StatusTypeDef WiFiPassthrough_ForwardConsole( ringBuffer_t *console_rx_buffer) { uint8_t data[WIFI_BRIDGE_CHUNK_SIZE]; @@ -89,6 +101,9 @@ static HAL_StatusTypeDef WiFiPassthrough_ForwardConsole( return ESP8266_Transmit(data, length, 1000U); } +/* Move all currently queued ESP8266 bytes (up to one chunk) to the console. + * The bytes are also inspected for the asynchronous "CLOSED" notification. + * Returning true tells the caller to reset and reconnect the module. */ static bool WiFiPassthrough_ForwardNetwork(UART_HandleTypeDef *console_uart) { uint8_t data[WIFI_BRIDGE_CHUNK_SIZE]; uint16_t length = 0U; @@ -120,6 +135,8 @@ static HAL_StatusTypeDef WiFiPassthrough_SendTestPayload(void) { return status; } } + static const uint8_t end_line[] = "\r\n"; + ESP8266_Transmit(end_line, (uint16_t) (sizeof(end_line) - 1U), 1000U); return HAL_OK; } @@ -130,6 +147,8 @@ void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, uint32_t next_test_tick = 0U; bool connection_closed = false; + /* Initial connection failures are retried forever because this function is + * the application's long-running bridge task. */ while (WiFiPassthrough_Connect() != HAL_OK) { printf("ESP8266: Connection failed; resetting and retrying\r\n"); ESP8266_Reset(); @@ -139,10 +158,13 @@ void WiFiPassthrough_Run(UART_HandleTypeDef *console_uart, next_test_tick = HAL_GetTick(); for (;;) { + /* A UART transmit failure is treated as loss of the ESP8266 data path. + * This is the first path that can set connection_closed. */ if (WiFiPassthrough_ForwardConsole(console_rx_buffer) != HAL_OK) { connection_closed = true; } - + /* A "CLOSED" notification received from the ESP8266 is the second + * path that can set connection_closed. */ if (WiFiPassthrough_ForwardNetwork(console_uart)) { connection_closed = true; }