From 4c079e68faa6e1c10e44e311cf4a255081c0ed7b Mon Sep 17 00:00:00 2001 From: chenxin Date: Tue, 8 Jul 2025 21:15:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=93=9D=E7=89=99=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 13 +- VSMD通信协议整理.pdf | Bin 0 -> 282771 bytes device_config.json | 138 +- src/VSMD_command_handler.cpp | 2278 ++++++++++++++++++++++++++++++++++ src/VSMD_command_handler.h | 138 ++ src/bluetooth_handler.cpp | 310 +++++ src/bluetooth_handler.h | 27 + src/main.cpp | 377 +----- src/vsmd_parser.cpp | 3 +- 9 files changed, 2880 insertions(+), 404 deletions(-) create mode 100644 VSMD通信协议整理.pdf create mode 100644 src/VSMD_command_handler.cpp create mode 100644 src/VSMD_command_handler.h create mode 100644 src/bluetooth_handler.cpp create mode 100644 src/bluetooth_handler.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 0422cc8..5f4f2bf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -56,5 +56,16 @@ "C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false + "C_Cpp_Runner.msvcSecureNoWarnings": false, + "files.associations": { + "optional": "cpp", + "istream": "cpp", + "ostream": "cpp", + "system_error": "cpp", + "array": "cpp", + "functional": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp" + } } \ No newline at end of file diff --git a/VSMD通信协议整理.pdf b/VSMD通信协议整理.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fe7a4dbaaeb6f0a1781074364a4b863b33e94713 GIT binary patch literal 282771 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

c@pzj&oh#QDsK7VUvAOxQl zE19xYfKtc-@SHMq0jJ&9H#@j6YnzR@<_$1WA;cO0AneEp*+9G_A`IaFz?{|pT5J~B zr#KX|HRC8C2d`=4Y}G@35LlqD+dRzNH)wz7{~3XT%l7y-I3bzERU^4dHZi~Jk!h5! z*(OCLyEd)|>Vt|wTkXb#dsb216G;ucw5M?$`9HUHYzSQOdU{BaN-;Y z%|VxKF6T~K2H7(3x;EY>`3K*!KYLYq&G^*nrj@CiVLVoKxF%Q7*4e}A*pwM11@gt) z@UO=xAlo(tJ~_X?u`^5yyhs$@E=^LWCGg4n{`Ml#mZcUw>D|;?b!*yy*9YZ>;a=?L z_`a>HGy6SMu)*T)Zk0=MzKkF-=k=Q!^!U>skY8jiZpB;2tv&g{@*ZyQ&2_N{{vBCI zlMN$=Rr8NG=ls%;FDj3_Q5^IeotF^0m?vESUL znr^8ZA5>pLMMttGxK%)j(zKgmcx#3B)v^wBHN2LyaBkm=m&ve_;8GOQ0T1##S_TSZGz0Qv}a z@J%|?3YHv|6o^#&5Z8@E6jfCW!eP5SD*~Z8TJC;zrPO5EELv~{?B-`AnZqz0L%T?* zG^?upFzhupP&3>sNv}57wB&gG<)aFLi>8%N-?;F*bh{*7kaT|Osiwv2$XuuyI9WQ3 zWSAepEn&zWHB}>x3FT$fhbu8AWYK@M>vY9Z&5n8|4KoS`uUea@5P%NI)E$_H=cx+La;&g56)W0@2{S38h=e#y2`b{GRCFk6y7jh;Hx!$5v6wnlS z=otcdHWL94d@+ytxbmUXJ$XdMtS$Qn)(0i#0-NXtY_%T0iyb;~^->Ph87-)DTh_Y7 zqj!c0rxYJ>Da$8ji~-s?Ri(vu;;yt6+LyZhFlL|mWjL3%L$_T@6O+TwXX$G$^-SKf z7{*=o&J?QsP_*&q)SfnjuS=UpSLYeU4)ekE3E@zVWt2)QJ?R*L@3JFnF-lPpOYCG5 zfjLLQ^GBj7dAEaviW*d~scAaP2ISot&34PvPr2Fk`g>jCZB5#~9~~_HnNi5K+dN9k za_ei$9xfZX*Z6eA672vu9T;=%Lz|UDDcyzV#A^!ZbuAigeFu(ugY9UAmcC6;bD^vt z1^=$ze(nP3z?N6|JH-?s1I<^*9{(1ax$@hy=o)O~acJYU2B>uGBghdjm!J`q;K_n4 z6E(G6?ewY?mTzBmHPf=!Ynf4NC4d*4L=UMqTy9_5YCamwlDdpKU)v0Fe>YNLZFZ8V zdp)!&PXv{cMG)pQWSxL@+a4_a^5QO z1{^NWhgBCRL|_SG=lRA*KH_Xb*&ONxKVw`t8UFNuWnM3^K2xcV?9tg-hJ0bqHgZzP zE0mKIO5R*GNWXd6BrCV+E_TXes#zUW{dEa%!|JM)Rqi1txb_$8?4aP5#jc#OT&UTH zB3HX4^q8sxF~hVzdR;X<)kQjHbXoGc@L~FeiYV496fTrkdd_xQWsYU@`c@Z437AGS zh##{L*(9F8%3)m)=DHgJ(+8vY@(6zBblS!5U+ zho6&$*c6K;&2VWXkjl;qM>@9jM@dr2LcWZqS^XJvsHnxf!foxh%7=!;K&2J z&OGhd=bs4khm=>8lM@6KX!uy?W%wx1o%Ohp@7qnZxIcxSCOb3^&WK)fFly-2IviJ5 z+B%)z8hw1TY^nt(&^8#1yNIV(CB^?+tA3c-?XJ)?*;&iL-X{M5@d7>RP|Z|>n`q`r z&!o0z$|bG1Y<1!$t*d+%Z~42~^a_o&PGz6+MFR7p9jYpS9w`gDa7?9*Z~zeJ2--VK z>`slY@rS;7XM5~+ErflEgU}OKa>~h5k7Zw6T{gWilV5ySwNmN0j*1Zo(C|e?NyobX z12rb0M${A-B`~{=vhl2O*jSJ2PpHx zm8t?)uVbTc3~?n!--d@}^S>#}GP7V~V2W@a;{ARV?A`i>(*LmZ%VBdE@W;ykx5sk1 zT5Fh^c6mq4|$V_bLx<$`_ zYC5dSF<#EGhdv^`U=zp`6b+qMJ|Zddv-UveT7B*nLnPYK_G&ryQRo;!v%Z4##^EW^n4@R+hD=ai8DAMQ231AuQxn!=>=7e7?HD;<2y0q{EN1` z7_;^-jNMf~D4_%lT*t3%elh3ly2$$mv{{K)QdabR3h|uhKvS$8=jeCN*vboHBBG5yRTnf#lQ9;~riE)EK3M$O7>g#tEQu)@@vo1bWTU85e@%8zP4uTwy;YAS)o z7@m$7uA04E;muKcJfZnz9K6!bM^xR3wOjUap?Er_bC_9*_P*JMSgj{Xs@DqkI1OS? zs?Y{hNg1j-Fk&P7OneMM@^x9=47dt$D7)Goc2>+fN4%_=Oc3kn@LXnP@ryN^lp?&r z;PPBOg)4Qs0>{>!Hm+2vz0y2ZdtV70=!B@a=Za!}(lj(47b!NsM`=3_DTZs%B zs%|5r9hRtUq3M8H{X$NO9B;Bk%Ts=n6{T=1vKQAh5j04oy7{cYZUDP|=+ zXu|>maTe)+SYkDMOsANe?g%jt3jjp{ex4RXOE|{-+}v)sEIGF?D+a~H2&Es;oC6E1 zs!xk!@!pwKM#nE;oRc4YrjCo--J6SvJfV_n?Dq_s1}NOZ8--AMuzs_?4;duQy4}w|36ryIGUi9=yRi-)#>k8_JHYmhc|>HT9my zxAw+@4EueSy+EEtwN;C#uQAYGR8Y6SHv|}KMDM|ra$tkrbePg>Cv1}_PPmZ5x4oPm zz;xy|<;5?h%#&+?T%8I1On}w+)I6*et(Gtl!mMQF#+K3ir1+Bzty?woz<2BihuGVe z>Q~J7jn#MVR_vUJ@OUX{p4@EC0(@OR&e4I1i0&$ta(=dQoMY~Qg1#&0nRJelcdb9= zD0nlKY+a6(EO~gJmRFUlt0Kmp755VK<~eDdw^?K01Gm3EA8z&3J@*z z|2DpuMCpsl($v&U%}5(s)-f`}HPHElsw=84W^k5rT$MzL3C@pJ?rWcteeV~Iyo!OL zf)JhQerdF~wjrtk`bcKHu0-i{eX#SGve5AhbZxF+2cNd~TJ_|JFt8M?Z#B%Jzqy?> zGSc3G{+iw9Xcw2$;T)jXv10dlTpA405f|%O&B`?S$|fcro#xo2JL_s~*L~z0zz=;Y zhbs2{fs%1OpzUp4uVdUKmn>t2*pMdRtQ4qsqY!K;vMsh=-UT3Z4EPlq+ z_RAhBtPrZMj=C6>4cZn77I#hf~qSxuSa>He)+kOew(P57}K-`e8E9SxTK zq9OpsX~vbHN6M^ZZFOB%R>W4-@cQ_uo$5WW_ekHK2nYzQ{+crwZ5&i6MmZE@`-QIs z&9Ej8&bB2e*Y?S-MqSz4wVxEAwHrEE>-dEaPm5>TN#Pqay(gv>EPuGH&0ccrf$JSP zZ~sIpG@fTst^d_YT>dbYJm%>z{Y)pI4Q9w5rU6g?#G1e-Zs8Qw)ON2s`O2n^LTb)9 zPRj5jySszb%toL5_73Jg5}sz6fQ}FqtrBF_mUrrP)!6{bIH;8QZA@s{ojIwhWg$B* z9%;_{(@(Gon?X(Oe3u#;O`8&#RT+|Z*%h3<)-uYZ1sRJx#3y)q;iF${lDDw2G_BPo zI^_MO@QPR~^xE3V6vJWa=5MBT^yHFrG?R!m@SBxAD8HJNFjFWJdtzkrBKzdvrKj%( zs>b$eG+9w!=GspY5=P}(T=k&gdEHNR73_ZA`3eP8#{_`#zvR}@kD(vBD1KyUf9<+d zMD2XWe(r#<6GpFI4HrsoN%w`7#La|o$q$F`0eoJ)r!0O zR9Nn(hVZNED=hxBjJ#Mz|4kuN1|IM19$2~My-8Dh7G_S?oLh!iM#685fO6 z0{l{!Q)YAah!MHoZP-Lq&G>kM6}04DYU zdgn8>k^6paeZ1rs;>{8M<@dd%o@FC2DL*etHN~xENN&MQ<@)Z4=9Z+Y02pi*Bjt#} ziw1T1QuZ!aItQ(35-v89mg0oZwG(4%pw1I$dBZzdRY7aP}sQIGdC3gFf?c!-Calo5kOBN>rvyA=#OXkJJr* z^lqbKf?Vx=w1DkRyLDJgqMP}a-AVM*P3>}pc1^sJP$WPHZs6&WNTl#Q>CO|5LAKn3 z8(F31P+5N#V4Y}LC!KSc|4J~Xes+R`I@-JxGp9y!ghi&!J)L0RG%7$xzadigql?Qv zvXSiqI#$Kp3js$YSh~%^6$H8+y%=WTzQxZitwLyoJafLk#dUDdKSoT)ejM`E;EX%* z0FlZF+JhG7n}KbWR1YSRK;+UhhV*r$V$_83t4h1n<t}1p&|C`d4TRcs$-uOR(B_+N z3aZCGh2&nyMkX8y(9`$0F4)h0fu_wm?)693ULGuH3izn%CU**F5ZvpdvCHDo=HiP= zNQ*(Tc6~ga(d={dj@@b`kFY+p>y&)yG_Pr3l3$WI`CMkL+^J8I{ zDSwi8&pUB@(8ffE3AK+cYA>DdQBF%ht_92Qj_xk<`JDseeS96!Q}n~n&y|H9q?wqPcWtZQpq$r-L6u}93fv4OEdih!q<85d+HbK8r)%L;mF|~ zO){2~T=%{ot~@Ck(hyv)`w%}FWhi7aQp;gBb^3@X!^drGO7KNk!{g&TpsA71M+czx z$_}nzl9H{lL4?SbmV89Eay~y=VF^)!3w~M7p1|$|(9)K8G@UMLxe`Entq}P6JfErC zrUl3{@0K9sRz0gKYV0O1Jc=J1T} zPCJ?=vC>mSK>|!7t@pk37m-#klmw4zq~)6&gYji=13gJE%eErf>;S*P)mhhBfFqns zF|Z&)IcH=<&gK>t(d+GwMiO1hK5D)m=WV|N7DGH^vkH?_&8K9LYZhqd^`mP~Pv)MRBTiLO$3=E_ z-3R%yeam)@W-hV3mX}*;cG{D&(q0dfH+O41eqjrLl>*FbU_3UO=1iZ+BGYs`fx`Rw z+X-W9cFXZBMd&)x4@tYLLMCpOtOS#F+*(ue!N#OuVJj!69%rL@g1$5hjCax>c~)KY zn{cx!7Em-1A0S+zTrt*Q80`D^qxQ z&C652x%XIKjf&BB?O(B}RZWP{**-+Zd-a>@N5kpJ&_{W_N>|gR%ybZ}&x0K-20ovU z&EDO~8C9KNl9R^n9VXC^P4IVIH(6u&@H|{OdWqh9kS4z0Ub`{P(&Hdoi>buIN^V^- zb2GB)DU5$=H+gp&f>`Y4rB1!p(7TilcQq^>!iW-n9&JQ^h_}fgYi3pHieUmer{_4_ zMQx8q7>wjgCcRJm+S|9UGl5cVWq;AV;&)1nv#xa;DGmwx(gZf?&eGy_nvdu&`MIoy zBbtOnaoS|sWmjNDN|Olq9h?C_y!^SDQ3O?&lvW%9lH{`1AqA2tk9&FcpO+8s#b|sS zIE6qgl7sJBd&!4&{a)`Q)d}0j-Iyw|oX_K2b4FPAE(B|i>EW4kIjCLoJfI@^r4lECSOOfw?a#JQ5EBE{{k_i+x9JZ}_%!roi&D3_A@We2=D_!@mO`)e^fb7E zkJzQuKP?3Pr3pl;9unYrFYk061F35 zL-U^o(mQ-JH!bh8>x3JBZTbV~892BV^)OGj%i%#p)eX$*_O`0;l~cVPJgjPgMGNpE z5q43Gi7YxIUeaa(A6Xi4MLUXAYP=_eI7_!sfu&xUt2P_aT>-yw{M1oqVXo;C8|o%_ z7%wKd!NIQAiJ!{MSlk<+@ZqT9<@fUN%DP3nCGrND6mh`DVq`Kc9Dsut>k73F^sWr7 z50caL0%JHi+7-_(3`t7q!Q+J!B0sGb66aOar-=roareqZtH#IKn&{*5QSxwN%T%3# zF<X8kNoIS?rmcMeD#Ze*3 zVt=b-b+)S2hBOp>-?<&<>d#UWC%P{8@={kHh=5aYb7y||Oey)d)tTH@+BDj^DM5#tibpD?3DM5kI)5J6%Q}fyF!(qJsZ+e1eUb)!9L%(V-j9D8lZsJL*Am29~C7#^Nv0o{0No9?Kz{w?T?WA;Vw}H zQ~GT~D(Z9j8QOsw1n+O+i@^13KQe&0X)0G`&6vuH95)n0xst^=kC{`TvwtNYRacNK z;z{Uh3x*IGnC1x&6Q(C0WRV?^0sR<$^3zbf*Rx+xd!!d>zo0$&2##(-7V68_G7T&l zt`g4$$lz%uMcZ^KLsM?{HV!^aRC*;2GE0pC?~nO;rS4I& zJE!`~Vv;i-0Pj+;(KJCRl^miel9CuKF1788=B8`5L>CaCfcgNi)hz?xh`__+{oDW? z5&@lrxH{vU$cNiYU=Ta>!(ksC^5q)|4@Ct$)LoB})!M}Utl~MVVEeM0G07C^Z7j86SB3<>~rr`0@0ttSze;bd5L_x;At}j zh3yn?S{0h+8+7S8u6{j^*?GR@BY^|P5g^U|xw!3*-*pnZn3hrcK z|KYIBST1$4Rxc^>SsS8ypZZg$_%5T>(CVBOtD!A>ands*zwCQkZr>=K*TuKUFJB2z zKz-KIvCCKoXM5{4v$$|wY9GjH%{Hgg_}W_R?6p~aw@akw#wESa*2%Hle0B_18QFo=1iT$^dF}DRPmH41HYHs_* zoG2=N#$iCPC>PkAItbhCBpikPNX+arD*GpW+GkR$VbLt%n_bw1$*5VQblt9EAsAA1 z{{ZX?%V}-agDr46?Jlo@a>$hM)9ADa&DZHPaN)^O%e<9cL`c}pWVun@rt90b2?Xxu zSt_r@OSxFaEX~*aGKVyNt@)%ImG8I%Yfl;0g=wD9`hXMTemNgOkRc}5AquHOY*T&> z!tPv{tEw5`S>Q}SAX#bpqO|J1hE8VwomO6e0Gp}CtN>;$wkhzvAf!M9@?!~cmNs!u zwB8=k-l>5Ux%%c#Vy~5cP>3>WOCp)bNRW&wRfq0ixUGNRxaP-uBU||yOcpGQZUGkh zgC(CmTNGJvYdku`Li&KrQg_W0T(Kwj(`5Mojt zxxSMspcaA|F>SI#K#0k>A-G4NkuCUWd4LJzz{mmq|Bw0YpIf{b$nh|r)2gzGS}q_RV_Ie?E`a(P5`rAqVni4O&@8ImdZNRDgc>9KTjk(Db9R1vtLN10DlNz{s{R@8>~sQC zK=qLqNWA+ExKQirocrf>#(C_h`I_Ghl}>Dr7eo`UHHQ0^-?{^dcubE2*$;%ryc*LV zz(R%2&#ju)%%D~N>!h$O)4zgMVuMyKNYy|xElUolyC{M9k&s!WCGZn<7oDK=_-j5UR_`2Op>7`q} zVDFYc@R$~kgk`w^(gm%fx?I4U9pQ~{kw{&0ah9OGdUz|wR(ILeHQ%_kU9XpZ7VhhN zS{M?H{lb1{N(@kQ%JT>!zY(?v^?fwzs83)EX17v2OIT?GA1&ubjyxe!GdSXmNk8wr zB;Squjy?~V2EV);qB?6|Ab7%EM7aLX*UAmi1_fjrtPPI1lsjMHA1xc=yx2M7m~yS* z<_diN591S~MukbDmIFIoC`&DN53w)cLYNEfO8{yb2n6V7LI)aS7?o+Y%};*2|5mWI z+zClD{lXQgO) zqoYj|Gp@LPS9;kfVn6-Bf?L=~3Xm<^p(Rx&jCMr2ER_VD}v3I+WyUl)qx?X0Rx z7(o9Fv)(00w&r`EU$(A80^@&chb(z}@^Ys3pVz>rL%#EQZUBQZ5kK-XVf+cx$^XpW z!$rhMWNTo70L#nEAZBjmWbD8oW(9UK7BM!oH8N(9F}5*vG9zMT)Hl}FN_^pk#Fo{x?vq)9FXCM28e|YZ{zg{s~azSsa3~#aVs-T znsm<$(FaZ}ZE#k6U$W%&f{+MTd|mIBo%K&%PWOi7yVL}H+;3)2+I`%yM`wplFD^dd zYCMi{4ZUYKs}QGpS9rVIb2=0~Chz-Ta(n*h^nCkx`8@hQJ19CUD=UWz_x5*JeOCqT zO)g4TpYQuz+x8u++r9R2CRYpn&I}}9i=7}nAE_~}(?^C?eu1Z_uZ>w-Ljpn3?Y=%u zfr>AWkE}~=&G21K+>iA|h^8b{rWzS8 zD`K-U7Ps0v3BidUf+o`C2u{_BGJ2Q=WfRr8xrU}UUuU{rg-Zp+prQ_P#e9ZE=FH`F z^6kowfTf~;ERlPoi}6Wn?^Kft-9LJvjVhlc0$(mE-h+QZL5!!chZQ_hV5VqXUSyQL zHDimzhd>*UM@>{rMrNmK48uLEui7IjWz6BQ^*W!L2NsktcycafCXQn!{=Tvn=i3xw z6igYhBxVq%Mqf~eC=|{?xcS~j9MwXMOnI?^R~Y!2LM@jx5)s2p0(hX5ibS!Cf>c7B zsgEP3kS2c24D_w0xeAzf9GQ50g4?^Z;j`%axFCE($MGNn|MO=9-K>Xu-ses%y;L_< zSt!@g))89VFs8J~Co2ru^$u*O5m?3AA|x=c@o!lQ^WSgJlnvQ&ZBM%qDUYC{uY5qo z{5L~8i>T5Za;lBEUn@)4wA5|wBr#KqbbG0qQX}^r+r8T8s(*Ijl}#ZEYEP%q{orVD zim`COEH}=j#xUzhl~;iM4`pZ zBk6Nw>I3Y_@TnK12&h8y^SsyP`3@^`JQ?ne*_ZJa@+$ zA*cWO0msA4KX@A<%6n$8Y{nZL&>-}IQ{1i=istLw#Iu4v3sSuD=>A&-S~7d{mERpE zM-50nj1NtYP4R=HPhC-hV@?NjmG5BWm2YW$?awOMvGvL)<7(vImBxO2USO6Rz+~-l z%xfz1Dn5NWMQ~`FsjjdipZpBwKwr)K^$jX(Ye~*u5OH4_vZ+6#$J42de~2#R?V905 zJ2fG)nwXS0geKjx+OBLN%qS;Yo&50bYy*i&$eFmYNHC-#HY?`0o zJ~kUVaPS}vDp;POn{na%a4~J_jINouQt7d4?~2L&{p01wU6rt?a>-qD9Jk=8PrJpR z%wVk$R$OoKE~X1FbjC+c zNifHzUxj*OPWK^u;(MJ}n6=OoiR)vtL-jt(5Mk2cl8&2fpt(@mJ2@3^Op$I)0wNcrr>-QLI^-o_FcPtdl z+`&rwEIb33ZIuJ+OdPll(Xzb~IE~U0-b!9q0~y7i2V^nXig_0HDxQ4a?iq7;P_&m8 z`yIWyzT?A`Sa$`D2m|%*yfK&0o62pIn(HjqZF|Nvm#`P7`-D2 z^bc5gt)5)Ki9F4#oW%MKD2NAarl<7t-H&>Uu%l#C0X#(vSVh10B}4%?+5p=C%+9Q>BO z-#HTj=fhniKitP(9LSoGJy5QIqB2@1`g^LfSX;~U* zsNIurgKN!)GW8JNfE)3OO?RehnGTRdL)^=Ou0)0vK%Ev6WFpKRWAJY-Sa2Q|0!kiZ_cI9eZ6 z68O+OXk;cF0pvAi#5~kc%bTW}@al~+`ORjm$q;Sf{aqOPhykQGb?^~f2|sH+5kO?A z_54ZoLBa1^qAJ9a4MkSw8zoDaF4@a*m#?tm!arg4i}>b&T9bFP`VFKtVxlMJT&Y15JK zwKN_yYK*mmpEb6iKcVI7vYXx3WJHe;{Xoz;?=yH;IQq;B^-13|(*)s*H}%-tnOp{S zCs|Whg8fqI&4=CdX8xhLHTycf(>U^g`WjI57v!}w(zTJ?PxN;DLH@nwf{XuKrN zuOQ3v@QO{=<*Q}tTMUUwG|uFL&foFME@xpOD8 z_UQMvdj}It9iL|1ZplTra(!+kWDY_HK~63GY{?Q15(GUsFIVm41tqSERwFCZ4VX(ULW1DH&ZeFIk`4AO))>PhuTDj-%hAnS&3V(jozbHp*RhS zL?6j~`m9fU!7HAVN>z{-`_sUX=i7VNnIvA^TR%!H4ng#1#vwtW2p*E{DnvR0EzGh4>~RQ;GEK`ocQ>4_5K0C{~|8^hfD`^+M}R^!n{zcK_wA zmct~96$^$!r7>rbzA(_VK!t`2IHjV~pCWr_p+`#<%_x{&&%cp<1)q=8v4vJ5L1Ff7 z+W`koZMpzWCF;!yZx0iz##*DcvSoX`sqR%Lu{0u6=PvV_kQ4#V z;RF?_72@Cc*4ER*vMQ|SNa$15&x1_f2CkP^!08V1cu}A-E-DJKfnFy0S9g zYSFZ~ovq$NH=cn<6=IHqT?NPUUphIgwEY?Ky)tSOwHH$D7X!i{XvAN!Gk81Ln)q!w zbAeBBu`7f1JqUWM&+$AuB`A(CBaZUr8+i{W3eoeH!(sdjBOn80(Ga5V1{qRAGmD;{ zLgGdqp=RE#ithYhEn0OZuDK;F0k58v*fc*rZiqS|toi34u3*u2ec~;6#U?bIH;e=m(jkrd07$< zqR_Q#5uw}%lO8Rj3)W4=GWfI%F(}-sJIPe9NgQ5JAsS>&JNjK{;}C#%M=ihA^H-e+ z{aAWJa}Dn;L*Mtv2+>YIE+4j55<=W7f=*6b>Kd6MM+7=u*!*tpfxtdIURS}h8B?bL zcBVomZqwiHllALT=_`Z{31NmCm|F|T6z@6 zIKzfU>!}co;1DXF81rTw&RYf_J5x+JdH$|l97cv zJLkfSn|HPE5#7#hhN=`Jo7gww8r-B$S@T+5PELtEW%4KUpt&a6&sB21#rW!Np1W!G zwETwDk%Z5q6q-v`U(u7|bS>4swJ{G$W`$c?on~4)*oTKdX=O5&7Rx^qW-??M|Bpxl z8{>aL68`c4i`m*ZF(^43IJw&yGyExGWDo*78viX85*CpX6{QgY;01MaunnD%t(6gj zs11NQnA?~#NE#X2IGH=S(@8Lh7&`*VjS<+!>Cb(RL~KmJYZMujZB=Z{{~#1ZOq^^i ze~SLV6F|kkSjOK4jHDEj< z#(%TNpV$2JN&o4af64JzEIF{XF~k4p7XT14btGb8W{`9OTbUaQ+L&4y6EQLf{_%_x z5huXo{0}cV5z#RNwS>WT62|7HX8*V(=whm7ZuAF3Vq<5J1-t#@A0`$K#=mb>`$tU< zz+meCaThZiBZCrPH&x)4zjcI!Y~8eo=$JTI{=R^SiHVEj&uevv{$2)PD`VzA7W`|> zf7APqP5+zT|7w#C&c=VO@mF;*j(=;O(*Jw&R5P~`v~e{5&*u84E&R)vL~QJTJPDv_ z4vtR3W?+XumXiVh>-S#^IQ|j%Z^eHT_)p1y6Zl`x{x?VccM1Rh>nM)@qWAv=hUDPj z{9~?v!H_*V(zav(49W2Qg;9L*i>8tZ@ zPkU!)z_QN@hL2~LP9BZv@^LuI-kP(<6%)?NiD<*`CVp3H*semKvcEsmGFU$YIXPJv|r6k_||9O%_^GnD*GgRO~izYc;48A{kKug z#BssJyb}r5V<+tx=!+|?$v8-~;NXSyce%Sd%rxT$I?Rba@ihx=H|pf@D>#6w4pr$k zINv9zn@nkF!C7cg?7=@$q_{u8Dzr1+?ldejU1T$YNQ#*LeyZ+%v$om=f^FP;<~Jt1m&?2JiwjLF4~H>nLE`ZAFsWZ87EltCfK8kWKI+cAexdmdL#zly(*;CqnxHNzYwo6*yDi-pW$#En!6t}N2j*w;#l zJJMawbEWAQg<;8i{+8R6z^n@?qjLM1M}6N5YiPiOaSxspiqzV}XIOW_uirYcj*kvd z6zRgwUGP^5>WgcegD+5*XNUDXnADQM>Ob86k}3yc-5l;zXV8qFrU0Z94I=qj0SpE# zjeXmCL5qqfH}u;Z88*Aq-EOWdFP)WUR>q`OOo?+uL;N|dQi1Et_ryoYTn78y3xg0S z+lr_z%>sle2dMudshvg#Z#_|=sbKdYRl;dmW2Si5-whPT(tC3a^jx3Jq&~`~@_2n; zNIVNOmb1=D{ZuV2;G?uPFJT+<(0rj<|D}BS97?`0Zr9SgXt1IoVCD`Dz1DuQ6uh&v(B+d=5aScpb+{ukNuYAVS*-uB)41hL? z$NN+NI*{XsO+>W66&=&40@EGWgpe~1>zosH#ISqZIgPfcLe`6Q6?cox{NvMs{`mf&FaS5nQfl@7LHyo|n8G;Fi68F4?CG!8w};DZuQBtXS9Bw<;Ftb5cdT86N%a%@-^ z^5UeAX6`pCla!%kLd%i_m^`^=)4rWfbbQ6jU5~;KuA<>#m@Z|+t&PRdZihR_?yUA! z0dG<@Pt68P;tPI?qpDQ-#_^a(nALik4m|ddR8x+z& zfD?o}q;O^*tN5srD#-v>WVaw?UE(EXhW*h1Lds)C{b=|W!n8~+wf0rU7&LBJC^@2x zo?02|Gpc0gMrVk*?NcrhD-NdU;0p8A!SGl#7TDyW)K!!3cA)H|@|b3u&uz@-NCZqB zDOPNXk#eUAOBNYu>>bOgTAMDktp0&^XhLnbm{4aWz{lr8Kky4EXf-u3VmGytB)>dB z2#n=o#cF8I!}UL>4N$>+7~w!)8IzARaYe$k45Gc0o;WYG z8|!_%cGPpwcQ`3^u+)^?c=eRg82Vy~S>RQg(5wx}FTh@wbMIjKyqT}DA}*U7NXN?T zIBPTMr0&0#U@nJ;AMv?rH4$@GdT|OSS(5ZQax+P>BUihXfaaLoL<1iRupmML zuxMDfN#H$;!1N8LeSw`wbN0l06OABv!?uxo;gd9C1dUK~WKe*WSqvDFLqSlEiqzl^ zqtAmyDWGkEn$iz+#3&1JlbK5PQ0V!s^Am#syoNHgL&=9N-02iU$wWdzi1FLm$D$l_J+$cdD^}fUr(`c ziD*z{DuhBuESKhQhf}M;^R)hBVx~1J6{aPHFgg8W6O@DxqXvi1V%dw$G89hD01s8p z7BJVDQI}I~lm&}=2P)o|AI{9J{9n;2$_}{0mcw057lx{DLu^Jg>P+kN^coX={v{ip ziM?s*;8qJ)Z>CjNrp$4GHSWt2?Tx{U0V7aico=h{z@{-GW~t+xrbo5O?ZB%U zCzS$%4hPcE;-UFVYQtc>IoIZ_L~v78JmCq@V}}{TL;-B8C#)m4edeMl=Au-1gXk4> zp7Um$`#E(Et13%?UQ>iB@iK<|XRq*-h9mky$CeL{C*zJrJn_N;uMV8?SL_v9n^Ya# zPX_r1sBX(AVfP1+B|}sCr_u`Ur^599P81B1EwD4WwY%)mP#z8m7;F;M>&T63vQJd2vc_JPibfX!+gI#tH3Z7ZCC(<4l1J4P&++xv!owUe6J6W6jLt} zb=`YPnh660EqY$i3Z41YxSMzs3Dd97L~fbL`Y^z6(+>76ch|J~UO-dbv^eKHxQrWE zHh^8sb9WJ&64iBe&PBOjpi7d}x)q)W!*%1geoFa}foU~X= z1y{W4W*vb+HPyFlXQV-26}+A-aHVnRTPJgk$>x5JX};d>-EQsd@~=yr9PJmjg2AG< zg5lkrkjN4nFgVO8iI(w>u54mf>l%3O?Yo=)g?N8?X{CfJ=Ea}EDR>y(Z?iZ7@f;?| z1)kvawc=|eS?pe_&>g}bLm8n-Xre)-(x>WD^@fm6nG5`lB#%_bYVfj|fk$CFi@BcQ z9$5sp%XxQ38Nqx9vo6)Fzctf^p@;{SL+sx*GvTa_qubJ}8$X;)asMqY72&P7^V>3d zaA-4po6D@8y>!c<5CU_Ga0@7I>zm5OD(OMT79Q1AIH--c4;tEfxHr+huZ;ma0T8-^ z;UQS5m9fh#g!yGxAkuKbJ5T_-y^cuf>YQHmctd-<4UIGS90hhMgIDI zkPN}$R8kEkMpj!5+v3wQkJJJl#-P&i&tQn}8cko-YhV=Bo;`ULG%H zS)Omv9|62PFbuDGMZq5lSRru%ST(K#@?SeC*nIvU*stG6C^HIQ1m7)OHqR`4x^|op z_;V9Ly>2EzyaG&JOlpx?j7W-#(dd3}j(9||gOR;(2o=ocKTA>iZVe4XXfUDNT9p%57C~p~DJ5^f|Z)XBx{`& zi^q^hKx2XMyGgSk@nTpq%W|ToWTrOfcRnBa*Z~J#Z0l3ByrW*cda!`8a9gK)1ZDXZZbS2pN9V*NQqy_U?qR6Pzf#kR zlvmQEw1MbMMQnS%0N2Y~zC#&XzQ$lo6ANpQ$A^q3z}z#rC-$apiiW52n58>gR%&y9 z?&#PwYn{>nQ&+m1Ye$BTp=O5QPHokPp#Cd zDk8C-ZnMgq!zseBxi;13 zUtZhl4WT3F=?EMq+|$W<|FH;%gmyfbrJu@F8=(S@k|a}5uI!h>^D)_7ZGd^CitkS zCPFeHK8lR$ZyQ-P=+@f=A!Dn2m}n*9e69`-HJ~;VIWSh+$81r1W-owpUSt;Trj$B- zzyNc4e9+>0KKvsiK8P@B7-mflYPCkH`K^tz)37ikc1QEd2)qB^;h_;ayo^w zK&3@=%AZ09uW2@!CT_nK1FGf5sGKjrWsCF%=dLE6;S8f}Gq*&U(s!XqK|$~Cov$eq zQ+j!*xUS+kFPa2-b+Pm=n#5SDU8vT_vX3B<0CBS1uxAM*(y$?e!(06f&>&pjpIt~r z!32wvxR*3Cfm@f>@uv{X1e}sN-2p+P{>Vtr-NoMfys=?I0LUgR!zGzy@eo5f+#zzY zaY%B)ioG7PTl-efpg~Q-sv$G4LNcx>SwCfNZ^T*7@dyTOn6*Q%F*>>ATB>7xhh(1S29Cu8El#2Up|dbHT%1@^1iMvL?r`%{dq1>WDX z&VE!e$ro_!yo!k^*4dW9G|7-TTh~_Tg2X^9P42j%pt~EZR_G+mEL;D5b;z&bkPSX} zkj1xPV92h^AgJ;+&R;@|#H}Y-T(pwb9){7)DLkrxYHF1@>Hg{MQMfgwk6vm)^BMKP z#OVrWXJlEF1}k^%V!|qkg5`Rl%iqFh07K!PD}U`w65S;NoT;7VV>s>Pf)J!M676U% zGA`1ya{(|B)dq}=>U=c@ZBSw&?J5bmc1REKb_sL9iJ=WUiYX_~ilmc|4XM2TG{{mY zF569)40{9w%mj{fry*{ulSD$~cVR3nW9^Ldl62`8_wtDs->(^FPM`$lK?^X+p!r7Pv`@(IS!tbE-bI{-sYV2xoKpTS}FZNc!` z2kFdK!3Hs7?SOTQ6{_b@pSAv~+TmZ)WKi;o;q=v0n&-1afk4mmIm@Ze5PUso_EVMW zYYX)zh$Iv?Z6KS$+yGQ7hIFW@;K=nG>p>n)$^kJFcsjTdtYD9)e?jHMrWc;*epk;* z1ftjV6Mje})owl&l}^9#rUvGKmzzvOZ8@;9zPNN~u)dmKurVo)p; z_~eE9Ae~}HhF7${BT#fBZm-w3RNv3nt(P9Hf89RaT%X67(=<8X56{qFS^I;#fywe?Iru29@2k+rm30MtuKh3ULZ8+*)N!*#6$Za~IO& z-9@C&=f=^&&33mt1mw>m7zN}ku8+q{s_iwf1t%XnD&o%G0;$~c}fvKV9*CZygP<;Gm;{8CNnva(qNg@?!}>5N5d>RlBCxYdgO z^l-`9ihXqnWA>i0i`530+e^SO?h%P=(rQ_D6%0o89W2YiLi`bxIUtts{FtYr{Q38> z8Cr>kYGO7l#@;$2yjnwL0JyzJ?20U}ecEgHOQmVR8l2vhhw^!w`|Bjt1*lUF}39kVJ4x2Q9ceM;M%`ltVK@`GNwaOPs zwyQQ>9^GVBOl|%o3~gMwM5BhoKd~r237l+_*2+MC8m+L0sUUK8mU>u*s1g>%x-jrm zs-YhQ3efb=ndJ;KmxhKx%%i$pJlI>*ORL~+g)c0+u;jj~&y-zRoX0#cqlfxSCr!*) zre#&AMY5hoJ8`=35X9$_!D!bq6UNnM0#cRGJLg+1Y-Hc%yIP{$9XrZyojtu$zprq1 z!f#)Xag380T23rq6=GSwDR7^TLyfbBX#4S~WmOfQhEM54hXGAArPpt@GC5ZgZ(t|Q z*^u)p9*4KqJ2x)O$*!Q2#RY8(E1@y?xaPcte#3-Hz671@pI#lZ$nYsI&FX&lUcG~DpMKXPjE|?amDhS;Ce8& zb#F{JRrJJE0D}r2oqVJ6N&_tVjvI{d_j7oiK4OI-`{=M z5`uY%51LwS!DqI?=0n+D;ZG+D1CSAjL-DE~+fl_gW7fXXMUY_{+-zp4a0Y*L00vZ6;`(%_Q9def%% z9Bk%}ZB~n1EEk}#5I%nZF`!nkBS64Zs3_Pu3|M9->O}fe64qLeU$>+`nh?WhWqt0W z1(#ms$F>5v>TPpjV7SqTy;6ZH9Tj(Y1xyV?0AU@>+Gv)jCKug zi0YycY4r%w(1b@RMH`M^{;=;&EX#-%E7c}`V1>D008p(9vVOGy0#~-A4P2m=$RL|!OB0$j=Jp-@6P6;4xyzCz@0WM6OEDS6_k@+W0 z356K1Oh^gI(!8pm0)yDef;Nw&=7hV-EYXl)?p)ZY`CXwH&BwopVHGrsWO2Nl(??S| z9?GaJI50(ENK|Yq6GW?Se^g`sauUgt*!I;p-9SwQ%572 zABqsdIrL8$TtoQKPgX-+i)9TVp-aTbR@c=k+-bo^u@Er}wbZ1p7_eYDB9z3wi=RuL zzVG?h(~Pr?Ymh!P!N5sv=-O6R?{tutf&|4|Wt#pudx9x>+TIE(gb#~CK zqMy5McKg8_388-CcS%&VV*o_Elmr`K!%q@(!=aC&qYSHj=4H>l0T$olzAzo9Ror*z zzF&j1mfqB!ECq{u+XPGA$!8h=JT9OP?+NWL0|1x7ye^t%RvFF_)$su!O;tX+CA_dV z$I0iAd`#f6J%Ci4@fXG0XH;Z^nF<0uV0?s!F9BcI zb`RxSzE`H*Wr~bC6#2y(>OEPI;AUnW+Wq;t)jABR*8)6#gl{!SL4cWg#BZjwThWmf z>DNT6VSm%j_R0Kts!3lInb!qCes7q%4=RIphK>vqw^uqnuk9^OIK-f*`W! ze$n`A2B?)hYh&j^thQN2+Jg93i) zhA*jNLwA#mgRI@q)`~fXaY~gCcl5_|*Db)k(^NvQpONqPm(ld9qRx97WEiJs*x=4X z96Rs49GZ32{hQ`0!s=PGBxF(y(zWE|s;d+hQ5EvL(;8alE0iNgD=etOBE|;js9A(k zm|rGONZ`S*392|dwdz~!Wh(p7Ev!f ztk$0`EkuuN{?Iq3Swp8JTdoH#cVVp*AmOZqNf3uBnNNf_u)60fAx|_Ux9=0G)iDI? zG|9D|B;|y@UwSjjG`nRYY%@**aSd$yBAqH~3=c=yig5@zIv1o`33xLBD_<#TGxzl0 z%=%zT4IPUmWMZWwp9W(>otHPaS*Fizi%XDjY(U65X2GVLnzFFVh%6;HNn92#d4dr_ zEx1ukG)g|uFA2EZtt2eB9Cb3j%)BRCfd26zcx>f|}m5Mo7TTi{x}o~5A`UyD1whSoKw>8pjCDMU5yknGFp(9%j=wT$Yvs?cn zk7FlU<;+1rWMgyv#wtfbc;tW^Q-Kp^52p|X;Z_181Ol59cJdSBvn%XSnoohs631NE z?WJ;zsMlwkwT$eMV2d+32;A%CUeugk{5XSqa+$p!0vsTm%-pnTpVSP=!5CEupVZXA z%wavwKHW+&65u%JN^qW>^eig8mlG4e(oz>U+@{1%E@Q#Qd!Vr}IqsTQ9Hq)H&X68I zZJ55dLxi)(=$rpl5gvP22Z{F7Ba;T8De)kS+^vJxl0)=^D%Y7LF#BXmT~KGSWoRO! z!YvWY(?`+JK>jax5B4W))FCUpEpq+}}+WqJuYh`=&HTJ}Cxa8HIXrZ7DBV8}43l^Ui~zq3 zCQUJ0#|=SRBOiY=N1(j_eBO7EwLczFDZev>RfsnPKe9;jG~$<~rfBG*Z~X^b(>Bu4 zFi4@Gh96uiToY*bWH7L-{u&GO?`tL{JiqMc7=g9moFaG~15f3_)+52gunI7=o|CSJ zjuk211vlf7);uZfAMakL9npk+_YP6DwcWOP&oj13cieT!n~z4wPc5)xAxJB2-fPYQ zSN;oaS$k!Q&glL&Q)s-8iBAP%b<1`C-JBBv#mspaXx+p1dWc}U&qBxTa;#Sgv+*|3 z*k<^Fny8`~nN98qn&tm8`Y*Wb07D3jq^BNMq{8&=@lk>BEiG~-_V^>WkJ1>{@7e}` zwDFHuq4Od+9x8ic5B~)~;-=Vnt#*b~4=Z!4;|8@*LQOE^U;K8%Gw>J(Tn?~@Z5d!m zbTn=~qDX(-5_^oa6S!K_`4KNa%~CKwXU=F=bLUsSlCn=CRQ3mp&V}C8-NZ$FOzk&tGQ(3rO=|);BFeog7I>f?H;uI!Pr?bW zYAFnSZ0jS+v$TVRVxNq@>uOT1xsVr!f`y^%-iW*6H<*MiIb*?POjMrD z+Xe7tZ!YV4#P=<{m1qDg4sWQCqc*UpQ#yJ;o8nsO7cN)Ad+obZZ(w%#N-turU^e9(VsFdf~sI%Xun*mNsE=;8{(#0=${il6qyd& z79t5KolRd9Ws^ovB_>UOQN-yy3a@5EO2}+b+UAmi{#B~3SS6LDaY6_6+jHxPdivz8 zjK`()%CF=Ut0{UC%DnVs8xyy_ly#wZCYAK&!qtL0t&95PjWO{uC+K;3)9^~*QNpsM zYH~nxt2y99Z>4qCK!3CU9GW9pg!PscL&2zfDLj0;33a}#2cq*Dh8z75`Dfw|&VlqQ zl!qn^_VQPyO``{p44~jPK^5K@<@uwYa9r`)wT#scnIZzSv#W!waszeg>J}sJw{)*fphvaq{k)bhtk@VG zi4%bnfM@SnI#lmM(lyBVjMy}X55g?ez@}tLufYiDH?F zqJG4gZcm$+!*Hx`XQ$`O>(x^WE$Z{5leK!QOjlO(Jc1%n9s^Yi!MN|6A|k(SYoW>u3LF&nH9lK+bu2X zUtDlpOdLbUx2fM6ireCSB;O7Tvc5fDuUlVRQ|zCLnx$d_zMqe`sW&kY*q8$B4Fj!n z=u6(tZyuBrU*D~xtf)HtGBl~x;K0VL8zOaMDAF}j%tsP`>y;82naLD z5(5A1Kg)>OAJLwB^HyMtp5wSzH9{7Hym(&gYc20wUOgl{fFQdIekLcW^Du1QRoSyPv2wLCouyTAR$49@PX zDJhC88MMjorA5v;IHK;xOaEtU+mdkN;`w?+1bKy&YD8mX!DdjYODgp)-qO`TT7b`V z$w0lbdmFt-;;zWKFsXczn*)8Nx?tc`^zQVDXo}73D8H4atquH;b}7~2+=%K%yJ3^w zu&F;!0c9-tpjjEE2}`0NyE6W6y|2!*9(I$IKRo@*sm z%uhw)x|l@bjC+zQ$ArtsBN3?ky5p!O@YPj;+91QUTt_W<$d~`R>?9`05hbhDG29n| zo2?SC2Nq=PD6z;p7tBu)Ykk~Je5t?EPkv2rwkG>HswRC9`euCMj+l9QL#Y09X2SdH z-M9McsWX9Vdp+hQpZ6p4ubNg}4rv#g;^pG$4FB`z@e$99f8oAZZu;~u+d~id6bOci z>tNfGR3oM-_DEdj*!>boV7}|TPZ>lFfk4|tv}?-Wklrg}oQa)nkGWBzw3{6V`*emo z8V%b&=wA^*z3LMR{V}WPFvPN$^%Bt?GWIYP=)xFr+Fyn zm65eowWdMYqu`XeXMGI>g#9+c96{c;jqNz1YJhV~Fk|5T*XAhbpa$VgLCD;Yg4xdS zF4RAG{o^=E*vjbe%}Z|N;FO+nE@~=#t0`0pjd-gZl#~Qkj2a+8$#9vMalv?(|44}! z-4OSV6hiVTlAQm%rMYp6sF2LNR?! z{9mlL>`1=NGTDR{Tm|esgvW+A5Qs98u6L5NQRz!Ol{JHkz=Mj@+NjZ`1`D8(p*tgC z9{mj<>Ukw>{YLK1iJCblmZy^8{%X_k17jT|K_zwseN<6P_-6PJkSRv*deFH)+IgjH zo#Yc3zRFYWW$7qL-A0I{zS>ej{XjXvfQ@pz0chW{x-x`5W*q@sWx%XaC`FXs8LT)? zp`kw`R30n@liF{JE1(PZ0_)yNOIkov$Ez}b;6)4_pLz$4CB*0Xs9EJo zv|FwQBjzDtEYh54aBWlKr1KDjRNb7ca9vZ*q)!7HoKZmzq>&|WI4nFnxzqX+mWNJC zZFWj9v_iHiu$xA+1CaDYzKsf1MUy9Y!mY)o@j!5I#BYXW!+M+j8Qwu9vFs#;8H{D9 zoso$PVJB>3nUGudr31BjXcxzJyVypAmx+d?i3W64D^C@Jz?I6;+n72u{tC_%`0}+m zMwzChaKEH=D)Q;9`iN$#)e16OSaW-z<%qFJvvrdm(EJFV%HO<|4vt zBMKGJ&e@b7N*q<7)$?B}lUE7B-qFMaB%dMLlqRY}i~rYtlI4zB%JUb^_|j}z2kGoB z6Lni26TNDOPT)Y&1w;g4V&m+U`z&}1plDlu>|73V^<~6QJx20f9r(;;G`I zhFK;spypvYO5`%fidOm>bgLeUYvZuSiWO5y6$>4lmb}+f-g3>u(MN6yi>PHTId!{@ zQH)DLW^ZF1-?|0x0x<2OdX5>U{*G*;h)dY>?=UxF#-Eg!OPk^|2r~>faApW!j~j$H zF8wJUF)VH1nW{d-EmU79XegjSoMgeE1vQa|oral+pxTHNj!-dmztdNTFxH$S$gMo1 zvdSCn7jqd&Oc1?PBd~7j1Bcf9O+}5_5_*zmd!{zA%yG59TwQ|~3uk1|l(ZqSj(O^U zWCp4qf4w+$qCO>zMVkZT(dOjzk7s%BE3u@c$6FEM{cRy34UJ)!tF2mFHRuJKm>3?~ zHOmnn!%O_s3kM4z?9z5NH?xd0m^I=5-CkXdGod5c0U%S;>dt1!k+Hf z)$F)5RIEgO<+JH_&mODdIE^Yoexi0%523-DAm0${r?)J;_`@h&;CtERJk#DPHI9tO zk{!hBt~V#BhQg-9?zC4Hisly9jMV+l!=ap~`TKds9gQeUkxn4WQ>Fu&lLpq(wEt%H zxF+E)bJhfDC3Bzki>gX*|M=azxcb}#-1A8kJnUsrw(^2hM3vvO)n`h^r)k5}c`#z% zV)vOLMv$ul(CbC{I({rfGbHWhKGws%TcUj?*4X602U`i42_xW-8)6Uho*D9y4s+#} z)qV+XDT9j&?b8zTjN;w`9ngN*Nm*h-=>L!m~c?IYsP{)TRv1krijDAPUV2chI5G3to9_jA;L+ggbTSA5S^4%F0`bZ`&%wuz&H3zBLMTNf$H$lJCXKeZdW};+v3D7uEV~CPXY9tT z+QJ2Ga_>A0k-rJXhL!9NFbQU#O>8%gUL&c_=BY8xVqt+bq;<1rQj?u=E!mPBrL-e# z=+A6X;tHVZ{;4B=uy8xKB0nvCArOBRv>3Md;Xn3dgX)9yUCGLM(HT&peSjdprzz=x z2AH+xLFgqg9$v^8-Kumxkdg_0gBa%_E=)%_iSJd3)cGushy|I5xr$lI6hiTUcUPbn zR&yh>4`40-rD{F@xBvHz3%<>p`e&DvbYpL2fCBo(YRjThl|K%&`htUU;&p8FKWka< zOqi*$y4bQZypjJ7^jUp|?D*;S_+vFG@tg=n9f8rKJfLcIVkbUs_Ws2fOSSH2f#P|1 z!QOM=!oVwgH(QyuZWdLmkhN%%=9JKy_kqPjVxoZsT6~jYgrsj*XBibQJ26m}w^jH3 zp?LkSu}_nlkCVhMm^gU@L!Y=iwwjNfL~E!Rx$SY^)Z|SxtV{#uZD694cj(;Jk`g^t zvalh#QaRH;i86#M;?p!s(2|luxxc-ci2IrgC*>8rs&|00e!cO?Uf>twu$t+UsxF;K zt!1BgK=hEmVmIX-_Ps#%6JRs^HE<{lgBi(v;V4KgX8Z?W3L|*+DFVIU)*K`Q_#i@_ z`hM~|PN4qu`)9j??_(7IvS5861!51&Iz_N9`vv}*yn4JYX1&=QP^v?Ak}gYR(7M?$b*W_;F_#J%7s(;;oIbOiHui@ zFa9OMs2ZH8O=l!sN?d?$5?Z$I0EPPjr0m?+2=TGK7#lgS?5*BcipO3z$9RQ^ajRPG ztHg@G9Ai&?SwvMsg*{!$QY@dfe}UQ@Zclv!YIxe)wZJ7sSHkbJoMqmxp@wIjsaqqf z%h(9o14g_Rv!3Rf;IF?z8|`4eqtYD-5Zi5paQIYVzO&Hlh5l;0HU=zO79p6QLgL&= z+b@f*B)=D&Lgwsy%NPr+h-eb$QF>Xuh^xbE|JSpxEam*?*@>KjW3Nai`e&U-0uzRh zldU_4ur1BS5^SW$!N~dZJUHT_1_P27b0W~!3klb%oj+`#F2>%+UA$Gj`z}sy=Ugnrl zSQQa)u3#MUrrS@~Az!|;E42718)YM+PTP^)0klDbl%2xC+po<*(SI3Bpn$h3vjw!1 z>ZsZ)=dt;eULG&($?)2m*2zKDxAt44#-L8tV+6ubJk=kCR8V6Czn!DSs*Vy+?fEN; z&R^Gy9ym)1%C($%SQS~lQQJKiPT5nfuKN0D?~w%WMBI`<(jF0?>fVFW?m=gOrM8`g zZ~Y9IYk3b;DLReyJ0EWRt-gcmwC6D8VdE9Hk<^&SwzkdLI{fFB==TdX5sQ=kvF5bP zu@m8b%mPMyQ|hxbs;myVu(xzr{zY+^15xUr^EHi^MUl8s)M+TQh*dcZ7a;$;Q^05y zb*A~dR=Pqh9*};c#ifuB_8>0vC`5@lCp z$qYSNM3Sk1!q)O|JyzyTh7zoU%@}mDEFcx}sR&O~x#~WWz`t<5rQG4R)v3MvSVR!4 zBO+(K+?NxfldFi!=F8kxMY^~QP(+cd#=RtO2fb#zs(U&lMb)eZUmU95-3jtH^UI(Q zyW&J5+3Ha<%1^;uQ-$3P=L5#Rs+s5wNydqNE~U^(_D0PETof?TkEM!aVez_vd^=^h z(^9#ke5wTl87*-(g(R0cz7g+3CHS@^9zeb5M)PRbe~}Y}g|+%UmCK%@;i;Rq$9D&S zcZy8w*@eSdV;9PN%Do$9^dpuptfL$rGgJ7r-#Dr%TLzG- zR$=z4D#kd1DK%JIs;BF7t124k=9ibaGSFj(ueK`2Kz6#yKlQbcZ&#;uRyT*=x4q7- z&#*+{L-=yvCb#3dYI(W^rn{(dSvUh7HRyfGdxr{t;K!r0Rm#M2*O!3PkAP=NZ#vF> z0`|3DQJS*$HLZ3b8XO6v&YnDVx75#;lGi_92P=6qEeMgnUXeV~m9#F6J>>tyN?(2S zPZLH{(R{|@@U-bCTi(ttDk6;7QC*4bzdvoPrq1Q0l_x3f8y9*-0n8MWLfK4Lb4t$i zQT9z8*UE#`-JXor^L_}H8E33f63gtug7XxO2b~lbQ8cwv!umcYp0i?R99Ty=KD@o8 z{>I0?rSxfU!9N_&Tw;5YH!N~b4npR*URdJyJ!g1@nvqOb?^^GQtQTe^o&+o~Zq>_` z)UOJZ)ZNH;=1NGA#>At@<{>EDfY^r6@4YFyx*Gq~H0+eb-QDCd5O}i#!6KBX_Pp(l zD(}EjEFLoRV%d}W6Y|E65Byc_y$~j085L!o8bZF6i2D^fuY229oT{(`rT02!9F%>M znL-}i4Bv~uyq$>uRd#NYv*bnGY^}bJWd-2Da+dP?OoYJjl^gTIrXndKOV1@QkGRXz zPGb7iOo>aa(;{VxS2J&bP|=WZt;R^XZmYGkmshKkTLNsz#hfJL3i|=0t39UpZy`UH z|1*R8|3OD%W@r4rA-^VV$ylNm=>Js<&cAFKh@wc58)2=(4I*`(ZUZD zeY^|jE82+^DzDSgTx^@w7D*L^y$j3NW^#Pqo^p7-e+FtoTWn)PPjWL=(JE8O=V_8xjV@dMxkwA~sf_E=+K zeLdp?raqmPYkYaVzPAnr)+j#}e`9BCzMpSrv^!ft3odpJHl!Q-QK#J;UR(Y5IWwx= z#}b|$rXvo0B+%|Gks_7yNX}JK4~HKAl-lOT#@r7OvMK;h68w6%k7T4JfK@!<6|mmK zy)izNfO)n6YfhBCRuxfYs`w-cuOvu1Ca=#_ZJR5Bqb0r0_zejK0(mM!&`<3eC^UE-oV>9; zQ=Rx(z5radskr05a$ehCIRrw~t=-^DriU#Ck1+9FPq~|KRD0p4aB!I&RqL7v z0+GS**J=plgD1plWmwH5f0WQw|6p=4z6|dwWYd5Yz?@Qms;rdzq(X$R!BiAmQ*_kT zlTDVxlo+)#td^$_Jom4!@#?LE(IWz_UnKtZ9q}ra#Ql!A_dTp}d@YFXA6alXk``qr zVnD&41}_44`FZr*R^*sPX@9A1Guz&1+cEo~a@vdOx4qy_NPltIeO5REZ*fi2-|m>W zf@(UCZv)RAIJ&oit{_Wa1j-lep4a)u+~`DsJ~l}u#lnbU(`@1gIxnOO6s}llG%qEW z4&D@Dv|fj>Rv&W+1atu>H!UQ`Y=kWWM(n+;uR61Q&lZDQ49|}t5R4YeK&=FH5Qa-M zjE~nWG{uyaVdOvn8uCH_T8gBg-zl`JQH6v4mi%5xg-5-(=$0_p|@1K|2v&3RCoHYSC z=0l7O*9Y3Vy<(nVj2f!`vshl>c?ZwM?ST4jtF=D1k6^>aL1QhfO^b$@sLy6Wj0D#* z$Gwe~v)?8mf7zyC73s}t*gvalkdpb>rhknUsLXi4b1`5weM7KncvJ4g04Th2>0wO~ zQIWVBo(hzGEqT?c)PpJH?IBn~p41JOiE-|(Z-UUL2!NCdKW4Qt<>k!HVQGS*FX^oy&)1T7D|l8A{Z^5rH{#-)0yjSB6G(Wjse?)ZaS5kz%Yx#t zSC5F+ZQ-$siS&C8#IQlyxp^NauI!Ktw_)JpK>(`#@hIy33BhZD6qtG+1=n`-w>JpZ zU}}Z_StOr!&c%}kLK3$Mhup4*K2L}^&I3jTq%ra@rTGWBD!-=r&raZ345o$H#WRQj zr}7ExyA=weLDQ2(RMUf+TX{o)&dq8*yBbLSE$nmiB^H7$mjoF^16->ka=4U`jB^4n z$m>TGUrY00`cpCo3!R+m(%Zi}0#k8p_is~-BWMoJ^LGRtV|CO%(5~$jnT29oQT5-& zn1e36c%E)O|1E>R$eFmuVpE3taojWFI_Dn6CBwu86Ooy*gDfOoW$)@8#g+d#CX@nc z=>ub^<@@J|3;=5+mmbs<76ogR#Cl{Ut|TOwl%8uLCj4pDU$9X`VB<h7l_whzBV=$6Sd2JM*CJjW7&yZ#*``>F4864!(ln7|H11;RuKJ-~g<4Xa)w9=*~5Ir!8 zNIH)KAiigfq+n7avGdJ5T+hgm1B;X(A9i|(5H=aK`Wb+^SU|u$oRn-aJ_L-2U^zxy z2$^-@#;zi|8s1DBq+ba`>3^o%a0$a6r;kG7?}bZs*IS>KqMTA{`-H7zB8_6d? zDd&q%iY^l~w8KEIlS?-Tql${SthLzYNyHRa8WfO55=iPVin{{Vq%^zQ`TD7w>b4O)HRYpa`SMsfxL=8$zoCPg2g2weMdEW~Z~9Q2$_ zbCIC!rQ`D}5$oNbj_Rngw}yL>jfK#%I@3P#zNa6TIjDx*C^!n5C%^HY4c*2yw(W+1 zzM80JlhIw~y_;Hk43hl|N?DWAu%<7ka=8W=dCi_j6irU3AqoUnl}_g&&+`4z^1Sra ze~pepZ%zh3`F;+n%BYdA+jMfM*511aRyyZ9C+b}r?nH!!(L+GZDMl)6d?l+2aF2(A zH~xn0j9%h%-;M&Q-j*DvY=QKXyvRr2wv{6|%*L=9Db!*!lFv(1Fw4fZc-@>{L)+KYzXR*u`6H?ypEi`b>X!LCJ?w{XpZ=mT|sXP@M-4s)2TNH!xdL* zF5CDUb~~d-wu!BrP;L$CO#3p#2LUrTGp4YFsxeaeldzIk^06Pro*8-F+~4kezSd>k z{1m$hx;8pxJCchLZuHx2yMiw<02q%Okq0+glumP`m0U63AaGqkSAeYvOhPO5ogTk! z4TPYuc_yQ``up6j3$M8rcGs0_tj4lUc){&J&l78t`)2aF(2sbrzfa`yr1h8i$wQHS z>q`>Kj4C>!W#Qso(EFqQoDl^*a9}iZ*5sX+F$Xz4LRB<*@`9CKo0Zj^S~4Cns8ug` zfh`eiI?{H(>A2akVfJa3m2`iRQ|LO72mEv1&C^OvQ_-#xw&M4q^}3bX&?*Pk_&HmI zGtHw0;&Sr&h>)lsI+r>|M*(2dNS?|cti0IL>imoLzAWyfQlt`eGlp6Yl7VFZ8^rFt zsReD$aM$lcNL7qQc0Oe!AD^wC8i1=vn8zknns+oAv;CEG$Ze)hWOB1{3%$rW7KxSP z&D`^$$r3sDMWe{Gn}d0oLq@MpL(mZsKmv&4OjHy|ohLM@`v@q`ykRI4vp_MZm2Cin zLd`9tIJVJ#T3)RGjz-}b*8xe7icoQ$~+Hw!|{ zt90vkM5-VqrgMO_;p4S`BuGx;xca4vf;>i=QUL9#`gh5{_*)CdN)`7nqq@z+EB?ka zn=Zq0ohwep283W%^L5Xh^w7^$ulp2zkuO)RPpr6X?;5VsWlEiD0); zJE+$$!ES+Yrr}@Qri`4gzKi90i09@|u9^N&DbC-V6)ygcJ#SPo_f(s6VF^PhuTx&$STFy|E~vF2sF^wslc zmRk0Z@*0ZWth3nU$X9F=M7a7x%w=kTfu1+YWqhYWtyPbQIBy(Dxp*%&mESh4I3x?4 z%Ag(_vNpIIJqfu)C7=r9*n}A$+6Fu6)gBf^-G@*>PPPZxp?=#8Yp>v;n`;%9`?)yo zM{5*b{jDUQR(d^6ofG4F*0Rtmm+wB(Ec7_o)Jk;Crw6nCWThQXC&NCfX80++Yyg>7 zrPoG~#H6H&dGxB{DPOKS=~Xb|p_EDxhiT6oyu>?(f^ys~oyV@yVW6!(uPDU#(J#+t zLKSU2?QNfHjY9&Rp*JV8AokBrDn!$Zd zVzKKzi2bXQrsLaAHD*H7j2}I=zw-eXmWyhFYatnGN*Oqbg_Z)bg@y-9sqlk|CnbMy zf!?X~KyeAEG>)6Cwo*+iadnMQh7QoU;?KfP;|(_4bkMS;ZXx9NB1NM1MUe4v0F z-Zj9hol;DzF;1L%{2?As5xE7fqonQS&=~(!+Aq?0)_~5Z>jAm}6cU{YpJUY9bZyt3 z*W^(7OSzXf3e25nxa)y3Z!Q=73S~X#dz?XD?)lhL&ge%C=#%br&?kd!|H}7VO$?rG zyFbytdZf8JA0oY&K3^Yq`W zz8VA&>lWzB!%x{#wZ!S#OgAM!8xX{+D?oXcCpI9cByn7L>sB=#STWaA2U|rz^-BD? zHuk5$@Rdqws!u`W1QaXajLwZHb^R_1W&}TA*z07YF97+|Pn}Za&vVCs;j&|~CIgdH z1mHK%2ss^vRPd-_t1R=MXR`?0-qGfvi#yhZ=+Wk(Nvy$$ccAx9sikG0mdAZGmrRbH zZ+HQl+nG#vb~if-b<5Yk1Yc0R>*XyO9+kw2OY<7(gEYXVhw|&V8r{#{fll;i~H@o#4^3pe!axupb&j z$l}Xar~u}AGi-A;P&F{{zJg#;iMUnXI=?){;C~rt&Ex(W63{vBQXriK9m3PSI~KyD{JL|M5s(syTKe0}LhI#l^NLj>yx7uS z$eFk5hBiP)b6qr-gw2*_yS>UG|3!+RLC1&zQd4oIn`0 zaIEylg2c+*J^1Fr5R`x~zJd)AK6hg{4`ivl8dwpB^!MyFA`eH)#E0Bcd8Kbf9P0Fh zSrg=NQr!_}3jGGrBB)wECTtP81b%-^Kut0a3dsUIE!Y)*n*-8$Fm$}t4EHDa@Xq9% zTj&D6r+Q_F_Iv3|o)?5k7r>`Ih`M-=ujQAIUd84N)*s!?;qao8G)W#?}R?9m)+bK*)_D5(ydB;A-jC_* zxOf`wp9+_rFi7&LGkP6d8@f7O_x1T|^~n_?X^$1;_uApb_?&jjR^a=asAjuo`+Q5-i}e$_20@`|)%)XSw;dSwvOk>Y^Ll=@ zZ$~JQ8PF%#QqXp(>dOl#&)(v z0{lF@TICD4qWKQ}@mKx@akLlKfe8WT%CNWZCM9e)I~WbhN446x+j5|KdB=)d9h#Zj zH`O@UDY0>}R!(8+XAFHEwr#>C&(cAc%n+qPx5Y<6R36t7NlYPeFFviPTdM>x-@`lrjHNpr})X~ByTIg1ph{45jm4kMy= z04DKrXhtZEs0%)Ug_GmoP1VHOhx_veOa@@kpkWG3;$;d<;)M=?n?)x%T{Iz!DG?Y( zPF6}qE>v2UP!$J;K?X~~3DSdVU2F6gOT83=^9V#~Im$QRN@GV!la;|_>kfs%VVN>GA0IBZK6&##r2&K&e9P( zn~^l_4z0%|vfEU9gv^T(q6SNMGCk|C9QmzB!QU_vb1J8iomlxQD=xEl`Up>8 zxL4ze8V91yl9|ndBv4nhICzsKtTo$XNeJZ8#_2KwSm$la&sn*Gn*EncrKt#%$*_u z1kj7Ad;TQ77&zW^#IT-bSlq^cQr&f;wJVJ_MS5a5T3YSklX-dAowj-*r86GB8SY3s zz9EL0hh2Y-V{WEEKi<_rm{=*$mfK(1>hQi?TZhlnQdnk6vq7jbc$Rcwk#v~bIH?cW zAt&RtbtQgoWYi=&Xq)Yt`_bj1V>rjMZ7$ovgZVxjbx7&r=YuMdh!1|sJZ2iTWXN<^ z9-Z;roEz@oOqIlY06uW#kZ~S+o zm{9)h=GCD5f-64c^6}~-1!h5-vmHQn%5NR|%pocSG4%3P!=BPu@La}D3t*~S{;lsq z0Wd{r?ac5#k(cqG6^LNiAmtXX#iuk}u1bHzYmeH&uFboXK;jPXO_- z+BtIQ2CX+hHIk**KzGH@*xup^Zx!b1^?V!3_O&O6W6X9PIP0*2#kLn9SC1<|w-5h` zq-X?ObpWe8D~x5mGcmiXIIu{NkXYMzzl457kWJD*uxFo)G$$7c7&tXH%1Qy(i5@Z$ z$@M7C#cbz2%`zME+?)A_j&901>!V?=uyzl88NB@0X}I4Mb4U@;+zO8Q-4-x<;!>kk z{-*zW?o|%Biy5Z9%lw~SBPR3 ztZ<_TM6XP|AR%oW0v!o?1@Yl8?$)s0;D026alGvIUL7k``hKXu)YJuOpc}7n+5ZYc z*jhv;z~J__672Fc6}d`Y?=IW_EKmroZ?gQlGtWklT_?tVlKAUR;;c}|d6TH=#uyhd zy0O)5`l63dQy~NOGpUW~n2yYEcLllXVZGpB?`OJ!I^qFiSqt=}!GNjX07?cL z-ew;t?x%F<3E<*rAWWZui1|q-G&C6wE3hX&1rAHf(InP!WYds=J`ctU3-DbD0MQrwRI;g26kzt{B(G2x`5;Pw5hwdjyAYHQ>>hATCKKnn5E&;Q*sZ7QIYr2;@L*k_zpp zpaK5Yh>C?@fV}htO<6YG)=59nnwH&8`D$M%^rBTa@;ik+7`>;nBTP=HI=pFNb4mi zqXJot$$9=RlRb3GR*;I0Ree<&Qc0NxkoBN}muENxmS;6Uzg(j)#Y7}WD9UQiyo0EI zKZ`svGK9q)>qk>n*E-uk8ru#vtkIgs5M6d;G6~aDqTiG~BqUNF7_{>}QzA@Y^%{WlDO&jC|nKXkY$l6@m#^4EfoOrmQwjuYhDvr`-vtHQ;C z*D$T(Qaoc&azx|dap!?cqh6+fWh`0dxmYrQXi-U&?rJ-ecxj9oHWe|G z=;&fOv>^1S<^J?p1unX`9hj6wn!z||?i3oL-)$T1Pxemh9sEoL8Zg?){Ia7uPkj#3 zu4Oe2lfrXh4^moo(llz!r<^{S$*|8&SlZgT_*=fqij}ApB2Yjgf(Iyi{PMt` zK6>Ryr<4v}5lQQsa_bSu<}P1J4$YJp8PM%;1Qf_Y;HBnjhu^5J6sX1&#mk4TL<_a# zs;ntg(-byFGC}fK%mOi@XN8-}hxXvO4_+4vrf9_2${o%sG6RnF&Z5q!Xtn2Ni>FEw zP+VBz7+mzJdP|&^<_o9laWZ+}K!5bZjR^Ton_*&B&WPo`CQ5DprAi70S^D9igo51y zZDUUC$F91O#=GFQzoD34V4bpyIn0DBzjH~p`0Q$fP)YY2x7@|ph9Ccrsk!^~8_OyA z!po+CK@l|b75@3S?S*6+W8x5V{$hI0ix!Jdz#Ge-=+3U8i7ticbSFh)S1Urh66Qoh zPO6>CfET0I6YHkkh%lN~fSyyYzusb+bm>myTmVeaDqC&SMea~VWWI_qhBZbP(Qe_F zr{%=OPEZU;wI1+PY;Jx^nsnIG>L1;n^FKDB7^6XK(ysX0a1*Lt(@eYz@6yF!_3@Io zVD-##`rgh2xMqP!oCA$_;H%U$2(&!+37G}oXX z&00IjI!ZwkYEWDK8dd`T(TOaS@m}=W#h-N2#Y=S$MKM%MsSHS!wiTm5-B)Q@%@Uue znmytUr2YAq>XR2w@Fx*N)A+SDtR`WUFh*Ld5}Z{D-E109duWZKjX8}z^p9H&p zaEdt2`V?H~dOCD^jg=7OjwU9T^vxiSbyHygz3t#CMV@XyThwO%F5_Y`yU%)? zW^Sdj3YzaAxN>5`**@$FlCHVj%3YhHBY@U_DAnqqqEwm?-1Q1F*#dmylC}P2ZW_|< zd4^6RYvZR;ENT9CcSjA4>wxHywPp!MNmF|rq>HHiOQG>iW;Bi9P3GQ_?hmaLdu9_H{ zHgFh&+64UR9jGa0SQUYkJtDCrr!{NE7KUmTT(zDV7^$xtM*2rktb^ZMY=P>Njot>K zN!`2qomgE~_Fe8WngP(#)-jg9Y(I0k!BCBITS$1uWI=!;ZMvgo{}2bAaCuYa?(|zR z4YMfUv^EbhXbrQEopyDLNzsu~>AT1v-1ON=Dery>)Ss#JNHz8o?)VzKzf0~4#On~4 zBi{PZ*4y$UAE#qv74;)89}q2d-+{6HHxhz-2K;))TP1uZhE<2rNiBTtZhn64dMVQ+ zkJ|ebH$w}+?WM%x=29-SNC{$kOfTfTNh`U%!Z2vg?s$+p#sEgKTusoE$jvEI9Y? zuo%W#Y0S(=vG6s13s`c+beq~(&BggWc@Ob-MTU@-t zdwO~|tc5T|7!1+OF8h$Er|3U-td;9fXm_QcKw(@-vQOiE#jPtNz89N`5T>cInkK}8 z&>R~JQxH@tFU#%7;a=|t(wgP8z`g zyV4_GzwDR48AWSGpz}m>VbAT6|ApS-Q94XpB&(0+6e)HUrvLn7j^ii>x4nzdEmI>k z_<-YI>^ z^dX#1_~oQYq1_uY`8hQ%$|d`oPB@1L(4~+Hb=r1PQaJ{r6Xi=^(_+)SCr=A*pZ>Y; z4vP-OM%b>Zxc`jIygHpKIA8$M400}qid0};g`;3aC%;Q@@Tt44T!qUcnrn09a)GYn zR)K(6er&|%@8F2JB}ST*yFRvYE}f2g&?yzI_#89p5FB|h_oPhCg7p&X{U98Fu%62U zniC~It6s-UBDSVlV38?z$M(YLMBcP)?70&g<2vdnS0p$w?YP*RH-1t@1=ej4QK$Eye)TfTp zML@+zrFsAw1K-wZai3+bpEgP_K-4lWEnNIMn$iLnbpZWS2PO}XxmL%}G-M?$ge-(g zQuV@AH=KmSe)fWW&*-1^gd&*~=wS?7MIhZ_)Rx4~)F?GEFox`ZYKc2P5UsZzPmzL7 z9!Wq~RVnuDK*6&8l_Eidf!UkiwtD54%EiHd^%Ti(j73Vim% zL%5MzAd2|+R0X#B5OEcR#_xIh{I*yQRy(B3RDwB~n z4j3i3nYsECOo|ll`2_k%_3>V{JrfcV=24%! zANS9TxTwEomtTE!2hKiUbDax(aPl1eaG`6t-z|2ndcULIJns3(>GJhD$qtZR?fiO7 z#dP8>yP0kGb-w=k`(lrX@`(XIC5YF4)n?1LeChk;#q;^1?Xo}d=%L@}5q!4zau^Kr zOVO+<86anFjG!{SnfOb|%qbxN+lNQC!*mZ_Tb|B}qTyunQtiFy9Z1an>+3Mq*Zc3y zIpHSp-`Gd}SB4fQpA#YqXS6M?Rn}$dMJLv;I*AcU7UnYHM1QfrW?GBuN>^1YRF9-5z0j;rfr=t@_)T#p;e1#jOLH3+Ey zT?}kSJ1>(%)|90j4k#Ok*XKZOq%}0GE6xz6qfh&;!7L|c=M+*ZhaOr} z`c}7+j~mWK15q*(S#$ZRS$3Y1q8<$q1J_jW3RP1KnvXw%VP|D)6n)|;`}&6b3B*#> z&xMu8^tYA+3!XaZ`NKj-rA1la{~6NvJrWHS?b-KRVe)=Uu~QM06A?6gd#f@e7KGpn zaqeF`W^QB+C1Bb~4Ao0{G!t1fLE=_3yP*3X=)ZoP=%>|0&@R8eJ5)Gur}kmx zU?;yPX1afsb@1udOA}PPh!3(Qr^sVQ7#ScVh#&fhDqY!klJXmKGx(d zdII_4Lh$V|^UET5ZNJUn=BDdhDXU6G5|=Dv$o8ZZX_yA@0dTsq%b752US*t;D<;%} zS4A%i#uFErA~VJZFS1QK-fmVyW1$I~RTzoGjZR5i6-cx-`*f|YmZ~kCsdNt(3cbuT zvTpTh>>#EecZ|)~ogpO!Ri0>GJbbwZHyREqc&7}EwrDzk?oCVu*&DaWD(XhM?OblH z%Y!nyC&}o7+VbxZ7*-asa_s~MVcvyCBjVd0R3ch1K#hffG{ibp%Mh{*$i(Hd3C9Kd zpGDV^w63=S!!U9`659dNQcFt6CZq3wMTrO#Lz|S}5;DD0d>pAn2Kdxq#w$hj5~{2> zp^G0pWrjRFp^(cC{!+4jnU&DDC|3j0k=GkF9Ax|Z7A;OQqd)uC60!w#$L@7Q&$;1e z6W91xM~~y<`eDq`y$j7PAjN2Pjn&j%bo;JtpV@+XFAqAvL}MFwiKq5L6$#DNHWhQU zkJU&_G(GePwcnJ(W@?#C&(dY(xT5ZFKY3V3(V+Q(5qJ;o^o3LxoWHQrIuamEC>!Z= zkqr8!!yVO?L7yjr@?+T}Q-8wX>R7sKj&rjenfpD<0w@DZ?$?SI3IU0QF%*FdR*4YZ zXEV-A(`l2XLt=n+kQLVulnO+vA~msq=zM!DGs6U#`BdU4cIZ+L)!c}h4Jc^c(_v%| zOfKUV)4$%o4Uz4z2CDYI3s>;qPqD}axet&JXy}k}Qn|`b+FP%tIukwlQ_H9tB#5+F_!P&OKI+s1(>;=z!ER0=@qyOZ@4rwOcCjUB0j`rUu54s zz6C^v+?Yk4&|Jt6zM75ujaivt_oMz{gF@@$4dcYyNz)hmuyJT^LYmCx)eSK~0PhgT z`*Zkb@i`f+xId@?c0;No-WBx`HqC<;U)xT|5QctQ$5Inuh)u9?j$>aJLkGZ7=Vo&w(rKIlJqR)!bmncSC$7q_o+_ zWlpDGNZm_6gmzVbUVTX&pgW6&AHYKxqFdS=$7{&YSQMnb?`vV1l0wS@3O8`YzZpXG zu0jsdBkIdkL3)+Kcr?HBD8bi@@p*7ucSoU6Lyupn0s0z>)az1uZ2E>NPl_%UXg(yE zof)#zwV;??xxM-D8+jd^{?L`fl2mD&c$Cde1)GUXXIV`k2ph2)|4>0y%z3a@ep=Mep(1Y>;(d=ttUt+4^GiKtZNqdululN$=7 z;5a@qE%n*dwdwDpqkSik6E;a2wLO2C-u_XuyD@I39IRuoEO`b@60=G);OgeGb&}*JZzq$q}r%Ry>lDm zFQ453N^$3m=?$`<6|X3>6ZO~7Jq^xo>u0Y@&qV>wUz28vk=WPw<*awG` zmvzqa7&liTeI1a$+(ebM0s6#y+~@Rxl#D5WmYCm_mA%GDGZws}$Un4d&A&L!wqEP* zAt$WjSOuRU=_b<4{gBgBi3qp@oXXt?A#=4NDPxEaCg(2eLV_HqY5g$wDL!n-`N^3^ zbnqfZEMCgmO$2l1X; z6oMz>a*>BUrgu(i5`6eyr_v}u?#$*C$*1sS>`3|+G{%=xpm9{f5O8zPyM|Cg-0GH* zQ9$%txDYZ9^IfV?=pN`H6oM(5<_@%hxm(7`X5QMDgVH?|d$HM>JJwi&+<>(6a1m3h zWCfpCMIH?C#?muS&r2{khA2&@kt&9`_d5lML)cEh&^dM;xu$bdYmP;2EC2LTq7I{p zpXcB#p9mecQh`3aX%Ro^_)CfAo3W9fDWiA|)NM$;Nr|N9XV;N`#^Hm2 z^7A=pi#XTCR*Cd9=BC4ZRsDu@$OZ|NnN+fc;$a!fdI`%xZb$7b-k)Gj&J5x2!8D0b zK{S+P#y0RXF7FLIBNUu;DI0 zhcoD4>3O2YY*PS4T1novP_;{0b$0^Kld~c*BO45|%O;z()0c70bZCXq-dFU2Ej3En z98&Kah}soWQ}*VnuCt$ZUDMtqHIFyP8LTbpq~m)CSAQ1ol1VUjOd7ik9Fu-_xcQW{>7?!4 z>vB(Hxx#thD+{jRwlTB|A^re<|J-Ha4=Y~4HND{ZH{vZMOB=j+cp&_8nmjXk=hg;0HCUiT|1NbSlf2FkXWyP z@dPl^ixE*pBjMEKGI1o{I)OqKbp+21+!}`{|A9u=FmM?6XzJ?hRcALFInD6Q2Tbs2 zuYcYoPR(T!QyNeuTUe`A)6~Nh?Xw->=qx&Hv{{sUfHYZIg7c%L{UD%7>$-~{bvyzO zIz2E8IHeU#7try6l{4cfl{0vi4&rGAHRQ3)JGG$HRz*l7=+?U{L(7nk^5w7?Bt&D` z427lcNtBDD$QT>_$yml=JqEDMo+yE~7*%&*{Vm}D@H$*$$MvGCEFjA>?JEL@dzxn| zoBoazWBVHOv<4pEtt;5$a4|6ge(TF+n+g9vZ<_u)8=kO>v$>rk)#q1|6$nv^6p;E( z)Dd6^WYhzm0+9!?05Jw}1hE5g0>Tu;8Keq?2t)&T>J!dFafFOIGMPZSy@<^*lC%#D4Ccjfz{;gO#VM=C_37ixEKTe|8@Vbz1@E?76Pg5 z{^LIJ4=0_1k)?{W4dV|Yb|5w0KU{J|Y+Ouiz(Z?ifFmQ2>dhG-2KW~RBBLCTMG;7_ z$HB_{f6EhHs3%`d*J`r~HR4+WsPiC?Sb+M86?P9w$-y) zO*J>Xqa>c=+F2B?9*@?V_#}cW--*=LdYJW~P$1fR4o#j%PpK|6rc)FIT-mv(WIRB! zGFq{tpvZCzCQ%-CEiBAt`qT)Thl~hBQ*qn1Z}=kgOhbzCo_#r3_o1`N(Qchghj|bW z{L9g(Z`tcZL0!jH5D$80QLJy-jXfv4#nIyQM5ivgGs5_i3~7Qk3>uwG7K6IXfoq($ zX=LgL*&rouE)RN7@~#hhlL|}?()3a&Zw&n{_O%!+Z&i>)QLl49B60(j8~sWbYE$x1 z6P$4h*ffJlG%nrdTxElMPflb-w;L0A>|j#zf&F&V^SjV!C_(GuP!;?Nsq3)y+Cf@Z&P(b*`YX#9A`RT@lxwCkz_fG z2`6MP!a_%x)u>CV4=b0?Sn{}oUYPP z2xCJQ!`%6=5^KKw7{dmGdxFpF=X$D8XO^n3N3np(By{Xo?g*Aq$DGRi!*s<1fgnFu8(NbVu2LV#!q6H1z1uE z8Djd%E$|*ii4ebo5iq(s>CxWal&nqdq^TX`gptmIe>^?8LH(hd=J;hinK-awno4 z6g$Jqd7Lp9X^DF;yXda$((SnDi{>!nccmn6E~zBvzbtGGXbnVvVj?hv9FzCVL1hr= zrAqSi31Lt=tpr)3sX#09{%o70LmLR!z_X}75C`6f0+54B(rAfUN~(FvM~K{#VYlHs z`dScC3>povgUZw--A)Q{rfzl>e>Jdu@09E$szl7$0xjbhpu|?S$yXyX4+ICybQpHA zj^yj9BoV*!T?IG)%*qLMLMl{)gus0e3`{{lBnm96q@iUATgC}M#IDNQt!~i(IN|Dd zUBi%{2!Np>X?#EqeZM%Jx!}Wtd`Sq+AHfpDE{s7@#M*~Ca_Q9#knH@)&^xZrl)7U{ zxCDOWA_j+TeX-_64_ZhH33l&cMEflL8+ZwTl)@(B8Yc#Lb;q%o$o_(KmMsGAYIbcWq8m3SOguRpy2d znu^tgx%cZBkrLcO;-sPr&KQJ)G72$3*2Ng>8+6W``uc_+6#5Q66$CPxs!31_e516> z0^Ia6k~(qQptFSqR}0S`FBjH;3$#6q($-Bf$bxe4x(b{r7k&WPO+P5COiQW@Jd%s0 zwC9L@k!W40j?(QS6(V9zk8p@O3fIWZ!-51K%<*cYI6Q>Lt}x6Wb`b>$xeDdn=Q;bN z02E!64HDE$d{xCjr55VmPWz-NW}=O89!O}(#!;+qI8&^DCVObHzL_^+=r=Q|3Hq1Vb!JO16?Wpk>byiX)R(6k2wLnlm>1H zq&AEp1uLFa#&VHw!)*|Yh|g#sIBF#nS6v-ipe5F0*OvWmrn?W~x5V< zv|p$+H;6ZvkIo*LJ(ezWLAZRv|k0oR+9`we8>^> z6W1rC_cTCAKNLp5n`nOv(&VOtjp%#MmcMRjH6#mLo~3G`OOL2=#of&*^cu@ht4KB0 zMO6)eU<<#~@I-hJ1@)|uyy3fC)fyfB?v_l;w^@4MI7%T=*5DKF-MTWH`(EOx8%VFtzjsCdcXNwQX zVBldgwHl)V=$s%Txle?LQKWjdk=@{4c){%aVIP|I^~KODfpSHXg+X(ZqzjgZ0O~{O z5QX6~jheE}T6-iB>i{anny1a(Sn}vFv17BB4E!fjQW@kZB$8mZb?6CTgDC$WwIaZ)djzB}#QSC~j5rRbT27}N$S{_hef4x$0D zM%Iov#t>imhRHDuu~-t4V8pE{3rpYvSpGpNicqSm;K+!osyn_Yd7-<&#j`Z-s?dia$z?^#ICxb-H7cp zCHbdVvcj1`_!tl3vOudiGX5V#@wpRd7pmvRAReS;6FQ^ScmkG&I#A zeN+quFv3)a9HNvFO+G_FsS=tgTx}L4c*DmYW{ywjX1VwK+dOAZ*XzBTp!eI8o$u%8 zJg4B-VfEMJefQ_-``5=qJ7E*w=jU&muS3SK&ufN_yY*|Iw_U=nuT#Qih3?mnluswm ze)o2R&_jo>W`mFWZeNG)Ew$R#C-$c0hke-~hhdHGx7cby@5j)ur4{d7Z>31Y*+un) z<*~;Pg>Q-1s-w3wg6#(S9o-%7zTUT=PkSF9gYWa7G=5fVV?$6qcD{d4eRb!nzR%mn z#`c0=pv1<8uF{$fOZs@-?28f*9^NW>oAR;mhG@) zL4@0>o!!xb?V!+s?XUo$41^;ch!Ddt3CO=t72e!GU`BTNo#Y7$`8_b~LwMkm$jG-Q zSMX$m(D~{+4{7J!iyUi47yGUVq3*k2p@ra@P^vqPfI{u5Q|q591zuryBbw1pOTD6C zB;7I~s(`2yN2(idLJE*=MhY0`Ja}9R>Sx&M*N*g7f46?Jn2<4Dq+X?5HEWud9(maa zgWGJ8pMYai>h^qvw&^7`L^Kw3H01@HYgctlpIj}shd zv71L)#E0lvY~vjwC)!3^WQNo-AoH)ITV|qvXUZ0#InxtVqD~#23q!nT>X7m|#2o53 z3LKL_{|8{udrk}iJO3bN3QYDuH?+}oU!B7i@L$FG)X<`}?xFV>cN>BBnEVt#1vY!2 znUHIlGIRf&K+9{Y5;>cT(y>}Q#|atyKL8E-Zw;SDIazNQ?PK6Jue1yf(R0{_Yc*qO z47Skx8f$Hq&^;NFpQ@z})?Gtmr+=?2L|Gwu;BJ<1-_wovTzt!nBzpPZfFn}giDqiDEsQnw&?#9^;br^^h1lvMVX1`yjhPF#{)@uawHqyGxK4N$6R7{z5f}n z#{VFQ$^XdL!Ys3Vh<-eK_jYZ#*r6P!xy)gl<1Vp~Ea8xBj+DCAb|Bbx<3N|W&^!_P z`P(tYYw$vq=fTmxZrwmD#dFysH>U8-e;{=7AAu9Vw4xu=NvG1urqao$(kY~7IFw^I zXJ|dw^4g_`EKs&TO#l1#)khhh{nNT>YkFeCOup>^|#16HcLNdQ{@WiL~lrpW>P>RqCB=?4ze$ zy36nBT%Y@r;r0hn_WWu4M#V~@K78LH5ab5%eEsz(;b#WLH>OD_Wzh3Bw z^3^krPDXe?0SEfOAx`vnSlI|k;9UfW6Dbk7RWl3jx&}Ng?HD?G$&?gQmX!E(Zfq-? z`|P`i-K1v;pdDWRNh>A(uJBmJy)H+Zd#C6FN)rx?-V<-u7`rL zeAFK*|7u=R?cdE;{7=pM|5x(@0-h$pbZU|*Wu&r;@r7q2$}VI>EX=H!#+5cFiE@Nm zzw8E*eKt&T00h!Upf$SNOg}!qQ6EoI&4)s7J^gyrzgAzjY|1(?RvA}cep;BmCF_gF z=V##178Ymp(kGkRXV!V03Lw#$Fw^=+Bt8fS}@J8Xkv zB@tXwZ$_HK4{FA}>A9-3tk=10AN+W^&*^#|o|e*`kei4q;Y%MJo&wib+e<}0KHfVdxqg;M|S{sKRZN5QG&{DSQFl{@LGWmVr0_}ls zWSRvUmi`NpXsnW&+04d{dpB51#iwrITO(giIff!z4lHq4_%0-oImsk)Soo|skyjRi zuv`=a*e>p7_@E|6bPSy~;cy#Y7mq9JP$@&cc`MtQg{|0!2Sc0}>33nd3ns8xgOCwa z-Y6ltBw8@$+J5K(u~rhK=A`khzj>rW_|@m@8sF#fC}Gkqv{7K8Of?B$B|#_USgx1% zCok4jp!=2^p~2su&;o8;=)oOO1lw5C=|R(M!dVcRf4-kF=kFf`)TLGR;9_^#h7frr zeixpIq5#>AR0J0>l|c2o5vKy*#g&KNd&EXI2ogb}?EM^glTW8};6$8p=bCgll3=0s zvI~2MTp?Jdgqe6X;5qf#@W&uwT z98E!_i6vb<%6H^9rENw_G0}cq&-!}W|L*${+1|pKlipkG+t*4>$Ybv>=Q!b-3#a%EDV2c*!REgyTJNcgzE22 zO9fZcy27YBV2DF!cS4R6yTJpQ*PR^v?k~Cn^~OUJx)H)iOK(A=a{R2<+m*~695n-p(Kg?H4`65~#fhDfyhnQzv2l%dYwL;d1nhPY`BlO9DMu74V|oqpBU zYPR)ZhkgF5_w(Rz+Au-pH>hw0GzLa=#P0Pt%&Y5viS%F*9ukr1x0oMLYywAzbH6V? z5RZbTvJv|N)H!3YJRyuo5;`!X$K`HFSRHtvJJtqyW}$fHr~iHT5*Z*I=TUbNgp$H< z?i?Sdo_xNI_eI}%_|9pcZqxe1ABgRml-j>6VrsPr>R-#$(wQ>Z->9VjySFaDZ;IQ* z;JV1n(N`imb98sX0y!}jFlOXYpmHfRsjPSXiM8%;*fFA!8GHOu`GfSr@M-vgaPoOw z1x%d-c?Vdla%@d865CP>>rBVdnuHx-SQ3BVPI0RVZj`4E{6nS{IjudhsjE6l*6X_+ zQgwU?rFP{2WZaHI2?l4=JbhpluZ2TM)b(~lUCj8cRU*Fb$UE`J_n%s;ijUNyd+hr3^?$=361hkZJG*AqiA z1PIoAoM$VqKG5r~KXlG}l5b-e7DMdUzes1hTW@0sOm$kgUx!=JftTXVf zV*@rYEb(7#k~!j2nl?1&uJ$k?F-y^HDRGazkdQ z#m5e|WVPU_FfF+al-0@A;GW| zp-uMBF1ufH1X8Sbgz~<3Hz@AZf8ML;!FMGm6H;cgSAI0p-BBhi;R@DC@xbWCa(dn%tv93r?VFR}~M&Y$pJJ@k{m|lNCd|0!{v@dawnqCj7DGV6|M-QU*M$gt__}+NAMA56q&gbGP;mRiO8{nkk|YE?%_zBe0kwU! z%bcF(b$yXSa#T3}X^IUMIq0>^-~&xDhxHp0&V1v4w^$Jx=0T%lL&fnXpP5PR?rzSJ zP$9Is;mMjX8C?uZTt2ws7hcK1@**ip;qc4PL!}BBDoE~drc5xYfJ?Im zL@e8$AB=hT?aiB{7B6w-R<|t#b$ndPN$=q6TX#2}+yD5{hn0o%zkL@`V3afbW#{6| zsAz3y{C_d_4p5dn&Aw>cp6;HuZQHhOo748R?e1yYwr$(Cr_E`;J^yp=x!-r*J@>t} zYSoIJipXDNWz??7j5M`1wR5HyvavU|rWX>jcPC(G`g@$F(!Y9D{v+w1U8&jxoD2la ztju)Gj08+<40J4<1T4%JmVI9dLk-M=0H`v1{8=D!Cr{Cn^IN%~KA%nTfKOsoWqtZZ~_ECj49%yjGk&Wwz7 ztpCQ6m4oG9diXy&nm8Gm|F4cFR?dH4m{_ID3ve_!PQkzMJ6njy?hJu|frr3DX+XkW znuP>5H7O9)fD0o$T>BtoWV$ugRJ3!h%q?bd)1Y4*)Q%E$R6G#lG)>IC%*CdH<#>wF zzSxLcA?G}fw&AMw$D`$>$Ijn+eHQONr^lcRTJva)T&p5bzT1c+;^sV_T5Je$u-r4_ zmD_~+3K6>+?%0U2P7OKpArhAEMJs*S9qZjjt~CHx(#2G<4`0(I3)R=K~j)9IJN3$ zEL9JsI5e7%U@OWuOsX)se0)+>h9EJi5G(9Sh5ESOSXfWH7q>D6zX2dAw8rvF3LGiW z1)^G?K(PoGxVHQngg))OWoywkt#AAg?6> zMg%2B-4)l{g7t@<0cRN)ZL&ZC6=I)D@z2)B1?|wwDn~4_(gWu0i4E@l4N|& z+JyS1OrdbsEvq{!4~e=LGH-Dl#EarkAfkKJz--BT5TH(kPPnJiXVlsZ zQAP2vin6PQV6Ew6B}UKaz$ZYVtaMspz#F2 zfJB7}fQ+SVfGGv$G`TGX!vnhk)9T zY@3YAvKEdlWRnj`09e%Kn?lK~2$U-@eG2a{`v;^AFX&~&u_Xq_dCQ7Yj3}AlIq)5}F;CV}daDd9T$ zK$S3DjhViOY!QgUP%6_)!OX3FD}(#Y;v`1-#VF30gVUf&0$z9;hkT<>0jwQ0rnm-q z3z3LPvEEGWr92n{(X2`c?wd-KOZ@v6UGN+o*Se>4DJgCtsrBU z7RfLp1tm0{WYZUy%g}C9L{}48;k~*|NmWoBm`;N0{0h5rK5J#-*B_UGhyHDZ1Rs>P86vd1VH9WHS(5>KOaG5aO894N)CUw({y);!zpp zXEL)Tm2hy&A*6tKX8KO*m>GR%C72+OrD#f6ys;$wJI!9459q}30#6`Nen#^DbjRdl z@D=FZtP2ApW-;PI4w`C30F^W&zAYL!Vfg`zg~;iFH$lWQ0aqr`3%Mr7Z1>B-2N{|i zGe0``TaTe(4&|Z*FUN*EDd2w>LSDvCSJM0t; z{?E^K^xNP1=kGdqDjDPsuXV2LCz@e>MC~vk@-hAd4!`|7QQtbO@y0AW_K2)%9dt>a z>r~$bUaV^rMyOTrVfFh@G(`eMpND5Y9JJ!z_O7Y>5UB0K`SAo_c_OVF_lLVGf|!zb zhYD(fD382ea=+m_?+;iukTx?Ge(F%K0Cf)SWBuez>4;czB4FeI)nxRIMpPcZXujp_ zPqq#^z?#7XcKa%@T|?~G_Y!rcdAW;#?0=qVXdM>6^7TNEvelY}81o`sH5`&nC?PIg zA!q}%N78nEMM)?dC&MPOP2D%fYjWeC+JI zoLn3PEo^P~!ZDWIgZrek8O#4MlH=PQm75$yOaHRY#v8kBH3`obsUAqbW0-X9Vq`&4v>-c|tc^37acarnNo)naRb-&9+q^cnp z=IWVDt-K!y=-%srtKIz9U>qUSyRx0nq^~>_r!If!O7ILZWTSS9 z9|qI>=&Yaatmn#guK+VwqMe9>C{5xNOi9yPO1n@YXIZ}w*NS?aM}P&bsNi0?f0)OR za8kp2gs930e7NN75BGPN66L@%wTdzAf$_UUn`+4A`M#||Z(Dl`!Pk7O?NI%h0h-Vv z<TdqtdMr@qbRto zFdcINYj6ZrEL+^1y>`d^)=_e4!V4FB)xDuGJ>!Ju-rbjrZaatmrX5&mYwP=dI09xU zjVS*5f0hK`b}&fGb8LJifGz22;$W8R0d zDH=8zZRI$QkJ4_BR$@kS>(Pun@CZgZryD$oG;Hb*xvx)_qbyQzabg{YQGI{Hi?>p? zjTd|2;Tb#Pa@;a<;HgP7r>i2FdF%1ZaCj-^-pSL-^RO(W>{3Q$KBh#k1jUOdDs^Yy z5X|Rp<UV+xy3UxGZ&ViaE_~jfdT$fl;U4^7So)z!?3ZMD}(% zu6@^9#P^aUVvhmod|;}z5!LO}QH1JZ>=}o0fdqC35-j)Tp@H58T0Dqs+gpa8#*v}G zIBO$IJdUh0xzyj(Cmt5>MwQ`}xq<2xEyCvjqY-Zm>XjBxZ1xQeKMf6^^4mxR`_^XZ zV%huV{(0rV6p(&)-C)nLCOZQoX4*75B4|=XY{mUypvs8$1bnp`r20in3P!GykIvDD zPzk}E;JfvV0}Q?rKoZRVC5hPV_06c*tUCU;i^0LRP#k6a6wML0sqLmV_V{lvmwyPO zQsHr|t|;LgVW?a3*&&Iq97<$1%f7jpohf9(q%^LCmsc2cZJWKUA6vnF`PrI4&hX6; zVJEzWal}?ea%gjZ?xrLSXHQ4ZZ7|hO&R{A}t&t~2R~6rRps!#D6J6OQPu>NGbuCc- zXfPyw3P~Ql&zeqV^Bw5lI*+o|vGgP8+(U~2XFq3~TRq=2sQb}AQ_Ijy^Kl-Z=~58L z{(OSo={!@+PIW04_jGcv%QR~i8tl&om<(n&4Gn|Lo=+}4WF=lR9ghE~|Ix5qV~hTF z?1n+Hz-lta%GkEywUs}^Je6GL6B6uCa9(3^%nPY#Pw7aBhbR5ALXl>!VEV% zEo0a^(U_J?4X?e{9e%2`yhd+wfR$;EU*_<${3E(uvm0U<8@&cXznlAqU(JCvPY0*Y zf_Yzc4tU2c7%p@AzLPU8M7zj$U1^S&_bdx9`&j)MH~rWV;ME75^$6tgv0yg7rYrB_ z*^N7L$SF1{&Lb|#D__!*#)47z^SQUX4T;zaGklp8EvT;#LaR065EgC z=4I!rBNFK~X^TK}k1=B$=u{%V!Gd@1ETw1x0N673Yy1@KZjoNDJVbBeS)Q&$mIqIA ztods_UCemXN38?ue`ny|sXhnia;!=LfQh!SaiAY42^W2Zc@ZJf?6B*TwV2OZ*=M=< zl_zTBME9p2UR$Z5sd+sW_V-D+-VK00J#U>xJdpFhL$Y2cDd4Efe+rgE6H{ZP(59@e z@UUNG|(?l1CMT$y8@Wk$;va-pEcvo8!(nmbn~{0Bb&wPtTfj8qMtTJhXiVH z(Zx!yYZ-*P+WhCu=kjOrMeSqct{&DhOWOwKJ<@E4AAdxWezML)Q}Y@fDst1nk=)sX zKYCD?Mjn)2LP!tw%}3wGVrbO&HKa_tVF;~xmH)NJpI&e_jbPLVy&XQvGciyhzETGU*X7NX5-U5HKGG%%D~zc5<( z>`NZ5WEt6|9IVJ%9Jq2qnGSxe{RsDI$!%$7HfQTH3t$EFdz;>D&g?+3X25TOehqoX z$~|s)X|-K@tcrQWg1K&{H4mScGa~P~Gtq(8d!C*f2aZ`()<0J0 zxUM0}l=bHhb9|Lc=!(uf#&6rBpD6KGFssPew^q_#hyK9$LzcHrTCuKC7TEFpx^%Jr zt;`c8=@ly8DF^!Ou2UoS?2d8o_Vg`|Ie%mWZ+hnJ()^D_=gFR}vN<^`CAWbU*cUn? z@yoreuZP*0)^C~*HTa=12K`tU76A{wC`X8s`eT$0g^B4$7f^*}cb$?eEpMGHx4=e@ zRxLY+rLsngwO)|}jaxiKP#M5X?{tt@gQiqsb|;7ylER6n$nG%6Vc0qH-!072$WmKu zmCOElCvd)#zIN97Kvh{*eWo2x6)l!|3_#+(YyLY~b4>A!zzR1ji=5sirYYu`16gaj zI`}3VgM7zv_t?<*y%#jxEHqqOgz9E&9TzIjbvA}Mj`GeSVr+wXfRNm|@z=%9=j8Y* zhVE$x$bj(W!(~Uj|6%BEZ2lTLZ63JYxD5CP%+~ukE3OGCs&DE;eM{WR+@xHW*r^to zgG>KKD%42F!qcLKza7Gv*@vN;P8Q& zvww*pODh;F|AA0A(Vf6do5+>^Am zI4Mo7R&pXIKgrRRj!V=jTG+=X$CZ~+B`A<5|4|w zLcp}Wf0ofK!=3|)H_R{Jz z%iX9O_6W0*;;6r`{pu0(YfUH(&{Elq`$k30!IArz@Mgx3Wt1hW4;Lr5&TjV+wD7+vbMeGI|+XG}DN13&7ya)m=lPWnds60T&NF=|!~a_Gy1%>RxEG z6NjIE@Nb259k zf5lN_I#h2PmaYWs^&jk_bf#6TT7I)9c}GQrHF{TCahGIwVblxL1LUo}>d#|Uv5#{v z3AF>*&tKlu#@U62f|GLd&`{h?=pJO9mt?F2x4Llp>V|0pDzJJyBDocqsM4~m?iuF! z>px-HNAkPO@eFn?iN3+@|1vGFM{1!PtkTo4U93(IX5!|lG#Rb&+xwchO%H8lC#@wd zU-CRSt_l7H;1G5jX}~y1g#iJ(4nQrxH(}YLOYz0>zr+Z3{wv1Xo}pm4KGeXMI>v;M zj%Ex!tmBaIrgmavXe;&*P2H?PXlO8muOOTc&EVxfnD{|BZZN58hfxCxB2*xjSXaSv z-v3_XqOP;@vX*~s(!Cqs*H4_Vo=jnFgG_N#J2S9duD$#Mc91`z{6Bi67#TSJ)kpL{ zc~DrHnc4nt9uyYV|F%`93J?aB?!UI`w3Eg!f--bMq4f5eFs7#I#tm`cxgW?x^=iKC zgoaY7y2-Pb&0k&&rMB>$or>Zq8I^HmMaSMtm{W^ezI=HW${;=P^Ont?jTQ-yLMjHw zA@E@eakipD{eW8g#y4)+^r{Hs;K@z3mguSSAueUkr^QKFSYYn;15cN*5w4xcqQEjT z9M)GP_GcNQs*w788NY^p<3l`#=z|~CS`8(>i6oTwr);$ zw;Apd5IMm|%UuG7lqms?^CFIcNT#Sc*WXm)^_L`DQ>EFJGDSwjsT9C25}g4RsU$7* zNth;8M6CQ)SLML;nF~&_<5d-{A5ba4e1zDsOWzEkA{O?&F8c9$=# z6=~F<8e8`kCofHS@KiMkr9o?>R?M`4Jh>9li!2YC>Sfx|t}GdOmFK17YlM_VVF;>4 zg@+)~Q(UA~WWtIj3n!JoHnFhtEVk?_YGfALn<}0*W&+rpZ(mQ7%caCen(Wk}ozk0x zvqs003+^qCG>UGmx!ZpV){b^*AUfxHTB-%c=z;U9{@kvgt7_h8=LJPZ-$g#X0sCg& zzn;zJda%j@^HZnc5joR^O1TsYn`cZbpf3w9ks+H4e26KpvX_GC)g7H0s9Z_9xumy> zEkz@@0h$a$t43GA+J-K7P5Hq5)SE4V!EVYZbM5z;<)YbAR2iHDf3Bm(^Pv1dX%-=+S$Qkuvz;AW?i}j6I39fz6g^_3{?gFkVN$maktu8 zsavExLn|W+AYH&`X*j^-&w{?4w&%|P6!tRpI@k=SIVNbnlBBjKD0)PQOIThfOJw$Q zC`q79NK{yWl8!+kc9h2}uz|px&yEe-foF3~p&66Qoj{u)Q0DJnKBAq^E+7m-4cr-fH}(W1c|!*VB7(qgKF zF|AjGdr7w16bPR1&jKo2K$pdZ(fN{NSV`k#c>xWEl!Ym%)X0UY0ii42Q{=WTc?w~u zl2)?#OH&QdK;J8oZY;pfB|%pz!op?Lx;L45X%Vluv)1?8h#1Zen+Zbr zt6}LxML-)hmAqc>(b~8y>E=Q^Yf?Z7SK)G%qSNEM02u(o`T$vGpft;~{2g$ibPC}tqNJU#I2tMKi zf$~2Xy#m#r4MBlwZHto&Qu{cgm@H&OgK({PJOYPpWn!xaHINSrX~D!-!GFuMZRVr+ zR%-FP;5`=sMOqBrRGb_eX*EoOR;}%ulRP}s5a4uDk?`e4`4kmVVj@+7$2B%{+$Aii zKrXF|p=>Mb^TtZ8Kntv*uQBw(vQk+%_At^ZVL^=)e(b^s_i+sDCsM9VMS-{6X2||o zQ>D467EP!bHK3}rTOtINe1R3@?DDXozHT8Ou;JlyDlGio^uF&@&4M9R>DGZI3MUBt zyFvBMM43MgxPd40#1IOAgu!B&U183v6wo&yT}Z_MkC+<&1lEi+T%M`sP=VLoA7fM^+*{t{vnBC>CQc04is# zucFdo_UkjXfoCKzE#P?vzc8`L9bik;YBrfgb8V$cUsp$EpabqHL)V;1B2htgDqL-c zUBx5(6)}Z0{IpOmSa|~m=Swk_SuIx|k&9Dp(VEd@QJKf%#Q&QTMnxH(LD05&b2q_CkvY)N ziv1o^ys2T8$3WcH95XDGRYmHU9&uJFp=AXB_y`GK~l_ zgG|NoWgqv{J_T?}Bg9BhJC+Tp7fevh3q%KblVJ0y$lC_3TF6{k7z4s&E+NJ*?Oq0- zL7K5?pz;oKKKuC~)n@aNXqh7Z%VtowxxADCw z@vso8_%SPr4po{V@wD=sYfOJB*;F>jq!21{qZuKL9GME3IP}3_(V7;NLr1hMt?Yn6 zq(D=3#4g1VC|crFO*vXBhJh3t*3FvCx?(gqYJ$R4qr9^o#YVM$lA8+4k<#{D7_1C6 zIJiv%Efa#*tb?Gnu_0`4R76p(IWAkFh%*xUfRP58qi>N>utm9|W2-qgt73%;qIE+7 zTmg{=s9A0wp@y)qKH5;fiLM1&#?UZQWOVDQB%zQb4qB;&EX!_;oSL(_bA3Ly>nmhv zsbC43f(SfU)laO@2vEVdiGoBf`qh_JWgLfi+B_!zC&iRKx1P7V4~{{e*uS2bqmiD^ z_luOA&(9Toz|WSikDjmBjh>IAl&{abYyPj-6TjD^6+gai?`M4RsV@)jKc6#N_^Q5N zZ+`Eg;uvnx^gFo8c+E(SV8Mp znJ_|UGjRETnjAH5-I0a{I0gi7=1fT7x_yz<`FRhn8lDiRQ41#;Us;+NZ{1FKcU|28 z-T68+&(@{^P7hKLb#G$xk0$iEcgOj-$KdrSIK9;=%p>~1 zDJvmgxUE4@%2gZ{;>C+Nm}q9e*0p;#oLfLCJU?_MYbdsSpP!_t;g3_N?N7t!k0b%p$V=d`Ud{0D+y>;PP^mR|np zD9k6Np)bd1hew@S{;6oJ8z=3%J%jljlsW8RWVE|r4^LAp@#_)V#}AR7`o7FD<7rx? zSQ|ik!m$m`Q@~6jrX#96(MKG7xg_41Er4qa_ZIQX8M*jGP_VFvs_u_8`XNv$&JtgdG)%TC}H-FaroqDBCtTXYgJgnGkkTa6;R(-yhF>O|iQmY-Z_En*KHdVo(#8xT$jBd`Fd=o`U5nk9Q^^LLJH z8s+Eg(<)TSK9(hWF4rh;d){YqKCd#ZZ=xzodX*_YQMShla(q7z^nD%g#2Xq;SY2vL ze8k6isiFk+N~WC?pPQonWb!HwG4+Y0a7bEcnB3fFc^Yb!=MQIY!%<--+JJ=ge!CBqSpXfv?EBCb?n9 zz35NMJ~?kTYSjK5&Rb)GN5u?cP7qIW&_*%yF+wJ zz#OHaj-!@cc(Mg_*~=-*^JdHXP(e&>%eWR2{Fr&*L6Xp;X$Ta=6T^^QCGBTSXQ#|_ zqj+ZFq>)sV=$p}xm3fC}hzO1U?&KK%a|v6_-(<9ogp%x0*Y@bRRm7eZIDBr?sjDXoc%lzs|tFz;48_d=wq?5rF z@Msf43mbMUd&&MNWvXz{APP)8kxAtx+w8k}GOIUOi1*`ks31)VQ_wFSSZI@A9d}~t zY(ThX5MmOkCQLCPuEP@y=Wrm7PU1xXRMD`A48X*l4kC{1bVw3GL zTJeS8;DcA4AYR9ffd{+9u|MS!QyfC&WFL+TQ5N5~bRr{x_wCBS-BCuj_AD8s{u*fU zAEt9{Smnb`OeFM~<+p;#KHUU&nHR_+IIGz?%JC!qf7@z$$>eWov$sIbpgYMACfB2e zC}SS4Nt7}(Vr&_;TEACF=84$qHHZz?!nrzjjU`h_v+ThOY#iNvbs{r~g?3};jn;tdD`WuKS&?YN5&G9nZ?sdBY~ z48~V|m(~_Wlu8;nIceFA7;0{Ja{e{a>&%C!x|X*}3l|!E8uk3iGP6J_bv>Ka=Y$b7 z-Mf40Jsq^qu!kPuJaW=tW|Awo$af2O>EUIZG-lQmMUnRz2eXsV%)lkRVHM|{h(YeBJbbx@A z+i%L*1!H;RG;&Imq7W%L%z5rIt^SIc93giBvNg^y-3Nl4M2mk%5}kN?UA!rk9ET_; ziSXO3G6K&@AOPW3N1t+coYug-y4igQ^eJo&k-q>3@Hr(&-D8nWafhw!Z+$$IoqCjN z0q_OrK5V~>e`-Qr_`kaN#pvL9b7hzP+xaN* z%6RY1`DD9rt8Q5~?Rk`cl8oQIhkfeVtA^A4V;bQ$q{|b5Xt>pScY@=HI^#2yO`ZNZ zVY1cQ?2TglDV`@5GhJK{Wf*Qn+*E={G-XH=RdkJoYDU-hK1xq0#m`42B%fy46N&WZ zxiNmoDqB0IK?6{fLdt{}LqwzpTe9?6^w1Hde972*ja@11ksv>7Cu{%F-Ran!zNn4- z^QsfH(~;lGbLDem40`Ed5Vq^#SZR^_=Mc8!jrD~WI3#tXcD0JY&#{x)!re?bU2LEkV+WJByPn;Nwx%b}3sQ`ENI z&=M)c4llS0c5vK>%IPn{6P2??%MkxVbUqW_=(X(&Ij|9QZQzc*3s~`RW^d5xEq01K zy1&~ZKX9#VeIkl;u5A6rT=lrj16AdI(!X$qG=LX20Ov)3z`8rJKWB5#vv-_Wj0B!t z(RRdKU-GsEK9e^|A2L6=s=NLJaS;3H-hJKJo`?;QTME1Q!~L|weUFX^r$XwBHu$WWfc=-w@9s}zx2ORF z->13PPZT%N!^9l{7InzhpTiOPB$#nZ1$IXM+g+#Ukm6nNJ<-(>1^*~Fdv#|8gf_u; z#Y1Onv#B3#&~aqtiJ_m~!B{0nh@k)VNwkT|-S))}=|jG7Ez(Q^z@|%UnVh;AwQWteey(VN_-kZj1-MsRDP zHfOF0yXyoRb#|j>Qrmv<41UJ?#0wKQd>&%9?=FE6|DOFKhwd4KNBW|{h8oJV96!{e zdS~bdd^(1KqZ+Ox(dk%0N|mW;qLgf1k;PS}MM( zi9*JOZfn51$KM<){piXzy^QMz@;65@EhZNm|xX#s{h(B=e@H^-9^cuczhuF8n_||HK=6qD#Ywyn* zPYg!1Uj0S~UbRqoMbB8bZsC(d$rgs!6UO?)-<$mocUPPHiy$-VX)jV?YuRqcgRS6e zyO6MGb%HzYCB4RlfWhnR#=x_%)km=dG{D;R@~EGU?|i_wb()0dpO zP*lfo%5}_UPxYA>&5wUAAL~c53$vXc5hrl zY2Is6AHPF1@=7XakG#Qa!wJge%MjLkKQXMoMKp3E`L5ow81uU(ytvn=1~MKbApU`8 z+;qfH3Z_7Z5Ah8)pHe04h#){fUGK`?XEK3lVV>!pjL9iGA)pt=uhiLf!fQxk+AWCm z>`xk+7h8Ma9>+N?+=!yRp?h)q{sDVh4pw5C$=?fyR$dEdR5GH{@8BZvcPm;r|Dw4c zB&Rq_I=c3KMWWutjAarp#CmUBEbk^>$hS5?3nGnyduzJh)YG3b4@GIpmM3MclNCln zGfB(ZccW)E-hK)^TC06G7KXRb!f81SN$fcco7u1ti(kIU{RJN$Ln3CIRLm*VsDBcp zt@ZXDw-G`bIOB&@83AQcV?e;t)%NNRGrWv?s=6HIWq4x3ufxMXj_xh;^u=~dp~WlO z97ihL;aURs7&ie1*a2Yp2WYP<#&~AXvQ^j@jENK}+VqOTVA$r3hlrbT;bK=^8F)5! z`fhCe;?EL2hUAW?HIF;4h~{|c)g^^an(}qpUC8A3uGCs1+lXzSd4%R=x4T2V9hM31 zVe%)RH}vG+?ve7{1r4KaUn}z-YOLFRw=@GMD+?w!WR!>^>1OT=mW(q{ip8zDsHU-` z3hPa8iIS5j2I*$l8J3t&QS1z;@X^fSN$(0S1Vy}(qhpcPW?)C~i7U}o*qc;LJ|_eh zM~B(%l2~Veht&}#o8f;k z$$ks3%-?`5TU8yJsBuEn48@-*I*($dOP;b3tr=^T{VYn4de#KZxNX`BC$kX*?HkPX z&y-yh&uAh`E(JDkK77ows#hOqO4X_2izq%Vn1WFD={S(xGM40Gv%^Z@;aIs+1#A-8 z8SCKVgdg)W1Z<`aRbnMM8_9QM)rt@mPA5-!;LICm4t{ge#uMUH2>o~>sFAt(W5Lkj+L;C9>3stEi$>0zY2va{lp-8C;xa& zdh7TXD1J0OEqs}Rz803?)zU9939{9XGqOB2^}dYVgktneXuf98_>#W!E(=l>R>(Vo zLD`%TDD+()ZyUQ*ElKal8(7+P6?2hUt$p`R+c1f-?gz4Zd0F1^n}`uq!bE=61H8EUqewKhm?aG?A?OEl=8{q+LzYRQ^bFjUiZIr1yym*WCJJh8^jcC@&;X zC%VyfLXc_R=v8k{LCtG^RLLp*1Z8rWpa(6ygEdI9j)dP8@=*=-JzesT^aM3p^HT2f zAZxwtucFemW~GP?vlT5tpak8eCp5^3?&K*xhi659NcWkl7L&k2;<%@{&x@G}Ye z(3H#d?rxTqi9>`^^MFVBj3~O0(0qK^Tc1Gd$3%|1+t|98lt|H19G9*oYtm3h#nS7< z{?<}+3E?aL;`$E#Y;Z$Ig?wtj-2%^rS&-{`8I(7>7%71dZa%HtdQHJS1_mC;k!8-pBA ztgBE7;ZM9R<`N*ZAIqNGX06!IVCz(C6apEntqqHq&Rn(pA9RbzQkwd;t0WbasjK*! zKy)qPtD|pI!Y3t!le+ic%5MN2YHsem*C~{2l(aerCpwtLPdM2J$Z?$E=$&8SS1>R z$CSNdRIymCDL#sYTtp0w(&SVsf^|~$5jeb6PiriclHJ;zqo9?nTBDwc#R7_5Ai-re zR>kP37z!0%BXCsrt}%A71xhzO2+P#`D|3#v!}azCY*o&dzC_i8Dr{AX9PNeSHN?i& zGILX9=yG!7do!L%O?TEETAJ6jO4E^Bf+en!<@>n~^YW=up9+@o+eh%`Xo*!Vqf&*+ zPHLVDqKn(cvhdn5@~e=|s=Y082C?Lj4L5qxgjE_+tTH58!@R7enF~!pwQ7W`M0yd` zQm!ny98G*61{yxPmn6_`QPE%$f>2k?O1YD5V-u_Rir}wyJtV|mb*dK+NA@|%1)mQk z9W_t!Rjf5vdOKa8x1R%B8T!87tzI7wwFpHEkNA6s9WelMT=czo|AZEyS5jGsNn zR~6T$xdn=!?VaTC#6ax%unTKtjUqv_ z>GHpDZGz&X8ET5tHNH2@<17zlFDcrvJ!h!r#AJDW^MLSd?ypR^_yZHs6Bx}>uUMR1 z8MPr*ARH%Y=}GFxS9-`5Q{a-a zT5hXn=)P0(>px5}t#)IhVF?{q|L-+)I&;4?5WAbl%MjK2!|}#k@y~Ucq4%zKWN7lx~14L14UM4;5O(B z5ZgHpL98cyGO0LgLD9A_CCXQjeM{Ht?dd%hriH=b@oy(l#Egra8D3>YcG$253k&A# z)1!S`g6Y_!M$IzZ+B(#@3Obz^TkIOpx6s8r4gU*_{~|=lHu_H84o=;Oo$Q>)qgSW? zfd#Yg5bgJWf^yfF%Iq|mW^nRQh3AaA7|+C(LpxqJ~NeQ$|F(I z(Ztoa%=xjJGDU>*N~m_Q-o_$QdJ5sD1}2&);)BuQKDQ)GYWs6kz*iushSjV#h$M~C ziD13qa6uDalhr31-c3LD+Dm(ja=Iui@$EJvW9&5!40kn^fNF+xfkTU3O>(+lmqI<< zH}^ItTXx&(f?1S(CEPkDKayVikt(`3L+~GTq}d>x8%z!saM#kK8R{AF9nCtB)6)F= zfdnt6{aqIi6SHYM?sFeO)pY6^3H(X1K~YApdOdUue8eEkvOW!m+A;IgjLZiYn_60o zbIq;iVUL3?sjR5z>lyRQ1JkM})2e@ypH7K0>#j{vxEU5x1N6x^*F@iwsbI&aG}n-$ zc-5aNhoQI?5skc5wfY}KO64ks<5(Z6`tiS92qyyER(F_3bd%7*{}hey1=NAYk&!i( z`+FTRTt>%Gv2_OhXt=nP9e?E2W*&z>Ib(_%7KLTo4=e8nK7z<+pPt2zp9mPBzeM0KbL6nY$O-#>25n5dz60oDzs6Ue|qh$)@BL{QH@uzdr5!j5_ zNTZICCOnjEq^DC6&>tE{)fu8>VJA z$lt_td)Y1on!y*NILtEg#n^8TZP}DslMH|oZHE&!JVe=|G3lpVF z0AkUt6{EOppn{tu{9vYJ|JL{i$3k3|?;zP5uW=*nT+Jp*!T?YQ3_uLiQL~B3Wg?dH zC%$qXC305$;(Sgtcj6zB&DLMUbl?P8Ee&k_ZW~usy_Zwkf$RfN$(%Un%j>?0K(?&> z5%rm$f!T2~Y)95znD22%*7~oWwTDGjXb1+%hIqG}R4&B;eyy+o!A%?Tg!t)HZkSrihchGb=M z9L1C73F{Er+y`ya(0uTK5)@QV?<4M*44Vnjzyq{v82=C{G;0_RV}O(tRPOH_FyzRv zEgfhl7z8(*jB1-UnGR7o(2{6wzL^SQHnj!?F{=RV3_6uIz1Ljwrgd}-4c41*RVy=E z9|`>ezqtIJCm#afq}mwT)WkEJjEo1dAi3uv$UQ$Q+3z3=HkmStseOT2iI;Dc7Z+P| zRve1KKvQ3!Wg_%fq51YZ0lJ(1tHi$qoo4OavtZBUXqfD~cc(7M2YXyAXn4kgb?}0< zDO;B-h~T$$DnM+M#b@ikg^&T0Hw21dwL03>Fh!;+b%SQpK|A~c_%CsiX-w%_iBMVk z(cYV*4TIK2kBb~^ojo|@Zdis7>;gBnuHGD(r@{S`Xnizne!1#%rfmGj=gZ9k8aOTX zn6>VSjT~OzxBItHMERV0AmjyM`)3XJt2|3j34J`S6ngg<`JmwexS1xCPU$U&|}V-)F(J*y037AN`@XtdC@$EHuS!>$uKrAQD1fyVv8( z)gJycKh|%AKj)tXEUA2~vjrItBh6RxJ>DV94riMrM&L!@Oiua zIf(9jn>y&Z*5mhnb1tbc#^<{-j2^i0^K*ZG8W_01zhaH_JfO!P?EhHU7(sk_J6PEG z>PQiIyU2;f|9YG{IOw6nSm5UWxVgD0Z1Zk^8~JF#$FKSPyghgPj`B;ix zx!(2-E!^nvQqX(*JotF)=;`_RJc(6GYLVZM&FSdq;p<*e`MTTNz{lgivMVs(= z_WpDKmec(!ed5#>PDRH)7pN(4$JPDp>Ii+FxbLaNvwwN}{c^Md_y1w-or7$BmNntV z?%l?2+qUiAZQHhO+qP}nwr$(Czy6(bznL>P=KePkZ{(^sOPNnq#9FKHq|n(lRRJhZ zZxvJ2@dN9A>znL!=P!D{+l%eI+l*@QOR!=rx=X0y%NKTL|z}sJ5A@}J!bhscd zE7WDE3*cb@L|~u>F#)HN8vG(;{^4S5GscB?`Z3#nABYFZxIDjFdFN_1;b1QgR_JvQ zhVfXF=WF8k#3-m6^s)y5p@wNJw64^Rzx!9!o(3<%T5r?hTQ*3*pX>*~nmglSSVyPX zz5+aAid&!)Hnp~^SE9puk#1S7XPU8M``(aIa_XvC`V#v%lW}BK&*x!VoN}RKt|me# zK!HPs^?OGKG~T60lftM#)a%$Cg|fPVJY09i)!Bc}AMb=|K^He@U_#!WIP@fgc5&Vu z`qEsZ((H$6A++58FAeNJ74n-Oa`2;L>p`#nRq9_lU~TM|I~^2Q{`)_#0RLUDg0RaM zj-8qNPlY32hUvXd_W6qo%>V)M8dUT(i-5H*FHR`VCouBwfh|= z*c(@$YFJwUe(fx1PXHlUS~s6r;DD|#w~zxqA8aU>R@ird^F!_+5dg~?OfwJ-wu8PI z@SM(#;TdoPG|Efc5ToqRNS7&|_UH!<4=0>cz>D5n?m58H-!W%~q+sp0A1dtTT8 zIskW|0W1MjfO*jYrT}Pv`_KV+0OmkqIs;n(=0E_*{{qA3MPRD|6v5~H0~i(}6m4=5 zG8Cax6*3fVvH*4zW-@T{ihYrLi;qs_my3@|?iY){Mw7RRzl@TXi9h_QlLdAZs+0D! zsb`WL;`C1{i^9qS)@hdd&jI`__aDN43&?Js8*UK-KPdb)3O^`n<&J2lHjO{9mrkwt z**0EUubHts8sL}z2&u#!N^mX_KYJop#l8^2TrPOGuz)Q5Tw{@&;(#Ynlk6YylX4Op z)ykmv&81fU3uLcRMZ0%VPXP~tN~3Ime+$tLz~@(ghY*1ghtLzdQvfcN1`yUjhYbNt zB6*@)lf7yK>j;Dj-xC7>j~$W<0Fz}lCLrlrL>4v5$QnGq!zkTfxytDa4=RI>xnB~T zzu&gL8|uv}KDATB-k-V2Sqo-dkA|%gU_S*lP16UiWVD|w)xGD*dVd(^0x)|R_5e`i z6p_h%u}M;JqgrEB-d%PZD? zn7Jz&irG&~^Oif~%}$WB;rOSior~miE7FC3UAakKs#Psm?+M0D6GO}bieURGTIK}?L z8imD{FEB_wXeCW_>b(nd)I`FZcumb&)W)x~Fs!QI99-2^FQ~!t8dW2l-PV9WRjYe( zRFn(!3P7zbVCDW$OQ>j7@H_Z`6=$>>%zcUkDhWC*D}dsdP#{85uS zDUOU8CkGG2#w={DqpdCDNZ0Pq7hx_oPvb~9H$Ol@xZ601-NqO~J7@zxuJA6<%iun; z{I(J77mBL|QLbb;uR-+2Hb)S9VBiE;70M`>{OokwBy99^&PCR4@5 z3d2(1Aa$0xK7j|F<9kPG@b;}o*?F-G900`Bu7X*#oDEjo6_@2u~zO^K_R4t zWFRwZg+wSb>%~NieHZvtZqf~LTy4@E_D2OoR5^xEGQm*?=TaGAzn6QhI`5Nwtuk+u zTu3jGAN`{#@4nKcI*kmI4*Md1lU(_ctX1J5BAEgn^j@oqHY)4Rt}w?oL9EgQ}!e8P4G1wDDW~&Ik}_lXi<=+Oe3i-xp2#n%tn=5Bgr0T>G4D&+$_0p z!?4s`6+%5J-XVztjLP_&a*#^gaa?YzE?3xCO`(AjL{eOGTyCLGp_bB+N}Ow4uBUFp zQMdKHuLwKSRCcm1p`Ox_LVS13F0$#c%u<|cT&|-|p_=k%v(w$7Xz&z!T~XUiC223Q z(9MucS`&ozoVW0WyypZ9BbhguV^h*6jAV9>X)c`9O;+^PZdo7{d29>*WHyy_c5ZQ& z+TRIl;SV9=q-L^EJM!A#OjVE*Tf=#7lu7QvRokyMrWtBCC!~h)>>q^`4WN)T7yCTE zTHD*Iq0}(bm*$PbfOIl<`_k&*RF#ucYyEkqXH<{vTB&%J=KV#Uu`*LNP{bk$Dm9=G ziCPtq=A{!0AjB35NXK^W(Wc-{m6!8t`lXcboNTH?0x=OUN5-6=Fc$xMkC`&f1qdvX5EX^G7k)={d(0XW4} zDLZ*)lw5Is($qkbrW4d<1Z1z@n+FGxC|^ zpOd~191`J?7%N2!AVfW7`ss4$4!#3$D`N`aL_OeE%q)TY!i6&4+aZ8Md9Xsv)Q1AX zn=`Vk2>|-BQhC=j3{-QX1{A_gcZ*oWV@}0Qq=0Lu_vW5{k(W}vvxD5rL$jbv!ossZ z$!qE1;w#c0)B*6(e9#NREv`n6qB2zSxli#~+?kvTEIhDu`t4HekaXnZ@v4BZ$exIM z!UzxlqDMpsKF$w*(R0xLU`;`XStx@NIxmtT2a*VoAMZ{Y&?eF&2b9Pgy;aPyFNsSR zV-1w?K&Vp9T0RVom7UE)NMuK@@9p4E=kB(40p}g0IZcywd#$d}+(s5AeSi1dl0jEmq zS=3+1fb93+JnZeY+IMRYgNn1$6A9`kCu?Vqjso=i{k@>4A(<(HC%n#b7KL2;1sLB| z6S^TD5*1&Gdrk%h6?3X*AXxy_yqv1Cb^+~!ju%oB5vC?yBB<@{a}st(#ezT?Qxo$& zCthsO?d{{jTDiUQt2cEhpF)(KQzHBKi6&lre%aTjcUzmYY+!XaRJ)l9UtK=Uc171& z4|CR|+0P!J#&e-IWBh&_d+h@FiS^Q!Re{!}X7e`8^T7ksDzW*0 z-^O8O{LipB|MN}_6BG0Q$w#IcKVG&@3m5e41wkW?5-hTW#ovPhUUw2$LSmAl|LX0Y~qn)(vismq~zji?nRPwdK%&THhUqt+1r)Kc&OBsTdk-yaa@J5C?| z-Vg&xLJWMxKc(!ly?){aE~I=KxZ&gh#CBODATqN#4n*iu2atIRfAI^UMa&`R)TQbV zE98Ac(W`m0WT$#aiL~|ID=gL zK%yAG_zp(Cwii5)9ge9)0wk)Gb%+jWQUoC?p12|I#zBn^e=csmfC!8HB!X@(4u)xa zB;H3`?9kisea_WRK;~`nfNEvjy?A||S8(Je z!T`buI3eV^kAXY!5q?x%17Z3h5ig)#RDPEh7!Wa4-URqG#%9U+q$9i44-qT!d1gm= z=1Ki|=1CeBUHkiSr}|dYw4+`c)A%MbNdT;E>#5jC-TF=LILCDl@ALVI)aBIIqjYN{ zD7*l8e)`>T5_RQDGOG5Qr|@F1Tnt>MH4en}x3*kUs$A(;Fj>y!_Io3NpUvfFxHmHt zys~O23oOhx({cCI0B#lxbTqULPWqb@Nox<0lfY+i)z_Y&FBR>nPUA0@hDR8Y*WV%| zoNfDBCf?kf)7!KT_gCJpj~_}dUv#-VZx=_qTPqkm?ok98@7(-b9j2sB?&nhs^&c^? z*Cau?U+MbSIOSz{^!GqZ-Bh)?Uy|$6t|1cExPQNfmUb^$Af00XN0e*t)UD69%S^Pt zHTl1{F9U3(;hB}xW}hDIx4q0iE7G?AU{MH-$Uh@%==MVbgG!1DjlE^Zx2Dymf+m1~NQk0+Fr*bzY{BMQcYpTPVhZ&0^>ijPl1j;#QF z5zimvh$&0KR)$MI#wyx^qrmAtPBb!M41$r?k!iu`tda1RgIY+#*QlzOk2CTt&SgNb z+s5Y*smp0G?v6o^ZhV*W15!|4-!WyRe{$L(%)qGt9}#7hR+NJL}qOfv?wZ zqc&J?@)_fMZJFf<+b59!>Wmu#DHnucGx%F-C&SaE=-uZ-S0_ryxD6J}57!%fXZVdf z%ju*jIv?vFqxs+ttWj9iu~SaDasSD0@8OS)(LRY$ZLYNVT{{>%MV`kLGWzZTnC+88$)xg_8Nf{#� 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 literal 0 HcmV?d00001 diff --git a/device_config.json b/device_config.json index aff581a..2bf40d0 100644 --- a/device_config.json +++ b/device_config.json @@ -1,65 +1,73 @@ -{ - "cmd": "cfg", - "params": { - "cfg zmd": 1, - "cfg snr": 0, - "cfg osv": 0, - "cfg zsd": 1200, - "cfg zsp": 2400, - "cfg dmd": 2, - "cfg dar": 5, - "cfg msr": 1, - "cfg msv": 1, - "cfg psr": 1, - "cfg psv": 1, - "cfg bdr": 115200, - "cfg cid": 1, - "cfg mcs": 5, - "cfg spd": 1200, - "cfg acc": 12000, - "cfg dec": 12000, - "cfg cra": 0.8, - "cfg crn": 0.4, - "cfg crh": 0.0 - }, - "actions": [ - { - "cmd": "ena" - }, - { - "cmd": "off" - }, - { - "cmd": "mov" - }, - { - "cmd": "pos", - "value": 10000 - }, - { - "cmd": "rmv", - "value": -6400 - }, - { - "cmd": "pps" - }, - { - "cmd": "pps", - "value": 12800 - }, - { - "cmd": "org" - }, - { - "cmd": "stp" - }, - { - "cmd": "zero", - "value": "start" - }, - { - "cmd": "zero", - "value": "stop" - } - ] -} \ No newline at end of file +{"command": "cfg"} +{"command": "ena"} +{"command": "off"} +{"command": "mov"} +{"command": "org"} +{"command": "dev"} +{"command": "sts"} +{"command": "zero_start"} +{"command": "zero_stop"} +{"command": "sav"} + +{"command": "pos", "PA": {"value": 1000}} +{"command": "rmv", "PA": {"value": 500}} +{"command": "pps", "PA": {"value": 1000}} +{"command": "stp", "PA": {"value": 1}} + +{"command": "cfg_bdr", "PA": {"value": 115200}} +{"command": "cfg_mcs", "PA": {"value": 5}} +{"command": "cfg_spd", "PA": {"value": 10000}} +{"command": "cfg_acc", "PA": {"value": 100000}} +{"command": "cfg_dec", "PA": {"value": 100000}} +{"command": "cfg_cra", "PA": {"value": 1.5}} +{"command": "cfg_crn", "PA": {"value": 1.0}} +{"command": "cfg_crh", "PA": {"value": 0.5}} + +{"command": "cfg_zmd", "PA": {"value": 2}} +{"command": "cfg_snr", "PA": {"value": 1}} +{"command": "cfg_osv", "PA": {"value": 0}} +{"command": "cfg_zsd", "PA": {"value": 5000}} +{"command": "cfg_zsp", "PA": {"value": 100}} + +{"command": "cfg_dmd", "PA": {"value": 1}} +{"command": "cfg_dar", "PA": {"value": 30}} + +{"command": "cfg_msr", "PA": {"value": 3}} +{"command": "cfg_msv", "PA": {"value": 0}} +{"command": "cfg_psr", "PA": {"value": 4}} +{"command": "cfg_psv", "PA": {"value": 1}} + +//编码器配置命令 +{"command": "cfg_pae", "PA": {"value": 1}} +{"command": "cfg_emod", "PA": {"value": 2}} +{"command": "cfg_elns", "PA": {"value": 1000}} +{"command": "cfg_estp", "PA": {"value": 200}} +{"command": "cfg_erty", "PA": {"value": 3}} +{"command": "cfg_edir", "PA": {"value": 0}} +{"command": "cfg_ez", "PA": {"value": 5}} +{"command": "cfg_ewr", "PA": {"value": 1}} + +//S3-S6传感器触发事件配置命令 +{"command": "cfg_s3f", "PA": {"value": 5}} +{"command": "cfg_s3r", "PA": {"value": 6}} +{"command": "cfg_s4f", "PA": {"value": 7}} +{"command": "cfg_s4r", "PA": {"value": 8}} +{"command": "cfg_s5f", "PA": {"value": 9}} +{"command": "cfg_s5r", "PA": {"value": 0}} +{"command": "cfg_s6f", "PA": {"value": 1}} +{"command": "cfg_s6r", "PA": {"value": 2}} + +{"command": "cfg_s3", "PA": {"value": 1}} +{"command": "cfg_s4", "PA": {"value": 0}} +{"command": "cfg_s5", "PA": {"value": 1}} +{"command": "cfg_s6", "PA": {"value": 0}} + +//S3-S6端口输出控制命令 +{"command": "s3_on"} +{"command": "s3_off"} +{"command": "s4_on"} +{"command": "s4_off"} +{"command": "s5_on"} +{"command": "s5_off"} +{"command": "s6_on"} +{"command": "s6_off"} diff --git a/src/VSMD_command_handler.cpp b/src/VSMD_command_handler.cpp new file mode 100644 index 0000000..f8486e6 --- /dev/null +++ b/src/VSMD_command_handler.cpp @@ -0,0 +1,2278 @@ +#include "VSMD_command_handler.h" +#include "IRIS_Method.h" +#include +#include "bluetooth_handler.h" + +#define JSON_BUFFER_SIZE 512 + +// 外部串口对象声明 +extern HardwareSerial DebugSerial; + +void sendJsonResponse(const char* command, const char* status, int value) { + StaticJsonDocument responseDoc; + + responseDoc["command"] = command; + responseDoc["ST"] = status; + + // 如果有参数值,添加到 PA 对象中 + if (value != -1) { + JsonObject params = responseDoc.createNestedObject("PA"); + params["value"] = value; + } + + // 可选:添加其他信息 + responseDoc["Other"] = ""; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + DebugSerial.print("JSON Response: "); + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + + // DebugSerial.println(); + // DebugSerial.print("Sent JSON Response: "); + // DebugSerial.println(jsonResponse); +} + +void sendStringResponse(const char* response) { + // 打包并发送字符串响应 + packedLength = IRIS_Protocol_Pack(0x01, strlen(response), (uint8_t*)response, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + + DebugSerial.print("Sent String Response: "); + DebugSerial.println(response); +} + +void processJsonCommand(const char* jsonString) { + StaticJsonDocument doc; + DeserializationError error = deserializeJson(doc, jsonString); + + if (error) { + DebugSerial.print("JSON parsing failed: "); + DebugSerial.println(error.c_str()); + sendJsonResponse("error", "JSON_PARSE_ERROR"); + return; + } + + // 使用 command 字段替代 cmd + const char* command = doc["command"]; + if (command == nullptr) { + sendJsonResponse("error", "NO_COMMAND_FIELD"); + return; + } + + // 获取 PA 参数对象(可选) + JsonObject params = doc["PA"]; + + // 根据command执行相应操作 + if (strcmp(command, "cfg") == 0) { + handle_cfg_cmd(); + } else if (strcmp(command, "ena") == 0) { + handle_ena_cmd(); + } else if (strcmp(command, "off") == 0) { + handle_off_cmd(); + } else if (strcmp(command, "mov") == 0) { + handle_mov_cmd(); + } else if (strcmp(command, "pos") == 0) { + int value = params.containsKey("value") ? params["value"].as() : 0; + handle_pos_cmd(value); + } else if (strcmp(command, "rmv") == 0) { + int value = params.containsKey("value") ? params["value"].as() : 0; + handle_rmv_cmd(value); + } else if (strcmp(command, "pps") == 0) { + if (params.containsKey("value")) { + int value = params["value"].as(); + handle_pps_cmd(value); + } else { + handle_pps_cmd(); + } + } else if (strcmp(command, "org") == 0) { + handle_org_cmd(); + } else if (strcmp(command, "stp") == 0) { + if (params.containsKey("value")) { + int value = params["value"].as(); + handle_stp_cmd(value); + } else { + handle_stp_cmd(); // 无参数,默认为0(减速停止) + } + } else if (strcmp(command, "dev") == 0) { + handle_dev_cmd(); + } else if (strcmp(command, "sts") == 0) { + handle_sts_cmd(); + } else if (strcmp(command, "zero_start") == 0) { + handle_zero_start_cmd(); + } else if (strcmp(command, "zero_stop") == 0) { + handle_zero_stop_cmd(); + } else if (strcmp(command, "cfg_bdr") == 0) { + int baudrate = params["value"].as(); + handle_cfg_bdr_cmd(baudrate); + } else if (strcmp(command, "cfg_mcs") == 0) { + //设置微步细分 + int mcs = params["value"].as(); + handle_cfg_mcs_cmd(mcs); + } else if (strcmp(command, "cfg_spd") == 0) { + //设置运行速度 + int spd = params["value"].as(); + handle_cfg_spd_cmd(spd); + } else if (strcmp(command, "cfg_acc") == 0) { + //设置加速度 + int acc = params["value"].as(); + handle_cfg_accSpeed_cmd(acc); + } else if (strcmp(command, "cfg_dec") == 0) { + //设置减速度 + int dec = params["value"].as(); + handle_cfg_decSpeed_cmd(dec); + } else if (strcmp(command, "cfg_cra") == 0) { + //设置加速时电流 + float cra = params["value"].as(); + handle_cfg_cra_cmd(cra); + } else if (strcmp(command, "cfg_crn") == 0) { + //设置匀速时电流 + float crn = params["value"].as(); + handle_cfg_crn_cmd(crn); + } else if (strcmp(command, "cfg_crh") == 0) { + //设置HOLD电流 + float crh = params["value"].as(); + handle_cfg_crh_cmd(crh); + // ***************************S3-S6传感器触发事件配置(参数范围0-9)**********************/ + } else if (strcmp(command, "cfg_s3f") == 0) { + int s3f = params["value"].as(); + handle_cfg_sensor_cmd("s3f", s3f); + } else if (strcmp(command, "cfg_s3r") == 0) { + int s3r = params["value"].as(); + handle_cfg_sensor_cmd("s3r", s3r); + } else if (strcmp(command, "cfg_s4f") == 0) { + int s4f = params["value"].as(); + handle_cfg_sensor_cmd("s4f", s4f); + } else if (strcmp(command, "cfg_s4r") == 0) { + int s4r = params["value"].as(); + handle_cfg_sensor_cmd("s4r", s4r); + } else if (strcmp(command, "cfg_s5f") == 0) { + int s5f = params["value"].as(); + handle_cfg_sensor_cmd("s5f", s5f); + } else if (strcmp(command, "cfg_s5r") == 0) { + int s5r = params["value"].as(); + handle_cfg_sensor_cmd("s5r", s5r); + } else if (strcmp(command, "cfg_s6f") == 0) { + int s6f = params["value"].as(); + handle_cfg_sensor_cmd("s6f", s6f); + } else if (strcmp(command, "cfg_s6r") == 0) { + int s6r = params["value"].as(); + handle_cfg_sensor_cmd("s6r", s6r); + // ***************************S3-S6传感器工作模式配置(参数范围0-1)**********************/ + } else if (strcmp(command, "cfg_s3") == 0) { + int s3 = params["value"].as(); + handle_cfg_sensor_cmd("s3", s3); + } else if (strcmp(command, "cfg_s4") == 0) { + int s4 = params["value"].as(); + handle_cfg_sensor_cmd("s4", s4); + } else if (strcmp(command, "cfg_s5") == 0) { + int s5 = params["value"].as(); + handle_cfg_sensor_cmd("s5", s5); + } else if (strcmp(command, "cfg_s6") == 0) { + int s6 = params["value"].as(); + handle_cfg_sensor_cmd("s6", s6); + //**************************************************************** */ + } else if (strcmp(command, "cfg_zmd") == 0) { + //设置归零功能 + int zmd = params["value"].as(); + handle_cfg_zmd_cmd(zmd); + } else if (strcmp(command, "cfg_snr") == 0) { + //设置归零用传感器 + int snr = params["value"].as(); + handle_cfg_snr_cmd(snr); + } else if (strcmp(command, "cfg_osv") == 0) { + //设置归零传感器OPEN时电平 + int osv = params["value"].as(); + handle_cfg_osv_cmd(osv); + } else if (strcmp(command, "cfg_zsd") == 0) { + //设置归零速度 + int zsd = params["value"].as(); + handle_cfg_zsd_cmd(zsd); + } else if (strcmp(command, "cfg_zsp") == 0) { + //设置归零后的安全位置 + int zsp = params["value"].as(); + handle_cfg_zsp_cmd(zsp); + } else if (strcmp(command, "cfg_dmd") == 0) { + //设置离线运行模式 + int dmd = params["value"].as(); + handle_cfg_dmd_cmd(dmd); + } else if (strcmp(command, "cfg_dar") == 0) { + //设置无握手启动时间 + int dar = params["value"].as(); + handle_cfg_dar_cmd(dar); + } else if (strcmp(command, "cfg_msr") == 0) { + //设置负极限传感器 + int msr = params["value"].as(); + handle_cfg_msr_cmd(msr); + } else if (strcmp(command, "cfg_msv") == 0) { + //设置负极限触发电平 + int msv = params["value"].as(); + handle_cfg_msv_cmd(msv); + } else if (strcmp(command, "cfg_psr") == 0) { + //设置正极限传感器 + int psr = params["value"].as(); + handle_cfg_psr_cmd(psr); + } else if (strcmp(command, "cfg_psv") == 0) { + //设置正极限触发电平 + int psv = params["value"].as(); + handle_cfg_psv_cmd(psv); + } else if (strcmp(command, "cfg_pae") == 0) { + //设置上电使能 + int pae = params["value"].as(); + handle_cfg_pae_cmd(pae); + } else if (strcmp(command, "cfg_emod") == 0) { + //设置编码器模式 + int emod = params["value"].as(); + handle_cfg_emod_cmd(emod); + } else if (strcmp(command, "cfg_elns") == 0) { + //设置编码器线数 + int elns = params["value"].as(); + handle_cfg_elns_cmd(elns); + } else if (strcmp(command, "cfg_estp") == 0) { + //设置电机每圈整步数 + int estp = params["value"].as(); + handle_cfg_estp_cmd(estp); + } else if (strcmp(command, "cfg_erty") == 0) { + //设置堵转后重试次数 + int erty = params["value"].as(); + handle_cfg_erty_cmd(erty); + } else if (strcmp(command, "cfg_edir") == 0) { + //设置编码器方向 + int edir = params["value"].as(); + handle_cfg_edir_cmd(edir); + } else if (strcmp(command, "cfg_ez") == 0) { + //设置编码器灵敏度 + int ez = params["value"].as(); + handle_cfg_ez_cmd(ez); + } else if (strcmp(command, "cfg_ewr") == 0) { + //设置堵转后动作 + int ewr = params["value"].as(); + handle_cfg_ewr_cmd(ewr); + } else if (strcmp(command, "sav") == 0) { + handle_sav_cmd(); + // ***************************S3-S6端口输出控制**********************/ + } else if (strcmp(command, "s3_on") == 0) { + handle_port_output_cmd("s3", "on"); + } else if (strcmp(command, "s3_off") == 0) { + handle_port_output_cmd("s3", "off"); + } else if (strcmp(command, "s4_on") == 0) { + handle_port_output_cmd("s4", "on"); + } else if (strcmp(command, "s4_off") == 0) { + handle_port_output_cmd("s4", "off"); + } else if (strcmp(command, "s5_on") == 0) { + handle_port_output_cmd("s5", "on"); + } else if (strcmp(command, "s5_off") == 0) { + handle_port_output_cmd("s5", "off"); + } else if (strcmp(command, "s6_on") == 0) { + handle_port_output_cmd("s6", "on"); + } else if (strcmp(command, "s6_off") == 0) { + handle_port_output_cmd("s6", "off"); + //************************************************************* */ + } + else { + sendJsonResponse(command, "UNKNOWN_COMMAND"); + } +} + +void processStringCommand(const char* stringData) { + // 处理字符串命令 + String response = "Echo: " + String(stringData); + sendStringResponse(response.c_str()); +} + +void send_vsmd_cmd(const char* cmd, int value) { + int len = strlen(cmd); + for (int i = 0; i < len; i++) { + Serial.print(cmd[i]); + } + // 如果有参数值,则添加参数 + if (value != -1) { + Serial.print(" "); + Serial.print(value); + } + Serial.println(); + + delay(100); +} + +void printSerialRawData(const uint8_t* buffer, int bytesRead) { + // 打印Serial串口收到的原始数据 + DebugSerial.print("Serial received data (bytes): "); + DebugSerial.println(bytesRead); + DebugSerial.print("Raw data: "); + for (int i = 0; i < bytesRead; i++) { + DebugSerial.printf("%02X ", buffer[i]); + } + DebugSerial.println(); +} + +String readAndParseSerialData() { + String info = ""; + + // 检查Serial串口是否有返回数据 + if (Serial.available() > 0) { + uint8_t serialBuffer[512]; + int bytesRead = Serial.readBytes(serialBuffer, sizeof(serialBuffer)); + + if (bytesRead > 0) { + // 使用 parseInfo 解析串口返回的实际数据 + info = parser.parseInfo(serialBuffer, bytesRead); + } else { + info = "No response data"; + } + } else { + info = "No serial data available"; + } + + return info; +} + +//*********************************命令处理*******************************// + +void handle_cfg_bdr_cmd(int baudrate) { + // 验证参数范围 + if (baudrate < 2400 || baudrate > 921600) { + DebugSerial.print("Invalid baudrate value: "); + DebugSerial.println(baudrate); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg bdr"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = baudrate; + responseDoc["Other"] = "Baudrate must be between 2400 and 921600"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_bdr_cmd: "); + DebugSerial.println(baudrate); + + // 构造命令字符串 "cfg bdr=115200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg bdr=%d\n", baudrate); + send_vsmd_cmd(cmdBuffer); + + String bdrInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg bdr"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = baudrate; + responseDoc["Other"] = bdrInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_mcs_cmd(int value) { + // 双重验证参数范围 + if (value < 0 || value > 8) { + DebugSerial.print("Invalid microstep value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg mcs"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "MCS value must be between 0 and 8"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_mcs_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg mcs=5\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg mcs=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String mcsInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_mcs"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = mcsInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_cmd() { + DebugSerial.println("cfg_cmd"); + send_vsmd_cmd("cfg\n"); + + String configInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = configInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_dev_cmd() { + DebugSerial.println("dev_cmd"); + send_vsmd_cmd("dev\n"); + + String deviceInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "dev"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = deviceInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + + DebugSerial.println(); + DebugSerial.print("Sent JSON Response: "); + DebugSerial.println(jsonResponse); +} + +void handle_sts_cmd() { + DebugSerial.println("sts_cmd"); + send_vsmd_cmd("sts\n"); + + String statusInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "sts"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = statusInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_ena_cmd() { + deviceEnabled = true; + DebugSerial.println("ena_cmd"); + send_vsmd_cmd("ena\n"); + + String enableInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "ena"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = enableInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_off_cmd() { + deviceEnabled = false; + DebugSerial.println("off_cmd"); + send_vsmd_cmd("off\n"); + + String offInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "off"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = offInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_mov_cmd() { + if (!deviceEnabled) { + sendJsonResponse("mov", "DEVICE_DISABLED"); + return; + } + DebugSerial.println("mov_cmd"); + send_vsmd_cmd("mov\n"); + + String movInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "mov"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = movInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_pos_cmd(int value) { + if (!deviceEnabled) { + sendJsonResponse("pos", "DEVICE_DISABLED"); + return; + } + + // 验证位置参数范围:-2147483647~2147483647 + if (value < -2147483647 || value > 2147483647) { + DebugSerial.print("Invalid position value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "pos"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "POS value must be between -2147483647 and 2147483647"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("pos_cmd"); + DebugSerial.println(value); + send_vsmd_cmd("pos", value); + + String posInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "pos"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = posInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_rmv_cmd(int value) { + if (!deviceEnabled) { + sendJsonResponse("rmv", "DEVICE_DISABLED"); + return; + } + + // 验证相对移动参数范围:-2147483647~2147483647 + if (value < -2147483647 || value > 2147483647) { + DebugSerial.print("Invalid relative move value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "rmv"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "RMV value must be between -2147483647 and 2147483647"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.println("rmv_cmd"); + send_vsmd_cmd("rmv", value); + + String rmvInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "rmv"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = rmvInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_pps_cmd(int value) { + if (value == -1) { + // MOVE TO PPS + DebugSerial.println("pps_cmd"); + send_vsmd_cmd("pps"); + + String ppsInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "pps"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = pulsePerSecond; + responseDoc["Other"] = ppsInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + } else { + // 验证PPS参数范围:-2147483647~2147483647 + if (value < -2147483647 || value > 2147483647) { + DebugSerial.print("Invalid PPS value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "pps"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "PPS value must be between -2147483647 and 2147483647"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + // SET PPS + pulsePerSecond = value; + DebugSerial.print("pps set to: "); + DebugSerial.println(value); + send_vsmd_cmd("pps", value); + + String ppsInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "pps"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = ppsInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + } +} + +void handle_stp_cmd(int value) { + // 验证参数范围:0或1 + if (value != 0 && value != 1) { + DebugSerial.print("Invalid stop mode value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "stp"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "Stop mode value must be 0 (decelerate stop) or 1 (immediate stop)"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + if (value == 0) { + // 减速停止(默认行为) + DebugSerial.println("stp_cmd - decelerate stop"); + send_vsmd_cmd("stp\n"); + } else { + // 立刻停止 + DebugSerial.println("stp_cmd - immediate stop"); + send_vsmd_cmd("stp", 1); + } + + String stpInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "stp"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = stpInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_org_cmd() { + if (!deviceEnabled) { + sendJsonResponse("org", "DEVICE_DISABLED"); + return; + } + + DebugSerial.println("org_cmd"); + send_vsmd_cmd("org"); + + String orgInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "org"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = 0; + responseDoc["Other"] = orgInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_zero_start_cmd() { + + DebugSerial.println("Zero started"); + send_vsmd_cmd("zero start"); + + String zeroStartInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "zero_start"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = zeroStartInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_zero_stop_cmd() { + + DebugSerial.println("Zero stopped"); + send_vsmd_cmd("zero stop"); + + String zeroStopInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "zero_stop"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = zeroStopInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_spd_cmd(int value) { + // 验证运行速度范围:-192000~192000Hz + if (value < -192000 || value > 192000) { + DebugSerial.print("Invalid speed value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_spd"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "Speed value must be between -192000 and 192000 Hz"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_spd_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg spd=1200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg spd=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String spdInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_spd"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = spdInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_accSpeed_cmd(int value) { + // 验证加速度范围:0~192000000 + if (value < 0 || value > 192000000) { + DebugSerial.print("Invalid acceleration value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_accSpeed"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "Acceleration value must be between 0 and 192000000"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_accSpeed_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg acc=1200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg acc=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String accSpeedInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_accSpeed"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = accSpeedInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_decSpeed_cmd(int value) { + // 验证减速度范围:0~192000000 + if (value < 0 || value > 192000000) { + DebugSerial.print("Invalid deceleration value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_decSpeed"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "Deceleration value must be between 0 and 192000000"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_decSpeed_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg dec=1200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg dec=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String decSpeedInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_decSpeed"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = decSpeedInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_cra_cmd(float value) { + // 双重验证参数范围 + if (value < 0.0 || value > 2.5) { + DebugSerial.print("Invalid CRA current value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_cra"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "CRA current must be between 0.0 and 2.5"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_cra_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg cra=0.8\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg cra=%.1f\n", value); + send_vsmd_cmd(cmdBuffer); + + String craInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_cra"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = craInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_crn_cmd(float value) { + // 双重验证参数范围 + if (value < 0.0 || value > 2.5) { + DebugSerial.print("Invalid CRN current value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_crn"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "CRN current must be between 0.0 and 2.5"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_crn_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg crn=0.4\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg crn=%.1f\n", value); + send_vsmd_cmd(cmdBuffer); + + String crnInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_crn"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = crnInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_crh_cmd(float value) { + // 双重验证参数范围 + if (value < 0.0 || value > 2.5) { + DebugSerial.print("Invalid CRH current value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_crh"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "CRH current must be between 0.0 and 2.5"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_crh_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg crh=0.0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg crh=%.1f\n", value); + send_vsmd_cmd(cmdBuffer); + + String crhInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_crh"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = crhInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_sensor_cmd(const char* sensorType, int value) { + // 根据传感器类型确定参数范围 + int minValue = 0; + int maxValue = 9; + + // S3-S6工作模式参数范围为0-1 + if (strcmp(sensorType, "s3") == 0 || strcmp(sensorType, "s4") == 0 || + strcmp(sensorType, "s5") == 0 || strcmp(sensorType, "s6") == 0) { + maxValue = 1; + } + + // 验证参数范围 + if (value < minValue || value > maxValue) { + DebugSerial.print("Invalid sensor value for "); + DebugSerial.print(sensorType); + DebugSerial.print(": "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = String("cfg_") + sensorType; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + + String errorMsg = String(sensorType) + " value must be between " + + String(minValue) + " and " + String(maxValue); + responseDoc["Other"] = errorMsg; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_"); + DebugSerial.print(sensorType); + DebugSerial.print("_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg %s=%d\n", sensorType, value); + send_vsmd_cmd(cmdBuffer); + + String sensorInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = String("cfg_") + sensorType; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = sensorInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +/* +void handle_cfg_s1f_cmd(int value) { + // 验证参数范围 + if (value < 0 || value > 9) { + DebugSerial.print("Invalid S1F value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s1f"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "S1F value must be between 0 and 9"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_s1f_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg s1f=3\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg s1f=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String s1fInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s1f"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = s1fInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_s1r_cmd(int value) { + // 验证参数范围 + if (value < 0 || value > 9) { + DebugSerial.print("Invalid S1R value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s1r"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "S1R value must be between 0 and 9"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_s1r_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg s1r=2\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg s1r=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String s1rInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s1r"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = s1rInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_s2f_cmd(int value) { + // 验证参数范围 + if (value < 0 || value > 9) { + DebugSerial.print("Invalid S2F value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s2f"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "S2F value must be between 0 and 9"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_s2f_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg s2f=3\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg s2f=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String s2fInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s2f"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = s2fInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_s2r_cmd(int value) { + // 验证参数范围 + if (value < 0 || value > 9) { + DebugSerial.print("Invalid S2R value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s2r"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "S2R value must be between 0 and 9"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_s2r_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg s2r=2\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg s2r=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String s2rInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_s2r"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = s2rInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} +*/ + +void handle_cfg_zmd_cmd(int value) { + // 验证归零功能参数范围:0~4 + if (value < 0 || value > 4) { + DebugSerial.print("Invalid zero mode value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zmd"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ZMD value must be between 0 and 4"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_zmd_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg zmd=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg zmd=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String zmdInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zmd"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = zmdInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_snr_cmd(int value) { + // 验证归零用传感器参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid sensor value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_snr"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "SNR value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_snr_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg snr=0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg snr=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String snrInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_snr"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = snrInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_osv_cmd(int value) { + // 验证归零传感器OPEN时电平参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid open sensor value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_osv"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "OSV value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_osv_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg osv=0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg osv=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String osvInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_osv"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = osvInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_zsd_cmd(int value) { + // 验证归零速度参数范围:-192000~192000 + if (value < -192000 || value > 192000) { + DebugSerial.print("Invalid zero speed value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zsd"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ZSD value must be between -192000 and 192000"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_zsd_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg zsd=-1200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg zsd=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String zsdInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zsd"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = zsdInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_zsp_cmd(int value) { + // 验证归零后安全位置参数范围:-2147483647~2147483647 + if (value < -2147483647 || value > 2147483647) { + DebugSerial.print("Invalid zero safe position value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zsp"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ZSP value must be between -2147483647 and 2147483647"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_zsp_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg zsp=2400\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg zsp=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String zspInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_zsp"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = zspInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_dmd_cmd(int value) { + // 验证离线运行模式参数范围:0~2 + if (value < 0 || value > 2) { + DebugSerial.print("Invalid demo mode value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_dmd"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "DMD value must be between 0 and 2"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_dmd_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg dmd=2\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg dmd=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String dmdInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_dmd"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = dmdInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_dar_cmd(int value) { + // 验证无握手启动时间参数范围:0~60 + if (value < 0 || value > 60) { + DebugSerial.print("Invalid demo auto run value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_dar"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "DAR value must be between 0 and 60"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_dar_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg dar=5\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg dar=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String darInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_dar"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = darInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_msr_cmd(int value) { + // 验证负极限传感器参数范围:0~6 + if (value < 0 || value > 6) { + DebugSerial.print("Invalid minus sensor value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_msr"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "MSR value must be between 0 and 6"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_msr_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg msr=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg msr=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String msrInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_msr"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = msrInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_msv_cmd(int value) { + // 验证负极限触发电平参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid minus sensor value level: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_msv"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "MSV value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_msv_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg msv=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg msv=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String msvInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_msv"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = msvInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_psr_cmd(int value) { + // 验证正极限传感器参数范围:0~6 + if (value < 0 || value > 6) { + DebugSerial.print("Invalid plus sensor value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_psr"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "PSR value must be between 0 and 6"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_psr_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg psr=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg psr=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String psrInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_psr"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = psrInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_psv_cmd(int value) { + // 验证正极限触发电平参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid plus sensor value level: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_psv"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "PSV value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_psv_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg psv=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg psv=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String psvInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_psv"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = psvInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_pae_cmd(int value) { + // 验证上电使能参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid power auto enable value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_pae"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "PAE value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_pae_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg pae=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg pae=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String paeInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_pae"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = paeInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_emod_cmd(int value) { + // 验证编码器模式参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid encoder mode value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_emod"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "EMOD value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_emod_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg emod=1\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg emod=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String emodInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_emod"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = emodInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_elns_cmd(int value) { + // 验证编码器线数参数范围:10~10000 + if (value < 10 || value > 10000) { + DebugSerial.print("Invalid encoder lines value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_elns"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ELNS value must be between 10 and 10000"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_elns_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg elns=1000\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg elns=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String elnsInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_elns"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = elnsInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_estp_cmd(int value) { + // 验证电机每圈整步数参数范围:10~10000 + if (value < 10 || value > 10000) { + DebugSerial.print("Invalid motor steps per revolution value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_estp"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ESTP value must be between 10 and 10000"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_estp_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg estp=200\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg estp=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String estpInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_estp"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = estpInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_erty_cmd(int value) { + // 验证堵转后重试次数参数范围:0~100 + if (value < 0 || value > 100) { + DebugSerial.print("Invalid encoder retry times value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_erty"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "ERTY value must be between 0 and 100"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_erty_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg erty=0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg erty=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String ertyInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_erty"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = ertyInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_edir_cmd(int value) { + // 验证编码器方向参数范围:0~1 + if (value < 0 || value > 1) { + DebugSerial.print("Invalid encoder direction value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_edir"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "EDIR value must be 0 or 1"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_edir_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg edir=0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg edir=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String edirInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_edir"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = edirInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_ez_cmd(int value) { + // 验证编码器灵敏度参数范围:0~100 + if (value < 0 || value > 100) { + DebugSerial.print("Invalid encoder sensitivity value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_ez"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "EZ value must be between 0 and 100"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_ez_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg ez=4\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg ez=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String ezInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_ez"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = ezInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_cfg_ewr_cmd(int value) { + // 验证堵转后动作参数范围:0~2 + if (value < 0 || value > 2) { + DebugSerial.print("Invalid encoder warning action value: "); + DebugSerial.println(value); + + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_ewr"; + responseDoc["ST"] = "ERROR"; + responseDoc["value"] = value; + responseDoc["Other"] = "EWR value must be between 0 and 2"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print("cfg_ewr_cmd: "); + DebugSerial.println(value); + + // 构造命令字符串 "cfg ewr=0\n" + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "cfg ewr=%d\n", value); + send_vsmd_cmd(cmdBuffer); + + String ewrInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "cfg_ewr"; + responseDoc["ST"] = "OK"; + responseDoc["value"] = value; + responseDoc["Other"] = ewrInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + + +void handle_sav_cmd() { + DebugSerial.println("sav_cmd"); + send_vsmd_cmd("sav\n"); + + String savInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = "sav"; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = savInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} + +void handle_port_output_cmd(const char* portType, const char* action) { + // 验证端口类型 + if (strcmp(portType, "s3") != 0 && strcmp(portType, "s4") != 0 && + strcmp(portType, "s5") != 0 && strcmp(portType, "s6") != 0) { + DebugSerial.print("Invalid port type: "); + DebugSerial.println(portType); + + StaticJsonDocument responseDoc; + responseDoc["command"] = String(portType) + "_" + action; + responseDoc["ST"] = "ERROR"; + responseDoc["Other"] = "Invalid port type, must be s3, s4, s5, or s6"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + // 验证动作类型 + if (strcmp(action, "on") != 0 && strcmp(action, "off") != 0) { + DebugSerial.print("Invalid action: "); + DebugSerial.println(action); + + StaticJsonDocument responseDoc; + responseDoc["command"] = String(portType) + "_" + action; + responseDoc["ST"] = "ERROR"; + responseDoc["Other"] = "Invalid action, must be 'on' or 'off'"; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); + return; + } + + DebugSerial.print(portType); + DebugSerial.print("_"); + DebugSerial.print(action); + DebugSerial.println("_cmd"); + + // 构造命令字符串 + char cmdBuffer[32]; + snprintf(cmdBuffer, sizeof(cmdBuffer), "%s %s\n", portType, action); + send_vsmd_cmd(cmdBuffer); + + String portInfo = readAndParseSerialData(); + + // 创建带有解析数据的JSON响应 + StaticJsonDocument responseDoc; + responseDoc["command"] = String(portType) + "_" + action; + responseDoc["ST"] = "OK"; + responseDoc["Other"] = portInfo; + + char jsonResponse[JSON_BUFFER_SIZE]; + serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); + + // 打包并发送JSON响应 + packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); + DebugSerial.write(sendBuffer, packedLength); +} \ No newline at end of file diff --git a/src/VSMD_command_handler.h b/src/VSMD_command_handler.h new file mode 100644 index 0000000..0c61da7 --- /dev/null +++ b/src/VSMD_command_handler.h @@ -0,0 +1,138 @@ +#ifndef VSMD_COMMAND_HANDLER_H +#define VSMD_COMMAND_HANDLER_H + +#include +#include "vsmd_parser.h" + +// 外部变量声明 +extern bool deviceEnabled; +extern int32_t pulsePerSecond; +extern uint8_t sendBuffer[]; +extern int32_t packedLength; +extern VSMDParser parser; + +// 串口通信函数 +void send_vsmd_cmd(const char* cmd, int value = -1); + // send_vsmd_cmd("dev"); // 不带参数,使用默认值-1 + // send_vsmd_cmd("pos", value); // 带参数 + +// 打印Serial串口收到的原始数据 +void printSerialRawData(const uint8_t* buffer, int bytesRead); +//VSMD串口数据解析 +String readAndParseSerialData(); + +// JSON响应函数 +void sendJsonResponse(const char* command, const char* status, int value = -1); +// 打包并发送字符串响应 +void sendStringResponse(const char* response); + +// JSON命令处理函数 +void processJsonCommand(const char* jsonString); +// 处理字符串命令 +void processStringCommand(const char* stringData); + +//获取参数值 +void handle_cfg_cmd(); +//握手,获取型号和版本号 +void handle_dev_cmd(); +//获取运行状态(速度、位置、状态) +void handle_sts_cmd(); +//电机使能 +void handle_ena_cmd(); +//电机脱机 +void handle_off_cmd(); +//以指定速度连续运转 +void handle_mov_cmd(); +//移动到指定位置 +void handle_pos_cmd(int value); +//相对移动 +void handle_rmv_cmd(int value); +//移动到预设位置,有value时,预设目标位置 +void handle_pps_cmd(int value = -1); +//指定当前位置位原点 +void handle_org_cmd(); +//停止 +void handle_stp_cmd(int value = 0); +//执行归零 +void handle_zero_start_cmd(); +//停止归零 +void handle_zero_stop_cmd(); +//设置波特率 +void handle_cfg_bdr_cmd(int baudrate); +//设置微步细分 +void handle_cfg_mcs_cmd(int value); +//设置速度 +void handle_cfg_spd_cmd(int value); +//设置加速速度 +void handle_cfg_accSpeed_cmd(int value); +//设置减速度 +void handle_cfg_decSpeed_cmd(int value); +//设置加速时电流 +void handle_cfg_cra_cmd(float value); +//设置匀速时电流 +void handle_cfg_crn_cmd(float value); +//设置HOLD电流 +void handle_cfg_crh_cmd(float value); + +// ***************************SENSOR事件、工作模式处理**********************/ +void handle_cfg_sensor_cmd(const char* sensorType, int value); +// ***************************SENSOR端口输出控制处理**********************/ +void handle_port_output_cmd(const char* portType, const char* action); + +// //设置S1下降沿触发事件 +// void handle_cfg_s1f_cmd(int value); +// //设置S1上升沿触发事件 +// void handle_cfg_s1r_cmd(int value); +// //设置S2下降沿触发事件 +// void handle_cfg_s2f_cmd(int value); +// //设置S2上升沿触发事件 +// void handle_cfg_s2r_cmd(int value); + +//设置归零功能 +void handle_cfg_zmd_cmd(int value); +//设置归零用传感器 +void handle_cfg_snr_cmd(int value); +//设置归零传感器OPEN时电平 +void handle_cfg_osv_cmd(int value); +//设置归零速度 +void handle_cfg_zsd_cmd(int value); +//设置归零后的安全位置 +void handle_cfg_zsp_cmd(int value); +//设置离线运行模式 +void handle_cfg_dmd_cmd(int value); +//设置无握手启动时间 +void handle_cfg_dar_cmd(int value); +//设置负极限传感器 +void handle_cfg_msr_cmd(int value); +//设置负极限触发电平 +void handle_cfg_msv_cmd(int value); +//设置正极限传感器 +void handle_cfg_psr_cmd(int value); +//设置正极限触发电平 +void handle_cfg_psv_cmd(int value); +//设置上电使能 +void handle_cfg_pae_cmd(int value); + +//***************************编码器相关配置*********************************/ + +// 编码器模式 +void handle_cfg_emod_cmd(int value); +// 编码器线数 +void handle_cfg_elns_cmd(int value); +// 电机每圈整步数 +void handle_cfg_estp_cmd(int value); +// 堵转后重试次数 +void handle_cfg_erty_cmd(int value); +// 编码器方向 +void handle_cfg_edir_cmd(int value); +// 编码器灵敏度 +void handle_cfg_ez_cmd(int value); +// 堵转后动作 +void handle_cfg_ewr_cmd(int value); +//*********************************************************************/ + + +//保存参数到FLASH +void handle_sav_cmd(); + +#endif \ No newline at end of file diff --git a/src/bluetooth_handler.cpp b/src/bluetooth_handler.cpp new file mode 100644 index 0000000..b9e45a4 --- /dev/null +++ b/src/bluetooth_handler.cpp @@ -0,0 +1,310 @@ +#include "bluetooth_handler.h" +#include "VSMD_command_handler.h" +#include "IRIS_Method.h" + +// 添加缺失的常量定义 +#define BUFFER_SIZE 1024 +#define JSON_BUFFER_SIZE 512 + +// 蓝牙服务和特征值UUID +#define BT_SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" +#define BT_CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" +#define BT_CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" + +// 全局变量 +BLEServer* btServer = nullptr; +BLECharacteristic* btCharacteristicTX = nullptr; +BLECharacteristic* btCharacteristicRX = nullptr; +bool bluetoothConnected = false; +bool bluetoothDataReceived = false; + +// 蓝牙接收缓冲区和数据包重组 +#define BT_BUFFER_SIZE 1024 +#define BT_PACKET_TIMEOUT 1000 // 1秒超时 +uint8_t btReceiveBuffer[BT_BUFFER_SIZE]; +size_t btDataLength = 0; +uint8_t btPacketBuffer[BT_BUFFER_SIZE]; // 数据包重组缓冲区 +size_t btPacketLength = 0; +unsigned long lastPacketTime = 0; +bool isReceivingPacket = false; + +// 外部变量声明 +extern uint8_t receiveBuffer[BUFFER_SIZE]; +extern uint8_t sendBuffer[BUFFER_SIZE]; +extern uint8_t responseBuffer[BUFFER_SIZE]; +extern uint8_t command; +extern int32_t bytesProcessed; +extern int32_t unpackResult; +extern int32_t packedLength; +extern HardwareSerial DebugSerial; + +// 数据包是否完整(检查IRIS协议的头部和长度,支持CRC校验) +bool isPacketComplete(const uint8_t* buffer, size_t length) { + if (length < 7) return false; // 最小包长度:头部(2) + 命令(1) + 长度(2) + CRC(2) + + // 检查包头 0x55 0xAA + if (buffer[0] != 0x55 || buffer[1] != 0xAA) return false; + + // 获取数据长度字段(第3和第4字节) + uint16_t dataLen = (buffer[3] << 8) | buffer[4]; + + // 计算期望的总包长度:头部(2字节) + 命令(1字节) + 长度(2字节) + 数据长度 + CRC(2字节) + size_t expectedLength = 5 + dataLen + 2; + + if (length < expectedLength) { + return false; // 数据包还不完整 + } + + if (length >= expectedLength && + buffer[expectedLength-2] == 0xEE && + buffer[expectedLength-1] == 0xEE) { + return true; // 无校验包,直接返回完整 + } + + // 对于有校验的包,验证CRC + if (length >= expectedLength) { + // 计算数据部分的CRC(从第5字节开始,长度为dataLen) + uint16_t calculatedCRC = IRIS_calcCRC(buffer + 5, dataLen); + + uint16_t packetCRC = (buffer[expectedLength-2] << 8) | buffer[expectedLength-1]; + + if (calculatedCRC == packetCRC) { + return true; + } else { + DebugSerial.print("CRC err: calculated=0x"); + DebugSerial.print(calculatedCRC, HEX); + DebugSerial.print(", packet=0x"); + DebugSerial.println(packetCRC, HEX); + return false; // CRC校验失败 + } + } + + return false; // 默认返回不完整 +} + +// 重置数据包接收状态 +void resetPacketReceiving() { + isReceivingPacket = false; + btPacketLength = 0; + lastPacketTime = 0; +} + +// 处理接收到的数据片段 +void processBluetoothFragment(const uint8_t* data, size_t length) { + unsigned long currentTime = millis(); + + // 检查超时 + if (isReceivingPacket && (currentTime - lastPacketTime > BT_PACKET_TIMEOUT)) { + DebugSerial.println("Bluetooth packet timeout, resetting..."); + resetPacketReceiving(); + } + + // 如果缓冲区空间不足,重置 + if (btPacketLength + length > BT_BUFFER_SIZE) { + DebugSerial.println("Bluetooth packet buffer overflow, resetting..."); + resetPacketReceiving(); + } + + // 将新数据添加到包缓冲区 + memcpy(btPacketBuffer + btPacketLength, data, length); + btPacketLength += length; + lastPacketTime = currentTime; + isReceivingPacket = true; + + DebugSerial.print("Ble rec: "); + DebugSerial.print(length); + DebugSerial.print(" bytes, total: "); + DebugSerial.println(btPacketLength); + + // 检查数据包是否完整 + if (isPacketComplete(btPacketBuffer, btPacketLength)) { + //DebugSerial.println("Complete packet received via Bluetooth"); + + // 复制完整数据包到接收缓冲区 + memcpy(btReceiveBuffer, btPacketBuffer, btPacketLength); + btDataLength = btPacketLength; + bluetoothDataReceived = true; + + // 重置包接收状态 + resetPacketReceiving(); + } +} + +// 服务器回调类 +class BluetoothServerCallbacks : public BLEServerCallbacks { + void onConnect(BLEServer* pServer) { + bluetoothConnected = true; + DebugSerial.println("Bluetooth Client Connected"); + resetPacketReceiving(); // 连接时重置状态 + } + + void onDisconnect(BLEServer* pServer) { + bluetoothConnected = false; + bluetoothDataReceived = false; + DebugSerial.println("Bluetooth Client Disconnected"); + resetPacketReceiving(); // 断开时重置状态 + + // 重新开始广播 + delay(500); + pServer->startAdvertising(); + DebugSerial.println("Bluetooth advertising restarted"); + } +}; + +// 特征值回调类 +class BluetoothCharacteristicCallbacks : public BLECharacteristicCallbacks { + void onWrite(BLECharacteristic* pCharacteristic) { + std::string rxValue = pCharacteristic->getValue(); + + if (rxValue.length() > 0) { + // 处理接收到的数据片段 + processBluetoothFragment((const uint8_t*)rxValue.c_str(), rxValue.length()); + } + } +}; + +void initBluetooth() { + //DebugSerial.println("Initializing Bluetooth..."); + + // 初始化BLE设备 + BLEDevice::init("VSMD_Controller"); + + // 创建BLE服务器 + btServer = BLEDevice::createServer(); + btServer->setCallbacks(new BluetoothServerCallbacks()); + + // 创建BLE服务 + BLEService* btService = btServer->createService(BT_SERVICE_UUID); + + // 创建TX特征值(用于发送数据到客户端) + btCharacteristicTX = btService->createCharacteristic( + BT_CHARACTERISTIC_UUID_TX, + BLECharacteristic::PROPERTY_NOTIFY + ); + btCharacteristicTX->addDescriptor(new BLE2902()); + + // 创建RX特征值(用于接收来自客户端的数据) + btCharacteristicRX = btService->createCharacteristic( + BT_CHARACTERISTIC_UUID_RX, + BLECharacteristic::PROPERTY_WRITE + ); + btCharacteristicRX->setCallbacks(new BluetoothCharacteristicCallbacks()); + + // 启动服务 + btService->start(); + + // 开始广播 + BLEAdvertising* btAdvertising = BLEDevice::getAdvertising(); + btAdvertising->addServiceUUID(BT_SERVICE_UUID); + btAdvertising->setScanResponse(false); + btAdvertising->setMinPreferred(0x0); + BLEDevice::startAdvertising(); + + DebugSerial.println("VSMD_Ble_Controller initialized"); + + // 初始化包接收状态 + resetPacketReceiving(); +} + +void handleBluetoothData() { + if (!bluetoothDataReceived) { + return; + } + + // 复制数据到主接收缓冲区 + memcpy(receiveBuffer, btReceiveBuffer, btDataLength); + + DebugSerial.print("Total: "); + DebugSerial.print(btDataLength); + DebugSerial.println(" bytes"); + + // 处理数据(使用与DebugSerial相同的处理逻辑) + bytesProcessed = IRIS_Cut_Befor_Header(receiveBuffer, btDataLength); + + if (bytesProcessed > 0) { + unpackResult = IRIS_STM32_Protocol_Unpack(receiveBuffer, bytesProcessed, &command, responseBuffer); + + if (unpackResult >= 0) { + // 根据命令类型处理数据 + switch (command) { + case 0x00: { // JSON数据 + char jsonString[JSON_BUFFER_SIZE]; + memcpy(jsonString, responseBuffer, unpackResult); + jsonString[unpackResult] = '\0'; + + DebugSerial.print("Bluetooth JSON: "); + DebugSerial.println(jsonString); + + processJsonCommand(jsonString); + //BLE Notify + sendBluetoothData(sendBuffer, packedLength); + break; + } + + case 0x01: { // 字符串数据 + char stringData[BUFFER_SIZE]; + memcpy(stringData, responseBuffer, unpackResult); + stringData[unpackResult] = '\0'; + + DebugSerial.print("Bluetooth String: "); + DebugSerial.println(stringData); + + processStringCommand(stringData); + break; + } + + default: { // 自定义二进制数据 + DebugSerial.print("Bluetooth Binary Data, Command: 0x"); + DebugSerial.print(command, HEX); + DebugSerial.print(", Length: "); + DebugSerial.println(unpackResult); + + break; + } + } + } else { + DebugSerial.print("Bluetooth unpack failed, error code: "); + DebugSerial.println(unpackResult); + } + } + + // 重置标志 + bluetoothDataReceived = false; +} + +void sendBluetoothData(const uint8_t* data, size_t length) { + if (bluetoothConnected && btCharacteristicTX != nullptr) { + // BLE特征值有最大传输长度限制,通常为20字节 + const size_t maxChunkSize = 20; + size_t offset = 0; + + // DebugSerial.println("Sending "); + // DebugSerial.print(length); + // DebugSerial.println(" bytes via Bluetooth in chunks:"); + + while (offset < length) { + size_t chunkSize = min(maxChunkSize, length - offset); + btCharacteristicTX->setValue((uint8_t*)(data + offset), chunkSize); + btCharacteristicTX->notify(); + + // DebugSerial.print(" Chunk "); + // DebugSerial.print(offset/maxChunkSize + 1); + // DebugSerial.print(": "); + // DebugSerial.print(chunkSize); + // DebugSerial.println(" bytes"); + + offset += chunkSize; + + // 短暂延迟以确保数据传输稳定 + if (offset < length) { + delay(20); // 增加延迟确保接收端有时间处理 + } + } + + //DebugSerial.println("Bluetooth transmission complete"); + } +} + +bool isBluetoothConnected() { + return bluetoothConnected; +} \ No newline at end of file diff --git a/src/bluetooth_handler.h b/src/bluetooth_handler.h new file mode 100644 index 0000000..cd59eea --- /dev/null +++ b/src/bluetooth_handler.h @@ -0,0 +1,27 @@ +#ifndef BLUETOOTH_HANDLER_H +#define BLUETOOTH_HANDLER_H + +#include +#include +#include +#include +#include +#include + +// 蓝牙状态 +extern bool bluetoothConnected; +extern bool bluetoothDataReceived; + +// 蓝牙初始化 +void initBluetooth(); + +// 蓝牙数据处理 +void handleBluetoothData(); + +// 蓝牙发送数据 +void sendBluetoothData(const uint8_t* data, size_t length); + +// 蓝牙连接状态 +bool isBluetoothConnected(); + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index aecc9ea..6bb90c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,19 +1,19 @@ #include #include "IRIS_Method.h" #include "vsmd_parser.h" +#include "VSMD_command_handler.h" +#include "bluetooth_handler.h" // 添加蓝牙模块 VSMDParser parser; #define DEBUG_TX_PIN 17 // TX #define DEBUG_RX_PIN 16 // RX - - -HardwareSerial DebugSerial(1); // 使用UART1 - #define BUFFER_SIZE 1024 #define JSON_BUFFER_SIZE 512 -// 全局变量声明 +HardwareSerial DebugSerial(1); // 使用UART1 + +// 全局变量 uint8_t receiveBuffer[BUFFER_SIZE]; // 接收缓冲区 uint8_t sendBuffer[BUFFER_SIZE]; // 发送缓冲区 uint8_t responseBuffer[BUFFER_SIZE]; // 响应缓冲区 @@ -24,86 +24,54 @@ int32_t packedLength; // 打包后的数据长度 // 设备状态变量 bool deviceEnabled = false; -int32_t currentPosition = 0; -int32_t targetPosition = 0; -int32_t pulsePerSecond = 1200; -bool isMoving = false; -bool isBackZero = false; +int32_t pulsePerSecond; -// 设备配置参数 -struct DeviceConfig { - int zmd = 1; // cfg zmd - int snr = 0; // cfg snr - int osv = 0; // cfg osv - int zsd = 1200; // cfg zsd - int zsp = 2400; // cfg zsp - int dmd = 2; // cfg dmd - int dar = 5; // cfg dar - int msr = 1; // cfg msr - int msv = 1; // cfg msv - int psr = 1; // cfg psr - int psv = 1; // cfg psv - int bdr = 115200; // cfg bdr - int cid = 1; // cfg cid - int mcs = 5; // cfg mcs - int spd = 1200; // cfg spd - int acc = 12000; // cfg acc - int dec = 12000; // cfg dec - float cra = 0.8; // cfg cra - float crn = 0.4; // cfg crn - float crh = 0.0; // cfg crh -} deviceConfig; - - -void processJsonCommand(const char* jsonString); -void processStringCommand(const char* stringData); -void sendJsonResponse(const char* cmd, const char* status, int value = -1); -void sendStringResponse(const char* response); -void handle_cfg_cmd(); -void handle_ena_cmd(); -void handle_off_cmd(); -void handle_mov_cmd(); -void handle_pos_cmd(int value); -void handle_rmv_cmd(int value); -void handle_pps_cmd(int value = -1); -void handle_org_cmd(); -void handle_stp_cmd(); -void handle_zero_cmd(const char* value); -void handle_dev_cmd(); void printDeviceStatus(); +void handleSerialData(); + +void printDeviceStatus() { + DebugSerial.println("\n=== Device Status ==="); + DebugSerial.print("Enabled: "); + DebugSerial.println(deviceEnabled ? "Yes" : "No"); + DebugSerial.print("Bluetooth: "); + DebugSerial.println(isBluetoothConnected() ? "Connected" : "Disconnected"); + DebugSerial.println("==================\n"); +} void setup() { // 调试串口 DebugSerial.begin(115200, SERIAL_8N1, DEBUG_RX_PIN, DEBUG_TX_PIN); + DebugSerial.setTimeout(1); - // 主串口(用于数据通信) + // 电机数据通信串口 Serial.begin(115200); + Serial.setTimeout(100); DebugSerial.println("VSMD INIT"); - DebugSerial.println("Commands:dev, cfg, ena, off, mov, pos, rmv, pps, org, stp, zero"); + DebugSerial.println("CMD: dev, sts, cfg, ena, off, mov, pos, rmv, pps, org, stp, zero, sav"); + DebugSerial.println("cfg CMD: bdr, mcs, spd, acc, dec, cra, crn, crh, s1f, s1r, s2f, s2r, zmd, snr, osv, zsd, zsp, dmd, dar, msr, msv, psr, psv"); + + // 初始化蓝牙 + initBluetooth(); + printDeviceStatus(); } void loop() { + // 处理串口数据 + handleSerialData(); + + // 处理蓝牙数据 + handleBluetoothData(); + + // 短暂延迟 + delay(10); +} + +void handleSerialData() { if (DebugSerial.available() > 0) { int bytesRead = DebugSerial.readBytes(receiveBuffer, sizeof(receiveBuffer)); - // // 添加调试信息 - // DebugSerial.print("Bytes read: "); - // DebugSerial.println(bytesRead); - // DebugSerial.print("Raw data: "); - // for(int i = 0; i < bytesRead; i++) { - // DebugSerial.print(receiveBuffer[i], HEX); - // DebugSerial.print(" "); - // } - // DebugSerial.println(); - - // bytesProcessed = IRIS_Cut_Befor_Header(receiveBuffer, bytesRead); - - // // 添加更多调试信息 - // DebugSerial.print("Bytes after header cut: "); - // DebugSerial.println(bytesProcessed); - bytesProcessed = IRIS_Cut_Befor_Header(receiveBuffer, bytesRead); if (bytesProcessed > 0) { @@ -115,12 +83,11 @@ void loop() { case 0x00: { // JSON数据 char jsonString[JSON_BUFFER_SIZE]; memcpy(jsonString, responseBuffer, unpackResult); - jsonString[unpackResult] = '\0'; // 确保字符串以null结尾 - - DebugSerial.print("Received JSON: "); - DebugSerial.println(jsonString); + jsonString[unpackResult] = '\0'; processJsonCommand(jsonString); + //BLE Notify + sendBluetoothData(sendBuffer, packedLength); break; } @@ -136,7 +103,7 @@ void loop() { break; } - default: { // 自定义二进制数据 (0x02-0xff) + default: { // 自定义二进制数据 DebugSerial.print("Received Binary Data, Command: 0x"); DebugSerial.print(command, HEX); DebugSerial.print(", Length: "); @@ -154,268 +121,4 @@ void loop() { } } } -} - -void processJsonCommand(const char* jsonString) { - StaticJsonDocument doc; - DeserializationError error = deserializeJson(doc, jsonString); - - if (error) { - DebugSerial.print("JSON parsing failed: "); - DebugSerial.println(error.c_str()); - sendJsonResponse("error", "JSON_PARSE_ERROR"); - return; - } - - // 使用 command 字段替代 cmd - const char* command = doc["command"]; - if (command == nullptr) { - sendJsonResponse("error", "NO_COMMAND_FIELD"); - return; - } - - // 获取 PA 参数对象(可选) - JsonObject params = doc["PA"]; - - // 根据command执行相应操作 - if (strcmp(command, "cfg") == 0) { - handle_cfg_cmd(); - } else if (strcmp(command, "ena") == 0) { - handle_ena_cmd(); - } else if (strcmp(command, "off") == 0) { - handle_off_cmd(); - } else if (strcmp(command, "mov") == 0) { - handle_mov_cmd(); - } else if (strcmp(command, "pos") == 0) { - // 修正:正确的类型转换 - int value = params.containsKey("value") ? params["value"].as() : 0; - handle_pos_cmd(value); - } else if (strcmp(command, "rmv") == 0) { - int value = params.containsKey("value") ? params["value"].as() : 0; - handle_rmv_cmd(value); - } else if (strcmp(command, "pps") == 0) { - if (params.containsKey("value")) { - int value = params["value"].as(); - handle_pps_cmd(value); - } else { - handle_pps_cmd(); - } - } else if (strcmp(command, "org") == 0) { - handle_org_cmd(); - } else if (strcmp(command, "stp") == 0) { - handle_stp_cmd(); - } else if (strcmp(command, "zero") == 0) { - // 修正:正确的字符串类型转换 - const char* value = params.containsKey("value") ? params["value"].as() : ""; - handle_zero_cmd(value); - } else if (strcmp(command, "dev") == 0) { - handle_dev_cmd(); - } else { - sendJsonResponse(command, "UNKNOWN_COMMAND"); - } -} - -void processStringCommand(const char* stringData) { - // 处理字符串命令 - String response = "Echo: " + String(stringData); - sendStringResponse(response.c_str()); -} - -void sendJsonResponse(const char* command, const char* status, int value) { - StaticJsonDocument responseDoc; - - // 修改:使用新的JSON格式 - responseDoc["command"] = command; // 使用 command 替代 cmd - responseDoc["ST"] = status; // 使用 ST 替代 status - - // 如果有参数值,添加到 PA 对象中 - if (value != -1) { - JsonObject params = responseDoc.createNestedObject("PA"); - params["value"] = value; - } - - // 可选:添加其他信息 - responseDoc["Other"] = ""; - - char jsonResponse[JSON_BUFFER_SIZE]; - serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); - - // 打包并发送JSON响应 - DebugSerial.print("JSON Response: "); - packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); - DebugSerial.write(sendBuffer, packedLength); - - // DebugSerial.println(); - - // DebugSerial.print("Sent JSON Response: "); - // DebugSerial.println(jsonResponse); -} - -void sendStringResponse(const char* response) { - // 打包并发送字符串响应 - packedLength = IRIS_Protocol_Pack(0x01, strlen(response), (uint8_t*)response, sendBuffer); - DebugSerial.write(sendBuffer, packedLength); - - DebugSerial.print("Sent String Response: "); - DebugSerial.println(response); -} - -void handle_cfg_cmd() { - DebugSerial.println("cfg requested"); - Serial.println("cfg\n"); - // 返回配置相关信息 - sendJsonResponse("cfg", "OK"); -} - -void handle_dev_cmd() { - DebugSerial.println("dev_requested"); - Serial.println("dev\n"); - - // vsmd test data - uint8_t testData[] = { - 0xFF, 0x00, 0x01, 0x56, 0x53, 0x4D, 0x44, 0x31, 0x34, 0x32, 0x2D, 0x30, 0x32, 0x35, 0x54, 0x2D,0x31, 0x2E, 0x31, 0x2E, 0x30, 0x32, 0x30, 0x2E, 0x32, 0x31, 0x31, 0x31, 0x31, 0x35, 0x00, 0x42, 0xFE - }; - - // parseInfo获取解析结果 - String deviceInfo = parser.parseInfo(testData, sizeof(testData)); - - // 创建带有解析数据的JSON响应 - StaticJsonDocument responseDoc; - responseDoc["command"] = "dev"; - responseDoc["ST"] = "OK"; - responseDoc["Other"] = deviceInfo; - - char jsonResponse[JSON_BUFFER_SIZE]; - serializeJson(responseDoc, jsonResponse, sizeof(jsonResponse)); - - // 打包并发送JSON响应 - packedLength = IRIS_Protocol_Pack(0x00, strlen(jsonResponse), (uint8_t*)jsonResponse, sendBuffer); - DebugSerial.write(sendBuffer, packedLength); - - DebugSerial.println(); - - DebugSerial.print("Sent JSON Response: "); - DebugSerial.println(jsonResponse); -} - -void handle_ena_cmd() { - deviceEnabled = true; - DebugSerial.println("Device enabled"); - Serial.print("ena\n"); - sendJsonResponse("ena", "OK"); -} - -void handle_off_cmd() { - deviceEnabled = false; - isMoving = false; - DebugSerial.println("Device disabled"); - Serial.print("off\n"); - sendJsonResponse("off", "OK"); -} - -void handle_mov_cmd() { - if (!deviceEnabled) { - sendJsonResponse("mov", "DEVICE_DISABLED"); - return; - } - - isMoving = true; - DebugSerial.println("Starting movement"); - Serial.print("mov\n"); - sendJsonResponse("mov", "OK"); -} - -void handle_pos_cmd(int value) { - if (!deviceEnabled) { - sendJsonResponse("pos", "DEVICE_DISABLED"); - return; - } - - targetPosition = value; - currentPosition = value; // 模拟立即到达 - DebugSerial.print("Position set to: "); - DebugSerial.println(value); - sendJsonResponse("pos", "OK", value); -} - -void handle_rmv_cmd(int value) { - if (!deviceEnabled) { - sendJsonResponse("rmv", "DEVICE_DISABLED"); - return; - } - - currentPosition += value; - DebugSerial.print("Relative move by: "); - DebugSerial.print(value); - DebugSerial.print(", new position: "); - DebugSerial.println(currentPosition); - sendJsonResponse("rmv", "OK", currentPosition); -} - -void handle_pps_cmd(int value) { - if (value == -1) { - // SET PPS - Serial.print("pps\n"); - sendJsonResponse("pps", "OK", pulsePerSecond); - } else { - // 设置PPS值 - pulsePerSecond = value; - DebugSerial.print("Pulse per second set to: "); - DebugSerial.println(value); - sendJsonResponse("pps", "OK", value); - } -} - -void handle_org_cmd() { - if (!deviceEnabled) { - sendJsonResponse("org", "DEVICE_DISABLED"); - return; - } - - currentPosition = 0; - targetPosition = 0; - DebugSerial.println("Returned to origin"); - Serial.print("org\n"); - sendJsonResponse("org", "OK", 0); -} - -void handle_stp_cmd() { - isMoving = false; - DebugSerial.println("Movement stopped"); - Serial.print("stp\n"); - sendJsonResponse("stp", "OK"); -} - -void handle_zero_cmd(const char* value) { - if (strcmp(value, "start") == 0) { - Serial.print("zero start\n"); - isBackZero = true; - DebugSerial.println("Zero started"); - sendJsonResponse("zero", "ZERO_STARTED"); - } else if (strcmp(value, "stop") == 0) { - Serial.print("zero stop\n"); - isBackZero = false; - currentPosition = 0; - DebugSerial.println("Zero completed"); - sendJsonResponse("zero", "ZERO_COMPLETED"); - } else { - sendJsonResponse("zero", "INVALID_VALUE"); - } -} - -void printDeviceStatus() { - DebugSerial.println("\n=== Device Status ==="); - DebugSerial.print("Enabled: "); - DebugSerial.println(deviceEnabled ? "Yes" : "No"); - DebugSerial.print("Current Position: "); - DebugSerial.println(currentPosition); - DebugSerial.print("Target Position: "); - DebugSerial.println(targetPosition); - DebugSerial.print("Pulse Per Second: "); - DebugSerial.println(pulsePerSecond); - DebugSerial.print("Moving: "); - DebugSerial.println(isMoving ? "Yes" : "No"); - DebugSerial.print("Zero Backing: "); - DebugSerial.println(isBackZero ? "Yes" : "No"); - DebugSerial.println("==================\n"); } \ No newline at end of file diff --git a/src/vsmd_parser.cpp b/src/vsmd_parser.cpp index 8edf366..346afed 100644 --- a/src/vsmd_parser.cpp +++ b/src/vsmd_parser.cpp @@ -185,7 +185,8 @@ String VSMDParser::parseInfo(uint8_t* data, int size) { result += (char)data[i]; } } else { - result = "数据长度不足"; + result = "Not enough data"; + } break; }