From 8272ad71859412ad8f9eb9b7689363e7c2f5a917 Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:55:15 -0400 Subject: [PATCH 01/15] Delete doc directory --- doc/Sunray_fsm.png | Bin 564090 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/Sunray_fsm.png diff --git a/doc/Sunray_fsm.png b/doc/Sunray_fsm.png deleted file mode 100644 index 7c46951761105f59d5cf7711c080d6b894b409b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564090 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 u1 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 => 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⁣c<`~ zCOK8F^j*Zw^Xl1e22X-jQm^n=lwERTHobe2B~?TA=5Q#~T9zx8380&!D_Ult({px+Vgz6!KW`F<3g-i~L zy_`$T?RrnWEs63I;5_UM9=WA65g%p?&x;%|aMk9nC52;o`l zHGkhy=B#LWyR|qW*nBG$%f%Vb9&etU4fZQ~F@h7zwEN&<%cV3VyKh&kh(#_w@zk+F zN$1Qypqns`|E`o_=Ib@Ua-*g4-*duBTdA+hKDixfGB}^KC7q2U)n3)mKoEW&*~ILp z3(~JfZDe7jfBThZ$fPPk61mp#kQPdNqU~$aSB`!be|=n2hRYsJJ2vh0M9${-OR?`) zr#}`#Fd~rysvC}=)HU4KyX6S1&0BTg{Xu->E4QGc00T5pp~9Mc!Ex~>w9ie@uJU)k z=^_UO>eh>hBOAL@e@p^tIL4Skj&?C%<`rQp===Y$OjnbN8m6T8uA2A>pCzACkCl>= z1$jP<_hf)(ynVbVcANNQ^y}R3byK4O&MfB_9TIRJx_U%^IC14|l%Y|MZE5)_4Agu; zTvZ99jWH8CinoG1wCSymCMdKG(7iWm=#<-X>A1^<+4IO(!$_yLPV$=dy;re{Z5G-o8gcvg z2S@dnWgl#I+Q6aDVGV)QmvnT8t_#JQIPCtyp== zQg!s@r!k7PLfNe=r1!UV`5R!qt;&2Y2%0Qa2l&lTOr(0c(r)H^;lo&UTV2ms(HlOcM9WqO9*m=CA1|It-ED6%Z@ z8Q{Bm7TYL!n#H=5x3njEx?w2bxQzZN1WDtU_SNx#Tl5-@o zzp*>&l6$AfJrZX>uv2ZP*%C_G=~=o+w9FsMJ=aCOx%V_{yL~mVbkqm0wAINs?~tm zR)3JK7Oj`2km=7#TG^V|-3#DSY={iEQ~K>?O)4c4+wlJ(Z|35BU^>*=25caokLcXh4q5 zKUe2N7iy%mhs;TaZk-)?y1+1KM8P2E@~0>)lJT71XnOxv_SJ|Iu9QgDGPsh&H8|kJ z{G+z)`NR29Z7u8(8N!YFC-E&W9{Tgl7}o^=Z2^jvj|Ez-JWSu;=&P@H~BAI4XO=6}pD|DVhNaT`Zo{;V!M5C@&U}Al`38QKO+Yj z>gJwSpmYnRMfNq=U0YDweCtxXyqU${s`Wj9|2-LrExA}^IMP8JxfM;V8wlp``=uHR z`^6#4{kT3zPp)9i?{T%*AA6im`RShVC`dhd;8vCgB<3FPnIu>}rP;iI&dLj(B=@tS zL)WeG!!vAKu7$UDE%Pln|M)&cncnoA=Jn$AIn!3fo|)tZSwS?S@8m&eJCo8J({7!N zqD0%>T8ht_SkJdvnl7#_QN=gkKIIE&q!`A!sFz7>n?(Q?Z`S#5sxLvY1Gsb5gG$Rc zLqG6N4i9!Os(k3U=;?1;oexi6iKF@-9dc!jAk$?okX=(U8xYbT&60C>7Ij^VRq_tusMz8lYvJ?oLuL6LjL|f@bvLFeB6^6j@v=2&b`bEt#RaxKz58@#?xTzq_8X) zc;kAnHd8+m#*7j-ZJgj1{3ok$<*n_^zF^psTWN&G(0Gz4NxEA6JKk7lBT&5gIT9S4LveXt2q# z0rbbiY9+tgYwDZz)vSpz;!fwB^jmUmtcCsSbHeQw9$8Z@G9_Hi-m;h6m;L;0B9Ohi`ads|jt@N=+a&hne(mx_`p6H`Au-;!BK#tU(k; zF)uO8LxNn}lo^eL0%CRH6DZNbz|}rvZ$seDkd@xN?~gNHc5WQw5XOwJLr4IKdWU1g z?Y&s3_MDLCP`Bv^#PxU7^j&O16jgP3G#~o=>{vxT?BJ$dAX1qG-i|5F-<-EF;*q4WIaa8z6X5;2XHFj3_fj)$A}zQoP60LNEYF7zZFRM-&RXau8{_^ve(^siuhgD zUsYJN#-;aowG19UdljMGEYq*w9Qzfkd3)Sh%EGfMUdh44D7Sz2*q&by>7baCGmQ>j zgZeqCRmCdB-#6pD`53lndjNi;$f`is)5}1Ux$YNzVfRDdla^gSCv#6{%-f!XFFGei z`7ymlzD-|EnNOTM)fo|W<|#Vu&uP|G;^kd_ zvasw!bV% z*KxK_8BI*mTmvFa_az~U2Mvttwy)l=G>tXRd^H;TjCorB;3iG_5sD(_dUKy;C zc=<_d1pUVH*@xZ8e2PJ!KF2<9ei1O;i~`Rx{4Q_rTCFGTLr>S6drj5!G!ZWdz4$}@ zko6Oc9mzV`ttgc)P$}=tRKm9~l6xtS*K05d~$&&6cRt&BCkIU(g`Z0hmbV)n`0T$2Uz5yEKoIcuwIz#|@r0 zO@DZ_2a11R?aj2Sd&{dC_g5A3wPXE5?`n^+<-Xqj%_8nIa~_9ZsNULWif2YV9S-&Zlf~=vjx#lZ!?*jqRKiBcboY_J*QyY*Grp`f9!27@F{2}#^W-Q@ zba?u&q+K!AepdM zrPH}ahRpwnLfL8A-@$n)ZYc20Kc6eAR{ykg`i>e%p#re*I@I^wu1l1!D$3!nF0xh5rg1Q&GbiaZ5M{O3KDmaJYyyOjD(|? zO0Tqd(Eg9NG}1J^ zh9=i`?D;)NR9Bc`2tX^X3;8IFcF)@ylFLq;kg*m$DbDr#ora*9urYBc&d{URKrb7X zBjhB}(TcpY{+-$)y*}|#tF7!C{1ZAH(d$fwX9D(8ovW>^mtl794{22L^ni4ptDABZ zoNve+?(#ejFc|PS9IsNp2Ab5+7DvDo;GHzTeEHLlWBO;0lwcWlHkqHmK>Og60ov>4u7* z&;;i8+k(k{pHc(2q#dwG+lGDO_9?cU|7Z^yY~^XqcxpT}B(jc)K#QkKKlJI3q3@^3 zvJ$g)h&BHk4o!XDCq%+hBNtPbQkZ-GfJ)Y_A&489h>C3R#2Y=t4$OG=H;|88Y!tzy z4vb}Y*BnxxyBZ}-anf_pS@i3(heBuO4@_|g0r7EnZ}$1;i{DMXxw$pO@(Rse0Ms~b zBlNbVNJvPuOO>NUt5h(vN+pXe?=DU1sr*Z%2(V)fCl#7Km-N)ho-8RX+L0e6ay=Ut z>N~sb{=_U!{7O!bH23(({Qx__v+B7t@N7IWibN7DQvAork-Txpl+Mlbjw%XJUx{FK zNKdR?_elBFw-@==QsvvJYVu|-73_&xyrDgrf~OiFF(uO}8md^I~I1P}XjjxvQzQrX|7k1u_BqRSYL)W_jL9CeXC65-c6wf8~*z0B@bQ5JAKw z`b|T=;^$&yQ1k)9%!DKQC&O-gQ zEptAE0Kg1&Ct8vC{R4XertI@Qx1gpwlqfTJbtXmdJKw;&Rd`F9uKiovuPGB{K~T>O zeti`9(P62lC~LKx2)!U%Bj-yKf>M#3WVvLSBR}tJ(D-r+xmrmOvJjbGmqI0jgSoCT ziqT9NoXieqG0)|PmJ(oMPMg2Azpek6 z@Ia|DI@d22VsX$OhnB}QSlRQDtxO?9c?;jA>{V*GGO~|bA;xgPZA4Olh&oOf?u6k1 z)tTEpr>X-t3aJPg&WVrlSmEa6CwsJ1rGP7YMV4IjHIVC*>p=Sho-UDG^2Tu?Cf_7d zL2N?#wTz1_{7$<1=QW#me_)zsT(HR5Z?1m6q+i(4gR3Vz(~x?6uBI~>+z36b^=@pQbm-Azct-Sp1iVn)5%UTy+)jn*yw ztehL1b^c`ibpF@@=!6>U{6XuhdtK(tdMbO;z0T%ic&~6&JE+iX&jWsOf&8=gd^lNa zK&w9RQP@ti&$E9LlzXoCZKC0GBhxLqTh5+~V|*h6H#!Uzy!iT3LNLtrPdbUPT% z!rmqpdsNJOW@SCWlb=r=cs~tMQ=|ZX*RqEm?rGCrRpAKkn#*cg0#9HSZ3rj|B51*(9Wl^H|j+{G7thkB^H<+kXMA=UOP~?t1X~%jfQpSn|c$n_xqij$MDP} ziV9;E+=)nSPN>UD`$Gy@$Gd&YfA{2gBAv|buR#M^EueHsIRx3XknQCJYdmheZGKfz zhxi=ZZ(l6l&G_eCdw+1Si7Bi+wcG11xFJ5Ih%XKxlBx&0cfhI$?zzpw7g!E`*XX-a zu#mTTveA^#{i{z_kAg^34SaDOjz~n`3^1)dW|TWbytWbGr!a#mIq0GRNKOCtMX*`$k`{IhXQ-Cy+R>a7;eizIcQJuDo7X0!7VEGhOn$Wuu=#^#2tWQ-$>Hz zhvl|`!-sdYpR#6D>5sPGi512218>70pfZe{x`Wj7K=6gw3^=9O&;CqodtHSO;mEuf zNK{AP07{HhUgOr3ui3a?%PCSPH^sK_l(2`}bB}c+V2o){4CzwPe9%0K^`h`6Cht#G zSUixV#jW-6_(8m>)H9e_d<1O`@fDY)MD`c04b5Bc=B@MzB*e6GLW zZ?i#u_bX#hAz*u~E6UkO@e-rm+1wJ$Z66O%izSHT!+S}0`u(yI7}K6iyaez7C_Rc@2_+n)A1-rm1vpMpcmX&pV|Jc7e2Gl&!c#&OMDTn2}^=r)cz3~cZLo$Hu zsPy-=n(p_ILfJ@K6v{-`j&6!zPorQdLU(K2ADyuxKEKSB5_@xR-jSzyTvf<4Lo$#k zA(5o)ts2##Pz9YoeEW&vR%<($2|_$>uK*Fa(+(;q32@o-7avr3OZIKKQ|Wb z8ro~9{sI>LIsVX~Z$T<}o6P2}%FKs?K4Y8_-0KeGlV!$}vw=^R4h{Dv1EEe#EQQ53 zm{#UG73^BVNEFBNe0UZ^=G8)nLl*Ao=ay7r3pK~m6VG$4CE10Ci3l#TucipK7cvvx z#m|4e+SAokVWtX(MXx_R3DZayx-h)Oy+iHc8C2&n<{1gyWOFFArHSvGZpDlXix2xw zIxH;DPJU6a3@DQ?O%t>5eMEJX&1uVU21gi&jhJ9{8dlkTZY~o#v)qxksenE;@g8Nvr>0AS2OL$#HYFXyAD1X|3TDV_Lz#}LuIe(nnZQ^4oQ{u=bf zvxqqlq>~p)O(nphSWhhW9L{;4o#_K1<(L^@0xbDB-(-~Yrse7ksrCbQFKPi*ywh)* zv^~)8#k+lo!M)x5-%j$DqeT5q`2(<*gRpFt{lZgIT zlXKB_Bz0S*Q0FKyll9Kj^(=z z^od@K?|8Hc;^oHK<@4t>`BxbFgdKG#Aox?5*X84QLmAuB%g-}37>1uHe=gt_EcfS) z^x5SDYVreA#%%xSZMRJS%Q!}beMpeK#h+=viuy04==388zLkWXYKVuvV1X+xGotg^ z&j9kmUIkfblTiCDJ0`NChhELRmEV5PQsKR?Lh;+&(I`Chw`cMi7WOVO0|BiKHMeq3@3A#RS3m9j+{o~ z;eEyRfZ}JA(K@s_4?>e;Jq|3%UT_6`06+bHhEo?T6;<7N$qEhcYDuNidUg|m9&`sw zVgP`_3scE^;<20)_uQvxi{}esf8SPcp%RiJuBl7%rThT`px46}>lyS?;e=Tb4xH|e zU*bYMtXZ-@5`+c*Fo(Jcfu|G(LE*cZyZFd?_<9hl=qg@{Nw>Fv^>!8ZFlaeK(uYQY zLaB~Y=?ZUs;X3c~9=kPL(H*wF4I(v>EEMbhtybEnPL?s(i47itzmAwW$?peuj`dIa zzF$iSSKPPPQCAnk)L&3L6?9rgg?>G}a-rFCJjR`7J-ha|e&x^b4Y*{VoEGTO*{-MeC1sJAc&6o6 zQcO?v{mi20JLI-xj3Wzu0PXd#jj zwJPs)Czv2%L(|*D)C;d80fkC1^_n*Gk11p72nW!7xyyTe4j2B}F0%itTpoBs+0EXy z%6~nSRuyqarYSVPW*e$K;zZytcZ2&n1fQYzF$gA#tHk}TOPu*wzL&>2&#+FYoi`&? zeGaS-@#;8bYa%q(e|HM0keHhH@7M&tW4LJ-^JjazM$Pkv;Y^xsxl!T0uF8PlD5^g3 zm@eW8rox(iyz-cjfz&~-l8o})BpE2!-BbGMzKsX*NVhadC`fY&R`P?@2|2AogIJF~ zV(Fv3-oBqFGn%*}E~ru~w0hxx<%zlERkQoyDVj%u{RIhf$|ph-3Kq&`)Sr6^M!G3R z!V9qsysQU5JS~5&&uP`%{yuH?s;?TS^|ozf#IIMMJipXCH(o6Bw7Bh|uP9QG?fCPk zMR4F`@tYqJCH??W6QGKCFK@wk?T_RfK)%%7@39(>4nyGzpJTydD`x?Ul z6QfqYeU+uXrC)C!$CF=ozgZ$W{_)w(c3AFs_-ZR}l)=742fi`1hMwJ`>M+btwL7oB z2v9uu!ZJB92)6f?AoE!NQYRU|!*5Wj95zUk0<4QW6`GjHWw*T5^$`XXsZG7_tCn(p4R)iCZC zlHo@mx_Lg6e(a`k4Ri($+gX~*9{uwX-)(jSJP~^c24b;kX-#e0bw;}+=_lbih(uQeze zD*5}8Da_?EBSg-bxRNSpKIY>7M&tqu^wKsL9NJoo_DqIkc55Y+ zFc9yU><(1iodq)U&E8kZ+H+(myDrmPgGiixoJ8n6aV{h--t8yATAU8+-l2yezGZV} zvYYtcW<+6@)NjVBchnLE?yQ&ozLCUPW zV?)5`;2v&WhJD4-*lq;}Vr>bbMt{pQZ?sdsy6g)Q4|fti^4RFl^%wtFidSMhD+GK@ zuhh015bX12^oqaez@5@(-2UWSeLzrBEvd@|X-E_4cfVRs7IORRygz}$rInd3r&*Dv zqAso(ET+sA+FH>G4lV7srvhQS8Wl))Ja{`m+zMbLeCGVmfT7}^XS;LqJB?ocdd?_;Jx zQB0p@f%v6B^TaMcywCKv(h{JH_{^qGat!;zA zv_wMR#Cr+v({$S(M$k<|{dajUCx0F;&n2LL$koF*EQVKG$8Zq)z4UJ3m?0W9*dGU$ z9SJIn1Wc4KXlKWwkK{`k-zQ>Ke#z*%In8){zApk9^F*JFeu4@P9cj7!I9for_4~q9 z_I=8XhS&W(!sbdVHkhzEn}0a=;0qO3SzKv;Rz>G)!Tb2Tw8ZrXA7QA@%h{Fx$?(1F z=BEv$UPL!%i-K?#tbD_PUWp|eIduDNJdfh<12vz++URdpQ{K+iJU-PV5`$>^eGyi? zPki(5>#zH$%6%*^ldMq0`w(3GE!K>e}x%UCJN!l7oA|YkhV$bC{Q$iewlRWBC40EQa?@2eR@YhfKWqGE(bO)ax&f)zq zPW38j5Fl^QzuNGQS2W)ecD_IE;wOSVf1gg{}D z;`;J#Lqzl;11fVujj*S(U`aIZv4_`4WIZOS1j$>7xHF5k+z>HjG{U^ed zZdQIqbB6i})j6NT_PZDKFS%8IQ3 z8%LcFB?x*?lVU4V+STsnxov#rwElVj8%YG{lXT;f{r{6VnyHjX=;1MZ%@d6E}zq}G{GknUM_8hi?lw}6x{sTc5 zz%D~m`eZ|;t2sDiJ%?RGpVW(>%w}jj;Dn^J{GK&EpD(L?JOKRxXuW4dh!T_3F}E%p zc}*0439MXi0)y_-+e7$%ZGeRgo?-K^pq(8~roOrgT>d>&#FY=z7rmK{0EHOr8IB@c z1o@H38aMe7w6E7--rNlS^K-@7<)3ai54~CniSZfA;1d)_^gUw+vZAS*{s}*qn>J!9TCk;_L;^E>7f5Ec-YZXR5#D!`)DM^DuvcVhSsDGq9)bI9 zx?5NJb1NQ~dj?Z^Xtu8h(zM2I7SQ= zy@XySs>nq>F+IkO+bL*%rCW$p*&h6W0f(;meFgR5I;p*nl*yHWDTyGkaNd#hs5##l zUd5eOZX=+cK)^#W0>M-fhKtVG*XCwdjo2FO)xB^a`OuPaz2W(R$lK%2+b*rq{N5AH_AURM0K^oFtaK3i;PN$f*Vl zgPvHXDW!DpSzP%lQ6c{Qptcz6k-x$^0fjn`Qzf-0gy8Yj{5SA0bVH2DRF&D zABNla+ov%oz5XL^4`=uF^kj4T@|)K*mF)?pc51$vna?la>L+t&$CY3#uw0?aFaGlT zqQF1=*72s-9DSVbCluef?`#VDgoS?*me36iCXld)qT3EnRV5m2cKW;b?Fh9Q{PuFV z2kR$~tTSa?GMzoO%N}MxZ+H*@+0H&tOx(2H;20E^&|N8(FeoM{%735);zp1c4qjD6 z)G<_0GFraNHI+jbrY8P);j-UKRCS_0tK)j~%Ddkf1MqRo!t^YYjZtWxc5jr5?6Xi@qwovG)l++hEnSdE zJ_vMTnOVf}6?E++v?M;h+7!`7+i^^+k&igf2E5pYm$G52vEQVe{)B9}FA6UezNG8( zU8w=HpXwA|S4{b`=d+BZ2c9TUkD#uNd-fKLip@51xjuX@&Zi;{F(`?b2^?1ZVnnGe?cN5XFQHRI;%~>TlXihkR#i{ z=`}6=TLvspaaeOeyUiXR2m@FWIb^;0aE}!@l5dga>F0ml^BfW*R%?oBIZ6N957j>_ z?zDB&9$>yony)ZWg@3pC0%WEcJBasZ4?#~F!G1!Py%|dI?0eFH+~EOtMf~<|Yu~D( zhUVp*!mv??(h4+dY( zv%s$Uyd@@Md9Bk78`giNw0t0U@?!u~?N_jNwxr-IXkK1`1fZ<_qR8ma)Xc@&kWO$B*bXZ)^&NSBGe=5V4#(IPADDa~pibjhBRQfR&suL!iDDF>>-K11RAtx1C%s8Sf z?Zu;gh~A}ohBlslnc{~nFCu#YXaD}X9}0)Nf#1r`Usijo9K;ZSHh48IMMQCVP9XC8 z&Wr?fCEll2U%w8WuZQ?w))cj&l)?=pC zbJU`O%7t{uqUJ;f{O@p3Q*Uy}(C6r9a5C)oQ`QNXGjoJxH%s#$SMMG7HhHfP=d`Eo zDXXVt6`Dd9EtCS1Y-=!*THaIglq^;~WZCkREXlS)k`6}82!%od6i6u$2rFfz?4*SQ zVU*HB*aS$!3XnibfRM#|>7l=W-skfSKejAOw{G3vb$zc3(3%)D&{IV#R}D-$ks^~* zUFbBT-iVvN?6yfyb&iilnuAiZ1n-oOCP5Pe;}RVTRkp)*`bH{RrEDWQ!7Y?@r-Obc z7YIcC`I$;WF<$gnyTCeX9TO?~Nz3aB5rxEv_tgdp@6*|-M5`09tx;(acQGUMTo-*$ za6YH30nWF&Hpa8@aVHy3RVxZnWt+LuumZLAT-~(-lvrSbVpb2ly*TZCY|8O z=TtJon2Ii1vYQ%?f$Aw2tg)B6DEmXf2&myBp^?<;wFZP7flhijKsN}3Z^^@{hLdD_ z-4N08ZYp__F>B7)p5_}Mu1cfT!k=>af>arG^pZE-Ov0Esx#TYtTIE#(2o^=hi6Flg7A|`DLxn>`HL`p)ahKUdz zni`Da2vv>-;U>hRB1ECoM#_S2Rsa?*n;jGdQ8TNAffKHc8>4Kqs}MQ_Y%*O$a7ABL zjZL{iUuzm^KxHUYqq`MuB(Tme1b>Zj%7SlX_iA;z?~gGiBSClB%o0{^n$1PxT)1uLXtwWfM8Zu{FiUF8s0B#$ z%hpPiPM~=-sX1MO^Qpv0i;aN(1sgItvk==gCeWG=8`*)M9}~T4vpcO5DvbnbH%eZ3DWV|eBj|mO~YTBRf5(S_nu_AiDUEhSFu2bZY`xu8bU#Fa}R%9`m zPY0sN6jTR=_PFZr4tyOT+Y`}lQ356?9j;jRyT)V^_@U~zwvEq^sw z8RyI821&sbMKOaYDu8xk90eT>$YdEkQe_ItS9A@~4>UZtYW_|E(~I{UKRfFuYV~@j zO7(nJMD!&SDOC482QOQQ@_vzvW@t%NfXADPk}isqNpb3@V4`@VjS36)kjQ6zu^h`V zV0Y2ORtopFR#3Wqqv-f`i?hr)KcJwG3=tj72YC*+KU9o5TdM+-ELC?^#q>uvz{XWS(Yvs%_2i4+|GuAfXcVx<}h2x z7o576c9U{kkC$_JG~&f+XQpAq>L&QEznHIA@&J5E^-RJs{2gy=?6x9gCO)HR)w^;> zj>^>*HPY+~UQ6{em}Wk&CKc&*Rilxss$PD?l;X+Bs83dCp)lxVrVOPGiUw6maf%iX zc;IY)GVJ){=x(;9P*3J{+8qfn9|Y(=``J{8VPi$Gx7TBJX-bOW0<_lzNMGB`C?j~o z>i0+Om;llwUlrwr2>QJW`4%_!k=(>-^A2)V$&Lx;x0K^i>+p6C0<)}H_Je#fM=^XH zA^@HyC2#O-0oB-P$B7iBAtTWxPBx=yEFeP=(#)KFl&Lf)O~juwNhcv+6y=PFGTT`2 z*RTh!P!tK>*2oHkuv$=+<=Ad8APZ9p%`GE#V3)}R9TvMY0SA>P=s{cMSSi?V2a{tf zkRI3)8}Lo(e0_+X&G@jRbV|KGIT)nSZ*8T^=-%z6WobGMBx3MUf~h#c2b-AFQNk}|2@iS5lZi3|9UVM3l)afx_j8?C-zqB+dF=QGf!x%s`Bh4u zPW@6T(M9jE?Uth*v_|NONFIO_i($Kv**$#}z-Q$fHuaZWoY~?lfz9+jZ$- zb_5wVHPZJEma9o(RmwM~P_D&U1X_Z^<$Zoq@gqavlN18m#6ZoT$kvKY&p}ZdfdJi# z_?=|Mo6$_VtvmiyO%9bTw`oJG?W>3jr1^`FuKC&YO_bt!2_iBhFJMrRz~I z#A|zt_c)aGwMMc_c;hjxD3X>h2jitoF{C8&bvMoHHZu{$4%EmC1bjOxK4GQ04DR@f z>e@3YMeHT-uXU1zjFa_c{evia-7@6>q@R+4Q0d12Oe=Q$@-U-@ddRU>yLCUX>FAoR z1rhAXCTXTewk&mx{P-4_9r;-n9q(v4Ltm;)C2p9UkL7A?ZNsyAMLo!NP!M37! zMF3!wo1_FcJ{NO3o|~u)C+R`5P~td$Ct9XVvH{i_N%sNX?2S-sG-kj>lL_WQxKmEY zT&3($yh8>m1~QbC5354P$UC`^?vQCH-k5!}Ux!vynWi{u%r^_!ZqBXcM7f@rm?%_E z`$IGzQjpj!`ch2N#9GP|7C@N80oo4*^uT+2w^79bKeQ9+w0gD|<)W@WoJ_GG4xL^< z)~bw6b^uu_!3$}kf+@#hK-$Z#z8*~@5rISOjN_GLRH`>TfL{)rEiL<83ZvDui%f?vTnlHy z4Uv%3A$ZJvf)7nbMa$pmHEP2~jG*#Wl-%P)tHv_pM#{wQLtNH?5STZhJ_yTM$SJ7M zKpe8!gxw2)#y#Z>{KZ-`V`L+7H{KPE0;srI0+M!ebV}ty87|bWN0Q*03x~*18{NsW zWP8&hRL*kHJR;F~Y$r$U2qz~J^?bk?lzZwlR}Dowir8d8WdLIDjDj+4eyUc|0#@0a ze+q>gvJkE-1XV~)iIzi3$zY}-H>PY&D(OO2KpCi)q*7qC3c7`mw-ObF0g2P#L#-k? zuIHytC8b&5nvI1_r-f8S#~+K);2Z6UDXK*$ZKXs3ckUypak)*#6Xdkz`mvi*Np{o# zl)k$(Y~GkByh2ixW)b*CoR&gNi;XE-U5utUC~;Xn^OU5-jc#^|ag zW*o0cRxIqzPx}d`XFy{T9HFhE7wC=#v2u_W*8|D zUNA~jmMF+Ena?L#)9_-o;xH_>gOa4x!ZqEASK_ud(NbDQL|YlrO!|kamVvlQLeuR) zJekQd#Rfk@>Ou?k`=sWbRBu$v(@AO65Jab(s?dp`7(wv|xP}JdazY1dm|BTvjdF=C zSCwHAjemoDgvmifPBfTNs+4EwdU{X?cVg5R_sl+Dt!CnuC~*Z~a>3Up8f4h$vP>jW zEULAa#9Jt%X;uAOqKrid~6M_i+c#?9Z1f#`<6K5v! z(ZZZ4S>&i9=0>S{kSc4wG%>8?9VXK&DAHJiEl#7u+L*v|9$AE5EEQ>gg`zSLD;*7t z0ob;Si6mDVb^FDE;Ksv4br|alW;x} z;bb9P%-HgXEGX3xn9!w+p`)4kNoN_X&Q6pn*ME74b@ zP)Q90pky?_)4bG;^q|dbV~Z%jE9N9Fmzpw|JX#H#;dAfDQ%}T1-p4Nmy1P1P{>Ucp-nm|33fqoyj+B4C|;GDQiyT9&rv8y zM7e@i%rziNjOxrdUaG}as9AObW*nW_5!j7trHOPI->xVux@Vbs;+ASgb2xr{gvIsk0p+IshM zGguDDbttP>k-$k!M(A0xFyMT%oJjHk zWkP{khpN$&1Oyo~Dfsnaaaw7(1E9D&DJzz$OP<|t_y|!?6kFi$ZnioOWkaev=3T`| z1}nZZPKF{%u#*^-!RAqR3-w|n+0-O8P<0EDZadU$8GNlA41@wiz-@C7-X7E%I>gxJ z0!c^ZoFJgJlVKGmVaCxy5kPBzZ`7HnDhFV2O(})N!iehxS_RUhdQc}4pVr#p67+Az zeVXyQ*t~CIXjQU^kKFF0D98AC%(EZqNZQboEgi&};DG|`5?sQ;IM8h6St=z%-Lh3G zR9dY9(EEveqg)7i_O4Ryny%1ora8kYOvZV}3)+!gr_q^#))ZZH8m=?`yn}{MH#{jv9TDwPF>sMVilP@q zJr7|_+xd*v z^sJJk)CS!KD4@KYYor?+IODdOF4?`F(|`hwJZ;#0T=pnC%4B+wmLT!C2qt<=Z*yP< z2|8_MK!|OiY2Md#46RMNx>Dy`qY9LtbpIerS53|aa5}~T{Sp#MKCHWX$1?MgR)-XW z;ZW5GFayYT4&+9;No6o76QkT3Od@%I*1IRHYDwgrW+N|$dnB734CA$;SFq*TqDIrf zNt4MVh5!+XT#A>}Y8`;=P{pYg>qa99jhng(G+96=_-wq!AP-$nYM~}BsXD=#h$vBt z9e+p2b5fqHS6M8i1;(R^N`;E$U_`Oa1Ud)MX3@&}7^h~ZqGh1Tx-D|5L)L>-B29@! z0V!r`&46g}v|3EMqFoIQaeQPkR&Uxx6fip-pOWnl4Rl4hTsA{gZ4MvavS`+tO2U8& zBJqT>msAElSQX^u6;Km|dl5)y`2CaNkoN>KBb}1sR7K8A6^9vi?An812??-JG2)i` zG)w|Mu^s~V$gnjHR%*2n2m>QLgIrWntt#HDks#a%4HWDn1arN9byUcr$vZW$HJ`0*L(9nh* zqF=Tu?KIf|37nMUIkI4S%d4v!xY^uh5VUtJa;aS=FSf0ABZn^5IBtfZ*LDG%@#4FpDG`3Ch#1*+Wt^+Dy~IR`sTGUhkklHiZ1asQs2tOoscn&hlut+PxMMZZ zJy~c&)QoUKR#vSP*tiJ-S*<&!`Ao7Oh`A101DeGkM-sH^6Uqg}oIougZIj>_LB|^p zNugkMV#?ieSk?t!FE{ozOQnYE)9P+Tw*@e6hefg4?pJxBUM2LmBngCkIWh{$DNnB| zT0re{f>cSvXqUYzWJ3&NRo+&9*du`Mj@?lWP*Vt6q zXF~5~WLJ4=_(nsmsJH7jFY;Xo_jsVoR=y^ng&dCrJ7N|2 zo@0*qegUMuc{i-d08qeE@e(>Uszij#W;LzZqk|mRo`kEwI<)hx&{Q#+Xem;wE_52& z02uNVKzzXnD<~l_U?d3|Wk)gVu|V^X8HSPqM>z;ks-z}X`V-yM%K4gUMjbHf!OeabZ7w1!ZbWT;jkmq(0U?FVLDtteP=aiwc~Ic^e^Z50tDgKpfE zY&3IdMB61nlw{|Ie3eXSkRag{Ic$|@PF9xNk+2O{m2X1CVA{`@&19C{zMMoUc z5)2jZL$8AF52EfiD#hyxJp5#)=8wzq5mC%4Okv0;pmFMW!%O$kX_lk9W+#xfb4^v5 z2vaRErR;p!9t}bkS@ROqzG|mgsDgDCMDnSEj4&!vnb~)6W!^s%p`?QW7^g1YH-XLX)+cF8Jx-FA%BJ*dJ>EN2;LjnAyJ%H z61EqC@g1$yuf{ z3KUr+g+)p;kSwB}to0%`)a%nADaB5xSebRXpfL4l)1s6U&O0$Y55O0Gq56l!eSj?z zgqJZC+C^SNA)%o|$ZeD*Dxz%@W0Mxk@}!<=FhdLH zi=;xmC4#{TT$|wIt>n0|Qq8oSM%fuwyMc1332N`I3YALGrCPw&ho&udk|lDG74+w9 zLGSQ2U!~M&!egLQ)v5$)W~`q|F2^9fq#noz)WX)II`~uwTCM_n z6y)?~Rx!P~k3L7$$f4oBj|Ig5Iy6bPf%2mU?LfXKxM|wgVY#3}G|+u-x63pER%U5`W7WDyVYC zIm`e|jUs9i-ih$C&`pt*fE&~D6Dm0t)ixs!OMcceY^5#^rtyyErDT(C0@9M2?%9)3 zq#y3LeFG?MqEOeXat71L<~7QdD&=w*8^rr1dP0Ik6_3GbFm^QWSrnvEoOf%0*~AUA z*dNWZOvtk4EdZ|Wy1erpV7Ggs)Skbeqi)KVbt3fD{IAuClrZ_{A6RiXV3Fug+RcmGw zUVP?F>T*W&n4S1!CS^mYBU;eBNvn<%XmIY!KnI4*G-v5Vg^-znJ(8>lFEof=#}E=| zz#jYbF|<6`e5K$>rN}fnrF%V^4qIe%N_hmFVL3ervbAKoTgyi@h>+Ji;2={PN~EO} zvSELhfbwr3)1MkSiK3@N)gMV>EiYwv;p|6&n!`uLPg_p(*&!B^>L3bfTfe99dCV-qVbNMavgYZ z5vGz1lrvzmREZ$N*BXG1D^c2n0$rG4It1yo@(ML*fpG|jQ3qc{F4&0Xdum7@)yoYI z$QrQMgGkC?kcg^93VFRm4MBf84%;ZQhsiS9DgaQn2)8V|v6ii6Z7+Wj7afg4oAZnc zI#dNJ0EL4!3pz1!HjhJ0G}>u1I;f!mYLo%&#j}1P6viM(Mh2*+M8(}M#Ng$)G6Xk( z8&3p_oSJV12n#6LN`2hrhFmMojRIn}nNPKFKdE-COF1q-Vj%RWhRVaf*0pWD&BTVN zV$q15n4C;X@y4h)Yy|a^)M0fu9hLG-e<*g73?FbiwPBhM)22h+8 z&-tRkUD}W%lAIZ(%1JU(=OI3YmrJ!=b&S{Z!kCeDBa42*gl-zpB+q(h6=Vgd0~M2! z?Hh`M;V7D9Of{uz_)*i~5*=TENHEP@Ie@&MXKO}j2WlfdaxC^uLTZIbp-$6n`0x^! zAthOxHU-TsRc+EUQz>5S=LR&N9QM;nGuP@DW?1#{N}^WjWlMDkh$qrPg)3F3c6pp- z%xH=%_AGkXAjy_8;mS=ZSmG$iU4gAGI_?az5n&AN)PA-S4|Zd<7#%JRi#a`AjOCSX zkDy$Cs7R}2f2(T`g=WN;%c@XMFKR$V$T(YlVp;*q%OujdVS{BOASf#!>Lr3f3!Sw+ z2QDmQ24?s&@(G48QRAvj16>#QDxdLp>qxz!EN239<{1cEA&P(jCXBwEr*(}A_$#9J zd23utXo$6TrU4*glk3{P&L9%)$GT!ULI_Q`YJfJ&qc&Lh^e~x&_$O#LXpZ#L#Vq=z z3x;l&Qx0lDVoA={dAs1UYQc~+QkPO)Cqt21$Uq7#8dlLfK}BE?m121&#0ZcI&qY{H+(3)0Z6|bZ zne9@E5v9{vGHq8)XVMC`8iprS*Eb~Od?KdLKx?+hWMsOakMa$I;%HYOCl$?>0!beT zM8>2{_ap`+WmLVx*K;YFvikIlYlYnhnL5D5^?Dx%MHzYYV%Pg1n4g;YTFUL@ZN2Ll zjA;vOCoEsm2Nfs|a$Rwt@VklbBs!+t zav7B`wizvxxel#~^#QuFgO*5ZjnXJR=GlAz(l6U2U;yS zAhJU*z^*16AP-Osix{+egc8-!GG%r23T(07sTP7W+EameBbx;O9GmKEoEc78O}pyl zq5a5`rT9*mF%mI!_=n?T&p+jX{q($R3Gk1gSxY&dr`(bn0-d*}@op2x8TApVAs6ZC zND34=GKl^qh}dM6P*^mQ*qRx6tGXt4t9i;yq;hIDh(4EoEj?*>hg7o8n8h^N^KN3p z%EjowSO&h`bB5YVe?@vpCl&HxU8$_Geq&K!J4IB9nleDHa6Pxm3(b|tjC*LG}@W= z(@0tuIm1_$olc02aKQ*-6rM;zJ0T{^j2dx6av2qk!LriO!lk^fk_w~e63s9o zI7f{~q8~8U{mRr-ZfC?@; zH5s}ON~nP^U}Z88eDBKXhG}zRj!3oXnK_s%4~9-|FpU(4oz^%!@)qz;NA@?$TwypW zSK4;AEea#MH5@?{7cIzaSVnshQC2F3oPd8gk?AQ?X})$hUY+K$0jus3zIFiYPJsfX z?)o<3aFuonC56jcZXNWkGF=KFSTY6FB7+f|s00W#1TP>_C6Sv0b9b2qc#B1#L$Y1V zUx8h$=fYV9y&ThyffY6zbJ=#qmt|@UVRRk3g+5_j2s&_BKtoY#@_nI^bsLQaUk^*+ z0bfP~A82_|+!%1CDCJ$KT@;Zp?wZ~9umBuki~<(9($UaNW0I_Ew%y36+CW1C39p3C zS3M6P95X_wo#oqXn-(M;B{04o^qF`i-P6%}Lt@~{DbMvPPo{1!%JD@aX1IYtWfWA# z#3)@EqjMmi2nFa&d^kzP8=)e2@W7uDLRSDOxlYOHSPh9rrHmX>=tF}>ETNUFj4JA(zcGU3ttG6>_XLN}|*c2-ya(sSqoN z9plI28L(fSuMnnOFEk*N*cxOapqdafdb_C3rzpt>c2{}Hqvrw>bR0uP;nMo%+jL#4>@-3Z7n{A&g zCBX<1^$264*+3lnxG}2%2s}upsxdkWgk87L5+)f`&%MDAlr#h+K|Ufe<$R$#q*XZb zk$%gs4sry=`mhNwONrW)3AJOi=kE9?8Tc&P;i^k zc0?y8HRx$cv5ccN$04CK2#wr)y=#JuejFI1ZI$Fl32@I%N}%itH4|n>i=$^OBu0F- zf~JlFmNiNSigsU)%W^b5VzD9=ENE6inIMLC^1N9=H-s*+N&);%cmtd^l}dp>RA5?~hlCBz&8ysg6`R76>aO2zlBmJ5;qpwKlJE zWnc@$3}2iknvJ$&b%0_iL1ze`1$IPa5aQ5>=KH4IWteaw0jOlmu8C3{)M3ruz)QfV zgei%-Qe|AsFl5yp2+bx6gQ`*J78zX@DoO`EJOJ~KGBN=T;6}=y6v903>ZlpIx$tn( z%e5H4)}*ySkT=R>aTFVlq*81UB2d6kL?7U%L7$^G+7-0XjBsF9UlW^tBblt`OSj3N@4wB_?pq7yy} zr@jyC!}pLu;wDs9mpghi2bB}I887Fp27p^Fe{Kr3hG`2()8TMX4^3$fJ@-X9VfF$- zlCdq8t4xiU92-IKRF9;5wlgGUKyNTYR=5co!c4|a2dDL66lKby=kG?){Mt`cJzeFf zQVYifa^PnuG24Zc*+HlxNJ%o`%h_cnTLi!?Zfb6@*BfI%Mt;y7mkrV;Ytc0J#58!R zz;tC37SNie^8jX&X4h=+kOniSy?8a~1rd;pLpr_3wt8Z-&4h|m!pj-OFqKp?fWko& zr1}xSy1HzhEKLW|c!~yV6cRk%DKsMK81S!M7rNI}JZ?xWv(gUr%{&$XXo>2m7Z~8F zQ$r%<1sYXMtQZNR2`U^-fa+7UVx$5(ZcOKF$h2cLnm99IH#hVrqwS%u61>2s_+f!azq zR0@XJEZo1)1a!PO63KvAuoDB1>(BtfewRRVub4L+UyT&U1uiT$eYDf>kf4$X=ZjN7 zlc-8up(1K2ZMC}o3fJ&u)M00=Vo8WL9Ve1>!m$)gJZ&@?pK9S*e1lwbKnHC|UNmG< z7#mKmRAGroWT18RP!rjS>@ZfdyD>eV1hqcwe-7+uoz8g5fyt!Glqt)Tf9EOCP;=8j zKn2+(4+d}<4x!x+Yhpg*PfLSL*B0E2))TCfK$oGnf2z^Iyq2*u{* zY7{6vrp}hFM%bRJelrYs3fGDyyOwSbdm7%v&yWM=yx=7f@igV}K?u9^Ep1FHL_0Fk zd`(`7@x>~YV9O+f4M?q7m1LD_i0BWIDO2Q9x&>OdioY8ehiKP!941o0h4pq7lv#+s zDfPlI!?i@8kDi+8c3~PpQYl)Pc>N90YMfJUa}6)j7R8o{pMxmjx8@Bp=Zum_%uS_&7aJ5IGC@!CkGr~-J? zKuK!m(xP|2=%KM^ zINTuFA{dbJr3)N%OUAUosU5%-fL8F1uAO3fbcT{CamoXn%xWk`l0~Y|=|jA^)|^Pq zFz_}=%Vq+4Xfh7Rhh27ng$}wt?!?CzDWaSPbhO4{T11(aH;P)=59UoafZcKWpthf5d5G@-~LoNqi%3(bk9u)RK4 zmx@85Yie2p^O0<50q@)@t#)ew%Cd>c61im6!#((@zAMnRAYT(1xiakW<$xmdd>2av zU>fD#Gzj{1nv8Yqp{6#o{iK+YWz=9vf0XhEQv!z@BwEAIxaTx|;jvC?Sq#|4*&^TMpr3+rHdL*BDDGNn8uvHgu5suR%RVYI^)69aL68n! zMfi!1!seu6ra57YA56^@%(U3^}d6YrTha>{{vW>jar{qbrf7;B~Vp;bf~y~&$7T=y&+YRZ9Nw_C)! zu#vxClzFGt7aQIbrbm1OYW8U!WEr`3ho}xR&?NOun|`$3M_41;j!}M?M093lNGH>i zoB)iKPaEbW{;HD1C6-i2KWso@X^{c*i zfpIdGoWEWgSL#d)B4=nJ-~z~8L@VLQq^i_Ql!jhTPOU3JjmpR2IH^J2%?yi8e4fBt z2vdg`Lq08Js2rZ6XYh!bvd#!iHbdnr<8rN(pN!F{?A_dTpou8_O?ByJN3`P3L{Ae< z(qCbyp4;g~i+rT3lv)MapY#L5i!B`h?R&g61r2pqZF$8WplkahPwyZbGt@!CNu|?0 ze<{@TE~O{M8XfgQ{bs3I<_6^^XeA3)9;>(83_0LYYt$?v%wQTsxsmO-HVfiC2&zyi z(%1Ih+g8fOva7~w!6A-1(+$UsUPkL`AR%a=UYroYPeAcItwBm3B2H#lG63= z#<1ryPtfXvKi=N)18gDw$<&H{7~zIumD@3K2y38&X<8%*wg9oLF)KOq%oV&=_ZUpRIRr zfpLD5j-Awy-=4rweN^bqh&ja?KHH_e z(8VZ#xFhP2oKun!5Ju&J5{}b832p{arML`{R=eG@R4;pXdIuO@UunvDQwQIuI7h)@ zYjSxi6Lvfc-*c0nhCEWJ}@;FNEZM z|L13N*4i114xQWoB>x3(M~A<$*S&js58g9hf8^^=TtbEtiNx897L`BQ zyzZm-Zhun$^xtp1c=zbKeGWPP`j=lm>E6fxd)7(cV;JcxUpr*&->*3Cqi0VXY6sf!A3a|` zf8&iSR^4{*4`%(8eEyF1@1l!lFMsUfBX1nMy6VMy>>Jk|hPTX`mHhex2L4=h5NhKG z)7?w@cfWDKQI*^NZ?idT)`G3u-(B(Uo4+4C`^W{~xBvBjU%mJ7nfF}uh0{0SJ%{i6 z)KgFG_w8@reCMkRUfP_WHS4g}8;@Ol_St7Y_43`LO-Fyp+x^dcGrPa*mHD5nyY7g> zvgc3!@~po^fA=GyyyWPU-#hw?GuwRs^KG8JDsg&XO<8I{ZtN&-ctN zCm;9i6Wq1l{_#bBXZBZS&HDL~s-_+J!yiW9dUENV_wG0Ar$=14WXW|uF5U3@O9@y7C#?{&P5y^r|M>*wKsh4)wOxMiI> z>+tA-N1ybMtIwZv!`pAS0)tmhI?j3TPxoH)EwA3ltGSQfdBz*16Fz>v?(W!hr@eh^``%RK>qnh(-}5_mbiR4! zH@@+W_m19p4|GzFIQ;NOjywO?zy6;$-hA`LlMmRv`l5^Wd*b)Zlit|iYeAIV2Y=Q) zj)`wscX&sDS+U30zV^wN&HaxoTPktdzh6)6J)0GAoj?5h%HXfQd@yHTbLISxE9V{L ziyo!i@xh-<*NcDsXyM_n9kB0@vi>tRFfR{(weGN~s;ZajzP&=)-!I?t!uW~H0*hD8 z`}n;h)}L)0w)3wum+P)W*R%NS*@Nf*RQ1kc)6rKK-7OCtc+@Xm{^ghUeDCNRf`yiF^gyXf-EyW@jq_Bi+Rd0hWC>UTKal{os&Yk&C#CJiRi;#q@jAFN+; z!ZF|b-UCm~J^b+abUHowIOnE!p1JY5*IxTs>1L&L@;%l+=e>WwcI?7k+do?T;oc95 zXYKRti>|oh=GR|uV8Z^GW#yHf=brufe|_*ZN5=loHT&duFie zz4<4MH(&n4%w^YndGCV{|G^K!&)g_I_x{4q=Dp9{yyqT!Y<((q%*H>z)GtgXcm46| ztDm{G9-II13)-^INgH3?{Kv0;BsN5Xy|c<{l}>IL)hj%r?&yEvKBeC9)1fe)f6im9X;fzyJQ%;!1lLZTr@zg`?iu@3|As@~-%*o_aZJ@E2TgfxhmZm3!>5NAb@7$%UVlG3Hmyng8Njci;Jn zd!zo`ExoV)VBXfZulmbhe!BFk*Pa&UZaQJ%hi^V{!>OxR-B7++f9L5xM)rJWc_DVy zRaarnrdFPD=9%wcOm_sH*y7oZwZ`3lx%c{~o_>1&0}goe+wZSG>(FO$Bl;&F{H$;@ zX4bL~w|~6p#^3(-e^V#y`@^(|QT)OezHr)~=kNaXEm*dXUwGw4>6oVjf9|il0o%OK zJbla|<5#BFZNC4LQw}<_deDz(x(w@9%;ztB@?&i9^zS~#th;c{hFed+d&!v_4xPXC z0<0=89C_x3#}^+}z|T>uk34_Q_UrX$Zn$>awh2c0(ii`=VZ+70`(6FA4>5bTt}O^B z2WHR3jJfc4zsu}8)_&(2nDf@NH&xzw`R?04d28dwjjw!|z4G{tyFT?S5nem|gcD8< zowZM3*SuGZHQ!$RC+qK*a|bj1%ioxjUOMOGL(Y#Ka{ihfYrb;nrI-GDa{S^~=bgHK z+gnQ)-hxjbEIs}7|9)cW+*6M@;)t`)J$LKw)Bf>?;Ieqb}t z?`!AJhqLi#(Zv^Cbj^xY+aKFZC9lP2KSJ!~z5hc0f}NApukReLf8g;e-+%XrH{N{W z_wRnN{=o~c`Q+7wuYTjpt6}+ewuXy$SC8xNLuKm$>zVp-H{N^_= zu3os>G|jcE=Fcn4yW&`T?KO#gH$8uA=sIC3{iR)JR$lC z#c<~z=gi-J$@c&L@|WGYzxwUcr7ISF`?$+qye@rd?VviWueA4?L#MBQy|8q_uI-iW z$8US>S4;L@bMN^5{>IN9{?_1=JLyDM`E#;PL3{r=BA1-5)Qxp z`lG+QaKRqy_Lv)Z`5yaSjP#MS7k;+ulg#`*&KhF%Ay*!_j~wFpi+=z6cYDViez*uD zlb#@#=I)i3-3XSD3&d7JNEv-ZkME@|lt*Pn6VPgWkV&l>F8dix*W9qjnmL+2dz$s4bJ zw)@UIcb#+0Dq>~nCi$P{-V4vz(0l36ft61#o%`zAS1{6#e^c6X&FbCTJCDEr@sd*) zOkXgL-h0iHR~&a8*01>=KEW*Bjcd5aUVCj_bkG3@EW7W%;|ojwwa*$1?!1RS*zu36 zLW}2~>p6VO1>@z>&aKnmq(0lRhc_Ev+vh)Hbndx(EfwbRFWzNbz1M^Pz|x+cyZXbw zA9qynm1l20asHz9N6!8X_j`K&mGd@psiknB2J_bc+;c-$p7hpJ&z%fQh;?|s>6NP< z*s|u(h4(%3)~Pz2kj1ys-RFPy4mfw{y&nAc{U1HB{;hw%@pxv_%_rVTuM{rxKe~3o zmgBY@c>X`Hj-99L#tLlu;qg9$1ZzO zx>-^6!P@IDP|v;bj13ESf4DTW>5a#iFi(7vKW6pL+no2FUw?b%LfpAm|LQAW)A9Bf z?;I?JAJ{l}-b;V(E!+LjL5r5onXh1pTlO*T-dCuHuU%1Q_6pS>J{OmL%?WFSh1cJv zKl9`NSm*sd_g2}b?lLxPg=79AW|6gJZz6Xcf5HjtzVZ6Wn-iNJSU>scPk(;x z`75@}+4(`p8=Js)zx!9};V*ve_@CXKU9e!m1#ea^Us0Nw0QF5T+`eY522X$SoHG`F zWzVygcAmQ>u=2nKZ+!aR3%6%BE!?@`&=uR?FR-(Z+4=hWFe{l&@J5$?{NPz%JMqoj zws|k^-eb*=vX^5zeX?$x*|cTLmc`^P2P_)D`|J~IPr1FB!CblU;)}119Xh{=*XFF= zwP53xjn^$z{(jUg!_%H#mRWr3DbqLhfBc&(^=GJ$Hm+U%yXE(@Sf}8_$eX|IO^UyK z`nlg3Kf&Glr{gc)^9TeUxm@n-bIvK0%ZoQYf8X@>U;gS>nZL@{CNDni%;^~q8mGQG zT>u~CC)HQZ-v7w^Hc5NRhrN5}AK^G;v)K#Y-2RMoYUS^nUcURoz{@v(b}3Q)rFzr- z^FFz3`)N3V#dCxcKDuc6lh2&;`*l}^zEaqcI_Ca{ekj#=ByiS-Gv0p}_h)(&qO4^f ze?PY9`2!YRcg;1Iym-#{XAAK-vGTc_PkfGg_>I%BR(U4o%5Tk{eG}$V2aBEpSNe@_ zeel_*PcBTqb)d%X{%7pa%EQVXEleEj^Rn$bw?DU<_OAF@cUT+qn5>Wg$LD?M+|O6& zwb!Ndre75a+lhi{&|HQo)ofnEQok+`99`?8HY@i8ZVbonoT`GuS1Tls?y zI%xau9q%9Z>HCiwcb>Tc7wPc8`fX26&7GU?eV@K!$IGK9FMSc-M83BEuGLr0{?Y8! zb56XoUwZDAlmDN`|F{2)JWlx7$p?RcFL>g)Ub&;R@bcHziJKPlWB z`Si_gb3gl3C>(m{=^MPeW%>Od97;DdZOLWB)8Jk$`xtlUj-6jT2i|H2zTdLJqO;C8 zh`^M`sn@->G(D#o!?nDDBi~k9Kn*Ui&{$D^5 zU2bj(Z1~#TogeJKV`cB9XTR|_*0m?ru94W?fBnj#mu%l}pY?m3_39Z9Zt*Ps>Pj&9 z3w`bN#xumWBs}c3_f1Dne^YYzH}U-Ee!^9o*WEjB;R5(s53O1A`-dy=mp8tASZeVl zFXDz=?yY;?sSQ@|`t$Pp+fOfB_VL19@1A^;ImX&gs`*fB64z&A4!dWG%5nXYQ55 z+5o@DeP{t@$l{+4UVr3*Wpl7nzBE{Ua%|D;3w|*FgTH^$fiGpQJpP5X2OMFkI+r4?b+PCtPO)ovSU-Ez}SG<1Za3_}LB7%xLPk{5kHN5rO zPafDjJn6zOf9;U&J5R4Tb#7taf(5ITKX;e^;Sb*_T=Fsu`_t3WTYvxP&u|i6rq(>L ze%lMTYo%4EO$$rU83>nfqh+uax2cccw+oK!1s7key2=T2=A5EEdF4lcK5)T@55jTT zWj?uO-)CpylHsABd#o2$KbWf?<5?OE?vKkiU4PeI?DY6Ujyn0Cwc4xjrr-JWt)+MV z_e+Qy7O&ah1tLFs^x#Eb`O=q`&--LEOk5GEjH9kvUl2}E?=G(&-iK)GhQf7=_)w^X zOi1Cxc>LGpTTYs;`{cF%`^~;Ce24w^+wb*n-;T)Ci}3ut7yWyG``99U{SVIk#gaKs z%v+8f9C7^dFCX{t_s>86k7w+8;5%Pixb0V;XmHrUv%_4m$0a$|LVT!`O2OB zn-O>-;LE=A;>sJmu?XG2d;7bK#e4JD zCgGvFZ(T9|L1Ogg-~Q>1)jRus^P8>JQ|MTjzmV-axw&s&p-i(;> zM#OB#F4(zk|Aljpe&zggR&D#&o==~+*XDcPJ^KECKXzm?ks$BS&wu2%-(5C$))BYN zTl87=ikUpgC)Mkaw3!wA-W}TxMPU2YA7dTdbo=`o&Y#=gIB(+x7hUv&N5|}y$l%;s zUvoo$-93BkvrqZrAD7nNJ<_~f(3}+|cJ}-KxawCJ&x;YKU2@4cFFxkfQ()1ag2nyA zrkCzK@bUW}`8+jpto8OE5TpM1CqGFe7jVNV_uu0sOAxlEuFGC=&%eI;>cY?N-@Ws# zx$iDIZnOB%+57Lm-+tG?irs)|;l8u{x;w`2pYnOEddxiGIP2}7O)uN=)YZ)=E}OIT z%~e|`2ux3#^Tfi9xAxZ^`}prRE;$7E%gW;~U9j<=*XO?f_+uJ}NB4H=m{losdY};>n%wPF{$0GAEG946z z$~ZLyM^ap14>WunOI7_=cUqN5)l5A6eed1}@G6dj^_SQ4f!lMSCiURyBuFsf0-5AdvDCN|Dq(lZ`FH$iy4vzlzbHg`b=jeZcV%*FX zV$?N%XFgv-u{98doE62_O_N5%B5?jw)N@FebQe$qe* zcG+e+{bkjqU_Si8d-=^2MxElrZS;3_((Qfp$NmdT7!0?Q|9nEgH4Fdwc+(iUq2E0l zgE9W>pKHg(__F?+E3|dQw^*+Ibq>Q_=JEgD;(|N>yNdsBZP7Ak+MFf84VHV{(M2lY z-{J4;`?13=YacSVv8@14c4_qo<_x{IaP40PkS!xFT|_H244=6VFG0yX5Sj-^Vj@xC zwWT$OsF<5~+ITu0R#H;B*69R*#jV1oYAg4RL*E^YPUeFnn^YJ>FV}|-w%cvt?W)Pj z@b&f0EEpT8wV1W#wwTH3*6V;bR)`r73iIlwTSwyzcW$ejKX>js9P4=daX(>AXOG7K z69T1O(vLnocILI%N=bVqf{VQXK&_96jBLHOkB{;uz@V`jPx_ktb#=Ou6xOQR7D_5P zes^M0S$GOzu0|BD&iz@-ybORYySjo}DO`qJHYKPQapdQV4aiK&2fG`@0I~>cCbtKE z+6ItvxkvpxGf_U27nvU&{HJHB-QIT?sD2B8-)^s7ihw|gYx-rzyS;0YK?j(isASr# zbi4G*JYa_W&hJjN9nY4N7X;kra&xO4I^-2$A$PH1y<$k87j7ifB(NmkG7~W((s85e z{V=c|!;;OQ7iQ0yqXNwF@x_LVy1&REM^PCW>B_M%?y5{|w$WY>m=@r<>d~VWi@nE2 z2K-wb!mRcF>6C{AjA`hgntU~mXwsJ5$Msd$aTtiMpyQ>C*-8D(M;#q zu&}Vg;7rYAfG(-LaA=E7S>h0M*P~(25#D-x6p#o`h7Y0v zi$$vap-?*1+k7O$)(pi#^7~KSFsWnD)w3L*M3*4v0qV1!SA=&XKN6{tfi5*2ofwZv1WofNsZv*(jb4?yL@n z^|S&-VM@l`{;%I14A^0H-ey3?LUJ0odx4ph(f_&qD83tL^t-TMrmAS8*bR+#i#Zx= zoi}gi1{s+gJnyrGipQQ;qP&XGJ$CF?v?36j_#us7e))yInP5pQPaDc-0L^0u;%~%j zJb3_sA#dw$?i;S(pG&%Lcmt|=e8Z6rmZLmgbXLdt!KkskiMWUy>|=ZR;vatuTe;hI zzi&mnu4vw7B*aN4gA2lbIWN>;irTDHbmPWX@1jufVyl6#8}>B5^a~}dX1gs|O}iR> zGrkRD-^IJCW?&Z&aC@y4u_nXQ2XM-SPker;o*1{QhVAicXda3&V{o6cu)_?~K6hCvf zr5S+WmaON)@~itI*CUDaRya`ZoksZd|)o-+TXPY+#dEMS(YePW!Dx zGYe{+x}+35H>t(-6-xH>_8!S{v?&uuB-q9t0)TO#gNuu6nEu1Xb+CR0k=EF%!#X-4 zO}p?|Z|)zyC!)Epts?dy^FDxM1RJG~y)Q~im`^XxVFUU=;gs>L`M(`qDNx!`$l=9I z-z&k_`giO!uM$_-FNuvU>_?NFj*?Os_zeO1(B&J}jxt_xFguV23| zJhpY~)&nkh-al>lN)_t|^7~QOw4u<+m*y7d`OZ3=gb+C%{F1VkBG&5Ft0QH5Ks05T zx~&J@m*hI;7!eh<2~0w$>u_|$n8v4WAoWfoeeIQHrF19N&b_Z|q!H4#j{WlV(TTiF zGw`TMl4e=99U2P47jqJ;6Z92uh;i^W<0e4a2NcJuM*EgH^|Z#sJC3NvX{EhyJ_Aeu z1y7A?VOxBTPJ6F=;&+Z%ytY2?QWJ_&a5~d|_<@cwN>aVtI^EO+fvQnr;@i5fx)O{a#T}l_wMeF=*uoU`*eqSGM@V(?RINdTglFJn}&GEm$2B z)Kdo$-80+Mz<_~73nUIIAi&6|7O*qK5btu_+=%wP;_XeGA%MI^OP8YX++_ra`qk^# zS?yvUlFizJ3s8NJZuM4_9{L?|7X|#y8_4GT9dawbbG3}bKjY1J&aJJTVt0jGdN6ml zH_05}aBclBY`yZ&xHx4n6!5rH&K+%#fgLqjtWMv!LY%k7OP8+C+q?+DfYzNpdiB42 z6p&Zf^$G$}+eMnwUkC42^Ej~q*@$RXpKo*(eJdvaFBU{Wrn&B1@bMle3?VP@?_dIZw#aFdnm(WR^S}@g_=z{f zCYQ(S>ekoSZ&Zs50*!1_c5tU4L_b9L0=tW)^et;iSn78*W^ObXvPFD+o%7;10pLRB zH`30+H-LNEASn3KI*FjrKkQoHy(|^oy!lOhy*<2WXU>GH#XJ~P`9ej>J3ud6F0T(! zYAz05ylmNLvz)Ph*4WWGN>$(4L!Bz6dIIlt9vwedk_~fKa(2#aYKGrVy!sgaNFm3^ z#|O#p#9)C8<$|94GCDvV1$(qW*)(R2!_$FSh1dwDi_9%>r-e@AW3G(vJW6gf0{F>U z$q=bDB~n)FEi;~K7eru-5np9xWn|RT930!i{;|>Cl34}y;@_Q2%ey7gBL`qX+qb`4 zU~W;FkYDOn|MViUsg#>4%E`S&ejTsDgwIj%6G}54^OxVh|BZ!f@9m#G=iQk8UoLoV z>I`7H5fKsUPdni7mVV7NZKUc4!2us&5=JziSKP8%j1e*KpRRmb&?i8Igv%gk9YKsC zUf^jH5UrNJma;u7Vzyss$Tpq{=;`FiyM*K*{OH(8$r?=>@_$efuBf!ZaQ5g>uYg=b zfp^MaX<|Q}-&twqYPuJxCiu8Tn4 z<~}3=x{r0iKnkB2NH$}MuyP=Udi(b62N2!*BigB!zhF&jx-ZRLezw|Xioo{>6$W>| z_>lrREJ3Z^|Jt<^vodgs9V*8o1c@!k8Eq1M0?;{hEb>6W$Bw0Zd~uW}GPTz$`F^)J zN`Ypu4q(&BJyf-{f)L#OM6_EIiEU)#^ln?R$^R(&H0mdIf<$r_VNbn6>aA@r0f@jY@>rMOU&)XSUt#peEopx7wJbdsu1T?;jf2J{z> zJulbWlt>NS*U56E^LzYw*wd#^RZ&Mmx*&&am>_8}=Ct?UujBtBeE=Q-k_waXzgkgl^ z3Sj0sM{ijo*?Tp54B{B*&>p9Zp$tmC`uO-?Q!Jd2#zIu2qTDn!V#RmvZWZJtFL_L% zkMNks6ZiqH!^9Y;6==pzwoz?%R7D|3>foWwm}IWN+So> zCe{1L9i9yT#w~Sfh2E$-x(hpnY^D|?yswJ489$pXA-T>pL4;9 z!f*alTnOMxHSMfE=Q8^*&R%RiI(TOCs|LCLqg!3y@P&Wk(monJFZ(_F#U!@eu zHf=|#@TJRJp2JBnMq2yryB2<>g=_xx)0(8SP4aYk@%IoSfbjaps1N@1^}D(#U%PT8 zfo}Qy#fuloWWQZzQZoJ&qBt?EE$1?C0Os95vhqzByM`n1HnDCg-GeB?xf>sZ!24hy zCoi*s>#Ks{CgPn6(i+b1xI=4o`TWw8I$ie#zjMUZYP&4!+)-f^ZK~j6tV>HvgOp|6GNMP_xBiQ> zesMPK@3)Z76yRY3N8J7hW&)!p2|9i@-21wtjzH8wxjv@l@g!|5m{YPy{N(QCJlBSW zpGrdGL7BxuBES*oZ&T#&X;WiMb(xe8|*sdd<=QCmFu|nP8fG zdp%2A%Az_%=sp=rvpJ6&R#chok^#Bp5olFGkRN~`?-8flVDRIgqT8)MD?tnX%gdK9 zskPxB-3ID1NjBI~)M>2%)Bx++aIEwPy0aUEbqIo8X#@e4#|Zvog%s(lz?&p6A*kX=sCAT`$a&6pWVCpkOH z2%8%Sm4yd4|2Gr<+qV!jeCHA$9R~VwU+~+v8^fZ!%doSUJgAHfTR3aLP@0|vNgr_j z>yyWmabp?h>@hZ+uZYu*L0&rPY8bMYIT~_Updr-i#vhWR=_9Z1BaG~Y5ticIi25Si=h%**##H_j;}{ z2CoZdA`-0+(WpjR%c8tdH$+X0Xz@Io(IkY&Cbdb@I6eg?xgNY+#kw9XiQLz}JSz;KfpCq>l*I-G9(oR9F*A02# zHt*mT+0bp$Z)hZ*_QYPZ@r$ibm^x+1ZsVRk`@I?*KV&EGhzCH^k0GQH!>rozNGOFX zrKV|q+d*p}UPt0}syU9k7oVjTo)x>S@0({2od%g;445Gh$RxlkKXYlP*h&zzTz3KGDmnr>G<2KrqVKim;~Mf@sA&M78Gfnz z3#C|mb(7Xt!6$qwcI(x^2`Sj#esLf2$+ko}Nk= zqN?b`$)9_9eLb}`al#d~#mpdKBY?&S;Kx2_zgo=6E#N`W{~$^dDzd*Fqz*@KnD$qf zG9_&8F1PW_xp|Lx!7SPO+o}V-JfoV$P$~t~dJkNM34Efh|Hp;jtbtpq&j*3Rg5oAm zp@h7hf&$1x?Nm!UH5(^S_*5-Zs zm@W#AK=7I)SME#Ou9{f50Q9Q0AdR;5*ZX$5-$5rPX7%X+`Kud`pupOQCJ?Ift0Nd+ z&I7nt1AwMRjLBbJXj+Ih2yxi!GTe6gocrRPbFf-kw`E4_xgA0Fb%^}7U~>7?Q303V+M-9@ zL`qZWu~Al=0O&#=TG$0G;UE0MQ5aX18lY^*KkE|Z(NJ36#kpFBnvTOBtmETRJ99Zs zvV!xDP;vy$hLgpH0iwoJoyk5E;+3-oZ?3a)~ zL7q<$N^{;f+X6RX0z`;1mM`}J?xJ&xQs4Js8&-b-!Og7@inAo=OZ*OQG`f`s&$sviV+HpJi>aTyN1rweaodm&+UC`r?LKMKA6eZcM1Hvm1J4a+RW=&wJf zCD-_GDtC$oTzCwne7Gy<$xV<6Qm-1YwF3vP5_1c4ZUqtU*9%K>sfkA$8u2UVr_WRF z`0yl4568R>jCjgbl?Zugmt~r>`J|nXQJ)EL&Le=f36zISIvpg$&5)2dK=vvVBx>*d z3(XbeTW>Vdxl`ut_bNNG;{ZH zb|PJ�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 Pii- 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

j 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 From 1bb3cc72d70ff3cb75fd43707016eafe11b3579b Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:55:30 -0400 Subject: [PATCH 02/15] Delete alfred/build directory --- alfred/build/.placeholder | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 alfred/build/.placeholder diff --git a/alfred/build/.placeholder b/alfred/build/.placeholder deleted file mode 100644 index e69de29bb..000000000 From 432e3a799fdf178d8ebd2b620f9f2a064c3080bd Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:55:58 -0400 Subject: [PATCH 03/15] Delete alfred/firmware directory --- alfred/firmware/rm18.ino | 931 --------------------------------------- 1 file changed, 931 deletions(-) delete mode 100644 alfred/firmware/rm18.ino diff --git a/alfred/firmware/rm18.ino b/alfred/firmware/rm18.ino deleted file mode 100644 index f09451d85..000000000 --- a/alfred/firmware/rm18.ino +++ /dev/null @@ -1,931 +0,0 @@ -/* - Alfred MCU firmware (for RM24A/18 robot mower) - provides Sunray-compatible robot driver (serial robot driver) - NOTE: For compiling this file on the Alfred, see README (https://github.com/Ardumower/Sunray/blob/master/alfred/README.md) - - * MCU1 (main): STM32F103VET 512K flash/64K SRAM - flash size 0x80000 - bootloader start 0x8000000 - * MCU2 (perimeter): STM32F302xB-xC/STM32F303xB-xC (Cortex-M4, 256 KB) - * 2x A4931ET BL driver ( https://inst.eecs.berkeley.edu/~ee192/sp18/files/A4931-Datasheet.pdf ) - * Hangzhou Ruimeng Tech MS4931 (https://datasheet.lcsc.com/lcsc/1809131539_Hangzhou-Ruimeng-Tech-MS4931_C231944.pdf) - * TM1652 display ( https://github.com/maxint-rd/TM16xx ) - - RM24 J1 display SWD connectors (top: peri MCU, bottom: main MCU) - 1 rst - 2 sda - 3 clk - 4 GND - 5 3.3V - - STM32 F4 discovery SWD connector (if used as ST-Link programmer) - 1 - 2 clk - 3 GND - 4 sda - 5 rst - 6 - - RM24 P15 serial2 connector Arduino - 1 TX RX1 - 2 RX TX1 - 3 GND GND - 4 5V 5V - - --------------NOT USED--------------------- - J1: perimeter, J2: main unit - - RM24 16 pin display connector (top pcb view) - 16 J1_SWDIO 15 J1_NRST - 14 J1_SWCLK 13 J1_3.3V - 12 J2_SWRST 11 PD10/safekey - 10 PC7/home 9 PC8/start - 8 PC9/area3/softRx 7 PA8/area2 - 6 PA9/area1/tx1/softTx 5 PA11/led_status - 4 J2_SWDIO 3 J2_SWCLK - 2 GND 1 J2_3.3V - - RM24 BL motor connector - HC HB HA 5v - GND U v W - - - steps for compiling on a PC: - - 1. install Arduino STM32 board libraries ('STMicroelectronics 1.9.0'): https://github.com/stm32duino/Arduino_Core_STM32 - https://idyl.io/arduino/how-to/program-stm32-blue-pill-stm32f103c8t6/ - - 2. Using Arduino IDE: - a) choose board: Generic STM32F1 series - b) part number: Generic F103VE - c) flash this file ('rm18.ino') to bottom MCU J1 via ST-Link (SWD protocol) - st-link v2 tool: https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/tools/win/stlink - - 3. flash sunray.ino with these chassis settings: - #define DRV_SERIAL_ROBOT 1 - #define MPU6050 - #define TICKS_PER_REVOLUTION 304 - #define WHEEL_BASE_CM 39 // wheel-to-wheel distance (cm), 36 - #define WHEEL_DIAMETER 205 // wheel diameter (mm), 250 - #define MOTOR_PID_KP 1.0 // AM 2.0 - #define MOTOR_PID_KI 0.0 // AM 0.03 - #define MOTOR_PID_KD 0.0 // AM 0.03 - - - protocol examples: - request protocol version: AT+V,0x16 - -*/ - -#include -#include -#include - -//#define DEBUG 1 - -#define VER "RM18,1.1.16" - -#define pinSwdCLK PA14 -#define pinSwdSDA PA13 - -#define pinRain PA1 -#define pinLift2 PA2 -#define pinLift1 PA3 -#define pinLift1_2 PB0 -#define pinBumperX PA4 -#define pinBumperY PA5 - -#define pinBatteryT PA6 -#define pinChargeV PA7 -#define pinChargeV2 PB1 -#define pinChargeI PC4 -#define pinBatteryV PC5 -#define pinBatteryRX PB6 - -#define pinMotorRightPWM PE9 -#define pinMotorRightBrake PB12 -#define pinMotorRightDir PB13 -#define pinMotorRightImp PD0 -#define pinMotorRightCurr PC1 - -#define pinMotorLeftPWM PE13 -#define pinMotorLeftBrake PD8 -#define pinMotorLeftDir PD9 -#define pinMotorLeftImp PD1 -#define pinMotorLeftCurr PC0 - -#define pinMotorMowPWM PE11 -#define pinMotorMowImp PD3 -#define pinMotorMowBrake PB15 -#define pinMotorMowDir PB14 -#define pinMotorMowFault PE10 -#define pinMotorMowCurr PC2 - -#define pinOVCheck PE14 - -#define pinKeySafe PD10 -#define pinRelay PD11 - -#define pinPower PD12 -#define pinCheckPower PD13 - -#define pinKeyHome PC7 -#define pinKeyStart PC8 -#define pinKeyArea3 PC9 -#define pinKeyArea2 PA8 -#define pinKeyArea1 PA9 // same as pinUsart1TX -#define pinKeyLED PA10 // same as pinUsart1RX -#define pinKeyLEDStatus PA11 -#define pinStopButtonB PD7 -#define pinStopButton PD2 - -// STM32F302xB-xC/STM32F303xB-xC (Cortex-M4, 256 KB) -#define pinUsartRX3 PC11 -#define pinUsartTX3 PC10 - -#define pinLoraReset PC12 -#define pinLoraSCK PB3 -#define pinLoraMISO PB4 -#define pinLoraMOSI PB5 -#define pinLoraBusy PE1 - -#define pinBluetoothTX PD5 -#define pinBluetoothRX PD6 - -#define pinUsart1RX PA10 // same as pinKeyLED -#define pinUsart1TX PA9 // same as pinKeyArea1 - -#define pinMpuEnable PB7 -#define pinSCL PB8 -#define pinSDA PB9 -#define pinWpEEPROM PE0 - -//#define TEST_PIN_ODOMETRY 1 -//#define TEST_PINS 1 - -volatile int odomTicksLeft = 0; -volatile int odomTicksRight = 0; -volatile int odomTicksMow = 0; - -volatile unsigned long motorLeftTicksTimeout = 0; -volatile unsigned long motorRightTicksTimeout = 0; -volatile unsigned long motorMowTicksTimeout = 0; - -volatile unsigned long motorLeftTransitionTime = 0; -volatile unsigned long motorRightTransitionTime = 0; -volatile unsigned long motorMowTransitionTime = 0; - -volatile float motorLeftDurationMax = 0; -volatile float motorRightDurationMax = 0; -volatile float motorMowDurationMax = 0; - -volatile bool stopButton = false; -volatile int testValue = false; - - -float batVoltage = 0; -float batVoltageLP = 0; -float chgVoltage = 0; -float chgCurrent = 0; -float chgCurrentLP = 0; -float mowCurr = 0; -float mowCurrLP = 0; -int mowRecoveryState = 0; -float motorLeftCurr = 0; -float motorRightCurr = 0; -float motorLeftCurrLP = 0; -float motorRightCurrLP = 0; -float batteryTemp = 0; -int leftSpeedSet = 0; -int rightSpeedSet = 0; -int mowSpeedSet = 0; -//float leftSpeedCurr = 0; -//float rightSpeedCurr = 0; -//float mowSpeedCurr = 0; -bool motorOverload = false; -bool motorMowFault = false; -int bumperX = 0; -int bumperY = 0; -int liftLeft = 0; -int liftRight = 0; -int rain = 0; -float rainLP = 0; -bool raining = false; -bool lift = false; -float liftLeftLP = 0; -float liftRightLP = 0; -bool bumper = false; -bool ovCheck = false; -bool enableTractionBrakes = false; -bool chargerConnected = false; - -String cmd; -String cmdResponse; - -unsigned long motorTimeout = 0; -unsigned long motorOverloadTimeout = 0; -unsigned long nextBatTime = 0; -unsigned long nextMotorSenseTime = 0; -unsigned long stopButtonTimeout = 0; -unsigned long nextMotorControlTime = 0; -unsigned long mowBrakeStateTimeout = 0; -int mowBrakeState = 0; - -// choose one UART to use for communication -//HardwareSerial mSerial(pinUsartRX3, pinUsartTX3); // rx, tx - UART for perimeter MCU comm -//HardwareSerial mSerial(pinUsart1RX, pinUsart1TX); // rx, tx - UART available at display panel -SoftwareSerial mSerial(pinKeyArea3, pinKeyArea1); // rx, tx - SoftUART available at display panel -HardwareSerial mSerial2(pinBluetoothRX, pinBluetoothTX); // rx, tx - UART available at NGP PCB - -#define CONSOLE mSerial -#define CONSOLE_BAUDRATE 19200 // 9600 -//#define CONSOLE_BAUDRATE 115200 - -#define CONSOLE2 mSerial2 -#define CONSOLE2_BAUDRATE 115200 - - -//#define SUPER_SPIKE_ELIMINATOR 1 // advanced spike elimination (experimental, comment out to disable) - - -// answer Bluetooth with CRC -void cmdAnswer(String s){ - byte crc = 0; - for (int i=0; i < s.length(); i++) crc += s[i]; - s += F(",0x"); - if (crc <= 0xF) s += F("0"); - s += String(crc, HEX); - s += F("\r\n"); - //CONSOLE.print(s); - cmdResponse = s; -} - -void OdometryMowISR(){ - if (digitalRead(pinMotorMowImp) == LOW) return; - if (millis() < motorMowTicksTimeout) return; // eliminate spikes - #ifdef SUPER_SPIKE_ELIMINATOR - unsigned long duration = millis() - motorMowTransitionTime; - if (duration > 5) duration = 0; - motorMowTransitionTime = millis(); - motorMowDurationMax = 0.7 * max(((float)motorMowDurationMax), ((float)duration)); - motorMowTicksTimeout = millis() + motorMowDurationMax; - #else - motorMowTicksTimeout = millis() + 3; - #endif - odomTicksMow++; -} - -void OdometryLeftISR(){ - if (digitalRead(pinMotorLeftImp) == LOW) return; - if (millis() < motorLeftTicksTimeout) return; // eliminate spikes - #ifdef SUPER_SPIKE_ELIMINATOR - unsigned long duration = millis() - motorLeftTransitionTime; - if (duration > 5) duration = 0; - motorLeftTransitionTime = millis(); - motorLeftDurationMax = 0.7 * max(((float)motorLeftDurationMax), ((float)duration)); - motorLeftTicksTimeout = millis() + motorLeftDurationMax; - #else - motorLeftTicksTimeout = millis() + 3; - #endif - odomTicksLeft++; -} - -void OdometryRightISR(){ - if (digitalRead(pinMotorRightImp) == LOW) return; - if (millis() < motorRightTicksTimeout) return; // eliminate spikes - #ifdef SUPER_SPIKE_ELIMINATOR - unsigned long duration = millis() - motorRightTransitionTime; - if (duration > 5) duration = 0; - motorRightTransitionTime = millis(); - motorRightDurationMax = 0.7 * max(((float)motorRightDurationMax), ((float)duration)); - motorRightTicksTimeout = millis() + motorRightDurationMax; - #else - motorRightTicksTimeout = millis() + 3; - #endif - odomTicksRight++; - - #ifdef TEST_PIN_ODOMETRY - testValue = !testValue; - digitalWrite(pinKeyArea2, testValue); - #endif -} - -void stopButtonISR(){ - if (millis() < stopButtonTimeout) return; - stopButtonTimeout = millis() + 5; - if (digitalRead(pinStopButton) == HIGH){ - stopButton = true; - } else { - stopButton = false; - } -} - -void mower(){ - if (abs(mowSpeedSet) > 0){ - if (millis() > mowBrakeStateTimeout){ - mowBrakeStateTimeout = millis() + 1000; - if (mowSpeedSet >= 0){ - digitalWrite(pinMotorMowDir, LOW); // set mower direction forward - } else { - digitalWrite(pinMotorMowDir, HIGH); // set mower direction backwards - } - if (mowBrakeState >= 3){ - //digitalWrite(pinRelay, HIGH); // motor brake off - //analogWrite(pinMotorMowPWM, 255); - analogWrite(pinMotorMowPWM, mowSpeedSet); // set mower speed - } - else { - if (mowBrakeState % 2 == 0){ - digitalWrite(pinRelay, HIGH); // motor brake off - analogWrite(pinMotorMowPWM, 255); - } else { - digitalWrite(pinRelay, LOW); // motor brake on - analogWrite(pinMotorMowPWM, 0); - } - } - if (mowBrakeState < 20) mowBrakeState++; - } - } else { - mowBrakeStateTimeout = millis(); - mowBrakeState = 0; - digitalWrite(pinRelay, LOW); // motor brake on - analogWrite(pinMotorMowPWM, 0); // mower speed zero - } -} - -void power(bool flag){ - if (flag){ - digitalWrite(pinPower, HIGH); - } else { - digitalWrite(pinPower, LOW); - } -} - -// 0 = off, 255 = full speed -void motor(){ - enableTractionBrakes = false; - if (motorOverload) { - leftSpeedSet = 0; - rightSpeedSet = 0; - } - - // bugfix MS4931 brushless driver sending incorrectly odometry/tire speeds for very low PWM values (e.g. 5) - if ((leftSpeedSet > 0) && (leftSpeedSet < 15)) leftSpeedSet = 15; - if ((rightSpeedSet > 0) && (rightSpeedSet < 15)) rightSpeedSet = 15; - if ((leftSpeedSet < 0) && (leftSpeedSet > -15)) leftSpeedSet = -15; - if ((rightSpeedSet < 0) && (rightSpeedSet > -15)) rightSpeedSet = -15; - - // traction brakes - if ((leftSpeedSet == 0) && (rightSpeedSet == 0)){ - enableTractionBrakes = true; - } - - // ----- left traction motor ------ - // verhindert dass das PWM Signal 0 wird. Der Driver braucht einen kurzen Impuls um das PWM zu erkennen. - // Wenn der z.B. vom max. PWM Wert auf 0 bzw. das Signal auf Low geht, behält er den vorherigen Wert bei und der Motor stoppt nicht - //if (abs(leftSpeedSet) < 2) { - // if (leftSpeedSet > 0) leftSpeedSet = 2; - // else leftSpeedSet = -2; - //} - if (leftSpeedSet >= 0){ - digitalWrite(pinMotorLeftDir, HIGH); - } else { - digitalWrite(pinMotorLeftDir, LOW); - } - analogWrite(pinMotorLeftPWM, 255-abs(leftSpeedSet)); - digitalWrite(pinMotorLeftBrake, !enableTractionBrakes); // set brakes - - // ----- right traction motor ------ - // verhindert dass das PWM Signal 0 wird. Der Driver braucht einen kurzen Impuls um das PWM zu erkennen. - // Wenn der z.B. vom max. PWM Wert auf 0 bzw. das Signal auf Low geht, behält er den vorherigen Wert bei und der Motor stoppt nicht - //if (abs(rightSpeedSet) < 2) { - // if (rightSpeedSet > 0) rightSpeedSet = 2; - // else rightSpeedSet = -2; - //} - if (rightSpeedSet >= 0){ - digitalWrite(pinMotorRightDir, LOW); - } else { - digitalWrite(pinMotorRightDir, HIGH); - } - analogWrite(pinMotorRightPWM, 255-abs(rightSpeedSet)); - digitalWrite(pinMotorRightBrake, !enableTractionBrakes); // set brakes -} - - -void readSensorsHighFrequency(){ - chgVoltage = ((float)analogRead(pinChargeV))/25.0 + 3.0; - bool connected = (chgVoltage > 7.0); - if (chargerConnected != connected) { - // charger connected/unconnected event - chargerConnected = connected; - } -} - -void readSensors(){ - if (millis() > stopButtonTimeout + 20000){ - stopButton = false; - } - // battery voltage - batVoltage = ((float)analogRead(pinBatteryV))/25.0 + 3.0; - float w = 0.99; - batVoltageLP = w * batVoltageLP + (1.0-w) * batVoltage; - - batteryTemp = ((float)analogRead(pinChargeV)) / 10.0 - 50.0; - ovCheck = digitalRead(pinOVCheck); - motorMowFault = (digitalRead(pinMotorMowFault) == LOW); - - // rain (lift low-pass filtering) - rain = analogRead(pinRain); - w = 0.99; - rainLP = w * rainLP + (1.0-w) * ((float)rain); - raining = (rainLP > 50); - - // lift - liftRight = analogRead(pinLift1); - liftLeft = analogRead(pinLift2); - - // bumper (low-pass filtering) - bumperX = analogRead(pinBumperX); - bumperY = analogRead(pinBumperY); - bumper = ((abs(bumperX-300) > 150) || (abs(bumperY-300) > 150)); - - // lift low-pass filtering - w = 0.5; - liftLeftLP = w * liftLeftLP + (1.0-w) * ((float)liftLeft); - liftRightLP = w * liftRightLP + (1.0-w) * ((float)liftRight); - if ((abs(liftLeft-530) < 200) || (abs(liftRight-530) < 200)){ - liftLeftLP = liftLeft; // reset LP if lift is not triggered - liftRightLP = liftRight; - } - lift = ((abs(liftLeftLP-530) > 200) && (abs(liftRightLP-530) > 200)); // calibrated on grey/orange mower - - -#ifdef DEBUG - if (stopButton){ - CONSOLE.println("STOP BUTTON"); - } - if (lift){ - CONSOLE.println("LIFT"); - } - if (bumper){ - CONSOLE.println("BUMPER"); - } - if (motorMowFault){ - CONSOLE.println("MOTOR MOW FAULT"); - } -#endif -} - - -// read left/right gear motor current -void readMotorCurrent(){ - // calibrated on 'black/orange' NGP robot: - //motorLeftCurr = ((float)analogRead(pinMotorLeftCurr)) / 150.0; - //motorRightCurr = ((float)analogRead(pinMotorRightCurr)) / 150.0; - //mowCurr = ((float)analogRead(pinMotorMowCurr)) / 65.0; - - // calibrated on 'grey/orange' NGP robot: - motorLeftCurr = pow( ((float)analogRead(pinMotorLeftCurr)), 1.0/3.0) /4.0; - motorRightCurr = pow( ((float)analogRead(pinMotorRightCurr)), 1.0/3.0) /4.0; - mowCurr = pow( ((float)analogRead(pinMotorMowCurr)), 1.0/3.0) /2.0; - - // low-pass filter - float w = 0.9; - motorLeftCurrLP = w * motorLeftCurrLP + (1.0-w) * motorLeftCurr; - motorRightCurrLP = w * motorRightCurrLP + (1.0-w) * motorRightCurr; - w = 0.99; - mowCurrLP = w * mowCurrLP + (1.0-w) * mowCurr; - - if ((mowCurrLP > 4.0) || (motorLeftCurrLP > 1.5) || (motorRightCurrLP > 1.5)) { - // too much current: turn off motors - //motor(0, 0); - //mower(false); - motorOverload = true; - motorOverloadTimeout = millis() + 2000; - } - - // charging current (reading charging current does not work for some reason...) - // maximum charging current is 1.7 amps - chgCurrent = ((float)analogRead(pinChargeI)) * 1.0; - w = 0.99; - chgCurrentLP = w * chgCurrentLP + (1.0-w) * chgCurrent; -} - - -void setup() { - - // power - pinMode(pinPower, INPUT); - pinMode(pinCheckPower, INPUT); - //power(true); - - delay(2000); - CONSOLE.begin(CONSOLE_BAUDRATE); - CONSOLE2.begin(CONSOLE2_BAUDRATE); - - #ifdef TEST_PIN_ODOMETRY - pinMode(pinKeyArea2, OUTPUT); // odometry test pin - #endif - - #ifdef TEST_PINS - // for testing only - pinMode(pinKeyStart, OUTPUT); - pinMode(pinKeyArea1, OUTPUT); - pinMode(pinKeyArea2, OUTPUT); - pinMode(pinKeyArea3, OUTPUT); - pinMode(pinKeyHome, OUTPUT); - pinMode(pinKeyLED, OUTPUT); - pinMode(pinKeyLEDStatus, OUTPUT); - pinMode(pinKeySafe, OUTPUT); - #endif - - pinMode(pinOVCheck, INPUT); - pinMode(pinRain, INPUT); - - //battery - pinMode(pinBatteryV, INPUT); - pinMode(pinChargeV, INPUT); - pinMode(pinChargeI, INPUT); - - // lift - pinMode(pinLift1, INPUT); - pinMode(pinLift2, INPUT); - - // bumper (obstacle) - pinMode(pinBumperX, INPUT); - pinMode(pinBumperY, INPUT); - - // mower - analogWriteFrequency(20000); // 8000 - - pinMode(pinMotorMowCurr, INPUT); - pinMode(pinMotorMowPWM, OUTPUT); - pinMode(pinMotorMowFault, INPUT_PULLUP); - pinMode(pinMotorMowImp, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(pinMotorMowImp), OdometryMowISR, CHANGE); - pinMode(pinRelay, OUTPUT); - pinMode(pinMotorMowBrake, OUTPUT); - pinMode(pinMotorMowDir, OUTPUT); - digitalWrite(pinMotorMowDir, HIGH); - digitalWrite(pinMotorMowBrake, LOW); - - - // motor left - pinMode(pinMotorLeftCurr, INPUT); - pinMode(pinMotorLeftPWM, OUTPUT); - pinMode(pinMotorLeftBrake, OUTPUT); - pinMode(pinMotorLeftDir, OUTPUT); - pinMode(pinMotorLeftImp, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(pinMotorLeftImp), OdometryLeftISR, CHANGE); - - // motor right - pinMode(pinMotorRightCurr, INPUT); - pinMode(pinMotorRightPWM, OUTPUT); - pinMode(pinMotorRightBrake, OUTPUT); - pinMode(pinMotorRightDir, OUTPUT); - pinMode(pinMotorRightImp, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(pinMotorRightImp), OdometryRightISR, CHANGE); - - //pinMode(pinLoraSCK, OUTPUT); - //pinMode(pinSCL, OUTPUT); - //pinMode(pinLoraMOSI, OUTPUT); - - // emergency button: - // The microcontroller has a built-in pull-up resistor of 50k. - // Two emergency stop switches are connected in series, and the switch is normally closed - when the MCU detects a high level, it stops - pinMode(pinStopButton, INPUT_PULLUP); - pinMode(pinStopButtonB, OUTPUT); - digitalWrite(pinStopButtonB, LOW); - attachInterrupt(digitalPinToInterrupt(pinStopButton), stopButtonISR, CHANGE); - - IWatchdog.begin(6000000); // 6sec -} - -unsigned nextInfoTime = 0; -int lps = 0; - - - -// request motor -// AT+M,20,20,1 -void cmdMotor(){ - if (cmd.length()<6) return; - int counter = 0; - int lastCommaIdx = 0; - int left=0; - int right=0; - int mow=0; - //bool mow=false; - for (int idx=0; idx < cmd.length(); idx++){ - char ch = cmd[idx]; - //mSerial.print("ch="); - //mSerial.println(ch); - if ((ch == ',') || (idx == cmd.length()-1)){ - int intValue = cmd.substring(lastCommaIdx+1, ch==',' ? idx : idx+1).toInt(); - if (counter == 1){ - left = intValue; - } else if (counter == 2){ - right = intValue; - } else if (counter == 3){ - //mow = (intValue > 0); - mow = intValue; - } - counter++; - lastCommaIdx = idx; - } - } -#ifdef DEBUG - CONSOLE.print("left="); - CONSOLE.print(left); - CONSOLE.print(" right="); - CONSOLE.print(right); - CONSOLE.print(" mow="); - CONSOLE.println(mow); -#endif - leftSpeedSet = left; - rightSpeedSet = right; - mowSpeedSet = mow; - //if (mow) mowSpeedSet = 255; - // else mowSpeedSet = 0; - //if (!motorOverload) { - // non-overload state - //motor(left, right); - //mower(mow); - //} else { - // overload state - //digitalWrite(pinMotorLeftBrake, LOW); // enable brakes - //digitalWrite(pinMotorRightBrake, LOW); // enable brakes - //} - motorTimeout = millis() + 3000; - String s = F("M"); - s += ","; - s += odomTicksLeft; - s += ","; - s += odomTicksRight; - s += ","; - s += odomTicksMow; - s += ","; - s += chgVoltage; - s += ","; - s += int(bumper); - s += ","; - s += int(lift); - s += ","; - s += int(stopButton); - cmdAnswer(s); -} - -// perform hang test (watchdog should trigger) -void cmdTriggerWatchdog(){ - String s = F("Y"); - cmdAnswer(s); - while(true); // never returns -} - -// request version -void cmdVersion(){ - String s = F("V,"); - s += F(VER); - cmdAnswer(s); -} - - -// request summary -void cmdSummary(){ - String s = F("S,"); - s += batVoltage; - s += ","; - s += chgVoltage; - s += ","; - s += chgCurrentLP; - s += ","; - s += int(lift); - s += ","; - s += int(bumper); - s += ","; - s += int(raining); - s += ","; - //s += int(motorMowFault); - s += int(motorOverload); - s += ","; - s += mowCurrLP; - s += ","; - s += motorLeftCurrLP; - s += ","; - s += motorRightCurrLP; - s += ","; - s += batteryTemp; - cmdAnswer(s); -} - - -// process request -void processCmd(bool checkCrc){ - cmdResponse = ""; - if (cmd.length() < 4) return; - byte expectedCrc = 0; - int idx = cmd.lastIndexOf(','); - if (idx < 1){ - if (checkCrc){ -#ifdef DEBUG - CONSOLE.println("CRC ERROR"); -#endif - return; - } - } else { - for (int i=0; i < idx; i++) expectedCrc += cmd[i]; - String s = cmd.substring(idx+1, idx+5); - int crc = strtol(s.c_str(), NULL, 16); - if (expectedCrc != crc){ - if (checkCrc){ -#ifdef DEBUG - CONSOLE.print("CRC ERROR"); - CONSOLE.print(crc,HEX); - CONSOLE.print(","); - CONSOLE.print(expectedCrc,HEX); - CONSOLE.println(); -#endif - return; - } - } else { - // remove CRC - cmd = cmd.substring(0, idx); - //CONSOLE.println(cmd); - } - } - if (cmd[0] != 'A') return; - if (cmd[1] != 'T') return; - if (cmd[2] != '+') return; - if (cmd[3] == 'V') cmdVersion(); - if (cmd[3] == 'M') cmdMotor(); - if (cmd[3] == 'S') cmdSummary(); - if (cmd[3] == 'Y') { - if (cmd.length() <= 4){ - cmdTriggerWatchdog(); // for developers - } else { - //if (cmd[4] == '2') cmdGNSSReboot(); // for developers - //if (cmd[4] == '3') cmdSwitchOffRobot(); // for developers - } - } - -} - - -// process console input -void processConsole(){ - char ch; - if (CONSOLE.available()) { - unsigned long timeout = millis() + 10; - //battery.resetIdle(); - while ( (CONSOLE.available()) && (millis() < timeout) ){ - ch = CONSOLE.read(); - if ((ch == '\r') || (ch == '\n')) { -#ifdef DEBUG - CONSOLE.println(cmd); -#endif - processCmd(true); - CONSOLE.print(cmdResponse); - cmd = ""; - } else if (cmd.length() < 500){ - cmd += ch; - } - } - } - if (CONSOLE2.available()) { - unsigned long timeout = millis() + 10; - //battery.resetIdle(); - while ( (CONSOLE2.available()) && (millis() < timeout) ){ - ch = CONSOLE2.read(); - if ((ch == '\r') || (ch == '\n')) { -#ifdef DEBUG - CONSOLE2.println(cmd); -#endif - processCmd(true); - CONSOLE2.print(cmdResponse); - cmd = ""; - } else if (cmd.length() < 500){ - cmd += ch; - } - } - } -} - - -void printInfo(){ - CONSOLE.print("tim="); - CONSOLE.print(millis() / 1000); - CONSOLE.print(" lps="); - CONSOLE.print(lps); - CONSOLE.print(" bat="); - CONSOLE.print(batVoltage); - CONSOLE.print(" V"); - CONSOLE.print(" chg="); - CONSOLE.print(chgVoltage); - CONSOLE.print(" V/"); - CONSOLE.print(chgCurrent); - CONSOLE.print(" A"); - CONSOLE.print(" mF="); - CONSOLE.print(motorMowFault); - CONSOLE.print(" imp="); - CONSOLE.print(odomTicksLeft); - CONSOLE.print(","); - CONSOLE.print(odomTicksRight); - CONSOLE.print(","); - CONSOLE.print(odomTicksMow); - CONSOLE.print(" "); - CONSOLE.print(" lift="); - CONSOLE.print(liftLeft); - CONSOLE.print(","); - CONSOLE.print(liftRight); - CONSOLE.print(" bum="); - CONSOLE.print(bumperX); - CONSOLE.print(","); - CONSOLE.print(bumperY); - CONSOLE.print(" rain="); - CONSOLE.print(rain); - CONSOLE.print(" ov="); - CONSOLE.print(ovCheck); - CONSOLE.println(); -} - -void writePulse(int pin, int count){ - for (int i=0; i < count; i++){ - digitalWrite(pin, true); - delay(1) ; - digitalWrite(pin, false); - delay(1); - } -} - -void testPins(){ - writePulse(pinKeyStart, 1); - writePulse(pinKeyArea1, 2); - writePulse(pinKeyArea2, 3); - writePulse(pinKeyArea3, 4); - writePulse(pinKeyHome, 5); - writePulse(pinKeyLED, 6); - writePulse(pinKeyLEDStatus, 7); - writePulse(pinKeySafe, 8); -} - - -void loop() { - - if (millis() > nextMotorControlTime){ - nextMotorControlTime = millis() + 20; - motor(); - mower(); - readSensorsHighFrequency(); - } - - if (millis() > motorTimeout){ - leftSpeedSet = 0; - rightSpeedSet = 0; - mowSpeedSet = 0; - //motor(0,0); - //mower(false); - } - - processConsole(); - - if (millis() > nextInfoTime){ - nextInfoTime = millis() + 1000; - #ifdef DEBUG - printInfo(); - #endif - lps = 0; - #ifdef TEST_PINS - testPins(); - #endif - } - - if (millis() > nextBatTime){ - nextBatTime = millis() + 100; - readSensors(); - } - - if (millis() > nextMotorSenseTime){ - nextMotorSenseTime = millis() + 100; - readMotorCurrent(); - } - - if (millis() > motorOverloadTimeout){ - // allow motor to turn on again after timeout - motorOverload = false; - } - - /*if (counter % 2 == 0){ - digitalWrite(pinLoraSCK, HIGH); - digitalWrite(pinLoraMOSI, HIGH); - digitalWrite(pinSCL, HIGH); - } else { - digitalWrite(pinLoraSCK, LOW); - digitalWrite(pinLoraMOSI, LOW); - digitalWrite(pinSCL, LOW); - }*/ - - lps++; - IWatchdog.reload(); -} - - From adc17012c808cfcfa39c596794d8c24624a5e329 Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:56:46 -0400 Subject: [PATCH 04/15] Delete alfred/src directory --- alfred/src/Arduino.h | 228 --- alfred/src/BleUartServer.cpp | 450 ------ alfred/src/BleUartServer.h | 89 -- alfred/src/Bridge.cpp | 34 - alfred/src/Bridge.h | 46 - alfred/src/BridgeClient.cpp | 226 --- alfred/src/BridgeClient.h | 68 - alfred/src/BridgeServer.cpp | 143 -- alfred/src/BridgeServer.h | 64 - alfred/src/BridgeUdp.cpp | 148 -- alfred/src/BridgeUdp.h | 50 - alfred/src/Client.h | 30 - alfred/src/Console.cpp | 75 - alfred/src/Console.h | 35 - alfred/src/EEPROM.h | 134 -- alfred/src/FileIO.cpp | 248 ---- alfred/src/FileIO.h | 110 -- alfred/src/HardwareSerial.h | 36 - alfred/src/IPAddress.cpp | 116 -- alfred/src/IPAddress.h | 64 - alfred/src/LinuxSerial.cpp | 143 -- alfred/src/LinuxSerial.h | 46 - alfred/src/Print.cpp | 232 --- alfred/src/Print.h | 66 - alfred/src/Printable.h | 25 - alfred/src/Process.cpp | 302 ---- alfred/src/Process.h | 76 - alfred/src/SD.h | 17 - alfred/src/SPI.cpp | 129 -- alfred/src/SPI.h | 63 - alfred/src/Server.h | 15 - alfred/src/Stream.cpp | 282 ---- alfred/src/Stream.h | 77 - alfred/src/StringArray.h | 123 -- alfred/src/Udp.h | 58 - alfred/src/WCharacter.h | 135 -- alfred/src/WMath.cpp | 57 - alfred/src/WProgram.h | 1 - alfred/src/WString.cpp | 635 -------- alfred/src/WString.h | 191 --- alfred/src/WiFi.cpp | 408 ----- alfred/src/WiFi.h | 254 ---- alfred/src/Wire.cpp | 191 --- alfred/src/Wire.h | 67 - alfred/src/base64.cpp | 64 - alfred/src/base64.h | 13 - alfred/src/binary.h | 534 ------- alfred/src/ble/att-types.h | 169 --- alfred/src/ble/att.c | 1866 ----------------------- alfred/src/ble/att.h | 101 -- alfred/src/ble/crypto.c | 739 ---------- alfred/src/ble/crypto.h | 55 - alfred/src/ble/gatt-db.c | 2129 --------------------------- alfred/src/ble/gatt-db.h | 281 ---- alfred/src/ble/gatt-helpers.c | 1501 ------------------- alfred/src/ble/gatt-helpers.h | 103 -- alfred/src/ble/gatt-server.c | 1822 ----------------------- alfred/src/ble/gatt-server.h | 50 - alfred/src/ble/io-mainloop.c | 311 ---- alfred/src/ble/io.h | 34 - alfred/src/ble/mainloop-notify.c | 194 --- alfred/src/ble/mainloop-notify.h | 12 - alfred/src/ble/mainloop.c | 321 ---- alfred/src/ble/mainloop.h | 40 - alfred/src/ble/queue.c | 373 ----- alfred/src/ble/queue.h | 51 - alfred/src/ble/timeout-mainloop.c | 79 - alfred/src/ble/timeout.h | 21 - alfred/src/ble/util.c | 1215 --------------- alfred/src/ble/util.h | 181 --- alfred/src/ble/uuid.c | 299 ---- alfred/src/ble/uuid.h | 187 --- alfred/src/cbuf.cpp | 115 -- alfred/src/cbuf.h | 37 - alfred/src/libb64/AUTHORS | 7 - alfred/src/libb64/LICENSE | 29 - alfred/src/libb64/cdecode.c | 99 -- alfred/src/libb64/cdecode.h | 36 - alfred/src/libb64/cencode.c | 102 -- alfred/src/libb64/cencode.h | 39 - alfred/src/pgmspace.h | 24 - alfred/src/stdlib_noniso.cpp | 201 --- alfred/src/stdlib_noniso.h | 30 - alfred/src/utility/debug.h | 73 - alfred/src/utility/util.h | 14 - alfred/src/utility/wl_definitions.h | 51 - alfred/src/utility/wl_types.h | 27 - alfred/src/wiring.c | 57 - alfred/src/wiring_digital.c | 194 --- alfred/src/wiring_int.c | 99 -- alfred/src/wiring_main.cpp | 147 -- alfred/src/wiring_pulse.c | 30 - alfred/src/wiring_pwm.c | 165 --- alfred/src/wiring_shift.c | 55 - alfred/src/wiring_thread.c | 81 - 95 files changed, 20444 deletions(-) delete mode 100644 alfred/src/Arduino.h delete mode 100644 alfred/src/BleUartServer.cpp delete mode 100644 alfred/src/BleUartServer.h delete mode 100644 alfred/src/Bridge.cpp delete mode 100644 alfred/src/Bridge.h delete mode 100644 alfred/src/BridgeClient.cpp delete mode 100644 alfred/src/BridgeClient.h delete mode 100644 alfred/src/BridgeServer.cpp delete mode 100644 alfred/src/BridgeServer.h delete mode 100644 alfred/src/BridgeUdp.cpp delete mode 100644 alfred/src/BridgeUdp.h delete mode 100644 alfred/src/Client.h delete mode 100644 alfred/src/Console.cpp delete mode 100644 alfred/src/Console.h delete mode 100644 alfred/src/EEPROM.h delete mode 100644 alfred/src/FileIO.cpp delete mode 100644 alfred/src/FileIO.h delete mode 100644 alfred/src/HardwareSerial.h delete mode 100644 alfred/src/IPAddress.cpp delete mode 100644 alfred/src/IPAddress.h delete mode 100644 alfred/src/LinuxSerial.cpp delete mode 100644 alfred/src/LinuxSerial.h delete mode 100644 alfred/src/Print.cpp delete mode 100644 alfred/src/Print.h delete mode 100644 alfred/src/Printable.h delete mode 100644 alfred/src/Process.cpp delete mode 100644 alfred/src/Process.h delete mode 100644 alfred/src/SD.h delete mode 100644 alfred/src/SPI.cpp delete mode 100644 alfred/src/SPI.h delete mode 100644 alfred/src/Server.h delete mode 100644 alfred/src/Stream.cpp delete mode 100644 alfred/src/Stream.h delete mode 100644 alfred/src/StringArray.h delete mode 100644 alfred/src/Udp.h delete mode 100644 alfred/src/WCharacter.h delete mode 100644 alfred/src/WMath.cpp delete mode 100644 alfred/src/WProgram.h delete mode 100644 alfred/src/WString.cpp delete mode 100644 alfred/src/WString.h delete mode 100644 alfred/src/WiFi.cpp delete mode 100644 alfred/src/WiFi.h delete mode 100644 alfred/src/Wire.cpp delete mode 100644 alfred/src/Wire.h delete mode 100644 alfred/src/base64.cpp delete mode 100644 alfred/src/base64.h delete mode 100644 alfred/src/binary.h delete mode 100644 alfred/src/ble/att-types.h delete mode 100644 alfred/src/ble/att.c delete mode 100644 alfred/src/ble/att.h delete mode 100644 alfred/src/ble/crypto.c delete mode 100644 alfred/src/ble/crypto.h delete mode 100644 alfred/src/ble/gatt-db.c delete mode 100644 alfred/src/ble/gatt-db.h delete mode 100644 alfred/src/ble/gatt-helpers.c delete mode 100644 alfred/src/ble/gatt-helpers.h delete mode 100644 alfred/src/ble/gatt-server.c delete mode 100644 alfred/src/ble/gatt-server.h delete mode 100644 alfred/src/ble/io-mainloop.c delete mode 100644 alfred/src/ble/io.h delete mode 100644 alfred/src/ble/mainloop-notify.c delete mode 100644 alfred/src/ble/mainloop-notify.h delete mode 100644 alfred/src/ble/mainloop.c delete mode 100644 alfred/src/ble/mainloop.h delete mode 100644 alfred/src/ble/queue.c delete mode 100644 alfred/src/ble/queue.h delete mode 100644 alfred/src/ble/timeout-mainloop.c delete mode 100644 alfred/src/ble/timeout.h delete mode 100644 alfred/src/ble/util.c delete mode 100644 alfred/src/ble/util.h delete mode 100644 alfred/src/ble/uuid.c delete mode 100644 alfred/src/ble/uuid.h delete mode 100644 alfred/src/cbuf.cpp delete mode 100644 alfred/src/cbuf.h delete mode 100644 alfred/src/libb64/AUTHORS delete mode 100644 alfred/src/libb64/LICENSE delete mode 100644 alfred/src/libb64/cdecode.c delete mode 100644 alfred/src/libb64/cdecode.h delete mode 100644 alfred/src/libb64/cencode.c delete mode 100644 alfred/src/libb64/cencode.h delete mode 100644 alfred/src/pgmspace.h delete mode 100644 alfred/src/stdlib_noniso.cpp delete mode 100644 alfred/src/stdlib_noniso.h delete mode 100644 alfred/src/utility/debug.h delete mode 100644 alfred/src/utility/util.h delete mode 100644 alfred/src/utility/wl_definitions.h delete mode 100644 alfred/src/utility/wl_types.h delete mode 100644 alfred/src/wiring.c delete mode 100644 alfred/src/wiring_digital.c delete mode 100644 alfred/src/wiring_int.c delete mode 100644 alfred/src/wiring_main.cpp delete mode 100644 alfred/src/wiring_pulse.c delete mode 100644 alfred/src/wiring_pwm.c delete mode 100644 alfred/src/wiring_shift.c delete mode 100644 alfred/src/wiring_thread.c diff --git a/alfred/src/Arduino.h b/alfred/src/Arduino.h deleted file mode 100644 index da2301e87..000000000 --- a/alfred/src/Arduino.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef Arduino_h -#define Arduino_h - -#define ARDUINO 2000 - -#include -#include -#include -#include - -#include -#include -#include "pgmspace.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -typedef void * PTHREAD; -#define PWM_RANGE 0xFF -#define PINS_COUNT 100 - -#define A0 100 -#define A1 101 -#define A2 102 -#define A3 103 -#define A4 104 -#define A5 105 -#define A6 106 -#define A7 107 -#define A8 108 -#define A9 109 -#define A10 110 -#define A11 111 -#define A12 112 -#define A13 113 -#define A14 114 -#define A15 115 - -void yield(void); - -#define HIGH 0x1 -#define LOW 0x0 - -#define INPUT 0x0 -#define OUTPUT 0x1 -#define ALT0 0x04 -#define ALT1 0x05 -#define ALT2 0x06 -#define ALT3 0x07 -#define ALT4 0x03 -#define ALT5 0x02 -#define INPUT_PULLUP 0x10 -#define INPUT_PULLDOWN 0x20 - -#define PI 3.1415926535897932384626433832795 -#define HALF_PI 1.5707963267948966192313216916398 -#define TWO_PI 6.283185307179586476925286766559 -#define DEG_TO_RAD 0.017453292519943295769236907684886 -#define RAD_TO_DEG 57.295779513082320876798154814105 -#define EULER 2.718281828459045235360287471352 - -#define SERIAL 0x0 -#define DISPLAY 0x1 - -#define LSBFIRST 0 -#define MSBFIRST 1 - -#define CHANGE 3 -#define FALLING 1 -#define RISING 2 - -// undefine stdlib's abs if encountered -#ifdef abs -#undef abs -#endif - -#define min(a,b) ((a)<(b)?(a):(b)) -#define max(a,b) ((a)>(b)?(a):(b)) -#define abs(x) ((x)>0?(x):-(x)) -#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) -#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) -#define radians(deg) ((deg)*DEG_TO_RAD) -#define degrees(rad) ((rad)*RAD_TO_DEG) -#define sq(x) ((x)*(x)) - -#define interrupts() -#define noInterrupts() -#define cli() -#define sei() - -#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) -#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) -#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() ) - -#define lowByte(w) ((uint8_t) ((w) & 0xff)) -#define highByte(w) ((uint8_t) ((w) >> 8)) - -#define bitRead(value, bit) (((value) >> (bit)) & 0x01) -#define bitSet(value, bit) ((value) |= (1UL << (bit))) -#define bitClear(value, bit) ((value) &= ~(1UL << (bit))) -#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) - -// avr-libc defines _NOP() since 1.6.2 -#ifndef _NOP -#define _NOP() do {} while (0) -#endif - -#define __no_operation _NOP - -#define SERIAL_BUFFER_SIZE 4096 - -#define bit(b) (1UL << (b)) - -//#ifdef __arm__ -// #define micros() (unsigned long)(STCV) -// #define millis() (unsigned long)(STCV / 1000) -//#else - unsigned long micros(); - unsigned long millis(); -//#endif - -typedef unsigned int word; -typedef uint8_t boolean; -typedef uint8_t byte; - -//under millisecond delayMicroseconds halts the CPU -void delayMicroseconds(uint32_t m); -void delay(uint32_t m); -void sleepMicroseconds(uint32_t m); - -void pinMode(uint8_t, uint8_t); -void digitalWrite(uint8_t, uint8_t);//47.5ns direct register write takes 23ns -int digitalRead(uint8_t);//110ns direct register read takes 74ns -int digitalPinToInterrupt(uint8_t ); - -//those return nothing and are here for compatibility -//ToDo: make them rewritable -int analogRead(uint8_t pin); -void analogReference(uint8_t mode); -void analogReadResolution(uint8_t res); - - -//DIV = 19200000 / (FREQ * RANGE) -uint32_t analogWriteSetup(uint32_t freq, uint32_t range);//returns the frequency achieved -void analogWrite(uint8_t, uint16_t);//500ns direct register write takes 23ns rest is pin mode and channel enable - -unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); - -void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); -uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); - -//Interrupt check is called every 200us or so -typedef void (*voidFuncPtr)(void); -void attachInterrupt(uint8_t, voidFuncPtr, int mode); -void detachInterrupt(uint8_t); - -void setup(void); -void loop(void); - -int init(void); -void uninit(void); - -void watchdogReset(void); -void watchdogEnable(uint32_t ms); - - -//Pi Specific -//I2C0 ID_SC/ID_SD -void ids_begin(void); -void ids_end(void); -void ids_set_freq(uint32_t frequency); -uint8_t ids_write(uint8_t address, uint8_t * buf, uint32_t len); -uint8_t ids_read(uint8_t address, uint8_t* buf, uint32_t len); - -//Call this and the sketch will quit once the loop has returned -void request_sketch_terminate(); - -//Threads -typedef void *(*thread_fn)(void *); -void thread_yield(); -pthread_t thread_self(); -pthread_t thread_create(thread_fn fn, void * arg); -int thread_set_name(pthread_t t, const char *name); -int thread_set_priority(const int pri); -int thread_detach(pthread_t t); -int thread_terminate(pthread_t t); -uint8_t thread_running(pthread_t t); -uint8_t thread_equals(pthread_t t); -void thread_lock(int index); -void thread_unlock(int index); -#define yield() thread_yield() - -//ToDo: move this to separate(private) header to be included only where necessary -void uart_check_fifos(); - -#ifdef __cplusplus -} // extern "C" -#endif - -#ifdef __cplusplus -#include "WCharacter.h" -#include "WString.h" -#include "HardwareSerial.h" -#include "Console.h" - -uint16_t makeWord(uint16_t w); -uint16_t makeWord(byte h, byte l); - -#define word(...) makeWord(__VA_ARGS__) - -unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L); - -// WMath prototypes -long random(long); -long random(long, long); -void randomSeed(unsigned long); -long map(long, long, long, long, long); - -String shellExec(const char *cmd, int *result); -#endif - -//#include "Console.h" -#include "binary.h" -//#include "pins_arduino.h" - -#endif - \ No newline at end of file diff --git a/alfred/src/BleUartServer.cpp b/alfred/src/BleUartServer.cpp deleted file mode 100644 index 1e30eafe0..000000000 --- a/alfred/src/BleUartServer.cpp +++ /dev/null @@ -1,450 +0,0 @@ -#include "BleUartServer.h" - -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include - -extern "C" { - #include - #include - #include - #include - - #include "ble/uuid.h" - #include "ble/mainloop.h" - #include "ble/util.h" - #include "ble/att.h" - #include "ble/queue.h" - #include "ble/timeout.h" - #include "ble/gatt-db.h" - #include "ble/gatt-server.h" -} - -#include - - -#define ATT_CID 4 - -#define UUID_CUSTOM_SERVICE "0000ffe0-0000-1000-8000-00805f9b34fb" // serv: custom service -#define UUID_CUSTOM_CHAR "0000ffe1-0000-1000-8000-00805f9b34fb" // char: custom char (props: read, write, notify, write_no_respons) - - - -#define PRLOG(...) \ - do { \ - ::printf(__VA_ARGS__); \ - print_prompt(); \ - } while (0) - - -#define COLOR_OFF "\x1B[0m" -#define COLOR_RED "\x1B[0;91m" -#define COLOR_GREEN "\x1B[0;92m" -#define COLOR_YELLOW "\x1B[0;93m" -#define COLOR_BLUE "\x1B[0;94m" -#define COLOR_MAGENTA "\x1B[0;95m" -#define COLOR_BOLDGRAY "\x1B[1;30m" -#define COLOR_BOLDWHITE "\x1B[1;37m" - - -#ifndef __arm__ - int ba2str(const bdaddr_t *ba, char *str){ - ::printf("WARN: using ba2str dummy!\n"); - return 0; - } -#endif - -void *bleThreadFun(void *user_data) -{ - BleUartServer *server = (BleUartServer*)user_data; - while (true){ - server->run(); - } - return NULL; -} - -static void print_prompt(void) -{ - ::printf(COLOR_BLUE "[GATT server]" COLOR_OFF "# "); - fflush(stdout); -} - -static void att_debug_cb(const char *str, void *user_data) -{ - const char *prefix = (const char*)user_data; - PRLOG(COLOR_BOLDGRAY "%s" COLOR_BOLDWHITE "%s\n" COLOR_OFF, prefix, str); -} - -static void gatt_debug_cb(const char *str, void *user_data) -{ - const char *prefix = (const char*)user_data; - PRLOG(COLOR_GREEN "%s%s\n" COLOR_OFF, prefix, str); -} - -static void att_disconnect_cb(int err, void *user_data) -{ - ::printf("BLE: Device disconnected: %s\n", strerror(err)); - mainloop_quit(); -} - -static void signal_cb(int signum, void *user_data) -{ - switch (signum) { - case SIGINT: - case SIGTERM: - mainloop_quit(); - break; - default: - break; - } -} - - -// client read operation -static void msrmt_ccc_read_cb(struct gatt_db_attribute *attrib, - unsigned int id, uint16_t offset, - uint8_t opcode, struct bt_att *att, - void *user_data) -{ - ::printf("BLE: msrmt_ccc_read_cb id=%d ofs=%d\n", id, offset); - BleUartServer *server = (BleUartServer*)user_data; - //#define VALUE "V,sunray,1.0,0x10" - //gatt_db_attribute_read_result(attrib, id, 0, VALUE, strlen(VALUE)); - uint8_t value[2]; - value[0] = server->msrmt_enabled ? 0x01 : 0x00; - value[1] = 0x00; - gatt_db_attribute_read_result(attrib, id, 0, value, 2); -} - - -// client write operation -static void msrmt_ccc_write_cb(struct gatt_db_attribute *attrib, - unsigned int id, uint16_t offset, - const uint8_t *value, size_t len, - uint8_t opcode, struct bt_att *att, - void *user_data) -{ - BleUartServer *server = (BleUartServer*)user_data; - pthread_mutex_lock( &server->rxMutex ); - uint8_t ecode = 0; - //::printf("BLE: msrmt_ccc_write_cb len=%d\n", len); - if (len == 2){ - if (value[0] == 0x00){ - server->msrmt_enabled = false; - ::printf("BLE: notify off\n"); - } else if (value[0] == 0x01) { - ::printf("BLE: notify on\n"); - server->msrmt_enabled = true; - } - //update_hr_msrmt_simulation(server); - } else { - for (int i=0; i < len; i++){ - if ( ((server->rxWritePos +1) % BLE_BUF_SZ) == server->rxReadPos){ - ::printf("BLE: rxBuf overflow!\n"); - break; - } - server->rxBuf[server->rxWritePos] = value[i]; // push it to the ring buffer - server->rxWritePos = (server->rxWritePos + 1) % BLE_BUF_SZ; - } - } - gatt_db_attribute_write_result(attrib, id, ecode); - pthread_mutex_unlock( &server->rxMutex ); -} - - -bool BleUartServer::begin(){ - ::printf("BLE: begin\n"); - return true; -} - -bool BleUartServer::begin(int baudrate){ - return begin(); -} - -void BleUartServer::end(){ -} - -int BleUartServer::available(){ - pthread_mutex_lock( &rxMutex ); - int i = 0; - int pos = rxReadPos; - while (pos != rxWritePos){ - i++; - pos = (pos + 1) % BLE_BUF_SZ; - } - pthread_mutex_unlock( &rxMutex ); - return i; -} - -int BleUartServer::peek(){ - return 0; -} - -int BleUartServer::read(){ - pthread_mutex_lock( &rxMutex ); - int value = 0; - if (rxReadPos != rxWritePos){ - value = rxBuf[rxReadPos]; - rxReadPos = (rxReadPos + 1) % BLE_BUF_SZ; - } - pthread_mutex_unlock( &rxMutex ); - return value; -} - -void BleUartServer::flush(){ - //console_flush(); -} - - -static void destroy_packet_cb(void *user_data){ - BleUartServer *server = (BleUartServer*)user_data; - server->notify(); -} - - -size_t BleUartServer::write(uint8_t c){ - pthread_mutex_lock( &txMutex ); - if ( ((txWritePos +1) % BLE_BUF_SZ) == txReadPos){ - ::printf("BLE: txBuf overflow!\n"); - return 0; - } - txBuf[txWritePos] = c; // push it to the ring buffer - txWritePos = (txWritePos + 1) % BLE_BUF_SZ; - pthread_mutex_unlock( &txMutex ); - if (char(c) == '\n'){ - notify(); - } - return 1; -} - -void BleUartServer::notify(){ - pthread_mutex_lock( &txMutex ); - String s = ""; - int maxLen = 16; //bt_att_get_mtu(att) - 1; - while (txReadPos != txWritePos){ - s = s + char(txBuf[txReadPos]); - txReadPos = (txReadPos + 1) % BLE_BUF_SZ; - if (s.length() >= maxLen) break; - } - if ((s.length() > 0) && (msrmt_enabled)) { - //::printf("BLE: write %d\n", s.length()); - // https://stackoverflow.com/questions/35200626/how-do-i-send-a-long-notification-with-bluez-example - bt_gatt_server_send_notification(gatt, msrmt_handle, (const uint8_t*)s.c_str(), s.length(), false, this, destroy_packet_cb); - } - pthread_mutex_unlock( &txMutex ); -} - - - -void BleUartServer::populateUartService() -{ - bt_uuid_t uuid; - - /* Add Uart Service */ - //bt_uuid16_create(&uuid, UUID_CUSTOM_SERVICE); - bt_string_to_uuid(&uuid, UUID_CUSTOM_SERVICE); - service = gatt_db_add_service(db, &uuid, true, 16); - handle = gatt_db_attribute_get_handle(service); - - /* - * Uart Characteristic. - */ - //bt_uuid16_create(&uuid, UUID_CUSTOM_CHAR); - bt_string_to_uuid(&uuid, UUID_CUSTOM_CHAR); - msrmt = gatt_db_service_add_characteristic(service, &uuid, - BT_ATT_PERM_READ | BT_ATT_PERM_WRITE , - BT_GATT_CHRC_PROP_READ | BT_GATT_CHRC_PROP_WRITE | BT_GATT_CHRC_PROP_NOTIFY | BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP, - msrmt_ccc_read_cb, msrmt_ccc_write_cb, this); - - msrmt_handle = gatt_db_attribute_get_handle(msrmt); - - bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID); - gatt_db_service_add_descriptor(service, &uuid, - BT_ATT_PERM_READ | BT_ATT_PERM_WRITE, - msrmt_ccc_read_cb, - msrmt_ccc_write_cb, this); - - gatt_db_service_set_active(service, true); -} - - - -void BleUartServer::populateDb(){ - //populateGapService(); - //populateGattService(); - populateUartService(); -} - -bool BleUartServer::listen() -{ - ::printf("BLE: listen\n"); - int sk, nsk; - struct sockaddr_l2 srcaddr, addr; - socklen_t optlen; - struct bt_security btsec; - char ba[18]; - - sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP); - if (sk < 0) { - perror("BLE: Failed to create L2CAP socket"); - return false; - } - - /* Set up source address */ - memset(&srcaddr, 0, sizeof(srcaddr)); - srcaddr.l2_family = AF_BLUETOOTH; - srcaddr.l2_cid = htobs(ATT_CID); - srcaddr.l2_bdaddr_type = src_type; - bacpy(&srcaddr.l2_bdaddr, &src_addr); - - if (bind(sk, (struct sockaddr *) &srcaddr, sizeof(srcaddr)) < 0) { - perror("BLE: Failed to bind L2CAP socket"); - goto fail; - } - - /* Set the security level */ - memset(&btsec, 0, sizeof(btsec)); - btsec.level = sec; - if (setsockopt(sk, SOL_BLUETOOTH, BT_SECURITY, &btsec, - sizeof(btsec)) != 0) { - ::printf("BLE: Failed to set L2CAP security level\n"); - goto fail; - } - - if (::listen(sk, 10) < 0) { - perror("BLE: Listening on socket failed"); - goto fail; - } - - ::printf("BLE: Started listening on ATT channel. Waiting for connections\n"); - - memset(&addr, 0, sizeof(addr)); - optlen = sizeof(addr); - nsk = accept(sk, (struct sockaddr *) &addr, &optlen); - if (nsk < 0) { - perror("BLE: Accept failed"); - goto fail; - } - - ba2str(&addr.l2_bdaddr, ba); - ::printf("BLE: Connect from %s\n", ba); - close(sk); - fd = nsk; - return true; - -fail: - close(sk); - return false; -} - - - -bool BleUartServer::createGattServer() -{ - ::printf("BLE: createGattServer\n"); - - att = bt_att_new(fd, false); - if (!att) { - ::printf("BLE: Failed to initialze ATT transport layer\n"); - goto fail; - } - - if (!bt_att_set_close_on_unref(att, true)) { - ::printf("BLE: Failed to set up ATT transport layer\n"); - goto fail; - } - - if (!bt_att_register_disconnect(att, att_disconnect_cb, NULL, NULL)) { - ::printf("BLE: Failed to set ATT disconnect handler\n"); - goto fail; - } - - db = gatt_db_new(); - if (!db) { - ::printf("BLE: Failed to create GATT database\n"); - goto fail; - } - - gatt = bt_gatt_server_new(db, att, mtu, 0); - if (!gatt) { - ::printf("BLE: Failed to create GATT server\n"); - goto fail; - } - - if (verbose) { - ::printf("BLE: verbose\n"); - bt_att_set_debug(att, BT_ATT_DEBUG_VERBOSE, att_debug_cb, (void*)"att: ", NULL); - bt_gatt_server_set_debug(gatt, gatt_debug_cb, (void*)"server: ", NULL); - } - - /* bt_gatt_server already holds a reference */ - populateDb(); - - return true; - -fail: - gatt_db_unref(db); - bt_att_unref(att); - return false; -} - -void BleUartServer::destroyGattServer() -{ - ::printf("BLE: destroyGattServer\n"); - bt_gatt_server_unref(gatt); - gatt_db_unref(db); -} - - -void BleUartServer::run(){ - ::printf("BLE: run\n"); - rxWritePos = rxReadPos = 0; // initialize the circular buffer - txWritePos = txReadPos = 0; // initialize the circular buffer - msrmt_enabled = false; - verbose = false; - mtu = 0; - sec = BT_SECURITY_LOW; - src_type = BDADDR_LE_PUBLIC; - bdaddr_t bdaddr_any = {{0, 0, 0, 0, 0, 0}}; - bacpy(&src_addr, &bdaddr_any); - ::printf("BLE: l2cap le att listen and accept\n"); - if (!listen()){ - ::printf("BLE: Failed to accept L2CAP ATT connection\n"); - return; - } - mainloop_init(); - if (!createGattServer()){ - ::printf("BLE: no server\n"); - close(fd); - return; - } - ::printf("BLE: Running GATT server\n"); - print_prompt(); - mainloop_run_with_signal(signal_cb, NULL); - ::printf("BLE: Shutting down...\n"); - destroyGattServer(); -} - -BleUartServer::BleUartServer(){ - //printf("Before Thread\n"); - txMutex = PTHREAD_MUTEX_INITIALIZER; - rxMutex = PTHREAD_MUTEX_INITIALIZER; - pthread_create(&thread_id, NULL, bleThreadFun, (void*)this); - //pthread_join(thread_id, NULL); - //printf("After Thread\n"); -}; - - -//BleUartServer BLE; - - - - diff --git a/alfred/src/BleUartServer.h b/alfred/src/BleUartServer.h deleted file mode 100644 index adad0af33..000000000 --- a/alfred/src/BleUartServer.h +++ /dev/null @@ -1,89 +0,0 @@ -// -// BLE GATT server offering UART service - - -#ifndef BLE_UART_SERVER_H -#define BLE_UART_SERVER_H - -#include -#include -#include -#include -#include - -#include "Stream.h" -#include "HardwareSerial.h" - -extern "C" { - #include - #include - #include - #include - - #include "ble/uuid.h" - #include "ble/mainloop.h" - //#include "ble/util.h" - //#include "ble/att.h" - //#include "ble/queue.h" - #include "ble/timeout.h" - #include "ble/gatt-db.h" - #include "ble/gatt-server.h" -} - -#define BLE_BUF_SZ 8192 - -class BleUartServer: public HardwareSerial{ - protected: - bool verbose; - int fd; - uint16_t mtu; - struct bt_att *att; - struct gatt_db *db; - struct bt_gatt_server *gatt; - int sec; - uint8_t src_type; - bdaddr_t src_addr; - uint16_t handle; - struct gatt_db_attribute *service; - struct gatt_db_attribute *msrmt; - uint16_t msrmt_handle; - pthread_t thread_id; - virtual void populateUartService(); - virtual void populateDb(); - virtual bool listen(); - virtual bool createGattServer(); - virtual void destroyGattServer(); - public: - int rxReadPos; - int rxWritePos; - int txReadPos; - int txWritePos; - byte rxBuf[BLE_BUF_SZ]; - byte txBuf[BLE_BUF_SZ]; - bool msrmt_enabled; - pthread_mutex_t txMutex; - pthread_mutex_t rxMutex; - - BleUartServer(); - virtual ~BleUartServer() { end(); }; - virtual bool begin(); - virtual bool begin(int baudrate); - virtual void end(); - virtual void run(); - virtual void notify(); - - virtual int available(); - virtual int read(); - virtual int peek(); - virtual void flush(); - - virtual size_t write(const uint8_t c) override; - - using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { return true; } -}; - -//extern BleUartServer BLE; - - -#endif diff --git a/alfred/src/Bridge.cpp b/alfred/src/Bridge.cpp deleted file mode 100644 index d58184d56..000000000 --- a/alfred/src/Bridge.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright (c) 2013 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "Bridge.h" - -BridgeClass::BridgeClass(Stream &_stream){} - -void BridgeClass::begin() {} - -void BridgeClass::put(const char *key, const char *value) {} - -unsigned int BridgeClass::get(const char *key, uint8_t *value, unsigned int maxlen) { - return 0; -} - -void checkForRemoteSketchUpdate(uint8_t pin) {} - -SerialBridgeClass Bridge(Serial); - diff --git a/alfred/src/Bridge.h b/alfred/src/Bridge.h deleted file mode 100644 index cca62f2fe..000000000 --- a/alfred/src/Bridge.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Arduino bridge -*/ - -#ifndef BRIDGE_H_ -#define BRIDGE_H_ - -#include -#include - -class BridgeClass { - public: - BridgeClass(Stream &_stream); - void begin(); - - // Methods to handle key/value datastore - void put(const char *key, const char *value); - void put(const String &key, const String &value){ - put(key.c_str(), value.c_str()); - } - unsigned int get(const char *key, uint8_t *buff, unsigned int size); - unsigned int get(const char *key, char *value, unsigned int maxlen){ - return get(key, reinterpret_cast(value), maxlen); - } - uint16_t getBridgeVersion(){ - return 0; - } -}; - -// This subclass uses a serial port Stream -class SerialBridgeClass : public BridgeClass { - public: - SerialBridgeClass(Stream &_serial) : BridgeClass(_serial) { - // Empty - } - void begin(unsigned long baudrate=0) { - BridgeClass::begin(); - } -}; - -extern SerialBridgeClass Bridge; -extern void checkForRemoteSketchUpdate(uint8_t pin=0); - -#endif /* BRIDGE_H_ */ - -#include -#include diff --git a/alfred/src/BridgeClient.cpp b/alfred/src/BridgeClient.cpp deleted file mode 100644 index e31fa40ad..000000000 --- a/alfred/src/BridgeClient.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - Client.h - Client class for Raspberry Pi - Copyright (c) 2016 Hristo Gochkov All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - - - -#include -#include -#include -#include -#include -#include "BridgeClient.h" -#include "BridgeServer.h" -#include "Console.h" - -int sock_connect(int fd, struct sockaddr *addr, size_t len){ - return connect(fd, addr, len); -} - -/* -int sock_write(int fd, void *data, size_t len){ - return write(fd, data, len); -} -*/ - -int sock_read(int fd, void *data, size_t len){ - return read(fd, data, len); -} - -BridgeClient::~BridgeClient(){ - //if (sockfd < 0) return; - //Serial.printf("discard client fd=%d\n", sockfd); - //stop(); - //if(sockfd) close(sockfd); -} - -int BridgeClient::connect(IPAddress ip, uint16_t port){ - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0){ - Serial.println("client connect error - no socket"); - return 0; - } - uint32_t ip_addr = ip; - struct sockaddr_in serveraddr; - bzero((char *) &serveraddr, sizeof(serveraddr)); - serveraddr.sin_family = AF_INET; - bcopy((const void *)(&ip_addr), (void *)&serveraddr.sin_addr.s_addr, 4); - serveraddr.sin_port = htons(port); - setTimeout(500 * 1000); // 500ms timeout - if (sock_connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0){ - Serial.println("client connect error"); - return 0; - } - Serial.printf("client connected fd=%d\n", sockfd); - _connected = true; - return 1; -} - -int BridgeClient::connect(const char *host, uint16_t port){ - // cache server resolution - if (server == NULL) { - server = gethostbyname(host); - if (server == NULL){ - Serial.println("client connect error - no server"); - return 0; - } - } - return connect(IPAddress((const uint8_t *)(server->h_addr)), port); -} - -int BridgeClient::setSocketOption(int option, char* value, size_t len){ - return setsockopt(sockfd, SOL_SOCKET, option, value, len); -} - -int BridgeClient::setTimeout(uint32_t useconds){ - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = useconds; - if(setSocketOption(SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0){ - Serial.println("client set timeout error"); - return -1; - } - return setSocketOption(SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval)); -} - -int BridgeClient::setOption(int option, int *value){ - return setsockopt(sockfd, IPPROTO_TCP, option, (char *)value, sizeof(int)); -} - -int BridgeClient::getOption(int option, int *value){ - socklen_t size = sizeof(int); - return getsockopt(sockfd, IPPROTO_TCP, option, (char *)value, &size); -} - -int BridgeClient::setNoDelay(bool nodelay){ - int flag = nodelay; - return setOption(TCP_NODELAY, &flag); -} - -bool BridgeClient::getNoDelay(){ - int flag = 0; - getOption(TCP_NODELAY, &flag); - return flag; -} - -size_t BridgeClient::write(uint8_t data){ - return write(&data, 1); -} - -size_t BridgeClient::write(const uint8_t *buf, size_t size){ - if(!_connected) { - Serial.println("client write error - not connected"); - return 0; - } - //Serial.printf("client write fd %d size %d\n", sockfd, size); - int res = send(sockfd, (void*)buf, size, MSG_DONTWAIT | MSG_NOSIGNAL); - if(res < 0){ - Serial.println("client write error"); - _connected = false; - res = 0; - } - return res; -} - -int BridgeClient::read(){ - uint8_t data = 0; - //Serial.println("read"); - int res = read(&data, 1); - if(res < 0){ - Serial.println("client read error"); - return res; - } - return data; -} - -int BridgeClient::read(uint8_t *buf, size_t size){ - // Serial.printf("client fd=%d read size %d\n", sockfd, size); - if(!_connected) { - //Serial.println("not connected"); - Serial.printf("client fd=%d read error - not connected\n", sockfd); - return -1; - } - //Serial.printf("sock read %d\n", size); - int res = sock_read(sockfd, 0, 0); - //Serial.printf("sock read %d (%d)\n", res, size); - if(size && res == 0 && available()){ - //Serial.println("recv...\n"); - res = recv(sockfd, buf, size, MSG_DONTWAIT | MSG_NOSIGNAL); - //Serial.printf("recv size %d (%d)\n", res, size); - } - if(res < 0){ - Serial.printf("client fd=%d sock/recv error\n", sockfd); - _connected = false; - } - return res; -} - -int BridgeClient::available(){ - int count = 0; - ioctl(sockfd, FIONREAD, &count); - //Serial.printf("available %d\n", count); - return count; -} - -void BridgeClient::stop(){ - if(sockfd >= 0){ - close(sockfd); - //Serial.printf("stopped client fd=%d\n", sockfd); - sockfd = -1; - } - _connected = false; -} - -uint8_t BridgeClient::connected(){ - if (sockfd < 0 ) return 0; - if(!_connected){ - Serial.print("connected? client not connected - fd="); - Serial.println(sockfd); - return 0; - } - read(0,0); - return _connected; -} - -IPAddress BridgeClient::remoteIP(int fd){ - struct sockaddr_storage addr; - socklen_t len = sizeof addr; - getpeername(fd, (struct sockaddr*)&addr, &len); - struct sockaddr_in *s = (struct sockaddr_in *)&addr; - return IPAddress((uint32_t)(s->sin_addr.s_addr)); -} - -uint16_t BridgeClient::remotePort(int fd){ - struct sockaddr_storage addr; - socklen_t len = sizeof addr; - getpeername(fd, (struct sockaddr*)&addr, &len); - struct sockaddr_in *s = (struct sockaddr_in *)&addr; - return ntohs(s->sin_port); -} - -IPAddress BridgeClient::remoteIP(){ - return remoteIP(sockfd); -} - -uint16_t BridgeClient::remotePort(){ - return remotePort(sockfd); -} - -bool BridgeClient::operator==(const BridgeClient& rhs) { - return sockfd == rhs.sockfd && remotePort(sockfd) == remotePort(rhs.sockfd) && remoteIP(sockfd) == remoteIP(rhs.sockfd); -} diff --git a/alfred/src/BridgeClient.h b/alfred/src/BridgeClient.h deleted file mode 100644 index 627325a0e..000000000 --- a/alfred/src/BridgeClient.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - Client.h - Base class that provides Client -*/ - -#ifndef pi_client_h -#define pi_client_h - -#include "Arduino.h" -#include "Client.h" - -class BridgeServer; - -class BridgeClient : public Client { - protected: - int sockfd; - bool _connected; - BridgeServer *bridgeServer; - struct hostent *server; - public: - BridgeClient *next; - BridgeClient():bridgeServer(NULL), sockfd(-1),_connected(false),next(NULL),server(NULL){} - BridgeClient(BridgeServer *aServer):bridgeServer(aServer), sockfd(-1),_connected(false),next(NULL),server(NULL){} - BridgeClient(BridgeServer *aServer, int fd):bridgeServer(aServer), sockfd(fd),_connected(true),next(NULL),server(NULL){ - //Serial.print("new client fd="); - //Serial.print(sockfd); - //Serial.print(" connected="); - //Serial.println(_connected); - } - ~BridgeClient(); - virtual int connect(IPAddress ip, uint16_t port); - virtual int connect(const char *host, uint16_t port); - virtual size_t write(uint8_t data); - virtual size_t write(const uint8_t *buf, size_t size); - virtual int available(); - virtual int read(); - virtual int read(uint8_t *buf, size_t size); - virtual int peek(){return 0;} - virtual void flush(){} - virtual void stop(); - virtual uint8_t connected(); - virtual operator bool(){ return connected(); } - virtual bool operator==(const bool value) { return bool() == value; } - virtual bool operator!=(const bool value) { return bool() != value; } - virtual bool operator==(const BridgeClient&); - virtual bool operator!=(const BridgeClient& rhs) { return !this->operator==(rhs); }; - - int fd(){return sockfd;} - IPAddress remoteIP(); - uint16_t remotePort(); - int setSocketOption(int option, char* value, size_t len); - int setOption(int option, int *value); - int getOption(int option, int *value); - int setTimeout(uint32_t seconds); - int setNoDelay(bool nodelay); - bool getNoDelay(); - - static IPAddress remoteIP(int fd); - static uint16_t remotePort(int fd); - - friend class BridgeServer; - using Print::write; -}; - -#define WiFiEspClient BridgeClient -#define WiFiClient BridgeClient - -#endif - diff --git a/alfred/src/BridgeServer.cpp b/alfred/src/BridgeServer.cpp deleted file mode 100644 index 105a0894f..000000000 --- a/alfred/src/BridgeServer.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - Server.h - Server class for Raspberry Pi - Copyright (c) 2016 Hristo Gochkov All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include -#include -#include -#include -#include -#include -#include "BridgeServer.h" -#include "Console.h" - -#define MAXEVENTS 64 - -// Asynchronous socket server - accepting multiple clients concurrently, -// multiplexing the connections with epoll -// https://github.com/eliben/code-for-blog/blob/master/2017/async-socket-server/epoll-server.c - - -void *serverThreadFun(void *user_data) -{ - BridgeServer *server = (BridgeServer*)user_data; - while (true){ - server->run(); - //usleep(300); - } - return NULL; -} - - -int BridgeServer::setSocketOption(int option, char* value, size_t len){ - return setsockopt(sockfd, SOL_SOCKET, option, value, len); -} - -int BridgeServer::setTimeout(uint32_t seconds){ - struct timeval tv; - tv.tv_sec = seconds; - tv.tv_usec = 0; - if(setSocketOption(SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0) - return -1; - return setSocketOption(SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval)); -} - -size_t BridgeServer::write(const uint8_t *data, size_t len){ - return 0; -} - -void BridgeServer::stopAll(){ - Serial.println("server stopAll"); -} - -void BridgeServer::run(){ - struct sockaddr_in _client; - int cs = sizeof(struct sockaddr_in); - int sock = ::accept(sockfd, (struct sockaddr *)&_client, (socklen_t*)&cs); - pthread_mutex_lock( &eventsMutex ); - clientSock = sock; - pthread_mutex_unlock( &eventsMutex ); -} - - -BridgeClient BridgeServer::available(){ - if(!_listening){ - Serial.println("available(): not listening"); - return BridgeClient(); - } - - pthread_mutex_lock( &eventsMutex ); - int sock = clientSock; - clientSock = -1; - pthread_mutex_unlock( &eventsMutex ); - - if (sock < 0){ - return BridgeClient(); // no client - } - - //Serial.println("server accepting"); - BridgeClient *client = new BridgeClient(this, sock); - - return *client; // NOTE: THIS RETURNS A COPY! -} - - -void BridgeServer::begin(){ - clients=0; - clientSock=-1; - Serial.printf("server begin port %d\n", _port); - if(_listening) - return; - struct sockaddr_in server; - sockfd = socket(AF_INET , SOCK_STREAM, 0); - Serial.printf("sockfd=%d\n", sockfd); - if (sockfd < 0){ - Serial.println("socket error"); - return; - } - // connection will close immediately after closing the program; and next restart will be able to bind again. - // https://stackoverflow.com/questions/24194961/how-do-i-use-setsockoptso-reuseaddr - linger lin; - lin.l_onoff = 0; - lin.l_linger = 0; - setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (const char *)&lin, sizeof(int)); - - server.sin_family = AF_INET; - server.sin_addr.s_addr = INADDR_ANY; - server.sin_port = htons(_port); - if(bind(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0){ - Serial.printf("bind error port %d\n",_port); - return; - } - if(listen(sockfd , _max_clients) < 0){ - Serial.println("listen error"); - return; - } - - _listening = true; - Serial.println("server listening"); - pthread_create(&thread_id, NULL, serverThreadFun, (void*)this); -} - -void BridgeServer::end(){ - Serial.println("server end"); - stopAll(); - close(sockfd); - sockfd = -1; - _listening = false; -} diff --git a/alfred/src/BridgeServer.h b/alfred/src/BridgeServer.h deleted file mode 100644 index 71606d45f..000000000 --- a/alfred/src/BridgeServer.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - Server.h - Server class for Linux -*/ - -#ifndef pi_server_h -#define pi_server_h - -#include "Arduino.h" -#include "Server.h" -#include "BridgeClient.h" - -#include - - -typedef void(*BridgeServerHandler)(Client&); - -class BridgeServer : public Server { - private: - int sockfd; - int pollfd; - pthread_mutex_t eventsMutex; - int clientSock; - int eventsCount; - pthread_t thread_id; - struct epoll_event *events; - uint16_t _port; - uint8_t _max_clients; - bool _listening; - BridgeServerHandler _cb; - BridgeClient *clients; - - //cleans all disconnected clients - void cleanup(); - int setSocketOption(int option, char* value, size_t len); - public: - void listenOnLocalhost(){} - - BridgeServer(uint16_t port=80, uint8_t max_clients=8):sockfd(-1),pollfd(0),events(NULL),_port(port),_max_clients(max_clients),_listening(false),_cb(NULL),clients(NULL){} - ~BridgeServer(){ end();} - BridgeClient available(); - BridgeClient accept(){return available();} - virtual void begin(); - virtual size_t write(const uint8_t *data, size_t len); - virtual size_t write(uint8_t data){ - return write(&data, 1); - } - using Print::write; - - void end(); - operator bool(){return _listening;} - int setTimeout(uint32_t seconds); - BridgeClient *clientByFd(int fd){ - BridgeClient *c = clients; - while(c != NULL && c->fd() != fd) c = c->next; - return c; - } - void stopAll(); - void run(); -}; - -#define WiFiEspServer BridgeServer - -#endif - diff --git a/alfred/src/BridgeUdp.cpp b/alfred/src/BridgeUdp.cpp deleted file mode 100644 index e0d5b01e7..000000000 --- a/alfred/src/BridgeUdp.cpp +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include -#include - -uint8_t BridgeUDP::begin(uint16_t port){ - if(udp_server) - stop(); - if ((udp_server=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){ - return 0; - } - struct sockaddr_in addr; - memset((char *) &addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr.s_addr = htonl(INADDR_ANY); - if(bind(udp_server , (struct sockaddr*)&addr, sizeof(addr)) == -1){ - udp_server = -1; - return 0; - } - return 1; -} - -void BridgeUDP::stop(){ - if(udp_server == -1) - return; - close(udp_server); - udp_server = -1; -} - -int BridgeUDP::beginPacket(){ - if(!remote_port) - return 0; - buffer_len = 0; - bzero(buffer, 1500); - return 1; -} - -int BridgeUDP::beginPacket(IPAddress ip, uint16_t port){ - remote_ip = ip; - remote_port = port; - return beginPacket(); -} - -int BridgeUDP::beginPacket(const char *host, uint16_t port){ - struct hostent *server; - server = gethostbyname(host); - if (server == NULL) - return 0; - return beginPacket(IPAddress((const uint8_t *)(server->h_addr_list[0])), port); -} - -int BridgeUDP::endPacket(){ - struct sockaddr_in recipient; - recipient.sin_addr.s_addr = (uint32_t)remote_ip; - recipient.sin_family = AF_INET; - recipient.sin_port = htons(remote_port); - return sendto(udp_server, buffer, buffer_len, 0, (struct sockaddr*) &recipient, sizeof(recipient)); -} - -size_t BridgeUDP::write(uint8_t data){ - if(buffer_len == 1500){ - endPacket(); - buffer_len = 0; - bzero(buffer, 1500); - } - buffer[buffer_len++] = data; - return 1; -} - -size_t BridgeUDP::write(const char *buffer){ - return write((const uint8_t*)buffer, strlen(buffer)); -} - - -size_t BridgeUDP::write(const uint8_t *buffer, size_t size){ - size_t i; - for(i=0;iwrite(buf, len); - return len; -} - -int BridgeUDP::available(){ - if(!rx_buffer) return 0; - return rx_buffer->getSize(); -} - -int BridgeUDP::read(){ - if(!rx_buffer) return -1; - int out = rx_buffer->read(); - if(!rx_buffer->getSize()){ - cbuf *b = rx_buffer; - rx_buffer = 0; - delete b; - } - return out; -} - -int BridgeUDP::read(unsigned char* buffer, size_t len){ - return read((char *)buffer, len); -} - -int BridgeUDP::read(char* buffer, size_t len){ - if(!rx_buffer) return 0; - int out = rx_buffer->read(buffer, len); - if(!rx_buffer->getSize()){ - cbuf *b = rx_buffer; - rx_buffer = 0; - delete b; - } - return out; -} - -int BridgeUDP::peek(){ - if(!rx_buffer) return -1; - return rx_buffer->peek(); -} - -void BridgeUDP::flush(){ - cbuf *b = rx_buffer; - rx_buffer = 0; - delete b; -} - -IPAddress BridgeUDP::remoteIP(){ - return remote_ip; -} - -uint16_t BridgeUDP::remotePort(){ - return remote_port; -} diff --git a/alfred/src/BridgeUdp.h b/alfred/src/BridgeUdp.h deleted file mode 100644 index 275e77599..000000000 --- a/alfred/src/BridgeUdp.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef pi_udp_h -#define pi_udp_h - -#include -#include -#include - -class BridgeUDP : public UDP { -private: - int udp_server; - IPAddress multicast_ip; - IPAddress remote_ip; - uint16_t remote_port; - char buffer[1460]; - size_t buffer_len; - cbuf * rx_buffer; -public: - BridgeUDP():udp_server(-1), remote_port(0), buffer_len(0), rx_buffer(0){} - ~BridgeUDP(){ - stop(); - if(rx_buffer) - delete rx_buffer; - } - virtual uint8_t begin(uint16_t); - virtual uint8_t beginMulticast(IPAddress a, uint16_t p){ - multicast_ip = a; - return begin(p); - } - virtual void stop(); - virtual int beginPacket(); - virtual int beginPacket(IPAddress ip, uint16_t port); - virtual int beginPacket(const char *host, uint16_t port); - virtual int endPacket(); - virtual size_t write(uint8_t); - virtual size_t write(const char *buffer); - virtual size_t write(const uint8_t *buffer, size_t size); - virtual int parsePacket(); - virtual int available(); - virtual int read(); - virtual int read(unsigned char* buffer, size_t len); - virtual int read(char* buffer, size_t len); - virtual int peek(); - virtual void flush(); - virtual IPAddress remoteIP(); - virtual uint16_t remotePort(); -}; - -#define WiFiEspUDP BridgeUDP - -#endif diff --git a/alfred/src/Client.h b/alfred/src/Client.h deleted file mode 100644 index 78a3e3b33..000000000 --- a/alfred/src/Client.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Client.h - Base class that provides Client -*/ - -#ifndef client_h -#define client_h -#include "Print.h" -#include "Stream.h" -#include "IPAddress.h" - -class Client : public Stream { - -public: - virtual int connect(IPAddress ip, uint16_t port) =0; - virtual int connect(const char *host, uint16_t port) =0; - virtual size_t write(uint8_t) =0; - virtual size_t write(const uint8_t *buf, size_t size) =0; - virtual int available() = 0; - virtual int read() = 0; - virtual int read(uint8_t *buf, size_t size) = 0; - virtual int peek() = 0; - virtual void flush() = 0; - virtual void stop() = 0; - virtual uint8_t connected() = 0; - virtual operator bool() = 0; -protected: - uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; -}; - -#endif diff --git a/alfred/src/Console.cpp b/alfred/src/Console.cpp deleted file mode 100644 index e3fb42b91..000000000 --- a/alfred/src/Console.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "Arduino.h" -#include "Console.h" - - -bool LinuxConsole::begin(){ - printf("LinuxConsole::begin\n"); - printf("opening TTY...\n"); - keyboard = 0; - //keyboard = open("/dev/tty",O_RDONLY|O_NONBLOCK); - printf("TTY=%d\n", keyboard); - return true; -} - -bool LinuxConsole::begin(int baudrate){ - return begin(); -} - -void LinuxConsole::end(){ -} - -int LinuxConsole::available(){ - //return 0; - //if (keyboard <= 0) return 0; - struct timeval timeout; - fd_set readfd; - timeout.tv_sec = 0; - timeout.tv_usec = 0; - FD_ZERO(&readfd); - FD_SET(keyboard, &readfd); - int ret = select(keyboard+1, &readfd, NULL, NULL, &timeout); - return (ret > 0); - //return (FD_ISSET(keyboard, &readfd)); -} - -int LinuxConsole::peek(){ - return 0; - //if(idemonitor_connected() && idemonitor_available()) - // return idemonitor_peek(); - //return console_peek(); -} - -int LinuxConsole::read(){ - //return 0; - //return getchar(); - //if (keyboard <= 0) return 0; - char ch = '\0'; - ::read(keyboard, &ch, 1); - return ch; -} - -void LinuxConsole::flush(){ - //console_flush(); -} - -size_t LinuxConsole::write(uint8_t c){ - //if(idemonitor_connected()) - // idemonitor_write((char*)&c, 1); - //console_write(c); - ::printf("%c",c); - return 1; -} - - -LinuxConsole Console; - - - diff --git a/alfred/src/Console.h b/alfred/src/Console.h deleted file mode 100644 index a572bb90b..000000000 --- a/alfred/src/Console.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef LINUX_CONSOLE_H -#define LINUX_CONSOLE_H - -#include -#include - -#include "Stream.h" - - -class LinuxConsole : public Stream{ - public: - LinuxConsole() {}; - virtual ~LinuxConsole() {}; - virtual bool begin(); - virtual bool begin(int baudrate); - virtual void end(); - - virtual int available(); - virtual int read(); - virtual int peek(); - virtual void flush(); - - virtual size_t write(const uint8_t c) override; - - using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { return true; } - protected: - int keyboard; -}; - -extern LinuxConsole Console; - -#define Serial Console - -#endif diff --git a/alfred/src/EEPROM.h b/alfred/src/EEPROM.h deleted file mode 100644 index 942184e54..000000000 --- a/alfred/src/EEPROM.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - EEPROM.h - EEPROM library -*/ - -#ifndef EEPROM_h -#define EEPROM_h - -#include - -//IMPLEMENT THOSE!!! -#define E2END -1 -#define eeprom_busy_wait() do {} while (0) -#define eeprom_read_byte(index) (0) -void eeprom_write_byte (uint8_t *__p, uint8_t __value){} - -/*** - EERef class. - - This object references an EEPROM cell. - Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM. - This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell. -***/ - -struct EERef{ - - EERef( const int index ) - : index( index ) {} - - //Access/read members. - uint8_t operator*() const { return eeprom_read_byte( (uint8_t*) index ); } - operator const uint8_t() const { return **this; } - - //Assignment/write members. - EERef &operator=( const EERef &ref ) { return *this = *ref; } - EERef &operator=( uint8_t in ) { return eeprom_write_byte( (uint8_t*) index, in ), *this; } - EERef &operator +=( uint8_t in ) { return *this = **this + in; } - EERef &operator -=( uint8_t in ) { return *this = **this - in; } - EERef &operator *=( uint8_t in ) { return *this = **this * in; } - EERef &operator /=( uint8_t in ) { return *this = **this / in; } - EERef &operator ^=( uint8_t in ) { return *this = **this ^ in; } - EERef &operator %=( uint8_t in ) { return *this = **this % in; } - EERef &operator &=( uint8_t in ) { return *this = **this & in; } - EERef &operator |=( uint8_t in ) { return *this = **this | in; } - EERef &operator <<=( uint8_t in ) { return *this = **this << in; } - EERef &operator >>=( uint8_t in ) { return *this = **this >> in; } - - EERef &update( uint8_t in ) { return in != *this ? *this = in : *this; } - - /** Prefix increment/decrement **/ - EERef& operator++() { return *this += 1; } - EERef& operator--() { return *this -= 1; } - - /** Postfix increment/decrement **/ - uint8_t operator++ (int){ - uint8_t ret = **this; - return ++(*this), ret; - } - - uint8_t operator-- (int){ - uint8_t ret = **this; - return --(*this), ret; - } - - int index; //Index of current EEPROM cell. -}; - -/*** - EEPtr class. - - This object is a bidirectional pointer to EEPROM cells represented by EERef objects. - Just like a normal pointer type, this can be dereferenced and repositioned using - increment/decrement operators. -***/ - -struct EEPtr{ - - EEPtr( const int index ) - : index( index ) {} - - operator const int() const { return index; } - EEPtr &operator=( int in ) { return index = in, *this; } - - //Iterator functionality. - bool operator!=( const EEPtr &ptr ) { return index != ptr.index; } - EERef operator*() { return index; } - - /** Prefix & Postfix increment/decrement **/ - EEPtr& operator++() { return ++index, *this; } - EEPtr& operator--() { return --index, *this; } - EEPtr operator++ (int) { return index++; } - EEPtr operator-- (int) { return index--; } - - int index; //Index of current EEPROM cell. -}; - -/*** - EEPROMClass class. - - This object represents the entire EEPROM space. - It wraps the functionality of EEPtr and EERef into a basic interface. - This class is also 100% backwards compatible with earlier Arduino core releases. -***/ - -struct EEPROMClass{ - - //Basic user access methods. - EERef operator[]( const int idx ) { return idx; } - uint8_t read( int idx ) { return EERef( idx ); } - void write( int idx, uint8_t val ) { (EERef( idx )) = val; } - void update( int idx, uint8_t val ) { EERef( idx ).update( val ); } - - //STL and C++11 iteration capability. - EEPtr begin() { return 0x00; } - EEPtr end() { return length(); } //Standards requires this to be the item after the last valid entry. The returned pointer is invalid. - uint16_t length() { return E2END + 1; } - - //Functionality to 'get' and 'put' objects to and from EEPROM. - template< typename T > T &get( int idx, T &t ){ - EEPtr e = idx; - uint8_t *ptr = (uint8_t*) &t; - for( int count = sizeof(T) ; count ; --count, ++e ) *ptr++ = *e; - return t; - } - - template< typename T > const T &put( int idx, const T &t ){ - EEPtr e = idx; - const uint8_t *ptr = (const uint8_t*) &t; - for( int count = sizeof(T) ; count ; --count, ++e ) (*e).update( *ptr++ ); - return t; - } -}; - -EEPROMClass EEPROM; -#endif \ No newline at end of file diff --git a/alfred/src/FileIO.cpp b/alfred/src/FileIO.cpp deleted file mode 100644 index c02f308ea..000000000 --- a/alfred/src/FileIO.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/* - Copyright (c) 2013 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include -#include -#include -#include - -namespace BridgeLib { - -//File::File(BridgeClass &b):_file(NULL),_dir(NULL),_name(NULL) {} - -File::File():_file(NULL),_dir(NULL),_name(NULL) { - //::printf("File0\n", this); -} - - -File::~File() { - //::printf("~File %d\n", this); - //close(); -} - -//File::File(const char *_filename, const char * _mode, BridgeClass &b){ - -File::File(const char *_filename, const char * _mode){ - //::printf("File filename=%s mode=%s %d\n", _filename, _mode, this); - _file = NULL; - _dir = NULL; - _name = NULL; - struct stat _st = {0}; - boolean exists = stat(_filename, &_st) == 0; - //if(!exists || (!S_ISDIR(_st.st_mode) && !S_ISREG(_st.st_mode))){ - // ::printf("Bad Entry[%s]: exists:%u, mode:0x%06X\n",_filename , exists, _st.st_mode); - // return; - //} - - - _name = (char *)malloc(strlen(_filename)+1); - strcpy(_name, _filename); - //maybe not for folders? - //if(S_ISREG(_st.st_mode)){ - //::printf("regular file...\n"); - _file = fopen(_filename, _mode); - //::printf("_file=%d\n", _file); - //} else { - // ::printf("folder...\n"); - // _dir = opendir(_filename); - //} -} - -const char *File::name() { - if(_file <= 0 && _dir <= 0) return 0; - return _name; -} - -File::operator bool() { - return _file > 0 || _dir > 0; -} - - -size_t File::write(const char *buf){ - if(_file <= 0) { - return 0; - ::printf("file write error: file not open!\n"); - } - return fwrite(buf, 1, strlen(buf), _file); -} - -size_t File::write(const uint8_t *buf, size_t size) { - if(_file <= 0) { - ::printf("file write error: file not open!\n"); - return 0; - } - return fwrite(buf, 1, size, _file); -} - -size_t File::write(uint8_t c) { - if(_file <= 0) { - ::printf("file write error: file not open!\n"); - return 0; - } - return write(&c, 1); -} - -void File::flush() { - if(_file <= 0) return; - fflush(_file); -} - -int File::read(void *buff, uint16_t nbyte) { - if(_file <= 0) { - ::printf("file read error: file not open!\n"); - return -1; - } - return ::fread(buff, 1, nbyte, _file); -} - -int File::read() { - if(_file <= 0) { - ::printf("file read error: file not open!\n"); - return -1; - } - return getc(_file); -} - -int File::peek() { - if(_file <= 0) return -1; - size_t pos = position(); - int c = getc(_file); - if(c >= 0) - fseek(_file, pos, ftell(_file)); - return c; -} - -int File::available() { - if(_file <= 0) return 0; - return size() - position(); -} - -boolean File::seek(uint32_t position) {//SEEK_CUR, SEEK_END, and SEEK_SET - if(_file <= 0) return false; - return fseek(_file, position, 0) != -1; //seek to position from 0 -} - -uint32_t File::position() { - if(_file <= 0) return 0; - return ftell(_file); -} - -uint32_t File::size() { - if(_file <= 0) return 0; - struct stat s = {0}; - if (stat(_name, &s) == 0) { - return s.st_size; - } - return 0; -} - -void File::close() { - if(_file != NULL) { - //::printf("closing _file=%d\n", _file); - ::fclose(_file); - _file = NULL; - } - if(_dir != NULL) { - ::closedir(_dir); - _dir = NULL; - } - if(_name != NULL) { - ::free(_name); - _name = NULL; - } -} - -boolean File::isDirectory() { - return _dir > 0; -} - -File File::openNextFile(const char * mode){ - struct dirent *file = readdir(_dir); - if(file == NULL) - return File(); - if(file->d_type != DT_REG && file->d_type != DT_DIR) - return openNextFile(mode); - String fname = String(file->d_name); - if(fname.equals(".") || fname.equals("..")) - return openNextFile(mode); - String name = String(_name); - if(!name.endsWith("/")) - name += "/"; - name += fname; - return File(name.c_str(), mode); -} - -void File::rewindDirectory(void){ - if(_dir <= 0) return; - closedir(_dir); - _dir = opendir(_name); -} - -//(rename(oldname, newname) == 0) - -int fmkdir(const char *dir, int mode){ return mkdir(dir, mode); } -int frmdir(const char *dir){ return rmdir(dir); } -int fremove(const char *path){ return remove(path); } - -boolean FileSystemClass::begin() { - return true; -} - - -boolean FileSystemClass::begin(int selectPin) { - return true; -} - -File FileSystemClass::open(const char *filename, const char * mode) { - //::printf("open... %s:%s\n", filename, mode); - return(File(filename, mode)); -} - -boolean FileSystemClass::exists(const char *filepath) { - struct stat _stat = {0}; - boolean exists = stat(filepath, &_stat) == 0; - return exists && (S_ISDIR(_stat.st_mode) || S_ISREG(_stat.st_mode)); -} - -boolean FileSystemClass::mkdir(const char *filepath) { - struct stat _stat = {0}; - if (stat(filepath, &_stat) == -1) { - return fmkdir(filepath, 0700) == 0; - } - return false; -} - -boolean FileSystemClass::remove(const char *filepath) { - struct stat _stat = {0}; - if (stat(filepath, &_stat) == 0) { - return fremove(filepath) == 0; - } - return false; -} - -boolean FileSystemClass::rmdir(const char *filepath) { - struct stat _stat = {0}; - if (stat(filepath, &_stat) == 0) { - return frmdir(filepath) == 0; - } - return false; -} - -FileSystemClass FileSystem; - -} diff --git a/alfred/src/FileIO.h b/alfred/src/FileIO.h deleted file mode 100644 index ad3cb69dc..000000000 --- a/alfred/src/FileIO.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - file I/O -*/ - -#ifndef __FILEIO_H__ -#define __FILEIO_H__ - -#include -#include - -#define FILE_READ "r" -#define FILE_WRITE "r+" -#define FILE_APPEND "a" -#define FILE_CREATE "w+" - -//#define O_WRITE FILE_WRITE -//#define O_APPEND FILE_APPEND -//#define O_READ FILE_READ -//#define O_CREAT FILE_CREATE - -namespace BridgeLib { - -class File : public Stream { - private: - FILE *_file; - DIR *_dir; - char *_name; - - public: - //File(BridgeClass &b = Bridge); - File(); - //File(const char *_filename, const char * _mode, BridgeClass &b = Bridge); - File(const char *_filename, const char * _mode); - virtual ~File(); - - virtual size_t write(uint8_t); - virtual size_t write(const char *buf); - virtual size_t write(const uint8_t *buf, size_t size); - virtual int read(); - virtual int peek(); - virtual int available(); - virtual void flush(); - int read(void *buf, uint16_t nbyte); - boolean seek(uint32_t pos); - uint32_t position(); - uint32_t size(); - void close(); - operator bool(); - const char * name(); - boolean isDirectory(); - File openNextFile(const char * mode = FILE_READ); - void rewindDirectory(void); - - //using Print::write; -}; - -class FileSystemClass { - public: - //FileSystemClass(BridgeClass &_b = Bridge) { } - - boolean begin(); - boolean begin(int selectPin); - - // Open the specified file/directory with the supplied mode (e.g. read or - // write, etc). Returns a File object for interacting with the file. - // Note that currently only one file can be open at a time. - File open(const char *filename, const char * mode = FILE_READ); - File open(const String filename, const char * mode = FILE_READ){ return open(filename.c_str()); } - - - // Methods to determine if the requested file path exists. - boolean exists(const char *filepath); - boolean exists(const String filepath){ return exists(filepath.c_str()); } - - // Create the requested directory hierarchy--if intermediate directories - // do not exist they will be created. - boolean mkdir(const char *filepath); - - // Delete the file. - boolean remove(const char *filepath); - boolean remove(const String &filepath) { - return remove(filepath.c_str()); - } - - boolean rmdir(const char *filepath); - - private: - friend class File; -}; - -extern FileSystemClass FileSystem; - -}; - -// We enclose File and FileSystem classes in namespace BridgeLib to avoid -// conflicts with legacy SD library. - -// This ensure compatibility with older sketches that uses only Bridge lib -// (the user can still use File instead of BridgeFile) -using namespace BridgeLib; - -// This allows sketches to use BridgeLib::File together with SD library -// (you must use BridgeFile instead of File when needed to disambiguate) -typedef BridgeLib::File BridgeFile; -typedef BridgeLib::FileSystemClass BridgeFileSystemClass; -#define BridgeFileSystem BridgeLib::FileSystem - -#define SD FileSystem - -#endif diff --git a/alfred/src/HardwareSerial.h b/alfred/src/HardwareSerial.h deleted file mode 100644 index 662b1adbc..000000000 --- a/alfred/src/HardwareSerial.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - HardwareSerial.h - Hardware serial library for Wiring -*/ - -#ifndef HardwareSerial_h -#define HardwareSerial_h - -#include "Stream.h" - -class HardwareSerial : public Stream { - protected: - - public: - inline HardwareSerial(){} - virtual void begin(uint32_t baud) {} - virtual void end() {} - virtual int available(void) { return 0; } - virtual int peek(void) { return 0; } - virtual int read(void) { return 0; } - virtual void flush(void) {} - virtual size_t write(uint8_t) {} - inline size_t write(unsigned long n) { return write((uint8_t)n); } - inline size_t write(long n) { return write((uint8_t)n); } - inline size_t write(unsigned int n) { return write((uint8_t)n); } - inline size_t write(int n) { return write((uint8_t)n); } - using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { return true; } -}; - -#ifdef SERIAL_TO_CONSOLE -//extern HardwareSerial Serial1; -#else -//extern HardwareSerial Serial; -#endif - -#endif diff --git a/alfred/src/IPAddress.cpp b/alfred/src/IPAddress.cpp deleted file mode 100644 index cddf548cf..000000000 --- a/alfred/src/IPAddress.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - IPAddress.cpp - Base class that provides IPAddress - Copyright (c) 2011 Adrian McEwen. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include - -IPAddress::IPAddress() -{ - _address.dword = 0; -} - -IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) -{ - _address.bytes[0] = first_octet; - _address.bytes[1] = second_octet; - _address.bytes[2] = third_octet; - _address.bytes[3] = fourth_octet; -} - -IPAddress::IPAddress(uint32_t address) -{ - _address.dword = address; -} - -IPAddress::IPAddress(const uint8_t *address) -{ - memcpy(_address.bytes, address, sizeof(_address.bytes)); -} - -bool IPAddress::fromString(const char *address) -{ - // TODO: add support for "a", "a.b", "a.b.c" formats - - uint16_t acc = 0; // Accumulator - uint8_t dots = 0; - - while (*address) - { - char c = *address++; - if (c >= '0' && c <= '9') - { - acc = acc * 10 + (c - '0'); - if (acc > 255) { - // Value out of [0..255] range - return false; - } - } - else if (c == '.') - { - if (dots == 3) { - // Too much dots (there must be 3 dots) - return false; - } - _address.bytes[dots++] = acc; - acc = 0; - } - else - { - // Invalid char - return false; - } - } - - if (dots != 3) { - // Too few dots (there must be 3 dots) - return false; - } - _address.bytes[3] = acc; - return true; -} - -IPAddress& IPAddress::operator=(const uint8_t *address) -{ - memcpy(_address.bytes, address, sizeof(_address.bytes)); - return *this; -} - -IPAddress& IPAddress::operator=(uint32_t address) -{ - _address.dword = address; - return *this; -} - -bool IPAddress::operator==(const uint8_t* addr) const - { - return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; - } - -size_t IPAddress::printTo(Print& p) const -{ - size_t n = 0; - for (int i =0; i < 3; i++) - { - n += p.print(_address.bytes[i], DEC); - n += p.print('.'); - } - n += p.print(_address.bytes[3], DEC); - return n; -} - diff --git a/alfred/src/IPAddress.h b/alfred/src/IPAddress.h deleted file mode 100644 index bc04fecfa..000000000 --- a/alfred/src/IPAddress.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - IPAddress.h - Base class that provides IPAddress -*/ - -#ifndef IPAddress_h -#define IPAddress_h - -#include -#include "Printable.h" -#include "WString.h" - -// A class to make it easier to handle and pass around IP addresses - -class IPAddress : public Printable { -private: - union { - uint8_t bytes[4]; // IPv4 address - uint32_t dword; - } _address; - - // Access the raw byte array containing the address. Because this returns a pointer - // to the internal structure rather than a copy of the address this function should only - // be used when you know that the usage of the returned uint8_t* will be transient and not - // stored. - uint8_t* raw_address() { return _address.bytes; }; - -public: - // Constructors - IPAddress(); - virtual ~IPAddress(){} - IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); - IPAddress(uint32_t address); - IPAddress(const uint8_t *address); - - bool fromString(const char *address); - bool fromString(const String &address) { return fromString(address.c_str()); } - - // Overloaded cast operator to allow IPAddress objects to be used where a pointer - // to a four-byte uint8_t array is expected - operator uint32_t() const { return _address.dword; }; - bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; }; - bool operator==(const uint8_t* addr) const; - - // Overloaded index operator to allow getting and setting individual octets of the address - uint8_t operator[](int index) const { return _address.bytes[index]; }; - uint8_t& operator[](int index) { return _address.bytes[index]; }; - - // Overloaded copy operators to allow initialisation of IPAddress objects from other types - IPAddress& operator=(const uint8_t *address); - IPAddress& operator=(uint32_t address); - - virtual size_t printTo(Print& p) const; - - friend class EthernetClass; - friend class UDP; - friend class Client; - friend class Server; - friend class DhcpClass; - friend class DNSClient; -}; - -const IPAddress INADDR4_NONE(0,0,0,0); - -#endif diff --git a/alfred/src/LinuxSerial.cpp b/alfred/src/LinuxSerial.cpp deleted file mode 100644 index 98ad3fa1b..000000000 --- a/alfred/src/LinuxSerial.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include -#include -#include -#include -//#include -#include -#include -#include -#include "Arduino.h" - -#include "LinuxSerial.h" - - -void LinuxSerial::begin(const char *devicePath){ - open(devicePath); -} - -void LinuxSerial::begin(const char *devicePath, uint32_t baudrate){ - if (!open(devicePath)) return; - setBaudrate(baudrate); -} - -void LinuxSerial::begin(uint32_t baudrate){ - setBaudrate(baudrate); -} - - -bool LinuxSerial::setBaudrate(uint32_t baudrate){ - ::printf("setting baudrate %s %d...\n", devPath.c_str(), baudrate); - struct termios newtermios; - tcgetattr(_stream, &_termios); - memset(&newtermios, 0, sizeof(struct termios)); - int baud; - switch(baudrate){ - case 50: baud = B50; break; - case 110: baud = B110; break; - case 300: baud = B300; break; - case 600: baud = B600; break; - case 1200: baud = B1200; break; - case 2400: baud = B2400; break; - case 4800: baud = B4800; break; - case 9600: baud = B9600; break; - case 19200: baud = B19200; break; - case 38400: baud = B38400; break; - case 56700: baud = B57600; break; - case 115200: baud = B115200; break; - default: baud = B115200; break; - } - int databits = CS8; - int stopbits = 0; - int parity = 0; - int protocol = 0; - newtermios.c_cflag = baud | stopbits | parity | databits | CLOCAL | CREAD | protocol; - newtermios.c_cc[VMIN] = 1; - tcflush(_stream, TCIOFLUSH); - tcsetattr(_stream, TCSANOW, &newtermios); - tcflush(_stream, TCIOFLUSH); - fcntl(_stream, F_SETFL, O_NONBLOCK); - return true; -} - -bool LinuxSerial::open(const char *devicePath){ - struct termios newtermios; - devPath = devicePath; - ::printf("opening serial port %s...\n", devicePath); - if ((_stream = ::open(devicePath, O_RDWR | O_NOCTTY | O_NONBLOCK)) <= 0) - { - ::printf("could not open serial port %s\n", devicePath); - return false; - } - return true; -} - - -void LinuxSerial::end(){ - if(_stream) - { - /* reset old settings */ - ::printf("closing serial port %s...\n", devPath.c_str()); - tcsetattr(_stream, TCSANOW, &_termios); - close(_stream); - _stream = 0; - } -} - -int LinuxSerial::available(){ - int bytes_avail = 0; - ioctl(_stream, FIONREAD, &bytes_avail); - return bytes_avail; -} - -int LinuxSerial::peek(){ - return 0; -} - -int LinuxSerial::read(){ - char buffer = 0; - size_t size = 1; - int j = ::read(_stream, &buffer, size); - if(j < 0) - { - if(errno == EAGAIN) - return 0; - else - return buffer; - } - return buffer; -} - -void LinuxSerial::flush(){ - //console_flush(); -} - -size_t LinuxSerial::write(uint8_t c){ - size_t size = 1; - char *buffer = (char*)&c; - int j = ::write(_stream, buffer, size); - if(j < 0) - { - if(errno == EAGAIN) - return 0; - else - return j; - } - return j; -} - - -size_t LinuxSerial::write(const uint8_t *buffer, size_t size){ - int j = ::write(_stream, buffer, size); - if(j < 0) - { - if(errno == EAGAIN) - return 0; - else - return j; - } - return j; -} - - - - diff --git a/alfred/src/LinuxSerial.h b/alfred/src/LinuxSerial.h deleted file mode 100644 index 466add946..000000000 --- a/alfred/src/LinuxSerial.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef LINUX_SERIAL_H -#define LINUX_SERIAL_H - -#include -#include -#include - -#include "Stream.h" -#include "HardwareSerial.h" - -#define SERIAL_BUF_SZ 8192 - -class LinuxSerial : public HardwareSerial{ - protected: - int _stream; - struct termios _termios; - String devPath; - bool open(const char *devicePath); - bool setBaudrate(uint32_t baudrate); - public: - LinuxSerial() { _stream = 0; }; - LinuxSerial(const char *devicePath){ - begin(devicePath); - } - LinuxSerial(const char *devicePath, uint32_t baudrate){ - begin(devicePath, baudrate); - } - virtual ~LinuxSerial() { end(); }; - virtual void begin(const char *devicePath, uint32_t baudrate); - virtual void begin(const char *devicePath); - virtual void begin(uint32_t baudrate) override; - virtual void end() override; - - virtual int available() override; - virtual int read() override; - virtual int peek() override; - virtual void flush() override; - - virtual size_t write(const uint8_t c) override; - virtual size_t write(const uint8_t *buffer, size_t size) override; - - using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { return true; } -}; - -#endif diff --git a/alfred/src/Print.cpp b/alfred/src/Print.cpp deleted file mode 100644 index 329424c5c..000000000 --- a/alfred/src/Print.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/* - Print.cpp - Base class that provides print() and println() - Copyright (c) 2008 David A. Mellis. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Modified 23 November 2006 by David A. Mellis - Modified 03 August 2015 by Chuck Todd - */ - -#include -#include -#include -#include -#include -#include -#include -#include "Arduino.h" - -#include "Print.h" - -size_t Print::write(const uint8_t *buffer, size_t size){ - size_t n = 0; - while (size--) { - n += write(*buffer++); - } - return n; -} - -size_t Print::printf(const char *format, ...) { - va_list arg; - va_start(arg, format); - char temp[4096]; - size_t len = vsnprintf(temp, 4096, format, arg); - len = print(temp); - va_end(arg); - return len; -} - -size_t Print::print(const String &s){ - return write(s.c_str(), s.length()); -} - -size_t Print::print(const char *str){ - return write(str); -} - -size_t Print::print(char c){ - return write(c); -} - -size_t Print::print(unsigned char b, int base){ - return print((unsigned long) b, base); -} - -size_t Print::print(int n, int base){ - return print((long) n, base); -} - -size_t Print::print(unsigned int n, int base){ - return print((unsigned long) n, base); -} - -size_t Print::print(long n, int base){ - if (base == 0) { - return write(n); - } else if (base == 10) { - if (n < 0) { - int t = print('-'); - n = -n; - return printNumber(n, 10) + t; - } - return printNumber(n, 10); - } else { - return printNumber(n, base); - } -} - -size_t Print::print(unsigned long n, int base){ - if (base == 0) return write(n); - else return printNumber(n, base); -} - -size_t Print::print(double n, int digits){ - return printFloat(n, digits); -} - -size_t Print::print(const Printable& x){ - return x.printTo(*this); -} - -size_t Print::println(void){ - size_t n = print('\r'); - n += print('\n'); - return n; -} - -size_t Print::println(const String &s){ - size_t n = print(s); - n += println(); - return n; -} - -size_t Print::println(const char *s){ - size_t n = print(s); - n += println(); - return n; -} - -size_t Print::println(char c){ - size_t n = print(c); - n += println(); - return n; -} - -size_t Print::println(unsigned char b, int base){ - size_t n = print(b, base); - n += println(); - return n; -} - -size_t Print::println(int num, int base){ - size_t n = print(num, base); - n += println(); - return n; -} - -size_t Print::println(unsigned int num, int base){ - size_t n = print(num, base); - n += println(); - return n; -} - -size_t Print::println(long num, int base) -{ - size_t n = print(num, base); - n += println(); - return n; -} - -size_t Print::println(unsigned long num, int base){ - size_t n = print(num, base); - n += println(); - return n; -} - -size_t Print::println(double num, int digits){ - size_t n = print(num, digits); - n += println(); - return n; -} - -size_t Print::println(const Printable& x){ - size_t n = print(x); - n += println(); - return n; -} - -// Private Methods ///////////////////////////////////////////////////////////// - -size_t Print::printNumber(unsigned long n, uint8_t base) { - char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. - char *str = &buf[sizeof(buf) - 1]; - - *str = '\0'; - - // prevent crash if called with base == 1 - if (base < 2) base = 10; - - do { - unsigned long m = n; - n /= base; - char c = m - base * n; - *--str = c < 10 ? c + '0' : c + 'A' - 10; - } while(n); - - return write(str); -} - -size_t Print::printFloat(double number, uint8_t digits) { - size_t n = 0; - - if (isnan(number)) return print("nan"); - if (isinf(number)) return print("inf"); - if (number > 4294967040.0) return print ("ovf"); // constant determined empirically - if (number <-4294967040.0) return print ("ovf"); // constant determined empirically - - // Handle negative numbers - if (number < 0.0){ - n += print('-'); - number = -number; - } - - // Round correctly so that print(1.999, 2) prints as "2.00" - double rounding = 0.5; - for (uint8_t i=0; i 0) { - n += print("."); - } - - // Extract digits from the remainder one at a time - while (digits-- > 0){ - remainder *= 10.0; - int toPrint = int(remainder); - n += print(toPrint); - remainder -= toPrint; - } - - return n; -} diff --git a/alfred/src/Print.h b/alfred/src/Print.h deleted file mode 100644 index 33520bdf7..000000000 --- a/alfred/src/Print.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - Print.h - Base class that provides print() and println() -*/ - -#ifndef Print_h -#define Print_h - -#include -#include // for size_t - -#include "WString.h" -#include "Printable.h" - -#define DEC 10 -#define HEX 16 -#define OCT 8 -#define BIN 2 - -class Print{ - private: - int write_error; - size_t printNumber(unsigned long, uint8_t); - size_t printFloat(double, uint8_t); - protected: - void setWriteError(int err = 1) { write_error = err; } - public: - Print(): write_error(0) {} - virtual ~Print(){} - - int getWriteError() { return write_error; } - void clearWriteError() { setWriteError(0); } - - virtual size_t write(const uint8_t c){ return 0; } - virtual size_t write(const uint8_t *buffer, size_t size); - size_t write(const char *buffer, size_t size) { return write((const uint8_t *)buffer, size); } - size_t write(const char *str){ - if (str == NULL) return 0; - return write((const uint8_t *)str, strlen(str)); - } - - size_t printf(const char *format, ...); - size_t print(const String &); - size_t print(const char*); - size_t print(char); - size_t print(unsigned char, int = DEC); - size_t print(int, int = DEC); - size_t print(unsigned int, int = DEC); - size_t print(long, int = DEC); - size_t print(unsigned long, int = DEC); - size_t print(double, int = 2); - size_t print(const Printable&); - - size_t println(const String &s); - size_t println(const char*); - size_t println(char); - size_t println(unsigned char, int = DEC); - size_t println(int, int = DEC); - size_t println(unsigned int, int = DEC); - size_t println(long, int = DEC); - size_t println(unsigned long, int = DEC); - size_t println(double, int = 2); - size_t println(const Printable&); - virtual size_t println(void); -}; - -#endif diff --git a/alfred/src/Printable.h b/alfred/src/Printable.h deleted file mode 100644 index d9ce0d63b..000000000 --- a/alfred/src/Printable.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - Printable.h - Interface class that allows printing of complex types -*/ - -#ifndef Printable_h -#define Printable_h - -#include - -class Print; - -/** The Printable class provides a way for new classes to allow themselves to be printed. - By deriving from Printable and implementing the printTo method, it will then be possible - for users to print out instances of this class by passing them into the usual - Print::print and Print::println methods. -*/ - -class Printable -{ - public: - virtual size_t printTo(Print& p) const = 0; -}; - -#endif - diff --git a/alfred/src/Process.cpp b/alfred/src/Process.cpp deleted file mode 100644 index 391f076b1..000000000 --- a/alfred/src/Process.cpp +++ /dev/null @@ -1,302 +0,0 @@ -/* - Copyright (c) 2013 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "Arduino.h" -#include - -#include -#include -#include -#include - -int shell_read(int fd, void *data, size_t len){ - return read(fd, data, len); -} - -int shell_write(int fd, void *data, size_t len){ - return write(fd, data, len); -} - -void spclose(int p){ - if (p == -1) { - //Serial.print("spclose error - no such pipe: "); - //Serial.println(p); - return; - } - close(p); -} - -void *_shell_exec_thread(void *arg){ - //Serial.println("_shell_exec_thread - executing"); - Process *caller = (Process*)arg; - caller->execute(); - //Serial.println("_shell_exec_thread - done"); - pthread_exit(NULL); -} - -Process::Process(BridgeClass &_b){ - success = false; - executed = false; - exec_pid = -1; - exec_result = 0; - thread = -1; - thread_running = false; - pipes.in.read=pipes.in.write=pipes.out.read=pipes.out.write=pipes.err.read=pipes.err.write=-1; -} - -Process::~Process(){ - if(thread_running){ - //Serial.println("Process::destroy - close"); - close(); - } - cmd_array.free(); - spclose(pipes.in.read); - spclose(pipes.in.write); - spclose(pipes.out.read); - spclose(pipes.out.write); - spclose(pipes.err.read); - spclose(pipes.err.write); -} - -void Process::begin(const String &cmd){ - //Serial.print("Process::begin cmd="); - //Serial.println(cmd); - if(thread_running) {//we are running - Serial.println("Process::begin - close"); - close(); - } - cmd_array.free(); - cmd_array.add(cmd); - success = false; - executed = false; - exec_pid = -1; - exec_result = 0; - thread = -1; - thread_running = false; -} - -void Process::addParameter(const String ¶m){ - //Serial.print("Process::addParameter param="); - //Serial.println(param); - if(thread_running){//we are running - Serial.println("Process::addParameter error: thread is running"); - return; - } - if(!cmd_array.length()){//command is not defined - Serial.println("Process::addParameter error: command not defined"); - return; - } - cmd_array.add(param); -} - -void Process::execute(){ - //Serial.println("Process::execute"); - size_t arlen = cmd_array.length(); - if(!arlen){ - Serial.println("Process::execute - error: arlen=0"); - exec_result = -2; - thread_running = false; - return; - } - //Serial.println("Process::execute cp1"); - - success = false; - executed = true; - thread_running = true; - - const char *cmd[arlen+1]; - size_t i; - for(i=0;i -#include - -typedef union { - int pipes[2]; - struct { - int read; - int write; - }; -} pipe_t; - -typedef struct { - pipe_t in; - pipe_t out; - pipe_t err; -} process_pipes_t; - -class Process : public Stream { - private: - boolean success; - boolean executed; - StringArray cmd_array; - int exec_pid; - int exec_result; - process_pipes_t pipes; - pthread_t thread; - boolean thread_running; - - public: - // Constructor with a user provided BridgeClass instance - Process(BridgeClass &_b = Bridge); - ~Process(); - operator bool () { return success; } - - void begin(const String &command); - void addParameter(const String ¶m); - void close(); - - void runAsynchronously(); - boolean running(); - unsigned int exitValue(){ return exec_result; } - - // Stream methods - // (read from process stdout) - int available(); - int read(); - int read(char * buf, size_t len); - int peek(){ return -1; } - // (write to process stdin) - size_t write(uint8_t); - size_t write(uint8_t *data, size_t len); - void flush(){} - // (read from process stderr) - int errAvailable(); - int errRead(); - int errRead(char * buf, size_t len); - - unsigned int run(); - unsigned int runShellCommand(const String &command); - void runShellCommandAsynchronously(const String &command); - - //called by the created thread - //will block if called directly - //and will execute on the same thread - void execute(); -}; - -#endif diff --git a/alfred/src/SD.h b/alfred/src/SD.h deleted file mode 100644 index 211b675d8..000000000 --- a/alfred/src/SD.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - SD card -*/ - -#ifndef __SD_H__ -#define __SD_H__ - -#include - -//#define O_WRITE FILE_WRITE -//#define O_APPEND FILE_APPEND -//#define O_READ FILE_READ -//#define O_CREAT FILE_CREATE - -#define SD FileSystem - -#endif diff --git a/alfred/src/SPI.cpp b/alfred/src/SPI.cpp deleted file mode 100644 index 4a80679fd..000000000 --- a/alfred/src/SPI.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - SPI Master library for Linux -*/ - -//#include "pins_arduino.h" -#include "SPI.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - - -int SPIClass::fd = 0; -uint8_t SPIClass::mode=0; -uint32_t SPIClass::speed=0; -uint16_t SPIClass::delay=0; -uint8_t SPIClass::bits=0; - - -void SPIClass::begin() { - //pinMode(9, ALT0); - //pinMode(10, ALT0); - //pinMode(11, ALT0); - - char filename[50]; - int busAddressMajor = 0; - int busAddressMinor = 0; - - sprintf(filename, "/dev/spidev%d.%d", busAddressMajor, busAddressMinor); - - delay = 0; // SPI driver latency: https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=19489 - bits = 8; - - // Previously: parse_opts(argc, argv); - setDataMode(0); - setClock(500000); - printf("spi mode: %d\n", mode); - printf("bits per word: %d\n", bits); - printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000); - - // Open SPI device. - fd = open(filename, O_RDWR); - if (fd < 0) { - perror("error: can't open SPI bus"); - return; - } - - // Set SPI read and write bits per word. - int ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits); - if (ret == -1) { perror("can't set bits per word"); } - ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits); - if (ret == -1) { perror("can't get bits per word"); } -} - -void SPIClass::end() { - //pinMode(9, INPUT); - //pinMode(10, INPUT); - //pinMode(11, INPUT); -} - -void SPIClass::setDataMode(uint32_t amode){ - mode = amode; - // Set SPI mode to read and write. - int ret = ioctl(fd, SPI_IOC_WR_MODE, &mode); - if (ret == -1) { perror("can't set spi mode"); } - ret = ioctl(fd, SPI_IOC_RD_MODE, &mode); - if (ret == -1) { perror("can't get spi mode"); } -} - -void SPIClass::setClockDivider(uint32_t rate){ -} - -void SPIClass::setClock(uint32_t rate){ - speed = rate; - // Set SPI read and write max speed. - int ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed); - if (ret == -1) { perror("can't set max speed hz"); } - ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed); - if (ret == -1) { perror("can't get max speed hz"); } -} - -uint8_t SPIClass::transfer(uint8_t data) { - - byte res = 0; - - struct spi_ioc_transfer tr; - tr.tx_buf = (unsigned long) &data; - tr.rx_buf = (unsigned long) NULL; - tr.len = 1; - tr.delay_usecs = delay; - tr.speed_hz = speed; - tr.bits_per_word = bits; - - int ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr); - // Check SPI result. - if (ret < 1) { perror("spi_transmit failed"); } - - tr.tx_buf = (unsigned long) NULL; - tr.rx_buf = (unsigned long) &res; - tr.len = 1; - tr.delay_usecs = delay; - tr.speed_hz = speed; - tr.bits_per_word = bits; - - ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr); - // Check SPI result. - if (ret < 1) { perror("spi_receive failed"); } - - return res; -} - - -void SPIClass::beginTransaction(SPISettings settings){ - setDataMode(settings.mode); - setClock(settings.freq); -} - -SPIClass SPI; - diff --git a/alfred/src/SPI.h b/alfred/src/SPI.h deleted file mode 100644 index e38e6dac6..000000000 --- a/alfred/src/SPI.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - SPI Master library for Linux. -*/ - -#ifndef _SPI_H_INCLUDED -#define _SPI_H_INCLUDED - -#include -#include "Arduino.h" - -#define SPI_HAS_TRANSACTION - -//AVR Arduino compatibility -#define SPI_CLOCK_DIV2 SPI0F2DIV(8000000) -#define SPI_CLOCK_DIV4 SPI0F2DIV(4000000) -#define SPI_CLOCK_DIV8 SPI0F2DIV(1000000) -#define SPI_CLOCK_DIV16 SPI0F2DIV(500000) -#define SPI_CLOCK_DIV32 SPI0F2DIV(250000) -#define SPI_CLOCK_DIV64 SPI0F2DIV(175000) -#define SPI_CLOCK_DIV128 SPI0F2DIV(87500) - -#define SPI_MODE0 0 -#define SPI_MODE1 1 -#define SPI_MODE2 2 -#define SPI_MODE3 3 - -class SPISettings { -public: - SPISettings():freq(4000000),mode(SPI_MODE0){} - SPISettings(uint32_t clockFreq, uint8_t bitOrder, uint8_t dataMode) { - freq = clockFreq; - mode = dataMode; - } -private: - uint32_t freq; - uint8_t mode; - friend class SPIClass; -}; - - -class SPIClass { -public: - static void begin(); - static void end(); - static void setDataMode(uint32_t); - static void setClockDivider(uint32_t); - static void setClock(uint32_t); - static void beginTransaction(SPISettings settings); - static uint8_t transfer(uint8_t data); - inline static void endTransaction(void){} - //no bit order on the pi - inline static void setBitOrder(uint32_t){} -protected: - static int fd; - static uint8_t mode; - static uint32_t speed; - static uint16_t delay; - static uint8_t bits; // 8 bits per word -}; - -extern SPIClass SPI; - -#endif diff --git a/alfred/src/Server.h b/alfred/src/Server.h deleted file mode 100644 index c9ddf45de..000000000 --- a/alfred/src/Server.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - Server.h - Base class that provides Server -*/ - -#ifndef server_h -#define server_h - -#include "Print.h" - -class Server : public Print { -public: - virtual void begin() =0; -}; - -#endif diff --git a/alfred/src/Stream.cpp b/alfred/src/Stream.cpp deleted file mode 100644 index c771d86ec..000000000 --- a/alfred/src/Stream.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/* - Stream.cpp - adds parsing methods to Stream class - Copyright (c) 2008 David A. Mellis. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Created July 2011 - parsing functions based on TextFinder library by Michael Margolis - */ - -#include "Arduino.h" -#include "Stream.h" -#include "Console.h" - - -#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait -#define NO_SKIP_CHAR 1 // a magic char not found in a valid ASCII numeric field - -// private method to read stream with timeout -int Stream::timedRead() -{ - //Serial.printf("timedRead timeout %d\n", _timeout); - int c; - //Serial.println("timed read millis"); - _startMillis = millis(); - //Serial.println("timed read while"); - do { - //Serial.println("stream read"); - c = read(); - //Serial.printf("stream read res %d\n", c); - if (c >= 0) return c; - } while(millis() - _startMillis < _timeout); - return -1; // -1 indicates timeout -} - -// private method to peek stream with timeout -int Stream::timedPeek() -{ - int c; - _startMillis = millis(); - do { - c = peek(); - if (c >= 0) return c; - } while(millis() - _startMillis < _timeout); - return -1; // -1 indicates timeout -} - -// returns peek of the next digit in the stream or -1 if timeout -// discards non-numeric characters -int Stream::peekNextDigit(LookaheadMode lookahead, bool detectDecimal) -{ - int c; - while (1) { - c = timedPeek(); - - if( c < 0 || - c == '-' || - (c >= '0' && c <= '9') || - (detectDecimal && c == '.')) return c; - - switch( lookahead ){ - case SKIP_NONE: return -1; // Fail code. - case SKIP_WHITESPACE: - switch( c ){ - case ' ': break; - case '\t': break; - case '\r': break; - case '\n': break; - default: return -1; // Fail code. - } - break; - case SKIP_ALL: - break; - } - read(); // discard non-numeric - } -} - -// Public Methods -////////////////////////////////////////////////////////////// - -void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait -{ - _timeout = timeout; -} - -// find returns true if the target string is found -bool Stream::find(char *target) -{ - return findUntil(target, (char *)""); -} - -// reads data from the stream until the target string of given length is found -// returns true if target string is found, false if timed out -bool Stream::find(char *target, size_t length) -{ - return findUntil(target, length, NULL, 0); -} - -// as find but search ends if the terminator string is found -bool Stream::findUntil(char *target, char *terminator) -{ - return findUntil(target, strlen(target), terminator, strlen(terminator)); -} - -// reads data from the stream until the target string of the given length is found -// search terminated if the terminator string is found -// returns true if target string is found, false if terminated or timed out -bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t termLen) -{ - size_t index = 0; // maximum target string length is 64k bytes! - size_t termIndex = 0; - int c; - - if( *target == 0) - return true; // return true if target is a null string - while( (c = timedRead()) > 0){ - - if(c != target[index]) - index = 0; // reset index if any char does not match - - if( c == target[index]){ - //////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1); - if(++index >= targetLen){ // return true if all chars in the target match - return true; - } - } - - if(termLen > 0 && c == terminator[termIndex]){ - if(++termIndex >= termLen) - return false; // return false if terminate string found before target string - } - else - termIndex = 0; - } - return false; -} - -// returns the first valid (long) integer value from the current position. -// lookahead determines how parseInt looks ahead in the stream. -// See LookaheadMode enumeration at the top of the file. -// Lookahead is terminated by the first character that is not a valid part of an integer. -// Once parsing commences, 'ignore' will be skipped in the stream. -long Stream::parseInt(LookaheadMode lookahead, char ignore) -{ - bool isNegative = false; - long value = 0; - int c; - - c = peekNextDigit(lookahead, false); - // ignore non numeric leading characters - if(c < 0) - return 0; // zero returned if timeout - - do{ - if(c == ignore) { - ; // ignore this character - } else if(c == '-') { - isNegative = true; - } else if(c >= '0' && c <= '9') { // is c a digit? - value = value * 10 + c - '0'; - } - read(); // consume the character we got with peek - c = timedPeek(); - } - while( (c >= '0' && c <= '9') || c == ignore ); - - if(isNegative) - value = -value; - return value; -} - -// as parseInt but returns a floating point value -float Stream::parseFloat(LookaheadMode lookahead, char ignore) -{ - bool isNegative = false; - bool isFraction = false; - long value = 0; - int c; - float fraction = 1.0; - - c = peekNextDigit(lookahead, true); - // ignore non numeric leading characters - if(c < 0) - return 0; // zero returned if timeout - - do{ - if(c == ignore) { - ; // ignore - } else if(c == '-') - isNegative = true; - else if (c == '.') - isFraction = true; - else if(c >= '0' && c <= '9') { // is c a digit? - value = value * 10 + c - '0'; - if(isFraction) - fraction *= 0.1; - } - read(); // consume the character we got with peek - c = timedPeek(); - } - while( (c >= '0' && c <= '9') || (c == '.' && !isFraction) || c == ignore ); - - if(isNegative) - value = -value; - if(isFraction) - return value * fraction; - else - return value; -} - -// read characters from stream into buffer -// terminates if length characters have been read, or timeout (see setTimeout) -// returns the number of characters placed in the buffer -// the buffer is NOT null terminated. -// -size_t Stream::readBytes(char *buffer, size_t length) -{ - size_t count = 0; - while (count < length) { - int c = timedRead(); - if (c < 0) break; - *buffer++ = (char)c; - count++; - } - return count; -} - - -// as readBytes with terminator character -// terminates if length characters have been read, timeout, or if the terminator character detected -// returns the number of characters placed in the buffer (0 means no valid data found) - -size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length) -{ - if (length < 1) return 0; - size_t index = 0; - while (index < length) { - int c = timedRead(); - if (c < 0 || c == terminator) break; - *buffer++ = (char)c; - index++; - } - return index; // return number of characters, not including null terminator -} - -String Stream::readString() -{ - String ret; - int c = timedRead(); - while (c >= 0) - { - ret += (char)c; - c = timedRead(); - } - return ret; -} - -String Stream::readStringUntil(char terminator) -{ - String ret; - int c = timedRead(); - while (c >= 0 && c != terminator) - { - ret += (char)c; - c = timedRead(); - } - return ret; -} - diff --git a/alfred/src/Stream.h b/alfred/src/Stream.h deleted file mode 100644 index 3b2999901..000000000 --- a/alfred/src/Stream.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - Stream.h - base class for character-based streams. -*/ -#ifndef Stream_h -#define Stream_h - -#include -#include "Print.h" - -// This enumeration provides the lookahead options for parseInt(), parseFloat() -// The rules set out here are used until either the first valid character is found -// or a time out occurs due to lack of input. -enum LookaheadMode{ - SKIP_ALL, // All invalid characters are ignored. - SKIP_NONE, // Nothing is skipped, and the stream is not touched unless the first waiting character is valid. - SKIP_WHITESPACE // Only tabs, spaces, line feeds & carriage returns are skipped. -}; - -#define NO_IGNORE_CHAR '\x01' // a char not found in a valid ASCII numeric field - -class Stream : public Print{ - protected: - unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read - unsigned long _startMillis; // used for timeout measurement - int timedRead(); // private method to read stream with timeout - int timedPeek(); // private method to peek stream with timeout - int peekNextDigit(LookaheadMode lookahead, bool detectDecimal); // returns the next numeric digit in the stream or -1 if timeout - - public: - virtual int available() = 0; - virtual int read() = 0; - virtual int peek() = 0; - virtual void flush() = 0; - - Stream() {_timeout=1000;_startMillis=0;} - - void setTimeout(unsigned long timeout); - - bool find(char *target); - bool find(uint8_t *target) { return find ((char *)target); } - - bool find(char *target, size_t length); - bool find(uint8_t *target, size_t length) { return find ((char *)target, length); } - - bool findUntil(char *target, char *terminator); - bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); } - - bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); - bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); } - - long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); - // returns the first valid (long) integer value from the current position. - // lookahead determines how parseInt looks ahead in the stream. - // See LookaheadMode enumeration at the top of the file. - // Lookahead is terminated by the first character that is not a valid part of an integer. - // Once parsing commences, 'ignore' will be skipped in the stream. - - float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); - // float version of parseInt - - size_t readBytes(char *buffer, size_t length); - size_t readBytes(uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } - - size_t readBytesUntil(char terminator, char *buffer, size_t length); - size_t readBytesUntil(char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } - String readString(); - String readStringUntil(char terminator); - - protected: - long parseInt(char ignore) { return parseInt(SKIP_ALL, ignore); } - float parseFloat(char ignore) { return parseFloat(SKIP_ALL, ignore); } - // These overload exists for compatibility with any class that has derived - // Stream and used parseFloat/Int with a custom ignore character. To keep - // the public API simple, these overload remains protected. -}; - -#endif diff --git a/alfred/src/StringArray.h b/alfred/src/StringArray.h deleted file mode 100644 index f3e01b90a..000000000 --- a/alfred/src/StringArray.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * StringArray.h - * - */ - -#ifndef STRINGARRAY_H_ -#define STRINGARRAY_H_ - -#include "stddef.h" -#include "WString.h" - -class StringArrayItem; -class StringArrayItem { - private: - String _string; - public: - StringArrayItem *next; - StringArrayItem(String str):_string(str), next(NULL){} - ~StringArrayItem(){} - String string(){ return _string; } -}; - -class StringArray { - private: - StringArrayItem *_items; - public: - StringArray():_items(NULL){} - StringArray(StringArrayItem *items):_items(items){} - ~StringArray(){} - StringArrayItem *items(){ - return _items; - } - void add(String str){ - StringArrayItem *it = new StringArrayItem(str); - if(_items == NULL){ - _items = it; - } else { - StringArrayItem *i = _items; - while(i->next != NULL) i = i->next; - i->next = it; - } - } - size_t length(){ - size_t i = 0; - StringArrayItem *it = _items; - while(it != NULL){ - i++; - it = it->next; - } - return i; - } - bool contains(String str){ - StringArrayItem *it = _items; - while(it != NULL){ - if(it->string() == str) - return true; - it = it->next; - } - return false; - } - String get(size_t index){ - size_t i = 0; - StringArrayItem *it = _items; - while(it != NULL){ - if(i++ == index) - return it->string(); - it = it->next; - } - return String(); - } - bool remove(size_t index){ - StringArrayItem *it = _items; - if(!index){ - if(_items == NULL) - return false; - _items = _items->next; - delete it; - return true; - } - size_t i = 0; - StringArrayItem *pit = _items; - while(it != NULL){ - if(i++ == index){ - pit->next = it->next; - delete it; - return true; - } - pit = it; - it = it->next; - } - return false; - } - bool remove(String str){ - StringArrayItem *it = _items; - StringArrayItem *pit = _items; - while(it != NULL){ - if(it->string() == str){ - if(it == _items){ - _items = _items->next; - } else { - pit->next = it->next; - } - delete it; - return true; - } - pit = it; - it = it->next; - } - return false; - } - void free(){ - StringArrayItem *it; - while(_items != NULL){ - it = _items; - _items = _items->next; - delete it; - } - } -}; - - - -#endif /* STRINGARRAY_H_ */ diff --git a/alfred/src/Udp.h b/alfred/src/Udp.h deleted file mode 100644 index 6fd152500..000000000 --- a/alfred/src/Udp.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Udp.cpp: Library to send/receive UDP packets. - */ - -#ifndef udp_h -#define udp_h - -#include -#include - -class UDP : public Stream { - -public: - virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use - virtual void stop() =0; // Finish with the UDP socket - - // Sending UDP packets - - // Start building up a packet to send to the remote host specific in ip and port - // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port - virtual int beginPacket(IPAddress ip, uint16_t port) =0; - // Start building up a packet to send to the remote host specific in host and port - // Returns 1 if successful, 0 if there was a problem resolving the hostname or port - virtual int beginPacket(const char *host, uint16_t port) =0; - // Finish off this packet and send it - // Returns 1 if the packet was sent successfully, 0 if there was an error - virtual int endPacket() =0; - // Write a single byte into the packet - virtual size_t write(uint8_t) =0; - // Write size bytes from buffer into the packet - virtual size_t write(const uint8_t *buffer, size_t size) =0; - - // Start processing the next available incoming packet - // Returns the size of the packet in bytes, or 0 if no packets are available - virtual int parsePacket() =0; - // Number of bytes remaining in the current packet - virtual int available() =0; - // Read a single byte from the current packet - virtual int read() =0; - // Read up to len bytes from the current packet and place them into buffer - // Returns the number of bytes read, or 0 if none are available - virtual int read(unsigned char* buffer, size_t len) =0; - // Read up to len characters from the current packet and place them into buffer - // Returns the number of characters read, or 0 if none are available - virtual int read(char* buffer, size_t len) =0; - // Return the next byte from the current packet without moving on to the next byte - virtual int peek() =0; - virtual void flush() =0; // Finish reading the current packet - - // Return the IP address of the host who sent the current incoming packet - virtual IPAddress remoteIP() =0; - // Return the port of the host who sent the current incoming packet - virtual uint16_t remotePort() =0; -protected: - uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; -}; - -#endif diff --git a/alfred/src/WCharacter.h b/alfred/src/WCharacter.h deleted file mode 100644 index db3743a62..000000000 --- a/alfred/src/WCharacter.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - WCharacter.h - Character utility functions for Wiring & Arduino - */ - -#ifndef Character_h -#define Character_h - -#include - -inline boolean isAlphaNumeric(int c) __attribute__((always_inline)); -inline boolean isAlpha(int c) __attribute__((always_inline)); -inline boolean isAscii(int c) __attribute__((always_inline)); -inline boolean isWhitespace(int c) __attribute__((always_inline)); -inline boolean isControl(int c) __attribute__((always_inline)); -inline boolean isDigit(int c) __attribute__((always_inline)); -inline boolean isGraph(int c) __attribute__((always_inline)); -inline boolean isLowerCase(int c) __attribute__((always_inline)); -inline boolean isPrintable(int c) __attribute__((always_inline)); -inline boolean isPunct(int c) __attribute__((always_inline)); -inline boolean isSpace(int c) __attribute__((always_inline)); -inline boolean isUpperCase(int c) __attribute__((always_inline)); -inline boolean isHexadecimalDigit(int c) __attribute__((always_inline)); -inline int toAscii(int c) __attribute__((always_inline)); -inline int toLowerCase(int c) __attribute__((always_inline)); -inline int toUpperCase(int c)__attribute__((always_inline)); - -// Checks for an alphanumeric character. -// It is equivalent to (isalpha(c) || isdigit(c)). -inline boolean isAlphaNumeric(int c) { - return ( isalnum(c) == 0 ? false : true); -} - - -// Checks for an alphabetic character. -// It is equivalent to (isupper(c) || islower(c)). -inline boolean isAlpha(int c){ - return ( isalpha(c) == 0 ? false : true); -} - - -// Checks whether c is a 7-bit unsigned char value -// that fits into the ASCII character set. -inline boolean isAscii(int c){ - return ( isascii (c) == 0 ? false : true); -} - - -// Checks for a blank character, that is, a space or a tab. -inline boolean isWhitespace(int c){ - return ( isblank (c) == 0 ? false : true); -} - - -// Checks for a control character. -inline boolean isControl(int c){ - return ( iscntrl (c) == 0 ? false : true); -} - - -// Checks for a digit (0 through 9). -inline boolean isDigit(int c){ - return ( isdigit (c) == 0 ? false : true); -} - - -// Checks for any printable character except space. -inline boolean isGraph(int c){ - return ( isgraph (c) == 0 ? false : true); -} - - -// Checks for a lower-case character. -inline boolean isLowerCase(int c){ - return (islower (c) == 0 ? false : true); -} - - -// Checks for any printable character including space. -inline boolean isPrintable(int c){ - return ( isprint (c) == 0 ? false : true); -} - - -// Checks for any printable character which is not a space -// or an alphanumeric character. -inline boolean isPunct(int c){ - return ( ispunct (c) == 0 ? false : true); -} - - -// Checks for white-space characters. For the avr-libc library, -// these are: space, formfeed ('\f'), newline ('\n'), carriage -// return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). -inline boolean isSpace(int c){ - return ( isspace (c) == 0 ? false : true); -} - - -// Checks for an uppercase letter. -inline boolean isUpperCase(int c){ - return ( isupper (c) == 0 ? false : true); -} - - -// Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7 -// 8 9 a b c d e f A B C D E F. -inline boolean isHexadecimalDigit(int c){ - return ( isxdigit (c) == 0 ? false : true); -} - - -// Converts c to a 7-bit unsigned char value that fits into the -// ASCII character set, by clearing the high-order bits. -inline int toAscii(int c){ - return toascii (c); -} - - -// Warning: -// Many people will be unhappy if you use this function. -// This function will convert accented letters into random -// characters. - -// Converts the letter c to lower case, if possible. -inline int toLowerCase(int c){ - return tolower (c); -} - - -// Converts the letter c to upper case, if possible. -inline int toUpperCase(int c){ - return toupper (c); -} - -#endif \ No newline at end of file diff --git a/alfred/src/WMath.cpp b/alfred/src/WMath.cpp deleted file mode 100644 index 8f5228576..000000000 --- a/alfred/src/WMath.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Wiring project - http://wiring.org.co - Copyright (c) 2004-06 Hernando Barragan - Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/ - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -extern "C" { -#include "stdlib.h" -} - -long map(long x, long in_min, long in_max, long out_min, long out_max){ - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; -} - -unsigned int makeWord(unsigned int w) { return w; } -unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; } - -void randomSeed(unsigned long seed) -{ - if (seed != 0) { - srandom(seed); - } -} - -long random(long howbig) -{ - if (howbig == 0) { - return 0; - } - return random() % howbig; -} - -long random(long howsmall, long howbig) -{ - if (howsmall >= howbig) { - return howsmall; - } - long diff = howbig - howsmall; - return random(diff) + howsmall; -} diff --git a/alfred/src/WProgram.h b/alfred/src/WProgram.h deleted file mode 100644 index ac8d90df8..000000000 --- a/alfred/src/WProgram.h +++ /dev/null @@ -1 +0,0 @@ -#include "Arduino.h" diff --git a/alfred/src/WString.cpp b/alfred/src/WString.cpp deleted file mode 100644 index 32a4fa0f5..000000000 --- a/alfred/src/WString.cpp +++ /dev/null @@ -1,635 +0,0 @@ -/* - WString.cpp - String library for Wiring & Arduino - ...mostly rewritten by Paul Stoffregen... - Copyright (c) 2009-10 Hernando Barragan. All rights reserved. - Copyright 2011, Paul Stoffregen, paul@pjrc.com - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "WString.h" -#include -#include -#include - -/*********************************************/ -/* Constructors */ -/*********************************************/ - -String::String(const char *cstr){ - init(); - if (cstr) copy(cstr, strlen(cstr)); -} - -String::String(const String &value){ - init(); - *this = value; -} - -String::String(char c){ - init(); - char buf[2]; - buf[0] = c; - buf[1] = 0; - *this = buf; -} - -String::String(unsigned char value, unsigned char base) { - init(); - char buf[1 + 8 * sizeof(unsigned char)]; - utoa(value, buf, base); - *this = buf; -} - -String::String(int value, unsigned char base) { - init(); - char buf[2 + 8 * sizeof(int)]; - itoa(value, buf, base); - *this = buf; -} - -String::String(unsigned int value, unsigned char base) { - init(); - char buf[1 + 8 * sizeof(unsigned int)]; - utoa(value, buf, base); - *this = buf; -} - -String::String(long value, unsigned char base) { - init(); - char buf[2 + 8 * sizeof(long)]; - ltoa(value, buf, base); - *this = buf; -} - -String::String(unsigned long value, unsigned char base) { - init(); - char buf[1 + 8 * sizeof(unsigned long)]; - ultoa(value, buf, base); - *this = buf; -} - -String::String(float value, unsigned char decimalPlaces) { - init(); - char buf[33]; - *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); -} - -String::String(double value, unsigned char decimalPlaces) { - init(); - char buf[33]; - *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); -} - -String::~String(){ - if(buffer) { - free(buffer); - } - init(); -} - -/*********************************************/ -/* Memory Management */ -/*********************************************/ - -inline void String::init(void){ - buffer = NULL; - capacity = 0; - len = 0; -} - -void String::invalidate(void){ - if (buffer) free(buffer); - buffer = NULL; - capacity = len = 0; -} - -unsigned char String::reserve(unsigned int size){ - if (buffer && capacity >= size) return 1; - if (changeBuffer(size)) { - if (len == 0) buffer[0] = 0; - return 1; - } - return 0; -} - -unsigned char String::changeBuffer(unsigned int maxStrLen){ - char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); - if (newbuffer) { - buffer = newbuffer; - capacity = maxStrLen; - return 1; - } - return 0; -} - -/*********************************************/ -/* Copy and Move */ -/*********************************************/ - -String & String::copy(const char *cstr, unsigned int length){ - if (!reserve(length)) { - invalidate(); - return *this; - } - len = length; - strcpy(buffer, cstr); - return *this; -} - -String & String::operator = (const String &rhs){ - if (this == &rhs) return *this; - - if (rhs.buffer) copy(rhs.buffer, rhs.len); - else invalidate(); - - return *this; -} - -String & String::operator = (const char *cstr){ - if (cstr) copy(cstr, strlen(cstr)); - else invalidate(); - - return *this; -} - -/*********************************************/ -/* concat */ -/*********************************************/ - -unsigned char String::concat(const String &s){ - return concat(s.buffer, s.len); -} - -unsigned char String::concat(const char *cstr, unsigned int length){ - unsigned int newlen = len + length; - if (!cstr) return 0; - if (length == 0) return 1; - if (!reserve(newlen)) return 0; - strcpy(buffer + len, cstr); - len = strlen(buffer); - return 1; -} - -unsigned char String::concat(const char *cstr){ - if (!cstr) return 0; - return concat(cstr, strlen(cstr)); -} - -unsigned char String::concat(char c) -{ - char buf[2]; - buf[0] = c; - buf[1] = 0; - return concat(buf, 1); -} - -unsigned char String::concat(unsigned char num) { - char buf[1 + 3 * sizeof(unsigned char)]; - itoa(num, buf, 10); - return concat(buf, strlen(buf)); -} - -unsigned char String::concat(int num) { - char buf[2 + 3 * sizeof(int)]; - itoa(num, buf, 10); - return concat(buf, strlen(buf)); -} - -unsigned char String::concat(unsigned int num) { - char buf[1 + 3 * sizeof(unsigned int)]; - utoa(num, buf, 10); - return concat(buf, strlen(buf)); -} - -unsigned char String::concat(long num) { - char buf[2 + 3 * sizeof(long)]; - ltoa(num, buf, 10); - return concat(buf, strlen(buf)); -} - -unsigned char String::concat(unsigned long num) { - char buf[1 + 3 * sizeof(unsigned long)]; - ultoa(num, buf, 10); - return concat(buf, strlen(buf)); -} - -unsigned char String::concat(float num) { - char buf[20]; - char* string = dtostrf(num, 4, 2, buf); - return concat(string, strlen(string)); -} - -unsigned char String::concat(double num) { - char buf[20]; - char* string = dtostrf(num, 4, 2, buf); - return concat(string, strlen(string)); -} - -/*********************************************/ -/* Concatenate */ -/*********************************************/ - -StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs) -{ - StringSumHelper &a = const_cast(lhs); - if (!a.concat(rhs.buffer, rhs.len)) a.invalidate(); - return a; -} - -StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr) -{ - StringSumHelper &a = const_cast(lhs); - if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate(); - return a; -} - -StringSumHelper & operator + (const StringSumHelper &lhs, char c) -{ - StringSumHelper &a = const_cast(lhs); - if (!a.concat(c)) a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, unsigned char num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, int num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, unsigned int num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, long num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, unsigned long num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, float num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -StringSumHelper & operator +(const StringSumHelper &lhs, double num) { - StringSumHelper &a = const_cast(lhs); - if(!a.concat(num)) - a.invalidate(); - return a; -} - -/*********************************************/ -/* Comparison */ -/*********************************************/ - -int String::compareTo(const String &s) const -{ - if (!buffer || !s.buffer) { - if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer; - if (buffer && len > 0) return *(unsigned char *)buffer; - return 0; - } - return strcmp(buffer, s.buffer); -} - -unsigned char String::equals(const String &s2) const -{ - return (len == s2.len && compareTo(s2) == 0); -} - -unsigned char String::equals(const char *cstr) const -{ - if (len == 0) return (cstr == NULL || *cstr == 0); - if (cstr == NULL) return buffer[0] == 0; - return strcmp(buffer, cstr) == 0; -} - -unsigned char String::operator<(const String &rhs) const -{ - return compareTo(rhs) < 0; -} - -unsigned char String::operator>(const String &rhs) const -{ - return compareTo(rhs) > 0; -} - -unsigned char String::operator<=(const String &rhs) const - { - return compareTo(rhs) <= 0; - } - -unsigned char String::operator>=(const String &rhs) const - { - return compareTo(rhs) >= 0; - } - -unsigned char String::equalsIgnoreCase( const String &s2 ) const -{ - if (this == &s2) return 1; - if (len != s2.len) return 0; - if (len == 0) return 1; - const char *p1 = buffer; - const char *p2 = s2.buffer; - while (*p1) { - if (tolower(*p1++) != tolower(*p2++)) return 0; - } - return 1; -} - -unsigned char String::startsWith( const String &s2 ) const -{ - if (len < s2.len) return 0; - return startsWith(s2, 0); -} - -unsigned char String::startsWith( const String &s2, unsigned int offset ) const -{ - if (offset > len - s2.len || !buffer || !s2.buffer) return 0; - return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0; -} - -unsigned char String::endsWith( const String &s2 ) const -{ - if ( len < s2.len || !buffer || !s2.buffer) return 0; - return strcmp(&buffer[len - s2.len], s2.buffer) == 0; -} - -/*********************************************/ -/* Character Access */ -/*********************************************/ - -char String::charAt(unsigned int loc) const -{ - return operator[](loc); -} - -void String::setCharAt(unsigned int loc, char c) -{ - if (loc < len) buffer[loc] = c; -} - -char & String::operator[](unsigned int index) -{ - static char dummy_writable_char; - if (index >= len || !buffer) { - dummy_writable_char = 0; - return dummy_writable_char; - } - return buffer[index]; -} - -char String::operator[]( unsigned int index ) const -{ - if (index >= len || !buffer) return 0; - return buffer[index]; -} - -void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const -{ - if (!bufsize || !buf) return; - if (index >= len) { - buf[0] = 0; - return; - } - unsigned int n = bufsize - 1; - if (n > len - index) n = len - index; - strncpy((char *)buf, buffer + index, n); - buf[n] = 0; -} - -/*********************************************/ -/* Search */ -/*********************************************/ - -int String::indexOf(char c) const -{ - return indexOf(c, 0); -} - -int String::indexOf( char ch, unsigned int fromIndex ) const -{ - if (fromIndex >= len) return -1; - const char* temp = strchr(buffer + fromIndex, ch); - if (temp == NULL) return -1; - return temp - buffer; -} - -int String::indexOf(const String &s2) const -{ - return indexOf(s2, 0); -} - -int String::indexOf(const String &s2, unsigned int fromIndex) const -{ - if (fromIndex >= len) return -1; - const char *found = strstr(buffer + fromIndex, s2.buffer); - if (found == NULL) return -1; - return found - buffer; -} - -int String::lastIndexOf( char theChar ) const -{ - return lastIndexOf(theChar, len - 1); -} - -int String::lastIndexOf(char ch, unsigned int fromIndex) const -{ - if (fromIndex >= len) return -1; - char tempchar = buffer[fromIndex + 1]; - buffer[fromIndex + 1] = '\0'; - char* temp = strrchr( buffer, ch ); - buffer[fromIndex + 1] = tempchar; - if (temp == NULL) return -1; - return temp - buffer; -} - -int String::lastIndexOf(const String &s2) const -{ - return lastIndexOf(s2, len - s2.len); -} - -int String::lastIndexOf(const String &s2, unsigned int fromIndex) const -{ - if (s2.len == 0 || len == 0 || s2.len > len) return -1; - if (fromIndex >= len) fromIndex = len - 1; - int found = -1; - for (char *p = buffer; p <= buffer + fromIndex; p++) { - p = strstr(p, s2.buffer); - if (!p) break; - if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer; - } - return found; -} - -String String::substring(unsigned int left, unsigned int right) const -{ - if (left > right) { - unsigned int temp = right; - right = left; - left = temp; - } - String out; - if (left > len) return out; - if (right > len) right = len; - char temp = buffer[right]; // save the replaced character - buffer[right] = '\0'; - out = buffer + left; // pointer arithmetic - buffer[right] = temp; //restore character - return out; -} - -/*********************************************/ -/* Modification */ -/*********************************************/ - -void String::replace(char find, char replace) -{ - if (!buffer) return; - for (char *p = buffer; *p; p++) { - if (*p == find) *p = replace; - } -} - -void String::replace(const String& find, const String& replace) -{ - if (len == 0 || find.len == 0) return; - int diff = replace.len - find.len; - char *readFrom = buffer; - char *foundAt; - if (diff == 0) { - while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { - memcpy(foundAt, replace.buffer, replace.len); - readFrom = foundAt + replace.len; - } - } else if (diff < 0) { - char *writeTo = buffer; - while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { - unsigned int n = foundAt - readFrom; - memcpy(writeTo, readFrom, n); - writeTo += n; - memcpy(writeTo, replace.buffer, replace.len); - writeTo += replace.len; - readFrom = foundAt + find.len; - len += diff; - } - strcpy(writeTo, readFrom); - } else { - unsigned int size = len; // compute size needed for result - while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { - readFrom = foundAt + find.len; - size += diff; - } - if (size == len) return; - if (size > capacity && !changeBuffer(size)) return; // XXX: tell user! - int index = len - 1; - while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) { - readFrom = buffer + index + find.len; - memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); - len += diff; - buffer[len] = 0; - memcpy(buffer + index, replace.buffer, replace.len); - index--; - } - } -} - -void String::remove(unsigned int index){ - if (index >= len) { return; } - int count = len - index; - remove(index, count); -} - -void String::remove(unsigned int index, unsigned int count){ - if (index >= len) { return; } - if (count <= 0) { return; } - if (index + count > len) { count = len - index; } - char *writeTo = buffer + index; - len = len - count; - strncpy(writeTo, buffer + index + count,len - index); - buffer[len] = 0; -} - -void String::toLowerCase(void) -{ - if (!buffer) return; - for (char *p = buffer; *p; p++) { - *p = tolower(*p); - } -} - -void String::toUpperCase(void) -{ - if (!buffer) return; - for (char *p = buffer; *p; p++) { - *p = toupper(*p); - } -} - -void String::trim(void) -{ - if (!buffer || len == 0) return; - char *begin = buffer; - while (isspace(*begin)) begin++; - char *end = buffer + len - 1; - while (isspace(*end) && end >= begin) end--; - len = end + 1 - begin; - if (begin > buffer) memcpy(buffer, begin, len); - buffer[len] = 0; -} - -/*********************************************/ -/* Parsing / Conversion */ -/*********************************************/ - -long String::toInt(void) const -{ - if (buffer) return atol(buffer); - return 0; -} - -float String::toFloat(void) const -{ - if (buffer) return float(atof(buffer)); - return 0; -} - -double String::toDouble(void) const -{ - if (buffer) return double(atof(buffer)); - return 0; -} diff --git a/alfred/src/WString.h b/alfred/src/WString.h deleted file mode 100644 index 06c34b86f..000000000 --- a/alfred/src/WString.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - WString.h - String library for Wiring & Arduino -*/ - -#ifndef String_class_h -#define String_class_h -#ifdef __cplusplus - -#include -#include -#include -#include - -// An inherited class for holding the result of a concatenation. These -// result objects are assumed to be writable by subsequent concatenations. -class StringSumHelper; - -// The string class -class String{ - // use a function pointer to allow for "if (s)" without the - // complications of an operator bool(). for more information, see: - // http://www.artima.com/cppsource/safebool.html - typedef void (String::*StringIfHelperType)() const; - void StringIfHelper() const { - } - -public: - // Constructors - // creates a copy of the initial value. - // if the initial value is null or invalid, or if memory allocation - // fails, the string will be marked as invalid (i.e. "if (s)" will - // be false). - String(const char *cstr = ""); - String(const String &str); - - explicit String(char c); - explicit String(unsigned char, unsigned char base = 10); - explicit String(int, unsigned char base = 10); - explicit String(unsigned int, unsigned char base = 10); - explicit String(long, unsigned char base = 10); - explicit String(unsigned long, unsigned char base = 10); - explicit String(float, unsigned char decimalPlaces = 2); - explicit String(double, unsigned char decimalPlaces = 2); - ~String(void); - - unsigned char reserve(unsigned int size); - inline unsigned int length(void) const { - if(buffer) { - return len; - } else { - return 0; - } - } - - // creates a copy of the assigned value. if the value is null or - // invalid, or if the memory allocation fails, the string will be - // marked as invalid ("if (s)" will be false). - String & operator = (const String &rhs); - String & operator = (const char *cstr); - - // concatenate (works w/ built-in types) - - // returns true on success, false on failure (in which case, the string - // is left unchanged). if the argument is null or invalid, the - // concatenation is considered unsucessful. - unsigned char concat(const String &str); - unsigned char concat(const char *cstr); - unsigned char concat(char c); - unsigned char concat(unsigned char c); - unsigned char concat(int num); - unsigned char concat(unsigned int num); - unsigned char concat(long num); - unsigned char concat(unsigned long num); - unsigned char concat(float num); - unsigned char concat(double num); - - // if there's not enough memory for the concatenated value, the string - // will be left unchanged (but this isn't signalled in any way) - String & operator += (const String &rhs) {concat(rhs); return (*this);} - String & operator += (const char *cstr) {concat(cstr); return (*this);} - String & operator += (char c) {concat(c); return (*this);} - String & operator += (unsigned char num) {concat(num); return (*this);} - String & operator += (int num) {concat(num); return (*this);} - String & operator += (unsigned int num) {concat(num); return (*this);} - String & operator += (long num) {concat(num); return (*this);} - String & operator += (unsigned long num) {concat(num); return (*this);} - String & operator += (float num) {concat(num); return (*this);} - String & operator += (double num) {concat(num); return (*this);} - - friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs); - friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr); - friend StringSumHelper & operator + (const StringSumHelper &lhs, char c); - friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, int num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, long num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, float num); - friend StringSumHelper & operator + (const StringSumHelper &lhs, double num); - - // comparison (only works w/ Strings and "strings") - operator StringIfHelperType() const { - return buffer ? &String::StringIfHelper : 0; - } - int compareTo(const String &s) const; - unsigned char equals(const String &s) const; - unsigned char equals(const char *cstr) const; - unsigned char operator == (const String &rhs) const {return equals(rhs);} - unsigned char operator == (const char *cstr) const {return equals(cstr);} - unsigned char operator != (const String &rhs) const {return !equals(rhs);} - unsigned char operator != (const char *cstr) const {return !equals(cstr);} - unsigned char operator < (const String &rhs) const; - unsigned char operator > (const String &rhs) const; - unsigned char operator <= (const String &rhs) const; - unsigned char operator >= (const String &rhs) const; - unsigned char equalsIgnoreCase(const String &s) const; - unsigned char startsWith( const String &prefix) const; - unsigned char startsWith(const String &prefix, unsigned int offset) const; - unsigned char endsWith(const String &suffix) const; - - // character acccess - char charAt(unsigned int index) const; - void setCharAt(unsigned int index, char c); - char operator [] (unsigned int index) const; - char& operator [] (unsigned int index); - void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const; - void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const - {getBytes((unsigned char *)buf, bufsize, index);} - const char * c_str() const { return buffer; } - char* begin() { return buffer; } - char* end() { return buffer + length(); } - const char* begin() const { return c_str(); } - const char* end() const { return c_str() + length(); } - - // search - int indexOf( char ch ) const; - int indexOf( char ch, unsigned int fromIndex ) const; - int indexOf( const String &str ) const; - int indexOf( const String &str, unsigned int fromIndex ) const; - int lastIndexOf( char ch ) const; - int lastIndexOf( char ch, unsigned int fromIndex ) const; - int lastIndexOf( const String &str ) const; - int lastIndexOf( const String &str, unsigned int fromIndex ) const; - String substring( unsigned int beginIndex ) const { return substring(beginIndex, len); }; - String substring( unsigned int beginIndex, unsigned int endIndex ) const; - - // modification - void replace(char find, char replace); - void replace(const String& find, const String& replace); - void remove(unsigned int index); - void remove(unsigned int index, unsigned int count); - void toLowerCase(void); - void toUpperCase(void); - void trim(void); - - // parsing/conversion - long toInt(void) const; - float toFloat(void) const; - double toDouble(void) const; - -protected: - char *buffer; // the actual char array - unsigned int capacity; // the array length minus one (for the '\0') - unsigned int len; // the String length (not counting the '\0') -protected: - void init(void); - void invalidate(void); - unsigned char changeBuffer(unsigned int maxStrLen); - unsigned char concat(const char *cstr, unsigned int length); - - // copy and move - String & copy(const char *cstr, unsigned int length); -}; - -class StringSumHelper : public String -{ -public: - StringSumHelper(const String &s) : String(s) {} - StringSumHelper(const char *p) : String(p) {} - StringSumHelper(char c) : String(c) {} - StringSumHelper(unsigned char num) : String(num) {} - StringSumHelper(int num) : String(num) {} - StringSumHelper(unsigned int num) : String(num) {} - StringSumHelper(long num) : String(num) {} - StringSumHelper(unsigned long num) : String(num) {} - StringSumHelper(float num) : String(num) {} - StringSumHelper(double num) : String(num) {} -}; - -#endif // __cplusplus -#endif // String_class_h diff --git a/alfred/src/WiFi.cpp b/alfred/src/WiFi.cpp deleted file mode 100644 index 8fce8fe5d..000000000 --- a/alfred/src/WiFi.cpp +++ /dev/null @@ -1,408 +0,0 @@ -/* - WiFi.h - Library for Linux - -*/ - -//#include "utility/wifi_drv.h" -#include "WiFi.h" - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - - -#include -#include -#include -#include - - -WiFiClass::WiFiClass() -{ - numNetworks = 0; - rssi = 0; - //iface = "wlo1"; - iface = "wlan0"; - //scanNetworks(); - //getStatus(); - //begin("ssid", "pass"); -} - - -void WiFiClass::init() -{ - //WiFiDrv::wifiDriverInit(); -} - -uint8_t WiFiClass::getSocket() -{ - return 0; - //return NO_SOCKET_AVAIL -} - -char* WiFiClass::firmwareVersion() -{ - return NULL; -} - -void WiFiClass::begin() -{ - findWifiInterface(); - byte mac[6]; - macAddress(&mac[0]); - accessPointMacAddress(&mac[0]); - signalLevel(); -} - -int WiFiClass::begin(char* ssid) -{ - return 0; -} - -int WiFiClass::begin(char* ssid, uint8_t key_idx, const char *key) -{ - return 0; -} - -int WiFiClass::startWifiProtectedSetup(){ - Serial.print("starting WiFi protected setup - NOTE: press WPS button on your router first..."); - //Serial.println(passphrase); - Process p; - p.runShellCommand("wpa_cli -i " + iface + " remove_network all"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " wps_pbc"); - Serial.println(p.readString()); - return 0; -} - -int WiFiClass::begin(char* ssid, const char *passphrase) -{ - Serial.print("connecting WiFi...SSID="); - Serial.println(ssid); - //Serial.println(passphrase); - Process p; - p.runShellCommand("wpa_cli -i " + iface + " remove_network all"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " add_network"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " set_network 0 ssid '\"" + ssid + "\"'"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " set_network 0 psk '\"" + passphrase + "\"'"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " list_networks"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " enable_network 0"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " reconnect"); - Serial.println(p.readString()); - p.runShellCommand("wpa_cli -i " + iface + " save_config"); - Serial.println(p.readString()); - return 0; -} - -void WiFiClass::config(IPAddress local_ip) -{ - //WiFiDrv::config(1, (uint32_t)local_ip, 0, 0); -} - -void WiFiClass::config(IPAddress local_ip, IPAddress dns_server) -{ - //WiFiDrv::config(1, (uint32_t)local_ip, 0, 0); - //WiFiDrv::setDNS(1, (uint32_t)dns_server, 0); -} - -void WiFiClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway) -{ - //WiFiDrv::config(2, (uint32_t)local_ip, (uint32_t)gateway, 0); - //WiFiDrv::setDNS(1, (uint32_t)dns_server, 0); -} - -void WiFiClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet) -{ - //WiFiDrv::config(3, (uint32_t)local_ip, (uint32_t)gateway, (uint32_t)subnet); - //WiFiDrv::setDNS(1, (uint32_t)dns_server, 0); -} - -void WiFiClass::setDNS(IPAddress dns_server1) -{ - //WiFiDrv::setDNS(1, (uint32_t)dns_server1, 0); -} - -void WiFiClass::setDNS(IPAddress dns_server1, IPAddress dns_server2) -{ - //WiFiDrv::setDNS(2, (uint32_t)dns_server1, (uint32_t)dns_server2); -} - -int WiFiClass::disconnect() -{ - //return WiFiDrv::disconnect(); -} - -void WiFiClass::findWifiInterface(){ - printf("WiFiClass::findWifiInterface\n"); - // Create a channel to the NET kernel. - int fd = socket(AF_INET, SOCK_DGRAM, 0); - // Get list of active devices - char buff[1024]; - struct ifconf ifc; - ifc.ifc_len = sizeof(buff); - ifc.ifc_buf = buff; - if(ioctl(fd, SIOCGIFCONF, &ifc) < 0) { - printf("ERROR finding active WiFi interface (SIOCGIFCONF)\n"); - return; - } - struct ifreq *ifr; - ifr = ifc.ifc_req; - // use the first match - struct iwreq wrq; - for(int i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++){ - strncpy(wrq.ifr_name, ifr->ifr_name, IFNAMSIZ); - if (0 == ioctl(fd, SIOCGIWAP, &wrq)) { - iface = ifr->ifr_name; - printf("found WiFi interface: %s\n", iface.c_str()); - } - } -} - -uint8_t* WiFiClass::macAddress(uint8_t* mac) -{ - int fd; - struct ifreq ifr; - unsigned char *_mac = NULL; - memset(&ifr, 0, sizeof(ifr)); - fd = socket(AF_INET, SOCK_DGRAM, 0); - ifr.ifr_addr.sa_family = AF_INET; - strncpy(ifr.ifr_name , iface.c_str() , IFNAMSIZ-1); - if (0 == ioctl(fd, SIOCGIFHWADDR, &ifr)) { - _mac = (unsigned char *)ifr.ifr_hwaddr.sa_data; - //display mac address - printf("MAC: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n" , _mac[0], _mac[1], _mac[2], _mac[3], _mac[4], _mac[5]); - memcpy(mac, _mac, 6); - } - close(fd); - //uint8_t* _mac = WiFiDrv::getMacAddress(); - return mac; -} - - -uint8_t* WiFiClass::accessPointMacAddress(uint8_t* mac) -{ - int fd; - struct iwreq wrq; - unsigned char *_mac = NULL; - memset(&wrq, 0, sizeof(wrq)); - fd = socket(AF_INET, SOCK_DGRAM, 0); - strncpy(wrq.ifr_name, iface.c_str(), IFNAMSIZ-1); - if (0 == ioctl(fd, SIOCGIWAP, &wrq)) { - _mac = (unsigned char *)wrq.u.ap_addr.sa_data; - //display mac address - printf("AP_MAC: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n" , _mac[0], _mac[1], _mac[2], _mac[3], _mac[4], _mac[5]); - memcpy(mac, _mac, 6); - } - close(fd); - //uint8_t* _mac = WiFiDrv::getMacAddress(); - return mac; -} - -int WiFiClass::signalLevel(){ - int fd; - struct iwreq wrq; - memset(&wrq, 0, sizeof(wrq)); - fd = socket(AF_INET, SOCK_DGRAM, 0); - strncpy(wrq.ifr_name, iface.c_str(), IFNAMSIZ-1); - struct iw_statistics iwstats; - memset(&iwstats, 0, sizeof(iwstats)); - wrq.u.data.pointer = (caddr_t)&iwstats; - wrq.u.data.length = sizeof(iwstats); - wrq.u.data.flags = 1; // Clear updated flag - if (0 == ioctl(fd, SIOCGIWSTATS, &wrq)) { - if (iwstats.qual.updated & IW_QUAL_DBM){ - printf("WiFi signal level: %d dBm\n" , iwstats.qual.level - 256); // (qual, level, noise, updated) - } - } - close(fd); -} - - -void WiFiClass::getStatus(){ - Serial.println("WiFiClass::getStatus"); - Process p; - p.runShellCommand("wpa_cli -i " + iface + " status"); - String key = ""; - String value = ""; - bool keyComplete = false; - while (p.available()){ - char ch = p.read(); - if (ch == '='){ - keyComplete = true; - } - else if (ch == '\n'){ - if (key == "ssid") ssid = value; - if (key == "bssid") bssid = value; - if (key == "key_mgmt") encryption = value; - if (key == "ip_address") ipaddr = value; - keyComplete = false; - key = ""; - value = ""; - } else if (ch != '\r'){ - if (keyComplete) value += ch; - else key += ch; - } - - } - Serial.print("BSSID="); - Serial.println(bssid); - Serial.print("SSID="); - Serial.println(ssid); - Serial.print("IPADDR="); - Serial.println(ipaddr); -} - - -IPAddress WiFiClass::localIP() -{ - getStatus(); - IPAddress ret; - ret.fromString(ipaddr); - return ret; -} - -IPAddress WiFiClass::subnetMask() -{ - //IPAddress ret; - //WiFiDrv::getSubnetMask(ret); - //return ret; -} - -IPAddress WiFiClass::gatewayIP() -{ - //IPAddress ret; - //WiFiDrv::getGatewayIP(ret); - //return ret; -} - -char* WiFiClass::SSID() -{ - getStatus(); - return (char*)ssid.c_str(); -} - -uint8_t* WiFiClass::BSSID(uint8_t* bssid) -{ - return NULL; - /*uint8_t* _bssid = WiFiDrv::getCurrentBSSID(); - memcpy(bssid, _bssid, WL_MAC_ADDR_LENGTH); - return bssid;*/ -} - -int32_t WiFiClass::RSSI() -{ - return rssi; -} - -uint8_t WiFiClass::encryptionType() -{ - return 0; -} - - -int8_t WiFiClass::scanNetworks() -{ - Serial.println("WiFiClass::scanNetworks"); - Process p; - p.runShellCommand("wpa_cli -i " + iface + " scan"); - p.runShellCommand("wpa_cli -i " + iface + " scan_result"); - Serial.println("WiFiClass::scanNetworks completed"); - - numNetworks = 0; - int line = 0; - int col = 0; - bool newCol = false; - bool newLine = false; - String colValue = ""; - while (p.available()){ - char ch = p.read(); - if (ch == '\t'){ - newCol = true; - } - else if (ch == '\n'){ - newCol = true; - newLine = true; - } else if (ch != '\r') { - colValue += ch; - } - - if (newCol){ - col++; - if (col == 1){ - networkBSSID[numNetworks] = colValue; - } else if (col == 3){ - networkRSSI[numNetworks] = colValue.toInt(); - } else if (col == 2){ - networkEncryption[numNetworks] = colValue; - } - else if (col == 5){ - networkSSID[numNetworks] = colValue; - } - newCol = false; - colValue = ""; - if (newLine) { - col = 0; - if (line > 0){ - if (numNetworks < MAX_NETWORKS-1) numNetworks++; - } - newLine = false; - line++; - } - } - } - - Serial.print("WiFiClass::numNetworks="); - Serial.println(numNetworks); - - for (int i=0; i < numNetworks; i++){ - Serial.print(networkBSSID[i]); - Serial.print(","); - Serial.print(networkRSSI[i]); - Serial.print(","); - Serial.println(networkSSID[i]); - } - - return numNetworks; -} - -char* WiFiClass::SSID(uint8_t networkItem) -{ - if (networkItem >= numNetworks) return 0; - return (char*)networkSSID[networkItem].c_str(); -} - -int32_t WiFiClass::RSSI(uint8_t networkItem) -{ - if (networkItem >= numNetworks) return 0; - return networkRSSI[networkItem]; -} - -uint8_t WiFiClass::encryptionType(uint8_t networkItem) -{ - return 0; -} - -uint8_t WiFiClass::status() -{ - return 0; -} - -int WiFiClass::hostByName(const char* aHostname, IPAddress& aResult) -{ -} - -WiFiClass WiFi; diff --git a/alfred/src/WiFi.h b/alfred/src/WiFi.h deleted file mode 100644 index f20442857..000000000 --- a/alfred/src/WiFi.h +++ /dev/null @@ -1,254 +0,0 @@ -/* - WiFi.h - Library for Linux - -*/ - -#ifndef WiFi_h -#define WiFi_h - -#include - -extern "C" { - #include "utility/wl_definitions.h" - #include "utility/wl_types.h" -} - -#include "IPAddress.h" -//#include "WiFiClient.h" -//#include "WiFiServer.h" - -#define MAX_NETWORKS 50 - -class WiFiClass -{ -private: - int numNetworks; - String networkBSSID[MAX_NETWORKS]; - String networkSSID[MAX_NETWORKS]; - String networkEncryption[MAX_NETWORKS]; - int networkRSSI[MAX_NETWORKS]; - - String iface; - String bssid; - String ssid; - int rssi; - String ipaddr; - String encryption; - - void init(); - void getStatus(); - void findWifiInterface(); -public: - WiFiClass(); - - /* - * Get the first socket available - */ - uint8_t getSocket(); - - /* - * Get firmware version - */ - char* firmwareVersion(); - - - // start Wifi Protected Setup (WPS) - NOTE: press WPS button on your router first - int startWifiProtectedSetup(); - - void begin(); - - /* Start Wifi connection for OPEN networks - * - * param ssid: Pointer to the SSID string. - */ - int begin(char* ssid); - - /* Start Wifi connection with WEP encryption. - * Configure a key into the device. The key type (WEP-40, WEP-104) - * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). - * - * param ssid: Pointer to the SSID string. - * param key_idx: The key index to set. Valid values are 0-3. - * param key: Key input buffer. - */ - int begin(char* ssid, uint8_t key_idx, const char* key); - - /* Start Wifi connection with passphrase - * the most secure supported mode will be automatically selected - * - * param ssid: Pointer to the SSID string. - * param passphrase: Passphrase. Valid characters in a passphrase - * must be between ASCII 32-126 (decimal). - */ - int begin(char* ssid, const char *passphrase); - - /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - */ - void config(IPAddress local_ip); - - /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - */ - void config(IPAddress local_ip, IPAddress dns_server); - - /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - * param gateway : Static gateway configuration - */ - void config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway); - - /* Change Ip configuration settings disabling the dhcp client - * - * param local_ip: Static ip configuration - * param dns_server: IP configuration for DNS server 1 - * param gateway: Static gateway configuration - * param subnet: Static Subnet mask - */ - void config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet); - - /* Change DNS Ip configuration - * - * param dns_server1: ip configuration for DNS server 1 - */ - void setDNS(IPAddress dns_server1); - - /* Change DNS Ip configuration - * - * param dns_server1: ip configuration for DNS server 1 - * param dns_server2: ip configuration for DNS server 2 - * - */ - void setDNS(IPAddress dns_server1, IPAddress dns_server2); - - /* - * Disconnect from the network - * - * return: one value of wl_status_t enum - */ - int disconnect(void); - - /* - * Get the interface MAC address. - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - uint8_t* macAddress(uint8_t* mac); - uint8_t* accessPointMacAddress(uint8_t* mac); - - /* return signal level (dBm) */ - int signalLevel(); - - /* - * Get the interface IP address. - * - * return: Ip address value - */ - IPAddress localIP(); - - /* - * Get the interface subnet mask address. - * - * return: subnet mask address value - */ - IPAddress subnetMask(); - - /* - * Get the gateway ip address. - * - * return: gateway ip address value - */ - IPAddress gatewayIP(); - - /* - * Return the current SSID associated with the network - * - * return: ssid string - */ - char* SSID(); - - /* - * Return the current BSSID associated with the network. - * It is the MAC address of the Access Point - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - uint8_t* BSSID(uint8_t* bssid); - - /* - * Return the current RSSI /Received Signal Strength in dBm) - * associated with the network - * - * return: signed value - */ - int32_t RSSI(); - - /* - * Return the Encryption Type associated with the network - * - * return: one value of wl_enc_type enum - */ - uint8_t encryptionType(); - - /* - * Start scan WiFi networks available - * - * return: Number of discovered networks - */ - int8_t scanNetworks(); - - /* - * Return the SSID discovered during the network scan. - * - * param networkItem: specify from which network item want to get the information - * - * return: ssid string of the specified item on the networks scanned list - */ - char* SSID(uint8_t networkItem); - - /* - * Return the encryption type of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: encryption type (enum wl_enc_type) of the specified item on the networks scanned list - */ - uint8_t encryptionType(uint8_t networkItem); - - /* - * Return the RSSI of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: signed value of RSSI of the specified item on the networks scanned list - */ - int32_t RSSI(uint8_t networkItem); - - /* - * Return Connection status. - * - * return: one of the value defined in wl_status_t - */ - uint8_t status(); - - /* - * Resolve the given hostname to an IP address. - * param aHostname: Name to be resolved - * param aResult: IPAddress structure to store the returned IP address - * result: 1 if aIPAddrString was successfully converted to an IP address, - * else error code - */ - int hostByName(const char* aHostname, IPAddress& aResult); - - //friend class WiFiClient; - //friend class WiFiServer; -}; - -extern WiFiClass WiFi; - -#endif diff --git a/alfred/src/Wire.cpp b/alfred/src/Wire.cpp deleted file mode 100644 index 77ed01011..000000000 --- a/alfred/src/Wire.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - I2C Master library for Raspberry Pi Arduino. - Copyright (c) 2015 by Hristo Gochkov - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -extern "C" { - #include - #include - #include - - #include - #include - #include - #include - #include - #include - #include - #include -} - -#include "Arduino.h" -#include "Wire.h" - -// https://www.kernel.org/doc/Documentation/i2c/dev-interface -// https://github.com/itead/Segnix/blob/master/lib/c/itead_wire.c -// https://github.com/Digilent/linux-userspace-examples/blob/master/i2c_example_linux/src/i2c.c -// https://github.com/WiringPi/WiringPi/blob/master/wiringPi/wiringPiI2C.c - -uint8_t TwoWire::rxBuffer[BUFFER_LENGTH]; -uint8_t TwoWire::rxBufferIndex = 0; -uint8_t TwoWire::rxBufferLength = 0; - -uint8_t TwoWire::txAddress = 0; -uint8_t TwoWire::txBuffer[BUFFER_LENGTH]; -uint8_t TwoWire::txBufferIndex = 0; -uint8_t TwoWire::txBufferLength = 0; - -uint8_t TwoWire::busAddress = 0; -int TwoWire::busFd = -1; - -bool WireDebug = false; - - -TwoWire::TwoWire(){} - -void TwoWire::begin(){ - begin(1); -} - -void TwoWire::end(void){ - //pinMode(2, INPUT); - //pinMode(3, INPUT); -} - -void TwoWire::setClock(uint32_t frequency){ - //BSC1DIV = BSCF2DIV(frequency); -} - -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop){ - if (busFd < 0) { - perror("requestFrom error: no such I2C bus"); - return 4; // other error; - } - if (txBufferLength != 0){ - ::printf("WARN: I2C misorder - requestFrom in between transmission!"); - } - if(quantity > BUFFER_LENGTH) quantity = BUFFER_LENGTH; - if (ioctl(busFd, I2C_SLAVE, address) < 0) { - perror("error: I2C ioctl failed"); - return 0; - } - uint8_t ret = ::read(busFd, rxBuffer, quantity); - if (WireDebug) ::printf("TwoWire read addr=%x, len=%d ret=%d\n", address, quantity, quantity); - //uint8_t ret = twi_readFrom(address, rxBuffer, quantity, sendStop); - rxBufferIndex = 0; - rxBufferLength = (ret == quantity)?quantity:0; - return rxBufferLength; -} - -void TwoWire::beginTransmission(uint8_t address){ - if (WireDebug) ::printf("TwoWire beginTransmission addr=%x\n", address); - if (ioctl(busFd, I2C_SLAVE, address) < 0) { - perror("error: I2C ioctl failed"); - return; - } - txAddress = address; - txBufferIndex = 0; - txBufferLength = 0; -} - -uint8_t TwoWire::endTransmission(uint8_t sendStop){ - if (busFd < 0) { - perror("endTransmission error: no such I2C bus"); - return 4; // other error; - } - uint8_t ret = ::write(busFd, txBuffer, txBufferLength); - if (WireDebug) ::printf("TwoWire write len: %d, ret=%d\n", txBufferLength, ret); - //uint8_t ret = twi_writeTo(txAddress, txBuffer, txBufferLength, 0, sendStop); - txBufferIndex = 0; - txBufferLength = 0; - if (ret < 0) return 4; // other error - return 0; // success -} - -uint8_t TwoWire::endTransmission(void){ - return endTransmission(true); -} - -size_t TwoWire::write(uint8_t data){ - if(txBufferLength >= BUFFER_LENGTH) return 0; - txBuffer[txBufferIndex] = data; - ++txBufferIndex; - txBufferLength = txBufferIndex; - return 1; -} - -size_t TwoWire::write(const uint8_t *data, size_t quantity){ - for(size_t i = 0; i < quantity; ++i){ - write(data[i]); - } - return quantity; -} - -int TwoWire::available(void){ - return rxBufferLength - rxBufferIndex; -} - -int TwoWire::read(void){ - int value = -1; - if(rxBufferIndex < rxBufferLength){ - value = rxBuffer[rxBufferIndex]; - ++rxBufferIndex; - } else { - if (WireDebug) ::printf("TwoWire read: nothing to read\n"); - } - return value; -} - -int TwoWire::peek(void){ - int value = -1; - if(rxBufferIndex < rxBufferLength){ - value = rxBuffer[rxBufferIndex]; - } - return value; -} - -void TwoWire::begin(uint8_t address){ - if (busFd >= 0) { - close(busFd); - busFd = -1; - } - if (WireDebug) ::printf("TwoWire begin bus=%d\n", address); - rxBufferIndex = 0; - rxBufferLength = 0; - - txBufferIndex = 0; - txBufferLength = 0; - - //pinMode(2, ALT0); - //pinMode(3, ALT0); - busAddress = address; - - // Open the given I2C bus filename. - char filename[50]; - sprintf(filename, "/dev/i2c-%d", busAddress); - busFd = open(filename, O_RDWR); - if (busFd < 0) { - perror("error: no such I2C bus"); - } -} - -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity){ - return requestFrom(address, quantity, (uint8_t)true); -} - -TwoWire Wire = TwoWire(); - diff --git a/alfred/src/Wire.h b/alfred/src/Wire.h deleted file mode 100644 index 29b03724b..000000000 --- a/alfred/src/Wire.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - TwoWire.h - TWI/I2C library for Arduino & Wiring -*/ - -#ifndef TwoWire_h -#define TwoWire_h - -#include - -#ifdef __cplusplus -extern "C"{ -#endif - - -#ifdef __cplusplus -} // extern "C" -#endif - -#include "Stream.h" - -#define BUFFER_LENGTH 32 - -class TwoWire : public Stream { - private: - - // static? - static uint8_t rxBuffer[]; - static uint8_t rxBufferIndex; - static uint8_t rxBufferLength; - - static uint8_t txAddress; - static uint8_t txBuffer[]; - static uint8_t txBufferIndex; - static uint8_t txBufferLength; - - static uint8_t busAddress; - static int busFd; - - public: - TwoWire(); - void begin(); - void end(); - void begin(uint8_t); - void setClock(uint32_t); - void beginTransmission(uint8_t); - uint8_t endTransmission(void); - uint8_t endTransmission(uint8_t); - uint8_t requestFrom(uint8_t, uint8_t); - uint8_t requestFrom(uint8_t, uint8_t, uint8_t); - virtual size_t write(uint8_t); - virtual size_t write(const uint8_t *, size_t); - virtual int available(void); - virtual int read(void); - virtual int peek(void); - virtual void flush(void){} - - inline size_t write(unsigned long n) { return this->write((uint8_t)n); } - inline size_t write(long n) { return this->write((uint8_t)n); } - inline size_t write(unsigned int n) { return this->write((uint8_t)n); } - inline size_t write(int n) { return this->write((uint8_t)n); } - using Print::write; -}; - -extern TwoWire Wire; - -#endif - diff --git a/alfred/src/base64.cpp b/alfred/src/base64.cpp deleted file mode 100644 index 1fc144e26..000000000 --- a/alfred/src/base64.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/** - * base64.cpp - * - * Created on: 09.12.2015 - * - * Copyright (c) 2015 Markus Sattler. All rights reserved. - * This file is part of the ESP31B core for Arduino. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include "Arduino.h" -extern "C" { -#include "libb64/cdecode.h" -#include "libb64/cencode.h" -} -#include "base64.h" - -/** - * convert input data to base64 - * @param data const uint8_t * - * @param length size_t - * @return String - */ -String base64::encode(const uint8_t * data, size_t length) -{ - size_t size = base64_encode_expected_len(length) + 1; - char * buffer = (char *) malloc(size); - if(buffer) { - base64_encodestate _state; - base64_init_encodestate(&_state); - int len = base64_encode_block((const char *) &data[0], length, &buffer[0], &_state); - len = base64_encode_blockend((buffer + len), &_state); - - String base64 = String(buffer); - free(buffer); - return base64; - } - return String("-FAIL-"); -} - -/** - * convert input data to base64 - * @param text const String& - * @return String - */ -String base64::encode(const String& text) -{ - return base64::encode((uint8_t *) text.c_str(), text.length()); -} - diff --git a/alfred/src/base64.h b/alfred/src/base64.h deleted file mode 100644 index 97095817b..000000000 --- a/alfred/src/base64.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef CORE_BASE64_H_ -#define CORE_BASE64_H_ - -class base64 -{ -public: - static String encode(const uint8_t * data, size_t length); - static String encode(const String& text); -private: -}; - - -#endif /* CORE_BASE64_H_ */ diff --git a/alfred/src/binary.h b/alfred/src/binary.h deleted file mode 100644 index aec4c733d..000000000 --- a/alfred/src/binary.h +++ /dev/null @@ -1,534 +0,0 @@ -/* - binary.h - Definitions for binary constants - Copyright (c) 2006 David A. Mellis. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef Binary_h -#define Binary_h - -#define B0 0 -#define B00 0 -#define B000 0 -#define B0000 0 -#define B00000 0 -#define B000000 0 -#define B0000000 0 -#define B00000000 0 -#define B1 1 -#define B01 1 -#define B001 1 -#define B0001 1 -#define B00001 1 -#define B000001 1 -#define B0000001 1 -#define B00000001 1 -#define B10 2 -#define B010 2 -#define B0010 2 -#define B00010 2 -#define B000010 2 -#define B0000010 2 -#define B00000010 2 -#define B11 3 -#define B011 3 -#define B0011 3 -#define B00011 3 -#define B000011 3 -#define B0000011 3 -#define B00000011 3 -#define B100 4 -#define B0100 4 -#define B00100 4 -#define B000100 4 -#define B0000100 4 -#define B00000100 4 -#define B101 5 -#define B0101 5 -#define B00101 5 -#define B000101 5 -#define B0000101 5 -#define B00000101 5 -#define B110 6 -#define B0110 6 -#define B00110 6 -#define B000110 6 -#define B0000110 6 -#define B00000110 6 -#define B111 7 -#define B0111 7 -#define B00111 7 -#define B000111 7 -#define B0000111 7 -#define B00000111 7 -#define B1000 8 -#define B01000 8 -#define B001000 8 -#define B0001000 8 -#define B00001000 8 -#define B1001 9 -#define B01001 9 -#define B001001 9 -#define B0001001 9 -#define B00001001 9 -#define B1010 10 -#define B01010 10 -#define B001010 10 -#define B0001010 10 -#define B00001010 10 -#define B1011 11 -#define B01011 11 -#define B001011 11 -#define B0001011 11 -#define B00001011 11 -#define B1100 12 -#define B01100 12 -#define B001100 12 -#define B0001100 12 -#define B00001100 12 -#define B1101 13 -#define B01101 13 -#define B001101 13 -#define B0001101 13 -#define B00001101 13 -#define B1110 14 -#define B01110 14 -#define B001110 14 -#define B0001110 14 -#define B00001110 14 -#define B1111 15 -#define B01111 15 -#define B001111 15 -#define B0001111 15 -#define B00001111 15 -#define B10000 16 -#define B010000 16 -#define B0010000 16 -#define B00010000 16 -#define B10001 17 -#define B010001 17 -#define B0010001 17 -#define B00010001 17 -#define B10010 18 -#define B010010 18 -#define B0010010 18 -#define B00010010 18 -#define B10011 19 -#define B010011 19 -#define B0010011 19 -#define B00010011 19 -#define B10100 20 -#define B010100 20 -#define B0010100 20 -#define B00010100 20 -#define B10101 21 -#define B010101 21 -#define B0010101 21 -#define B00010101 21 -#define B10110 22 -#define B010110 22 -#define B0010110 22 -#define B00010110 22 -#define B10111 23 -#define B010111 23 -#define B0010111 23 -#define B00010111 23 -#define B11000 24 -#define B011000 24 -#define B0011000 24 -#define B00011000 24 -#define B11001 25 -#define B011001 25 -#define B0011001 25 -#define B00011001 25 -#define B11010 26 -#define B011010 26 -#define B0011010 26 -#define B00011010 26 -#define B11011 27 -#define B011011 27 -#define B0011011 27 -#define B00011011 27 -#define B11100 28 -#define B011100 28 -#define B0011100 28 -#define B00011100 28 -#define B11101 29 -#define B011101 29 -#define B0011101 29 -#define B00011101 29 -#define B11110 30 -#define B011110 30 -#define B0011110 30 -#define B00011110 30 -#define B11111 31 -#define B011111 31 -#define B0011111 31 -#define B00011111 31 -#define B100000 32 -#define B0100000 32 -#define B00100000 32 -#define B100001 33 -#define B0100001 33 -#define B00100001 33 -#define B100010 34 -#define B0100010 34 -#define B00100010 34 -#define B100011 35 -#define B0100011 35 -#define B00100011 35 -#define B100100 36 -#define B0100100 36 -#define B00100100 36 -#define B100101 37 -#define B0100101 37 -#define B00100101 37 -#define B100110 38 -#define B0100110 38 -#define B00100110 38 -#define B100111 39 -#define B0100111 39 -#define B00100111 39 -#define B101000 40 -#define B0101000 40 -#define B00101000 40 -#define B101001 41 -#define B0101001 41 -#define B00101001 41 -#define B101010 42 -#define B0101010 42 -#define B00101010 42 -#define B101011 43 -#define B0101011 43 -#define B00101011 43 -#define B101100 44 -#define B0101100 44 -#define B00101100 44 -#define B101101 45 -#define B0101101 45 -#define B00101101 45 -#define B101110 46 -#define B0101110 46 -#define B00101110 46 -#define B101111 47 -#define B0101111 47 -#define B00101111 47 -#define B110000 48 -#define B0110000 48 -#define B00110000 48 -#define B110001 49 -#define B0110001 49 -#define B00110001 49 -#define B110010 50 -#define B0110010 50 -#define B00110010 50 -#define B110011 51 -#define B0110011 51 -#define B00110011 51 -#define B110100 52 -#define B0110100 52 -#define B00110100 52 -#define B110101 53 -#define B0110101 53 -#define B00110101 53 -#define B110110 54 -#define B0110110 54 -#define B00110110 54 -#define B110111 55 -#define B0110111 55 -#define B00110111 55 -#define B111000 56 -#define B0111000 56 -#define B00111000 56 -#define B111001 57 -#define B0111001 57 -#define B00111001 57 -#define B111010 58 -#define B0111010 58 -#define B00111010 58 -#define B111011 59 -#define B0111011 59 -#define B00111011 59 -#define B111100 60 -#define B0111100 60 -#define B00111100 60 -#define B111101 61 -#define B0111101 61 -#define B00111101 61 -#define B111110 62 -#define B0111110 62 -#define B00111110 62 -#define B111111 63 -#define B0111111 63 -#define B00111111 63 -#define B1000000 64 -#define B01000000 64 -#define B1000001 65 -#define B01000001 65 -#define B1000010 66 -#define B01000010 66 -#define B1000011 67 -#define B01000011 67 -#define B1000100 68 -#define B01000100 68 -#define B1000101 69 -#define B01000101 69 -#define B1000110 70 -#define B01000110 70 -#define B1000111 71 -#define B01000111 71 -#define B1001000 72 -#define B01001000 72 -#define B1001001 73 -#define B01001001 73 -#define B1001010 74 -#define B01001010 74 -#define B1001011 75 -#define B01001011 75 -#define B1001100 76 -#define B01001100 76 -#define B1001101 77 -#define B01001101 77 -#define B1001110 78 -#define B01001110 78 -#define B1001111 79 -#define B01001111 79 -#define B1010000 80 -#define B01010000 80 -#define B1010001 81 -#define B01010001 81 -#define B1010010 82 -#define B01010010 82 -#define B1010011 83 -#define B01010011 83 -#define B1010100 84 -#define B01010100 84 -#define B1010101 85 -#define B01010101 85 -#define B1010110 86 -#define B01010110 86 -#define B1010111 87 -#define B01010111 87 -#define B1011000 88 -#define B01011000 88 -#define B1011001 89 -#define B01011001 89 -#define B1011010 90 -#define B01011010 90 -#define B1011011 91 -#define B01011011 91 -#define B1011100 92 -#define B01011100 92 -#define B1011101 93 -#define B01011101 93 -#define B1011110 94 -#define B01011110 94 -#define B1011111 95 -#define B01011111 95 -#define B1100000 96 -#define B01100000 96 -#define B1100001 97 -#define B01100001 97 -#define B1100010 98 -#define B01100010 98 -#define B1100011 99 -#define B01100011 99 -#define B1100100 100 -#define B01100100 100 -#define B1100101 101 -#define B01100101 101 -#define B1100110 102 -#define B01100110 102 -#define B1100111 103 -#define B01100111 103 -#define B1101000 104 -#define B01101000 104 -#define B1101001 105 -#define B01101001 105 -#define B1101010 106 -#define B01101010 106 -#define B1101011 107 -#define B01101011 107 -#define B1101100 108 -#define B01101100 108 -#define B1101101 109 -#define B01101101 109 -#define B1101110 110 -#define B01101110 110 -#define B1101111 111 -#define B01101111 111 -#define B1110000 112 -#define B01110000 112 -#define B1110001 113 -#define B01110001 113 -#define B1110010 114 -#define B01110010 114 -#define B1110011 115 -#define B01110011 115 -#define B1110100 116 -#define B01110100 116 -#define B1110101 117 -#define B01110101 117 -#define B1110110 118 -#define B01110110 118 -#define B1110111 119 -#define B01110111 119 -#define B1111000 120 -#define B01111000 120 -#define B1111001 121 -#define B01111001 121 -#define B1111010 122 -#define B01111010 122 -#define B1111011 123 -#define B01111011 123 -#define B1111100 124 -#define B01111100 124 -#define B1111101 125 -#define B01111101 125 -#define B1111110 126 -#define B01111110 126 -#define B1111111 127 -#define B01111111 127 -#define B10000000 128 -#define B10000001 129 -#define B10000010 130 -#define B10000011 131 -#define B10000100 132 -#define B10000101 133 -#define B10000110 134 -#define B10000111 135 -#define B10001000 136 -#define B10001001 137 -#define B10001010 138 -#define B10001011 139 -#define B10001100 140 -#define B10001101 141 -#define B10001110 142 -#define B10001111 143 -#define B10010000 144 -#define B10010001 145 -#define B10010010 146 -#define B10010011 147 -#define B10010100 148 -#define B10010101 149 -#define B10010110 150 -#define B10010111 151 -#define B10011000 152 -#define B10011001 153 -#define B10011010 154 -#define B10011011 155 -#define B10011100 156 -#define B10011101 157 -#define B10011110 158 -#define B10011111 159 -#define B10100000 160 -#define B10100001 161 -#define B10100010 162 -#define B10100011 163 -#define B10100100 164 -#define B10100101 165 -#define B10100110 166 -#define B10100111 167 -#define B10101000 168 -#define B10101001 169 -#define B10101010 170 -#define B10101011 171 -#define B10101100 172 -#define B10101101 173 -#define B10101110 174 -#define B10101111 175 -#define B10110000 176 -#define B10110001 177 -#define B10110010 178 -#define B10110011 179 -#define B10110100 180 -#define B10110101 181 -#define B10110110 182 -#define B10110111 183 -#define B10111000 184 -#define B10111001 185 -#define B10111010 186 -#define B10111011 187 -#define B10111100 188 -#define B10111101 189 -#define B10111110 190 -#define B10111111 191 -#define B11000000 192 -#define B11000001 193 -#define B11000010 194 -#define B11000011 195 -#define B11000100 196 -#define B11000101 197 -#define B11000110 198 -#define B11000111 199 -#define B11001000 200 -#define B11001001 201 -#define B11001010 202 -#define B11001011 203 -#define B11001100 204 -#define B11001101 205 -#define B11001110 206 -#define B11001111 207 -#define B11010000 208 -#define B11010001 209 -#define B11010010 210 -#define B11010011 211 -#define B11010100 212 -#define B11010101 213 -#define B11010110 214 -#define B11010111 215 -#define B11011000 216 -#define B11011001 217 -#define B11011010 218 -#define B11011011 219 -#define B11011100 220 -#define B11011101 221 -#define B11011110 222 -#define B11011111 223 -#define B11100000 224 -#define B11100001 225 -#define B11100010 226 -#define B11100011 227 -#define B11100100 228 -#define B11100101 229 -#define B11100110 230 -#define B11100111 231 -#define B11101000 232 -#define B11101001 233 -#define B11101010 234 -#define B11101011 235 -#define B11101100 236 -#define B11101101 237 -#define B11101110 238 -#define B11101111 239 -#define B11110000 240 -#define B11110001 241 -#define B11110010 242 -#define B11110011 243 -#define B11110100 244 -#define B11110101 245 -#define B11110110 246 -#define B11110111 247 -#define B11111000 248 -#define B11111001 249 -#define B11111010 250 -#define B11111011 251 -#define B11111100 252 -#define B11111101 253 -#define B11111110 254 -#define B11111111 255 - -#endif diff --git a/alfred/src/ble/att-types.h b/alfred/src/ble/att-types.h deleted file mode 100644 index 3adc05d9e..000000000 --- a/alfred/src/ble/att-types.h +++ /dev/null @@ -1,169 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -#include - -#ifndef __packed -#define __packed __attribute__((packed)) -#endif - -#define BT_ATT_CID 4 -#define BT_ATT_PSM 31 -#define BT_ATT_EATT_PSM 0x27 - -#define BT_ATT_SECURITY_AUTO 0 -#define BT_ATT_SECURITY_LOW 1 -#define BT_ATT_SECURITY_MEDIUM 2 -#define BT_ATT_SECURITY_HIGH 3 -#define BT_ATT_SECURITY_FIPS 4 - -#define BT_ATT_DEFAULT_LE_MTU 23 -#define BT_ATT_MAX_LE_MTU 517 -#define BT_ATT_MAX_VALUE_LEN 512 - -#define BT_ATT_BREDR 0x00 -#define BT_ATT_LE 0x01 -#define BT_ATT_EATT 0x02 -#define BT_ATT_LOCAL 0xff - -/* ATT protocol opcodes */ -#define BT_ATT_OP_ERROR_RSP 0x01 -#define BT_ATT_OP_MTU_REQ 0x02 -#define BT_ATT_OP_MTU_RSP 0x03 -#define BT_ATT_OP_FIND_INFO_REQ 0x04 -#define BT_ATT_OP_FIND_INFO_RSP 0x05 -#define BT_ATT_OP_FIND_BY_TYPE_REQ 0x06 -#define BT_ATT_OP_FIND_BY_TYPE_RSP 0x07 -#define BT_ATT_OP_READ_BY_TYPE_REQ 0x08 -#define BT_ATT_OP_READ_BY_TYPE_RSP 0x09 -#define BT_ATT_OP_READ_REQ 0x0a -#define BT_ATT_OP_READ_RSP 0x0b -#define BT_ATT_OP_READ_BLOB_REQ 0x0c -#define BT_ATT_OP_READ_BLOB_RSP 0x0d -#define BT_ATT_OP_READ_MULT_REQ 0x0e -#define BT_ATT_OP_READ_MULT_RSP 0x0f -#define BT_ATT_OP_READ_BY_GRP_TYPE_REQ 0x10 -#define BT_ATT_OP_READ_BY_GRP_TYPE_RSP 0x11 -#define BT_ATT_OP_WRITE_REQ 0x12 -#define BT_ATT_OP_WRITE_RSP 0x13 -#define BT_ATT_OP_WRITE_CMD 0x52 -#define BT_ATT_OP_SIGNED_WRITE_CMD 0xD2 -#define BT_ATT_OP_PREP_WRITE_REQ 0x16 -#define BT_ATT_OP_PREP_WRITE_RSP 0x17 -#define BT_ATT_OP_EXEC_WRITE_REQ 0x18 -#define BT_ATT_OP_EXEC_WRITE_RSP 0x19 -#define BT_ATT_OP_HANDLE_NFY 0x1B -#define BT_ATT_OP_HANDLE_IND 0x1D -#define BT_ATT_OP_HANDLE_CONF 0x1E -#define BT_ATT_OP_READ_MULT_VL_REQ 0x20 -#define BT_ATT_OP_READ_MULT_VL_RSP 0x21 -#define BT_ATT_OP_HANDLE_NFY_MULT 0x23 - -/* Packed struct definitions for ATT protocol PDUs */ -/* TODO: Complete these definitions for all opcodes */ -struct bt_att_pdu_error_rsp { - uint8_t opcode; - uint16_t handle; - uint8_t ecode; -} __packed; - -/* Special opcode to receive all requests (legacy servers) */ -#define BT_ATT_ALL_REQUESTS 0x00 - -/* Error codes for Error response PDU */ -#define BT_ATT_ERROR_INVALID_HANDLE 0x01 -#define BT_ATT_ERROR_READ_NOT_PERMITTED 0x02 -#define BT_ATT_ERROR_WRITE_NOT_PERMITTED 0x03 -#define BT_ATT_ERROR_INVALID_PDU 0x04 -#define BT_ATT_ERROR_AUTHENTICATION 0x05 -#define BT_ATT_ERROR_REQUEST_NOT_SUPPORTED 0x06 -#define BT_ATT_ERROR_INVALID_OFFSET 0x07 -#define BT_ATT_ERROR_AUTHORIZATION 0x08 -#define BT_ATT_ERROR_PREPARE_QUEUE_FULL 0x09 -#define BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND 0x0A -#define BT_ATT_ERROR_ATTRIBUTE_NOT_LONG 0x0B -#define BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE 0x0C -#define BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN 0x0D -#define BT_ATT_ERROR_UNLIKELY 0x0E -#define BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION 0x0F -#define BT_ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10 -#define BT_ATT_ERROR_INSUFFICIENT_RESOURCES 0x11 -#define BT_ATT_ERROR_DB_OUT_OF_SYNC 0x12 -#define BT_ATT_ERROR_VALUE_NOT_ALLOWED 0x13 - -/* - * Common Profile and Service Error Code descriptions (see Supplement to the - * Bluetooth Core Specification, sections 1.2 and 2). The error codes within - * 0xE0-0xFC are reserved for future use. The remaining 3 are defined as the - * following: - */ -#define BT_ERROR_CCC_IMPROPERLY_CONFIGURED 0xfd -#define BT_ERROR_ALREADY_IN_PROGRESS 0xfe -#define BT_ERROR_OUT_OF_RANGE 0xff - -/* - * ATT attribute permission bitfield values. Permissions are grouped as - * "Access", "Encryption", "Authentication", and "Authorization". A bitmask of - * permissions is a byte that encodes a combination of these. - */ -#define BT_ATT_PERM_READ 0x01 -#define BT_ATT_PERM_WRITE 0x02 -#define BT_ATT_PERM_READ_ENCRYPT 0x04 -#define BT_ATT_PERM_WRITE_ENCRYPT 0x08 -#define BT_ATT_PERM_ENCRYPT (BT_ATT_PERM_READ_ENCRYPT | \ - BT_ATT_PERM_WRITE_ENCRYPT) -#define BT_ATT_PERM_READ_AUTHEN 0x10 -#define BT_ATT_PERM_WRITE_AUTHEN 0x20 -#define BT_ATT_PERM_AUTHEN (BT_ATT_PERM_READ_AUTHEN | \ - BT_ATT_PERM_WRITE_AUTHEN) -#define BT_ATT_PERM_AUTHOR 0x40 -#define BT_ATT_PERM_NONE 0x80 -#define BT_ATT_PERM_READ_SECURE 0x0100 -#define BT_ATT_PERM_WRITE_SECURE 0x0200 -#define BT_ATT_PERM_SECURE (BT_ATT_PERM_READ_SECURE | \ - BT_ATT_PERM_WRITE_SECURE) -#define BT_ATT_PERM_READ_MASK (BT_ATT_PERM_READ | \ - BT_ATT_PERM_READ_AUTHEN | \ - BT_ATT_PERM_READ_ENCRYPT | \ - BT_ATT_PERM_READ_SECURE) -#define BT_ATT_PERM_WRITE_MASK (BT_ATT_PERM_WRITE | \ - BT_ATT_PERM_WRITE_AUTHEN | \ - BT_ATT_PERM_WRITE_ENCRYPT | \ - BT_ATT_PERM_WRITE_SECURE) - -/* GATT Characteristic Properties Bitfield values */ -#define BT_GATT_CHRC_PROP_BROADCAST 0x01 -#define BT_GATT_CHRC_PROP_READ 0x02 -#define BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP 0x04 -#define BT_GATT_CHRC_PROP_WRITE 0x08 -#define BT_GATT_CHRC_PROP_NOTIFY 0x10 -#define BT_GATT_CHRC_PROP_INDICATE 0x20 -#define BT_GATT_CHRC_PROP_AUTH 0x40 -#define BT_GATT_CHRC_PROP_EXT_PROP 0x80 - -/* GATT Characteristic Extended Properties Bitfield values */ -#define BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE 0x01 -#define BT_GATT_CHRC_EXT_PROP_WRITABLE_AUX 0x02 -#define BT_GATT_CHRC_EXT_PROP_ENC_READ 0x04 -#define BT_GATT_CHRC_EXT_PROP_ENC_WRITE 0x08 -#define BT_GATT_CHRC_EXT_PROP_ENC (BT_GATT_CHRC_EXT_PROP_ENC_READ | \ - BT_GATT_CHRC_EXT_PROP_ENC_WRITE) -#define BT_GATT_CHRC_EXT_PROP_AUTH_READ 0x10 -#define BT_GATT_CHRC_EXT_PROP_AUTH_WRITE 0x20 -#define BT_GATT_CHRC_EXT_PROP_AUTH (BT_GATT_CHRC_EXT_PROP_AUTH_READ | \ - BT_GATT_CHRC_EXT_PROP_AUTH_WRITE) - -/* GATT Characteristic Client Features Bitfield values */ -#define BT_GATT_CHRC_CLI_FEAT_ROBUST_CACHING 0x01 -#define BT_GATT_CHRC_CLI_FEAT_EATT 0x02 -#define BT_GATT_CHRC_CLI_FEAT_NFY_MULTI 0x04 - -/* GATT Characteristic Server Features Bitfield values */ -#define BT_GATT_CHRC_SERVER_FEAT_EATT 0x01 diff --git a/alfred/src/ble/att.c b/alfred/src/ble/att.c deleted file mode 100644 index 34af1afb4..000000000 --- a/alfred/src/ble/att.c +++ /dev/null @@ -1,1866 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "ble/io.h" -#include "ble/queue.h" -#include "ble/util.h" -#include "ble/timeout.h" -#include -#include -#include "ble/uuid.h" -#include "ble/att.h" -#include "ble/crypto.h" - -#define ATT_MIN_PDU_LEN 1 /* At least 1 byte for the opcode. */ -#define ATT_OP_CMD_MASK 0x40 -#define ATT_OP_SIGNED_MASK 0x80 -#define ATT_TIMEOUT_INTERVAL 30000 /* 30000 ms */ - -/* Length of signature in write signed packet */ -#define BT_ATT_SIGNATURE_LEN 12 - -struct att_send_op; - -struct bt_att_chan { - struct bt_att *att; - int fd; - struct io *io; - uint8_t type; - int sec_level; /* Only used for non-L2CAP */ - - struct queue *queue; /* Channel dedicated queue */ - - struct att_send_op *pending_req; - struct att_send_op *pending_ind; - bool writer_active; - - bool in_req; /* There's a pending incoming request */ - - uint8_t *buf; - uint16_t mtu; -}; - -struct bt_att { - int ref_count; - bool close_on_unref; - struct queue *chans; - uint8_t enc_size; - uint16_t mtu; /* Biggest possible MTU */ - - struct queue *notify_list; /* List of registered callbacks */ - struct queue *disconn_list; /* List of disconnect handlers */ - - unsigned int next_send_id; /* IDs for "send" ops */ - unsigned int next_reg_id; /* IDs for registered callbacks */ - - struct queue *req_queue; /* Queued ATT protocol requests */ - struct queue *ind_queue; /* Queued ATT protocol indications */ - struct queue *write_queue; /* Queue of PDUs ready to send */ - bool in_disc; /* Cleanup queues on disconnect_cb */ - - bt_att_timeout_func_t timeout_callback; - bt_att_destroy_func_t timeout_destroy; - void *timeout_data; - - uint8_t debug_level; - bt_att_debug_func_t debug_callback; - bt_att_destroy_func_t debug_destroy; - void *debug_data; - - struct bt_crypto *crypto; - - struct sign_info *local_sign; - struct sign_info *remote_sign; -}; - -struct sign_info { - uint8_t key[16]; - bt_att_counter_func_t counter; - void *user_data; -}; - -enum att_op_type { - ATT_OP_TYPE_REQ, - ATT_OP_TYPE_RSP, - ATT_OP_TYPE_CMD, - ATT_OP_TYPE_IND, - ATT_OP_TYPE_NFY, - ATT_OP_TYPE_CONF, - ATT_OP_TYPE_UNKNOWN, -}; - -static const struct { - uint8_t opcode; - enum att_op_type type; -} att_opcode_type_table[] = { - { BT_ATT_OP_ERROR_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_MTU_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_MTU_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_FIND_INFO_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_FIND_INFO_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_FIND_BY_TYPE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_FIND_BY_TYPE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_READ_BY_TYPE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_READ_BY_TYPE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_READ_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_READ_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_READ_BLOB_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_READ_BLOB_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_READ_MULT_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_READ_MULT_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_READ_BY_GRP_TYPE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_READ_BY_GRP_TYPE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_WRITE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_WRITE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_WRITE_CMD, ATT_OP_TYPE_CMD }, - { BT_ATT_OP_SIGNED_WRITE_CMD, ATT_OP_TYPE_CMD }, - { BT_ATT_OP_PREP_WRITE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_PREP_WRITE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_EXEC_WRITE_REQ, ATT_OP_TYPE_REQ }, - { BT_ATT_OP_EXEC_WRITE_RSP, ATT_OP_TYPE_RSP }, - { BT_ATT_OP_HANDLE_NFY, ATT_OP_TYPE_NFY }, - { BT_ATT_OP_HANDLE_NFY_MULT, ATT_OP_TYPE_NFY }, - { BT_ATT_OP_HANDLE_IND, ATT_OP_TYPE_IND }, - { BT_ATT_OP_HANDLE_CONF, ATT_OP_TYPE_CONF }, - { } -}; - -static enum att_op_type get_op_type(uint8_t opcode) -{ - int i; - - for (i = 0; att_opcode_type_table[i].opcode; i++) { - if (att_opcode_type_table[i].opcode == opcode) - return att_opcode_type_table[i].type; - } - - if (opcode & ATT_OP_CMD_MASK) - return ATT_OP_TYPE_CMD; - - return ATT_OP_TYPE_UNKNOWN; -} - -static const struct { - uint8_t req_opcode; - uint8_t rsp_opcode; -} att_req_rsp_mapping_table[] = { - { BT_ATT_OP_MTU_REQ, BT_ATT_OP_MTU_RSP }, - { BT_ATT_OP_FIND_INFO_REQ, BT_ATT_OP_FIND_INFO_RSP}, - { BT_ATT_OP_FIND_BY_TYPE_REQ, BT_ATT_OP_FIND_BY_TYPE_RSP }, - { BT_ATT_OP_READ_BY_TYPE_REQ, BT_ATT_OP_READ_BY_TYPE_RSP }, - { BT_ATT_OP_READ_REQ, BT_ATT_OP_READ_RSP }, - { BT_ATT_OP_READ_BLOB_REQ, BT_ATT_OP_READ_BLOB_RSP }, - { BT_ATT_OP_READ_MULT_REQ, BT_ATT_OP_READ_MULT_RSP }, - { BT_ATT_OP_READ_BY_GRP_TYPE_REQ, BT_ATT_OP_READ_BY_GRP_TYPE_RSP }, - { BT_ATT_OP_WRITE_REQ, BT_ATT_OP_WRITE_RSP }, - { BT_ATT_OP_PREP_WRITE_REQ, BT_ATT_OP_PREP_WRITE_RSP }, - { BT_ATT_OP_EXEC_WRITE_REQ, BT_ATT_OP_EXEC_WRITE_RSP }, - { } -}; - -static uint8_t get_req_opcode(uint8_t rsp_opcode) -{ - int i; - - for (i = 0; att_req_rsp_mapping_table[i].rsp_opcode; i++) { - if (att_req_rsp_mapping_table[i].rsp_opcode == rsp_opcode) - return att_req_rsp_mapping_table[i].req_opcode; - } - - return 0; -} - -struct att_send_op { - unsigned int id; - unsigned int timeout_id; - enum att_op_type type; - uint8_t opcode; - void *pdu; - uint16_t len; - bt_att_response_func_t callback; - bt_att_destroy_func_t destroy; - void *user_data; -}; - -static void destroy_att_send_op(void *data) -{ - struct att_send_op *op = data; - - if (op->timeout_id) - timeout_remove(op->timeout_id); - - if (op->destroy) - op->destroy(op->user_data); - - free(op->pdu); - free(op); -} - -static void cancel_att_send_op(void *data) -{ - struct att_send_op *op = data; - - if (op->destroy) - op->destroy(op->user_data); - - op->user_data = NULL; - op->callback = NULL; - op->destroy = NULL; -} - -struct att_notify { - unsigned int id; - uint16_t opcode; - bt_att_notify_func_t callback; - bt_att_destroy_func_t destroy; - void *user_data; -}; - -static void destroy_att_notify(void *data) -{ - struct att_notify *notify = data; - - if (notify->destroy) - notify->destroy(notify->user_data); - - free(notify); -} - -static bool match_notify_id(const void *a, const void *b) -{ - const struct att_notify *notify = a; - unsigned int id = PTR_TO_UINT(b); - - return notify->id == id; -} - -struct att_disconn { - unsigned int id; - bool removed; - bt_att_disconnect_func_t callback; - bt_att_destroy_func_t destroy; - void *user_data; -}; - -static void destroy_att_disconn(void *data) -{ - struct att_disconn *disconn = data; - - if (disconn->destroy) - disconn->destroy(disconn->user_data); - - free(disconn); -} - -static bool match_disconn_id(const void *a, const void *b) -{ - const struct att_disconn *disconn = a; - unsigned int id = PTR_TO_UINT(b); - - return disconn->id == id; -} - -static void att_log(struct bt_att *att, uint8_t level, const char *format, - ...) -{ - va_list va; - - if (att->debug_level < level) - return; - - va_start(va, format); - util_debug_va(att->debug_callback, att->debug_data, format, va); - va_end(va); -} - -#define att_debug(_att, _format, _arg...) \ - att_log(_att, BT_ATT_DEBUG, _format, ## _arg) - -#define att_verbose(_att, _format, _arg...) \ - att_log(_att, BT_ATT_DEBUG_VERBOSE, _format, ## _arg) - -static void att_hexdump(struct bt_att *att, char dir, const void *data, - size_t len) -{ - if (att->debug_level < 2) - return; - - util_hexdump(dir, data, len, att->debug_callback, att->debug_data); -} - -static bool encode_pdu(struct bt_att *att, struct att_send_op *op, - const void *pdu, uint16_t length) -{ - uint16_t pdu_len = 1; - struct sign_info *sign = att->local_sign; - uint32_t sign_cnt; - - if (sign && (op->opcode & ATT_OP_SIGNED_MASK)) - pdu_len += BT_ATT_SIGNATURE_LEN; - - if (length && pdu) - pdu_len += length; - - if (pdu_len > att->mtu) - return false; - - op->len = pdu_len; - op->pdu = malloc(op->len); - if (!op->pdu) - return false; - - ((uint8_t *) op->pdu)[0] = op->opcode; - if (pdu_len > 1) - memcpy(op->pdu + 1, pdu, length); - - if (!sign || !(op->opcode & ATT_OP_SIGNED_MASK) || !att->crypto) - return true; - - if (!sign->counter(&sign_cnt, sign->user_data)) - goto fail; - - if ((bt_crypto_sign_att(att->crypto, sign->key, op->pdu, 1 + length, - sign_cnt, &((uint8_t *) op->pdu)[1 + length]))) - return true; - - att_debug(att, "ATT unable to generate signature"); - -fail: - free(op->pdu); - return false; -} - -static struct att_send_op *create_att_send_op(struct bt_att *att, - uint8_t opcode, - const void *pdu, - uint16_t length, - bt_att_response_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy) -{ - struct att_send_op *op; - enum att_op_type type; - - if (length && !pdu) - return NULL; - - type = get_op_type(opcode); - if (type == ATT_OP_TYPE_UNKNOWN) - return NULL; - - /* If the opcode corresponds to an operation type that does not elicit a - * response from the remote end, then no callback should have been - * provided, since it will never be called. - */ - if (callback && type != ATT_OP_TYPE_REQ && type != ATT_OP_TYPE_IND) - return NULL; - - /* Similarly, if the operation does elicit a response then a callback - * must be provided. - */ - if (!callback && (type == ATT_OP_TYPE_REQ || type == ATT_OP_TYPE_IND)) - return NULL; - - op = new0(struct att_send_op, 1); - op->type = type; - op->opcode = opcode; - op->callback = callback; - op->destroy = destroy; - op->user_data = user_data; - - if (!encode_pdu(att, op, pdu, length)) { - free(op); - return NULL; - } - - return op; -} - -static struct att_send_op *pick_next_send_op(struct bt_att_chan *chan) -{ - struct bt_att *att = chan->att; - struct att_send_op *op; - - /* Check if there is anything queued on the channel */ - op = queue_pop_head(chan->queue); - if (op) - return op; - - /* See if any operations are already in the write queue */ - op = queue_peek_head(att->write_queue); - if (op && op->len <= chan->mtu) - return queue_pop_head(att->write_queue); - - /* If there is no pending request, pick an operation from the - * request queue. - */ - if (!chan->pending_req) { - op = queue_peek_head(att->req_queue); - if (op && op->len <= chan->mtu) - return queue_pop_head(att->req_queue); - } - - /* There is either a request pending or no requests queued. If there is - * no pending indication, pick an operation from the indication queue. - */ - if (!chan->pending_ind) { - op = queue_peek_head(att->ind_queue); - if (op && op->len <= chan->mtu) - return queue_pop_head(att->ind_queue); - } - - return NULL; -} - -static void disc_att_send_op(void *data) -{ - struct att_send_op *op = data; - - if (op->callback) - op->callback(BT_ATT_OP_ERROR_RSP, NULL, 0, op->user_data); - - destroy_att_send_op(op); -} - -struct timeout_data { - struct bt_att_chan *chan; - unsigned int id; -}; - -static bool timeout_cb(void *user_data) -{ - struct timeout_data *timeout = user_data; - struct bt_att_chan *chan = timeout->chan; - struct bt_att *att = chan->att; - struct att_send_op *op = NULL; - - if (chan->pending_req && chan->pending_req->id == timeout->id) { - op = chan->pending_req; - chan->pending_req = NULL; - } else if (chan->pending_ind && chan->pending_ind->id == timeout->id) { - op = chan->pending_ind; - chan->pending_ind = NULL; - } - - if (!op) - return false; - - att_debug(att, "(chan %p) Operation timed out: 0x%02x", chan, - op->opcode); - - if (att->timeout_callback) - att->timeout_callback(op->id, op->opcode, att->timeout_data); - - op->timeout_id = 0; - disc_att_send_op(op); - - /* - * Directly terminate the connection as required by the ATT protocol. - * This should trigger an io disconnect event which will clean up the - * io and notify the upper layer. - */ - io_shutdown(chan->io); - - return false; -} - -static void write_watch_destroy(void *user_data) -{ - struct bt_att_chan *chan = user_data; - - chan->writer_active = false; -} - -static ssize_t bt_att_chan_write(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t len) -{ - struct bt_att *att = chan->att; - ssize_t ret; - struct iovec iov; - - iov.iov_base = (void *) pdu; - iov.iov_len = len; - - att_verbose(att, "(chan %p) ATT op 0x%02x", chan, opcode); - - ret = io_send(chan->io, &iov, 1); - if (ret < 0) { - att_debug(att, "(chan %p) write failed: %s", chan, - strerror(-ret)); - return ret; - } - - if (att->debug_level) - util_hexdump('<', pdu, ret, att->debug_callback, - att->debug_data); - - return ret; -} - -static bool can_write_data(struct io *io, void *user_data) -{ - struct bt_att_chan *chan = user_data; - struct att_send_op *op; - struct timeout_data *timeout; - - op = pick_next_send_op(chan); - if (!op) - return false; - - if (!bt_att_chan_write(chan, op->opcode, op->pdu, op->len)) { - if (op->callback) - op->callback(BT_ATT_OP_ERROR_RSP, NULL, 0, - op->user_data); - destroy_att_send_op(op); - return true; - } - - /* Based on the operation type, set either the pending request or the - * pending indication. If it came from the write queue, then there is - * no need to keep it around. - */ - switch (op->type) { - case ATT_OP_TYPE_REQ: - chan->pending_req = op; - break; - case ATT_OP_TYPE_IND: - chan->pending_ind = op; - break; - case ATT_OP_TYPE_RSP: - /* Set in_req to false to indicate that no request is pending */ - chan->in_req = false; - /* fall through */ - case ATT_OP_TYPE_CMD: - case ATT_OP_TYPE_NFY: - case ATT_OP_TYPE_CONF: - case ATT_OP_TYPE_UNKNOWN: - default: - destroy_att_send_op(op); - return true; - } - - timeout = new0(struct timeout_data, 1); - timeout->chan = chan; - timeout->id = op->id; - op->timeout_id = timeout_add(ATT_TIMEOUT_INTERVAL, timeout_cb, - timeout, free); - - /* Return true as there may be more operations ready to write. */ - return true; -} - -static void wakeup_chan_writer(void *data, void *user_data) -{ - struct bt_att_chan *chan = data; - struct bt_att *att = chan->att; - - if (chan->writer_active) - return; - - /* Set the write handler only if there is anything that can be sent - * at all. - */ - if (queue_isempty(chan->queue) && queue_isempty(att->write_queue)) { - if ((chan->pending_req || queue_isempty(att->req_queue)) && - (chan->pending_ind || queue_isempty(att->ind_queue))) - return; - } - - if (!io_set_write_handler(chan->io, can_write_data, chan, - write_watch_destroy)) - return; - - chan->writer_active = true; -} - -static void wakeup_writer(struct bt_att *att) -{ - queue_foreach(att->chans, wakeup_chan_writer, NULL); -} - -static void disconn_handler(void *data, void *user_data) -{ - struct att_disconn *disconn = data; - int err = PTR_TO_INT(user_data); - - if (disconn->removed) - return; - - if (disconn->callback) - disconn->callback(err, disconn->user_data); -} - -static void bt_att_chan_free(void *data) -{ - struct bt_att_chan *chan = data; - - if (chan->pending_req) - destroy_att_send_op(chan->pending_req); - - if (chan->pending_ind) - destroy_att_send_op(chan->pending_ind); - - queue_destroy(chan->queue, destroy_att_send_op); - - io_destroy(chan->io); - - free(chan->buf); - free(chan); -} - -static bool disconnect_cb(struct io *io, void *user_data) -{ - struct bt_att_chan *chan = user_data; - struct bt_att *att = chan->att; - int err; - socklen_t len; - - len = sizeof(err); - - if (getsockopt(chan->fd, SOL_SOCKET, SO_ERROR, &err, &len) < 0) { - att_debug(att, "(chan %p) Failed to obtain disconnect " - "error: %s", chan, strerror(errno)); - err = 0; - } - - att_debug(att, "Channel %p disconnected: %s", chan, strerror(err)); - - /* Dettach channel */ - queue_remove(att->chans, chan); - - if (chan->pending_req) { - disc_att_send_op(chan->pending_req); - chan->pending_req = NULL; - } - - if (chan->pending_ind) { - disc_att_send_op(chan->pending_ind); - chan->pending_ind = NULL; - } - - bt_att_chan_free(chan); - - /* Don't run disconnect callback if there are channels left */ - if (!queue_isempty(att->chans)) - return false; - - bt_att_ref(att); - - att->in_disc = true; - - /* Notify request callbacks */ - queue_remove_all(att->req_queue, NULL, NULL, disc_att_send_op); - queue_remove_all(att->ind_queue, NULL, NULL, disc_att_send_op); - queue_remove_all(att->write_queue, NULL, NULL, disc_att_send_op); - - att->in_disc = false; - - queue_foreach(att->disconn_list, disconn_handler, INT_TO_PTR(err)); - - bt_att_unregister_all(att); - bt_att_unref(att); - - return false; -} - -static int bt_att_chan_get_security(struct bt_att_chan *chan) -{ - struct bt_security sec; - socklen_t len; - - if (chan->type == BT_ATT_LOCAL) - return chan->sec_level; - - memset(&sec, 0, sizeof(sec)); - len = sizeof(sec); - if (getsockopt(chan->fd, SOL_BLUETOOTH, BT_SECURITY, &sec, &len) < 0) - return -EIO; - - return sec.level; -} - -static bool bt_att_chan_set_security(struct bt_att_chan *chan, int level) -{ - struct bt_security sec; - - if (chan->type == BT_ATT_LOCAL) { - chan->sec_level = level; - return true; - } - - memset(&sec, 0, sizeof(sec)); - sec.level = level; - - if (setsockopt(chan->fd, SOL_BLUETOOTH, BT_SECURITY, &sec, - sizeof(sec)) < 0) - return false; - - return true; -} - -static bool change_security(struct bt_att_chan *chan, uint8_t ecode) -{ - int security; - - if (chan->sec_level != BT_ATT_SECURITY_AUTO) - return false; - - security = bt_att_chan_get_security(chan); - - if (ecode == BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION && - security < BT_ATT_SECURITY_MEDIUM) { - security = BT_ATT_SECURITY_MEDIUM; - } else if (ecode == BT_ATT_ERROR_AUTHENTICATION) { - if (security < BT_ATT_SECURITY_MEDIUM) - security = BT_ATT_SECURITY_MEDIUM; - else if (security < BT_ATT_SECURITY_HIGH) - security = BT_ATT_SECURITY_HIGH; - else if (security < BT_ATT_SECURITY_FIPS) - security = BT_ATT_SECURITY_FIPS; - else - return false; - } else { - return false; - } - - return bt_att_chan_set_security(chan, security); -} - -static bool handle_error_rsp(struct bt_att_chan *chan, uint8_t *pdu, - ssize_t pdu_len, uint8_t *opcode) -{ - struct bt_att *att = chan->att; - const struct bt_att_pdu_error_rsp *rsp; - struct att_send_op *op = chan->pending_req; - - if (pdu_len != sizeof(*rsp)) { - *opcode = 0; - return false; - } - - rsp = (void *) pdu; - - *opcode = rsp->opcode; - - /* Attempt to change security */ - if (!change_security(chan, rsp->ecode)) - return false; - - /* Remove timeout_id if outstanding */ - if (op->timeout_id) { - timeout_remove(op->timeout_id); - op->timeout_id = 0; - } - - att_debug(att, "(chan %p) Retrying operation %p", chan, op); - - chan->pending_req = NULL; - - /* Push operation back to request queue */ - return queue_push_head(att->req_queue, op); -} - -static void handle_rsp(struct bt_att_chan *chan, uint8_t opcode, uint8_t *pdu, - ssize_t pdu_len) -{ - struct bt_att *att = chan->att; - struct att_send_op *op = chan->pending_req; - uint8_t req_opcode; - uint8_t rsp_opcode; - uint8_t *rsp_pdu = NULL; - uint16_t rsp_pdu_len = 0; - - /* - * If no request is pending, then the response is unexpected. Disconnect - * the bearer. - */ - if (!op) { - att_debug(att, "(chan %p) Received unexpected ATT response", - chan); - io_shutdown(chan->io); - return; - } - - /* - * If the received response doesn't match the pending request, or if - * the request is malformed, end the current request with failure. - */ - if (opcode == BT_ATT_OP_ERROR_RSP) { - /* Return if error response cause a retry */ - if (handle_error_rsp(chan, pdu, pdu_len, &req_opcode)) { - wakeup_chan_writer(chan, NULL); - return; - } - } else if (!(req_opcode = get_req_opcode(opcode))) - goto fail; - - if (req_opcode != op->opcode) - goto fail; - - rsp_opcode = opcode; - - if (pdu_len > 0) { - rsp_pdu = pdu; - rsp_pdu_len = pdu_len; - } - - goto done; - -fail: - att_debug(att, "(chan %p) Failed to handle response PDU; opcode: " - "0x%02x", chan, opcode); - - rsp_opcode = BT_ATT_OP_ERROR_RSP; - -done: - if (op->callback) - op->callback(rsp_opcode, rsp_pdu, rsp_pdu_len, op->user_data); - - destroy_att_send_op(op); - chan->pending_req = NULL; - - wakeup_chan_writer(chan, NULL); -} - -static void handle_conf(struct bt_att_chan *chan, uint8_t *pdu, ssize_t pdu_len) -{ - struct bt_att *att = chan->att; - struct att_send_op *op = chan->pending_ind; - - /* - * Disconnect the bearer if the confirmation is unexpected or the PDU is - * invalid. - */ - if (!op || pdu_len) { - att_debug(att, "(chan %p) Received unexpected/invalid ATT " - "confirmation", chan); - io_shutdown(chan->io); - return; - } - - if (op->callback) - op->callback(BT_ATT_OP_HANDLE_CONF, NULL, 0, op->user_data); - - destroy_att_send_op(op); - chan->pending_ind = NULL; - - wakeup_chan_writer(chan, NULL); -} - -struct notify_data { - uint8_t opcode; - uint8_t *pdu; - ssize_t pdu_len; - bool handler_found; -}; - -static bool opcode_match(uint8_t opcode, uint8_t test_opcode) -{ - enum att_op_type op_type = get_op_type(test_opcode); - - if (opcode == BT_ATT_ALL_REQUESTS && (op_type == ATT_OP_TYPE_REQ || - op_type == ATT_OP_TYPE_CMD)) - return true; - - return opcode == test_opcode; -} - -static void respond_not_supported(struct bt_att *att, uint8_t opcode) -{ - struct bt_att_pdu_error_rsp pdu; - - pdu.opcode = opcode; - pdu.handle = 0x0000; - pdu.ecode = BT_ATT_ERROR_REQUEST_NOT_SUPPORTED; - - bt_att_send(att, BT_ATT_OP_ERROR_RSP, &pdu, sizeof(pdu), NULL, NULL, - NULL); -} - -static bool handle_signed(struct bt_att *att, uint8_t *pdu, ssize_t pdu_len) -{ - uint8_t *signature; - uint32_t sign_cnt; - struct sign_info *sign; - uint8_t opcode = pdu[0]; - - /* Check if there is enough data for a signature */ - if (pdu_len < 3 + BT_ATT_SIGNATURE_LEN) - goto fail; - - sign = att->remote_sign; - if (!sign) - goto fail; - - signature = pdu + (pdu_len - BT_ATT_SIGNATURE_LEN); - sign_cnt = get_le32(signature); - - /* Validate counter */ - if (!sign->counter(&sign_cnt, sign->user_data)) - goto fail; - - /* Verify received signature */ - if (!bt_crypto_verify_att_sign(att->crypto, sign->key, pdu, pdu_len)) - goto fail; - - return true; - -fail: - att_debug(att, "ATT failed to verify signature: 0x%02x", opcode); - - return false; -} - -static void handle_notify(struct bt_att_chan *chan, uint8_t *pdu, - ssize_t pdu_len) -{ - struct bt_att *att = chan->att; - const struct queue_entry *entry; - bool found; - uint8_t opcode = pdu[0]; - - bt_att_ref(att); - - found = false; - entry = queue_get_entries(att->notify_list); - - while (entry) { - struct att_notify *notify = entry->data; - - entry = entry->next; - - if (!opcode_match(notify->opcode, opcode)) - continue; - - if ((opcode & ATT_OP_SIGNED_MASK) && att->crypto) { - if (!handle_signed(att, pdu, pdu_len)) - return; - pdu_len -= BT_ATT_SIGNATURE_LEN; - } - - /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G - * page 2370 - * - * 4.3.1 Exchange MTU - * - * This sub-procedure shall not be used on a BR/EDR physical - * link since the MTU size is negotiated using L2CAP channel - * configuration procedures. - */ - if (bt_att_get_link_type(att) == BT_ATT_BREDR) { - switch (opcode) { - case BT_ATT_OP_MTU_REQ: - goto not_supported; - } - } - - found = true; - - if (notify->callback) - notify->callback(chan, opcode, pdu + 1, pdu_len - 1, - notify->user_data); - - /* callback could remove all entries from notify list */ - if (queue_isempty(att->notify_list)) - break; - } - -not_supported: - /* - * If this was not a command and no handler was registered for it, - * respond with "Not Supported" - */ - if (!found && get_op_type(opcode) != ATT_OP_TYPE_CMD) - respond_not_supported(att, opcode); - - bt_att_unref(att); -} - -static bool can_read_data(struct io *io, void *user_data) -{ - struct bt_att_chan *chan = user_data; - struct bt_att *att = chan->att; - uint8_t opcode; - uint8_t *pdu; - ssize_t bytes_read; - - bytes_read = read(chan->fd, chan->buf, chan->mtu); - if (bytes_read < 0) - return false; - - att_verbose(att, "(chan %p) ATT received: %zd", chan, bytes_read); - - att_hexdump(att, '>', chan->buf, bytes_read); - - if (bytes_read < ATT_MIN_PDU_LEN) - return true; - - pdu = chan->buf; - opcode = pdu[0]; - - bt_att_ref(att); - - /* Act on the received PDU based on the opcode type */ - switch (get_op_type(opcode)) { - case ATT_OP_TYPE_RSP: - att_verbose(att, "(chan %p) ATT response received: 0x%02x", - chan, opcode); - handle_rsp(chan, opcode, pdu + 1, bytes_read - 1); - break; - case ATT_OP_TYPE_CONF: - att_verbose(att, "(chan %p) ATT confirmation received: 0x%02x", - chan, opcode); - handle_conf(chan, pdu + 1, bytes_read - 1); - break; - case ATT_OP_TYPE_REQ: - /* - * If a request is currently pending, then the sequential - * protocol was violated. Disconnect the bearer, which will - * promptly notify the upper layer via disconnect handlers. - */ - if (chan->in_req) { - att_debug(att, "(chan %p) Received request while " - "another is pending: 0x%02x", - chan, opcode); - io_shutdown(chan->io); - bt_att_unref(chan->att); - - return false; - } - - chan->in_req = true; - /* fall through */ - case ATT_OP_TYPE_CMD: - case ATT_OP_TYPE_NFY: - case ATT_OP_TYPE_UNKNOWN: - case ATT_OP_TYPE_IND: - /* fall through */ - default: - /* For all other opcodes notify the upper layer of the PDU and - * let them act on it. - */ - att_debug(att, "(chan %p) ATT PDU received: 0x%02x", chan, - opcode); - handle_notify(chan, pdu, bytes_read); - break; - } - - bt_att_unref(att); - - return true; -} - -static bool is_io_l2cap_based(int fd) -{ - int domain; - int proto; - int err; - socklen_t len; - - domain = 0; - len = sizeof(domain); - err = getsockopt(fd, SOL_SOCKET, SO_DOMAIN, &domain, &len); - if (err < 0) - return false; - - if (domain != AF_BLUETOOTH) - return false; - - proto = 0; - len = sizeof(proto); - err = getsockopt(fd, SOL_SOCKET, SO_PROTOCOL, &proto, &len); - if (err < 0) - return false; - - return proto == BTPROTO_L2CAP; -} - -static void bt_att_free(struct bt_att *att) -{ - bt_crypto_unref(att->crypto); - - if (att->timeout_destroy) - att->timeout_destroy(att->timeout_data); - - if (att->debug_destroy) - att->debug_destroy(att->debug_data); - - free(att->local_sign); - free(att->remote_sign); - - queue_destroy(att->req_queue, NULL); - queue_destroy(att->ind_queue, NULL); - queue_destroy(att->write_queue, NULL); - queue_destroy(att->notify_list, NULL); - queue_destroy(att->disconn_list, NULL); - queue_destroy(att->chans, bt_att_chan_free); - - free(att); -} - -static uint16_t io_get_mtu(int fd) -{ - socklen_t len; - struct l2cap_options l2o; - - len = sizeof(l2o); - if (!getsockopt(fd, SOL_L2CAP, L2CAP_OPTIONS, &l2o, &len)) - return l2o.omtu; - - if (!getsockopt(fd, SOL_BLUETOOTH, BT_SNDMTU, &l2o.omtu, &len)) - return l2o.omtu; - - return 0; -} - -static uint8_t io_get_type(int fd) -{ - struct sockaddr_l2 src; - socklen_t len; - - if (!is_io_l2cap_based(fd)) - return BT_ATT_LOCAL; - - len = sizeof(src); - memset(&src, 0, len); - if (getsockname(fd, (void *)&src, &len) < 0) - return -errno; - - if (src.l2_bdaddr_type == BDADDR_BREDR) - return BT_ATT_BREDR; - - return BT_ATT_LE; -} - -static struct bt_att_chan *bt_att_chan_new(int fd, uint8_t type) -{ - struct bt_att_chan *chan; - - if (fd < 0) - return NULL; - - chan = new0(struct bt_att_chan, 1); - chan->fd = fd; - - chan->io = io_new(fd); - if (!chan->io) - goto fail; - - if (!io_set_read_handler(chan->io, can_read_data, chan, NULL)) - goto fail; - - if (!io_set_disconnect_handler(chan->io, disconnect_cb, chan, NULL)) - goto fail; - - chan->type = type; - switch (chan->type) { - case BT_ATT_LOCAL: - chan->sec_level = BT_ATT_SECURITY_LOW; - /* fall through */ - case BT_ATT_LE: - chan->mtu = BT_ATT_DEFAULT_LE_MTU; - break; - default: - chan->mtu = io_get_mtu(chan->fd); - } - - if (chan->mtu < BT_ATT_DEFAULT_LE_MTU) - goto fail; - - chan->buf = malloc(chan->mtu); - if (!chan->buf) - goto fail; - - chan->queue = queue_new(); - - return chan; - -fail: - bt_att_chan_free(chan); - - return NULL; -} - -static void bt_att_attach_chan(struct bt_att *att, struct bt_att_chan *chan) -{ - /* Push to head as EATT channels have higher priority */ - queue_push_head(att->chans, chan); - chan->att = att; - - if (chan->mtu > att->mtu) - att->mtu = chan->mtu; - - io_set_close_on_destroy(chan->io, att->close_on_unref); - - att_debug(att, "Channel %p attached", chan); - - wakeup_chan_writer(chan, NULL); -} - -struct bt_att *bt_att_new(int fd, bool ext_signed) -{ - struct bt_att *att; - struct bt_att_chan *chan; - - chan = bt_att_chan_new(fd, io_get_type(fd)); - if (!chan) - return NULL; - - att = new0(struct bt_att, 1); - att->chans = queue_new(); - att->mtu = chan->mtu; - - /* crypto is optional, if not available leave it NULL */ - if (!ext_signed) - att->crypto = bt_crypto_new(); - - att->req_queue = queue_new(); - att->ind_queue = queue_new(); - att->write_queue = queue_new(); - att->notify_list = queue_new(); - att->disconn_list = queue_new(); - - bt_att_attach_chan(att, chan); - - return bt_att_ref(att); -} - -struct bt_att *bt_att_ref(struct bt_att *att) -{ - if (!att) - return NULL; - - __sync_fetch_and_add(&att->ref_count, 1); - - return att; -} - -void bt_att_unref(struct bt_att *att) -{ - if (!att) - return; - - if (__sync_sub_and_fetch(&att->ref_count, 1)) - return; - - bt_att_unregister_all(att); - bt_att_cancel_all(att); - - bt_att_free(att); -} - -bool bt_att_set_close_on_unref(struct bt_att *att, bool do_close) -{ - const struct queue_entry *entry; - - if (!att) - return false; - - att->close_on_unref = do_close; - - for (entry = queue_get_entries(att->chans); entry; - entry = entry->next) { - struct bt_att_chan *chan = entry->data; - - if (!io_set_close_on_destroy(chan->io, do_close)) - return false; - } - - return true; -} - -int bt_att_attach_fd(struct bt_att *att, int fd) -{ - struct bt_att_chan *chan; - - if (!att || fd < 0) - return -EINVAL; - - chan = bt_att_chan_new(fd, BT_ATT_EATT); - if (!chan) - return -EINVAL; - - bt_att_attach_chan(att, chan); - - return 0; -} - -int bt_att_get_fd(struct bt_att *att) -{ - struct bt_att_chan *chan; - - if (!att) - return -1; - - if (queue_isempty(att->chans)) - return -ENOTCONN; - - chan = queue_peek_tail(att->chans); - - return chan->fd; -} - -int bt_att_get_channels(struct bt_att *att) -{ - if (!att) - return 0; - - return queue_length(att->chans); -} - -bool bt_att_set_debug(struct bt_att *att, uint8_t level, - bt_att_debug_func_t callback, void *user_data, - bt_att_destroy_func_t destroy) -{ - if (!att) - return false; - - if (att->debug_destroy) - att->debug_destroy(att->debug_data); - - att->debug_level = level; - att->debug_callback = callback; - att->debug_destroy = destroy; - att->debug_data = user_data; - - return true; -} - -uint16_t bt_att_get_mtu(struct bt_att *att) -{ - if (!att) - return 0; - - return att->mtu; -} - -bool bt_att_set_mtu(struct bt_att *att, uint16_t mtu) -{ - struct bt_att_chan *chan; - void *buf; - - if (!att) - return false; - - if (mtu < BT_ATT_DEFAULT_LE_MTU) - return false; - - /* Original channel is always the last */ - chan = queue_peek_tail(att->chans); - if (!chan) - return -ENOTCONN; - - buf = malloc(mtu); - if (!buf) - return false; - - free(chan->buf); - - chan->mtu = mtu; - chan->buf = buf; - - if (chan->mtu > att->mtu) - att->mtu = chan->mtu; - - return true; -} - -uint8_t bt_att_get_link_type(struct bt_att *att) -{ - struct bt_att_chan *chan; - - if (!att) - return -EINVAL; - - chan = queue_peek_tail(att->chans); - if (!chan) - return -ENOTCONN; - - return chan->type; -} - -bool bt_att_set_timeout_cb(struct bt_att *att, bt_att_timeout_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy) -{ - if (!att) - return false; - - if (att->timeout_destroy) - att->timeout_destroy(att->timeout_data); - - att->timeout_callback = callback; - att->timeout_destroy = destroy; - att->timeout_data = user_data; - - return true; -} - -unsigned int bt_att_register_disconnect(struct bt_att *att, - bt_att_disconnect_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy) -{ - struct att_disconn *disconn; - - if (!att || queue_isempty(att->chans)) - return 0; - - disconn = new0(struct att_disconn, 1); - disconn->callback = callback; - disconn->destroy = destroy; - disconn->user_data = user_data; - - if (att->next_reg_id < 1) - att->next_reg_id = 1; - - disconn->id = att->next_reg_id++; - - if (!queue_push_tail(att->disconn_list, disconn)) { - free(disconn); - return 0; - } - - return disconn->id; -} - -bool bt_att_unregister_disconnect(struct bt_att *att, unsigned int id) -{ - struct att_disconn *disconn; - - if (!att || !id) - return false; - - /* Check if disconnect is running */ - if (queue_isempty(att->chans)) { - disconn = queue_find(att->disconn_list, match_disconn_id, - UINT_TO_PTR(id)); - if (!disconn) - return false; - - disconn->removed = true; - return true; - } - - disconn = queue_remove_if(att->disconn_list, match_disconn_id, - UINT_TO_PTR(id)); - if (!disconn) - return false; - - destroy_att_disconn(disconn); - return true; -} - -unsigned int bt_att_send(struct bt_att *att, uint8_t opcode, - const void *pdu, uint16_t length, - bt_att_response_func_t callback, void *user_data, - bt_att_destroy_func_t destroy) -{ - struct att_send_op *op; - bool result; - - if (!att || queue_isempty(att->chans)) - return 0; - - op = create_att_send_op(att, opcode, pdu, length, callback, user_data, - destroy); - if (!op) - return 0; - - if (att->next_send_id < 1) - att->next_send_id = 1; - - op->id = att->next_send_id++; - - /* Add the op to the correct queue based on its type */ - switch (op->type) { - case ATT_OP_TYPE_REQ: - result = queue_push_tail(att->req_queue, op); - break; - case ATT_OP_TYPE_IND: - result = queue_push_tail(att->ind_queue, op); - break; - case ATT_OP_TYPE_CMD: - case ATT_OP_TYPE_NFY: - case ATT_OP_TYPE_UNKNOWN: - case ATT_OP_TYPE_RSP: - case ATT_OP_TYPE_CONF: - default: - result = queue_push_tail(att->write_queue, op); - break; - } - - if (!result) { - free(op->pdu); - free(op); - return 0; - } - - wakeup_writer(att); - - return op->id; -} - -unsigned int bt_att_chan_send(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t len, - bt_att_response_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy) -{ - struct att_send_op *op; - - if (!chan || !chan->att) - return -EINVAL; - - op = create_att_send_op(chan->att, opcode, pdu, len, callback, - user_data, destroy); - if (!op) - return -EINVAL; - - if (!queue_push_tail(chan->queue, op)) { - free(op->pdu); - free(op); - return 0; - } - - wakeup_chan_writer(chan, NULL); - - return op->id; -} - -static bool match_op_id(const void *a, const void *b) -{ - const struct att_send_op *op = a; - unsigned int id = PTR_TO_UINT(b); - - return op->id == id; -} - -bool bt_att_chan_cancel(struct bt_att_chan *chan, unsigned int id) -{ - struct att_send_op *op; - - if (chan->pending_req && chan->pending_req->id == id) { - /* Don't cancel the pending request; remove it's handlers */ - cancel_att_send_op(chan->pending_req); - return true; - } - - if (chan->pending_ind && chan->pending_ind->id == id) { - /* Don't cancel the pending indication; remove it's handlers. */ - cancel_att_send_op(chan->pending_ind); - return true; - } - - op = queue_remove_if(chan->queue, match_op_id, UINT_TO_PTR(id)); - if (!op) - return false; - - destroy_att_send_op(op); - - wakeup_chan_writer(chan, NULL); - - return true; -} - -static bool bt_att_disc_cancel(struct bt_att *att, unsigned int id) -{ - struct att_send_op *op; - - op = queue_find(att->req_queue, match_op_id, UINT_TO_PTR(id)); - if (op) - goto done; - - op = queue_find(att->ind_queue, match_op_id, UINT_TO_PTR(id)); - if (op) - goto done; - - op = queue_find(att->write_queue, match_op_id, UINT_TO_PTR(id)); - -done: - if (!op) - return false; - - /* Just cancel since disconnect_cb will be cleaning up */ - cancel_att_send_op(op); - - return true; -} - -bool bt_att_cancel(struct bt_att *att, unsigned int id) -{ - const struct queue_entry *entry; - struct att_send_op *op; - - if (!att || !id) - return false; - - /* Lookuo request on each channel first */ - for (entry = queue_get_entries(att->chans); entry; - entry = entry->next) { - struct bt_att_chan *chan = entry->data; - - if (bt_att_chan_cancel(chan, id)) - return true; - } - - if (att->in_disc) - return bt_att_disc_cancel(att, id); - - op = queue_remove_if(att->req_queue, match_op_id, UINT_TO_PTR(id)); - if (op) - goto done; - - op = queue_remove_if(att->ind_queue, match_op_id, UINT_TO_PTR(id)); - if (op) - goto done; - - op = queue_remove_if(att->write_queue, match_op_id, UINT_TO_PTR(id)); - if (op) - goto done; - - if (!op) - return false; - -done: - destroy_att_send_op(op); - - wakeup_writer(att); - - return true; -} - -bool bt_att_cancel_all(struct bt_att *att) -{ - const struct queue_entry *entry; - - if (!att) - return false; - - queue_remove_all(att->req_queue, NULL, NULL, destroy_att_send_op); - queue_remove_all(att->ind_queue, NULL, NULL, destroy_att_send_op); - queue_remove_all(att->write_queue, NULL, NULL, destroy_att_send_op); - - for (entry = queue_get_entries(att->chans); entry; - entry = entry->next) { - struct bt_att_chan *chan = entry->data; - - if (chan->pending_req) - /* Don't cancel the pending request; remove it's - * handlers - */ - cancel_att_send_op(chan->pending_req); - - if (chan->pending_ind) - /* Don't cancel the pending request; remove it's - * handlers - */ - cancel_att_send_op(chan->pending_ind); - } - - return true; -} - -static uint8_t att_ecode_from_error(int err) -{ - /* - * If the error fits in a single byte, treat it as an ATT protocol - * error as is. Since "0" is not a valid ATT protocol error code, we map - * that to UNLIKELY below. - */ - if (err > 0 && err < UINT8_MAX) - return err; - - /* - * Since we allow UNIX errnos, map them to appropriate ATT protocol - * and "Common Profile and Service" error codes. - */ - switch (err) { - case -ENOENT: - return BT_ATT_ERROR_INVALID_HANDLE; - case -ENOMEM: - return BT_ATT_ERROR_INSUFFICIENT_RESOURCES; - case -EALREADY: - return BT_ERROR_ALREADY_IN_PROGRESS; - case -EOVERFLOW: - return BT_ERROR_OUT_OF_RANGE; - } - - return BT_ATT_ERROR_UNLIKELY; -} - -int bt_att_chan_send_error_rsp(struct bt_att_chan *chan, uint8_t opcode, - uint16_t handle, int error) -{ - struct bt_att_pdu_error_rsp pdu; - uint8_t ecode; - - if (!chan || !chan->att || !opcode) - return -EINVAL; - - ecode = att_ecode_from_error(error); - - memset(&pdu, 0, sizeof(pdu)); - - pdu.opcode = opcode; - put_le16(handle, &pdu.handle); - pdu.ecode = ecode; - - return bt_att_chan_send_rsp(chan, BT_ATT_OP_ERROR_RSP, &pdu, - sizeof(pdu)); -} - -unsigned int bt_att_register(struct bt_att *att, uint8_t opcode, - bt_att_notify_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy) -{ - struct att_notify *notify; - - if (!att || !callback || queue_isempty(att->chans)) - return 0; - - notify = new0(struct att_notify, 1); - notify->opcode = opcode; - notify->callback = callback; - notify->destroy = destroy; - notify->user_data = user_data; - - if (att->next_reg_id < 1) - att->next_reg_id = 1; - - notify->id = att->next_reg_id++; - - if (!queue_push_tail(att->notify_list, notify)) { - free(notify); - return 0; - } - - return notify->id; -} - -bool bt_att_unregister(struct bt_att *att, unsigned int id) -{ - struct att_notify *notify; - - if (!att || !id) - return false; - - notify = queue_remove_if(att->notify_list, match_notify_id, - UINT_TO_PTR(id)); - if (!notify) - return false; - - destroy_att_notify(notify); - return true; -} - -bool bt_att_unregister_all(struct bt_att *att) -{ - if (!att) - return false; - - queue_remove_all(att->notify_list, NULL, NULL, destroy_att_notify); - queue_remove_all(att->disconn_list, NULL, NULL, destroy_att_disconn); - - return true; -} - -int bt_att_get_security(struct bt_att *att, uint8_t *enc_size) -{ - struct bt_att_chan *chan; - int ret; - - if (!att) - return -EINVAL; - - chan = queue_peek_tail(att->chans); - if (!chan) - return -ENOTCONN; - - ret = bt_att_chan_get_security(chan); - if (ret < 0) - return ret; - - if (enc_size) - *enc_size = att->enc_size; - - return ret; -} - -bool bt_att_set_security(struct bt_att *att, int level) -{ - struct bt_att_chan *chan; - - if (!att || level < BT_ATT_SECURITY_AUTO || - level > BT_ATT_SECURITY_HIGH) - return false; - - chan = queue_peek_tail(att->chans); - if (!chan) - return -ENOTCONN; - - return bt_att_chan_set_security(chan, level); -} - -void bt_att_set_enc_key_size(struct bt_att *att, uint8_t enc_size) -{ - if (!att) - return; - - att->enc_size = enc_size; -} - -static bool sign_set_key(struct sign_info **sign, uint8_t key[16], - bt_att_counter_func_t func, void *user_data) -{ - if (!(*sign)) - *sign = new0(struct sign_info, 1); - - (*sign)->counter = func; - (*sign)->user_data = user_data; - memcpy((*sign)->key, key, 16); - - return true; -} - -bool bt_att_set_local_key(struct bt_att *att, uint8_t sign_key[16], - bt_att_counter_func_t func, void *user_data) -{ - if (!att) - return false; - - return sign_set_key(&att->local_sign, sign_key, func, user_data); -} - -bool bt_att_set_remote_key(struct bt_att *att, uint8_t sign_key[16], - bt_att_counter_func_t func, void *user_data) -{ - if (!att) - return false; - - return sign_set_key(&att->remote_sign, sign_key, func, user_data); -} - -bool bt_att_has_crypto(struct bt_att *att) -{ - if (!att) - return false; - - return att->crypto ? true : false; -} diff --git a/alfred/src/ble/att.h b/alfred/src/ble/att.h deleted file mode 100644 index cfa5c3dd9..000000000 --- a/alfred/src/ble/att.h +++ /dev/null @@ -1,101 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -#include -#include - -#include "ble/att-types.h" - -#define BT_ATT_DEBUG 0x00 -#define BT_ATT_DEBUG_VERBOSE 0x01 -#define BT_ATT_DEBUG_HEXDUMP 0x02 - -struct bt_att; -struct bt_att_chan; - -struct bt_att *bt_att_new(int fd, bool ext_signed); - -struct bt_att *bt_att_ref(struct bt_att *att); -void bt_att_unref(struct bt_att *att); - -bool bt_att_set_close_on_unref(struct bt_att *att, bool do_close); - -int bt_att_get_fd(struct bt_att *att); - -int bt_att_attach_fd(struct bt_att *att, int fd); - -int bt_att_get_channels(struct bt_att *att); - -typedef void (*bt_att_response_func_t)(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data); -typedef void (*bt_att_notify_func_t)(struct bt_att_chan *chan, - uint8_t opcode, const void *pdu, - uint16_t length, void *user_data); -typedef void (*bt_att_destroy_func_t)(void *user_data); -typedef void (*bt_att_debug_func_t)(const char *str, void *user_data); -typedef void (*bt_att_timeout_func_t)(unsigned int id, uint8_t opcode, - void *user_data); -typedef void (*bt_att_disconnect_func_t)(int err, void *user_data); -typedef bool (*bt_att_counter_func_t)(uint32_t *sign_cnt, void *user_data); - -bool bt_att_set_debug(struct bt_att *att, uint8_t level, - bt_att_debug_func_t callback, void *user_data, - bt_att_destroy_func_t destroy); - -uint16_t bt_att_get_mtu(struct bt_att *att); -bool bt_att_set_mtu(struct bt_att *att, uint16_t mtu); -uint8_t bt_att_get_link_type(struct bt_att *att); - -bool bt_att_set_timeout_cb(struct bt_att *att, bt_att_timeout_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy); - -unsigned int bt_att_send(struct bt_att *att, uint8_t opcode, - const void *pdu, uint16_t length, - bt_att_response_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy); -unsigned int bt_att_chan_send(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t len, - bt_att_response_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy); -#define bt_att_chan_send_rsp(chan, opcode, pdu, len) \ - bt_att_chan_send(chan, opcode, pdu, len, NULL, NULL, NULL) -bool bt_att_chan_cancel(struct bt_att_chan *chan, unsigned int id); -bool bt_att_cancel(struct bt_att *att, unsigned int id); -bool bt_att_cancel_all(struct bt_att *att); - -int bt_att_chan_send_error_rsp(struct bt_att_chan *chan, uint8_t opcode, - uint16_t handle, int error); - -unsigned int bt_att_register(struct bt_att *att, uint8_t opcode, - bt_att_notify_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy); -bool bt_att_unregister(struct bt_att *att, unsigned int id); - -unsigned int bt_att_register_disconnect(struct bt_att *att, - bt_att_disconnect_func_t callback, - void *user_data, - bt_att_destroy_func_t destroy); -bool bt_att_unregister_disconnect(struct bt_att *att, unsigned int id); - -bool bt_att_unregister_all(struct bt_att *att); - -int bt_att_get_security(struct bt_att *att, uint8_t *enc_size); -bool bt_att_set_security(struct bt_att *att, int level); -void bt_att_set_enc_key_size(struct bt_att *att, uint8_t enc_size); - -bool bt_att_set_local_key(struct bt_att *att, uint8_t sign_key[16], - bt_att_counter_func_t func, void *user_data); -bool bt_att_set_remote_key(struct bt_att *att, uint8_t sign_key[16], - bt_att_counter_func_t func, void *user_data); -bool bt_att_has_crypto(struct bt_att *att); diff --git a/alfred/src/ble/crypto.c b/alfred/src/ble/crypto.c deleted file mode 100644 index 693312a21..000000000 --- a/alfred/src/ble/crypto.c +++ /dev/null @@ -1,739 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "ble/util.h" -#include "ble/crypto.h" - -#ifndef HAVE_LINUX_IF_ALG_H -#ifndef HAVE_LINUX_TYPES_H -typedef uint8_t __u8; -typedef uint16_t __u16; -typedef uint32_t __u32; -#else -#include -#endif - -struct sockaddr_alg { - __u16 salg_family; - __u8 salg_type[14]; - __u32 salg_feat; - __u32 salg_mask; - __u8 salg_name[64]; -}; - -struct af_alg_iv { - __u32 ivlen; - __u8 iv[0]; -}; - -#define ALG_SET_KEY 1 -#define ALG_SET_IV 2 -#define ALG_SET_OP 3 - -#define ALG_OP_DECRYPT 0 -#define ALG_OP_ENCRYPT 1 - -#define PF_ALG 38 /* Algorithm sockets. */ -#define AF_ALG PF_ALG -#else -#include -#endif - -#ifndef SOL_ALG -#define SOL_ALG 279 -#endif - -/* Maximum message length that can be passed to aes_cmac */ -#define CMAC_MSG_MAX 80 - -#define ATT_SIGN_LEN 12 - -struct bt_crypto { - int ref_count; - int ecb_aes; - int urandom; - int cmac_aes; -}; - -static int urandom_setup(void) -{ - int fd; - - fd = open("/dev/urandom", O_RDONLY); - if (fd < 0) - return -1; - - return fd; -} - -static int ecb_aes_setup(void) -{ - struct sockaddr_alg salg; - int fd; - - fd = socket(PF_ALG, SOCK_SEQPACKET | SOCK_CLOEXEC, 0); - if (fd < 0) - return -1; - - memset(&salg, 0, sizeof(salg)); - salg.salg_family = AF_ALG; - strcpy((char *) salg.salg_type, "skcipher"); - strcpy((char *) salg.salg_name, "ecb(aes)"); - - if (bind(fd, (struct sockaddr *) &salg, sizeof(salg)) < 0) { - close(fd); - return -1; - } - - return fd; -} - -static int cmac_aes_setup(void) -{ - struct sockaddr_alg salg; - int fd; - - fd = socket(PF_ALG, SOCK_SEQPACKET | SOCK_CLOEXEC, 0); - if (fd < 0) - return -1; - - memset(&salg, 0, sizeof(salg)); - salg.salg_family = AF_ALG; - strcpy((char *) salg.salg_type, "hash"); - strcpy((char *) salg.salg_name, "cmac(aes)"); - - if (bind(fd, (struct sockaddr *) &salg, sizeof(salg)) < 0) { - close(fd); - return -1; - } - - return fd; -} - -static struct bt_crypto *singleton; - -struct bt_crypto *bt_crypto_new(void) -{ - if (singleton) - return bt_crypto_ref(singleton); - - singleton = new0(struct bt_crypto, 1); - - singleton->ecb_aes = ecb_aes_setup(); - if (singleton->ecb_aes < 0) { - free(singleton); - singleton = NULL; - return NULL; - } - - singleton->urandom = urandom_setup(); - if (singleton->urandom < 0) { - close(singleton->ecb_aes); - free(singleton); - singleton = NULL; - return NULL; - } - - singleton->cmac_aes = cmac_aes_setup(); - if (singleton->cmac_aes < 0) { - close(singleton->urandom); - close(singleton->ecb_aes); - free(singleton); - singleton = NULL; - return NULL; - } - - return bt_crypto_ref(singleton); -} - -struct bt_crypto *bt_crypto_ref(struct bt_crypto *crypto) -{ - if (!crypto) - return NULL; - - __sync_fetch_and_add(&crypto->ref_count, 1); - - return crypto; -} - -void bt_crypto_unref(struct bt_crypto *crypto) -{ - if (!crypto) - return; - - if (__sync_sub_and_fetch(&crypto->ref_count, 1)) - return; - - close(crypto->urandom); - close(crypto->ecb_aes); - close(crypto->cmac_aes); - - free(crypto); - singleton = NULL; -} - -bool bt_crypto_random_bytes(struct bt_crypto *crypto, - void *buf, uint8_t num_bytes) -{ - ssize_t len; - - if (!crypto) - return false; - - len = read(crypto->urandom, buf, num_bytes); - if (len < num_bytes) - return false; - - return true; -} - -static int alg_new(int fd, const void *keyval, socklen_t keylen) -{ - if (setsockopt(fd, SOL_ALG, ALG_SET_KEY, keyval, keylen) < 0) - return -1; - - /* FIXME: This should use accept4() with SOCK_CLOEXEC */ - return accept(fd, NULL, 0); -} - -static bool alg_encrypt(int fd, const void *inbuf, size_t inlen, - void *outbuf, size_t outlen) -{ - __u32 alg_op = ALG_OP_ENCRYPT; - char cbuf[CMSG_SPACE(sizeof(alg_op))]; - struct cmsghdr *cmsg; - struct msghdr msg; - struct iovec iov; - ssize_t len; - - memset(cbuf, 0, sizeof(cbuf)); - memset(&msg, 0, sizeof(msg)); - - msg.msg_control = cbuf; - msg.msg_controllen = sizeof(cbuf); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_ALG; - cmsg->cmsg_type = ALG_SET_OP; - cmsg->cmsg_len = CMSG_LEN(sizeof(alg_op)); - memcpy(CMSG_DATA(cmsg), &alg_op, sizeof(alg_op)); - - iov.iov_base = (void *) inbuf; - iov.iov_len = inlen; - - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - len = sendmsg(fd, &msg, 0); - if (len < 0) - return false; - - len = read(fd, outbuf, outlen); - if (len < 0) - return false; - - return true; -} - -static inline void swap_buf(const uint8_t *src, uint8_t *dst, uint16_t len) -{ - int i; - - for (i = 0; i < len; i++) - dst[len - 1 - i] = src[i]; -} - -bool bt_crypto_sign_att(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t *m, uint16_t m_len, - uint32_t sign_cnt, - uint8_t signature[ATT_SIGN_LEN]) -{ - int fd; - int len; - uint8_t tmp[16], out[16]; - uint16_t msg_len = m_len + sizeof(uint32_t); - uint8_t msg[msg_len]; - uint8_t msg_s[msg_len]; - - if (!crypto) - return false; - - memset(msg, 0, msg_len); - memcpy(msg, m, m_len); - - /* Add sign_counter to the message */ - put_le32(sign_cnt, msg + m_len); - - /* The most significant octet of key corresponds to key[0] */ - swap_buf(key, tmp, 16); - - fd = alg_new(crypto->cmac_aes, tmp, 16); - if (fd < 0) - return false; - - /* Swap msg before signing */ - swap_buf(msg, msg_s, msg_len); - - len = send(fd, msg_s, msg_len, 0); - if (len < 0) { - close(fd); - return false; - } - - len = read(fd, out, 16); - if (len < 0) { - close(fd); - return false; - } - - close(fd); - - /* - * As to BT spec. 4.1 Vol[3], Part C, chapter 10.4.1 sign counter should - * be placed in the signature - */ - put_be32(sign_cnt, out + 8); - - /* - * The most significant octet of hash corresponds to out[0] - swap it. - * Then truncate in most significant bit first order to a length of - * 12 octets - */ - swap_buf(out, tmp, 16); - memcpy(signature, tmp + 4, ATT_SIGN_LEN); - - return true; -} - -bool bt_crypto_verify_att_sign(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t *pdu, uint16_t pdu_len) -{ - uint8_t generated_sign[ATT_SIGN_LEN]; - const uint8_t *sign; - uint32_t sign_cnt; - - if (pdu_len < ATT_SIGN_LEN) - return false; - - sign = pdu + pdu_len - ATT_SIGN_LEN; - sign_cnt = get_le32(sign); - - if (!bt_crypto_sign_att(crypto, key, pdu, pdu_len - ATT_SIGN_LEN, - sign_cnt, generated_sign)) - return false; - - return memcmp(generated_sign, sign, ATT_SIGN_LEN) == 0; -} - -/* - * Security function e - * - * Security function e generates 128-bit encryptedData from a 128-bit key - * and 128-bit plaintextData using the AES-128-bit block cypher: - * - * encryptedData = e(key, plaintextData) - * - * The most significant octet of key corresponds to key[0], the most - * significant octet of plaintextData corresponds to in[0] and the - * most significant octet of encryptedData corresponds to out[0]. - * - */ -bool bt_crypto_e(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t plaintext[16], uint8_t encrypted[16]) -{ - uint8_t tmp[16], in[16], out[16]; - int fd; - - if (!crypto) - return false; - - /* The most significant octet of key corresponds to key[0] */ - swap_buf(key, tmp, 16); - - fd = alg_new(crypto->ecb_aes, tmp, 16); - if (fd < 0) - return false; - - - /* Most significant octet of plaintextData corresponds to in[0] */ - swap_buf(plaintext, in, 16); - - if (!alg_encrypt(fd, in, 16, out, 16)) { - close(fd); - return false; - } - - /* Most significant octet of encryptedData corresponds to out[0] */ - swap_buf(out, encrypted, 16); - - close(fd); - - return true; -} - -/* - * Random Address Hash function ah - * - * The random address hash function ah is used to generate a hash value - * that is used in resolvable private addresses. - * - * The following are inputs to the random address hash function ah: - * - * k is 128 bits - * r is 24 bits - * padding is 104 bits - * - * r is concatenated with padding to generate r' which is used as the - * 128-bit input parameter plaintextData to security function e: - * - * r' = padding || r - * - * The least significant octet of r becomes the least significant octet - * of r’ and the most significant octet of padding becomes the most - * significant octet of r'. - * - * For example, if the 24-bit value r is 0x423456 then r' is - * 0x00000000000000000000000000423456. - * - * The output of the random address function ah is: - * - * ah(k, r) = e(k, r') mod 2^24 - * - * The output of the security function e is then truncated to 24 bits by - * taking the least significant 24 bits of the output of e as the result - * of ah. - */ -bool bt_crypto_ah(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r[3], uint8_t hash[3]) -{ - uint8_t rp[16]; - uint8_t encrypted[16]; - - if (!crypto) - return false; - - /* r' = padding || r */ - memcpy(rp, r, 3); - memset(rp + 3, 0, 13); - - /* e(k, r') */ - if (!bt_crypto_e(crypto, k, rp, encrypted)) - return false; - - /* ah(k, r) = e(k, r') mod 2^24 */ - memcpy(hash, encrypted, 3); - - return true; -} - -typedef struct { - uint64_t a, b; -} u128; - -static inline void u128_xor(const uint8_t p[16], const uint8_t q[16], - uint8_t r[16]) -{ - u128 pp, qq, rr; - - memcpy(&pp, p, 16); - memcpy(&qq, q, 16); - - rr.a = pp.a ^ qq.a; - rr.b = pp.b ^ qq.b; - - memcpy(r, &rr, 16); -} - -/* - * Confirm value generation function c1 - * - * During the pairing process confirm values are exchanged. This confirm - * value generation function c1 is used to generate the confirm values. - * - * The following are inputs to the confirm value generation function c1: - * - * k is 128 bits - * r is 128 bits - * pres is 56 bits - * preq is 56 bits - * iat is 1 bit - * ia is 48 bits - * rat is 1 bit - * ra is 48 bits - * padding is 32 bits of 0 - * - * iat is concatenated with 7-bits of 0 to create iat' which is 8 bits - * in length. iat is the least significant bit of iat' - * - * rat is concatenated with 7-bits of 0 to create rat' which is 8 bits - * in length. rat is the least significant bit of rat' - * - * pres, preq, rat' and iat' are concatenated to generate p1 which is - * XORed with r and used as 128-bit input parameter plaintextData to - * security function e: - * - * p1 = pres || preq || rat' || iat' - * - * The octet of iat' becomes the least significant octet of p1 and the - * most significant octet of pres becomes the most significant octet of - * p1. - * - * ra is concatenated with ia and padding to generate p2 which is XORed - * with the result of the security function e using p1 as the input - * paremter plaintextData and is then used as the 128-bit input - * parameter plaintextData to security function e: - * - * p2 = padding || ia || ra - * - * The least significant octet of ra becomes the least significant octet - * of p2 and the most significant octet of padding becomes the most - * significant octet of p2. - * - * The output of the confirm value generation function c1 is: - * - * c1(k, r, preq, pres, iat, rat, ia, ra) = e(k, e(k, r XOR p1) XOR p2) - * - * The 128-bit output of the security function e is used as the result - * of confirm value generation function c1. - */ -bool bt_crypto_c1(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r[16], const uint8_t pres[7], - const uint8_t preq[7], uint8_t iat, - const uint8_t ia[6], uint8_t rat, - const uint8_t ra[6], uint8_t res[16]) -{ - uint8_t p1[16], p2[16]; - - /* p1 = pres || preq || _rat || _iat */ - p1[0] = iat; - p1[1] = rat; - memcpy(p1 + 2, preq, 7); - memcpy(p1 + 9, pres, 7); - - /* p2 = padding || ia || ra */ - memcpy(p2, ra, 6); - memcpy(p2 + 6, ia, 6); - memset(p2 + 12, 0, 4); - - /* res = r XOR p1 */ - u128_xor(r, p1, res); - - /* res = e(k, res) */ - if (!bt_crypto_e(crypto, k, res, res)) - return false; - - /* res = res XOR p2 */ - u128_xor(res, p2, res); - - /* res = e(k, res) */ - return bt_crypto_e(crypto, k, res, res); -} - -/* - * Key generation function s1 - * - * The key generation function s1 is used to generate the STK during the - * pairing process. - * - * The following are inputs to the key generation function s1: - * - * k is 128 bits - * r1 is 128 bits - * r2 is 128 bits - * - * The most significant 64-bits of r1 are discarded to generate r1' and - * the most significant 64-bits of r2 are discarded to generate r2'. - * - * r1' is concatenated with r2' to generate r' which is used as the - * 128-bit input parameter plaintextData to security function e: - * - * r' = r1' || r2' - * - * The least significant octet of r2' becomes the least significant - * octet of r' and the most significant octet of r1' becomes the most - * significant octet of r'. - * - * The output of the key generation function s1 is: - * - * s1(k, r1, r2) = e(k, r') - * - * The 128-bit output of the security function e is used as the result - * of key generation function s1. - */ -bool bt_crypto_s1(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r1[16], const uint8_t r2[16], - uint8_t res[16]) -{ - memcpy(res, r2, 8); - memcpy(res + 8, r1, 8); - - return bt_crypto_e(crypto, k, res, res); -} - -static bool aes_cmac(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t *msg, size_t msg_len, uint8_t res[16]) -{ - uint8_t key_msb[16], out[16], msg_msb[CMAC_MSG_MAX]; - ssize_t len; - int fd; - - if (msg_len > CMAC_MSG_MAX) - return false; - - swap_buf(key, key_msb, 16); - fd = alg_new(crypto->cmac_aes, key_msb, 16); - if (fd < 0) - return false; - - swap_buf(msg, msg_msb, msg_len); - len = send(fd, msg_msb, msg_len, 0); - if (len < 0) { - close(fd); - return false; - } - - len = read(fd, out, 16); - if (len < 0) { - close(fd); - return false; - } - - swap_buf(out, res, 16); - - close(fd); - - return true; -} - -bool bt_crypto_f4(struct bt_crypto *crypto, uint8_t u[32], uint8_t v[32], - uint8_t x[16], uint8_t z, uint8_t res[16]) -{ - uint8_t m[65]; - - if (!crypto) - return false; - - m[0] = z; - memcpy(&m[1], v, 32); - memcpy(&m[33], u, 32); - - return aes_cmac(crypto, x, m, sizeof(m), res); -} - -bool bt_crypto_f5(struct bt_crypto *crypto, uint8_t w[32], uint8_t n1[16], - uint8_t n2[16], uint8_t a1[7], uint8_t a2[7], - uint8_t mackey[16], uint8_t ltk[16]) -{ - uint8_t btle[4] = { 0x65, 0x6c, 0x74, 0x62 }; - uint8_t salt[16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60, - 0x38, 0xa5, 0xf5, 0xaa, 0x91, 0x83, 0x88, 0x6c }; - uint8_t length[2] = { 0x00, 0x01 }; - uint8_t m[53], t[16]; - - if (!aes_cmac(crypto, salt, w, 32, t)) - return false; - - memcpy(&m[0], length, 2); - memcpy(&m[2], a2, 7); - memcpy(&m[9], a1, 7); - memcpy(&m[16], n2, 16); - memcpy(&m[32], n1, 16); - memcpy(&m[48], btle, 4); - - m[52] = 0; /* Counter */ - if (!aes_cmac(crypto, t, m, sizeof(m), mackey)) - return false; - - m[52] = 1; /* Counter */ - return aes_cmac(crypto, t, m, sizeof(m), ltk); -} - -bool bt_crypto_f6(struct bt_crypto *crypto, uint8_t w[16], uint8_t n1[16], - uint8_t n2[16], uint8_t r[16], uint8_t io_cap[3], - uint8_t a1[7], uint8_t a2[7], uint8_t res[16]) -{ - uint8_t m[65]; - - memcpy(&m[0], a2, 7); - memcpy(&m[7], a1, 7); - memcpy(&m[14], io_cap, 3); - memcpy(&m[17], r, 16); - memcpy(&m[33], n2, 16); - memcpy(&m[49], n1, 16); - - return aes_cmac(crypto, w, m, sizeof(m), res); -} - -bool bt_crypto_g2(struct bt_crypto *crypto, uint8_t u[32], uint8_t v[32], - uint8_t x[16], uint8_t y[16], uint32_t *val) -{ - uint8_t m[80], tmp[16]; - - memcpy(&m[0], y, 16); - memcpy(&m[16], v, 32); - memcpy(&m[48], u, 32); - - if (!aes_cmac(crypto, x, m, sizeof(m), tmp)) - return false; - - *val = get_le32(tmp); - *val %= 1000000; - - return true; -} - -bool bt_crypto_h6(struct bt_crypto *crypto, const uint8_t w[16], - const uint8_t keyid[4], uint8_t res[16]) -{ - if (!aes_cmac(crypto, w, keyid, 4, res)) - return false; - - return true; -} - -bool bt_crypto_gatt_hash(struct bt_crypto *crypto, struct iovec *iov, - size_t iov_len, uint8_t res[16]) -{ - const uint8_t key[16] = {}; - ssize_t len; - int fd; - - if (!crypto) - return false; - - fd = alg_new(crypto->cmac_aes, key, 16); - if (fd < 0) - return false; - - len = writev(fd, iov, iov_len); - if (len < 0) { - close(fd); - return false; - } - - len = read(fd, res, 16); - if (len < 0) { - close(fd); - return false; - } - - close(fd); - - return true; -} diff --git a/alfred/src/ble/crypto.h b/alfred/src/ble/crypto.h deleted file mode 100644 index 356326d75..000000000 --- a/alfred/src/ble/crypto.h +++ /dev/null @@ -1,55 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#include -#include -#include - -struct bt_crypto; - -struct bt_crypto *bt_crypto_new(void); - -struct bt_crypto *bt_crypto_ref(struct bt_crypto *crypto); -void bt_crypto_unref(struct bt_crypto *crypto); - -bool bt_crypto_random_bytes(struct bt_crypto *crypto, - void *buf, uint8_t num_bytes); - -bool bt_crypto_e(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t plaintext[16], uint8_t encrypted[16]); -bool bt_crypto_ah(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r[3], uint8_t hash[3]); -bool bt_crypto_c1(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r[16], const uint8_t pres[7], - const uint8_t preq[7], uint8_t iat, - const uint8_t ia[6], uint8_t rat, - const uint8_t ra[6], uint8_t res[16]); -bool bt_crypto_s1(struct bt_crypto *crypto, const uint8_t k[16], - const uint8_t r1[16], const uint8_t r2[16], - uint8_t res[16]); -bool bt_crypto_f4(struct bt_crypto *crypto, uint8_t u[32], uint8_t v[32], - uint8_t x[16], uint8_t z, uint8_t res[16]); -bool bt_crypto_f5(struct bt_crypto *crypto, uint8_t w[32], uint8_t n1[16], - uint8_t n2[16], uint8_t a1[7], uint8_t a2[7], - uint8_t mackey[16], uint8_t ltk[16]); -bool bt_crypto_f6(struct bt_crypto *crypto, uint8_t w[16], uint8_t n1[16], - uint8_t n2[16], uint8_t r[16], uint8_t io_cap[3], - uint8_t a1[7], uint8_t a2[7], uint8_t res[16]); -bool bt_crypto_g2(struct bt_crypto *crypto, uint8_t u[32], uint8_t v[32], - uint8_t x[16], uint8_t y[16], uint32_t *val); -bool bt_crypto_h6(struct bt_crypto *crypto, const uint8_t w[16], - const uint8_t keyid[4], uint8_t res[16]); -bool bt_crypto_sign_att(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t *m, uint16_t m_len, - uint32_t sign_cnt, uint8_t signature[12]); -bool bt_crypto_verify_att_sign(struct bt_crypto *crypto, const uint8_t key[16], - const uint8_t *pdu, uint16_t pdu_len); -bool bt_crypto_gatt_hash(struct bt_crypto *crypto, struct iovec *iov, - size_t iov_len, uint8_t res[16]); diff --git a/alfred/src/ble/gatt-db.c b/alfred/src/ble/gatt-db.c deleted file mode 100644 index d2b3f3d41..000000000 --- a/alfred/src/ble/gatt-db.c +++ /dev/null @@ -1,2129 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include "ble/uuid.h" -#include "ble/util.h" -#include "ble/queue.h" -#include "ble/timeout.h" -#include "ble/att.h" -#include "ble/gatt-db.h" -#include "ble/crypto.h" - -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#define MAX_CHAR_DECL_VALUE_LEN 19 -#define MAX_INCLUDED_VALUE_LEN 6 -#define ATTRIBUTE_TIMEOUT 5000 -#define HASH_UPDATE_TIMEOUT 100 - -static const bt_uuid_t primary_service_uuid = { .type = BT_UUID16, - .value.u16 = GATT_PRIM_SVC_UUID }; -static const bt_uuid_t secondary_service_uuid = { .type = BT_UUID16, - .value.u16 = GATT_SND_SVC_UUID }; -static const bt_uuid_t characteristic_uuid = { .type = BT_UUID16, - .value.u16 = GATT_CHARAC_UUID }; -static const bt_uuid_t included_service_uuid = { .type = BT_UUID16, - .value.u16 = GATT_INCLUDE_UUID }; -static const bt_uuid_t ext_desc_uuid = { .type = BT_UUID16, - .value.u16 = GATT_CHARAC_EXT_PROPER_UUID }; - -struct gatt_db { - int ref_count; - struct bt_crypto *crypto; - uint8_t hash[16]; - unsigned int hash_id; - uint16_t next_handle; - struct queue *services; - - struct queue *notify_list; - unsigned int next_notify_id; - - gatt_db_authorize_cb_t authorize; - void *authorize_data; -}; - -struct notify { - unsigned int id; - gatt_db_attribute_cb_t service_added; - gatt_db_attribute_cb_t service_removed; - gatt_db_authorize_cb_t authorize_cb; - gatt_db_destroy_func_t destroy; - void *user_data; -}; - -struct attribute_notify { - unsigned int id; - gatt_db_attribute_cb_t removed; - gatt_db_destroy_func_t destroy; - void *user_data; -}; - -struct pending_read { - struct gatt_db_attribute *attrib; - unsigned int id; - unsigned int timeout_id; - gatt_db_attribute_read_t func; - void *user_data; -}; - -struct pending_write { - struct gatt_db_attribute *attrib; - unsigned int id; - unsigned int timeout_id; - gatt_db_attribute_write_t func; - void *user_data; -}; - -struct gatt_db_attribute { - struct gatt_db_service *service; - uint16_t handle; - bt_uuid_t uuid; - uint32_t permissions; - uint16_t value_len; - uint8_t *value; - - gatt_db_read_t read_func; - gatt_db_write_t write_func; - void *user_data; - - unsigned int read_id; - struct queue *pending_reads; - - unsigned int write_id; - struct queue *pending_writes; - - unsigned int next_notify_id; - struct queue *notify_list; -}; - -struct gatt_db_service { - struct gatt_db *db; - bool active; - bool claimed; - uint16_t num_handles; - struct gatt_db_attribute **attributes; -}; - -static void set_attribute_data(struct gatt_db_attribute *attribute, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - uint32_t permissions, - void *user_data) -{ - attribute->permissions = permissions; - attribute->read_func = read_func; - attribute->write_func = write_func; - attribute->user_data = user_data; -} - -static void pending_read_result(struct pending_read *p, int err, - const uint8_t *data, size_t length) -{ - if (p->timeout_id > 0) - timeout_remove(p->timeout_id); - - p->func(p->attrib, err, data, length, p->user_data); - - free(p); -} - -static void pending_read_free(void *data) -{ - struct pending_read *p = data; - - pending_read_result(p, -ECANCELED, NULL, 0); -} - -static void pending_write_result(struct pending_write *p, int err) -{ - if (p->timeout_id > 0) - timeout_remove(p->timeout_id); - - p->func(p->attrib, err, p->user_data); - - free(p); -} - -static void pending_write_free(void *data) -{ - struct pending_write *p = data; - - pending_write_result(p, -ECANCELED); -} - -static void attribute_notify_destroy(void *data) -{ - struct attribute_notify *notify = data; - - if (notify->destroy) - notify->destroy(notify->user_data); - - free(notify); -} - -static void attribute_destroy(struct gatt_db_attribute *attribute) -{ - /* Attribute was not initialized by user */ - if (!attribute) - return; - - queue_destroy(attribute->pending_reads, pending_read_free); - queue_destroy(attribute->pending_writes, pending_write_free); - queue_destroy(attribute->notify_list, attribute_notify_destroy); - - free(attribute->value); - free(attribute); -} - -static struct gatt_db_attribute *new_attribute(struct gatt_db_service *service, - uint16_t handle, - const bt_uuid_t *type, - const uint8_t *val, - uint16_t len) -{ - struct gatt_db_attribute *attribute; - - attribute = new0(struct gatt_db_attribute, 1); - - attribute->service = service; - attribute->handle = handle; - attribute->uuid = *type; - attribute->value_len = len; - if (len) { - attribute->value = malloc0(len); - if (!attribute->value) - goto failed; - - memcpy(attribute->value, val, len); - } - - attribute->pending_reads = queue_new(); - attribute->pending_writes = queue_new(); - attribute->notify_list = queue_new(); - - return attribute; - -failed: - attribute_destroy(attribute); - return NULL; -} - -struct gatt_db *gatt_db_ref(struct gatt_db *db) -{ - if (!db) - return NULL; - - __sync_fetch_and_add(&db->ref_count, 1); - - return db; -} - -struct gatt_db *gatt_db_new(void) -{ - struct gatt_db *db; - - db = new0(struct gatt_db, 1); - db->crypto = bt_crypto_new(); - db->services = queue_new(); - db->notify_list = queue_new(); - db->next_handle = 0x0001; - - return gatt_db_ref(db); -} - -static void notify_destroy(void *data) -{ - struct notify *notify = data; - - if (notify->destroy) - notify->destroy(notify->user_data); - - free(notify); -} - -static bool match_notify_id(const void *a, const void *b) -{ - const struct notify *notify = a; - unsigned int id = PTR_TO_UINT(b); - - return notify->id == id; -} - -struct notify_data { - struct gatt_db_attribute *attr; - bool added; -}; - -static void handle_notify(void *data, void *user_data) -{ - struct notify *notify = data; - struct notify_data *notify_data = user_data; - - if (notify_data->added) - notify->service_added(notify_data->attr, notify->user_data); - else - notify->service_removed(notify_data->attr, notify->user_data); -} - -struct hash_data { - struct iovec *iov; - uint16_t i; -}; - -static void gen_hash_m(struct gatt_db_attribute *attr, void *user_data) -{ - struct hash_data *hash = user_data; - uint8_t *data; - size_t len; - - if (bt_uuid_len(&attr->uuid) != 2) - return; - - switch (attr->uuid.value.u16) { - case GATT_PRIM_SVC_UUID: - case GATT_SND_SVC_UUID: - case GATT_INCLUDE_UUID: - case GATT_CHARAC_UUID: - /* Allocate space for handle + type + value */ - len = 2 + 2 + attr->value_len; - data = malloc(2 + 2 + attr->value_len); - put_le16(attr->handle, data); - bt_uuid_to_le(&attr->uuid, data + 2); - memcpy(data + 4, attr->value, attr->value_len); - break; - case GATT_CHARAC_USER_DESC_UUID: - case GATT_CLIENT_CHARAC_CFG_UUID: - case GATT_SERVER_CHARAC_CFG_UUID: - case GATT_CHARAC_FMT_UUID: - case GATT_CHARAC_AGREG_FMT_UUID: - /* Allocate space for handle + type */ - len = 2 + 2; - data = malloc(2 + 2 + attr->value_len); - put_le16(attr->handle, data); - bt_uuid_to_le(&attr->uuid, data + 2); - break; - default: - return; - } - - hash->iov[hash->i].iov_base = data; - hash->iov[hash->i].iov_len = len; - - hash->i++; - - return; -} - -static void service_gen_hash_m(struct gatt_db_attribute *attr, void *user_data) -{ - gatt_db_service_foreach(attr, NULL, gen_hash_m, user_data); -} - -static bool db_hash_update(void *user_data) -{ - struct gatt_db *db = user_data; - struct hash_data hash; - uint16_t i; - - db->hash_id = 0; - - if (!db->next_handle) - return false; - - hash.iov = new0(struct iovec, db->next_handle); - hash.i = 0; - - gatt_db_foreach_service(db, NULL, service_gen_hash_m, &hash); - bt_crypto_gatt_hash(db->crypto, hash.iov, db->next_handle, db->hash); - - for (i = 0; i < hash.i; i++) - free(hash.iov[i].iov_base); - - free(hash.iov); - - return false; -} - -static void handle_attribute_notify(void *data, void *user_data) -{ - struct attribute_notify *notify = data; - struct gatt_db_attribute *attrib = user_data; - - if (notify->removed) - notify->removed(attrib, notify->user_data); -} - -static void notify_attribute_changed(struct gatt_db_service *service) -{ - int i; - - for (i = 0; i < service->num_handles; i++) { - struct gatt_db_attribute *attr = service->attributes[i]; - - if (!attr) - continue; - - queue_foreach(attr->notify_list, handle_attribute_notify, attr); - } -} - -static void notify_service_changed(struct gatt_db *db, - struct gatt_db_service *service, - bool added) -{ - struct notify_data data; - - if (!added) - notify_attribute_changed(service); - - if (queue_isempty(db->notify_list)) - return; - - data.attr = service->attributes[0]; - data.added = added; - - gatt_db_ref(db); - - queue_foreach(db->notify_list, handle_notify, &data); - - /* Tigger hash update */ - if (!db->hash_id && db->crypto) - db->hash_id = timeout_add(HASH_UPDATE_TIMEOUT, db_hash_update, - db, NULL); - - gatt_db_unref(db); -} - -static void gatt_db_service_destroy(void *data) -{ - struct gatt_db_service *service = data; - int i; - - if (service->active) - notify_service_changed(service->db, service, false); - - for (i = 0; i < service->num_handles; i++) - attribute_destroy(service->attributes[i]); - - free(service->attributes); - free(service); -} - -static void gatt_db_destroy(struct gatt_db *db) -{ - if (!db) - return; - - bt_crypto_unref(db->crypto); - - /* - * Clear the notify list before clearing the services to prevent the - * latter from sending service_removed events. - */ - queue_destroy(db->notify_list, notify_destroy); - db->notify_list = NULL; - - if (db->hash_id) - timeout_remove(db->hash_id); - - queue_destroy(db->services, gatt_db_service_destroy); - free(db); -} - -void gatt_db_unref(struct gatt_db *db) -{ - if (!db) - return; - - if (__sync_sub_and_fetch(&db->ref_count, 1)) - return; - - gatt_db_destroy(db); -} - -bool gatt_db_isempty(struct gatt_db *db) -{ - if (!db) - return true; - - return queue_isempty(db->services); -} - -static int uuid_to_le(const bt_uuid_t *uuid, uint8_t *dst) -{ - bt_uuid_t uuid128; - - if (uuid->type == BT_UUID16) { - put_le16(uuid->value.u16, dst); - return bt_uuid_len(uuid); - } - - bt_uuid_to_uuid128(uuid, &uuid128); - bswap_128(&uuid128.value.u128, dst); - return bt_uuid_len(&uuid128); -} - -static bool le_to_uuid(const uint8_t *src, size_t len, bt_uuid_t *uuid) -{ - uint128_t u128; - - if (len == 2) { - bt_uuid16_create(uuid, get_le16(src)); - return true; - } - - if (len == 4) { - bt_uuid32_create(uuid, get_le32(src)); - return true; - } - - if (len != 16) - return false; - - bswap_128(src, &u128); - bt_uuid128_create(uuid, u128); - - return true; -} - -static struct gatt_db_service *gatt_db_service_create(const bt_uuid_t *uuid, - uint16_t handle, - bool primary, - uint16_t num_handles) -{ - struct gatt_db_service *service; - const bt_uuid_t *type; - uint8_t value[16]; - uint16_t len; - - if (num_handles < 1) - return NULL; - - service = new0(struct gatt_db_service, 1); - service->attributes = new0(struct gatt_db_attribute *, num_handles); - - if (primary) - type = &primary_service_uuid; - else - type = &secondary_service_uuid; - - len = uuid_to_le(uuid, value); - - service->attributes[0] = new_attribute(service, handle, type, value, - len); - if (!service->attributes[0]) { - gatt_db_service_destroy(service); - return NULL; - } - - set_attribute_data(service->attributes[0], NULL, NULL, BT_ATT_PERM_READ, NULL); - - return service; -} - - -bool gatt_db_remove_service(struct gatt_db *db, - struct gatt_db_attribute *attrib) -{ - struct gatt_db_service *service; - - if (!db || !attrib) - return false; - - service = attrib->service; - - queue_remove(db->services, service); - - gatt_db_service_destroy(service); - - return true; -} - -bool gatt_db_clear(struct gatt_db *db) -{ - return gatt_db_clear_range(db, 1, UINT16_MAX); -} - -static void gatt_db_service_get_handles(const struct gatt_db_service *service, - uint16_t *start_handle, - uint16_t *end_handle) -{ - if (start_handle) - *start_handle = service->attributes[0]->handle; - - if (end_handle) - *end_handle = service->attributes[0]->handle + - service->num_handles - 1; -} - -struct clear_range { - uint16_t start, end; -}; - -static bool match_range(const void *a, const void *b) -{ - const struct gatt_db_service *service = a; - const struct clear_range *range = b; - uint16_t svc_start, svc_end; - - gatt_db_service_get_handles(service, &svc_start, &svc_end); - - return svc_start <= range->end && svc_end >= range->start; -} - -bool gatt_db_clear_range(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle) -{ - struct clear_range range; - - if (!db || start_handle > end_handle) - return false; - - /* Check if it is a full clear */ - if (start_handle == 1 && end_handle == UINT16_MAX) { - queue_remove_all(db->services, NULL, NULL, - gatt_db_service_destroy); - goto done; - } - - range.start = start_handle; - range.end = end_handle; - - queue_remove_all(db->services, match_range, &range, - gatt_db_service_destroy); - -done: - if (gatt_db_isempty(db)) - db->next_handle = 0; - - return true; -} - -uint8_t *gatt_db_get_hash(struct gatt_db *db) -{ - uint8_t hash[16] = {}; - - if (!db || !db->crypto) - return NULL; - - /* Generate hash if if has not been generated yet */ - if (db->hash_id || !memcmp(db->hash, hash, 16)) { - timeout_remove(db->hash_id); - db_hash_update(db); - } - - return db->hash; -} - -bool gatt_db_hash_support(struct gatt_db *db) -{ - if (!db || !db->crypto) - return false; - - return true; -} - -static struct gatt_db_service *find_insert_loc(struct gatt_db *db, - uint16_t start, uint16_t end, - struct gatt_db_service **after) -{ - const struct queue_entry *services_entry; - struct gatt_db_service *service; - uint16_t cur_start, cur_end; - - *after = NULL; - - services_entry = queue_get_entries(db->services); - - while (services_entry) { - service = services_entry->data; - - gatt_db_service_get_handles(service, &cur_start, &cur_end); - - if (start >= cur_start && start <= cur_end) - return service; - - if (end >= cur_start && end <= cur_end) - return service; - - if (end < cur_start) - return NULL; - - *after = service; - services_entry = services_entry->next; - } - - return NULL; -} - -struct gatt_db_attribute *gatt_db_insert_service(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - bool primary, - uint16_t num_handles) -{ - struct gatt_db_service *service, *after; - - after = NULL; - - if (!db) - return NULL; - - if (!handle) - handle = db->next_handle; - - if (num_handles < 1 || (handle + num_handles - 1) > UINT16_MAX) - return NULL; - - service = find_insert_loc(db, handle, handle + num_handles - 1, &after); - if (service) { - const bt_uuid_t *type; - bt_uuid_t value; - - if (primary) - type = &primary_service_uuid; - else - type = &secondary_service_uuid; - - gatt_db_attribute_get_service_uuid(service->attributes[0], - &value); - - /* Check if service match */ - if (!bt_uuid_cmp(&service->attributes[0]->uuid, type) && - !bt_uuid_cmp(&value, uuid) && - service->num_handles == num_handles && - service->attributes[0]->handle == handle) - return service->attributes[0]; - - return NULL; - } - - service = gatt_db_service_create(uuid, handle, primary, num_handles); - - if (!service) - return NULL; - - if (after) { - if (!queue_push_after(db->services, after, service)) - goto fail; - } else if (!queue_push_head(db->services, service)) { - goto fail; - } - - service->db = db; - service->attributes[0]->handle = handle; - service->num_handles = num_handles; - - /* Fast-forward next_handle if the new service was added to the end */ - db->next_handle = MAX(handle + num_handles, db->next_handle); - - return service->attributes[0]; - -fail: - gatt_db_service_destroy(service); - return NULL; -} - -struct gatt_db_attribute *gatt_db_add_service(struct gatt_db *db, - const bt_uuid_t *uuid, - bool primary, - uint16_t num_handles) -{ - return gatt_db_insert_service(db, 0, uuid, primary, num_handles); -} - -unsigned int gatt_db_register(struct gatt_db *db, - gatt_db_attribute_cb_t service_added, - gatt_db_attribute_cb_t service_removed, - void *user_data, - gatt_db_destroy_func_t destroy) -{ - struct notify *notify; - - if (!db || !(service_added || service_removed)) - return 0; - - notify = new0(struct notify, 1); - notify->service_added = service_added; - notify->service_removed = service_removed; - notify->destroy = destroy; - notify->user_data = user_data; - - if (db->next_notify_id < 1) - db->next_notify_id = 1; - - notify->id = db->next_notify_id++; - - if (!queue_push_tail(db->notify_list, notify)) { - free(notify); - return 0; - } - - return notify->id; -} - -bool gatt_db_unregister(struct gatt_db *db, unsigned int id) -{ - struct notify *notify; - - if (!db || !id) - return false; - - notify = queue_find(db->notify_list, match_notify_id, UINT_TO_PTR(id)); - if (!notify) - return false; - - queue_remove(db->notify_list, notify); - notify_destroy(notify); - - return true; -} - -bool gatt_db_set_authorize(struct gatt_db *db, gatt_db_authorize_cb_t cb, - void *user_data) -{ - if (!db) - return false; - - db->authorize = cb; - db->authorize_data = user_data; - - return true; -} - -static uint16_t get_attribute_index(struct gatt_db_service *service, - int end_offset) -{ - int i = 0; - - /* Here we look for first free attribute index with given offset */ - while (i < (service->num_handles - end_offset) && - service->attributes[i]) - i++; - - return i == (service->num_handles - end_offset) ? 0 : i; -} - -static uint16_t get_handle_at_index(struct gatt_db_service *service, - int index) -{ - return service->attributes[index]->handle; -} - -static struct gatt_db_attribute * -service_insert_characteristic(struct gatt_db_service *service, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - uint8_t value[MAX_CHAR_DECL_VALUE_LEN]; - uint16_t len = 0; - int i; - - /* Check if handle is in within service range */ - if (handle && handle <= service->attributes[0]->handle) - return NULL; - - /* - * It is not possible to allocate last handle for a Characteristic - * since it would not have space for its value: - * 3.3.2 Characteristic Value Declaration - * The Characteristic Value declaration contains the value of the - * characteristic. It is the first Attribute after the characteristic - * declaration. All characteristic definitions shall have a - * Characteristic Value declaration. - */ - if (handle == UINT16_MAX) - return NULL; - - i = get_attribute_index(service, 1); - if (!i) - return NULL; - - if (!handle) - handle = get_handle_at_index(service, i - 1) + 2; - - value[0] = properties; - len += sizeof(properties); - - /* We set handle of characteristic value, which will be added next */ - put_le16(handle, &value[1]); - len += sizeof(uint16_t); - len += uuid_to_le(uuid, &value[3]); - - service->attributes[i] = new_attribute(service, handle - 1, - &characteristic_uuid, - value, len); - if (!service->attributes[i]) - return NULL; - - set_attribute_data(service->attributes[i], NULL, NULL, BT_ATT_PERM_READ, NULL); - - i++; - - service->attributes[i] = new_attribute(service, handle, uuid, NULL, 0); - if (!service->attributes[i]) { - free(service->attributes[i - 1]); - return NULL; - } - - set_attribute_data(service->attributes[i], read_func, write_func, - permissions, user_data); - - return service->attributes[i]; -} - -struct gatt_db_attribute * -gatt_db_insert_characteristic(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - struct gatt_db_attribute *attrib; - - attrib = gatt_db_get_service(db, handle); - if (!attrib) - return NULL; - - return service_insert_characteristic(attrib->service, handle, uuid, - permissions, properties, - read_func, write_func, - user_data); -} - -struct gatt_db_attribute * -gatt_db_service_insert_characteristic(struct gatt_db_attribute *attrib, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - if (!attrib) - return NULL; - - return service_insert_characteristic(attrib->service, handle, uuid, - permissions, properties, - read_func, write_func, - user_data); -} - -struct gatt_db_attribute * -gatt_db_service_add_characteristic(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - if (!attrib) - return NULL; - - return service_insert_characteristic(attrib->service, 0, uuid, - permissions, properties, - read_func, write_func, - user_data); -} - -static struct gatt_db_attribute * -service_insert_descriptor(struct gatt_db_service *service, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - int i; - - i = get_attribute_index(service, 0); - if (!i) - return NULL; - - /* Check if handle is in within service range */ - if (handle && handle <= service->attributes[0]->handle) - return NULL; - - if (!handle) - handle = get_handle_at_index(service, i - 1) + 1; - - service->attributes[i] = new_attribute(service, handle, uuid, NULL, 0); - if (!service->attributes[i]) - return NULL; - - set_attribute_data(service->attributes[i], read_func, write_func, - permissions, user_data); - - return service->attributes[i]; -} - -struct gatt_db_attribute * -gatt_db_insert_descriptor(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - struct gatt_db_attribute *attrib; - - attrib = gatt_db_get_service(db, handle); - if (!attrib) - return NULL; - - return service_insert_descriptor(attrib->service, handle, uuid, - permissions, read_func, write_func, - user_data); -} - -struct gatt_db_attribute * -gatt_db_service_insert_descriptor(struct gatt_db_attribute *attrib, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - if (!attrib) - return NULL; - - return service_insert_descriptor(attrib->service, handle, uuid, - permissions, read_func, write_func, - user_data); -} - -struct gatt_db_attribute * -gatt_db_service_add_descriptor(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data) -{ - if (!attrib) - return NULL; - - return service_insert_descriptor(attrib->service, 0, uuid, - permissions, read_func, write_func, - user_data); -} - -static struct gatt_db_attribute * -service_insert_included(struct gatt_db_service *service, uint16_t handle, - struct gatt_db_attribute *include) -{ - struct gatt_db_service *included; - uint8_t value[MAX_INCLUDED_VALUE_LEN]; - uint16_t included_handle, len = 0; - int index; - - included = include->service; - - /* Adjust include to point to the first attribute */ - if (include != included->attributes[0]) - include = included->attributes[0]; - - included_handle = include->handle; - - put_le16(included_handle, &value[len]); - len += sizeof(uint16_t); - - put_le16(included_handle + included->num_handles - 1, &value[len]); - len += sizeof(uint16_t); - - /* The Service UUID shall only be present when the UUID is a 16-bit - * Bluetooth UUID. Vol 2. Part G. 3.2 - */ - if (include->value_len == sizeof(uint16_t)) { - memcpy(&value[len], include->value, include->value_len); - len += include->value_len; - } - - index = get_attribute_index(service, 0); - if (!index) - return NULL; - - /* Check if handle is in within service range */ - if (handle && handle <= service->attributes[0]->handle) - return NULL; - - if (!handle) - handle = get_handle_at_index(service, index - 1) + 1; - - service->attributes[index] = new_attribute(service, handle, - &included_service_uuid, - value, len); - if (!service->attributes[index]) - return NULL; - - /* The Attribute Permissions shall be read only and not require - * authentication or authorization. Vol 2. Part G. 3.2 - * - * TODO handle permissions - */ - set_attribute_data(service->attributes[index], NULL, NULL, - BT_ATT_PERM_READ, NULL); - - return service->attributes[index]; -} - -struct gatt_db_attribute * -gatt_db_service_add_included(struct gatt_db_attribute *attrib, - struct gatt_db_attribute *include) -{ - if (!attrib || !include) - return NULL; - - return service_insert_included(attrib->service, 0, include); -} - -struct gatt_db_attribute * -gatt_db_service_insert_included(struct gatt_db_attribute *attrib, - uint16_t handle, - struct gatt_db_attribute *include) -{ - if (!attrib || !handle || !include) - return NULL; - - return service_insert_included(attrib->service, handle, include); -} - -struct gatt_db_attribute * -gatt_db_insert_included(struct gatt_db *db, uint16_t handle, - struct gatt_db_attribute *include) -{ - struct gatt_db_attribute *attrib; - - attrib = gatt_db_get_service(db, handle); - if (!attrib) - return NULL; - - return service_insert_included(attrib->service, handle, include); -} - -bool gatt_db_service_set_active(struct gatt_db_attribute *attrib, bool active) -{ - struct gatt_db_service *service; - - if (!attrib) - return false; - - service = attrib->service; - - if (service->active == active) - return true; - - service->active = active; - - notify_service_changed(service->db, service, active); - - return true; -} - -bool gatt_db_service_get_active(struct gatt_db_attribute *attrib) -{ - if (!attrib) - return false; - - return attrib->service->active; -} - -bool gatt_db_service_set_claimed(struct gatt_db_attribute *attrib, - bool claimed) -{ - if (!attrib) - return false; - - attrib->service->claimed = claimed; - - return true; -} - -bool gatt_db_service_get_claimed(struct gatt_db_attribute *attrib) -{ - if (!attrib) - return false; - - return attrib->service->claimed; -} - -static void read_by_group_type(struct gatt_db_attribute *attribute, - void *user_data) -{ - struct queue *queue = user_data; - - queue_push_tail(queue, attribute); -} - -void gatt_db_read_by_group_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t type, - struct queue *queue) -{ - gatt_db_foreach_service_in_range(db, &type, read_by_group_type, queue, - start_handle, end_handle); -} - -struct find_by_type_value_data { - gatt_db_attribute_cb_t func; - void *user_data; - const void *value; - size_t value_len; - unsigned int num_of_res; -}; - -static void find_by_type(struct gatt_db_attribute *attribute, void *user_data) -{ - struct find_by_type_value_data *search_data = user_data; - - /* TODO: fix for read-callback based attributes */ - if (search_data->value) { - if (search_data->value_len != attribute->value_len) - return; - - if (memcmp(attribute->value, search_data->value, - search_data->value_len)) - return; - } - - search_data->num_of_res++; - search_data->func(attribute, search_data->user_data); -} - -unsigned int gatt_db_find_by_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t *type, - gatt_db_attribute_cb_t func, - void *user_data) -{ - struct find_by_type_value_data data; - - memset(&data, 0, sizeof(data)); - - data.func = func; - data.user_data = user_data; - - gatt_db_foreach_in_range(db, type, find_by_type, &data, - start_handle, end_handle); - - return data.num_of_res; -} - -unsigned int gatt_db_find_by_type_value(struct gatt_db *db, - uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t *type, - const void *value, - size_t value_len, - gatt_db_attribute_cb_t func, - void *user_data) -{ - struct find_by_type_value_data data; - - data.func = func; - data.user_data = user_data; - data.value = value; - data.value_len = value_len; - - gatt_db_foreach_in_range(db, type, find_by_type, &data, - start_handle, end_handle); - - return data.num_of_res; -} - -static void read_by_type(struct gatt_db_attribute *attribute, void *user_data) -{ - struct queue *queue = user_data; - - queue_push_tail(queue, attribute); -} - -void gatt_db_read_by_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t type, - struct queue *queue) -{ - gatt_db_foreach_in_range(db, &type, read_by_type, queue, - start_handle, end_handle); -} - - -static void find_information(struct gatt_db_attribute *attribute, - void *user_data) -{ - struct queue *queue = user_data; - - queue_push_tail(queue, attribute); -} - -void gatt_db_find_information(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - struct queue *queue) -{ - gatt_db_foreach_in_range(db, NULL, find_information, queue, - start_handle, end_handle); -} - -void gatt_db_foreach_service(struct gatt_db *db, const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data) -{ - gatt_db_foreach_service_in_range(db, uuid, func, user_data, 0x0001, - 0xffff); -} - -struct foreach_data { - gatt_db_attribute_cb_t func; - const bt_uuid_t *uuid; - void *user_data; - uint16_t start, end; - bool attr; -}; - -static void foreach_service_in_range(void *data, void *user_data) -{ - struct gatt_db_service *service = data; - struct gatt_db_attribute *attribute = service->attributes[0]; - struct foreach_data *foreach_data = user_data; - bt_uuid_t uuid; - - if (foreach_data->uuid) { - gatt_db_attribute_get_service_uuid(attribute, &uuid); - if (bt_uuid_cmp(&uuid, foreach_data->uuid)) { - /* Compare with attribute UUID in case it is a lookup - * by group type. - */ - if (bt_uuid_cmp(&attribute->uuid, foreach_data->uuid)) - return; - } - } - - foreach_data->func(service->attributes[0], foreach_data->user_data); -} - -static void foreach_in_range(void *data, void *user_data) -{ - struct gatt_db_service *service = data; - struct foreach_data *foreach_data = user_data; - uint16_t svc_start, svc_end; - int i; - - if (!service->active) - return; - - gatt_db_service_get_handles(service, &svc_start, &svc_end); - - /* Check if service is within requested range */ - if (svc_start > foreach_data->end || svc_end < foreach_data->start) - return; - - if (!foreach_data->attr) { - if (svc_start < foreach_data->start || - svc_start > foreach_data->end) - return; - return foreach_service_in_range(data, user_data); - } - - for (i = 0; i < service->num_handles; i++) { - struct gatt_db_attribute *attribute = service->attributes[i]; - - if (!attribute) - continue; - - if (attribute->handle < foreach_data->start) - continue; - - if (attribute->handle > foreach_data->end) - return; - - if (foreach_data->uuid && bt_uuid_cmp(foreach_data->uuid, - &attribute->uuid)) - continue; - - foreach_data->func(attribute, foreach_data->user_data); - } -} - -void gatt_db_foreach_service_in_range(struct gatt_db *db, - const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data, - uint16_t start_handle, - uint16_t end_handle) -{ - struct foreach_data data; - - if (!db || !func || start_handle > end_handle) - return; - - data.func = func; - data.uuid = uuid; - data.user_data = user_data; - data.start = start_handle; - data.end = end_handle; - data.attr = false; - - queue_foreach(db->services, foreach_in_range, &data); -} - -void gatt_db_foreach_in_range(struct gatt_db *db, const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data, - uint16_t start_handle, - uint16_t end_handle) -{ - struct foreach_data data; - - if (!db || !func || start_handle > end_handle) - return; - - data.func = func; - data.uuid = uuid; - data.user_data = user_data; - data.start = start_handle; - data.end = end_handle; - data.attr = true; - - queue_foreach(db->services, foreach_in_range, &data); -} - -void gatt_db_service_foreach(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data) -{ - struct gatt_db_service *service; - struct gatt_db_attribute *attr; - uint16_t i; - - if (!attrib || !func) - return; - - service = attrib->service; - - for (i = 0; i < service->num_handles; i++) { - attr = service->attributes[i]; - if (!attr) - continue; - - if (uuid && bt_uuid_cmp(uuid, &attr->uuid)) - continue; - - func(attr, user_data); - } -} - -void gatt_db_service_foreach_char(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data) -{ - gatt_db_service_foreach(attrib, &characteristic_uuid, func, user_data); -} - -void gatt_db_service_foreach_desc(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data) -{ - struct gatt_db_service *service; - struct gatt_db_attribute *attr; - uint16_t i; - - if (!attrib || !func) - return; - - /* Return if this attribute is not a characteristic declaration */ - if (bt_uuid_cmp(&characteristic_uuid, &attrib->uuid)) - return; - - service = attrib->service; - - /* Start from the attribute following the value handle */ - for (i = 0; i < service->num_handles; i++) { - if (service->attributes[i] == attrib) { - i += 2; - break; - } - } - - for (; i < service->num_handles; i++) { - attr = service->attributes[i]; - if (!attr) - continue; - - /* Return if we reached the end of this characteristic */ - if (!bt_uuid_cmp(&characteristic_uuid, &attr->uuid) || - !bt_uuid_cmp(&included_service_uuid, &attr->uuid)) - return; - - func(attr, user_data); - } -} - -void gatt_db_service_foreach_incl(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data) -{ - gatt_db_service_foreach(attrib, &included_service_uuid, func, - user_data); -} - -static bool find_service_for_handle(const void *data, const void *user_data) -{ - const struct gatt_db_service *service = data; - uint16_t handle = PTR_TO_UINT(user_data); - uint16_t start, end; - - gatt_db_service_get_handles(service, &start, &end); - - return (start <= handle) && (handle <= end); -} - -struct gatt_db_attribute *gatt_db_get_service(struct gatt_db *db, - uint16_t handle) -{ - struct gatt_db_service *service; - - if (!db || !handle) - return NULL; - - service = queue_find(db->services, find_service_for_handle, - UINT_TO_PTR(handle)); - if (!service) - return NULL; - - return service->attributes[0]; -} - -struct gatt_db_attribute *gatt_db_get_attribute(struct gatt_db *db, - uint16_t handle) -{ - struct gatt_db_attribute *attrib; - struct gatt_db_service *service; - int i; - - attrib = gatt_db_get_service(db, handle); - if (!attrib) - return NULL; - - service = attrib->service; - - for (i = 0; i < service->num_handles; i++) { - if (!service->attributes[i]) - continue; - - if (service->attributes[i]->handle == handle) - return service->attributes[i]; - } - - return NULL; -} - -static bool find_service_with_uuid(const void *data, const void *user_data) -{ - const struct gatt_db_service *service = data; - const bt_uuid_t *uuid = user_data; - bt_uuid_t svc_uuid; - - gatt_db_attribute_get_service_uuid(service->attributes[0], &svc_uuid); - - return bt_uuid_cmp(uuid, &svc_uuid) == 0; -} - -struct gatt_db_attribute *gatt_db_get_service_with_uuid(struct gatt_db *db, - const bt_uuid_t *uuid) -{ - struct gatt_db_service *service; - - if (!db || !uuid) - return NULL; - - service = queue_find(db->services, find_service_with_uuid, uuid); - if (!service) - return NULL; - - return service->attributes[0]; -} - -const bt_uuid_t *gatt_db_attribute_get_type( - const struct gatt_db_attribute *attrib) -{ - if (!attrib) - return NULL; - - return &attrib->uuid; -} - -uint16_t gatt_db_attribute_get_handle(const struct gatt_db_attribute *attrib) -{ - if (!attrib) - return 0; - - return attrib->handle; -} - -bool gatt_db_attribute_get_service_uuid(const struct gatt_db_attribute *attrib, - bt_uuid_t *uuid) -{ - struct gatt_db_service *service; - - if (!attrib || !uuid) - return false; - - service = attrib->service; - - if (service->attributes[0]->value_len == sizeof(uint16_t)) { - uint16_t value; - - value = get_le16(service->attributes[0]->value); - bt_uuid16_create(uuid, value); - - return true; - } - - if (service->attributes[0]->value_len == sizeof(uint128_t)) { - uint128_t value; - - bswap_128(service->attributes[0]->value, &value); - bt_uuid128_create(uuid, value); - - return true; - } - - return false; -} - -bool gatt_db_attribute_get_service_handles( - const struct gatt_db_attribute *attrib, - uint16_t *start_handle, - uint16_t *end_handle) -{ - struct gatt_db_service *service; - - if (!attrib) - return false; - - service = attrib->service; - - gatt_db_service_get_handles(service, start_handle, end_handle); - - return true; -} - -bool gatt_db_attribute_get_service_data(const struct gatt_db_attribute *attrib, - uint16_t *start_handle, - uint16_t *end_handle, - bool *primary, - bt_uuid_t *uuid) -{ - struct gatt_db_service *service; - struct gatt_db_attribute *decl; - - if (!attrib) - return false; - - service = attrib->service; - decl = service->attributes[0]; - - gatt_db_service_get_handles(service, start_handle, end_handle); - - if (primary) - *primary = bt_uuid_cmp(&decl->uuid, &secondary_service_uuid); - - if (!uuid) - return true; - - /* - * The service declaration attribute value is the 16 or 128 bit service - * UUID. - */ - return le_to_uuid(decl->value, decl->value_len, uuid); -} - -static void read_ext_prop_value(struct gatt_db_attribute *attrib, - int err, const uint8_t *value, - size_t length, void *user_data) -{ - uint16_t *ext_prop = user_data; - - if (err || (length != sizeof(uint16_t))) - return; - - *ext_prop = (uint16_t) value[0]; -} - -static void read_ext_prop(struct gatt_db_attribute *attrib, - void *user_data) -{ - uint16_t *ext_prop = user_data; - - /* - * If ext_prop is set that means extended properties descriptor - * has been already found - */ - if (*ext_prop != 0) - return; - - if (bt_uuid_cmp(&ext_desc_uuid, &attrib->uuid)) - return; - - gatt_db_attribute_read(attrib, 0, BT_ATT_OP_READ_REQ, NULL, - read_ext_prop_value, ext_prop); -} - -static uint8_t get_char_extended_prop(const struct gatt_db_attribute *attrib) -{ - uint16_t ext_prop; - - if (!attrib) - return 0; - - if (bt_uuid_cmp(&characteristic_uuid, &attrib->uuid)) - return 0; - - /* Check properties first */ - if (!(attrib->value[0] & BT_GATT_CHRC_PROP_EXT_PROP)) - return 0; - - ext_prop = 0; - - /* - * Cast needed for foreach function. We do not change attrib during - * this call - */ - gatt_db_service_foreach_desc((struct gatt_db_attribute *) attrib, - read_ext_prop, &ext_prop); - - return ext_prop; -} - -bool gatt_db_attribute_get_char_data(const struct gatt_db_attribute *attrib, - uint16_t *handle, - uint16_t *value_handle, - uint8_t *properties, - uint16_t *ext_prop, - bt_uuid_t *uuid) -{ - if (!attrib) - return false; - - if (bt_uuid_cmp(&characteristic_uuid, &attrib->uuid)) - return false; - - /* - * Characteristic declaration value: - * 1 octet: Characteristic properties - * 2 octets: Characteristic value handle - * 2 or 16 octets: characteristic UUID - */ - if (!attrib->value || (attrib->value_len != 5 && - attrib->value_len != 19)) - return false; - - if (handle) - *handle = attrib->handle; - - if (properties) - *properties = attrib->value[0]; - - if (ext_prop) - *ext_prop = get_char_extended_prop(attrib); - - if (value_handle) - *value_handle = get_le16(attrib->value + 1); - - if (!uuid) - return true; - - return le_to_uuid(attrib->value + 3, attrib->value_len - 3, uuid); -} - -bool gatt_db_attribute_get_incl_data(const struct gatt_db_attribute *attrib, - uint16_t *handle, - uint16_t *start_handle, - uint16_t *end_handle) -{ - if (!attrib) - return false; - - if (bt_uuid_cmp(&included_service_uuid, &attrib->uuid)) - return false; - - /* - * Include definition value: - * 2 octets: start handle of included service - * 2 octets: end handle of included service - * optional 2 octets: 16-bit Bluetooth UUID - */ - if (!attrib->value || attrib->value_len < 4 || attrib->value_len > 6) - return false; - - /* - * We only return the handles since the UUID can be easily obtained - * from the corresponding attribute. - */ - if (handle) - *handle = attrib->handle; - - if (start_handle) - *start_handle = get_le16(attrib->value); - - if (end_handle) - *end_handle = get_le16(attrib->value + 2); - - return true; -} - -uint32_t -gatt_db_attribute_get_permissions(const struct gatt_db_attribute *attrib) -{ - if (!attrib) - return 0; - - return attrib->permissions; -} - -static bool read_timeout(void *user_data) -{ - struct pending_read *p = user_data; - - p->timeout_id = 0; - - queue_remove(p->attrib->pending_reads, p); - - pending_read_result(p, -ETIMEDOUT, NULL, 0); - - return false; -} - -static uint8_t attribute_authorize(struct gatt_db_attribute *attrib, - uint8_t opcode, struct bt_att *att) -{ - struct gatt_db *db = attrib->service->db; - - if (!db->authorize) - return 0; - - return db->authorize(attrib, opcode, att, db->authorize_data); -} - -bool gatt_db_attribute_set_fixed_length(struct gatt_db_attribute *attrib, - uint16_t len) -{ - struct gatt_db_service *service; - - if (!attrib) - return false; - - service = attrib->service; - - /* Don't allow overwriting length of service attribute */ - if (attrib->service->attributes[0] == attrib) - return false; - - /* If attribute is a characteristic declaration ajust to its value */ - if (!bt_uuid_cmp(&characteristic_uuid, &attrib->uuid)) { - int i; - - /* Start from the attribute following the value handle */ - for (i = 0; i < service->num_handles; i++) { - if (service->attributes[i] == attrib) { - attrib = service->attributes[i + 1]; - break; - } - } - } - - attrib->value_len = len; - - return true; -} - -bool gatt_db_attribute_read(struct gatt_db_attribute *attrib, uint16_t offset, - uint8_t opcode, struct bt_att *att, - gatt_db_attribute_read_t func, void *user_data) -{ - uint8_t *value; - - if (!attrib || !func) - return false; - - /* Check boundaries if value_len is set */ - if (attrib->value_len && offset > attrib->value_len) { - func(attrib, BT_ATT_ERROR_INVALID_OFFSET, NULL, 0, user_data); - return true; - } - - if (attrib->read_func) { - struct pending_read *p; - uint8_t err; - - err = attribute_authorize(attrib, opcode, att); - if (err) { - func(attrib, err, NULL, 0, user_data); - return true; - } - - p = new0(struct pending_read, 1); - p->attrib = attrib; - p->id = ++attrib->read_id; - p->timeout_id = timeout_add(ATTRIBUTE_TIMEOUT, read_timeout, - p, NULL); - p->func = func; - p->user_data = user_data; - - queue_push_tail(attrib->pending_reads, p); - - attrib->read_func(attrib, p->id, offset, opcode, att, - attrib->user_data); - return true; - } - - /* Guard against invalid access if offset equals to value length */ - value = offset == attrib->value_len ? NULL : &attrib->value[offset]; - - func(attrib, 0, value, attrib->value_len - offset, user_data); - - return true; -} - -static bool find_pending(const void *a, const void *b) -{ - const struct pending_read *p = a; - unsigned int id = PTR_TO_UINT(b); - - return p->id == id; -} - -bool gatt_db_attribute_read_result(struct gatt_db_attribute *attrib, - unsigned int id, int err, - const uint8_t *value, size_t length) -{ - struct pending_read *p; - - if (!attrib || !id) - return false; - - p = queue_remove_if(attrib->pending_reads, find_pending, - UINT_TO_PTR(id)); - if (!p) - return false; - - pending_read_result(p, err, value, length); - - return true; -} - -static bool write_timeout(void *user_data) -{ - struct pending_write *p = user_data; - - p->timeout_id = 0; - - queue_remove(p->attrib->pending_writes, p); - - pending_write_result(p, -ETIMEDOUT); - - return false; -} - -bool gatt_db_attribute_write(struct gatt_db_attribute *attrib, uint16_t offset, - const uint8_t *value, size_t len, - uint8_t opcode, struct bt_att *att, - gatt_db_attribute_write_t func, - void *user_data) -{ - uint8_t err = 0; - - if (!attrib || !func) - return false; - - if (attrib->write_func) { - struct pending_write *p; - - /* Check boundaries if value_len is set */ - if (attrib->value_len) { - if (offset > attrib->value_len) { - err = BT_ATT_ERROR_INVALID_OFFSET; - goto done; - } - - if (offset + len > attrib->value_len) { - err = BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN; - goto done; - } - } - - err = attribute_authorize(attrib, opcode, att); - if (err) - goto done; - - p = new0(struct pending_write, 1); - p->attrib = attrib; - p->id = ++attrib->write_id; - p->timeout_id = timeout_add(ATTRIBUTE_TIMEOUT, write_timeout, - p, NULL); - p->func = func; - p->user_data = user_data; - - queue_push_tail(attrib->pending_writes, p); - - attrib->write_func(attrib, p->id, offset, value, len, opcode, - att, attrib->user_data); - return true; - } - - /* Nothing to write just skip */ - if (len == 0) - goto done; - - /* For values stored in db allocate on demand */ - if (!attrib->value || offset >= attrib->value_len || - len > (unsigned) (attrib->value_len - offset)) { - void *buf; - - buf = realloc(attrib->value, len + offset); - if (!buf) - return false; - - attrib->value = buf; - - /* Init data in the first allocation */ - if (!attrib->value_len) - memset(attrib->value, 0, offset); - - attrib->value_len = len + offset; - } - - memcpy(&attrib->value[offset], value, len); - -done: - func(attrib, err, user_data); - - return true; -} - -bool gatt_db_attribute_write_result(struct gatt_db_attribute *attrib, - unsigned int id, int err) -{ - struct pending_write *p; - - if (!attrib || !id) - return false; - - p = queue_remove_if(attrib->pending_writes, find_pending, - UINT_TO_PTR(id)); - if (!p) - return false; - - pending_write_result(p, err); - - return true; -} - -bool gatt_db_attribute_reset(struct gatt_db_attribute *attrib) -{ - if (!attrib) - return false; - - if (!attrib->value || !attrib->value_len) - return true; - - free(attrib->value); - attrib->value = NULL; - attrib->value_len = 0; - - return true; -} - -void *gatt_db_attribute_get_user_data(struct gatt_db_attribute *attrib) -{ - if (!attrib) - return NULL; - - return attrib->user_data; -} - -static bool match_attribute_notify_id(const void *a, const void *b) -{ - const struct attribute_notify *notify = a; - unsigned int id = PTR_TO_UINT(b); - - return notify->id == id; -} - -unsigned int gatt_db_attribute_register(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t removed, - void *user_data, - gatt_db_destroy_func_t destroy) -{ - struct attribute_notify *notify; - - if (!attrib || !removed) - return 0; - - notify = new0(struct attribute_notify, 1); - notify->removed = removed; - notify->destroy = destroy; - notify->user_data = user_data; - - if (attrib->next_notify_id < 1) - attrib->next_notify_id = 1; - - notify->id = attrib->next_notify_id++; - - if (!queue_push_tail(attrib->notify_list, notify)) { - free(notify); - return 0; - } - - return notify->id; -} - -bool gatt_db_attribute_unregister(struct gatt_db_attribute *attrib, - unsigned int id) -{ - struct attribute_notify *notify; - - if (!attrib || !id) - return false; - - notify = queue_find(attrib->notify_list, match_attribute_notify_id, - UINT_TO_PTR(id)); - if (!notify) - return false; - - queue_remove(attrib->notify_list, notify); - attribute_notify_destroy(notify); - - return true; -} diff --git a/alfred/src/ble/gatt-db.h b/alfred/src/ble/gatt-db.h deleted file mode 100644 index 321a2aba6..000000000 --- a/alfred/src/ble/gatt-db.h +++ /dev/null @@ -1,281 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Intel Corporation. All rights reserved. - * - * - */ - -struct gatt_db; -struct gatt_db_attribute; - -struct gatt_db *gatt_db_new(void); - -struct gatt_db *gatt_db_ref(struct gatt_db *db); -void gatt_db_unref(struct gatt_db *db); - -bool gatt_db_isempty(struct gatt_db *db); - -struct gatt_db_attribute *gatt_db_add_service(struct gatt_db *db, - const bt_uuid_t *uuid, - bool primary, - uint16_t num_handles); - -bool gatt_db_remove_service(struct gatt_db *db, - struct gatt_db_attribute *attrib); -bool gatt_db_clear(struct gatt_db *db); -bool gatt_db_clear_range(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle); -bool gatt_db_hash_support(struct gatt_db *db); -uint8_t *gatt_db_get_hash(struct gatt_db *db); - -struct gatt_db_attribute *gatt_db_insert_service(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - bool primary, - uint16_t num_handles); - -typedef void (*gatt_db_read_t) (struct gatt_db_attribute *attrib, - unsigned int id, uint16_t offset, - uint8_t opcode, struct bt_att *att, - void *user_data); - -typedef void (*gatt_db_write_t) (struct gatt_db_attribute *attrib, - unsigned int id, uint16_t offset, - const uint8_t *value, size_t len, - uint8_t opcode, struct bt_att *att, - void *user_data); - -struct gatt_db_attribute * -gatt_db_service_add_characteristic(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); -struct gatt_db_attribute * -gatt_db_service_insert_characteristic(struct gatt_db_attribute *attrib, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); - -struct gatt_db_attribute * -gatt_db_insert_characteristic(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - uint8_t properties, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); - -struct gatt_db_attribute * -gatt_db_insert_descriptor(struct gatt_db *db, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); - -struct gatt_db_attribute * -gatt_db_service_add_descriptor(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); -struct gatt_db_attribute * -gatt_db_service_insert_descriptor(struct gatt_db_attribute *attrib, - uint16_t handle, - const bt_uuid_t *uuid, - uint32_t permissions, - gatt_db_read_t read_func, - gatt_db_write_t write_func, - void *user_data); - -struct gatt_db_attribute * -gatt_db_insert_included(struct gatt_db *db, uint16_t handle, - struct gatt_db_attribute *include); - -struct gatt_db_attribute * -gatt_db_service_add_included(struct gatt_db_attribute *attrib, - struct gatt_db_attribute *include); -struct gatt_db_attribute * -gatt_db_service_insert_included(struct gatt_db_attribute *attrib, - uint16_t handle, - struct gatt_db_attribute *include); - -bool gatt_db_service_set_active(struct gatt_db_attribute *attrib, bool active); -bool gatt_db_service_get_active(struct gatt_db_attribute *attrib); - -bool gatt_db_service_set_claimed(struct gatt_db_attribute *attrib, - bool claimed); -bool gatt_db_service_get_claimed(struct gatt_db_attribute *attrib); - -typedef void (*gatt_db_attribute_cb_t)(struct gatt_db_attribute *attrib, - void *user_data); - -void gatt_db_read_by_group_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t type, - struct queue *queue); - -unsigned int gatt_db_find_by_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t *type, - gatt_db_attribute_cb_t func, - void *user_data); - -unsigned int gatt_db_find_by_type_value(struct gatt_db *db, - uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t *type, - const void *value, - size_t value_len, - gatt_db_attribute_cb_t func, - void *user_data); - -void gatt_db_read_by_type(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - const bt_uuid_t type, - struct queue *queue); - -void gatt_db_find_information(struct gatt_db *db, uint16_t start_handle, - uint16_t end_handle, - struct queue *queue); - - -void gatt_db_foreach_service(struct gatt_db *db, const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data); -void gatt_db_foreach_in_range(struct gatt_db *db, const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data, - uint16_t start_handle, - uint16_t end_handle); - -void gatt_db_foreach_service_in_range(struct gatt_db *db, - const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data, - uint16_t start_handle, - uint16_t end_handle); - -void gatt_db_service_foreach(struct gatt_db_attribute *attrib, - const bt_uuid_t *uuid, - gatt_db_attribute_cb_t func, - void *user_data); -void gatt_db_service_foreach_char(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data); -void gatt_db_service_foreach_desc(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data); -void gatt_db_service_foreach_incl(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t func, - void *user_data); - -typedef void (*gatt_db_destroy_func_t)(void *user_data); - -unsigned int gatt_db_register(struct gatt_db *db, - gatt_db_attribute_cb_t service_added, - gatt_db_attribute_cb_t service_removed, - void *user_data, - gatt_db_destroy_func_t destroy); -bool gatt_db_unregister(struct gatt_db *db, unsigned int id); - -typedef uint8_t (*gatt_db_authorize_cb_t)(struct gatt_db_attribute *attrib, - uint8_t opcode, struct bt_att *att, - void *user_data); -bool gatt_db_set_authorize(struct gatt_db *db, gatt_db_authorize_cb_t cb, - void *user_data); - -struct gatt_db_attribute *gatt_db_get_service(struct gatt_db *db, - uint16_t handle); - -struct gatt_db_attribute *gatt_db_get_attribute(struct gatt_db *db, - uint16_t handle); - -struct gatt_db_attribute *gatt_db_get_service_with_uuid(struct gatt_db *db, - const bt_uuid_t *uuid); - -const bt_uuid_t *gatt_db_attribute_get_type( - const struct gatt_db_attribute *attrib); - -uint16_t gatt_db_attribute_get_handle(const struct gatt_db_attribute *attrib); - -bool gatt_db_attribute_get_service_uuid(const struct gatt_db_attribute *attrib, - bt_uuid_t *uuid); - -bool gatt_db_attribute_get_service_handles( - const struct gatt_db_attribute *attrib, - uint16_t *start_handle, - uint16_t *end_handle); - -bool gatt_db_attribute_get_service_data(const struct gatt_db_attribute *attrib, - uint16_t *start_handle, - uint16_t *end_handle, - bool *primary, - bt_uuid_t *uuid); - -bool gatt_db_attribute_get_char_data(const struct gatt_db_attribute *attrib, - uint16_t *handle, - uint16_t *value_handle, - uint8_t *properties, - uint16_t *ext_prop, - bt_uuid_t *uuid); - -bool gatt_db_attribute_get_incl_data(const struct gatt_db_attribute *attrib, - uint16_t *handle, - uint16_t *start_handle, - uint16_t *end_handle); - -uint32_t -gatt_db_attribute_get_permissions(const struct gatt_db_attribute *attrib); - -bool gatt_db_attribute_set_fixed_length(struct gatt_db_attribute *attrib, - uint16_t len); - -typedef void (*gatt_db_attribute_read_t) (struct gatt_db_attribute *attrib, - int err, const uint8_t *value, - size_t length, void *user_data); - -bool gatt_db_attribute_read(struct gatt_db_attribute *attrib, uint16_t offset, - uint8_t opcode, struct bt_att *att, - gatt_db_attribute_read_t func, void *user_data); - -bool gatt_db_attribute_read_result(struct gatt_db_attribute *attrib, - unsigned int id, int err, - const uint8_t *value, size_t length); - -typedef void (*gatt_db_attribute_write_t) (struct gatt_db_attribute *attrib, - int err, void *user_data); - -bool gatt_db_attribute_write(struct gatt_db_attribute *attrib, uint16_t offset, - const uint8_t *value, size_t len, - uint8_t opcode, struct bt_att *att, - gatt_db_attribute_write_t func, - void *user_data); - -bool gatt_db_attribute_write_result(struct gatt_db_attribute *attrib, - unsigned int id, int err); - -bool gatt_db_attribute_reset(struct gatt_db_attribute *attrib); - -void *gatt_db_attribute_get_user_data(struct gatt_db_attribute *attrib); - -unsigned int gatt_db_attribute_register(struct gatt_db_attribute *attrib, - gatt_db_attribute_cb_t removed, - void *user_data, - gatt_db_destroy_func_t destroy); - -bool gatt_db_attribute_unregister(struct gatt_db_attribute *attrib, - unsigned int id); diff --git a/alfred/src/ble/gatt-helpers.c b/alfred/src/ble/gatt-helpers.c deleted file mode 100644 index 5e74fab92..000000000 --- a/alfred/src/ble/gatt-helpers.c +++ /dev/null @@ -1,1501 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "ble/queue.h" -#include "ble/att.h" -#include -#include "ble/uuid.h" -#include "ble/gatt-helpers.h" -#include "ble/util.h" - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -struct bt_gatt_result { - uint8_t opcode; - void *pdu; - uint16_t pdu_len; - uint16_t data_len; - - void *op; /* Discovery operation data */ - - struct bt_gatt_result *next; -}; - -static struct bt_gatt_result *result_create(uint8_t opcode, const void *pdu, - uint16_t pdu_len, - uint16_t data_len, - void *op) -{ - struct bt_gatt_result *result; - - result = new0(struct bt_gatt_result, 1); - result->pdu = malloc(pdu_len); - if (!result->pdu) { - free(result); - return NULL; - } - - result->opcode = opcode; - result->pdu_len = pdu_len; - result->data_len = data_len; - result->op = op; - - memcpy(result->pdu, pdu, pdu_len); - - return result; -} - -static void result_destroy(struct bt_gatt_result *result) -{ - struct bt_gatt_result *next; - - while (result) { - next = result->next; - - free(result->pdu); - free(result); - - result = next; - } -} - -static unsigned int result_element_count(struct bt_gatt_result *result) -{ - unsigned int count = 0; - struct bt_gatt_result *cur; - - cur = result; - - while (cur) { - count += cur->pdu_len / cur->data_len; - cur = cur->next; - } - - return count; -} - -unsigned int bt_gatt_result_service_count(struct bt_gatt_result *result) -{ - if (!result) - return 0; - - if (result->opcode != BT_ATT_OP_READ_BY_GRP_TYPE_RSP && - result->opcode != BT_ATT_OP_FIND_BY_TYPE_RSP) - return 0; - - return result_element_count(result); -} - -unsigned int bt_gatt_result_characteristic_count(struct bt_gatt_result *result) -{ - if (!result) - return 0; - - if (result->opcode != BT_ATT_OP_READ_BY_TYPE_RSP) - return 0; - - /* - * Data length contains 7 or 21 octets: - * 2 octets: Attribute handle - * 1 octet: Characteristic properties - * 2 octets: Characteristic value handle - * 2 or 16 octets: characteristic UUID - */ - if (result->data_len != 21 && result->data_len != 7) - return 0; - - return result_element_count(result); -} - -unsigned int bt_gatt_result_descriptor_count(struct bt_gatt_result *result) -{ - if (!result) - return 0; - - if (result->opcode != BT_ATT_OP_FIND_INFO_RSP) - return 0; - - return result_element_count(result); -} - -unsigned int bt_gatt_result_included_count(struct bt_gatt_result *result) -{ - struct bt_gatt_result *cur; - unsigned int count = 0; - - if (!result) - return 0; - - if (result->opcode != BT_ATT_OP_READ_BY_TYPE_RSP) - return 0; - - /* - * Data length can be of length 6 or 8 octets: - * 2 octets - include service handle - * 2 octets - start handle of included service - * 2 octets - end handle of included service - * 2 octets (optionally) - 16 bit Bluetooth UUID - */ - if (result->data_len != 6 && result->data_len != 8) - return 0; - - for (cur = result; cur; cur = cur->next) - if (cur->opcode == BT_ATT_OP_READ_BY_TYPE_RSP) - count += cur->pdu_len / cur->data_len; - - return count; -} - -bool bt_gatt_iter_init(struct bt_gatt_iter *iter, struct bt_gatt_result *result) -{ - if (!iter || !result) - return false; - - iter->result = result; - iter->pos = 0; - - return true; -} - -static const uint8_t bt_base_uuid[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB -}; - -static bool convert_uuid_le(const uint8_t *src, size_t len, uint8_t dst[16]) -{ - if (len == 16) { - bswap_128(src, dst); - return true; - } - - if (len != 2) - return false; - - memcpy(dst, bt_base_uuid, sizeof(bt_base_uuid)); - dst[2] = src[1]; - dst[3] = src[0]; - - return true; -} - -struct bt_gatt_request { - struct bt_att *att; - unsigned int id; - uint16_t start_handle; - uint16_t end_handle; - int ref_count; - bt_uuid_t uuid; - uint16_t service_type; - struct bt_gatt_result *result_head; - struct bt_gatt_result *result_tail; - bt_gatt_request_callback_t callback; - void *user_data; - bt_gatt_destroy_func_t destroy; -}; - -static struct bt_gatt_result *result_append(uint8_t opcode, const void *pdu, - uint16_t pdu_len, - uint16_t data_len, - struct bt_gatt_request *op) -{ - struct bt_gatt_result *result; - - result = result_create(opcode, pdu, pdu_len, data_len, op); - if (!result) - return NULL; - - if (!op->result_head) - op->result_head = op->result_tail = result; - else { - op->result_tail->next = result; - op->result_tail = result; - } - - return result; -} - -bool bt_gatt_iter_next_included_service(struct bt_gatt_iter *iter, - uint16_t *handle, uint16_t *start_handle, - uint16_t *end_handle, uint8_t uuid[16]) -{ - struct bt_gatt_result *read_result; - struct bt_gatt_request *op; - const void *pdu_ptr; - int i = 0; - - if (!iter || !iter->result || !handle || !start_handle || !end_handle - || !uuid) - return false; - - - if (iter->result->opcode != BT_ATT_OP_READ_BY_TYPE_RSP) - return false; - - /* UUID in discovery_op is set in read_by_type and service_discovery */ - op = iter->result->op; - if (op->uuid.type != BT_UUID_UNSPEC) - return false; - /* - * iter->result points to READ_BY_TYPE_RSP with data length containing: - * 2 octets - include service handle - * 2 octets - start handle of included service - * 2 octets - end handle of included service - * optional 2 octets - Bluetooth UUID - */ - if (iter->result->data_len != 8 && iter->result->data_len != 6) - return false; - - pdu_ptr = iter->result->pdu + iter->pos; - - /* This result contains 16 bit UUID */ - if (iter->result->data_len == 8) { - *handle = get_le16(pdu_ptr); - *start_handle = get_le16(pdu_ptr + 2); - *end_handle = get_le16(pdu_ptr + 4); - convert_uuid_le(pdu_ptr + 6, 2, uuid); - - iter->pos += iter->result->data_len; - - if (iter->pos == iter->result->pdu_len) { - iter->result = iter->result->next; - iter->pos = 0; - } - - return true; - } - - *handle = get_le16(pdu_ptr); - *start_handle = get_le16(pdu_ptr + 2); - *end_handle = get_le16(pdu_ptr + 4); - read_result = iter->result; - - /* - * Find READ_RSP with include service UUID. - * If number of current data set in READ_BY_TYPE_RSP is n, then we must - * go to n'th PDU next to current item->result - */ - for (read_result = read_result->next; read_result; i++) { - if (i >= (iter->pos / iter->result->data_len)) - break; - - read_result = read_result->next; - } - - if (!read_result) - return false; - - convert_uuid_le(read_result->pdu, read_result->data_len, uuid); - iter->pos += iter->result->data_len; - if (iter->pos == iter->result->pdu_len) { - iter->result = read_result->next; - iter->pos = 0; - } - - return true; -} - -bool bt_gatt_iter_next_service(struct bt_gatt_iter *iter, - uint16_t *start_handle, uint16_t *end_handle, - uint8_t uuid[16]) -{ - struct bt_gatt_request *op; - const void *pdu_ptr; - bt_uuid_t tmp; - - if (!iter || !iter->result || !start_handle || !end_handle || !uuid) - return false; - - op = iter->result->op; - pdu_ptr = iter->result->pdu + iter->pos; - - switch (iter->result->opcode) { - case BT_ATT_OP_READ_BY_GRP_TYPE_RSP: - *start_handle = get_le16(pdu_ptr); - *end_handle = get_le16(pdu_ptr + 2); - convert_uuid_le(pdu_ptr + 4, iter->result->data_len - 4, uuid); - break; - case BT_ATT_OP_FIND_BY_TYPE_RSP: - *start_handle = get_le16(pdu_ptr); - *end_handle = get_le16(pdu_ptr + 2); - - bt_uuid_to_uuid128(&op->uuid, &tmp); - memcpy(uuid, tmp.value.u128.data, 16); - break; - default: - return false; - } - - - iter->pos += iter->result->data_len; - if (iter->pos == iter->result->pdu_len) { - iter->result = iter->result->next; - iter->pos = 0; - } - - return true; -} - -bool bt_gatt_iter_next_characteristic(struct bt_gatt_iter *iter, - uint16_t *start_handle, uint16_t *end_handle, - uint16_t *value_handle, uint8_t *properties, - uint8_t uuid[16]) -{ - struct bt_gatt_request *op; - const void *pdu_ptr; - - if (!iter || !iter->result || !start_handle || !end_handle || - !value_handle || !properties || !uuid) - return false; - - if (iter->result->opcode != BT_ATT_OP_READ_BY_TYPE_RSP) - return false; - - /* UUID in discovery_op is set in read_by_type and service_discovery */ - op = iter->result->op; - if (op->uuid.type != BT_UUID_UNSPEC) - return false; - /* - * Data length contains 7 or 21 octets: - * 2 octets: Attribute handle - * 1 octet: Characteristic properties - * 2 octets: Characteristic value handle - * 2 or 16 octets: characteristic UUID - */ - if (iter->result->data_len != 21 && iter->result->data_len != 7) - return false; - - pdu_ptr = iter->result->pdu + iter->pos; - - *start_handle = get_le16(pdu_ptr); - *properties = ((uint8_t *) pdu_ptr)[2]; - *value_handle = get_le16(pdu_ptr + 3); - convert_uuid_le(pdu_ptr + 5, iter->result->data_len - 5, uuid); - - iter->pos += iter->result->data_len; - if (iter->pos == iter->result->pdu_len) { - iter->result = iter->result->next; - iter->pos = 0; - } - - if (!iter->result) { - *end_handle = op->end_handle; - return true; - } - - *end_handle = get_le16(iter->result->pdu + iter->pos) - 1; - - return true; -} - -bool bt_gatt_iter_next_descriptor(struct bt_gatt_iter *iter, uint16_t *handle, - uint8_t uuid[16]) -{ - const void *pdu_ptr; - - if (!iter || !iter->result || !handle || !uuid) - return false; - - if (iter->result->opcode != BT_ATT_OP_FIND_INFO_RSP) - return false; - - pdu_ptr = iter->result->pdu + iter->pos; - - *handle = get_le16(pdu_ptr); - convert_uuid_le(pdu_ptr + 2, iter->result->data_len - 2, uuid); - - iter->pos += iter->result->data_len; - if (iter->pos == iter->result->pdu_len) { - iter->result = iter->result->next; - iter->pos = 0; - } - - return true; -} - -bool bt_gatt_iter_next_read_by_type(struct bt_gatt_iter *iter, - uint16_t *handle, uint16_t *length, - const uint8_t **value) -{ - struct bt_gatt_request *op; - const void *pdu_ptr; - - if (!iter || !iter->result || !handle || !length || !value) - return false; - - if (iter->result->opcode != BT_ATT_OP_READ_BY_TYPE_RSP) - return false; - - /* - * Check if UUID is set, otherwise results can contain characteristic - * discovery service or included service discovery results - */ - op = iter->result->op; - if (op->uuid.type == BT_UUID_UNSPEC) - return false; - - pdu_ptr = iter->result->pdu + iter->pos; - - *handle = get_le16(pdu_ptr); - *length = iter->result->data_len - 2; - *value = pdu_ptr + 2; - - iter->pos += iter->result->data_len; - if (iter->pos == iter->result->pdu_len) { - iter->result = iter->result->next; - iter->pos = 0; - } - - return true; -} - -struct mtu_op { - struct bt_att *att; - uint16_t client_rx_mtu; - bt_gatt_result_callback_t callback; - void *user_data; - bt_gatt_destroy_func_t destroy; -}; - -static void destroy_mtu_op(void *user_data) -{ - struct mtu_op *op = user_data; - - if (op->destroy) - op->destroy(op->user_data); - - free(op); -} - -static uint8_t process_error(const void *pdu, uint16_t length) -{ - const struct bt_att_pdu_error_rsp *error_pdu; - - if (!pdu || length != sizeof(struct bt_att_pdu_error_rsp)) - return 0; - - error_pdu = pdu; - - return error_pdu->ecode; -} - -static void mtu_cb(uint8_t opcode, const void *pdu, uint16_t length, - void *user_data) -{ - struct mtu_op *op = user_data; - bool success = true; - uint8_t att_ecode = 0; - uint16_t server_rx_mtu; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - if (opcode != BT_ATT_OP_MTU_RSP || !pdu || length != 2) { - success = false; - goto done; - } - - server_rx_mtu = get_le16(pdu); - bt_att_set_mtu(op->att, MIN(op->client_rx_mtu, server_rx_mtu)); - -done: - if (op->callback) - op->callback(success, att_ecode, op->user_data); -} - -unsigned int bt_gatt_exchange_mtu(struct bt_att *att, uint16_t client_rx_mtu, - bt_gatt_result_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - struct mtu_op *op; - uint8_t pdu[2]; - unsigned int id; - - if (!att || !client_rx_mtu) - return false; - - op = new0(struct mtu_op, 1); - op->att = att; - op->client_rx_mtu = client_rx_mtu; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - - put_le16(client_rx_mtu, pdu); - - id = bt_att_send(att, BT_ATT_OP_MTU_REQ, pdu, sizeof(pdu), mtu_cb, op, - destroy_mtu_op); - if (!id) - free(op); - - return id; -} - -static inline int get_uuid_len(const bt_uuid_t *uuid) -{ - if (!uuid) - return 0; - - return (uuid->type == BT_UUID16) ? 2 : 16; -} - -struct bt_gatt_request *bt_gatt_request_ref(struct bt_gatt_request *req) -{ - if (!req) - return NULL; - - __sync_fetch_and_add(&req->ref_count, 1); - - return req; -} - -void bt_gatt_request_unref(struct bt_gatt_request *req) -{ - if (!req) - return; - - if (__sync_sub_and_fetch(&req->ref_count, 1)) - return; - - bt_gatt_request_cancel(req); - - if (req->destroy) - req->destroy(req->user_data); - - result_destroy(req->result_head); - - free(req); -} - -void bt_gatt_request_cancel(struct bt_gatt_request *req) -{ - if (!req) - return; - - if (!req->id) - return; - - bt_att_cancel(req->att, req->id); - req->id = 0; -} - -static void async_req_unref(void *data) -{ - struct bt_gatt_request *req = data; - - bt_gatt_request_unref(req); -} - -static void discovery_op_complete(struct bt_gatt_request *op, bool success, - uint8_t ecode) -{ - /* Reset success if there is some result to report */ - if (ecode == BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && op->result_head) - success = true; - - if (op->callback) - op->callback(success, ecode, success ? op->result_head : NULL, - op->user_data); - - if (!op->id) - async_req_unref(op); - else - op->id = 0; - -} - -static void read_by_grp_type_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - bool success; - uint8_t att_ecode = 0; - struct bt_gatt_result *cur_result; - size_t data_length; - size_t list_length; - uint16_t last_end; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - /* PDU must contain at least the following (sans opcode): - * - Attr Data Length (1 octet) - * - Attr Data List (at least 6 octets): - * -- 2 octets: Attribute handle - * -- 2 octets: End group handle - * -- 2 or 16 octets: service UUID - */ - if (opcode != BT_ATT_OP_READ_BY_GRP_TYPE_RSP || !pdu || length < 7) { - success = false; - goto done; - } - - data_length = ((uint8_t *) pdu)[0]; - list_length = length - 1; - - if ((data_length != 6 && data_length != 20) || - (list_length % data_length)) { - success = false; - goto done; - } - - /* PDU is correctly formatted. Get the last end handle to process the - * next request and store the PDU. - */ - cur_result = result_append(opcode, pdu + 1, list_length, data_length, - op); - if (!cur_result) { - success = false; - goto done; - } - - last_end = get_le16(pdu + length - data_length + 2); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_end < op->start_handle) { - success = false; - goto done; - } - - op->start_handle = last_end + 1; - - if (last_end < op->end_handle) { - uint8_t pdu[6]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - put_le16(op->service_type, pdu + 4); - - op->id = bt_att_send(op->att, BT_ATT_OP_READ_BY_GRP_TYPE_REQ, - pdu, sizeof(pdu), - read_by_grp_type_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - /* Some devices incorrectly return 0xffff as the end group handle when - * the read-by-group-type request is performed within a smaller range. - * Manually set the end group handle that we report in the result to the - * end handle in the original request. - */ - if (last_end == 0xffff && last_end != op->end_handle) - put_le16(op->end_handle, - cur_result->pdu + length - data_length + 1); - - success = true; - -done: - discovery_op_complete(op, success, att_ecode); -} - -static void find_by_type_val_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - bool success; - uint8_t att_ecode = 0; - uint16_t last_end; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - /* PDU must contain 4 bytes and it must be a multiple of 4, where each - * 4 bytes contain the 16-bit attribute and group end handles. - */ - if (opcode != BT_ATT_OP_FIND_BY_TYPE_RSP || !pdu || !length || - length % 4) { - success = false; - goto done; - } - - if (!result_append(opcode, pdu, length, 4, op)) { - success = false; - goto done; - } - - /* - * Each data set contains: - * 2 octets with start handle - * 2 octets with end handle - * last_end is end handle of last data set - */ - last_end = get_le16(pdu + length - 2); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_end < op->start_handle) { - success = false; - goto done; - } - - op->start_handle = last_end + 1; - - if (last_end < op->end_handle) { - uint8_t pdu[6 + get_uuid_len(&op->uuid)]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - put_le16(op->service_type, pdu + 4); - bt_uuid_to_le(&op->uuid, pdu + 6); - - op->id = bt_att_send(op->att, BT_ATT_OP_FIND_BY_TYPE_REQ, - pdu, sizeof(pdu), - find_by_type_val_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - success = true; - -done: - discovery_op_complete(op, success, att_ecode); -} - -static struct bt_gatt_request *discover_services(struct bt_att *att, - bt_uuid_t *uuid, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy, - bool primary) -{ - struct bt_gatt_request *op; - - if (!att) - return NULL; - - op = new0(struct bt_gatt_request, 1); - op->att = att; - op->start_handle = start; - op->end_handle = end; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - /* set service uuid to primary or secondary */ - op->service_type = primary ? GATT_PRIM_SVC_UUID : GATT_SND_SVC_UUID; - - /* If UUID is NULL, then discover all primary services */ - if (!uuid) { - uint8_t pdu[6]; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - put_le16(op->service_type, pdu + 4); - - op->id = bt_att_send(att, BT_ATT_OP_READ_BY_GRP_TYPE_REQ, - pdu, sizeof(pdu), - read_by_grp_type_cb, - bt_gatt_request_ref(op), - async_req_unref); - } else { - uint8_t pdu[6 + get_uuid_len(uuid)]; - - if (uuid->type == BT_UUID_UNSPEC) { - free(op); - return NULL; - } - - /* Discover by UUID */ - op->uuid = *uuid; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - put_le16(op->service_type, pdu + 4); - bt_uuid_to_le(&op->uuid, pdu + 6); - - op->id = bt_att_send(att, BT_ATT_OP_FIND_BY_TYPE_REQ, - pdu, sizeof(pdu), - find_by_type_val_cb, - bt_gatt_request_ref(op), - async_req_unref); - } - - if (!op->id) { - free(op); - return NULL; - } - - return bt_gatt_request_ref(op); -} - -struct bt_gatt_request *bt_gatt_discover_all_primary_services( - struct bt_att *att, bt_uuid_t *uuid, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - return bt_gatt_discover_primary_services(att, uuid, 0x0001, 0xffff, - callback, user_data, - destroy); -} - -struct bt_gatt_request *bt_gatt_discover_primary_services( - struct bt_att *att, bt_uuid_t *uuid, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - return discover_services(att, uuid, start, end, callback, user_data, - destroy, true); -} - -struct bt_gatt_request *bt_gatt_discover_secondary_services( - struct bt_att *att, bt_uuid_t *uuid, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - return discover_services(att, uuid, start, end, callback, user_data, - destroy, false); -} - -struct read_incl_data { - struct bt_gatt_request *op; - struct bt_gatt_result *result; - int pos; - int ref_count; -}; - -static struct read_incl_data *new_read_included(struct bt_gatt_result *res) -{ - struct read_incl_data *data; - - data = new0(struct read_incl_data, 1); - data->op = bt_gatt_request_ref(res->op); - data->result = res; - - return data; -}; - -static struct read_incl_data *read_included_ref(struct read_incl_data *data) -{ - __sync_fetch_and_add(&data->ref_count, 1); - - return data; -} - -static void read_included_unref(void *data) -{ - struct read_incl_data *read_data = data; - - if (__sync_sub_and_fetch(&read_data->ref_count, 1)) - return; - - async_req_unref(read_data->op); - - free(read_data); -} - -static void discover_included_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data); - -static void read_included_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct read_incl_data *data = user_data; - struct bt_gatt_request *op = data->op; - uint8_t att_ecode = 0; - uint8_t read_pdu[2]; - bool success; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - if (opcode != BT_ATT_OP_READ_RSP || (!pdu && length)) { - success = false; - goto done; - } - - /* - * UUID should be in 128 bit format, as it couldn't be read in - * READ_BY_TYPE request - */ - if (length != 16) { - success = false; - goto done; - } - - if (!result_append(opcode, pdu, length, length, op)) { - success = false; - goto done; - } - - if (data->pos == data->result->pdu_len) { - uint16_t last_handle; - uint8_t pdu[6]; - - last_handle = get_le16(data->result->pdu + data->pos - - data->result->data_len); - if (last_handle == op->end_handle) { - success = true; - goto done; - } - - put_le16(last_handle + 1, pdu); - put_le16(op->end_handle, pdu + 2); - put_le16(GATT_INCLUDE_UUID, pdu + 4); - - op->id = bt_att_send(op->att, BT_ATT_OP_READ_BY_TYPE_REQ, - pdu, sizeof(pdu), - discover_included_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - memcpy(read_pdu, data->result->pdu + data->pos + 2, sizeof(uint16_t)); - - data->pos += data->result->data_len; - - if (bt_att_send(op->att, BT_ATT_OP_READ_REQ, read_pdu, sizeof(read_pdu), - read_included_cb, read_included_ref(data), - read_included_unref)) - return; - - read_included_unref(data); - success = false; - -done: - discovery_op_complete(op, success, att_ecode); -} - -static void read_included(struct read_incl_data *data) -{ - struct bt_gatt_request *op = data->op; - uint8_t pdu[2]; - - memcpy(pdu, data->result->pdu + 2, sizeof(uint16_t)); - - data->pos += data->result->data_len; - - if (bt_att_send(op->att, BT_ATT_OP_READ_REQ, pdu, sizeof(pdu), - read_included_cb, - read_included_ref(data), - read_included_unref)) - return; - - if (op->callback) - op->callback(false, 0, NULL, data->op->user_data); - - read_included_unref(data); -} - -static void discover_included_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - struct bt_gatt_result *cur_result; - uint8_t att_ecode = 0; - uint16_t last_handle; - size_t data_length; - bool success; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - att_ecode = process_error(pdu, length); - success = false; - goto failed; - } - - if (opcode != BT_ATT_OP_READ_BY_TYPE_RSP || !pdu || length < 6) { - success = false; - goto failed; - } - - data_length = ((const uint8_t *) pdu)[0]; - - /* - * Check if PDU contains data sets with length declared in the beginning - * of frame and if this length is correct. - * Data set length may be 6 or 8 octets: - * 2 octets - include service handle - * 2 octets - start handle of included service - * 2 octets - end handle of included service - * optional 2 octets - Bluetooth UUID of included service - */ - if ((data_length != 8 && data_length != 6) || - (length - 1) % data_length) { - success = false; - goto failed; - } - - cur_result = result_append(opcode, pdu + 1, length - 1, data_length, - op); - if (!cur_result) { - success = false; - goto failed; - } - - if (data_length == 6) { - struct read_incl_data *data; - - data = new_read_included(cur_result); - if (!data) { - success = false; - goto failed; - } - - read_included(data); - return; - } - - last_handle = get_le16(pdu + length - data_length); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_handle < op->start_handle) { - success = false; - goto failed; - } - - op->start_handle = last_handle + 1; - if (last_handle != op->end_handle) { - uint8_t pdu[6]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - put_le16(GATT_INCLUDE_UUID, pdu + 4); - - op->id = bt_att_send(op->att, BT_ATT_OP_READ_BY_TYPE_REQ, - pdu, sizeof(pdu), - discover_included_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto failed; - } - - success = true; - -failed: - discovery_op_complete(op, success, att_ecode); -} - -struct bt_gatt_request *bt_gatt_discover_included_services(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - struct bt_gatt_request *op; - uint8_t pdu[6]; - - if (!att) - return false; - - op = new0(struct bt_gatt_request, 1); - op->att = att; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - op->start_handle = start; - op->end_handle = end; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - put_le16(GATT_INCLUDE_UUID, pdu + 4); - - op->id = bt_att_send(att, BT_ATT_OP_READ_BY_TYPE_REQ, pdu, sizeof(pdu), - discover_included_cb, bt_gatt_request_ref(op), - async_req_unref); - if (!op->id) { - free(op); - return NULL; - } - - return bt_gatt_request_ref(op); -} - -static void discover_chrcs_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - bool success; - uint8_t att_ecode = 0; - size_t data_length; - uint16_t last_handle; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - /* PDU must contain at least the following (sans opcode): - * - Attr Data Length (1 octet) - * - Attr Data List (at least 7 octets): - * -- 2 octets: Attribute handle - * -- 1 octet: Characteristic properties - * -- 2 octets: Characteristic value handle - * -- 2 or 16 octets: characteristic UUID - */ - if (opcode != BT_ATT_OP_READ_BY_TYPE_RSP || !pdu || length < 8) { - success = false; - goto done; - } - - data_length = ((uint8_t *) pdu)[0]; - - if ((data_length != 7 && data_length != 21) || - ((length - 1) % data_length)) { - success = false; - goto done; - } - - if (!result_append(opcode, pdu + 1, length - 1, - data_length, op)) { - success = false; - goto done; - } - last_handle = get_le16(pdu + length - data_length); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_handle < op->start_handle) { - success = false; - goto done; - } - - op->start_handle = last_handle + 1; - - if (last_handle != op->end_handle) { - uint8_t pdu[6]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - put_le16(GATT_CHARAC_UUID, pdu + 4); - - op->id = bt_att_send(op->att, BT_ATT_OP_READ_BY_TYPE_REQ, - pdu, sizeof(pdu), - discover_chrcs_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - success = true; - -done: - discovery_op_complete(op, success, att_ecode); -} - -struct bt_gatt_request *bt_gatt_discover_characteristics(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - struct bt_gatt_request *op; - uint8_t pdu[6]; - - if (!att) - return false; - - op = new0(struct bt_gatt_request, 1); - op->att = att; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - op->start_handle = start; - op->end_handle = end; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - put_le16(GATT_CHARAC_UUID, pdu + 4); - - op->id = bt_att_send(att, BT_ATT_OP_READ_BY_TYPE_REQ, pdu, sizeof(pdu), - discover_chrcs_cb, bt_gatt_request_ref(op), - async_req_unref); - if (!op->id) { - free(op); - return NULL; - } - - return bt_gatt_request_ref(op); -} - -static void read_by_type_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - bool success; - uint8_t att_ecode = 0; - size_t data_length; - uint16_t last_handle; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - att_ecode = process_error(pdu, length); - success = false; - goto done; - } - - if (opcode != BT_ATT_OP_READ_BY_TYPE_RSP || !pdu) { - success = false; - att_ecode = 0; - goto done; - } - - data_length = ((uint8_t *) pdu)[0]; - if (((length - 1) % data_length)) { - success = false; - att_ecode = 0; - goto done; - } - - if (!result_append(opcode, pdu + 1, length - 1, data_length, op)) { - success = false; - att_ecode = 0; - goto done; - } - - last_handle = get_le16(pdu + length - data_length); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_handle < op->start_handle) { - success = false; - goto done; - } - - op->start_handle = last_handle + 1; - - if (last_handle != op->end_handle) { - uint8_t pdu[4 + get_uuid_len(&op->uuid)]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - bt_uuid_to_le(&op->uuid, pdu + 4); - - op->id = bt_att_send(op->att, BT_ATT_OP_READ_BY_TYPE_REQ, - pdu, sizeof(pdu), - read_by_type_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - success = true; - -done: - discovery_op_complete(op, success, att_ecode); -} - -bool bt_gatt_read_by_type(struct bt_att *att, uint16_t start, uint16_t end, - const bt_uuid_t *uuid, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - struct bt_gatt_request *op; - uint8_t pdu[4 + get_uuid_len(uuid)]; - - if (!att || !uuid || uuid->type == BT_UUID_UNSPEC) - return false; - - op = new0(struct bt_gatt_request, 1); - op->att = att; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - op->start_handle = start; - op->end_handle = end; - op->uuid = *uuid; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - bt_uuid_to_le(uuid, pdu + 4); - - op->id = bt_att_send(att, BT_ATT_OP_READ_BY_TYPE_REQ, pdu, sizeof(pdu), - read_by_type_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return true; - - free(op); - return false; -} - -static void discover_descs_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_request *op = user_data; - bool success; - uint8_t att_ecode = 0; - uint8_t format; - uint16_t last_handle; - size_t data_length; - - if (opcode == BT_ATT_OP_ERROR_RSP) { - success = false; - att_ecode = process_error(pdu, length); - goto done; - } - - /* The PDU should contain the following data (sans opcode): - * - Format (1 octet) - * - Attr Data List (at least 4 octets): - * -- 2 octets: Attribute handle - * -- 2 or 16 octets: UUID. - */ - if (opcode != BT_ATT_OP_FIND_INFO_RSP || !pdu || length < 5) { - success = false; - goto done; - } - - format = ((uint8_t *) pdu)[0]; - - if (format == 0x01) - data_length = 4; - else if (format == 0x02) - data_length = 18; - else { - success = false; - goto done; - } - - if ((length - 1) % data_length) { - success = false; - goto done; - } - - if (!result_append(opcode, pdu + 1, length - 1, data_length, op)) { - success = false; - goto done; - } - - last_handle = get_le16(pdu + length - data_length); - - /* - * If last handle is lower from previous start handle then it is smth - * wrong. Let's stop search, otherwise we might enter infinite loop. - */ - if (last_handle < op->start_handle) { - success = false; - goto done; - } - - op->start_handle = last_handle + 1; - - if (last_handle != op->end_handle) { - uint8_t pdu[4]; - - put_le16(op->start_handle, pdu); - put_le16(op->end_handle, pdu + 2); - - op->id = bt_att_send(op->att, BT_ATT_OP_FIND_INFO_REQ, - pdu, sizeof(pdu), - discover_descs_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (op->id) - return; - - success = false; - goto done; - } - - success = true; - -done: - discovery_op_complete(op, success, att_ecode); -} - -struct bt_gatt_request *bt_gatt_discover_descriptors(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy) -{ - struct bt_gatt_request *op; - uint8_t pdu[4]; - - if (!att) - return false; - - op = new0(struct bt_gatt_request, 1); - op->att = att; - op->callback = callback; - op->user_data = user_data; - op->destroy = destroy; - op->start_handle = start; - op->end_handle = end; - - put_le16(start, pdu); - put_le16(end, pdu + 2); - - op->id = bt_att_send(att, BT_ATT_OP_FIND_INFO_REQ, pdu, sizeof(pdu), - discover_descs_cb, - bt_gatt_request_ref(op), - async_req_unref); - if (!op->id) { - free(op); - return NULL; - } - - return bt_gatt_request_ref(op); -} diff --git a/alfred/src/ble/gatt-helpers.h b/alfred/src/ble/gatt-helpers.h deleted file mode 100644 index 7623862e9..000000000 --- a/alfred/src/ble/gatt-helpers.h +++ /dev/null @@ -1,103 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -/* This file defines helpers for performing client-side procedures defined by - * the Generic Attribute Profile. - */ - -#include -#include - -struct bt_gatt_result; - -struct bt_gatt_iter { - struct bt_gatt_result *result; - uint16_t pos; -}; - -unsigned int bt_gatt_result_service_count(struct bt_gatt_result *result); -unsigned int bt_gatt_result_characteristic_count(struct bt_gatt_result *result); -unsigned int bt_gatt_result_descriptor_count(struct bt_gatt_result *result); -unsigned int bt_gatt_result_included_count(struct bt_gatt_result *result); - -bool bt_gatt_iter_init(struct bt_gatt_iter *iter, struct bt_gatt_result *result); -bool bt_gatt_iter_next_service(struct bt_gatt_iter *iter, - uint16_t *start_handle, uint16_t *end_handle, - uint8_t uuid[16]); -bool bt_gatt_iter_next_characteristic(struct bt_gatt_iter *iter, - uint16_t *start_handle, uint16_t *end_handle, - uint16_t *value_handle, uint8_t *properties, - uint8_t uuid[16]); -bool bt_gatt_iter_next_descriptor(struct bt_gatt_iter *iter, uint16_t *handle, - uint8_t uuid[16]); -bool bt_gatt_iter_next_included_service(struct bt_gatt_iter *iter, - uint16_t *handle, uint16_t *start_handle, - uint16_t *end_handle, uint8_t uuid[16]); -bool bt_gatt_iter_next_read_by_type(struct bt_gatt_iter *iter, - uint16_t *handle, uint16_t *length, - const uint8_t **value); - -typedef void (*bt_gatt_destroy_func_t)(void *user_data); - -typedef void (*bt_gatt_result_callback_t)(bool success, uint8_t att_ecode, - void *user_data); -typedef void (*bt_gatt_request_callback_t)(bool success, uint8_t att_ecode, - struct bt_gatt_result *result, - void *user_data); - -struct bt_gatt_request; - -struct bt_gatt_request *bt_gatt_request_ref(struct bt_gatt_request *req); -void bt_gatt_request_unref(struct bt_gatt_request *req); -void bt_gatt_request_cancel(struct bt_gatt_request *req); - -unsigned int bt_gatt_exchange_mtu(struct bt_att *att, uint16_t client_rx_mtu, - bt_gatt_result_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); - -struct bt_gatt_request *bt_gatt_discover_all_primary_services( - struct bt_att *att, bt_uuid_t *uuid, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); -struct bt_gatt_request *bt_gatt_discover_primary_services( - struct bt_att *att, bt_uuid_t *uuid, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); -struct bt_gatt_request *bt_gatt_discover_secondary_services( - struct bt_att *att, bt_uuid_t *uuid, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); -struct bt_gatt_request *bt_gatt_discover_included_services(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); -struct bt_gatt_request *bt_gatt_discover_characteristics(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); -struct bt_gatt_request *bt_gatt_discover_descriptors(struct bt_att *att, - uint16_t start, uint16_t end, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); - -bool bt_gatt_read_by_type(struct bt_att *att, uint16_t start, uint16_t end, - const bt_uuid_t *uuid, - bt_gatt_request_callback_t callback, - void *user_data, - bt_gatt_destroy_func_t destroy); diff --git a/alfred/src/ble/gatt-server.c b/alfred/src/ble/gatt-server.c deleted file mode 100644 index c92b51ee9..000000000 --- a/alfred/src/ble/gatt-server.c +++ /dev/null @@ -1,1822 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "ble/att.h" -#include -#include "ble/uuid.h" -#include "ble/queue.h" -#include "ble/gatt-db.h" -#include "ble/gatt-server.h" -#include "ble/gatt-helpers.h" -#include "ble/util.h" -#include "ble/timeout.h" - -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -/* - * TODO: This is an arbitrary limit. Come up with something reasonable or - * perhaps an API to set this value if there is a use case for it. - */ -#define DEFAULT_MAX_PREP_QUEUE_LEN 30 - -#define NFY_MULT_TIMEOUT 10 - -struct async_read_op { - struct bt_att_chan *chan; - struct bt_gatt_server *server; - uint8_t opcode; - bool done; - uint8_t *pdu; - size_t pdu_len; - size_t value_len; - struct queue *db_data; -}; - -struct async_write_op { - struct bt_att_chan *chan; - struct bt_gatt_server *server; - uint8_t opcode; -}; - -struct prep_write_data { - struct bt_gatt_server *server; - uint8_t *value; - uint16_t handle; - uint16_t offset; - uint16_t length; - - bool reliable_supported; -}; - -static void prep_write_data_destroy(void *user_data) -{ - struct prep_write_data *data = user_data; - - free(data->value); - free(data); -} - -struct nfy_mult_data { - unsigned int id; - uint8_t *pdu; - uint16_t offset; - uint16_t len; -}; - -struct bt_gatt_server { - struct gatt_db *db; - struct bt_att *att; - int ref_count; - uint16_t mtu; - - unsigned int mtu_id; - unsigned int read_by_grp_type_id; - unsigned int read_by_type_id; - unsigned int find_info_id; - unsigned int find_by_type_value_id; - unsigned int write_id; - unsigned int write_cmd_id; - unsigned int read_id; - unsigned int read_blob_id; - unsigned int read_multiple_id; - unsigned int read_multiple_vl_id; - unsigned int prep_write_id; - unsigned int exec_write_id; - - uint8_t min_enc_size; - - struct queue *prep_queue; - unsigned int max_prep_queue_len; - - bt_gatt_server_debug_func_t debug_callback; - bt_gatt_server_destroy_func_t debug_destroy; - void *debug_data; - - bt_gatt_server_authorize_cb_t authorize; - void *authorize_data; - - struct nfy_mult_data *nfy_mult; -}; - -static void bt_gatt_server_free(struct bt_gatt_server *server) -{ - if (server->debug_destroy) - server->debug_destroy(server->debug_data); - - bt_att_unregister(server->att, server->mtu_id); - bt_att_unregister(server->att, server->read_by_grp_type_id); - bt_att_unregister(server->att, server->read_by_type_id); - bt_att_unregister(server->att, server->find_info_id); - bt_att_unregister(server->att, server->find_by_type_value_id); - bt_att_unregister(server->att, server->write_id); - bt_att_unregister(server->att, server->write_cmd_id); - bt_att_unregister(server->att, server->read_id); - bt_att_unregister(server->att, server->read_blob_id); - bt_att_unregister(server->att, server->read_multiple_id); - bt_att_unregister(server->att, server->read_multiple_vl_id); - bt_att_unregister(server->att, server->prep_write_id); - bt_att_unregister(server->att, server->exec_write_id); - - queue_destroy(server->prep_queue, prep_write_data_destroy); - - gatt_db_unref(server->db); - bt_att_unref(server->att); - free(server); -} - -static bool get_uuid_le(const uint8_t *uuid, size_t len, bt_uuid_t *out_uuid) -{ - uint128_t u128; - - switch (len) { - case 2: - bt_uuid16_create(out_uuid, get_le16(uuid)); - return true; - case 16: - bswap_128(uuid, &u128.data); - bt_uuid128_create(out_uuid, u128); - return true; - default: - return false; - } - - return false; -} - -static void attribute_read_cb(struct gatt_db_attribute *attrib, int err, - const uint8_t *value, size_t length, - void *user_data) -{ - struct iovec *iov = user_data; - - iov->iov_base = (void *) value; - iov->iov_len = length; -} - -static bool encode_read_by_grp_type_rsp(struct gatt_db *db, struct queue *q, - struct bt_att *att, - uint16_t mtu, uint8_t *pdu, - uint16_t *len) -{ - int iter = 0; - uint16_t start_handle, end_handle; - struct iovec value; - uint8_t data_val_len; - - *len = 0; - - while (queue_peek_head(q)) { - struct gatt_db_attribute *attrib = queue_pop_head(q); - - value.iov_base = NULL; - value.iov_len = 0; - - /* - * This should never be deferred to the read callback for - * primary/secondary service declarations. - */ - if (!gatt_db_attribute_read(attrib, 0, - BT_ATT_OP_READ_BY_GRP_TYPE_REQ, - att, attribute_read_cb, - &value) || !value.iov_len) - return false; - - /* - * Use the first attribute to determine the length of each - * attribute data unit. Stop the list when a different attribute - * value is seen. - */ - if (iter == 0) { - data_val_len = MIN(MIN((unsigned)mtu - 6, 251), - value.iov_len); - pdu[0] = data_val_len + 4; - iter++; - } else if (value.iov_len != data_val_len) - break; - - /* Stop if this unit would surpass the MTU */ - if (iter + data_val_len + 4 > mtu - 1) - break; - - gatt_db_attribute_get_service_handles(attrib, &start_handle, - &end_handle); - - put_le16(start_handle, pdu + iter); - put_le16(end_handle, pdu + iter + 2); - memcpy(pdu + iter + 4, value.iov_base, data_val_len); - - iter += data_val_len + 4; - } - - *len = iter; - - return true; -} - -static void read_by_grp_type_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t start, end; - bt_uuid_t type; - bt_uuid_t prim, snd; - uint16_t mtu = bt_att_get_mtu(server->att); - uint8_t rsp_pdu[mtu]; - uint16_t rsp_len; - uint8_t ecode = 0; - uint16_t ehandle = 0; - struct queue *q = NULL; - - if (length != 6 && length != 20) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - q = queue_new(); - - start = get_le16(pdu); - end = get_le16(pdu + 2); - get_uuid_le(pdu + 4, length - 4, &type); - - util_debug(server->debug_callback, server->debug_data, - "Read By Grp Type - start: 0x%04x end: 0x%04x", - start, end); - - if (!start || !end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - ehandle = start; - - if (start > end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - /* - * GATT defines that only the <> and - * <> group types can be used for the - * "Read By Group Type" request (Core v4.1, Vol 3, sec 2.5.3). Return an - * error if any other group type is given. - */ - bt_uuid16_create(&prim, GATT_PRIM_SVC_UUID); - bt_uuid16_create(&snd, GATT_SND_SVC_UUID); - if (bt_uuid_cmp(&type, &prim) && bt_uuid_cmp(&type, &snd)) { - ecode = BT_ATT_ERROR_UNSUPPORTED_GROUP_TYPE; - goto error; - } - - gatt_db_read_by_group_type(server->db, start, end, type, q); - - if (queue_isempty(q)) { - ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND; - goto error; - } - - if (!encode_read_by_grp_type_rsp(server->db, q, server->att, mtu, - rsp_pdu, &rsp_len)) { - ecode = BT_ATT_ERROR_UNLIKELY; - goto error; - } - - queue_destroy(q, NULL); - - bt_att_chan_send_rsp(chan, BT_ATT_OP_READ_BY_GRP_TYPE_RSP, - rsp_pdu, rsp_len); - - return; - -error: - queue_destroy(q, NULL); - bt_att_chan_send_error_rsp(chan, opcode, ehandle, ecode); -} - -static void async_read_op_destroy(struct async_read_op *op) -{ - bt_gatt_server_unref(op->server); - queue_destroy(op->db_data, NULL); - free(op->pdu); - free(op); -} - -static void process_read_by_type(struct async_read_op *op); - -static void read_by_type_read_complete_cb(struct gatt_db_attribute *attr, - int err, const uint8_t *value, - size_t len, void *user_data) -{ - struct async_read_op *op = user_data; - struct bt_gatt_server *server = op->server; - uint16_t mtu; - uint16_t handle; - - mtu = bt_att_get_mtu(server->att); - handle = gatt_db_attribute_get_handle(attr); - - /* Terminate the operation if there was an error */ - if (err) { - bt_att_chan_send_error_rsp(op->chan, BT_ATT_OP_READ_BY_TYPE_REQ, - handle, err); - async_read_op_destroy(op); - return; - } - - if (op->pdu_len == 0) { - op->value_len = MIN(MIN((unsigned) mtu - 4, 253), len); - op->pdu[0] = op->value_len + 2; - op->pdu_len++; - } else if (len != op->value_len) { - op->done = true; - goto done; - } - - /* Stop if this would surpass the MTU */ - if (op->pdu_len + op->value_len + 2 > (unsigned) mtu - 1) { - op->done = true; - goto done; - } - - /* Encode the current value */ - put_le16(handle, op->pdu + op->pdu_len); - memcpy(op->pdu + op->pdu_len + 2, value, op->value_len); - - op->pdu_len += op->value_len + 2; - - if (op->pdu_len == (unsigned) mtu - 1) - op->done = true; - -done: - process_read_by_type(op); -} - -static bool check_min_key_size(uint8_t min_size, uint8_t size) -{ - if (!min_size || !size) - return true; - - return min_size <= size; -} - -static uint8_t check_permissions(struct bt_gatt_server *server, - struct gatt_db_attribute *attr, uint32_t mask) -{ - uint8_t enc_size; - uint32_t perm; - int security; - - perm = gatt_db_attribute_get_permissions(attr); - - if (perm && mask & BT_ATT_PERM_READ && !(perm & BT_ATT_PERM_READ)) - return BT_ATT_ERROR_READ_NOT_PERMITTED; - - if (perm && mask & BT_ATT_PERM_WRITE && !(perm & BT_ATT_PERM_WRITE)) - return BT_ATT_ERROR_WRITE_NOT_PERMITTED; - - perm &= mask; - if (!perm) - return 0; - - security = bt_att_get_security(server->att, &enc_size); - if (security < 0) - return BT_ATT_ERROR_UNLIKELY; - - if (perm & BT_ATT_PERM_SECURE) { - if (security < BT_ATT_SECURITY_FIPS) - return BT_ATT_ERROR_AUTHENTICATION; - - if (!check_min_key_size(server->min_enc_size, enc_size)) - return BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE; - } - - if (perm & BT_ATT_PERM_AUTHEN) { - if (security < BT_ATT_SECURITY_HIGH) - return BT_ATT_ERROR_AUTHENTICATION; - - if (!check_min_key_size(server->min_enc_size, enc_size)) - return BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE; - } - - if (perm & BT_ATT_PERM_ENCRYPT) { - if (security < BT_ATT_SECURITY_MEDIUM) - return BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION; - - if (!check_min_key_size(server->min_enc_size, enc_size)) - return BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE; - } - - return 0; -} - -static void process_read_by_type(struct async_read_op *op) -{ - struct bt_gatt_server *server = op->server; - uint8_t ecode; - struct gatt_db_attribute *attr; - - attr = queue_pop_head(op->db_data); - - if (op->done || !attr) { - bt_att_chan_send_rsp(op->chan, BT_ATT_OP_READ_BY_TYPE_RSP, - op->pdu, op->pdu_len); - async_read_op_destroy(op); - return; - } - - ecode = check_permissions(server, attr, BT_ATT_PERM_READ_MASK); - if (ecode) - goto error; - - if (gatt_db_attribute_read(attr, 0, op->opcode, server->att, - read_by_type_read_complete_cb, op)) - return; - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - bt_att_chan_send_error_rsp(op->chan, BT_ATT_OP_READ_BY_TYPE_REQ, - gatt_db_attribute_get_handle(attr), ecode); - async_read_op_destroy(op); -} - -static void read_by_type_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t start, end; - bt_uuid_t type; - uint16_t ehandle = 0; - uint8_t ecode; - struct queue *q = NULL; - struct async_read_op *op; - - if (length != 6 && length != 20) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - q = queue_new(); - - start = get_le16(pdu); - end = get_le16(pdu + 2); - get_uuid_le(pdu + 4, length - 4, &type); - - util_debug(server->debug_callback, server->debug_data, - "Read By Type - start: 0x%04x end: 0x%04x", - start, end); - - if (!start || !end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - ehandle = start; - - if (start > end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - gatt_db_read_by_type(server->db, start, end, type, q); - - if (queue_isempty(q)) { - ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND; - goto error; - } - - op = new0(struct async_read_op, 1); - op->pdu = malloc(bt_att_get_mtu(server->att)); - if (!op->pdu) { - free(op); - ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES; - goto error; - } - - op->chan = chan; - op->opcode = opcode; - op->server = bt_gatt_server_ref(server); - op->db_data = q; - - process_read_by_type(op); - - return; - -error: - bt_att_chan_send_error_rsp(chan, opcode, ehandle, ecode); - queue_destroy(q, NULL); -} - -static bool encode_find_info_rsp(struct gatt_db *db, struct queue *q, - uint16_t mtu, - uint8_t *pdu, uint16_t *len) -{ - uint16_t handle; - struct gatt_db_attribute *attr; - const bt_uuid_t *type; - int uuid_len, cur_uuid_len; - int iter = 0; - - *len = 0; - - while (queue_peek_head(q)) { - attr = queue_pop_head(q); - handle = gatt_db_attribute_get_handle(attr); - type = gatt_db_attribute_get_type(attr); - if (!handle || !type) - return false; - - cur_uuid_len = bt_uuid_len(type); - - if (iter == 0) { - switch (cur_uuid_len) { - case 2: - uuid_len = 2; - pdu[0] = 0x01; - break; - case 4: - case 16: - uuid_len = 16; - pdu[0] = 0x02; - break; - default: - return false; - } - - iter++; - } else if (cur_uuid_len != uuid_len) - break; - - if (iter + uuid_len + 2 > mtu - 1) - break; - - put_le16(handle, pdu + iter); - bt_uuid_to_le(type, pdu + iter + 2); - - iter += uuid_len + 2; - } - - *len = iter; - - return true; -} - -static void find_info_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t start, end; - uint16_t mtu = bt_att_get_mtu(server->att); - uint8_t rsp_pdu[mtu]; - uint16_t rsp_len; - uint8_t ecode = 0; - uint16_t ehandle = 0; - struct queue *q = NULL; - - if (length != 4) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - q = queue_new(); - - start = get_le16(pdu); - end = get_le16(pdu + 2); - - util_debug(server->debug_callback, server->debug_data, - "Find Info - start: 0x%04x end: 0x%04x", - start, end); - - if (!start || !end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - ehandle = start; - - if (start > end) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - gatt_db_find_information(server->db, start, end, q); - - if (queue_isempty(q)) { - ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND; - goto error; - } - - if (!encode_find_info_rsp(server->db, q, mtu, rsp_pdu, &rsp_len)) { - ecode = BT_ATT_ERROR_UNLIKELY; - goto error; - } - - bt_att_chan_send_rsp(chan, BT_ATT_OP_FIND_INFO_RSP, rsp_pdu, rsp_len); - - queue_destroy(q, NULL); - - return; - -error: - bt_att_chan_send_error_rsp(chan, opcode, ehandle, ecode); - queue_destroy(q, NULL); - -} - -struct find_by_type_val_data { - uint8_t *pdu; - uint16_t len; - uint16_t mtu; - uint8_t ecode; -}; - -static void find_by_type_val_att_cb(struct gatt_db_attribute *attrib, - void *user_data) -{ - uint16_t handle, end_handle; - struct find_by_type_val_data *data = user_data; - - if (data->ecode) - return; - - if (data->len + 4 > data->mtu - 1) - return; - - /* - * This OP is only valid for Primary Service per the spec - * page 562, so this should work. - */ - gatt_db_attribute_get_service_data(attrib, &handle, &end_handle, NULL, - NULL); - - if (!handle || !end_handle) { - data->ecode = BT_ATT_ERROR_UNLIKELY; - return; - } - - put_le16(handle, data->pdu + data->len); - put_le16(end_handle, data->pdu + data->len + 2); - - data->len += 4; -} - -static void find_by_type_val_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t start, end, uuid16; - struct find_by_type_val_data data; - uint16_t mtu = bt_att_get_mtu(server->att); - uint8_t rsp_pdu[mtu]; - uint16_t ehandle = 0; - bt_uuid_t uuid; - - if (length < 6) { - data.ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - data.pdu = rsp_pdu; - data.len = 0; - data.mtu = mtu; - data.ecode = 0; - - start = get_le16(pdu); - end = get_le16(pdu + 2); - uuid16 = get_le16(pdu + 4); - - util_debug(server->debug_callback, server->debug_data, - "Find By Type Value - start: 0x%04x end: 0x%04x uuid: 0x%04x", - start, end, uuid16); - ehandle = start; - if (start > end) { - data.ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - bt_uuid16_create(&uuid, uuid16); - gatt_db_find_by_type_value(server->db, start, end, &uuid, pdu + 6, - length - 6, - find_by_type_val_att_cb, - &data); - - if (!data.len) - data.ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND; - - if (data.ecode) - goto error; - - bt_att_chan_send_rsp(chan, BT_ATT_OP_FIND_BY_TYPE_RSP, - data.pdu, data.len); - - return; - -error: - bt_att_chan_send_error_rsp(chan, opcode, ehandle, data.ecode); -} - -static void async_write_op_destroy(struct async_write_op *op) -{ - bt_gatt_server_unref(op->server); - free(op); -} - -static void write_complete_cb(struct gatt_db_attribute *attr, int err, - void *user_data) -{ - struct async_write_op *op = user_data; - struct bt_gatt_server *server = op->server; - uint16_t handle; - - if (op->opcode == BT_ATT_OP_WRITE_CMD) { - async_write_op_destroy(op); - return; - } - - util_debug(server->debug_callback, server->debug_data, - "Write Complete: err %d", err); - - handle = gatt_db_attribute_get_handle(attr); - - if (err) - bt_att_chan_send_error_rsp(op->chan, op->opcode, handle, err); - else - bt_att_chan_send_rsp(op->chan, BT_ATT_OP_WRITE_RSP, NULL, 0); - - async_write_op_destroy(op); -} - -static uint8_t authorize_req(struct bt_gatt_server *server, - uint8_t opcode, uint16_t handle) -{ - if (!server->authorize) - return 0; - - return server->authorize(server->att, opcode, handle, - server->authorize_data); -} - -static void write_cb(struct bt_att_chan *chan, uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_server *server = user_data; - struct gatt_db_attribute *attr; - uint16_t handle = 0; - struct async_write_op *op = NULL; - uint8_t ecode; - - if (length < 2) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - ecode = authorize_req(server, opcode, handle); - if (ecode) - goto error; - - handle = get_le16(pdu); - attr = gatt_db_get_attribute(server->db, handle); - if (!attr) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - util_debug(server->debug_callback, server->debug_data, - "Write %s - handle: 0x%04x", - (opcode == BT_ATT_OP_WRITE_REQ) ? "Req" : "Cmd", - handle); - - ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE_MASK); - if (ecode) - goto error; - - op = new0(struct async_write_op, 1); - op->chan = chan; - op->server = bt_gatt_server_ref(server); - op->opcode = opcode; - - if (gatt_db_attribute_write(attr, 0, pdu + 2, length - 2, opcode, - server->att, - write_complete_cb, op)) - return; - - async_write_op_destroy(op); - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - if (opcode == BT_ATT_OP_WRITE_CMD) - return; - - bt_att_chan_send_error_rsp(chan, opcode, handle, ecode); -} - -static uint8_t get_read_rsp_opcode(uint8_t opcode) -{ - - switch (opcode) { - case BT_ATT_OP_READ_REQ: - return BT_ATT_OP_READ_RSP; - case BT_ATT_OP_READ_BLOB_REQ: - return BT_ATT_OP_READ_BLOB_RSP; - default: - /* - * Should never happen - * - * TODO: It would be nice to have a debug-mode assert macro - * for development builds. This way bugs could be easily catched - * during development and there would be self documenting code - * that wouldn't be crash release builds. - */ - return 0; - } - - return 0; -} - -static void read_complete_cb(struct gatt_db_attribute *attr, int err, - const uint8_t *value, size_t len, - void *user_data) -{ - struct async_read_op *op = user_data; - struct bt_gatt_server *server = op->server; - uint8_t rsp_opcode; - uint16_t mtu; - uint16_t handle; - - util_debug(server->debug_callback, server->debug_data, - "Read Complete: err %d", err); - - mtu = bt_att_get_mtu(server->att); - handle = gatt_db_attribute_get_handle(attr); - - if (err) { - bt_att_chan_send_error_rsp(op->chan, op->opcode, handle, err); - async_read_op_destroy(op); - return; - } - - rsp_opcode = get_read_rsp_opcode(op->opcode); - - bt_att_chan_send_rsp(op->chan, rsp_opcode, len ? value : NULL, - MIN((unsigned int) mtu - 1, len)); - async_read_op_destroy(op); -} - -static void handle_read_req(struct bt_att_chan *chan, - struct bt_gatt_server *server, uint8_t opcode, - uint16_t handle, uint16_t offset) -{ - struct gatt_db_attribute *attr; - uint8_t ecode; - struct async_read_op *op = NULL; - - ecode = authorize_req(server, opcode, handle); - if (ecode) - goto error; - - attr = gatt_db_get_attribute(server->db, handle); - if (!attr) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - util_debug(server->debug_callback, server->debug_data, - "Read %sReq - handle: 0x%04x", - opcode == BT_ATT_OP_READ_BLOB_REQ ? "Blob " : "", - handle); - - ecode = check_permissions(server, attr, BT_ATT_PERM_READ_MASK); - if (ecode) - goto error; - - op = new0(struct async_read_op, 1); - op->chan = chan; - op->opcode = opcode; - op->server = bt_gatt_server_ref(server); - - if (gatt_db_attribute_read(attr, offset, opcode, server->att, - read_complete_cb, op)) - return; - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - if (op) - async_read_op_destroy(op); - - bt_att_chan_send_error_rsp(chan, opcode, handle, ecode); -} - -static void read_cb(struct bt_att_chan *chan, uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t handle; - - if (length != 2) { - bt_att_chan_send_error_rsp(chan, opcode, 0, - BT_ATT_ERROR_INVALID_PDU); - return; - } - - handle = get_le16(pdu); - - handle_read_req(chan, server, opcode, handle, 0); -} - -static void read_blob_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t handle, offset; - - if (length != 4) { - bt_att_chan_send_error_rsp(chan, opcode, 0, - BT_ATT_ERROR_INVALID_PDU); - return; - } - - handle = get_le16(pdu); - offset = get_le16(pdu + 2); - - handle_read_req(chan, server, opcode, handle, offset); -} - -struct read_mult_data { - struct bt_att_chan *chan; - struct bt_gatt_server *server; - uint8_t opcode; - uint16_t *handles; - size_t cur_handle; - size_t num_handles; - uint8_t *rsp_data; - size_t length; - size_t mtu; -}; - -static void read_mult_data_free(struct read_mult_data *data) -{ - free(data->handles); - free(data->rsp_data); - free(data); -} - -static void read_multiple_complete_cb(struct gatt_db_attribute *attr, int err, - const uint8_t *value, size_t len, - void *user_data) -{ - struct read_mult_data *data = user_data; - struct gatt_db_attribute *next_attr; - uint16_t handle = gatt_db_attribute_get_handle(attr); - uint8_t ecode; - uint16_t length; - - if (err != 0) { - ecode = err; - goto error; - } - - length = data->opcode == BT_ATT_OP_READ_MULT_VL_REQ ? - MIN(len, MAX(data->mtu - data->length, 3) - 3) : - MIN(len, data->mtu - data->length - 1); - - if (data->opcode == BT_ATT_OP_READ_MULT_VL_REQ) { - /* The Length Value Tuple List may be truncated within the first - * two octets of a tuple due to the size limits of the current - * ATT_MTU, but the first two octets cannot be separated. - */ - if (data->mtu - data->length >= 3) { - put_le16(len, data->rsp_data + data->length); - data->length += 2; - } - } - - memcpy(data->rsp_data + data->length, value, length); - data->length += length; - - data->cur_handle++; - - if (data->cur_handle == data->num_handles) { - bt_att_chan_send_rsp(data->chan, data->opcode + 1, - data->rsp_data, data->length); - read_mult_data_free(data); - return; - } - - handle = data->handles[data->cur_handle]; - - util_debug(data->server->debug_callback, data->server->debug_data, - "%s Req - #%zu of %zu: 0x%04x", - data->opcode == BT_ATT_OP_READ_MULT_REQ ? - "Read Multiple" : - "Read Multiple Variable Length", - data->cur_handle + 1, data->num_handles, - handle); - - next_attr = gatt_db_get_attribute(data->server->db, handle); - - if (!next_attr) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - ecode = check_permissions(data->server, next_attr, - BT_ATT_PERM_READ_MASK); - if (ecode) - goto error; - - if (gatt_db_attribute_read(next_attr, 0, data->opcode, - data->server->att, - read_multiple_complete_cb, data)) - return; - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - bt_att_chan_send_error_rsp(data->chan, data->opcode, handle, ecode); - read_mult_data_free(data); -} - -static struct read_mult_data *read_mult_data_new(struct bt_gatt_server *server, - struct bt_att_chan *chan, - uint8_t opcode, - uint16_t num_handles) -{ - struct read_mult_data *data; - - data = new0(struct read_mult_data, 1); - data->chan = chan; - data->opcode = opcode; - data->handles = new0(uint16_t, num_handles); - data->rsp_data = NULL; - data->server = server; - data->num_handles = num_handles; - data->cur_handle = 0; - data->mtu = bt_att_get_mtu(server->att); - data->length = 0; - data->rsp_data = new0(uint8_t, data->mtu - 1); - - return data; -} - -static void read_multiple_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - struct gatt_db_attribute *attr; - struct read_mult_data *data = NULL; - uint8_t ecode; - size_t i = 0; - uint16_t handle = 0; - - if (length < 4) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - data = read_mult_data_new(server, chan, opcode, length / 2); - if (!data) - goto error; - - for (i = 0; i < data->num_handles; i++) - data->handles[i] = get_le16(pdu + i * 2); - - handle = data->handles[0]; - - util_debug(server->debug_callback, server->debug_data, - "%s Req - %zu handles, 1st: 0x%04x", - data->opcode == BT_ATT_OP_READ_MULT_REQ ? - "Read Multiple" : "Read Multiple Variable Length", - data->num_handles, handle); - - attr = gatt_db_get_attribute(server->db, handle); - - if (!attr) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - ecode = check_permissions(data->server, attr, BT_ATT_PERM_READ_MASK); - if (ecode) - goto error; - - if (gatt_db_attribute_read(attr, 0, opcode, server->att, - read_multiple_complete_cb, data)) - return; - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - if (data) - read_mult_data_free(data); - - bt_att_chan_send_error_rsp(chan, opcode, handle, ecode); -} - -static bool append_prep_data(struct prep_write_data *prep_data, uint16_t handle, - uint16_t length, uint8_t *value) -{ - uint8_t *val; - uint16_t len; - - if (!length) - return true; - - len = prep_data->length + length; - - val = realloc(prep_data->value, len); - if (!val) - return false; - - memcpy(val + prep_data->length, value, length); - - prep_data->value = val; - prep_data->length = len; - - return true; -} - -static bool is_reliable_write_supported(const struct bt_gatt_server *server, - uint16_t handle) -{ - struct gatt_db_attribute *attr; - uint16_t ext_prop; - - attr = gatt_db_get_attribute(server->db, handle); - if (!attr) - return false; - - if (!gatt_db_attribute_get_char_data(attr, NULL, NULL, NULL, &ext_prop, - NULL)) - return false; - - return (ext_prop & BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE); -} - -static bool prep_data_new(struct bt_gatt_server *server, - uint16_t handle, uint16_t offset, - uint16_t length, uint8_t *value) -{ - struct prep_write_data *prep_data; - - prep_data = new0(struct prep_write_data, 1); - - if (!append_prep_data(prep_data, handle, length, value)) { - prep_write_data_destroy(prep_data); - return false; - } - - prep_data->server = server; - prep_data->handle = handle; - prep_data->offset = offset; - - /* - * Handle is the value handle. We need characteristic declaration - * handle which in BlueZ is handle_value -1 - */ - prep_data->reliable_supported = is_reliable_write_supported(server, - handle - 1); - - queue_push_tail(server->prep_queue, prep_data); - - return true; -} - -static bool store_prep_data(struct bt_gatt_server *server, - uint16_t handle, uint16_t offset, - uint16_t length, uint8_t *value) -{ - struct prep_write_data *prep_data = NULL; - - /* - * Now lets check if prep write is a continuation of long write - * If so do aggregation of data - */ - prep_data = queue_peek_tail(server->prep_queue); - if (prep_data && (prep_data->handle == handle) && - (offset == (prep_data->length + prep_data->offset))) - return append_prep_data(prep_data, handle, length, value); - - return prep_data_new(server, handle, offset, length, value); -} - -struct prep_write_complete_data { - struct bt_att_chan *chan; - void *pdu; - uint16_t length; - struct bt_gatt_server *server; -}; - -static void prep_write_complete_cb(struct gatt_db_attribute *attr, int err, - void *user_data) -{ - struct prep_write_complete_data *pwcd = user_data; - uint16_t handle = 0; - uint16_t offset; - - handle = get_le16(pwcd->pdu); - - if (err) { - bt_att_chan_send_error_rsp(pwcd->chan, BT_ATT_OP_PREP_WRITE_REQ, - handle, err); - free(pwcd->pdu); - free(pwcd); - - return; - } - - offset = get_le16(pwcd->pdu + 2); - - if (!store_prep_data(pwcd->server, handle, offset, pwcd->length - 4, - &((uint8_t *) pwcd->pdu)[4])) - bt_att_chan_send_error_rsp(pwcd->chan, BT_ATT_OP_PREP_WRITE_RSP, - handle, - BT_ATT_ERROR_INSUFFICIENT_RESOURCES); - - bt_att_chan_send_rsp(pwcd->chan, BT_ATT_OP_PREP_WRITE_RSP, pwcd->pdu, - pwcd->length); - - free(pwcd->pdu); - free(pwcd); -} - -static void prep_write_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t handle = 0; - uint16_t offset; - struct gatt_db_attribute *attr; - struct prep_write_complete_data *pwcd; - uint8_t ecode, status; - - if (length < 4) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - if (queue_length(server->prep_queue) >= server->max_prep_queue_len) { - ecode = BT_ATT_ERROR_PREPARE_QUEUE_FULL; - goto error; - } - - handle = get_le16(pdu); - offset = get_le16(pdu + 2); - - attr = gatt_db_get_attribute(server->db, handle); - if (!attr) { - ecode = BT_ATT_ERROR_INVALID_HANDLE; - goto error; - } - - util_debug(server->debug_callback, server->debug_data, - "Prep Write Req - handle: 0x%04x", handle); - - ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE_MASK); - if (ecode) - goto error; - - pwcd = new0(struct prep_write_complete_data, 1); - pwcd->chan = chan; - pwcd->pdu = malloc(length); - memcpy(pwcd->pdu, pdu, length); - pwcd->length = length; - pwcd->server = server; - - status = gatt_db_attribute_write(attr, offset, NULL, 0, - BT_ATT_OP_PREP_WRITE_REQ, - server->att, - prep_write_complete_cb, pwcd); - - if (status) - return; - - ecode = BT_ATT_ERROR_UNLIKELY; - -error: - bt_att_chan_send_error_rsp(chan, opcode, handle, ecode); -} - -struct exec_data { - struct bt_att_chan *chan; - struct bt_gatt_server *server; -}; - -static void exec_next_prep_write(struct exec_data *data, uint16_t ehandle, - int err); - -static void exec_write_complete_cb(struct gatt_db_attribute *attr, int err, - void *user_data) -{ - struct exec_data *data = user_data; - uint16_t handle = gatt_db_attribute_get_handle(attr); - - exec_next_prep_write(data, handle, err); -} - -static void exec_next_prep_write(struct exec_data *data, uint16_t ehandle, - int err) -{ - struct prep_write_data *next = NULL; - struct gatt_db_attribute *attr; - bool status; - - if (err) - goto error; - - next = queue_pop_head(data->server->prep_queue); - if (!next) { - bt_att_chan_send_rsp(data->chan, BT_ATT_OP_EXEC_WRITE_RSP, - NULL, 0); - free(data); - return; - } - - attr = gatt_db_get_attribute(data->server->db, next->handle); - if (!attr) { - err = BT_ATT_ERROR_UNLIKELY; - goto error; - } - - status = gatt_db_attribute_write(attr, next->offset, - next->value, next->length, - BT_ATT_OP_EXEC_WRITE_REQ, - data->server->att, - exec_write_complete_cb, data); - - prep_write_data_destroy(next); - - if (status) - return; - - err = BT_ATT_ERROR_UNLIKELY; - -error: - queue_remove_all(data->server->prep_queue, NULL, NULL, - prep_write_data_destroy); - - bt_att_chan_send_error_rsp(data->chan, BT_ATT_OP_EXEC_WRITE_REQ, - ehandle, err); - free(data); -} - -static bool find_no_reliable_characteristic(const void *data, - const void *match_data) -{ - const struct prep_write_data *prep_data = data; - - return !prep_data->reliable_supported; -} - -static void exec_write_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - struct exec_data *data; - uint8_t flags; - uint8_t ecode; - bool write; - uint16_t ehandle = 0; - - if (length != 1) { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - flags = ((uint8_t *) pdu)[0]; - - util_debug(server->debug_callback, server->debug_data, - "Exec Write Req - flags: 0x%02x", flags); - - if (flags == 0x00) - write = false; - else if (flags == 0x01) - write = true; - else { - ecode = BT_ATT_ERROR_INVALID_PDU; - goto error; - } - - if (!write) { - queue_remove_all(server->prep_queue, NULL, NULL, - prep_write_data_destroy); - bt_att_chan_send_rsp(chan, BT_ATT_OP_EXEC_WRITE_RSP, NULL, 0); - return; - } - - /* If there is more than one prep request, we are in reliable session */ - if (queue_length(server->prep_queue) > 1) { - struct prep_write_data *prep_data; - - prep_data = queue_find(server->prep_queue, - find_no_reliable_characteristic, NULL); - if (prep_data) { - ecode = BT_ATT_ERROR_REQUEST_NOT_SUPPORTED; - ehandle = prep_data->handle; - goto error; - } - } - - data = new0(struct exec_data, 1); - data->chan = chan; - data->server = server; - - exec_next_prep_write(data, 0, 0); - - return; - -error: - queue_remove_all(server->prep_queue, NULL, NULL, - prep_write_data_destroy); - bt_att_chan_send_error_rsp(chan, opcode, ehandle, ecode); -} - -static void exchange_mtu_cb(struct bt_att_chan *chan, uint8_t opcode, - const void *pdu, uint16_t length, - void *user_data) -{ - struct bt_gatt_server *server = user_data; - uint16_t client_rx_mtu; - uint16_t final_mtu; - uint8_t rsp_pdu[2]; - - if (length != 2) { - bt_att_chan_send_error_rsp(chan, opcode, 0, - BT_ATT_ERROR_INVALID_PDU); - return; - } - - client_rx_mtu = get_le16(pdu); - final_mtu = MAX(MIN(client_rx_mtu, server->mtu), BT_ATT_DEFAULT_LE_MTU); - - /* Respond with the server MTU */ - put_le16(server->mtu, rsp_pdu); - bt_att_chan_send_rsp(chan, BT_ATT_OP_MTU_RSP, rsp_pdu, 2); - - /* Set MTU to be the minimum */ - server->mtu = final_mtu; - bt_att_set_mtu(server->att, final_mtu); - - util_debug(server->debug_callback, server->debug_data, - "MTU exchange complete, with MTU: %u", final_mtu); -} - -static bool gatt_server_register_att_handlers(struct bt_gatt_server *server) -{ - /* Exchange MTU */ - server->mtu_id = bt_att_register(server->att, BT_ATT_OP_MTU_REQ, - exchange_mtu_cb, - server, NULL); - if (!server->mtu_id) - return false; - - /* Read By Group Type */ - server->read_by_grp_type_id = bt_att_register(server->att, - BT_ATT_OP_READ_BY_GRP_TYPE_REQ, - read_by_grp_type_cb, - server, NULL); - if (!server->read_by_grp_type_id) - return false; - - /* Read By Type */ - server->read_by_type_id = bt_att_register(server->att, - BT_ATT_OP_READ_BY_TYPE_REQ, - read_by_type_cb, - server, NULL); - if (!server->read_by_type_id) - return false; - - /* Find Information */ - server->find_info_id = bt_att_register(server->att, - BT_ATT_OP_FIND_INFO_REQ, - find_info_cb, - server, NULL); - if (!server->find_info_id) - return false; - - /* Find By Type Value */ - server->find_by_type_value_id = bt_att_register(server->att, - BT_ATT_OP_FIND_BY_TYPE_REQ, - find_by_type_val_cb, - server, NULL); - - if (!server->find_by_type_value_id) - return false; - - /* Write Request */ - server->write_id = bt_att_register(server->att, BT_ATT_OP_WRITE_REQ, - write_cb, - server, NULL); - if (!server->write_id) - return false; - - /* Write Command */ - server->write_cmd_id = bt_att_register(server->att, BT_ATT_OP_WRITE_CMD, - write_cb, - server, NULL); - if (!server->write_cmd_id) - return false; - - /* Read Request */ - server->read_id = bt_att_register(server->att, BT_ATT_OP_READ_REQ, - read_cb, - server, NULL); - if (!server->read_id) - return false; - - /* Read Blob Request */ - server->read_blob_id = bt_att_register(server->att, - BT_ATT_OP_READ_BLOB_REQ, - read_blob_cb, - server, NULL); - if (!server->read_blob_id) - return false; - - /* Read Multiple Request */ - server->read_multiple_id = bt_att_register(server->att, - BT_ATT_OP_READ_MULT_REQ, - read_multiple_cb, - server, NULL); - - if (!server->read_multiple_id) - return false; - - /* Read Multiple Variable Length Request */ - server->read_multiple_vl_id = bt_att_register(server->att, - BT_ATT_OP_READ_MULT_VL_REQ, - read_multiple_cb, - server, NULL); - - if (!server->read_multiple_vl_id) - return false; - - /* Prepare Write Request */ - server->prep_write_id = bt_att_register(server->att, - BT_ATT_OP_PREP_WRITE_REQ, - prep_write_cb, server, NULL); - if (!server->prep_write_id) - return false; - - /* Execute Write Request */ - server->exec_write_id = bt_att_register(server->att, - BT_ATT_OP_EXEC_WRITE_REQ, - exec_write_cb, server, NULL); - if (!server->exec_write_id) - return NULL; - - return true; -} - -struct bt_gatt_server *bt_gatt_server_new(struct gatt_db *db, - struct bt_att *att, uint16_t mtu, - uint8_t min_enc_size) -{ - struct bt_gatt_server *server; - - if (!att || !db) - return NULL; - - server = new0(struct bt_gatt_server, 1); - server->db = gatt_db_ref(db); - server->att = bt_att_ref(att); - server->mtu = MAX(mtu, BT_ATT_DEFAULT_LE_MTU); - server->max_prep_queue_len = DEFAULT_MAX_PREP_QUEUE_LEN; - server->prep_queue = queue_new(); - server->min_enc_size = min_enc_size; - - if (!gatt_server_register_att_handlers(server)) { - bt_gatt_server_free(server); - return NULL; - } - - return bt_gatt_server_ref(server); -} - -uint16_t bt_gatt_server_get_mtu(struct bt_gatt_server *server) -{ - if (!server || !server->att) - return 0; - - return bt_att_get_mtu(server->att); -} - -struct bt_att *bt_gatt_server_get_att(struct bt_gatt_server *server) -{ - if (!server) - return NULL; - - return server->att; -} - -struct bt_gatt_server *bt_gatt_server_ref(struct bt_gatt_server *server) -{ - if (!server) - return NULL; - - __sync_fetch_and_add(&server->ref_count, 1); - - return server; -} - -void bt_gatt_server_unref(struct bt_gatt_server *server) -{ - if (!server) - return; - - if (__sync_sub_and_fetch(&server->ref_count, 1)) - return; - - bt_gatt_server_free(server); -} - -bool bt_gatt_server_set_debug(struct bt_gatt_server *server, - bt_gatt_server_debug_func_t callback, - void *user_data, - bt_gatt_server_destroy_func_t destroy) -{ - if (!server) - return false; - - if (server->debug_destroy) - server->debug_destroy(server->debug_data); - - server->debug_callback = callback; - server->debug_destroy = destroy; - server->debug_data = user_data; - - return true; -} - -static bool notify_multiple(void *user_data) -{ - struct bt_gatt_server *server = user_data; - - bt_att_send(server->att, BT_ATT_OP_HANDLE_NFY_MULT, - server->nfy_mult->pdu, server->nfy_mult->offset, NULL, - NULL, NULL); - - free(server->nfy_mult->pdu); - free(server->nfy_mult); - server->nfy_mult = NULL; - - return false; -} - -bool bt_gatt_server_send_notification(struct bt_gatt_server *server, - uint16_t handle, const uint8_t *value, - uint16_t length, bool multiple, - void *user_data, bt_gatt_server_destroy_func_t destroy) -{ - struct nfy_mult_data *data = NULL; - bool result; - - if (!server || (length && !value)) - return false; - - if (multiple) - data = server->nfy_mult; - - if (!data) { - data = new0(struct nfy_mult_data, 1); - data->len = bt_att_get_mtu(server->att) - 1; - data->pdu = malloc(data->len); - } - - put_le16(handle, data->pdu + data->offset); - data->offset += 2; - - length = MIN(data->len - data->offset, length); - - if (multiple) { - put_le16(length, data->pdu + data->offset); - data->offset += 2; - } - - memcpy(data->pdu + data->offset, value, length); - data->offset += length; - - if (multiple) { - if (!server->nfy_mult) - server->nfy_mult = data; - - if (!server->nfy_mult->id) - server->nfy_mult->id = timeout_add(NFY_MULT_TIMEOUT, - notify_multiple, server, - NULL); - - return true; - } - - result = !!bt_att_send(server->att, BT_ATT_OP_HANDLE_NFY, - data->pdu, data->offset, NULL, user_data, destroy); - free(data->pdu); - free(data); - - return result; -} - -struct ind_data { - bt_gatt_server_conf_func_t callback; - bt_gatt_server_destroy_func_t destroy; - void *user_data; -}; - -static void destroy_ind_data(void *user_data) -{ - struct ind_data *data = user_data; - - if (data->destroy) - data->destroy(data->user_data); - - free(data); -} - -static void conf_cb(uint8_t opcode, const void *pdu, - uint16_t length, void *user_data) -{ - struct ind_data *data = user_data; - - if (data->callback) - data->callback(data->user_data); -} - -bool bt_gatt_server_send_indication(struct bt_gatt_server *server, - uint16_t handle, const uint8_t *value, - uint16_t length, - bt_gatt_server_conf_func_t callback, - void *user_data, - bt_gatt_server_destroy_func_t destroy) -{ - uint16_t pdu_len; - uint8_t *pdu; - struct ind_data *data; - bool result; - - if (!server || (length && !value)) - return false; - - pdu_len = MIN(bt_att_get_mtu(server->att) - 1, length + 2); - pdu = malloc(pdu_len); - if (!pdu) - return false; - - data = new0(struct ind_data, 1); - - data->callback = callback; - data->destroy = destroy; - data->user_data = user_data; - - put_le16(handle, pdu); - memcpy(pdu + 2, value, pdu_len - 2); - - result = !!bt_att_send(server->att, BT_ATT_OP_HANDLE_IND, pdu, - pdu_len, conf_cb, - data, destroy_ind_data); - if (!result) - destroy_ind_data(data); - - free(pdu); - - return result; -} - -bool bt_gatt_server_set_authorize(struct bt_gatt_server *server, - bt_gatt_server_authorize_cb_t cb, - void *user_data) -{ - if (!server) - return false; - - server->authorize = cb; - server->authorize_data = user_data; - - return true; -} diff --git a/alfred/src/ble/gatt-server.h b/alfred/src/ble/gatt-server.h deleted file mode 100644 index 3ed5318bc..000000000 --- a/alfred/src/ble/gatt-server.h +++ /dev/null @@ -1,50 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Google Inc. - * - * - */ - -#include - -struct bt_gatt_server; - -struct bt_gatt_server *bt_gatt_server_new(struct gatt_db *db, - struct bt_att *att, uint16_t mtu, - uint8_t min_enc_size); -uint16_t bt_gatt_server_get_mtu(struct bt_gatt_server *server); -struct bt_att *bt_gatt_server_get_att(struct bt_gatt_server *server); - -struct bt_gatt_server *bt_gatt_server_ref(struct bt_gatt_server *server); -void bt_gatt_server_unref(struct bt_gatt_server *server); - -typedef void (*bt_gatt_server_destroy_func_t)(void *user_data); -typedef void (*bt_gatt_server_debug_func_t)(const char *str, void *user_data); -typedef void (*bt_gatt_server_conf_func_t)(void *user_data); - -bool bt_gatt_server_set_debug(struct bt_gatt_server *server, - bt_gatt_server_debug_func_t callback, - void *user_data, - bt_gatt_server_destroy_func_t destroy); - -typedef uint8_t (*bt_gatt_server_authorize_cb_t)(struct bt_att *att, - uint8_t opcode, uint16_t handle, - void *user_data); -bool bt_gatt_server_set_authorize(struct bt_gatt_server *server, - bt_gatt_server_authorize_cb_t cb, - void *user_data); - -bool bt_gatt_server_send_notification(struct bt_gatt_server *server, - uint16_t handle, const uint8_t *value, - uint16_t length, bool multiple, - void *user_data, bt_gatt_server_destroy_func_t destroy); - -bool bt_gatt_server_send_indication(struct bt_gatt_server *server, - uint16_t handle, const uint8_t *value, - uint16_t length, - bt_gatt_server_conf_func_t callback, - void *user_data, - bt_gatt_server_destroy_func_t destroy); diff --git a/alfred/src/ble/io-mainloop.c b/alfred/src/ble/io-mainloop.c deleted file mode 100644 index c91541137..000000000 --- a/alfred/src/ble/io-mainloop.c +++ /dev/null @@ -1,311 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "ble/mainloop.h" -#include "ble/util.h" -#include "ble/io.h" - -struct io { - int ref_count; - int fd; - uint32_t events; - bool close_on_destroy; - io_callback_func_t read_callback; - io_destroy_func_t read_destroy; - void *read_data; - io_callback_func_t write_callback; - io_destroy_func_t write_destroy; - void *write_data; - io_callback_func_t disconnect_callback; - io_destroy_func_t disconnect_destroy; - void *disconnect_data; -}; - -static struct io *io_ref(struct io *io) -{ - if (!io) - return NULL; - - __sync_fetch_and_add(&io->ref_count, 1); - - return io; -} - -static void io_unref(struct io *io) -{ - if (!io) - return; - - if (__sync_sub_and_fetch(&io->ref_count, 1)) - return; - - free(io); -} - -static void io_cleanup(void *user_data) -{ - struct io *io = user_data; - - if (io->write_destroy) - io->write_destroy(io->write_data); - - if (io->read_destroy) - io->read_destroy(io->read_data); - - if (io->disconnect_destroy) - io->disconnect_destroy(io->disconnect_data); - - if (io->close_on_destroy) - close(io->fd); - - io->fd = -1; -} - -static void io_callback(int fd, uint32_t events, void *user_data) -{ - struct io *io = user_data; - - io_ref(io); - - if ((events & (EPOLLRDHUP | EPOLLHUP | EPOLLERR))) { - io->read_callback = NULL; - io->write_callback = NULL; - - if (!io->disconnect_callback) { - mainloop_remove_fd(io->fd); - io_unref(io); - return; - } - - if (!io->disconnect_callback(io, io->disconnect_data)) { - if (io->disconnect_destroy) - io->disconnect_destroy(io->disconnect_data); - - io->disconnect_callback = NULL; - io->disconnect_destroy = NULL; - io->disconnect_data = NULL; - - io->events &= ~EPOLLRDHUP; - - mainloop_modify_fd(io->fd, io->events); - } - } - - if ((events & EPOLLIN) && io->read_callback) { - if (!io->read_callback(io, io->read_data)) { - if (io->read_destroy) - io->read_destroy(io->read_data); - - io->read_callback = NULL; - io->read_destroy = NULL; - io->read_data = NULL; - - io->events &= ~EPOLLIN; - - mainloop_modify_fd(io->fd, io->events); - } - } - - if ((events & EPOLLOUT) && io->write_callback) { - if (!io->write_callback(io, io->write_data)) { - if (io->write_destroy) - io->write_destroy(io->write_data); - - io->write_callback = NULL; - io->write_destroy = NULL; - io->write_data = NULL; - - io->events &= ~EPOLLOUT; - - mainloop_modify_fd(io->fd, io->events); - } - } - - io_unref(io); -} - -struct io *io_new(int fd) -{ - struct io *io; - - if (fd < 0) - return NULL; - - io = new0(struct io, 1); - io->fd = fd; - io->events = 0; - io->close_on_destroy = false; - - if (mainloop_add_fd(io->fd, io->events, io_callback, - io, io_cleanup) < 0) { - free(io); - return NULL; - } - - return io_ref(io); -} - -void io_destroy(struct io *io) -{ - if (!io) - return; - - io->read_callback = NULL; - io->write_callback = NULL; - io->disconnect_callback = NULL; - - mainloop_remove_fd(io->fd); - - io_unref(io); -} - -int io_get_fd(struct io *io) -{ - if (!io) - return -ENOTCONN; - - return io->fd; -} - -bool io_set_close_on_destroy(struct io *io, bool do_close) -{ - if (!io) - return false; - - io->close_on_destroy = do_close; - - return true; -} - -bool io_set_read_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy) -{ - uint32_t events; - - if (!io || io->fd < 0) - return false; - - if (io->read_destroy) - io->read_destroy(io->read_data); - - if (callback) - events = io->events | EPOLLIN; - else - events = io->events & ~EPOLLIN; - - io->read_callback = callback; - io->read_destroy = destroy; - io->read_data = user_data; - - if (events == io->events) - return true; - - if (mainloop_modify_fd(io->fd, events) < 0) - return false; - - io->events = events; - - return true; -} - -bool io_set_write_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy) -{ - uint32_t events; - - if (!io || io->fd < 0) - return false; - - if (io->write_destroy) - io->write_destroy(io->write_data); - - if (callback) - events = io->events | EPOLLOUT; - else - events = io->events & ~EPOLLOUT; - - io->write_callback = callback; - io->write_destroy = destroy; - io->write_data = user_data; - - if (events == io->events) - return true; - - if (mainloop_modify_fd(io->fd, events) < 0) - return false; - - io->events = events; - - return true; -} - -bool io_set_disconnect_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy) -{ - uint32_t events; - - if (!io || io->fd < 0) - return false; - - if (io->disconnect_destroy) - io->disconnect_destroy(io->disconnect_data); - - if (callback) - events = io->events | EPOLLRDHUP; - else - events = io->events & ~EPOLLRDHUP; - - io->disconnect_callback = callback; - io->disconnect_destroy = destroy; - io->disconnect_data = user_data; - - if (events == io->events) - return true; - - if (mainloop_modify_fd(io->fd, events) < 0) - return false; - - io->events = events; - - return true; -} - -ssize_t io_send(struct io *io, const struct iovec *iov, int iovcnt) -{ - ssize_t ret; - - if (!io || io->fd < 0) - return -ENOTCONN; - - do { - ret = writev(io->fd, iov, iovcnt); - } while (ret < 0 && errno == EINTR); - - if (ret < 0) - return -errno; - - return ret; -} - -bool io_shutdown(struct io *io) -{ - if (!io || io->fd < 0) - return false; - - return shutdown(io->fd, SHUT_RDWR) == 0; -} diff --git a/alfred/src/ble/io.h b/alfred/src/ble/io.h deleted file mode 100644 index bad899ff7..000000000 --- a/alfred/src/ble/io.h +++ /dev/null @@ -1,34 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#include -#include - -typedef void (*io_destroy_func_t)(void *data); - -struct io; - -struct io *io_new(int fd); -void io_destroy(struct io *io); - -int io_get_fd(struct io *io); -bool io_set_close_on_destroy(struct io *io, bool do_close); - -ssize_t io_send(struct io *io, const struct iovec *iov, int iovcnt); -bool io_shutdown(struct io *io); - -typedef bool (*io_callback_func_t)(struct io *io, void *user_data); - -bool io_set_read_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy); -bool io_set_write_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy); -bool io_set_disconnect_handler(struct io *io, io_callback_func_t callback, - void *user_data, io_destroy_func_t destroy); diff --git a/alfred/src/ble/mainloop-notify.c b/alfred/src/ble/mainloop-notify.c deleted file mode 100644 index 33be3cf8d..000000000 --- a/alfred/src/ble/mainloop-notify.c +++ /dev/null @@ -1,194 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2018 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "mainloop.h" -#include "mainloop-notify.h" -#include "timeout.h" -#include "util.h" -#include "io.h" - -#define WATCHDOG_TRIGGER_FREQ 2 - -static int notify_fd = -1; - -static unsigned int watchdog; - -struct signal_data { - struct io *io; - mainloop_signal_func func; - void *user_data; -}; - -static struct signal_data *signal_data; - -static bool watchdog_callback(void *user_data) -{ - mainloop_sd_notify("WATCHDOG=1"); - - return true; -} - -void mainloop_notify_init(void) -{ - const char *sock; - struct sockaddr_un addr; - const char *watchdog_usec; - int msec; - - sock = getenv("NOTIFY_SOCKET"); - if (!sock) - return; - - /* check for abstract socket or absolute path */ - if (sock[0] != '@' && sock[0] != '/') - return; - - notify_fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); - if (notify_fd < 0) - return; - - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, sock, sizeof(addr.sun_path) - 1); - - if (addr.sun_path[0] == '@') - addr.sun_path[0] = '\0'; - - if (connect(notify_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - close(notify_fd); - notify_fd = -1; - return; - } - - watchdog_usec = getenv("WATCHDOG_USEC"); - if (!watchdog_usec) - return; - - msec = atoi(watchdog_usec) / 1000; - if (msec < 0) - return; - - watchdog = timeout_add(msec / WATCHDOG_TRIGGER_FREQ, - watchdog_callback, NULL, NULL); -} - -void mainloop_notify_exit(void) -{ - if (notify_fd > 0) { - close(notify_fd); - notify_fd = -1; - } - - timeout_remove(watchdog); -} - -int mainloop_sd_notify(const char *state) -{ - int err; - - if (notify_fd <= 0) - return -ENOTCONN; - - err = send(notify_fd, state, strlen(state), MSG_NOSIGNAL); - if (err < 0) - return -errno; - - return err; -} - -static bool signal_read(struct io *io, void *user_data) -{ - struct signal_data *data = user_data; - struct signalfd_siginfo si; - ssize_t result; - int fd; - - fd = io_get_fd(io); - - result = read(fd, &si, sizeof(si)); - if (result != sizeof(si)) - return false; - - if (data && data->func) - data->func(si.ssi_signo, data->user_data); - - return true; -} - -static struct io *setup_signalfd(void *user_data) -{ - struct io *io; - sigset_t mask; - int fd; - - sigemptyset(&mask); - sigaddset(&mask, SIGINT); - sigaddset(&mask, SIGTERM); - sigaddset(&mask, SIGUSR2); - sigaddset(&mask, SIGCHLD); - - if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) - return NULL; - - fd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC); - if (fd < 0) - return NULL; - - io = io_new(fd); - - io_set_close_on_destroy(io, true); - io_set_read_handler(io, signal_read, user_data, free); - - return io; -} - -int mainloop_run_with_signal(mainloop_signal_func func, void *user_data) -{ - struct signal_data *data; - struct io *io; - int ret; - - if (!func) - return -EINVAL; - - data = new0(struct signal_data, 1); - data->func = func; - data->user_data = user_data; - - io = setup_signalfd(data); - if (!io) { - free(data); - return -errno; - } - - ret = mainloop_run(); - - io_destroy(io); - free(signal_data); - - return ret; -} diff --git a/alfred/src/ble/mainloop-notify.h b/alfred/src/ble/mainloop-notify.h deleted file mode 100644 index c2cf34c44..000000000 --- a/alfred/src/ble/mainloop-notify.h +++ /dev/null @@ -1,12 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2018 Intel Corporation. All rights reserved. - * - * - */ - -void mainloop_notify_init(void); -void mainloop_notify_exit(void); diff --git a/alfred/src/ble/mainloop.c b/alfred/src/ble/mainloop.c deleted file mode 100644 index b71707cae..000000000 --- a/alfred/src/ble/mainloop.c +++ /dev/null @@ -1,321 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2011-2014 Intel Corporation - * Copyright (C) 2002-2010 Marcel Holtmann - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mainloop.h" -#include "mainloop-notify.h" - -#define MAX_EPOLL_EVENTS 10 - -static int epoll_fd; -static int epoll_terminate; -static int exit_status = EXIT_SUCCESS; - -struct mainloop_data { - int fd; - uint32_t events; - mainloop_event_func callback; - mainloop_destroy_func destroy; - void *user_data; -}; - -#define MAX_MAINLOOP_ENTRIES 128 - -static struct mainloop_data *mainloop_list[MAX_MAINLOOP_ENTRIES]; - -struct timeout_data { - int fd; - mainloop_timeout_func callback; - mainloop_destroy_func destroy; - void *user_data; -}; - -void mainloop_init(void) -{ - unsigned int i; - - epoll_fd = epoll_create1(EPOLL_CLOEXEC); - - for (i = 0; i < MAX_MAINLOOP_ENTRIES; i++) - mainloop_list[i] = NULL; - - epoll_terminate = 0; - - mainloop_notify_init(); -} - -void mainloop_quit(void) -{ - epoll_terminate = 1; - - mainloop_sd_notify("STOPPING=1"); -} - -void mainloop_exit_success(void) -{ - exit_status = EXIT_SUCCESS; - epoll_terminate = 1; -} - -void mainloop_exit_failure(void) -{ - exit_status = EXIT_FAILURE; - epoll_terminate = 1; -} - -int mainloop_run(void) -{ - unsigned int i; - - while (!epoll_terminate) { - struct epoll_event events[MAX_EPOLL_EVENTS]; - int n, nfds; - - nfds = epoll_wait(epoll_fd, events, MAX_EPOLL_EVENTS, -1); - if (nfds < 0) - continue; - - for (n = 0; n < nfds; n++) { - struct mainloop_data *data = events[n].data.ptr; - - data->callback(data->fd, events[n].events, - data->user_data); - } - } - - for (i = 0; i < MAX_MAINLOOP_ENTRIES; i++) { - struct mainloop_data *data = mainloop_list[i]; - - mainloop_list[i] = NULL; - - if (data) { - epoll_ctl(epoll_fd, EPOLL_CTL_DEL, data->fd, NULL); - - if (data->destroy) - data->destroy(data->user_data); - - free(data); - } - } - - close(epoll_fd); - epoll_fd = 0; - - mainloop_notify_exit(); - - return exit_status; -} - -int mainloop_add_fd(int fd, uint32_t events, mainloop_event_func callback, - void *user_data, mainloop_destroy_func destroy) -{ - struct mainloop_data *data; - struct epoll_event ev; - int err; - - if (fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1 || !callback) - return -EINVAL; - - data = malloc(sizeof(*data)); - if (!data) - return -ENOMEM; - - memset(data, 0, sizeof(*data)); - data->fd = fd; - data->events = events; - data->callback = callback; - data->destroy = destroy; - data->user_data = user_data; - - memset(&ev, 0, sizeof(ev)); - ev.events = events; - ev.data.ptr = data; - - err = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, data->fd, &ev); - if (err < 0) { - free(data); - return err; - } - - mainloop_list[fd] = data; - - return 0; -} - -int mainloop_modify_fd(int fd, uint32_t events) -{ - struct mainloop_data *data; - struct epoll_event ev; - int err; - - if (fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1) - return -EINVAL; - - data = mainloop_list[fd]; - if (!data) - return -ENXIO; - - memset(&ev, 0, sizeof(ev)); - ev.events = events; - ev.data.ptr = data; - - err = epoll_ctl(epoll_fd, EPOLL_CTL_MOD, data->fd, &ev); - if (err < 0) - return err; - - data->events = events; - - return 0; -} - -int mainloop_remove_fd(int fd) -{ - struct mainloop_data *data; - int err; - - if (fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1) - return -EINVAL; - - data = mainloop_list[fd]; - if (!data) - return -ENXIO; - - mainloop_list[fd] = NULL; - - err = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, data->fd, NULL); - - if (data->destroy) - data->destroy(data->user_data); - - free(data); - - return err; -} - -static void timeout_destroy(void *user_data) -{ - struct timeout_data *data = user_data; - - close(data->fd); - data->fd = -1; - - if (data->destroy) - data->destroy(data->user_data); - - free(data); -} - -static void timeout_callback(int fd, uint32_t events, void *user_data) -{ - struct timeout_data *data = user_data; - uint64_t expired; - ssize_t result; - - if (events & (EPOLLERR | EPOLLHUP)) - return; - - result = read(data->fd, &expired, sizeof(expired)); - if (result != sizeof(expired)) - return; - - if (data->callback) - data->callback(data->fd, data->user_data); -} - -static inline int timeout_set(int fd, unsigned int msec) -{ - struct itimerspec itimer; - unsigned int sec = msec / 1000; - - memset(&itimer, 0, sizeof(itimer)); - itimer.it_interval.tv_sec = 0; - itimer.it_interval.tv_nsec = 0; - itimer.it_value.tv_sec = sec; - itimer.it_value.tv_nsec = (msec - (sec * 1000)) * 1000 * 1000; - - return timerfd_settime(fd, 0, &itimer, NULL); -} - -int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback, - void *user_data, mainloop_destroy_func destroy) -{ - struct timeout_data *data; - - if (!callback) - return -EINVAL; - - data = malloc(sizeof(*data)); - if (!data) - return -ENOMEM; - - memset(data, 0, sizeof(*data)); - data->callback = callback; - data->destroy = destroy; - data->user_data = user_data; - - data->fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC); - if (data->fd < 0) { - free(data); - return -EIO; - } - - if (msec > 0) { - if (timeout_set(data->fd, msec) < 0) { - close(data->fd); - free(data); - return -EIO; - } - } - - if (mainloop_add_fd(data->fd, EPOLLIN | EPOLLONESHOT, - timeout_callback, data, timeout_destroy) < 0) { - close(data->fd); - free(data); - return -EIO; - } - - return data->fd; -} - -int mainloop_modify_timeout(int id, unsigned int msec) -{ - if (msec > 0) { - if (timeout_set(id, msec) < 0) - return -EIO; - } - - if (mainloop_modify_fd(id, EPOLLIN | EPOLLONESHOT) < 0) - return -EIO; - - return 0; -} - -int mainloop_remove_timeout(int id) -{ - return mainloop_remove_fd(id); -} diff --git a/alfred/src/ble/mainloop.h b/alfred/src/ble/mainloop.h deleted file mode 100644 index fb02dd341..000000000 --- a/alfred/src/ble/mainloop.h +++ /dev/null @@ -1,40 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2011-2014 Intel Corporation - * Copyright (C) 2002-2010 Marcel Holtmann - * - * - */ - -#include -#include - -typedef void (*mainloop_destroy_func) (void *user_data); - -typedef void (*mainloop_event_func) (int fd, uint32_t events, void *user_data); -typedef void (*mainloop_timeout_func) (int id, void *user_data); -typedef void (*mainloop_signal_func) (int signum, void *user_data); - -void mainloop_init(void); -void mainloop_quit(void); -void mainloop_exit_success(void); -void mainloop_exit_failure(void); -int mainloop_run(void); -int mainloop_run_with_signal(mainloop_signal_func func, void *user_data); - -int mainloop_add_fd(int fd, uint32_t events, mainloop_event_func callback, - void *user_data, mainloop_destroy_func destroy); -int mainloop_modify_fd(int fd, uint32_t events); -int mainloop_remove_fd(int fd); - -int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback, - void *user_data, mainloop_destroy_func destroy); -int mainloop_modify_timeout(int fd, unsigned int msec); -int mainloop_remove_timeout(int id); - -int mainloop_set_signal(sigset_t *mask, mainloop_signal_func callback, - void *user_data, mainloop_destroy_func destroy); -int mainloop_sd_notify(const char *state); diff --git a/alfred/src/ble/queue.c b/alfred/src/ble/queue.c deleted file mode 100644 index 0b69a0cae..000000000 --- a/alfred/src/ble/queue.c +++ /dev/null @@ -1,373 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "ble/util.h" -#include "ble/queue.h" - -struct queue { - int ref_count; - struct queue_entry *head; - struct queue_entry *tail; - unsigned int entries; -}; - -static struct queue *queue_ref(struct queue *queue) -{ - if (!queue) - return NULL; - - __sync_fetch_and_add(&queue->ref_count, 1); - - return queue; -} - -static void queue_unref(struct queue *queue) -{ - if (__sync_sub_and_fetch(&queue->ref_count, 1)) - return; - - free(queue); -} - -struct queue *queue_new(void) -{ - struct queue *queue; - - queue = new0(struct queue, 1); - queue->head = NULL; - queue->tail = NULL; - queue->entries = 0; - - return queue_ref(queue); -} - -void queue_destroy(struct queue *queue, queue_destroy_func_t destroy) -{ - if (!queue) - return; - - queue_remove_all(queue, NULL, NULL, destroy); - - queue_unref(queue); -} - -static struct queue_entry *queue_entry_new(void *data) -{ - struct queue_entry *entry; - - entry = new0(struct queue_entry, 1); - entry->data = data; - - return entry; -} - -bool queue_push_tail(struct queue *queue, void *data) -{ - struct queue_entry *entry; - - if (!queue) - return false; - - entry = queue_entry_new(data); - - if (queue->tail) - queue->tail->next = entry; - - queue->tail = entry; - - if (!queue->head) - queue->head = entry; - - queue->entries++; - - return true; -} - -bool queue_push_head(struct queue *queue, void *data) -{ - struct queue_entry *entry; - - if (!queue) - return false; - - entry = queue_entry_new(data); - - entry->next = queue->head; - - queue->head = entry; - - if (!queue->tail) - queue->tail = entry; - - queue->entries++; - - return true; -} - -bool queue_push_after(struct queue *queue, void *entry, void *data) -{ - struct queue_entry *qentry, *tmp, *new_entry; - - qentry = NULL; - - if (!queue) - return false; - - for (tmp = queue->head; tmp; tmp = tmp->next) { - if (tmp->data == entry) { - qentry = tmp; - break; - } - } - - if (!qentry) - return false; - - new_entry = queue_entry_new(data); - - new_entry->next = qentry->next; - - if (!qentry->next) - queue->tail = new_entry; - - qentry->next = new_entry; - queue->entries++; - - return true; -} - -void *queue_pop_head(struct queue *queue) -{ - struct queue_entry *entry; - void *data; - - if (!queue || !queue->head) - return NULL; - - entry = queue->head; - - if (!queue->head->next) { - queue->head = NULL; - queue->tail = NULL; - } else - queue->head = queue->head->next; - - data = entry->data; - - free(entry); - queue->entries--; - - return data; -} - -void *queue_peek_head(struct queue *queue) -{ - if (!queue || !queue->head) - return NULL; - - return queue->head->data; -} - -void *queue_peek_tail(struct queue *queue) -{ - if (!queue || !queue->tail) - return NULL; - - return queue->tail->data; -} - -void queue_foreach(struct queue *queue, queue_foreach_func_t function, - void *user_data) -{ - struct queue_entry *entry; - - if (!queue || !function) - return; - - entry = queue->head; - if (!entry) - return; - - queue_ref(queue); - while (entry && queue->head && queue->ref_count > 1) { - struct queue_entry *next; - - next = entry->next; - function(entry->data, user_data); - entry = next; - } - queue_unref(queue); -} - -static bool direct_match(const void *a, const void *b) -{ - return a == b; -} - -void *queue_find(struct queue *queue, queue_match_func_t function, - const void *match_data) -{ - struct queue_entry *entry; - - if (!queue) - return NULL; - - if (!function) - function = direct_match; - - for (entry = queue->head; entry; entry = entry->next) - if (function(entry->data, match_data)) - return entry->data; - - return NULL; -} - -bool queue_remove(struct queue *queue, void *data) -{ - struct queue_entry *entry, *prev; - - if (!queue) - return false; - - for (entry = queue->head, prev = NULL; entry; - prev = entry, entry = entry->next) { - if (entry->data != data) - continue; - - if (prev) - prev->next = entry->next; - else - queue->head = entry->next; - - if (!entry->next) - queue->tail = prev; - - free(entry); - queue->entries--; - - return true; - } - - return false; -} - -void *queue_remove_if(struct queue *queue, queue_match_func_t function, - void *user_data) -{ - struct queue_entry *entry, *prev = NULL; - - if (!queue) - return NULL; - - if (!function) - function = direct_match; - - entry = queue->head; - - while (entry) { - if (function(entry->data, user_data)) { - void *data; - - if (prev) - prev->next = entry->next; - else - queue->head = entry->next; - - if (!entry->next) - queue->tail = prev; - - data = entry->data; - - free(entry); - queue->entries--; - - return data; - } else { - prev = entry; - entry = entry->next; - } - } - - return NULL; -} - -unsigned int queue_remove_all(struct queue *queue, queue_match_func_t function, - void *user_data, queue_destroy_func_t destroy) -{ - struct queue_entry *entry; - unsigned int count = 0; - - if (!queue) - return 0; - - entry = queue->head; - - if (function) { - while (entry) { - void *data; - unsigned int entries = queue->entries; - - data = queue_remove_if(queue, function, user_data); - if (entries == queue->entries) - break; - - if (destroy) - destroy(data); - - count++; - } - } else { - queue->head = NULL; - queue->tail = NULL; - queue->entries = 0; - - while (entry) { - struct queue_entry *tmp = entry; - - entry = entry->next; - - if (destroy) - destroy(tmp->data); - - free(tmp); - count++; - } - } - - return count; -} - -const struct queue_entry *queue_get_entries(struct queue *queue) -{ - if (!queue) - return NULL; - - return queue->head; -} - -unsigned int queue_length(struct queue *queue) -{ - if (!queue) - return 0; - - return queue->entries; -} - -bool queue_isempty(struct queue *queue) -{ - if (!queue) - return true; - - return queue->entries == 0; -} diff --git a/alfred/src/ble/queue.h b/alfred/src/ble/queue.h deleted file mode 100644 index 122f4eaa6..000000000 --- a/alfred/src/ble/queue.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#include - -typedef void (*queue_destroy_func_t)(void *data); - -struct queue; - -struct queue_entry { - void *data; - struct queue_entry *next; -}; - -struct queue *queue_new(void); -void queue_destroy(struct queue *queue, queue_destroy_func_t destroy); - -bool queue_push_tail(struct queue *queue, void *data); -bool queue_push_head(struct queue *queue, void *data); -bool queue_push_after(struct queue *queue, void *entry, void *data); -void *queue_pop_head(struct queue *queue); -void *queue_peek_head(struct queue *queue); -void *queue_peek_tail(struct queue *queue); - -typedef void (*queue_foreach_func_t)(void *data, void *user_data); - -void queue_foreach(struct queue *queue, queue_foreach_func_t function, - void *user_data); - -typedef bool (*queue_match_func_t)(const void *data, const void *match_data); - -void *queue_find(struct queue *queue, queue_match_func_t function, - const void *match_data); - -bool queue_remove(struct queue *queue, void *data); -void *queue_remove_if(struct queue *queue, queue_match_func_t function, - void *user_data); -unsigned int queue_remove_all(struct queue *queue, queue_match_func_t function, - void *user_data, queue_destroy_func_t destroy); - -const struct queue_entry *queue_get_entries(struct queue *queue); - -unsigned int queue_length(struct queue *queue); -bool queue_isempty(struct queue *queue); diff --git a/alfred/src/ble/timeout-mainloop.c b/alfred/src/ble/timeout-mainloop.c deleted file mode 100644 index 9be803cda..000000000 --- a/alfred/src/ble/timeout-mainloop.c +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Intel Corporation. All rights reserved. - * - * - */ - -#include - -#include "mainloop.h" -#include "util.h" -#include "timeout.h" - -struct timeout_data { - int id; - timeout_func_t func; - timeout_destroy_func_t destroy; - unsigned int timeout; - void *user_data; -}; - -static void timeout_callback(int id, void *user_data) -{ - struct timeout_data *data = user_data; - - if (data->func(data->user_data) && - !mainloop_modify_timeout(data->id, data->timeout)) - return; - - mainloop_remove_timeout(data->id); -} - -static void timeout_destroy(void *user_data) -{ - struct timeout_data *data = user_data; - - if (data->destroy) - data->destroy(data->user_data); - - free(data); -} - -unsigned int timeout_add(unsigned int timeout, timeout_func_t func, - void *user_data, timeout_destroy_func_t destroy) -{ - struct timeout_data *data; - - data = new0(struct timeout_data, 1); - data->func = func; - data->user_data = user_data; - data->timeout = timeout; - data->destroy = destroy; - - data->id = mainloop_add_timeout(timeout, timeout_callback, data, - timeout_destroy); - if (data->id < 0) { - free(data); - return 0; - } - - return (unsigned int) data->id; -} - -void timeout_remove(unsigned int id) -{ - if (!id) - return; - - mainloop_remove_timeout((int) id); -} - -unsigned int timeout_add_seconds(unsigned int timeout, timeout_func_t func, - void *user_data, timeout_destroy_func_t destroy) -{ - return timeout_add(timeout * 1000, func, user_data, destroy); -} diff --git a/alfred/src/ble/timeout.h b/alfred/src/ble/timeout.h deleted file mode 100644 index 0945c3318..000000000 --- a/alfred/src/ble/timeout.h +++ /dev/null @@ -1,21 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2014 Intel Corporation. All rights reserved. - * - * - */ - -#include - -typedef bool (*timeout_func_t)(void *user_data); -typedef void (*timeout_destroy_func_t)(void *user_data); - -unsigned int timeout_add(unsigned int timeout, timeout_func_t func, - void *user_data, timeout_destroy_func_t destroy); -void timeout_remove(unsigned int id); - -unsigned int timeout_add_seconds(unsigned int timeout, timeout_func_t func, - void *user_data, timeout_destroy_func_t destroy); diff --git a/alfred/src/ble/util.c b/alfred/src/ble/util.c deleted file mode 100644 index 9b9916704..000000000 --- a/alfred/src/ble/util.c +++ /dev/null @@ -1,1215 +0,0 @@ -// SPDX-License-Identifier: LGPL-2.1-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ble/util.h" - -void *btd_malloc(size_t size) -{ - if (__builtin_expect(!!size, 1)) { - void *ptr; - - ptr = malloc(size); - if (ptr) - return ptr; - - fprintf(stderr, "failed to allocate %zu bytes\n", size); - abort(); - } - - return NULL; -} - -void util_debug_va(util_debug_func_t function, void *user_data, - const char *format, va_list va) -{ - char str[78]; - - if (!function || !format) - return; - - vsnprintf(str, sizeof(str), format, va); - - function(str, user_data); -} - -void util_debug(util_debug_func_t function, void *user_data, - const char *format, ...) -{ - va_list ap; - - if (!function || !format) - return; - - va_start(ap, format); - util_debug_va(function, user_data, format, ap); - va_end(ap); -} - -void util_hexdump(const char dir, const unsigned char *buf, size_t len, - util_debug_func_t function, void *user_data) -{ - static const char hexdigits[] = "0123456789abcdef"; - char str[68]; - size_t i; - - if (!function || !len) - return; - - str[0] = dir; - - for (i = 0; i < len; i++) { - str[((i % 16) * 3) + 1] = ' '; - str[((i % 16) * 3) + 2] = hexdigits[buf[i] >> 4]; - str[((i % 16) * 3) + 3] = hexdigits[buf[i] & 0xf]; - str[(i % 16) + 51] = isprint(buf[i]) ? buf[i] : '.'; - - if ((i + 1) % 16 == 0) { - str[49] = ' '; - str[50] = ' '; - str[67] = '\0'; - function(str, user_data); - str[0] = ' '; - } - } - - if (i % 16 > 0) { - size_t j; - for (j = (i % 16); j < 16; j++) { - str[(j * 3) + 1] = ' '; - str[(j * 3) + 2] = ' '; - str[(j * 3) + 3] = ' '; - str[j + 51] = ' '; - } - str[49] = ' '; - str[50] = ' '; - str[67] = '\0'; - function(str, user_data); - } -} - -/* Helper for getting the dirent type in case readdir returns DT_UNKNOWN */ -unsigned char util_get_dt(const char *parent, const char *name) -{ - char filename[PATH_MAX]; - struct stat st; - - snprintf(filename, PATH_MAX, "%s/%s", parent, name); - if (lstat(filename, &st) == 0 && S_ISDIR(st.st_mode)) - return DT_DIR; - - return DT_UNKNOWN; -} - -/* Helpers for bitfield operations */ - -/* Find unique id in range from 1 to max but no bigger then - * sizeof(int) * 8. ffs() is used since it is POSIX standard - */ -uint8_t util_get_uid(unsigned int *bitmap, uint8_t max) -{ - uint8_t id; - - id = ffs(~*bitmap); - - if (!id || id > max) - return 0; - - *bitmap |= 1u << (id - 1); - - return id; -} - -/* Clear id bit in bitmap */ -void util_clear_uid(unsigned int *bitmap, uint8_t id) -{ - if (!id) - return; - - *bitmap &= ~(1u << (id - 1)); -} - -static const struct { - uint16_t uuid; - const char *str; -} uuid16_table[] = { - { 0x0001, "SDP" }, - { 0x0003, "RFCOMM" }, - { 0x0005, "TCS-BIN" }, - { 0x0007, "ATT" }, - { 0x0008, "OBEX" }, - { 0x000f, "BNEP" }, - { 0x0010, "UPNP" }, - { 0x0011, "HIDP" }, - { 0x0012, "Hardcopy Control Channel" }, - { 0x0014, "Hardcopy Data Channel" }, - { 0x0016, "Hardcopy Notification" }, - { 0x0017, "AVCTP" }, - { 0x0019, "AVDTP" }, - { 0x001b, "CMTP" }, - { 0x001e, "MCAP Control Channel" }, - { 0x001f, "MCAP Data Channel" }, - { 0x0100, "L2CAP" }, - /* 0x0101 to 0x0fff undefined */ - { 0x1000, "Service Discovery Server Service Class" }, - { 0x1001, "Browse Group Descriptor Service Class" }, - { 0x1002, "Public Browse Root" }, - /* 0x1003 to 0x1100 undefined */ - { 0x1101, "Serial Port" }, - { 0x1102, "LAN Access Using PPP" }, - { 0x1103, "Dialup Networking" }, - { 0x1104, "IrMC Sync" }, - { 0x1105, "OBEX Object Push" }, - { 0x1106, "OBEX File Transfer" }, - { 0x1107, "IrMC Sync Command" }, - { 0x1108, "Headset" }, - { 0x1109, "Cordless Telephony" }, - { 0x110a, "Audio Source" }, - { 0x110b, "Audio Sink" }, - { 0x110c, "A/V Remote Control Target" }, - { 0x110d, "Advanced Audio Distribution" }, - { 0x110e, "A/V Remote Control" }, - { 0x110f, "A/V Remote Control Controller" }, - { 0x1110, "Intercom" }, - { 0x1111, "Fax" }, - { 0x1112, "Headset AG" }, - { 0x1113, "WAP" }, - { 0x1114, "WAP Client" }, - { 0x1115, "PANU" }, - { 0x1116, "NAP" }, - { 0x1117, "GN" }, - { 0x1118, "Direct Printing" }, - { 0x1119, "Reference Printing" }, - { 0x111a, "Basic Imaging Profile" }, - { 0x111b, "Imaging Responder" }, - { 0x111c, "Imaging Automatic Archive" }, - { 0x111d, "Imaging Referenced Objects" }, - { 0x111e, "Handsfree" }, - { 0x111f, "Handsfree Audio Gateway" }, - { 0x1120, "Direct Printing Refrence Objects Service" }, - { 0x1121, "Reflected UI" }, - { 0x1122, "Basic Printing" }, - { 0x1123, "Printing Status" }, - { 0x1124, "Human Interface Device Service" }, - { 0x1125, "Hardcopy Cable Replacement" }, - { 0x1126, "HCR Print" }, - { 0x1127, "HCR Scan" }, - { 0x1128, "Common ISDN Access" }, - /* 0x1129 and 0x112a undefined */ - { 0x112d, "SIM Access" }, - { 0x112e, "Phonebook Access Client" }, - { 0x112f, "Phonebook Access Server" }, - { 0x1130, "Phonebook Access" }, - { 0x1131, "Headset HS" }, - { 0x1132, "Message Access Server" }, - { 0x1133, "Message Notification Server" }, - { 0x1134, "Message Access Profile" }, - { 0x1135, "GNSS" }, - { 0x1136, "GNSS Server" }, - { 0x1137, "3D Display" }, - { 0x1138, "3D Glasses" }, - { 0x1139, "3D Synchronization" }, - { 0x113a, "MPS Profile" }, - { 0x113b, "MPS Service" }, - /* 0x113c to 0x11ff undefined */ - { 0x1200, "PnP Information" }, - { 0x1201, "Generic Networking" }, - { 0x1202, "Generic File Transfer" }, - { 0x1203, "Generic Audio" }, - { 0x1204, "Generic Telephony" }, - { 0x1205, "UPNP Service" }, - { 0x1206, "UPNP IP Service" }, - { 0x1300, "UPNP IP PAN" }, - { 0x1301, "UPNP IP LAP" }, - { 0x1302, "UPNP IP L2CAP" }, - { 0x1303, "Video Source" }, - { 0x1304, "Video Sink" }, - { 0x1305, "Video Distribution" }, - /* 0x1306 to 0x13ff undefined */ - { 0x1400, "HDP" }, - { 0x1401, "HDP Source" }, - { 0x1402, "HDP Sink" }, - /* 0x1403 to 0x17ff undefined */ - { 0x1800, "Generic Access Profile" }, - { 0x1801, "Generic Attribute Profile" }, - { 0x1802, "Immediate Alert" }, - { 0x1803, "Link Loss" }, - { 0x1804, "Tx Power" }, - { 0x1805, "Current Time Service" }, - { 0x1806, "Reference Time Update Service" }, - { 0x1807, "Next DST Change Service" }, - { 0x1808, "Glucose" }, - { 0x1809, "Health Thermometer" }, - { 0x180a, "Device Information" }, - /* 0x180b and 0x180c undefined */ - { 0x180d, "Heart Rate" }, - { 0x180e, "Phone Alert Status Service" }, - { 0x180f, "Battery Service" }, - { 0x1810, "Blood Pressure" }, - { 0x1811, "Alert Notification Service" }, - { 0x1812, "Human Interface Device" }, - { 0x1813, "Scan Parameters" }, - { 0x1814, "Running Speed and Cadence" }, - { 0x1815, "Automation IO" }, - { 0x1816, "Cycling Speed and Cadence" }, - /* 0x1817 undefined */ - { 0x1818, "Cycling Power" }, - { 0x1819, "Location and Navigation" }, - { 0x181a, "Environmental Sensing" }, - { 0x181b, "Body Composition" }, - { 0x181c, "User Data" }, - { 0x181d, "Weight Scale" }, - { 0x181e, "Bond Management" }, - { 0x181f, "Continuous Glucose Monitoring" }, - { 0x1820, "Internet Protocol Support" }, - { 0x1821, "Indoor Positioning" }, - { 0x1822, "Pulse Oximeter" }, - { 0x1823, "HTTP Proxy" }, - { 0x1824, "Transport Discovery" }, - { 0x1825, "Object Transfer" }, - { 0x1826, "Fitness Machine" }, - { 0x1827, "Mesh Provisioning" }, - { 0x1828, "Mesh Proxy" }, - /* 0x1829 to 0x27ff undefined */ - { 0x2800, "Primary Service" }, - { 0x2801, "Secondary Service" }, - { 0x2802, "Include" }, - { 0x2803, "Characteristic" }, - /* 0x2804 to 0x28ff undefined */ - { 0x2900, "Characteristic Extended Properties" }, - { 0x2901, "Characteristic User Description" }, - { 0x2902, "Client Characteristic Configuration" }, - { 0x2903, "Server Characteristic Configuration" }, - { 0x2904, "Characteristic Format" }, - { 0x2905, "Characteristic Aggregate Formate" }, - { 0x2906, "Valid Range" }, - { 0x2907, "External Report Reference" }, - { 0x2908, "Report Reference" }, - { 0x2909, "Number of Digitals" }, - { 0x290a, "Value Trigger Setting" }, - { 0x290b, "Environmental Sensing Configuration" }, - { 0x290c, "Environmental Sensing Measurement" }, - { 0x290d, "Environmental Sensing Trigger Setting" }, - { 0x290e, "Time Trigger Setting" }, - /* 0x290f to 0x29ff undefined */ - { 0x2a00, "Device Name" }, - { 0x2a01, "Appearance" }, - { 0x2a02, "Peripheral Privacy Flag" }, - { 0x2a03, "Reconnection Address" }, - { 0x2a04, "Peripheral Preferred Connection Parameters" }, - { 0x2a05, "Service Changed" }, - { 0x2a06, "Alert Level" }, - { 0x2a07, "Tx Power Level" }, - { 0x2a08, "Date Time" }, - { 0x2a09, "Day of Week" }, - { 0x2a0a, "Day Date Time" }, - /* 0x2a0b undefined */ - { 0x2a0c, "Exact Time 256" }, - { 0x2a0d, "DST Offset" }, - { 0x2a0e, "Time Zone" }, - { 0x2a0f, "Local Time Information" }, - /* 0x2a10 undefined */ - { 0x2a11, "Time with DST" }, - { 0x2a12, "Time Accuracy" }, - { 0x2a13, "Time Source" }, - { 0x2a14, "Reference Time Information" }, - /* 0x2a15 undefined */ - { 0x2a16, "Time Update Control Point" }, - { 0x2a17, "Time Update State" }, - { 0x2a18, "Glucose Measurement" }, - { 0x2a19, "Battery Level" }, - /* 0x2a1a and 0x2a1b undefined */ - { 0x2a1c, "Temperature Measurement" }, - { 0x2a1d, "Temperature Type" }, - { 0x2a1e, "Intermediate Temperature" }, - /* 0x2a1f and 0x2a20 undefined */ - { 0x2a21, "Measurement Interval" }, - { 0x2a22, "Boot Keyboard Input Report" }, - { 0x2a23, "System ID" }, - { 0x2a24, "Model Number String" }, - { 0x2a25, "Serial Number String" }, - { 0x2a26, "Firmware Revision String" }, - { 0x2a27, "Hardware Revision String" }, - { 0x2a28, "Software Revision String" }, - { 0x2a29, "Manufacturer Name String" }, - { 0x2a2a, "IEEE 11073-20601 Regulatory Cert. Data List" }, - { 0x2a2b, "Current Time" }, - { 0x2a2c, "Magnetic Declination" }, - /* 0x2a2d to 0x2a30 undefined */ - { 0x2a31, "Scan Refresh" }, - { 0x2a32, "Boot Keyboard Output Report" }, - { 0x2a33, "Boot Mouse Input Report" }, - { 0x2a34, "Glucose Measurement Context" }, - { 0x2a35, "Blood Pressure Measurement" }, - { 0x2a36, "Intermediate Cuff Pressure" }, - { 0x2a37, "Heart Rate Measurement" }, - { 0x2a38, "Body Sensor Location" }, - { 0x2a39, "Heart Rate Control Point" }, - /* 0x2a3a to 0x2a3e undefined */ - { 0x2a3f, "Alert Status" }, - { 0x2a40, "Ringer Control Point" }, - { 0x2a41, "Ringer Setting" }, - { 0x2a42, "Alert Category ID Bit Mask" }, - { 0x2a43, "Alert Category ID" }, - { 0x2a44, "Alert Notification Control Point" }, - { 0x2a45, "Unread Alert Status" }, - { 0x2a46, "New Alert" }, - { 0x2a47, "Supported New Alert Category" }, - { 0x2a48, "Supported Unread Alert Category" }, - { 0x2a49, "Blood Pressure Feature" }, - { 0x2a4a, "HID Information" }, - { 0x2a4b, "Report Map" }, - { 0x2a4c, "HID Control Point" }, - { 0x2a4d, "Report" }, - { 0x2a4e, "Protocol Mode" }, - { 0x2a4f, "Scan Interval Window" }, - { 0x2a50, "PnP ID" }, - { 0x2a51, "Glucose Feature" }, - { 0x2a52, "Record Access Control Point" }, - { 0x2a53, "RSC Measurement" }, - { 0x2a54, "RSC Feature" }, - { 0x2a55, "SC Control Point" }, - { 0x2a56, "Digital" }, - /* 0x2a57 undefined */ - { 0x2a58, "Analog" }, - /* 0x2a59 undefined */ - { 0x2a5a, "Aggregate" }, - { 0x2a5b, "CSC Measurement" }, - { 0x2a5c, "CSC Feature" }, - { 0x2a5d, "Sensor Location" }, - /* 0x2a5e to 0x2a62 undefined */ - { 0x2a63, "Cycling Power Measurement" }, - { 0x2a64, "Cycling Power Vector" }, - { 0x2a65, "Cycling Power Feature" }, - { 0x2a66, "Cycling Power Control Point" }, - { 0x2a67, "Location and Speed" }, - { 0x2a68, "Navigation" }, - { 0x2a69, "Position Quality" }, - { 0x2a6a, "LN Feature" }, - { 0x2a6b, "LN Control Point" }, - { 0x2a6c, "Elevation" }, - { 0x2a6d, "Pressure" }, - { 0x2a6e, "Temperature" }, - { 0x2a6f, "Humidity" }, - { 0x2a70, "True Wind Speed" }, - { 0x2a71, "True Wind Direction" }, - { 0x2a72, "Apparent Wind Speed" }, - { 0x2a73, "Apparent Wind Direction" }, - { 0x2a74, "Gust Factor" }, - { 0x2a75, "Pollen Concentration" }, - { 0x2a76, "UV Index" }, - { 0x2a77, "Irradiance" }, - { 0x2a78, "Rainfall" }, - { 0x2a79, "Wind Chill" }, - { 0x2a7a, "Heat Index" }, - { 0x2a7b, "Dew Point" }, - { 0x2a7c, "Trend" }, - { 0x2a7d, "Descriptor Value Changed" }, - { 0x2a7e, "Aerobic Heart Rate Lower Limit" }, - { 0x2a7f, "Aerobic Threshold" }, - { 0x2a80, "Age" }, - { 0x2a81, "Anaerobic Heart Rate Lower Limit" }, - { 0x2a82, "Anaerobic Heart Rate Upper Limit" }, - { 0x2a83, "Anaerobic Threshold" }, - { 0x2a84, "Aerobic Heart Rate Upper Limit" }, - { 0x2a85, "Date of Birth" }, - { 0x2a86, "Date of Threshold Assessment" }, - { 0x2a87, "Email Address" }, - { 0x2a88, "Fat Burn Heart Rate Lower Limit" }, - { 0x2a89, "Fat Burn Heart Rate Upper Limit" }, - { 0x2a8a, "First Name" }, - { 0x2a8b, "Five Zone Heart Rate Limits" }, - { 0x2a8c, "Gender" }, - { 0x2a8d, "Heart Rate Max" }, - { 0x2a8e, "Height" }, - { 0x2a8f, "Hip Circumference" }, - { 0x2a90, "Last Name" }, - { 0x2a91, "Maximum Recommended Heart Rate" }, - { 0x2a92, "Resting Heart Rate" }, - { 0x2a93, "Sport Type for Aerobic/Anaerobic Thresholds" }, - { 0x2a94, "Three Zone Heart Rate Limits" }, - { 0x2a95, "Two Zone Heart Rate Limit" }, - { 0x2a96, "VO2 Max" }, - { 0x2a97, "Waist Circumference" }, - { 0x2a98, "Weight" }, - { 0x2a99, "Database Change Increment" }, - { 0x2a9a, "User Index" }, - { 0x2a9b, "Body Composition Feature" }, - { 0x2a9c, "Body Composition Measurement" }, - { 0x2a9d, "Weight Measurement" }, - { 0x2a9e, "Weight Scale Feature" }, - { 0x2a9f, "User Control Point" }, - { 0x2aa0, "Magnetic Flux Density - 2D" }, - { 0x2aa1, "Magnetic Flux Density - 3D" }, - { 0x2aa2, "Language" }, - { 0x2aa3, "Barometric Pressure Trend" }, - { 0x2aa4, "Bond Management Control Point" }, - { 0x2aa5, "Bond Management Feature" }, - { 0x2aa6, "Central Address Resolution" }, - { 0x2aa7, "CGM Measurement" }, - { 0x2aa8, "CGM Feature" }, - { 0x2aa9, "CGM Status" }, - { 0x2aaa, "CGM Session Start Time" }, - { 0x2aab, "CGM Session Run Time" }, - { 0x2aac, "CGM Specific Ops Control Point" }, - { 0x2aad, "Indoor Positioning Configuration" }, - { 0x2aae, "Latitude" }, - { 0x2aaf, "Longitude" }, - { 0x2ab0, "Local North Coordinate" }, - { 0x2ab1, "Local East Coordinate" }, - { 0x2ab2, "Floor Number" }, - { 0x2ab3, "Altitude" }, - { 0x2ab4, "Uncertainty" }, - { 0x2ab5, "Location Name" }, - { 0x2ab6, "URI" }, - { 0x2ab7, "HTTP Headers" }, - { 0x2ab8, "HTTP Status Code" }, - { 0x2ab9, "HTTP Entity Body" }, - { 0x2aba, "HTTP Control Point" }, - { 0x2abb, "HTTPS Security" }, - { 0x2abc, "TDS Control Point" }, - { 0x2abd, "OTS Feature" }, - { 0x2abe, "Object Name" }, - { 0x2abf, "Object Type" }, - { 0x2ac0, "Object Size" }, - { 0x2ac1, "Object First-Created" }, - { 0x2ac2, "Object Last-Modified" }, - { 0x2ac3, "Object ID" }, - { 0x2ac4, "Object Properties" }, - { 0x2ac5, "Object Action Control Point" }, - { 0x2ac6, "Object List Control Point" }, - { 0x2ac7, "Object List Filter" }, - { 0x2ac8, "Object Changed" }, - { 0x2ac9, "Resolvable Private Address Only" }, - /* 0x2aca and 0x2acb undefined */ - { 0x2acc, "Fitness Machine Feature" }, - { 0x2acd, "Treadmill Data" }, - { 0x2ace, "Cross Trainer Data" }, - { 0x2acf, "Step Climber Data" }, - { 0x2ad0, "Stair Climber Data" }, - { 0x2ad1, "Rower Data" }, - { 0x2ad2, "Indoor Bike Data" }, - { 0x2ad3, "Training Status" }, - { 0x2ad4, "Supported Speed Range" }, - { 0x2ad5, "Supported Inclination Range" }, - { 0x2ad6, "Supported Resistance Level Range" }, - { 0x2ad7, "Supported Heart Rate Range" }, - { 0x2ad8, "Supported Power Range" }, - { 0x2ad9, "Fitness Machine Control Point" }, - { 0x2ada, "Fitness Machine Status" }, - { 0x2adb, "Mesh Provisioning Data In" }, - { 0x2adc, "Mesh Provisioning Data Out" }, - { 0x2add, "Mesh Proxy Data In" }, - { 0x2ade, "Mesh Proxy Data Out" }, - { 0x2b29, "Client Supported Features" }, - { 0x2b2A, "Database Hash" }, - /* vendor defined */ - { 0xfeff, "GN Netcom" }, - { 0xfefe, "GN ReSound A/S" }, - { 0xfefd, "Gimbal, Inc." }, - { 0xfefc, "Gimbal, Inc." }, - { 0xfefb, "Telit Wireless Solutions (Formerly Stollmann E+V GmbH)" }, - { 0xfefa, "PayPal, Inc." }, - { 0xfef9, "PayPal, Inc." }, - { 0xfef8, "Aplix Corporation" }, - { 0xfef7, "Aplix Corporation" }, - { 0xfef6, "Wicentric, Inc." }, - { 0xfef5, "Dialog Semiconductor GmbH" }, - { 0xfef4, "Google" }, - { 0xfef3, "Google" }, - { 0xfef2, "CSR" }, - { 0xfef1, "CSR" }, - { 0xfef0, "Intel" }, - { 0xfeef, "Polar Electro Oy " }, - { 0xfeee, "Polar Electro Oy " }, - { 0xfeed, "Tile, Inc." }, - { 0xfeec, "Tile, Inc." }, - { 0xfeeb, "Swirl Networks, Inc." }, - { 0xfeea, "Swirl Networks, Inc." }, - { 0xfee9, "Quintic Corp." }, - { 0xfee8, "Quintic Corp." }, - { 0xfee7, "Tencent Holdings Limited." }, - { 0xfee6, "Silvair, Inc." }, - { 0xfee5, "Nordic Semiconductor ASA" }, - { 0xfee4, "Nordic Semiconductor ASA" }, - { 0xfee3, "Anki, Inc." }, - { 0xfee2, "Anki, Inc." }, - { 0xfee1, "Anhui Huami Information Technology Co., Ltd. " }, - { 0xfee0, "Anhui Huami Information Technology Co., Ltd. " }, - { 0xfedf, "Design SHIFT" }, - { 0xfede, "Coin, Inc." }, - { 0xfedd, "Jawbone" }, - { 0xfedc, "Jawbone" }, - { 0xfedb, "Perka, Inc." }, - { 0xfeda, "ISSC Technologies Corp. " }, - { 0xfed9, "Pebble Technology Corporation" }, - { 0xfed8, "Google" }, - { 0xfed7, "Broadcom" }, - { 0xfed6, "Broadcom" }, - { 0xfed5, "Plantronics Inc." }, - { 0xfed4, "Apple, Inc." }, - { 0xfed3, "Apple, Inc." }, - { 0xfed2, "Apple, Inc." }, - { 0xfed1, "Apple, Inc." }, - { 0xfed0, "Apple, Inc." }, - { 0xfecf, "Apple, Inc." }, - { 0xfece, "Apple, Inc." }, - { 0xfecd, "Apple, Inc." }, - { 0xfecc, "Apple, Inc." }, - { 0xfecb, "Apple, Inc." }, - { 0xfeca, "Apple, Inc." }, - { 0xfec9, "Apple, Inc." }, - { 0xfec8, "Apple, Inc." }, - { 0xfec7, "Apple, Inc." }, - { 0xfec6, "Kocomojo, LLC" }, - { 0xfec5, "Realtek Semiconductor Corp." }, - { 0xfec4, "PLUS Location Systems" }, - { 0xfec3, "360fly, Inc." }, - { 0xfec2, "Blue Spark Technologies, Inc." }, - { 0xfec1, "KDDI Corporation" }, - { 0xfec0, "KDDI Corporation" }, - { 0xfebf, "Nod, Inc." }, - { 0xfebe, "Bose Corporation" }, - { 0xfebd, "Clover Network, Inc" }, - { 0xfebc, "Dexcom Inc" }, - { 0xfebb, "adafruit industries" }, - { 0xfeba, "Tencent Holdings Limited" }, - { 0xfeb9, "LG Electronics" }, - { 0xfeb8, "Facebook, Inc." }, - { 0xfeb7, "Facebook, Inc." }, - { 0xfeb6, "Vencer Co., Ltd" }, - { 0xfeb5, "WiSilica Inc." }, - { 0xfeb4, "WiSilica Inc." }, - { 0xfeb3, "Taobao" }, - { 0xfeb2, "Microsoft Corporation" }, - { 0xfeb1, "Electronics Tomorrow Limited" }, - { 0xfeb0, "Nest Labs Inc" }, - { 0xfeaf, "Nest Labs Inc" }, - { 0xfeae, "Nokia" }, - { 0xfead, "Nokia" }, - { 0xfeac, "Nokia" }, - { 0xfeab, "Nokia" }, - { 0xfeaa, "Google" }, - { 0xfea9, "Savant Systems LLC" }, - { 0xfea8, "Savant Systems LLC" }, - { 0xfea7, "UTC Fire and Security" }, - { 0xfea6, "GoPro, Inc." }, - { 0xfea5, "GoPro, Inc." }, - { 0xfea4, "Paxton Access Ltd" }, - { 0xfea3, "ITT Industries" }, - { 0xfea2, "Intrepid Control Systems, Inc." }, - { 0xfea1, "Intrepid Control Systems, Inc." }, - { 0xfea0, "Google" }, - { 0xfe9f, "Google" }, - { 0xfe9e, "Dialog Semiconductor B.V." }, - { 0xfe9d, "Mobiquity Networks Inc" }, - { 0xfe9c, "GSI Laboratories, Inc." }, - { 0xfe9b, "Samsara Networks, Inc" }, - { 0xfe9a, "Estimote" }, - { 0xfe99, "Currant Inc" }, - { 0xfe98, "Currant Inc" }, - { 0xfe97, "Tesla Motors Inc." }, - { 0xfe96, "Tesla Motors Inc." }, - { 0xfe95, "Xiaomi Inc." }, - { 0xfe94, "OttoQ In" }, - { 0xfe93, "OttoQ In" }, - { 0xfe92, "Jarden Safety & Security" }, - { 0xfe91, "Shanghai Imilab Technology Co.,Ltd" }, - { 0xfe90, "JUMA" }, - { 0xfe8f, "CSR" }, - { 0xfe8e, "ARM Ltd" }, - { 0xfe8d, "Interaxon Inc." }, - { 0xfe8c, "TRON Forum" }, - { 0xfe8b, "Apple, Inc." }, - { 0xfe8a, "Apple, Inc." }, - { 0xfe89, "B&O Play A/S" }, - { 0xfe88, "SALTO SYSTEMS S.L." }, - { 0xfe87, "Qingdao Yeelink Information Technology Co., Ltd. ( 青岛亿联客信息技术有限公司 )" }, - { 0xfe86, "HUAWEI Technologies Co., Ltd. ( 华为技术有限公司 )" }, - { 0xfe85, "RF Digital Corp" }, - { 0xfe84, "RF Digital Corp" }, - { 0xfe83, "Blue Bite" }, - { 0xfe82, "Medtronic Inc." }, - { 0xfe81, "Medtronic Inc." }, - { 0xfe80, "Doppler Lab" }, - { 0xfe7f, "Doppler Lab" }, - { 0xfe7e, "Awear Solutions Ltd" }, - { 0xfe7d, "Aterica Health Inc." }, - { 0xfe7c, "Telit Wireless Solutions (Formerly Stollmann E+V GmbH)" }, - { 0xfe7b, "Orion Labs, Inc." }, - { 0xfe7a, "Bragi GmbH" }, - { 0xfe79, "Zebra Technologies" }, - { 0xfe78, "Hewlett-Packard Company" }, - { 0xfe77, "Hewlett-Packard Company" }, - { 0xfe76, "TangoMe" }, - { 0xfe75, "TangoMe" }, - { 0xfe74, "unwire" }, - { 0xfe73, "Abbott (formerly St. Jude Medical, Inc.)" }, - { 0xfe72, "Abbott (formerly St. Jude Medical, Inc.)" }, - { 0xfe71, "Plume Design Inc" }, - { 0xfe70, "Beijing Jingdong Century Trading Co., Ltd." }, - { 0xfe6f, "LINE Corporation" }, - { 0xfe6e, "The University of Tokyo " }, - { 0xfe6d, "The University of Tokyo " }, - { 0xfe6c, "TASER International, Inc." }, - { 0xfe6b, "TASER International, Inc." }, - { 0xfe6a, "Kontakt Micro-Location Sp. z o.o." }, - { 0xfe69, "Capsule Technologies Inc." }, - { 0xfe68, "Capsule Technologies Inc." }, - { 0xfe67, "Lab Sensor Solutions" }, - { 0xfe66, "Intel Corporation " }, - { 0xfe65, "CHIPOLO d.o.o. " }, - { 0xfe64, "Siemens AG" }, - { 0xfe63, "Connected Yard, Inc. " }, - { 0xfe62, "Indagem Tech LLC " }, - { 0xfe61, "Logitech International SA " }, - { 0xfe60, "Lierda Science & Technology Group Co., Ltd." }, - { 0xfe5f, "Eyefi, Inc." }, - { 0xfe5e, "Plastc Corporation " }, - { 0xfe5d, "Grundfos A/S " }, - { 0xfe5c, "million hunters GmbH " }, - { 0xfe5b, "GT-tronics HK Ltd" }, - { 0xfe5a, "Cronologics Corporation" }, - { 0xfe59, "Nordic Semiconductor ASA " }, - { 0xfe58, "Nordic Semiconductor ASA " }, - { 0xfe57, "Dotted Labs " }, - { 0xfe56, "Google Inc. " }, - { 0xfe55, "Google Inc. " }, - { 0xfe54, "Motiv, Inc. " }, - { 0xfe53, "3M" }, - { 0xfe52, "SetPoint Medical " }, - { 0xfe51, "SRAM " }, - { 0xfe50, "Google Inc." }, - { 0xfe4f, "Molekule, Inc." }, - { 0xfe4e, "NTT docomo " }, - { 0xfe4d, "Casambi Technologies Oy" }, - { 0xfe4c, "Volkswagen AG " }, - { 0xfe4b, "Signify Netherlands B.V. (formerly Philips Lighting B.V.)" }, - { 0xfe4a, "OMRON HEALTHCARE Co., Ltd." }, - { 0xfe49, "SenionLab AB" }, - { 0xfe48, "General Motors " }, - { 0xfe47, "General Motors " }, - { 0xfe46, "B&O Play A/S " }, - { 0xfe45, "Snapchat Inc" }, - { 0xfe44, "SK Telecom " }, - { 0xfe43, "Andreas Stihl AG & Co. KG" }, - { 0xfe42, "Nets A/S " }, - { 0xfe41, "Inugo Systems Limited" }, - { 0xfe40, "Inugo Systems Limited" }, - { 0xfe3f, "Friday Labs Limited" }, - { 0xfe3e, "BD Medical" }, - { 0xfe3d, "BD Medical" }, - { 0xfe3c, "alibaba" }, - { 0xfe3b, "Dobly Laboratories" }, - { 0xfe3a, "TTS Tooltechnic Systems AG & Co. KG" }, - { 0xfe39, "TTS Tooltechnic Systems AG & Co. KG" }, - { 0xfe38, "Spaceek LTD" }, - { 0xfe37, "Spaceek LTD" }, - { 0xfe36, "HUAWEI Technologies Co., Ltd" }, - { 0xfe35, "HUAWEI Technologies Co., Ltd" }, - { 0xfe34, "SmallLoop LLC" }, - { 0xfe33, "CHIPOLO d.o.o." }, - { 0xfe32, "Pro-Mark, Inc." }, - { 0xfe31, "Volkswagen AG" }, - { 0xfe30, "Volkswagen AG" }, - { 0xfe2f, "CRESCO Wireless, Inc" }, - { 0xfe2e, "ERi,Inc." }, - { 0xfe2d, "SMART INNOVATION Co.,Ltd" }, - { 0xfe2c, "Google" }, - { 0xfe2b, "ITT Industries" }, - { 0xfe2a, "DaisyWorks, Inc." }, - { 0xfe29, "Gibson Innovations" }, - { 0xfe28, "Ayla Networks" }, - { 0xfe27, "Google" }, - { 0xfe26, "Google" }, - { 0xfe25, "Apple, Inc. " }, - { 0xfe24, "August Home Inc" }, - { 0xfe23, "Zoll Medical Corporation" }, - { 0xfe22, "Zoll Medical Corporation" }, - { 0xfe21, "Bose Corporation" }, - { 0xfe20, "Emerson" }, - { 0xfe1f, "Garmin International, Inc." }, - { 0xfe1e, "Smart Innovations Co., Ltd" }, - { 0xfe1d, "Illuminati Instrument Corporation" }, - { 0xfe1c, "NetMedia, Inc." }, - { 0xfe1b, "Tyto Life LLC" }, - { 0xfe1a, "Tyto Life LLC" }, - { 0xfe19, "Google, Inc" }, - { 0xfe18, "Runtime, Inc." }, - { 0xfe17, "Telit Wireless Solutions GmbH" }, - { 0xfe16, "Footmarks, Inc." }, - { 0xfe15, "Amazon.com Services, Inc.." }, - { 0xfe14, "Flextronics International USA Inc." }, - { 0xfe13, "Apple Inc." }, - { 0xfe12, "M-Way Solutions GmbH" }, - { 0xfe11, "GMC-I Messtechnik GmbH" }, - { 0xfe10, "Lapis Semiconductor Co., Ltd." }, - { 0xfe0f, "Signify Netherlands B.V. (formerly Philips Lighting B.V.)" }, - { 0xfe0e, "Setec Pty Ltd" }, - { 0xfe0d, "Procter & Gamble" }, - { 0xfe0c, "Procter & Gamble" }, - { 0xfe0b, "ruwido austria gmbh" }, - { 0xfe0a, "ruwido austria gmbh" }, - { 0xfe09, "Pillsy, Inc." }, - { 0xfe08, "Microsoft" }, - { 0xfe07, "Sonos, Inc." }, - { 0xfe06, "Qualcomm Technologies, Inc." }, - { 0xfe05, "CORE Transport Technologies NZ Limited " }, - { 0xfe04, "OpenPath Security Inc" }, - { 0xfe03, "Amazon.com Services, Inc." }, - { 0xfe02, "Robert Bosch GmbH" }, - { 0xfe01, "Duracell U.S. Operations Inc." }, - { 0xfe00, "Amazon.com Services, Inc." }, - { 0xfdff, "OSRAM GmbH" }, - { 0xfdfe, "ADHERIUM(NZ) LIMITED" }, - { 0xfdfd, "RecursiveSoft Inc." }, - { 0xfdfc, "Optrel AG" }, - { 0xfdfb, "Tandem Diabetes Care" }, - { 0xfdfa, "Tandem Diabetes Care" }, - { 0xfdf9, "INIA" }, - { 0xfdf8, "Onvocal" }, - { 0xfdf7, "HP Inc." }, - { 0xfdf6, "AIAIAI ApS" }, - { 0xfdf5, "Milwaukee Electric Tools" }, - { 0xfdf4, "O. E. M. Controls, Inc." }, - { 0xfdf3, "Amersports" }, - { 0xfdf2, "AMICCOM Electronics Corporation" }, - { 0xfdf1, "LAMPLIGHT Co.,Ltd" }, - { 0xfdf0, "Google Inc." }, - { 0xfdef, "ART AND PROGRAM, INC." }, - { 0xfdee, "Huawei Technologies Co., Ltd." }, - { 0xfded, "Pole Star" }, - { 0xfdec, "Mannkind Corporation" }, - { 0xfdeb, "Syntronix Corporation" }, - { 0xfdea, "SeeScan, Inc" }, - { 0xfde9, "Spacesaver Corporation" }, - { 0xfde8, "Robert Bosch GmbH" }, - { 0xfde7, "SECOM Co., LTD" }, - { 0xfde6, "Intelletto Technologies Inc" }, - { 0xfde5, "SMK Corporation " }, - { 0xfde4, "JUUL Labs, Inc." }, - { 0xfde3, "Abbott Diabetes Care" }, - { 0xfde2, "Google Inc." }, - { 0xfde1, "Fortin Electronic Systems " }, - { 0xfde0, "John Deere" }, - { 0xfddf, "Harman International" }, - { 0xfdde, "Noodle Technology Inc. " }, - { 0xfddd, "Arch Systems Inc" }, - { 0xfddc, "4iiii Innovations Inc." }, - { 0xfddb, "Samsung Electronics Co., Ltd. " }, - { 0xfdda, "MHCS" }, - { 0xfdd9, "Jiangsu Teranovo Tech Co., Ltd." }, - { 0xfdd8, "Jiangsu Teranovo Tech Co., Ltd." }, - { 0xfdd7, "Emerson" }, - { 0xfdd6, "Ministry of Supply " }, - { 0xfdd5, "Brompton Bicycle Ltd" }, - { 0xfdd4, "LX Solutions Pty Limited" }, - { 0xfdd3, "FUBA Automotive Electronics GmbH" }, - { 0xfdd2, "Bose Corporation" }, - { 0xfdd1, "Huawei Technologies Co., Ltd " }, - { 0xfdd0, "Huawei Technologies Co., Ltd " }, - { 0xfdcf, "Nalu Medical, Inc" }, - { 0xfdce, "SENNHEISER electronic GmbH & Co. KG" }, - { 0xfdcd, "Qingping Technology (Beijing) Co., Ltd." }, - { 0xfdcc, "Shoof Technologies" }, - { 0xfdcb, "Meggitt SA" }, - { 0xfdca, "Fortin Electronic Systems " }, - { 0xfdc9, "Busch-Jaeger Elektro GmbH" }, - { 0xfdc8, "Hach – Danaher" }, - { 0xfdc7, "Eli Lilly and Company" }, - { 0xfdc6, "Eli Lilly and Company" }, - { 0xfdc5, "Automatic Labs" }, - { 0xfdc4, "Simavita (Aust) Pty Ltd" }, - { 0xfdc3, "Baidu Online Network Technology (Beijing) Co., Ltd" }, - { 0xfdc2, "Baidu Online Network Technology (Beijing) Co., Ltd" }, - { 0xfdc1, "Hunter Douglas" }, - { 0xfdc0, "Hunter Douglas" }, - { 0xfdbf, "California Things Inc. " }, - { 0xfdbe, "California Things Inc. " }, - { 0xfdbd, "Clover Network, Inc." }, - { 0xfdbc, "Emerson" }, - { 0xfdbb, "Profoto" }, - { 0xfdba, "Comcast Cable Corporation" }, - { 0xfdb9, "Comcast Cable Corporation" }, - { 0xfdb8, "LivaNova USA Inc." }, - { 0xfdb7, "LivaNova USA Inc." }, - { 0xfdb6, "GWA Hygiene GmbH" }, - { 0xfdb5, "ECSG" }, - { 0xfdb4, "HP Inc" }, - { 0xfdb3, "Audiodo AB" }, - { 0xfdb2, "Portable Multimedia Ltd " }, - { 0xfdb1, "Proxy Technologies, Inc." }, - { 0xfdb0, "Proxy Technologies, Inc." }, - { 0xfdaf, "Wiliot LTD" }, - { 0xfdae, "Houwa System Design, k.k." }, - { 0xfdad, "Houwa System Design, k.k." }, - { 0xfdac, "Tentacle Sync GmbH" }, - { 0xfdab, "Xiaomi Inc." }, - { 0xfdaa, "Xiaomi Inc." }, - { 0xfda9, "Rhombus Systems, Inc." }, - { 0xfda8, "PSA Peugeot Citroën" }, - { 0xfda7, "WWZN Information Technology Company Limited" }, - { 0xfda6, "WWZN Information Technology Company Limited" }, - { 0xfda5, "Neurostim OAB, Inc." }, - { 0xfda4, "Inseego Corp." }, - { 0xfda3, "Inseego Corp." }, - { 0xfda2, "Groove X, Inc" }, - { 0xfda1, "Groove X, Inc" }, - { 0xfda0, "Secugen Corporation" }, - { 0xfd9f, "VitalTech Affiliates LLC" }, - { 0xfd9e, "The Coca-Cola Company" }, - { 0xfd9d, "Gastec Corporation" }, - { 0xfd9c, "Huawei Technologies Co., Ltd." }, - { 0xfd9b, "Huawei Technologies Co., Ltd." }, - { 0xfd9a, "Huawei Technologies Co., Ltd." }, - { 0xfd99, "ABB Oy" }, - { 0xfd98, "Disney Worldwide Services, Inc." }, - { 0xfd97, "June Life, Inc." }, - { 0xfd96, "Google LLC" }, - { 0xfd95, "Rigado" }, - { 0xfd94, "Hewlett Packard Enterprise" }, - { 0xfd93, "Bayerische Motoren Werke AG" }, - { 0xfd92, "Qualcomm Technologies International, Ltd. (QTIL)" }, - { 0xfd91, "Groove X, Inc." }, - { 0xfd90, "Guangzhou SuperSound Information Technology Co.,Ltd" }, - { 0xfd8f, "Matrix ComSec Pvt. Ltd." }, - { 0xfd8e, "Motorola Solutions" }, - { 0xfd8d, "quip NYC Inc." }, - { 0xfd8c, "Google LLC" }, - { 0xfd8b, "Jigowatts Inc." }, - { 0xfd8a, "Signify Netherlands B.V." }, - { 0xfd89, "Urbanminded LTD" }, - { 0xfd88, "Urbanminded LTD" }, - { 0xfd87, "Google LLC" }, - { 0xfd86, "Abbott" }, - { 0xfd85, "Husqvarna AB" }, - { 0xfd84, "Tile, Inc." }, - { 0xfd83, "iNFORM Technology GmbH" }, - { 0xfd82, "Sony Corporation" }, - { 0xfd81, "CANDY HOUSE, Inc." }, - { 0xfd80, "Phindex Technologies, Inc" }, - { 0xfd7f, "Husqvarna AB" }, - { 0xfd7e, "Samsung Electronics Co., Ltd." }, - { 0xfd7d, "Center for Advanced Research Wernher Von Braun" }, - { 0xfd7c, "Toshiba Information Systems(Japan) Corporation" }, - { 0xfd7b, "WYZE LABS, INC." }, - { 0xfd7a, "Withings" }, - { 0xfd79, "Withings" }, - { 0xfd78, "Withings" }, - { 0xfd77, "Withings" }, - { 0xfd76, "Insulet Corporation" }, - { 0xfd75, "Insulet Corporation" }, - { 0xfd74, "BRControls Products BV" }, - { 0xfd73, "BRControls Products BV" }, - { 0xfd72, "Logitech International SA" }, - { 0xfd71, "GN Hearing A/S" }, - { 0xfd70, "GuangDong Oppo Mobile Telecommunications Corp., Ltd." }, - { 0xfd6f, "Apple, Inc." }, - { 0xfd6e, "Polidea sp. z o.o." }, - { 0xfd6d, "Sigma Elektro GmbH" }, - { 0xfd6c, "Samsung Electronics Co., Ltd." }, - { 0xfd6b, " rapitag GmbH" }, - { 0xfd6a, "Emerson" }, - { 0xfd69, "Samsung Electronics Co., Ltd." }, - { 0xfd68, "Ubique Innovation AG" }, - { 0xfd67, "Montblanc Simplo GmbH" }, - { 0xfd66, "Zebra Technologies Corporation" }, - { 0xfd65, "Razer Inc." }, - { 0xfd64, "INRIA" }, - { 0xfd63, "Fitbit, Inc." }, - { 0xfd62, "Fitbit, Inc." }, - { 0xfd61, "Arendi AG" }, - { 0xfd60, "Sercomm Corporation" }, - { 0xfd5f, "Oculus VR, LLC" }, - /* SDO defined */ - { 0xfffc, "AirFuel Alliance" }, - { 0xfffe, "Alliance for Wireless Power (A4WP)" }, - { 0xfffd, "Fast IDentity Online Alliance (FIDO)" }, - { } -}; - -static const struct { - const char *uuid; - const char *str; -} uuid128_table[] = { - { "a3c87500-8ed3-4bdf-8a39-a01bebede295", - "Eddystone Configuration Service" }, - { "a3c87501-8ed3-4bdf-8a39-a01bebede295", "Capabilities" }, - { "a3c87502-8ed3-4bdf-8a39-a01bebede295", "Active Slot" }, - { "a3c87503-8ed3-4bdf-8a39-a01bebede295", - "Advertising Interval" }, - { "a3c87504-8ed3-4bdf-8a39-a01bebede295", "Radio Tx Power" }, - { "a3c87505-8ed3-4bdf-8a39-a01bebede295", - "(Advanced) Advertised Tx Power" }, - { "a3c87506-8ed3-4bdf-8a39-a01bebede295", "Lock State" }, - { "a3c87507-8ed3-4bdf-8a39-a01bebede295", "Unlock" }, - { "a3c87508-8ed3-4bdf-8a39-a01bebede295", "Public ECDH Key" }, - { "a3c87509-8ed3-4bdf-8a39-a01bebede295", "EID Identity Key" }, - { "a3c8750a-8ed3-4bdf-8a39-a01bebede295", "ADV Slot Data" }, - { "a3c8750b-8ed3-4bdf-8a39-a01bebede295", - "(Advanced) Factory reset" }, - { "a3c8750c-8ed3-4bdf-8a39-a01bebede295", - "(Advanced) Remain Connectable" }, - /* BBC micro:bit Bluetooth Profiles */ - { "e95d0753-251d-470a-a062-fa1922dfa9a8", - "MicroBit Accelerometer Service" }, - { "e95dca4b-251d-470a-a062-fa1922dfa9a8", - "MicroBit Accelerometer Data" }, - { "e95dfb24-251d-470a-a062-fa1922dfa9a8", - "MicroBit Accelerometer Period" }, - { "e95df2d8-251d-470a-a062-fa1922dfa9a8", - "MicroBit Magnetometer Service" }, - { "e95dfb11-251d-470a-a062-fa1922dfa9a8", - "MicroBit Magnetometer Data" }, - { "e95d386c-251d-470a-a062-fa1922dfa9a8", - "MicroBit Magnetometer Period" }, - { "e95d9715-251d-470a-a062-fa1922dfa9a8", - "MicroBit Magnetometer Bearing" }, - { "e95d9882-251d-470a-a062-fa1922dfa9a8", - "MicroBit Button Service" }, - { "e95dda90-251d-470a-a062-fa1922dfa9a8", - "MicroBit Button A State" }, - { "e95dda91-251d-470a-a062-fa1922dfa9a8", - "MicroBit Button B State" }, - { "e95d127b-251d-470a-a062-fa1922dfa9a8", - "MicroBit IO PIN Service" }, - { "e95d8d00-251d-470a-a062-fa1922dfa9a8", "MicroBit PIN Data" }, - { "e95d5899-251d-470a-a062-fa1922dfa9a8", - "MicroBit PIN AD Configuration" }, - { "e95dd822-251d-470a-a062-fa1922dfa9a8", "MicroBit PWM Control" }, - { "e95dd91d-251d-470a-a062-fa1922dfa9a8", "MicroBit LED Service" }, - { "e95d7b77-251d-470a-a062-fa1922dfa9a8", "MicroBit LED Matrix state" }, - { "e95d93ee-251d-470a-a062-fa1922dfa9a8", "MicroBit LED Text" }, - { "e95d0d2d-251d-470a-a062-fa1922dfa9a8", "MicroBit Scrolling Delay" }, - { "e95d93af-251d-470a-a062-fa1922dfa9a8", "MicroBit Event Service" }, - { "e95db84c-251d-470a-a062-fa1922dfa9a8", "MicroBit Requirements" }, - { "e95d9775-251d-470a-a062-fa1922dfa9a8", "MicroBit Event Data" }, - { "e95d23c4-251d-470a-a062-fa1922dfa9a8", - "MicroBit Client Requirements" }, - { "e95d5404-251d-470a-a062-fa1922dfa9a8", "MicroBit Client Events" }, - { "e95d93b0-251d-470a-a062-fa1922dfa9a8", - "MicroBit DFU Control Service" }, - { "e95d93b1-251d-470a-a062-fa1922dfa9a8", "MicroBit DFU Control" }, - { "e95d6100-251d-470a-a062-fa1922dfa9a8", - "MicroBit Temperature Service" }, - { "e95d1b25-251d-470a-a062-fa1922dfa9a8", - "MicroBit Temperature Period" }, - /* Nordic UART Port Emulation */ - { "6e400001-b5a3-f393-e0a9-e50e24dcca9e", "Nordic UART Service" }, - { "6e400002-b5a3-f393-e0a9-e50e24dcca9e", "Nordic UART TX" }, - { "6e400003-b5a3-f393-e0a9-e50e24dcca9e", "Nordic UART RX" }, - { } -}; - -const char *bt_uuid16_to_str(uint16_t uuid) -{ - int i; - - for (i = 0; uuid16_table[i].str; i++) { - if (uuid16_table[i].uuid == uuid) - return uuid16_table[i].str; - } - - return "Unknown"; -} - -const char *bt_uuid32_to_str(uint32_t uuid) -{ - if ((uuid & 0xffff0000) == 0x0000) - return bt_uuid16_to_str(uuid & 0x0000ffff); - - return "Unknown"; -} - -const char *bt_uuidstr_to_str(const char *uuid) -{ - uint32_t val; - size_t len; - int i; - - if (!uuid) - return NULL; - - len = strlen(uuid); - - if (len < 36) { - char *endptr = NULL; - - val = strtol(uuid, &endptr, 0); - if (!endptr || *endptr != '\0') - return NULL; - - if (val > UINT16_MAX) - return bt_uuid32_to_str(val); - - return bt_uuid16_to_str(val); - } - - if (len != 36) - return NULL; - - for (i = 0; uuid128_table[i].str; i++) { - if (strcasecmp(uuid128_table[i].uuid, uuid) == 0) - return uuid128_table[i].str; - } - - if (strncasecmp(uuid + 8, "-0000-1000-8000-00805f9b34fb", 28)) - return "Vendor specific"; - - if (sscanf(uuid, "%08x-0000-1000-8000-00805f9b34fb", &val) != 1) - return NULL; - - return bt_uuid32_to_str(val); -} - -static const struct { - uint16_t val; - bool generic; - const char *str; -} appearance_table[] = { - { 0, true, "Unknown" }, - { 64, true, "Phone" }, - { 128, true, "Computer" }, - { 192, true, "Watch" }, - { 193, false, "Sports Watch" }, - { 256, true, "Clock" }, - { 320, true, "Display" }, - { 384, true, "Remote Control" }, - { 448, true, "Eye-glasses" }, - { 512, true, "Tag" }, - { 576, true, "Keyring" }, - { 640, true, "Media Player" }, - { 704, true, "Barcode Scanner" }, - { 768, true, "Thermometer" }, - { 769, false, "Thermometer: Ear" }, - { 832, true, "Heart Rate Sensor" }, - { 833, false, "Heart Rate Belt" }, - { 896, true, "Blood Pressure" }, - { 897, false, "Blood Pressure: Arm" }, - { 898, false, "Blood Pressure: Wrist" }, - { 960, true, "Human Interface Device" }, - { 961, false, "Keyboard" }, - { 962, false, "Mouse" }, - { 963, false, "Joystick" }, - { 964, false, "Gamepad" }, - { 965, false, "Digitizer Tablet" }, - { 966, false, "Card Reader" }, - { 967, false, "Digital Pen" }, - { 968, false, "Barcode Scanner" }, - { 1024, true, "Glucose Meter" }, - { 1088, true, "Running Walking Sensor" }, - { 1089, false, "Running Walking Sensor: In-Shoe" }, - { 1090, false, "Running Walking Sensor: On-Shoe" }, - { 1091, false, "Running Walking Sensor: On-Hip" }, - { 1152, true, "Cycling" }, - { 1153, false, "Cycling: Cycling Computer" }, - { 1154, false, "Cycling: Speed Sensor" }, - { 1155, false, "Cycling: Cadence Sensor" }, - { 1156, false, "Cycling: Power Sensor" }, - { 1157, false, "Cycling: Speed and Cadence Sensor" }, - { 1216, true, "Undefined" }, - - { 3136, true, "Pulse Oximeter" }, - { 3137, false, "Pulse Oximeter: Fingertip" }, - { 3138, false, "Pulse Oximeter: Wrist Worn" }, - { 3200, true, "Weight Scale" }, - { 3264, true, "Undefined" }, - - { 5184, true, "Outdoor Sports Activity" }, - { 5185, false, "Location Display Device" }, - { 5186, false, "Location and Navigation Display Device" }, - { 5187, false, "Location Pod" }, - { 5188, false, "Location and Navigation Pod" }, - { 5248, true, "Undefined" }, - { } -}; - -const char *bt_appear_to_str(uint16_t appearance) -{ - const char *str = NULL; - int i, type = 0; - - for (i = 0; appearance_table[i].str; i++) { - if (appearance_table[i].generic) { - if (appearance < appearance_table[i].val) - break; - type = i; - } - - if (appearance_table[i].val == appearance) { - str = appearance_table[i].str; - break; - } - } - - if (!str) - str = appearance_table[type].str; - - return str; -} - -char *strdelimit(char *str, char *del, char c) -{ - char *dup; - - if (!str) - return NULL; - - dup = strdup(str); - if (dup[0] == '\0') - return dup; - - while (del[0] != '\0') { - char *rep = dup; - - while ((rep = strchr(rep, del[0]))) - rep[0] = c; - - del++; - } - - return dup; -} - -int strsuffix(const char *str, const char *suffix) -{ - int len; - int suffix_len; - - if (!str || !suffix) - return -1; - - if (str[0] == '\0' && suffix[0] != '\0') - return -1; - - if (suffix[0] == '\0' && str[0] != '\0') - return -1; - - len = strlen(str); - suffix_len = strlen(suffix); - if (len < suffix_len) - return -1; - - return strncmp(str + len - suffix_len, suffix, suffix_len); -} diff --git a/alfred/src/ble/util.h b/alfred/src/ble/util.h deleted file mode 100644 index d6de55885..000000000 --- a/alfred/src/ble/util.h +++ /dev/null @@ -1,181 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - */ - -#include -#include -#include -#include -#include -#include - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#define BIT(n) (1 << (n)) - -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define le16_to_cpu(val) (val) -#define le32_to_cpu(val) (val) -#define le64_to_cpu(val) (val) -#define cpu_to_le16(val) (val) -#define cpu_to_le32(val) (val) -#define cpu_to_le64(val) (val) -#define be16_to_cpu(val) bswap_16(val) -#define be32_to_cpu(val) bswap_32(val) -#define be64_to_cpu(val) bswap_64(val) -#define cpu_to_be16(val) bswap_16(val) -#define cpu_to_be32(val) bswap_32(val) -#define cpu_to_be64(val) bswap_64(val) -#elif __BYTE_ORDER == __BIG_ENDIAN -#define le16_to_cpu(val) bswap_16(val) -#define le32_to_cpu(val) bswap_32(val) -#define le64_to_cpu(val) bswap_64(val) -#define cpu_to_le16(val) bswap_16(val) -#define cpu_to_le32(val) bswap_32(val) -#define cpu_to_le64(val) bswap_64(val) -#define be16_to_cpu(val) (val) -#define be32_to_cpu(val) (val) -#define be64_to_cpu(val) (val) -#define cpu_to_be16(val) (val) -#define cpu_to_be32(val) (val) -#define cpu_to_be64(val) (val) -#else -#error "Unknown byte order" -#endif - -#define get_unaligned(ptr) \ -__extension__ ({ \ - struct __attribute__((packed)) { \ - __typeof__(*(ptr)) __v; \ - } *__p = (__typeof__(__p)) (ptr); \ - __p->__v; \ -}) - -#define put_unaligned(val, ptr) \ -do { \ - struct __attribute__((packed)) { \ - __typeof__(*(ptr)) __v; \ - } *__p = (__typeof__(__p)) (ptr); \ - __p->__v = (val); \ -} while (0) - -#define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p))) -#define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u))) - -#define PTR_TO_INT(p) ((int) ((intptr_t) (p))) -#define INT_TO_PTR(u) ((void *) ((intptr_t) (u))) - -#define new0(type, count) \ - (type *) (__extension__ ({ \ - size_t __n = (size_t) (count); \ - size_t __s = sizeof(type); \ - void *__p; \ - __p = btd_malloc(__n * __s); \ - memset(__p, 0, __n * __s); \ - __p; \ - })) - -#define newa(t, n) ((t*) alloca(sizeof(t)*(n))) -#define malloc0(n) (calloc((n), 1)) - -char *strdelimit(char *str, char *del, char c); -int strsuffix(const char *str, const char *suffix); - -void *btd_malloc(size_t size); - -typedef void (*util_debug_func_t)(const char *str, void *user_data); - -void util_debug_va(util_debug_func_t function, void *user_data, - const char *format, va_list va); - -void util_debug(util_debug_func_t function, void *user_data, - const char *format, ...) - __attribute__((format(printf, 3, 4))); - -void util_hexdump(const char dir, const unsigned char *buf, size_t len, - util_debug_func_t function, void *user_data); - -unsigned char util_get_dt(const char *parent, const char *name); - -uint8_t util_get_uid(unsigned int *bitmap, uint8_t max); -void util_clear_uid(unsigned int *bitmap, uint8_t id); - -const char *bt_uuid16_to_str(uint16_t uuid); -const char *bt_uuid32_to_str(uint32_t uuid); -const char *bt_uuidstr_to_str(const char *uuid); -const char *bt_appear_to_str(uint16_t appearance); - -static inline int8_t get_s8(const void *ptr) -{ - return *((int8_t *) ptr); -} - -static inline uint8_t get_u8(const void *ptr) -{ - return *((uint8_t *) ptr); -} - -static inline uint16_t get_le16(const void *ptr) -{ - return le16_to_cpu(get_unaligned((const uint16_t *) ptr)); -} - -static inline uint16_t get_be16(const void *ptr) -{ - return be16_to_cpu(get_unaligned((const uint16_t *) ptr)); -} - -static inline uint32_t get_le32(const void *ptr) -{ - return le32_to_cpu(get_unaligned((const uint32_t *) ptr)); -} - -static inline uint32_t get_be32(const void *ptr) -{ - return be32_to_cpu(get_unaligned((const uint32_t *) ptr)); -} - -static inline uint64_t get_le64(const void *ptr) -{ - return le64_to_cpu(get_unaligned((const uint64_t *) ptr)); -} - -static inline uint64_t get_be64(const void *ptr) -{ - return be64_to_cpu(get_unaligned((const uint64_t *) ptr)); -} - -static inline void put_le16(uint16_t val, void *dst) -{ - put_unaligned(cpu_to_le16(val), (uint16_t *) dst); -} - -static inline void put_be16(uint16_t val, const void *ptr) -{ - put_unaligned(cpu_to_be16(val), (uint16_t *) ptr); -} - -static inline void put_le32(uint32_t val, void *dst) -{ - put_unaligned(cpu_to_le32(val), (uint32_t *) dst); -} - -static inline void put_be32(uint32_t val, void *dst) -{ - put_unaligned(cpu_to_be32(val), (uint32_t *) dst); -} - -static inline void put_le64(uint64_t val, void *dst) -{ - put_unaligned(cpu_to_le64(val), (uint64_t *) dst); -} - -static inline void put_be64(uint64_t val, void *dst) -{ - put_unaligned(cpu_to_be64(val), (uint64_t *) dst); -} diff --git a/alfred/src/ble/uuid.c b/alfred/src/ble/uuid.c deleted file mode 100644 index ecdaefe80..000000000 --- a/alfred/src/ble/uuid.c +++ /dev/null @@ -1,299 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2011 Nokia Corporation - * Copyright (C) 2011 Marcel Holtmann - * - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include -#include "ble/uuid.h" - -static uint128_t bluetooth_base_uuid = { - .data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB } -}; - -#define BASE_UUID16_OFFSET 2 -#define BASE_UUID32_OFFSET 0 - -static void bt_uuid16_to_uuid128(const bt_uuid_t *src, bt_uuid_t *dst) -{ - uint16_t be16; - - dst->value.u128 = bluetooth_base_uuid; - dst->type = BT_UUID128; - - /* - * No matter the system: 128-bit UUIDs should be stored - * as big-endian. 16-bit UUIDs are stored on host order. - */ - - be16 = htons(src->value.u16); - memcpy(&dst->value.u128.data[BASE_UUID16_OFFSET], &be16, sizeof(be16)); -} - -static void bt_uuid32_to_uuid128(const bt_uuid_t *src, bt_uuid_t *dst) -{ - uint32_t be32; - - dst->value.u128 = bluetooth_base_uuid; - dst->type = BT_UUID128; - - /* - * No matter the system: 128-bit UUIDs should be stored - * as big-endian. 32-bit UUIDs are stored on host order. - */ - - be32 = htonl(src->value.u32); - memcpy(&dst->value.u128.data[BASE_UUID32_OFFSET], &be32, sizeof(be32)); -} - -void bt_uuid_to_uuid128(const bt_uuid_t *src, bt_uuid_t *dst) -{ - switch (src->type) { - case BT_UUID128: - *dst = *src; - break; - case BT_UUID32: - bt_uuid32_to_uuid128(src, dst); - break; - case BT_UUID16: - bt_uuid16_to_uuid128(src, dst); - break; - case BT_UUID_UNSPEC: - default: - break; - } -} - -static int bt_uuid128_cmp(const bt_uuid_t *u1, const bt_uuid_t *u2) -{ - return memcmp(&u1->value.u128, &u2->value.u128, sizeof(uint128_t)); -} - -int bt_uuid16_create(bt_uuid_t *btuuid, uint16_t value) -{ - memset(btuuid, 0, sizeof(bt_uuid_t)); - btuuid->type = BT_UUID16; - btuuid->value.u16 = value; - - return 0; -} - -int bt_uuid32_create(bt_uuid_t *btuuid, uint32_t value) -{ - memset(btuuid, 0, sizeof(bt_uuid_t)); - btuuid->type = BT_UUID32; - btuuid->value.u32 = value; - - return 0; -} - -int bt_uuid128_create(bt_uuid_t *btuuid, uint128_t value) -{ - memset(btuuid, 0, sizeof(bt_uuid_t)); - btuuid->type = BT_UUID128; - btuuid->value.u128 = value; - - return 0; -} - -int bt_uuid_cmp(const bt_uuid_t *uuid1, const bt_uuid_t *uuid2) -{ - bt_uuid_t u1, u2; - - bt_uuid_to_uuid128(uuid1, &u1); - bt_uuid_to_uuid128(uuid2, &u2); - - return bt_uuid128_cmp(&u1, &u2); -} - -/* - * convert the UUID to string, copying a maximum of n characters. - */ -int bt_uuid_to_string(const bt_uuid_t *uuid, char *str, size_t n) -{ - bt_uuid_t tmp; - unsigned int data0; - unsigned short data1; - unsigned short data2; - unsigned short data3; - unsigned int data4; - unsigned short data5; - const uint8_t *data; - - if (!uuid || uuid->type == BT_UUID_UNSPEC) { - snprintf(str, n, "NULL"); - return -EINVAL; - } - - /* Convert to 128 Bit format */ - bt_uuid_to_uuid128(uuid, &tmp); - data = (uint8_t *) &tmp.value.u128; - - memcpy(&data0, &data[0], 4); - memcpy(&data1, &data[4], 2); - memcpy(&data2, &data[6], 2); - memcpy(&data3, &data[8], 2); - memcpy(&data4, &data[10], 4); - memcpy(&data5, &data[14], 2); - - snprintf(str, n, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x", - ntohl(data0), ntohs(data1), - ntohs(data2), ntohs(data3), - ntohl(data4), ntohs(data5)); - - return 0; -} - -static inline int is_uuid128(const char *string) -{ - return (strlen(string) == 36 && - string[8] == '-' && - string[13] == '-' && - string[18] == '-' && - string[23] == '-'); -} - -static inline int is_base_uuid128(const char *string) -{ - uint16_t uuid; - char dummy[2]; - - if (!is_uuid128(string)) - return 0; - - return sscanf(string, - "0000%04hx-0000-1000-8000-00805%1[fF]9%1[bB]34%1[fF]%1[bB]", - &uuid, dummy, dummy, dummy, dummy) == 5; -} - -static inline int is_uuid32(const char *string) -{ - return (strlen(string) == 8 || strlen(string) == 10); -} - -static inline int is_uuid16(const char *string) -{ - return (strlen(string) == 4 || strlen(string) == 6); -} - -static int bt_string_to_uuid16(bt_uuid_t *uuid, const char *string) -{ - uint16_t u16; - char *endptr = NULL; - - u16 = strtol(string, &endptr, 16); - if (endptr && (*endptr == '\0' || *endptr == '-')) { - bt_uuid16_create(uuid, u16); - return 0; - } - - return -EINVAL; -} - -static int bt_string_to_uuid32(bt_uuid_t *uuid, const char *string) -{ - uint32_t u32; - char *endptr = NULL; - - u32 = strtol(string, &endptr, 16); - if (endptr && *endptr == '\0') { - bt_uuid32_create(uuid, u32); - return 0; - } - - return -EINVAL; -} - -static int bt_string_to_uuid128(bt_uuid_t *uuid, const char *string) -{ - uint32_t data0, data4; - uint16_t data1, data2, data3, data5; - uint128_t u128; - uint8_t *val = (uint8_t *) &u128; - - if (sscanf(string, "%08x-%04hx-%04hx-%04hx-%08x%04hx", - &data0, &data1, &data2, - &data3, &data4, &data5) != 6) - return -EINVAL; - - data0 = htonl(data0); - data1 = htons(data1); - data2 = htons(data2); - data3 = htons(data3); - data4 = htonl(data4); - data5 = htons(data5); - - memcpy(&val[0], &data0, 4); - memcpy(&val[4], &data1, 2); - memcpy(&val[6], &data2, 2); - memcpy(&val[8], &data3, 2); - memcpy(&val[10], &data4, 4); - memcpy(&val[14], &data5, 2); - - bt_uuid128_create(uuid, u128); - - return 0; -} - -int bt_string_to_uuid(bt_uuid_t *uuid, const char *string) -{ - if (is_base_uuid128(string)) - return bt_string_to_uuid16(uuid, string + 4); - else if (is_uuid128(string)) - return bt_string_to_uuid128(uuid, string); - else if (is_uuid32(string)) - return bt_string_to_uuid32(uuid, string); - else if (is_uuid16(string)) - return bt_string_to_uuid16(uuid, string); - - return -EINVAL; -} - -int bt_uuid_strcmp(const void *a, const void *b) -{ - bt_uuid_t u1, u2; - - if (bt_string_to_uuid(&u1, a) < 0) - return -EINVAL; - - if (bt_string_to_uuid(&u2, b) < 0) - return -EINVAL; - - return bt_uuid_cmp(&u1, &u2); -} - -int bt_uuid_to_le(const bt_uuid_t *src, void *dst) -{ - bt_uuid_t uuid; - - switch (src->type) { - case BT_UUID16: - bt_put_le16(src->value.u16, dst); - return 0; - case BT_UUID32: - bt_uuid32_to_uuid128(src, &uuid); - src = &uuid; - /* Fallthrough */ - case BT_UUID128: - /* Convert from 128-bit BE to LE */ - bswap_128(&src->value.u128, dst); - return 0; - case BT_UUID_UNSPEC: - default: - return -EINVAL; - } -} diff --git a/alfred/src/ble/uuid.h b/alfred/src/ble/uuid.h deleted file mode 100644 index 1a4029b68..000000000 --- a/alfred/src/ble/uuid.h +++ /dev/null @@ -1,187 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2011 Nokia Corporation - * Copyright (C) 2011 Marcel Holtmann - * - * - */ - -#ifndef __BLUETOOTH_UUID_H -#define __BLUETOOTH_UUID_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define GENERIC_AUDIO_UUID "00001203-0000-1000-8000-00805f9b34fb" - -#define HSP_HS_UUID "00001108-0000-1000-8000-00805f9b34fb" -#define HSP_AG_UUID "00001112-0000-1000-8000-00805f9b34fb" - -#define HFP_HS_UUID "0000111e-0000-1000-8000-00805f9b34fb" -#define HFP_AG_UUID "0000111f-0000-1000-8000-00805f9b34fb" - -#define ADVANCED_AUDIO_UUID "0000110d-0000-1000-8000-00805f9b34fb" - -#define A2DP_SOURCE_UUID "0000110a-0000-1000-8000-00805f9b34fb" -#define A2DP_SINK_UUID "0000110b-0000-1000-8000-00805f9b34fb" - -#define AVRCP_REMOTE_UUID "0000110e-0000-1000-8000-00805f9b34fb" -#define AVRCP_TARGET_UUID "0000110c-0000-1000-8000-00805f9b34fb" - -#define PANU_UUID "00001115-0000-1000-8000-00805f9b34fb" -#define NAP_UUID "00001116-0000-1000-8000-00805f9b34fb" -#define GN_UUID "00001117-0000-1000-8000-00805f9b34fb" -#define BNEP_SVC_UUID "0000000f-0000-1000-8000-00805f9b34fb" - -#define PNPID_UUID "00002a50-0000-1000-8000-00805f9b34fb" -#define DEVICE_INFORMATION_UUID "0000180a-0000-1000-8000-00805f9b34fb" - -#define GATT_UUID "00001801-0000-1000-8000-00805f9b34fb" -#define IMMEDIATE_ALERT_UUID "00001802-0000-1000-8000-00805f9b34fb" -#define LINK_LOSS_UUID "00001803-0000-1000-8000-00805f9b34fb" -#define TX_POWER_UUID "00001804-0000-1000-8000-00805f9b34fb" -#define BATTERY_UUID "0000180f-0000-1000-8000-00805f9b34fb" -#define SCAN_PARAMETERS_UUID "00001813-0000-1000-8000-00805f9b34fb" - -#define SAP_UUID "0000112D-0000-1000-8000-00805f9b34fb" - -#define HEART_RATE_UUID "0000180d-0000-1000-8000-00805f9b34fb" -#define HEART_RATE_MEASUREMENT_UUID "00002a37-0000-1000-8000-00805f9b34fb" -#define BODY_SENSOR_LOCATION_UUID "00002a38-0000-1000-8000-00805f9b34fb" -#define HEART_RATE_CONTROL_POINT_UUID "00002a39-0000-1000-8000-00805f9b34fb" - -#define HEALTH_THERMOMETER_UUID "00001809-0000-1000-8000-00805f9b34fb" -#define TEMPERATURE_MEASUREMENT_UUID "00002a1c-0000-1000-8000-00805f9b34fb" -#define TEMPERATURE_TYPE_UUID "00002a1d-0000-1000-8000-00805f9b34fb" -#define INTERMEDIATE_TEMPERATURE_UUID "00002a1e-0000-1000-8000-00805f9b34fb" -#define MEASUREMENT_INTERVAL_UUID "00002a21-0000-1000-8000-00805f9b34fb" - -#define CYCLING_SC_UUID "00001816-0000-1000-8000-00805f9b34fb" -#define CSC_MEASUREMENT_UUID "00002a5b-0000-1000-8000-00805f9b34fb" -#define CSC_FEATURE_UUID "00002a5c-0000-1000-8000-00805f9b34fb" -#define SENSOR_LOCATION_UUID "00002a5d-0000-1000-8000-00805f9b34fb" -#define SC_CONTROL_POINT_UUID "00002a55-0000-1000-8000-00805f9b34fb" - -#define RFCOMM_UUID_STR "00000003-0000-1000-8000-00805f9b34fb" - -#define HDP_UUID "00001400-0000-1000-8000-00805f9b34fb" -#define HDP_SOURCE_UUID "00001401-0000-1000-8000-00805f9b34fb" -#define HDP_SINK_UUID "00001402-0000-1000-8000-00805f9b34fb" - -#define HID_UUID "00001124-0000-1000-8000-00805f9b34fb" -#define HOG_UUID "00001812-0000-1000-8000-00805f9b34fb" - -#define DUN_GW_UUID "00001103-0000-1000-8000-00805f9b34fb" - -#define GAP_UUID "00001800-0000-1000-8000-00805f9b34fb" -#define PNP_UUID "00001200-0000-1000-8000-00805f9b34fb" - -#define SPP_UUID "00001101-0000-1000-8000-00805f9b34fb" - -#define OBEX_SYNC_UUID "00001104-0000-1000-8000-00805f9b34fb" -#define OBEX_OPP_UUID "00001105-0000-1000-8000-00805f9b34fb" -#define OBEX_FTP_UUID "00001106-0000-1000-8000-00805f9b34fb" -#define OBEX_PCE_UUID "0000112e-0000-1000-8000-00805f9b34fb" -#define OBEX_PSE_UUID "0000112f-0000-1000-8000-00805f9b34fb" -#define OBEX_PBAP_UUID "00001130-0000-1000-8000-00805f9b34fb" -#define OBEX_MAS_UUID "00001132-0000-1000-8000-00805f9b34fb" -#define OBEX_MNS_UUID "00001133-0000-1000-8000-00805f9b34fb" -#define OBEX_MAP_UUID "00001134-0000-1000-8000-00805f9b34fb" - -/* GATT UUIDs section */ -#define GATT_PRIM_SVC_UUID 0x2800 -#define GATT_SND_SVC_UUID 0x2801 -#define GATT_INCLUDE_UUID 0x2802 -#define GATT_CHARAC_UUID 0x2803 - -/* GATT Characteristic Types */ -#define GATT_CHARAC_DEVICE_NAME 0x2A00 -#define GATT_CHARAC_APPEARANCE 0x2A01 -#define GATT_CHARAC_PERIPHERAL_PRIV_FLAG 0x2A02 -#define GATT_CHARAC_RECONNECTION_ADDRESS 0x2A03 -#define GATT_CHARAC_PERIPHERAL_PREF_CONN 0x2A04 -#define GATT_CHARAC_SERVICE_CHANGED 0x2A05 -#define GATT_CHARAC_BATTERY_LEVEL 0x2A19 -#define GATT_CHARAC_SYSTEM_ID 0x2A23 -#define GATT_CHARAC_MODEL_NUMBER_STRING 0x2A24 -#define GATT_CHARAC_SERIAL_NUMBER_STRING 0x2A25 -#define GATT_CHARAC_FIRMWARE_REVISION_STRING 0x2A26 -#define GATT_CHARAC_HARDWARE_REVISION_STRING 0x2A27 -#define GATT_CHARAC_SOFTWARE_REVISION_STRING 0x2A28 -#define GATT_CHARAC_MANUFACTURER_NAME_STRING 0x2A29 -#define GATT_CHARAC_PNP_ID 0x2A50 - -/* GATT Characteristic Descriptors */ -#define GATT_CHARAC_EXT_PROPER_UUID 0x2900 -#define GATT_CHARAC_USER_DESC_UUID 0x2901 -#define GATT_CLIENT_CHARAC_CFG_UUID 0x2902 -#define GATT_SERVER_CHARAC_CFG_UUID 0x2903 -#define GATT_CHARAC_FMT_UUID 0x2904 -#define GATT_CHARAC_AGREG_FMT_UUID 0x2905 -#define GATT_CHARAC_VALID_RANGE_UUID 0x2906 -#define GATT_EXTERNAL_REPORT_REFERENCE 0x2907 -#define GATT_REPORT_REFERENCE 0x2908 - -/* GATT Mesh Services */ -#define MESH_PROV_SVC_UUID "00001827-0000-1000-8000-00805f9b34fb" -#define MESH_PROXY_SVC_UUID "00001828-0000-1000-8000-00805f9b34fb" - -/* GATT Mesh Characteristic Types */ -#define MESH_PROVISIONING_DATA_IN 0x2ADB -#define MESH_PROVISIONING_DATA_OUT 0x2ADC -#define MESH_PROXY_DATA_IN 0x2ADD -#define MESH_PROXY_DATA_OUT 0x2ADE - -/* GATT Caching attributes */ -#define GATT_CHARAC_CLI_FEAT 0x2B29 -#define GATT_CHARAC_DB_HASH 0x2B2A - -/* GATT Server Supported features */ -#define GATT_CHARAC_SERVER_FEAT 0x2B3A - -typedef struct { - enum { - BT_UUID_UNSPEC = 0, - BT_UUID16 = 16, - BT_UUID32 = 32, - BT_UUID128 = 128, - } type; - union { - uint16_t u16; - uint32_t u32; - uint128_t u128; - } value; -} bt_uuid_t; - -int bt_uuid_strcmp(const void *a, const void *b); - -int bt_uuid16_create(bt_uuid_t *btuuid, uint16_t value); -int bt_uuid32_create(bt_uuid_t *btuuid, uint32_t value); -int bt_uuid128_create(bt_uuid_t *btuuid, uint128_t value); - -int bt_uuid_cmp(const bt_uuid_t *uuid1, const bt_uuid_t *uuid2); -void bt_uuid_to_uuid128(const bt_uuid_t *src, bt_uuid_t *dst); - -#define MAX_LEN_UUID_STR 37 - -int bt_uuid_to_string(const bt_uuid_t *uuid, char *str, size_t n); -int bt_string_to_uuid(bt_uuid_t *uuid, const char *string); - -int bt_uuid_to_le(const bt_uuid_t *uuid, void *dst); - -static inline int bt_uuid_len(const bt_uuid_t *uuid) -{ - return uuid->type / 8; -} - -#ifdef __cplusplus -} -#endif - -#endif /* __BLUETOOTH_UUID_H */ diff --git a/alfred/src/cbuf.cpp b/alfred/src/cbuf.cpp deleted file mode 100644 index 8ba96d0d5..000000000 --- a/alfred/src/cbuf.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - cbuf.cpp - Circular buffer implementation - Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. - This file is part of the esp8266 core for Arduino environment. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "cbuf.h" -#include "Arduino.h" - -cbuf::cbuf(size_t size) : - _size(size), _buf(new char[size]), _bufend(_buf + size), _begin(_buf), _end(_begin) { -} - -cbuf::~cbuf() { - delete[] _buf; -} - -size_t cbuf::getSize() const { - if(_end >= _begin) { - return _end - _begin; - } - return _size - (_begin - _end); -} - -size_t cbuf::room() const { - if(_end >= _begin) { - return _size - (_end - _begin) - 1; - } - return _begin - _end - 1; -} - -bool cbuf::empty() const { - return _begin == _end; -} - -bool cbuf::full() const { - return wrap_if_bufend(_end + 1) == _begin; -} - -int cbuf::peek() { - if(empty()) return -1; - - return static_cast(*_begin); -} - -size_t cbuf::read(char* dst, size_t size) { - size_t bytes_available = getSize(); - size_t size_to_read = (size < bytes_available) ? size : bytes_available; - size_t size_read = size_to_read; - if(_end < _begin && size_to_read > (size_t)(_bufend - _begin)) { - size_t top_size = _bufend - _begin; - memcpy(dst, _begin, top_size); - _begin = _buf; - size_to_read -= top_size; - dst += top_size; - } - memcpy(dst, _begin, size_to_read); - _begin = wrap_if_bufend(_begin + size_to_read); - return size_read; -} - -int cbuf::read() { - if(empty()) return -1; - - char result = *_begin; - _begin = wrap_if_bufend(_begin + 1); - return static_cast(result); -} - -size_t cbuf::write(const char* src, size_t size) { - size_t bytes_available = room(); - size_t size_to_write = (size < bytes_available) ? size : bytes_available; - size_t size_written = size_to_write; - if(_end >= _begin && size_to_write > (size_t)(_bufend - _end)) { - size_t top_size = _bufend - _end; - memcpy(_end, src, top_size); - _end = _buf; - size_to_write -= top_size; - src += top_size; - } - memcpy(_end, src, size_to_write); - _end = wrap_if_bufend(_end + size_to_write); - return size_written; -} - -size_t cbuf::write(char c) { - if(full()) return 0; - - *_end = c; - _end = wrap_if_bufend(_end + 1); - return 1; -} - -void cbuf::flush() { - _begin = _buf; - _end = _buf; -} - -char* cbuf::wrap_if_bufend(char* ptr) const { - return (ptr == _bufend) ? _buf : ptr; -} diff --git a/alfred/src/cbuf.h b/alfred/src/cbuf.h deleted file mode 100644 index 4d52da398..000000000 --- a/alfred/src/cbuf.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - cbuf.h - Circular buffer implementation - */ - -#ifndef __cbuf_h -#define __cbuf_h - -#include -#include -#include - -class cbuf { - public: - cbuf(size_t size); - ~cbuf(); - size_t getSize() const; - size_t room() const ; - bool empty() const ; - bool full() const ; - int peek() ; - int read(); - size_t read(char* dst, size_t size); - size_t write(char c); - size_t write(const char* src, size_t size); - void flush(); - - private: - const size_t _size; - char* _buf; - const char* const _bufend; - char* _begin; - char* _end; - - char* wrap_if_bufend(char* ptr) const ; -}; - -#endif//__cbuf_h diff --git a/alfred/src/libb64/AUTHORS b/alfred/src/libb64/AUTHORS deleted file mode 100644 index af6873756..000000000 --- a/alfred/src/libb64/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -libb64: Base64 Encoding/Decoding Routines -====================================== - -Authors: -------- - -Chris Venter chris.venter@gmail.com http://rocketpod.blogspot.com diff --git a/alfred/src/libb64/LICENSE b/alfred/src/libb64/LICENSE deleted file mode 100644 index a6b56069e..000000000 --- a/alfred/src/libb64/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -Copyright-Only Dedication (based on United States law) -or Public Domain Certification - -The person or persons who have associated work with this document (the -"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of -his knowledge, the work of authorship identified is in the public domain of the -country from which the work is published, or (b) hereby dedicates whatever -copyright the dedicators holds in the work of authorship identified below (the -"Work") to the public domain. A certifier, moreover, dedicates any copyright -interest he may have in the associated work, and for these purposes, is -described as a "dedicator" below. - -A certifier has taken reasonable steps to verify the copyright status of this -work. Certifier recognizes that his good faith efforts may not shield him from -liability if in fact the work certified is not in the public domain. - -Dedicator makes this dedication for the benefit of the public at large and to -the detriment of the Dedicator's heirs and successors. Dedicator intends this -dedication to be an overt act of relinquishment in perpetuity of all present -and future rights under copyright law, whether vested or contingent, in the -Work. Dedicator understands that such relinquishment of all rights includes -the relinquishment of all rights to enforce (by lawsuit or otherwise) those -copyrights in the Work. - -Dedicator recognizes that, once placed in the public domain, the Work may be -freely reproduced, distributed, transmitted, used, modified, built upon, or -otherwise exploited by anyone for any purpose, commercial or non-commercial, -and in any way, including by methods that have not yet been invented or -conceived. \ No newline at end of file diff --git a/alfred/src/libb64/cdecode.c b/alfred/src/libb64/cdecode.c deleted file mode 100644 index aa84ef60a..000000000 --- a/alfred/src/libb64/cdecode.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -cdecoder.c - c source to a base64 decoding algorithm implementation - -This is part of the libb64 project, and has been placed in the public domain. -For details, see http://sourceforge.net/projects/libb64 -*/ - -#include "cdecode.h" -#include - -static int base64_decode_value_signed(int8_t value_in){ - static const int8_t decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; - static const int8_t decoding_size = sizeof(decoding); - value_in -= 43; - if (value_in < 0 || value_in > decoding_size) return -1; - return decoding[(int)value_in]; -} - -void base64_init_decodestate(base64_decodestate* state_in){ - state_in->step = step_a; - state_in->plainchar = 0; -} - -static int base64_decode_block_signed(const int8_t* code_in, const int length_in, int8_t* plaintext_out, base64_decodestate* state_in){ - const int8_t* codechar = code_in; - int8_t* plainchar = plaintext_out; - int8_t fragment; - - *plainchar = state_in->plainchar; - - switch (state_in->step){ - while (1){ - case step_a: - do { - if (codechar == code_in+length_in){ - state_in->step = step_a; - state_in->plainchar = *plainchar; - return plainchar - plaintext_out; - } - fragment = (int8_t)base64_decode_value_signed(*codechar++); - } while (fragment < 0); - *plainchar = (fragment & 0x03f) << 2; - case step_b: - do { - if (codechar == code_in+length_in){ - state_in->step = step_b; - state_in->plainchar = *plainchar; - return plainchar - plaintext_out; - } - fragment = (int8_t)base64_decode_value_signed(*codechar++); - } while (fragment < 0); - *plainchar++ |= (fragment & 0x030) >> 4; - *plainchar = (fragment & 0x00f) << 4; - case step_c: - do { - if (codechar == code_in+length_in){ - state_in->step = step_c; - state_in->plainchar = *plainchar; - return plainchar - plaintext_out; - } - fragment = (int8_t)base64_decode_value_signed(*codechar++); - } while (fragment < 0); - *plainchar++ |= (fragment & 0x03c) >> 2; - *plainchar = (fragment & 0x003) << 6; - case step_d: - do { - if (codechar == code_in+length_in){ - state_in->step = step_d; - state_in->plainchar = *plainchar; - return plainchar - plaintext_out; - } - fragment = (int8_t)base64_decode_value_signed(*codechar++); - } while (fragment < 0); - *plainchar++ |= (fragment & 0x03f); - } - } - /* control should not reach here */ - return plainchar - plaintext_out; -} - -static int base64_decode_chars_signed(const int8_t* code_in, const int length_in, int8_t* plaintext_out){ - base64_decodestate _state; - base64_init_decodestate(&_state); - int len = base64_decode_block_signed(code_in, length_in, plaintext_out, &_state); - if(len > 0) plaintext_out[len] = 0; - return len; -} - -int base64_decode_value(char value_in){ - return base64_decode_value_signed(*((int8_t *) &value_in)); -} - -int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in){ - return base64_decode_block_signed((int8_t *) code_in, length_in, (int8_t *) plaintext_out, state_in); -} - -int base64_decode_chars(const char* code_in, const int length_in, char* plaintext_out){ - return base64_decode_chars_signed((int8_t *) code_in, length_in, (int8_t *) plaintext_out); -} diff --git a/alfred/src/libb64/cdecode.h b/alfred/src/libb64/cdecode.h deleted file mode 100644 index 8590ec1a7..000000000 --- a/alfred/src/libb64/cdecode.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -cdecode.h - c header for a base64 decoding algorithm - -*/ - -#ifndef BASE64_CDECODE_H -#define BASE64_CDECODE_H - -#define base64_decode_expected_len(n) ((n * 3) / 4) - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - step_a, step_b, step_c, step_d -} base64_decodestep; - -typedef struct { - base64_decodestep step; - char plainchar; -} base64_decodestate; - -void base64_init_decodestate(base64_decodestate* state_in); - -int base64_decode_value(char value_in); - -int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in); - -int base64_decode_chars(const char* code_in, const int length_in, char* plaintext_out); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* BASE64_CDECODE_H */ diff --git a/alfred/src/libb64/cencode.c b/alfred/src/libb64/cencode.c deleted file mode 100644 index 48a0d30b7..000000000 --- a/alfred/src/libb64/cencode.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -cencoder.c - c source to a base64 encoding algorithm implementation - -This is part of the libb64 project, and has been placed in the public domain. -For details, see http://sourceforge.net/projects/libb64 -*/ - -#include "cencode.h" - -void base64_init_encodestate(base64_encodestate* state_in) -{ - state_in->step = step_A; - state_in->result = 0; -} - -char base64_encode_value(char value_in) -{ - static const char* encoding = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - if (value_in > 63) { - return '='; - } - return encoding[(int)value_in]; -} - -int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in) -{ - const char* plainchar = plaintext_in; - const char* const plaintextend = plaintext_in + length_in; - char* codechar = code_out; - char result; - char fragment; - - result = state_in->result; - - switch (state_in->step) { - while (1) { - case step_A: - if (plainchar == plaintextend) { - state_in->result = result; - state_in->step = step_A; - return codechar - code_out; - } - fragment = *plainchar++; - result = (fragment & 0x0fc) >> 2; - *codechar++ = base64_encode_value(result); - result = (fragment & 0x003) << 4; - case step_B: - if (plainchar == plaintextend) { - state_in->result = result; - state_in->step = step_B; - return codechar - code_out; - } - fragment = *plainchar++; - result |= (fragment & 0x0f0) >> 4; - *codechar++ = base64_encode_value(result); - result = (fragment & 0x00f) << 2; - case step_C: - if (plainchar == plaintextend) { - state_in->result = result; - state_in->step = step_C; - return codechar - code_out; - } - fragment = *plainchar++; - result |= (fragment & 0x0c0) >> 6; - *codechar++ = base64_encode_value(result); - result = (fragment & 0x03f) >> 0; - *codechar++ = base64_encode_value(result); - } - } - /* control should not reach here */ - return codechar - code_out; -} - -int base64_encode_blockend(char* code_out, base64_encodestate* state_in) -{ - char* codechar = code_out; - - switch (state_in->step) { - case step_B: - *codechar++ = base64_encode_value(state_in->result); - *codechar++ = '='; - *codechar++ = '='; - break; - case step_C: - *codechar++ = base64_encode_value(state_in->result); - *codechar++ = '='; - break; - case step_A: - break; - } - *codechar = 0x00; - - return codechar - code_out; -} - -int base64_encode_chars(const char* plaintext_in, int length_in, char* code_out) -{ - base64_encodestate _state; - base64_init_encodestate(&_state); - int len = base64_encode_block(plaintext_in, length_in, code_out, &_state); - return len + base64_encode_blockend((code_out + len), &_state); -} diff --git a/alfred/src/libb64/cencode.h b/alfred/src/libb64/cencode.h deleted file mode 100644 index be9b6e3f0..000000000 --- a/alfred/src/libb64/cencode.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -cencode.h - c header for a base64 encoding algorithm - -*/ - -#ifndef BASE64_CENCODE_H -#define BASE64_CENCODE_H - -#define base64_encode_expected_len(n) ((((4 * n) / 3) + 3) & ~3) - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - step_A, step_B, step_C -} base64_encodestep; - -typedef struct { - base64_encodestep step; - char result; - int stepcount; -} base64_encodestate; - -void base64_init_encodestate(base64_encodestate* state_in); - -char base64_encode_value(char value_in); - -int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in); - -int base64_encode_blockend(char* code_out, base64_encodestate* state_in); - -int base64_encode_chars(const char* plaintext_in, int length_in, char* code_out); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* BASE64_CENCODE_H */ diff --git a/alfred/src/pgmspace.h b/alfred/src/pgmspace.h deleted file mode 100644 index 1385fd3c3..000000000 --- a/alfred/src/pgmspace.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef PGMSPACE_INCLUDE -#define PGMSPACE_INCLUDE - -typedef char __FlashStringHelper; -#define PROGMEM -#define PSTR(s) (s) -#define F(string_literal) (reinterpret_cast(PSTR(string_literal))) - -#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) -#define pgm_read_word(addr) (*(const unsigned short *)(addr)) -#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) -#define pgm_read_float(addr) (*(const float *)(addr)) - -#define pgm_read_byte_near(addr) pgm_read_byte(addr) -#define pgm_read_word_near(addr) pgm_read_word(addr) -#define pgm_read_dword_near(addr) pgm_read_dword(addr) -#define pgm_read_float_near(addr) pgm_read_float(addr) -#define pgm_read_byte_far(addr) pgm_read_byte(addr) -#define pgm_read_word_far(addr) pgm_read_word(addr) -#define pgm_read_dword_far(addr) pgm_read_dword(addr) -#define pgm_read_float_far(addr) pgm_read_float(addr) - -#define memcpy_P(to,from,len) memcpy(to,from,len) -#endif diff --git a/alfred/src/stdlib_noniso.cpp b/alfred/src/stdlib_noniso.cpp deleted file mode 100644 index db6d0c7f7..000000000 --- a/alfred/src/stdlib_noniso.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* - noniso.cpp - replacements for non-ISO functions used by Arduino core - Copyright � 2016 Ivan Grokhotkov - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - */ - - -#include -#include -#include -#include -#include -#include "stdlib_noniso.h" - -void reverse(char* begin, char* end) { - char *is = begin; - char *ie = end - 1; - while(is < ie) { - char tmp = *ie; - *ie = *is; - *is = tmp; - ++is; - --ie; - } -} - -char* ltoa(long value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - long quotient = abs(value); - - do { - const long tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - // Apply negative sign - if(value < 0) - *out++ = '-'; - - reverse(result, out); - *out = 0; - return result; -} - -char* ultoa(unsigned long value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - unsigned long quotient = value; - - do { - const unsigned long tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - reverse(result, out); - *out = 0; - return result; -} - -char * dtostrf(double number, signed char width, unsigned char prec, char *s) { - bool negative = false; - - if (isnan(number)) { - strcpy(s, "nan"); - return s; - } - if (isinf(number)) { - strcpy(s, "inf"); - return s; - } - - char* out = s; - - int fillme = width; // how many cells to fill for the integer part - if (prec > 0) { - fillme -= (prec+1); - } - - // Handle negative numbers - if (number < 0.0) { - negative = true; - fillme--; - number = -number; - } - - // Round correctly so that print(1.999, 2) prints as "2.00" - // I optimized out most of the divisions - double rounding = 2.0; - for (uint8_t i = 0; i < prec; ++i) - rounding *= 10.0; - rounding = 1.0 / rounding; - - number += rounding; - - // Figure out how big our number really is - double tenpow = 1.0; - int digitcount = 1; - while (number >= 10.0 * tenpow) { - tenpow *= 10.0; - digitcount++; - } - - number /= tenpow; - fillme -= digitcount; - - // Pad unused cells with spaces - while (fillme-- > 0) { - *out++ = ' '; - } - - // Handle negative sign - if (negative) *out++ = '-'; - - // Print the digits, and if necessary, the decimal point - digitcount += prec; - int8_t digit = 0; - while (digitcount-- > 0) { - digit = (int8_t)number; - if (digit > 9) digit = 9; // insurance - *out++ = (char)('0' | digit); - if ((digitcount == prec) && (prec > 0)) { - *out++ = '.'; - } - number -= digit; - number *= 10.0; - } - - // make sure the string is terminated - *out = 0; - return s; -} - -char* utoa(unsigned value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - unsigned quotient = value; - - do { - const unsigned tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - reverse(result, out); - *out = 0; - return result; -} - -char* itoa(int value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - int quotient = abs(value); - - do { - const int tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - // Apply negative sign - if(value < 0) - *out++ = '-'; - - reverse(result, out); - *out = 0; - return result; -} - - diff --git a/alfred/src/stdlib_noniso.h b/alfred/src/stdlib_noniso.h deleted file mode 100644 index 7e5aaf6c2..000000000 --- a/alfred/src/stdlib_noniso.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - stdlib_noniso.h - nonstandard (but usefull) conversion functions -*/ - -#ifndef STDLIB_NONISO_H -#define STDLIB_NONISO_H - -#ifdef __cplusplus -extern "C"{ -#endif - -char* itoa (int val, char *s, int radix); - -char* ltoa (long val, char *s, int radix); - -char* utoa (unsigned int val, char *s, int radix); - -char* ultoa (unsigned long val, char *s, int radix); - -char* dtostrf (double val, signed char width, unsigned char prec, char *s); - -void reverse(char* begin, char* end); - -#ifdef __cplusplus -} // extern "C" -#endif - - -#endif - diff --git a/alfred/src/utility/debug.h b/alfred/src/utility/debug.h deleted file mode 100644 index 4ab4b8e8c..000000000 --- a/alfred/src/utility/debug.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - debug.h - Library for Arduino Wifi shield. -*/ - - -#ifndef Debug_H -#define Debug_H - -#include -#include - -#define PRINT_FILE_LINE() do { \ - Serial.print("[");Serial.print(__FILE__); \ - Serial.print("::");Serial.print(__LINE__);Serial.print("]");\ -}while (0); - -#ifdef _DEBUG_ - -#define INFO(format, args...) do { \ - char buf[250]; \ - sprintf(buf, format, args); \ - Serial.println(buf); \ -} while(0); - -#define INFO1(x) do { PRINT_FILE_LINE() Serial.print("-I-");\ - Serial.println(x); \ -}while (0); - - -#define INFO2(x,y) do { PRINT_FILE_LINE() Serial.print("-I-");\ - Serial.print(x,16);Serial.print(",");Serial.println(y,16); \ -}while (0); - - -#else -#define INFO1(x) do {} while(0); -#define INFO2(x,y) do {} while(0); -#define INFO(format, args...) do {} while(0); -#endif - -#if 0 -#define WARN(args) do { PRINT_FILE_LINE() \ - Serial.print("-W-"); Serial.println(args); \ -}while (0); -#else -#define WARN(args) do {} while (0); -#endif - -#if _DEBUG_SPI_ -#define DBG_PIN2 5 -#define DBG_PIN 4 - -#define START() digitalWrite(DBG_PIN2, HIGH); -#define END() digitalWrite(DBG_PIN2, LOW); -#define SET_TRIGGER() digitalWrite(DBG_PIN, HIGH); -#define RST_TRIGGER() digitalWrite(DBG_PIN, LOW); - -#define INIT_TRIGGER() pinMode(DBG_PIN, OUTPUT); \ - pinMode(DBG_PIN2, OUTPUT); \ - RST_TRIGGER() -#define TOGGLE_TRIGGER() SET_TRIGGER() \ - delayMicroseconds(2); \ - RST_TRIGGER() -#else -#define START() -#define END() -#define SET_TRIGGER() -#define RST_TRIGGER() -#define INIT_TRIGGER() -#define TOGGLE_TRIGGER() -#endif - -#endif diff --git a/alfred/src/utility/util.h b/alfred/src/utility/util.h deleted file mode 100644 index 33d32a97e..000000000 --- a/alfred/src/utility/util.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef UTIL_H -#define UTIL_H - -#define htons(x) ( ((x)<< 8 & 0xFF00) | \ - ((x)>> 8 & 0x00FF) ) -#define ntohs(x) htons(x) - -#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ - ((x)<< 8 & 0x00FF0000UL) | \ - ((x)>> 8 & 0x0000FF00UL) | \ - ((x)>>24 & 0x000000FFUL) ) -#define ntohl(x) htonl(x) - -#endif diff --git a/alfred/src/utility/wl_definitions.h b/alfred/src/utility/wl_definitions.h deleted file mode 100644 index c364e4214..000000000 --- a/alfred/src/utility/wl_definitions.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - wl_definitions.h - Library for Arduino Wifi shield. -*/ - -#ifndef WL_DEFINITIONS_H_ -#define WL_DEFINITIONS_H_ - -// Maximum size of a SSID -#define WL_SSID_MAX_LENGTH 32 -// Length of passphrase. Valid lengths are 8-63. -#define WL_WPA_KEY_MAX_LENGTH 63 -// Length of key in bytes. Valid values are 5 and 13. -#define WL_WEP_KEY_MAX_LENGTH 13 -// Size of a MAC-address or BSSID -#define WL_MAC_ADDR_LENGTH 6 -// Size of a MAC-address or BSSID -#define WL_IPV4_LENGTH 4 -// Maximum size of a SSID list -#define WL_NETWORKS_LIST_MAXNUM 10 -// Maxmium number of socket -#define MAX_SOCK_NUM 4 -// Socket not available constant -#define SOCK_NOT_AVAIL 255 -// Default state value for Wifi state field -#define NA_STATE -1 -//Maximum number of attempts to establish wifi connection -#define WL_MAX_ATTEMPT_CONNECTION 10 - -typedef enum { - WL_NO_SHIELD = 255, - WL_IDLE_STATUS = 0, - WL_NO_SSID_AVAIL, - WL_SCAN_COMPLETED, - WL_CONNECTED, - WL_CONNECT_FAILED, - WL_CONNECTION_LOST, - WL_DISCONNECTED -} wl_status_t; - -/* Encryption modes */ -enum wl_enc_type { /* Values map to 802.11 encryption suites... */ - ENC_TYPE_WEP = 5, - ENC_TYPE_TKIP = 2, - ENC_TYPE_CCMP = 4, - /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ - ENC_TYPE_NONE = 7, - ENC_TYPE_AUTO = 8 -}; - - -#endif /* WL_DEFINITIONS_H_ */ diff --git a/alfred/src/utility/wl_types.h b/alfred/src/utility/wl_types.h deleted file mode 100644 index a430908c3..000000000 --- a/alfred/src/utility/wl_types.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - wl_types.h - Library for Arduino Wifi shield. -*/ - -#ifndef _WL_TYPES_H_ -#define _WL_TYPES_H_ - -#include - -typedef enum { - WL_FAILURE = -1, - WL_SUCCESS = 1, -} wl_error_code_t; - -/* Authentication modes */ -enum wl_auth_mode { - AUTH_MODE_INVALID, - AUTH_MODE_AUTO, - AUTH_MODE_OPEN_SYSTEM, - AUTH_MODE_SHARED_KEY, - AUTH_MODE_WPA, - AUTH_MODE_WPA2, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA2_PSK -}; - -#endif //_WL_TYPES_H_ diff --git a/alfred/src/wiring.c b/alfred/src/wiring.c deleted file mode 100644 index ee32ddda8..000000000 --- a/alfred/src/wiring.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - Arduino.c - Registers initialization for Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define ARDUINO_MAIN -#include -#include "Arduino.h" - - -void sleepMicroseconds(uint32_t m){ - usleep(m); -} - -void delay(uint32_t m){ - usleep(m * 1000); -} - -void delayMicroseconds(uint32_t m){ - usleep(m); -} - -void analogReference(uint8_t mode __attribute__((unused))){} -int analogRead(uint8_t pin __attribute__((unused))){ return 0; } - -/* - * CORE INIT AND CLOSE - * - * */ - - - -void uninit(){ -} - -/** - * @return Return 0 on success and not 1 on failure. - */ -int init(){ - srand(time(NULL)); - return 0; -} - diff --git a/alfred/src/wiring_digital.c b/alfred/src/wiring_digital.c deleted file mode 100644 index cddc554df..000000000 --- a/alfred/src/wiring_digital.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for Linux -*/ - -#include "Arduino.h" - -#include -#include -#include -#include -#include -#include -#include -#include - - -// https://www.kernel.org/doc/Documentation/gpio/sysfs.txt -// https://github.com/embeddedarm/ts4900-utils/blob/master/src/gpiolib.c - -int gpio_export(int gpio) -{ - int efd; - char buf[50]; - int gpiofd, ret; - - /* Quick test if it has already been exported */ - sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); - efd = open(buf, O_WRONLY); - if(efd != -1) { - // already exported - close(efd); - return 0; - } - - efd = open("/sys/class/gpio/export", O_WRONLY | O_SYNC); - - if(efd != -1) { - sprintf(buf, "%d", gpio); - ret = write(efd, buf, strlen(buf)); - if(ret < 0) { - perror("error: GPIO export failed"); - return -2; - } - close(efd); - } else { - // If we can't open the export file, we probably - // dont have any gpio permissions - perror("error: no GPIO permission"); - return -1; - } - return 0; -} - - -void gpio_unexport(int gpio) -{ - int gpiofd, ret; - char buf[50]; - gpiofd = open("/sys/class/gpio/unexport", O_WRONLY | O_SYNC); - sprintf(buf, "%d", gpio); - ret = write(gpiofd, buf, strlen(buf)); - close(gpiofd); -} - -int gpio_getfd(int gpio) -{ - char in[3] = {0, 0, 0}; - char buf[50]; - int gpiofd; - sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); - gpiofd = open(buf, O_RDWR | O_SYNC); - if(gpiofd < 0) { - fprintf(stderr, "Failed to open gpio %d value\n", gpio); - perror("gpio failed"); - } - - return gpiofd; -} - - -int gpio_setedge(int gpio, int rising, int falling) -{ - int ret = 0; - char buf[50]; - sprintf(buf, "/sys/class/gpio/gpio%d/edge", gpio); - int gpiofd = open(buf, O_WRONLY); - if(gpiofd < 0) { - perror("Couldn't open IRQ file"); - ret = -1; - } - - if(gpiofd && rising && falling) { - if(4 != write(gpiofd, "both", 4)) { - perror("Failed to set IRQ to both falling & rising"); - ret = -2; - } - } else { - if(rising && gpiofd) { - if(6 != write(gpiofd, "rising", 6)) { - perror("Failed to set IRQ to rising"); - ret = -2; - } - } else if(falling && gpiofd) { - if(7 != write(gpiofd, "falling", 7)) { - perror("Failed to set IRQ to falling"); - ret = -3; - } - } - } - - close(gpiofd); -} - - -// --------------------------------------------------- - -void pinMode(uint8_t gpio, uint8_t mode){ - printf("skipping pinMode: %d\n", gpio); - return; - gpio_export(gpio); - int ret = 0; - char buf[50]; - sprintf(buf, "/sys/class/gpio/gpio%d/direction", gpio); - int gpiofd = open(buf, O_WRONLY | O_SYNC); - if(gpiofd < 0) { - perror("Couldn't open direction file"); - ret = -1; - } - if((mode == OUTPUT) && (gpiofd)){ - if (4 != write(gpiofd, "out", 4)) { - fprintf(stderr, "Couldn't set GPIO %d direction to out: %s\n", - gpio, - strerror(errno)); - ret = -2; - } - } else if(gpiofd) { - if(2 != write(gpiofd, "in", 2)) { - fprintf(stderr, "Couldn't set GPIO %d direction to in: %s\n", - gpio, - strerror(errno)); - ret = -3; - } - } - - close(gpiofd); - //return ret; -} - -void digitalWrite(uint8_t gpio, uint8_t val){ - //printf("skipping digitalWrite: %d\n", gpio); - //return; - char buf[50]; - int nread, ret, gpiofd; - sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); - gpiofd = open(buf, O_RDWR); - if(gpiofd > 0) { - snprintf(buf, 2, "%d", val ? 1 : 0); - ret = write(gpiofd, buf, 2); - if(ret < 0) { - perror("failed to set gpio"); - return; - //return 1; - } - close(gpiofd); - //if(ret == 2) return 0; - } - //return 1; -} - -int digitalRead(uint8_t gpio){ - //printf("skipping digitalRead: %d\n", gpio); - //return 0; - char in[3] = {0, 0, 0}; - char buf[50]; - int nread, gpiofd; - sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); - gpiofd = open(buf, O_RDWR | O_SYNC); - if(gpiofd < 0) { - fprintf(stderr, "Failed to open gpio %d value\n", gpio); - perror("gpio failed"); - } - - do { - nread = read(gpiofd, in, 1); - } while (nread == 0); - if(nread == -1){ - perror("GPIO Read failed"); - return -1; - } - - close(gpiofd); - return atoi(in); -} - diff --git a/alfred/src/wiring_int.c b/alfred/src/wiring_int.c deleted file mode 100644 index a526373cf..000000000 --- a/alfred/src/wiring_int.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for the Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" - -#define _BV(a) (1 << (a)) - - -typedef struct { - uint8_t mode; - void (*fn)(void); -} isr_handler_t; - -pthread_t _pin_isr_thread; -static isr_handler_t isr_handlers[64]; -static volatile uint64_t _pin_isr_reg = 0; -static volatile uint64_t _pin_isr_last = 0; - -void *isr_executor_task(void *isr_num){ - isr_handler_t *handler = &isr_handlers[*((int*)isr_num)]; - handler->fn(); - pthread_exit(NULL); -} - -void *_isr_check_task(void *arg __attribute__((unused))){ - while(_pin_isr_reg != 0){ - uint64_t state = 0; //GPLEV0; - if(_pin_isr_reg >> 32) { - //state |= (uint64_t)GPLEV1 << 32; - } - state &= _pin_isr_reg; - int i = 0; - uint32_t changed = state ^ _pin_isr_last; - if(changed){ - _pin_isr_last = state; - while(changed){ - while(!(changed & _BV(i))) { - i++; - } - changed &= ~_BV(i); - isr_handler_t *handler = &isr_handlers[i]; - if((state & _BV(i)) == 0 && (handler->mode == FALLING || handler->mode == CHANGE) && handler->fn) { - thread_create(isr_executor_task, (void *)i); - } else if((state & _BV(i)) != 0 && (handler->mode == RISING || handler->mode == CHANGE) && handler->fn) { - thread_create(isr_executor_task, (void *)i); - } - } - } - if(_pin_isr_reg > 0) - usleep(100); - } - pthread_exit(NULL); -} - -void attachInterrupt(uint8_t pin, void (*userFunc)(void), int mode) { - return; - if(pin < 46) { - uint8_t start = _pin_isr_reg == 0; - isr_handler_t *handler = &isr_handlers[pin]; - handler->mode = mode; - handler->fn = userFunc; - _pin_isr_last |= (digitalRead(pin) << pin); - _pin_isr_reg |= _BV(pin); - if(start && pthread_create(&_pin_isr_thread, NULL, _isr_check_task, NULL) == 0){ - pthread_setname_np(_pin_isr_thread, "arduino-isr"); - pthread_detach(_pin_isr_thread); - } - } -} - -void detachInterrupt(uint8_t pin) { - return; - if(pin < 46) { - isr_handler_t *handler = &isr_handlers[pin]; - _pin_isr_reg &= ~_BV(pin); - handler->mode = 0; - handler->fn = 0; - } -} - -int digitalPinToInterrupt(uint8_t pin){ - return pin; -} diff --git a/alfred/src/wiring_main.cpp b/alfred/src/wiring_main.cpp deleted file mode 100644 index fce9e6a68..000000000 --- a/alfred/src/wiring_main.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - main.cpp - Main loop for Arduino sketches - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" -#include -//#include "idemonitor.h" - -unsigned long startMillis = 0; - - -void analogReadResolution(uint8_t res){ -} - - -void watchdogReset(void){ -} - -void watchdogEnable(uint32_t ms){ -} - - -//#ifndef __arm__ - unsigned long micros(){ - struct timeval tv; - gettimeofday(&tv,NULL); - return 1000000 * tv.tv_sec + tv.tv_usec - startMillis*1000; - } - unsigned long millis(){ - struct timeval tv; - gettimeofday(&tv,NULL); - return 1000 * tv.tv_sec + tv.tv_usec/1000 - startMillis; - } -//#endif - - - -String shellExec(const char *cmd, int *result){ - String buf = ""; - char str[strlen(cmd)+6]; - int rs; - int *r = result; - if(r == NULL) { - r = &rs; - } - r[0] = -1; - strcpy(str, cmd); - strcat(str, " 2>&1"); - FILE *in = popen(str, "r"); - if(!in) { - return String(); - } - int c = 0; - while((c = fgetc(in)) > 0) { - buf += (char)c; - } - r[0] = pclose(in); - return buf; -} - -volatile uint8_t _keep_sketch_running; -volatile uint8_t _loop_is_running; -pthread_t _loop_thread; - -void request_sketch_terminate(){ - _keep_sketch_running = 0; -} - -void *_loop_thread_task(void *arg __attribute__((unused))){ - _loop_is_running = 1; - setup(); - while(_keep_sketch_running) { - loop(); - usleep(300); - //usleep(900000); - } - _loop_is_running = 0; - //printf("exiting thread\n"); - pthread_exit(NULL); -} - -/** - * Initialize the BCM2835 registers earlier than any constructors for any static Arduino classes. - * Note the usage of the gcc constructor(101) attribute. This registers the function as a constructor which will - * be automatically invoked when the executable is launched. It will be executed BEFORE main and BEFORE any of the - * other global static C++ class instances. - * - * See Issue #10 - */ -__attribute__((constructor(101))) void startInit() { - if(init()) exit(1); -} - - -int main(int argc __attribute__((unused)), char **argv __attribute__((unused))){ - printf("main\n"); - - struct timeval tv; - gettimeofday(&tv,NULL); - startMillis = 1000 * tv.tv_sec + tv.tv_usec/1000; - - thread_set_priority(65); - _keep_sketch_running = 1; - _loop_is_running = 0; - //console_attach_signal_handlers(); - //idemonitor_begin(); - - pthread_attr_t attr; - pthread_attr_t *attrp; /* NULL or &attr */ - if(pthread_attr_init(&attr) == 0){ - attrp = &attr; - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); - pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); - //pthread_attr_setschedpolicy(&attr, SCHED_FIFO); - } - if(pthread_create(&_loop_thread, attrp, _loop_thread_task, NULL) == 0){ - if (attrp != NULL) pthread_attr_destroy(attrp); - pthread_setname_np(_loop_thread, "arduino-loop"); - pthread_detach(_loop_thread); - } - usleep(1000); - while(_keep_sketch_running){ - //console_run(); - //uart_check_fifos(); - //idemonitor_run(); - usleep(1000); - } - uninit(); - return 0; -} - diff --git a/alfred/src/wiring_pulse.c b/alfred/src/wiring_pulse.c deleted file mode 100644 index 5042c80e8..000000000 --- a/alfred/src/wiring_pulse.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for the Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "Arduino.h" - -unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout){ - pinMode(pin, INPUT); - uint32_t start = micros(); - while(digitalRead(pin) == state && (micros() - start) < timeout); - while(digitalRead(pin) != state && (micros() - start) < timeout); - start = micros(); - while(digitalRead(pin) == state && (micros() - start) < timeout); - return micros() - start; -} diff --git a/alfred/src/wiring_pwm.c b/alfred/src/wiring_pwm.c deleted file mode 100644 index 01672fca8..000000000 --- a/alfred/src/wiring_pwm.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for the Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" - -#include -#include -#include -#include -#include -#include -#include -#include - - -int pwm_export(int pwmio) -{ - int efd; - char buf[50]; - int pwmfd, ret; - - /* Quick test if it has already been exported */ - sprintf(buf, "/sys/class/pwm/pwmchip0/pwm%d/enable", pwmio); - efd = open(buf, O_WRONLY); - if(efd != -1) { - // already exported - close(efd); - return 0; - } - - efd = open("/sys/class/pwm/pwmchip0/export", O_WRONLY | O_SYNC); - - if(efd != -1) { - sprintf(buf, "%d", pwmio); - ret = write(efd, buf, strlen(buf)); - if(ret < 0) { - perror("error: PWM export failed"); - return -2; - } - close(efd); - } else { - // If we can't open the export file, we probably - // dont have any pwmio permissions - perror("error: no PWM permission"); - return -1; - } - return 0; -} - - -void pwm_unexport(int pwmio) -{ - int pwmfd, ret; - char buf[50]; - pwmfd = open("/sys/class/pwm/pwmchip0/unexport", O_WRONLY | O_SYNC); - sprintf(buf, "%d", pwmio); - ret = write(pwmfd, buf, strlen(buf)); - close(pwmfd); -} - -int pwm_getfd(int pwmio) -{ - char in[3] = {0, 0, 0}; - char buf[50]; - int pwmfd; - sprintf(buf, "/sys/class/pwm/pwmchip0/pwm%d/duty_cycle", pwmio); - pwmfd = open(buf, O_RDWR | O_SYNC); - if(pwmfd < 0) { - fprintf(stderr, "Failed to open pwm %d value\n", pwmio); - perror("pwm failed"); - } - - return pwmfd; -} - - - -void analogWriteRange(uint32_t range){ -} - -void analogWriteDiv(uint16_t div){ -} - -uint32_t analogWriteSetup(uint32_t frequency, uint32_t range){ - return 0; -} - -void analogWriteInit(){ -} - -// https://www.linkedin.com/pulse/pwm-linux-user-space-vahid-gharaee/ -void analogWrite(uint8_t pwm, uint16_t val){ - char buf[50]; - int nread, ret, pwmfd; - pwm_export(pwm); - - int period = 10000000; // 10 ms pulse width - int duty = ((float)val) / 1023.0 * period; - - sprintf(buf, "/sys/class/pwm/pwmchip0/pwm%d/period", pwm); - pwmfd = open(buf, O_WRONLY); - if(pwmfd < 0) { - perror("error opening period"); - return; - } - snprintf(buf, 8, "%d", period); - ret = write(pwmfd, buf, 8); - if (ret < 0){ - perror("failed to set period"); - close(pwmfd); - return; - } - close(pwmfd); - - sprintf(buf, "/sys/class/pwm/pwmchip0/pwm%d/duty_cycle", pwm); - pwmfd = open(buf, O_WRONLY); - if(pwmfd < 0) { - perror("error opening duty_cycle"); - return; - } - snprintf(buf, 8, "%d", duty); - ret = write(pwmfd, buf, 8); - if(ret < 0) { - perror("failed to set duty_cylce"); - close(pwmfd); - return; - } - close(pwmfd); - - sprintf(buf, "/sys/class/pwm/pwmchip0/pwm%d/enable", pwm); - pwmfd = open(buf, O_WRONLY); - if(pwmfd < 0) { - perror("error opening enable"); - return; - } - snprintf(buf, 2, "%d", 1); - ret = write(pwmfd, buf, 1); - if(ret < 0) { - perror("failed to set enable"); - close(pwmfd); - return; - } - close(pwmfd); - -} - - - - diff --git a/alfred/src/wiring_shift.c b/alfred/src/wiring_shift.c deleted file mode 100644 index cfc41978e..000000000 --- a/alfred/src/wiring_shift.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for the Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" - -uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) { - uint8_t value = 0; - uint8_t i; - - for (i = 0; i < 8; ++i) { - digitalWrite(clockPin, HIGH); - delayMicroseconds(1); - if (bitOrder == LSBFIRST) { - value |= digitalRead(dataPin) << i; - } else { - value |= digitalRead(dataPin) << (7 - i); - } - digitalWrite(clockPin, LOW); - delayMicroseconds(1); - } - return value; -} - -void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val){ - uint8_t i; - - for (i = 0; i < 8; i++) { - if (bitOrder == LSBFIRST) { - digitalWrite(dataPin, !!(val & (1 << i))); - } else { - digitalWrite(dataPin, !!(val & (1 << (7 - i)))); - } - - digitalWrite(clockPin, HIGH); - delayMicroseconds(1); - digitalWrite(clockPin, LOW); - delayMicroseconds(1); - } -} diff --git a/alfred/src/wiring_thread.c b/alfred/src/wiring_thread.c deleted file mode 100644 index c0a72012b..000000000 --- a/alfred/src/wiring_thread.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - Arduino.c - Partial implementation of the Wiring API for the Raspberry Pi - Copyright (c) 2015 Hristo Gochkov. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" -#include -#include - -static pthread_mutex_t thread_mutexes[10]; - -void thread_yield(){ - pthread_yield(); -} - -pthread_t thread_self(){ - return pthread_self(); -} - -pthread_t thread_create(thread_fn fn, void * arg){ - pthread_t myThread ; - if(pthread_create(&myThread, NULL, fn, arg) != 0) { - return 0; - } - pthread_detach(myThread); - return myThread; -} - -int thread_set_name(pthread_t t, const char *name){ - return pthread_setname_np(t, name); -} - -int thread_set_priority(const int pri){ - struct sched_param sched ; - memset (&sched, 0, sizeof(sched)) ; - if (pri > sched_get_priority_max(SCHED_OTHER)) { - sched.sched_priority = sched_get_priority_max(SCHED_OTHER); - } else { - sched.sched_priority = pri ; - } - return sched_setscheduler(0, SCHED_OTHER, &sched) ; -} - -int thread_detach(pthread_t t){ - return pthread_detach(t); -} - -int thread_terminate(pthread_t t){ - return pthread_cancel(t); -} - -uint8_t thread_running(pthread_t t){ - int r = pthread_tryjoin_np(t, NULL); - return (r==0 || r==EBUSY); -} - -uint8_t thread_equals(pthread_t t){ - return pthread_equal(pthread_self(),t); -} - -void thread_lock(int index){ - pthread_mutex_lock(&thread_mutexes[index]); -} - -void thread_unlock(int index){ - pthread_mutex_unlock(&thread_mutexes[index]); -} From f6d2432771ddcdc0777319bbb4be8f4d91229aea Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:57:01 -0400 Subject: [PATCH 05/15] Delete alfred directory --- alfred/CMakeLists.txt | 95 ------- alfred/README.md | 4 - alfred/config.h | 602 ------------------------------------------ 3 files changed, 701 deletions(-) delete mode 100644 alfred/CMakeLists.txt delete mode 100644 alfred/README.md delete mode 100644 alfred/config.h diff --git a/alfred/CMakeLists.txt b/alfred/CMakeLists.txt deleted file mode 100644 index d4acf5e35..000000000 --- a/alfred/CMakeLists.txt +++ /dev/null @@ -1,95 +0,0 @@ -# -# Compiles Sunray firmware for Raspberry pi -# -# cmake .. -# cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ .. -# - -cmake_minimum_required(VERSION 3.7) - -project(sunray) - -SET(FIRMWARE_PATH ${CMAKE_SOURCE_DIR}/../sunray) - -set(CMAKE_CXX_STANDARD 14) -SET(EXCLUDE_REGEX "agcm4|due|esp") - - -if(WIN32) - message(INFO "This package is not tested on Windows. Feel free to report if it works!") -endif() - -# find_package(CUDA REQUIRED) -# find_package(OpenCV REQUIRED) - -# find_library(LIBIW_LIB iw) -# find_library(LIBNL_LIB nl-3) -# find_library(LIBNL_GENL_LIB nl-genl-3) -# SET(LIBNL_LIBS ${LIBNL_LIB} ${LIBNL_GENL_LIB}) - -# find_path (LIBNL_INCLUDE_DIR netlink/netlink.h libnl3) - - -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -lbluetooth") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -x c") -# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -x c -I /usr/include/libnl3/") -SET(CMAKE_BUILD_TYPE Debug) -#SET(CMAKE_BUILD_TYPE Release) - -# set(DL_LIB_DIR "/lib/arm-linux-gnueabihf") - -message("CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}") -message("Using firmware path ${FIRMWARE_PATH}") -message("CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}") - -file(GLOB_RECURSE sunray_cpp ${FIRMWARE_PATH}/**.cpp) -list(FILTER sunray_cpp EXCLUDE REGEX ${EXCLUDE_REGEX}) -message("---sunray_cpp---") -foreach (filename ${sunray_cpp}) - message(${filename}) -endforeach() - -file(GLOB_RECURSE sunray_c ${FIRMWARE_PATH}/**.c) -list(FILTER sunray_c EXCLUDE REGEX ${EXCLUDE_REGEX}) -message("---sunray_c---") -foreach (filename ${sunray_c}) - message(${filename}) -endforeach() - -message("---pi_sources---") -file(GLOB_RECURSE pi_sources src/**.cpp src/**.c) -## list(FILTER pi_sources EXCLUDE REGEX "wiring_main.cpp") -foreach (filename ${pi_sources}) - message(${filename}) -endforeach() - -message("--copy config.h to sunray source--") -configure_file(${CMAKE_SOURCE_DIR}/config.h ${FIRMWARE_PATH}/config.h COPYONLY) - -message("main file ${FIRMWARE_PATH}/sunray.ino") - -## set_source_files_properties({sunray_c} PROPERTIES LANGUAGE C) - -set_source_files_properties(test/test.ino PROPERTIES LANGUAGE CXX) -set_source_files_properties(test/test.ino PROPERTIES COMPILE_FLAGS "-x c++") -set_source_files_properties(${FIRMWARE_PATH}/sunray.ino PROPERTIES LANGUAGE CXX) -set_source_files_properties(${FIRMWARE_PATH}/sunray.ino PROPERTIES COMPILE_FLAGS "-x c++") - -## if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") -## add_definitions("-x c++") -## endif() - -add_executable(sunray ${pi_sources} ${sunray_cpp} ${sunray_c} ${FIRMWARE_PATH}/sunray.ino) -target_include_directories(sunray PRIVATE src ${FIRMWARE_PATH}/src) -# target_link_libraries(sunray "${CMAKE_SOURCE_DIR}/lib/libarduino_${CMAKE_SYSTEM_PROCESSOR}.a") - -# target_include_directories(sunray PUBLIC ${LIBNL_INCLUDE_DIR}) -# target_link_libraries(sunray ${LIBIW_LIB} ${LIBNL_LIB} ${LIBNL_GENL_LIB}) - -## set_property(TARGET sunray PROPERTY C_STANDARD 90) -## set_target_properties(sunray PROPERTIES LINKER_LANGUAGE CXX) - - -#ADD_LIBRARY( arduino_linux STATIC ${pi_sources} ) -#target_include_directories(arduino_linux PRIVATE src) - diff --git a/alfred/README.md b/alfred/README.md deleted file mode 100644 index c897fbebd..000000000 --- a/alfred/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Sunray for Alfred / Sunray Simulator / Sunray for Raspberry PI - -[README has moved - click here...](../README.md) - diff --git a/alfred/config.h b/alfred/config.h deleted file mode 100644 index 3c69449be..000000000 --- a/alfred/config.h +++ /dev/null @@ -1,602 +0,0 @@ -// Ardumower Sunray -// Copyright (c) 2013-2020 by Alexander Grau, Grau GmbH -// Licensed GPLv3 for open source use -// or Grau GmbH Commercial License for commercial use (http://grauonline.de/cms2/?page_id=153) - -/* - WARNING: all software, hardware and motor components are designed and optimized as a whole, if you - try to replace or exclude some component not as designed, you risk to damage your hardware with - the software. - - see Wiki for installation details: - http://wiki.ardumower.de/index.php?title=Ardumower_Sunray - - requirements: - + Ardumower chassis and Ardumower kit mowing and gear motors - + Ardumower PCB 1.3/1.4 - + Adafruit Grand Central M4 (highly recommended) or Arduino Due - + Ardumower BLE UART module (HM-10/CC2540/CC2541) - + optional: Ardumower IMU (MPU6050/MPU9150/MPU9250/MPU9255) - choose your IMU below - + optional: Ardumower WIFI (ESP8266 ESP-01 with stock firmware) - + optional: HTU21D temperature/humidity sensor - + optional: sonar, bumperduino, freewheel sensor - + Ardumower RTK (ublox F9P) - - -1. Rename file 'config_example.h' into 'config.h' - -2. Configure the options below and finally compile and upload this project. - - -Adafruit Grand Central M4 NOTE: You have to add SDA, SCL pull-up resistors to the board -and deactivate Due clone reset cicuit (JP13): -https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Adafruit_Grand_Central_M4 - -Arduino Due UPLOAD NOTE: - -If using Arduino Due 'native' USB port for uploading, choose board 'Arduino Due native' in the -Arduino IDE and COM port 'Arduino Due native port'. - -If using Arduino Due 'programming' USB port for uploading, choose board 'Arduino Due programming' in the -Arduino IDE and COM port 'Arduino Due programming port'. - -Also, you may choose the serial port below for serial monitor output (CONSOLE). - -*/ - - -#define DRV_SERIAL_ROBOT 1 // Linux (Alfred) -//#define DRV_ARDUMOWER 1 // keep this for Ardumower -//#define DRV_SIM_ROBOT 1 // simulation - -// ------- Bluetooth4.0/BLE module ----------------------------------- -// see Wiki on how to install the BLE module and configure the jumpers: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Bluetooth_BLE_UART_module -#define ENABLE_PASS 1 // comment out to disable password authentication -#define PASS 123456 // choose password for WiFi/BLE communication (NOTE: has to match the connection password in the App!) - -// -------- IMU sensor ---------------------------------------------- -// choose one MPU IMU (make sure to connect AD0 on the MPU board to 3.3v) -// verify in CONSOLE that your IMU was found (you will hear 8 buzzer beeps for automatic calibration at start) -// see Wiki for wiring, how to position the module, and to configure the I2C pullup jumpers: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#IMU.2C_sensor_fusion - -#define MPU6050 -//#define MPU9150 -//#define MPU9250 // also choose this for MPU9255 -//#define BNO055 -#define MPU_ADDR 0x69 // I2C address (0x68 if AD0=LOW, 0x69 if AD0=HIGH) - -// should the mower turn off if IMU is tilt over? (yes: uncomment line, no: comment line) -#define ENABLE_TILT_DETECTION 1 - -// --------- lift sensor (only Alfred mower) --------------------------------------------- -// should the lift sensor be enabled? (yes: uncomment line, no: comment line) -#define ENABLE_LIFT_DETECTION 1 -// should the lift sensor be used for obstacle avoidance (if not, mower will simply go into error if lifted) -#define LIFT_OBSTACLE_AVOIDANCE 1 - -// ------- SD card map load/resume and logging --------------------------------- -// all serial console output can be logged to a (FAT32 formatted) SD card -// NOTE: for full log file inspections, we will need your sunray.ino.elf binary -// (you can find out the location of the compiled .elf file while compiling with verbose compilation switched on -// via 'File->Preferences->Full output during compile') - detailed steps here: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#SD_card_module -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#SD_card_logging -#define ENABLE_SD 1 // enable SD card services (resuming, logging)? (uncomment to activate) -//#define ENABLE_SD_LOG 1 // enable SD card logging? uncomment to activate (not recommended - WARNING: may slow down system!) -#define ENABLE_SD_RESUME 1 // enable SD card map load/resume on reset? (uncomment to activate) - - -// ------ odometry ----------------------------------- -// values below are for Ardumower chassis and Ardumower motors -// see Wiki on how to configure the odometry divider: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#PCB1.3_odometry_divider -// NOTE: It is important to verify your odometry is working accurate. -// Follow the steps described in the Wiki to verify your odometry returns approx. 1 meter distance for -// driving the same distance on the ground (without connected GPS): -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Odometry_test -// https://forum.ardumower.de/threads/andere-r%C3%A4der-wie-config-h-%C3%A4ndern.23865/post-41732 - -// NOTE: if using non-default Ardumower chassis and your freewheel is at frontside (gear motors at backside), have may have to swap motor cables, -// more info here: https://wiki.ardumower.de/index.php?title=Ardumower_Chassis_%27mountain_mod%27) -#define FREEWHEEL_IS_AT_BACKSIDE false // default Ardumower: true (change to false, if your freewheel is at frontside) - this is used for obstacle avoidance -#define WHEEL_BASE_CM 39 // wheel-to-wheel distance (cm) -#define WHEEL_DIAMETER 205 // wheel diameter (mm) -#define MOWER_SIZE 60 // mower / chassis size / length in cm - -//#define ENABLE_ODOMETRY_ERROR_DETECTION true // use this to detect odometry erros -#define ENABLE_ODOMETRY_ERROR_DETECTION false - -// choose ticks per wheel revolution : -// ...for the 36mm diameter motor (blue cap) https://www.marotronics.de/2-x-36er-DC-Planeten-Getriebemotor-24-Volt-mit-HallIC-30-33-RPM-8mm-Welle -//#define TICKS_PER_REVOLUTION 1310 / 2 // odometry ticks per wheel revolution - -// ...for the 36mm diameter motor (black cap) https://www.marotronics.de/MA36-DC-Planeten-Getriebemotor-24-Volt-mit-HallIC-30-33-RPM-8mm-Welle-ab-2-Stueck-Staffelpreis -// #define TICKS_PER_REVOLUTION 975 / 2 - -// ...for the newer 42mm diameter motor (green connector) https://www.marotronics.de/MA42-DC-Planeten-Getriebemotor-24-Volt-mit-HallIC-30-33-RPM-8mm-Welle-ab-2-Stueck-Staffelpreis -// #define TICKS_PER_REVOLUTION 696 / 2 // odometry ticks per wheel revolution - -// ...for the older 42mm diameter motor (white connector) https://wiki.ardumower.de/images/d/d6/Ardumower_chassis_inside_ready.jpg -//#define TICKS_PER_REVOLUTION 1050 / 2 // odometry ticks per wheel revolution - -// ...for the brushless motor april 2021 https://wiki.ardumower.de/index.php?title=Datei:BLUnit.JPG -//#define TICKS_PER_REVOLUTION 1300 / 2 // 1194/2 odometry ticks per wheel revolution - -#define TICKS_PER_REVOLUTION 320 // odometry ticks per wheel revolution (RM24) - - -// ----- gear motors -------------------------------------------------- -// for brushless motors, study the sections (drivers, adapter, protection etc.) in the Wiki (https://wiki.ardumower.de/index.php?title=DIY_Brushless_Driver_Board) -//#define MOTOR_DRIVER_BRUSHLESS 1 // uncomment this for new brushless motor drivers -//#define MOTOR_DRIVER_BRUSHLESS_MOW_DRV8308 1 // uncomment for brushless DRV8308 driver and mowing motor -//#define MOTOR_DRIVER_BRUSHLESS_MOW_A4931 1 // uncomment for brushless A3931 driver and mowing motor -//#define MOTOR_DRIVER_BRUSHLESS_GEARS_DRV8308 1 // uncomment for brushless DRV8308 driver and gear/traction motors -//#define MOTOR_DRIVER_BRUSHLESS_GEARS_A4931 1 // uncomment for brushless A4931 driver and gear/traction motors - -#define MOTOR_FAULT_CURRENT 3.0 // gear motors fault current (amps) -#define MOTOR_TOO_LOW_CURRENT 0.005 // gear motor too low current (amps), set to zero (0) to disable -#define MOTOR_OVERLOAD_CURRENT 1.2 // gear motors overload current (amps) - -//#define USE_LINEAR_SPEED_RAMP true // use a speed ramp for the linear speed -#define USE_LINEAR_SPEED_RAMP false // do not use a speed ramp - -// motor speed control (PID coefficients) - these values are tuned for Ardumower motors -// general information about PID controllers: https://wiki.ardumower.de/index.php?title=PID_control -#define MOTOR_PID_KP 0.5 // do not change 2.0 (for non-Ardumower motors or if the motor speed control is too fast you may try: KP=1.0, KI=0, KD=0) -#define MOTOR_PID_KI 0.01 // do not change 0.03 -#define MOTOR_PID_KD 0.01 // do not change 0.03 - -#define MOTOR_LEFT_SWAP_DIRECTION 1 // uncomment to swap left motor direction -#define MOTOR_RIGHT_SWAP_DIRECTION 1 // uncomment to swap right motor direction - - -// ----- mowing motor ------------------------------------------------- -// NOTE: motor drivers will indicate 'fault' signal if motor current (e.g. due to a stall on a molehole) or temperature is too high for a -// certain time (normally a few seconds) and the mower will try again and set a virtual obstacle after too many tries -// On the other hand, the overload detection will detect situations the fault signal cannot detect: slightly higher current for a longer time - -//#define MAX_MOW_PWM 200 // use this to permanently reduce mowing motor power (255=max) - -#define MOW_FAULT_CURRENT 8.0 // mowing motor fault current (amps) -#define MOW_TOO_LOW_CURRENT 0.005 // mowing motor too low current (amps) , set to zero (0) to disable -#define MOW_OVERLOAD_CURRENT 2.0 // mowing motor overload current (amps) - -// should the direction of mowing motor toggle each start? (yes: true, no: false) -#define MOW_TOGGLE_DIR true -//#define MOW_TOGGLE_DIR false - -// should the error on motor overload detection be enabled? -//#define ENABLE_OVERLOAD_DETECTION true // robot will stop on overload -#define ENABLE_OVERLOAD_DETECTION false // robot will slow down on overload - -// should the motor fault (error) detection be enabled? -#define ENABLE_FAULT_DETECTION true -//#define ENABLE_FAULT_DETECTION false // use this if you keep getting 'motor error' - -#define ENABLE_RPM_FAULT_DETECTION true // use mow rpm signal to detect a motor fault (requires mowing motor with rpm output!) -//#define ENABLE_RPM_FAULT_DETECTION false // do not use mow rpm signal to detect a motor fault - -// should the robot trigger obstacle avoidance on motor errors if motor recovery failed? -#define ENABLE_FAULT_OBSTACLE_AVOIDANCE true - -// shall the mow motor be activated for normal operation? Deactivate this option for GPS tests and path tracking running tests -#define ENABLE_MOW_MOTOR true // Default is true, set false for testing purpose to switch off mow motor permanently - - -// ------ WIFI module (ESP8266 ESP-01 with ESP firmware 2.2.1) -------------------------------- -// NOTE: all settings (maps, absolute position source etc.) are stored in your phone - when using another -// device for the WIFI connection (PC etc.), you will have to transfer those settings (share maps via app, -// re-enter absolute position source etc) ! -// see Wiki on how to install the WIFI module and configure the WIFI jumpers: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Bluetooth_BLE_UART_module - -#define START_AP false // should WIFI module start its own access point? -//#define WIFI_IP 192,168,2,16 // choose IP e.g. 192,168,4,1 (comment out for dynamic IP/DHCP) - NOTE: use commans instead of points -#define WIFI_SSID "ssid" // choose WiFi network ID -#define WIFI_PASS "pass" // choose WiFi network password - -// client (app) ---> server (robot) -#define ENABLE_SERVER true // must be enabled if robot should act as server (recommended) -//#define ENABLE_SERVER false // must be disabled if robot should act as client (requires external relay server) - -// a relay server allows to access the robot via the Internet by transferring data from app to robot and vice versa (not available yet, highly experimental) -// client (app) ---> relay server <--- client (robot) -#define ENABLE_RELAY false // must be enabled to use relay server -#define RELAY_USER "username" // choose a unique user name/number! -#define RELAY_MACHINE "robot1" // choose a unique robot id -#define RELAY_HOST "grauonline.net" // relay server name -#define RELAY_PORT 5000 // relay server port - -//#define ENABLE_UDP 1 // enable console for UDP? (for developers only) -#define UDP_SERVER_IP 192,168,2,56 // remote UDP IP and port to connect to -#define UDP_SERVER_PORT 4210 - -// --------- NTRIP client (linux only, highly experimental) --------------------------------- -//#define ENABLE_NTRIP 1 // must be activated to use Linux NTRIP -#define NTRIP_HOST "195.227.70.119" // sapos nrw -#define NTRIP_PORT 2101 -#define NTRIP_MOUNT "VRS_3_4G_NW" -#define NTRIP_USER "user" -#define NTRIP_PASS "pass" - -// ------ MQTT (for ESP8266 only, highly experimental - ENABLE_SERVER must be set to false for this to work :-/ ) ----------------------------- -// you can access your robot using a MQTT broker - choose a topic prefix for your robot below - available MQTT topics: -// robot1/cmd (cmd can be: start, stop, dock) -// robot1/op (current robot operation as text) -// robot1/gps/sol (current gps solution as text) -// robot1/gps/pos (current gps position as text) -//#define ENABLE_MQTT true // start MQTT client? (true for yes, false for no) -#define ENABLE_MQTT false -#define MQTT_TOPIC_PREFIX "robot1" // the MQTT topic prefix for your robot -#define MQTT_SERVER "192.168.2.27" // your MQTT broker IP or hostname (e.g. "broker.mqtt-dashboard.com") -#define MQTT_PORT 1883 -#define MQTT_USER "user" -#define MQTT_PASS "pass" - -// ------ ultrasonic sensor ----------------------------- -// see Wiki on how to install the ultrasonic sensors: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Ultrasonic_sensor - -//#define SONAR_INSTALLED 1 // uncomment if ultrasonic sensors are installed -//#define SONAR_ENABLE true // should ultrasonic sensor be used? -#define SONAR_ENABLE false -#define SONAR_TRIGGER_OBSTACLES true // should sonar be used to trigger obstacles? if not, mower will only slow down -#define SONAR_LEFT_OBSTACLE_CM 10 // stop mowing operation below this distance (cm) -#define SONAR_CENTER_OBSTACLE_CM 10 // stop mowing operation below this distance (cm) -#define SONAR_RIGHT_OBSTACLE_CM 10 // stop mowing operation below this distance (cm) - -// ------ rain sensor ---------------------------------------------------------- -#define RAIN_ENABLE true // if activated, mower will dock when rain sensor triggers -//#define RAIN_ENABLE false - -// ------ time-of-flight distance sensor (VL53L0X) ----------------------------- -// do not use this sensor (not recommended) -//#define TOF_ENABLE true -#define TOF_ENABLE false -#define TOF_OBSTACLE_CM 100 // stop mowing operation below this distance (cm) - - -// ------ bumper sensor (bumperduino, freewheel etc.) ---------------- -// see Wiki on how to install bumperduino or freewheel sensor: -// https://wiki.ardumower.de/index.php?title=Bumper_sensor -// https://wiki.ardumower.de/index.php?title=Free_wheel_sensor -#define BUMPER_ENABLE true -//#define BUMPER_ENABLE false -#define BUMPER_DEADTIME 1000 // linear motion dead-time (ms) after bumper is allowed to trigger -#define BUMPER_TRIGGER_DELAY 0 // bumper must be active for (ms) to trigger -#define BUMPER_MAX_TRIGGER_TIME 30 // if bumpersensor stays permanent triggered mower will stop with bumper error (time in seconds; 0 = disabled) - - -// ----- battery charging current measurement (INA169) -------------- -// the Marotronics charger outputs max 1.5A -// ( https://www.marotronics.de/Ladegeraete-fuer-den-Ardumower-Akkus-24V-mit-Status-LED-auch-fuer-Li-Ion-Akkus ) -// so we are using the INA169 in non-bridged mode (max. 2.5A) -// ( https://www.marotronics.de/INA169-Analog-DC-Current-Sensor-Breakout-60V-25A-5A-Marotronics ) - -#define CURRENT_FACTOR 0.5 // PCB1.3 (non-bridged INA169, max. 2.5A) -//#define CURRENT_FACTOR 1.0 // PCB1.3 (bridged INA169, max. 5A) -//#define CURRENT_FACTOR 1.98 // PCB1.4 (non-bridged INA169, max. 2.5A) -//#define CURRENT_FACTOR 2.941 // PCB1.4 (bridged INA169, max. 5A) - -#define GO_HOME_VOLTAGE 25.5 // start going to dock below this voltage -// The battery will charge if both battery voltage is below that value and charging current is above that value. -#define BAT_FULL_VOLTAGE 30.0 // start mowing again at this voltage -#define BAT_FULL_CURRENT -0.1 // start mowing again below this charging current (amps) - -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Automatic_battery_switch_off -#define BAT_SWITCH_OFF_IDLE false // switch off if idle (JP8 must be set to autom.) -#define BAT_SWITCH_OFF_UNDERVOLTAGE true // switch off if undervoltage (JP8 must be set to autom.) - - -// ------ GPS ------------------------------------------ -// ------- RTK GPS module ----------------------------------- -// see Wiki on how to install the GPS module and configure the jumpers: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#Bluetooth_BLE_UART_module -// -// NOTE: if you experience GPS checksum errors, try to increase UART FIFO size: -// 1. Arduino IDE->File->Preferences->Click on 'preferences.txt' at the bottom -// 2. Locate file 'packages/arduino/hardware/sam/xxxxx/cores/arduino/RingBuffer.h' -// (for Adafruit Grand Central M4: 'packages\adafruit\hardware\samd\xxxxx\cores\arduino\RingBuffer.h') -// change: #define SERIAL_BUFFER_SIZE 128 into into: #define SERIAL_BUFFER_SIZE 1024 - -//#define GPS_USE_TCP 1 // comment out for serial gps, activate for TCP client-based GPS -//#define GPS_SKYTRAQ 1 // comment out for ublox gps, uncomment for skytraq gps/NMEA - -#define REQUIRE_VALID_GPS true // mower will pause if no float and no fix GPS solution during mowing (recommended) -//#define REQUIRE_VALID_GPS false // mower will continue to mow if no float or no fix solution (not recommended) - -#define GPS_SPEED_DETECTION true // will detect obstacles via GPS feedback (no speed) -//#define GPS_SPEED_DETECTION false - -// detect if robot is actually moving (obstacle detection via GPS feedback) -#define GPS_MOTION_DETECTION true // if robot is not moving trigger obstacle avoidance -//#define GPS_MOTION_DETECTION false // ignore if robot is not moving -#define GPS_MOTION_DETECTION_TIMEOUT 5 // timeout for motion (secs) - -// configure ublox f9p with optimal settings (will be stored in f9p RAM only) -// NOTE: due to a PCB1.3 bug GPS_RX pin is not working and you have to fix this by a wire: -// https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#PCB1.3_GPS_pin_fix_and_wire_fix (see 'GPS wire fix') -#define GPS_REBOOT_RECOVERY true // allow GPS receiver rebooting (recommended - requires GPS wire fix above! otherwise firmware will stuck at boot!) -//#define GPS_REBOOT_RECOVERY false // do not allow rebooting GPS receiver (no GPS wire fix required) - -#define GPS_CONFIG true // configure GPS receiver (recommended - requires GPS wire fix above! otherwise firmware will stuck at boot!) -//#define GPS_CONFIG false // do not configure GPS receiver (no GPS wire fix required) - -#define GPS_CONFIG_FILTER true // use signal strength filter? (recommended to get rid of 'FIX jumps') - adjust filter settings below -//#define GPS_CONFIG_FILTER false // use this if you have difficulties to get a FIX solution (uses ublox default filter settings) -#define CPG_CONFIG_FILTER_MINELEV 10 // Min SV elevation degree: 14 (high elevation, less robust), 10 (low elevation, robust) -#define CPG_CONFIG_FILTER_NCNOTHRS 0 // C/N0 Threshold #SVs: 10 (robust), 6 (less robust) -#define CPG_CONFIG_FILTER_CNOTHRS 0 // 30 dbHz (robust), 13 dbHz (less robust) - - -// ------ obstacle detection and avoidance ------------------------- - -#define ENABLE_PATH_FINDER true // path finder calculates routes around exclusions and obstacles -//#define ENABLE_PATH_FINDER false -#define ALLOW_ROUTE_OUTSIDE_PERI_METER 1.0 // max. distance (m) to allow routing from outside perimeter -// (increase if you get 'no map route' errors near perimeter) - -//#define OBSTACLE_DETECTION_ROTATION true // detect robot rotation stuck (requires IMU) -#define OBSTACLE_DETECTION_ROTATION false // NOTE: recommended to turn this off for slope environment - -#define OBSTACLE_AVOIDANCE true // try to find a way around obstacle -//#define OBSTACLE_AVOIDANCE false // stop robot on obstacle -#define OBSTACLE_DIAMETER 1.2 // choose diameter of obstacles placed in front of robot (m) for obstacle avoidance -#define DISABLE_MOW_MOTOR_AT_OBSTACLE true // switch off mow motor while escape at detected obstacle; set false if mow motor shall not be stopped at detected obstacles - -// detect robot being kidnapped? robot will try GPS recovery if distance to tracked path is greater than a certain value -// (false GPS fix recovery), and if that fails go into error -#define KIDNAP_DETECT true // recommended -//#define KIDNAP_DETECT false -#define KIDNAP_DETECT_ALLOWED_PATH_TOLERANCE 1.0 // allowed path tolerance (m) -#define KIDNAP_DETECT_ALLOWED_PATH_TOLERANCE_DOCK_UNDOCK 20.2 // allowed path tolerance (m) -#define KIDNAP_DETECT_DISTANCE_DOCK_UNDOCK 5 // distance from dock in (m) to use KIDNAP_DETECT_ALLOWED_PATH_TOLERANCE_DOCK_UNDOCK - -// ------ docking -------------------------------------- -// is a docking station available? -#define DOCKING_STATION true // use this if docking station available and mower should dock automatically -//#define DOCKING_STATION false // mower will just stop after mowing instead of docking automatically - -#define DOCK_IGNORE_GPS false // use GPS fix in docking station and IMU for GPS float/invalid -//#define DOCK_IGNORE_GPS true // ignore GPS fix in docking station and use IMU-only (use this if robot gets false GPS fixes in your docking station) - -#define DOCK_AUTO_START true // robot will automatically continue mowing after docked automatically -//#define DOCK_AUTO_START false // robot will not automatically continue mowing after docked automatically - -#define DOCK_RETRY_TOUCH true // robot will retry touching docking contacts (max. 1cm) if loosing docking contacts during charging -//#define DOCK_RETRY_TOUCH false // robot will not retry touching docking contacts (max. 1cm) if loosing docking contacts during charging - -#define DOCK_UNDOCK_TRACKSLOW_DISTANCE 5 // set distance (m) from dock for trackslow (speed limit) - -#define UNDOCK_IGNORE_GPS_DISTANCE 2 // set distance (m) from dock to ignore gps while undocking - -// ---- path tracking ----------------------------------- - -// below this robot-to-target distance (m) a target is considered as reached -#define TARGET_REACHED_TOLERANCE 0.1 - -// stanley control for path tracking - determines gain how fast to correct for lateral path errors -#define STANLEY_CONTROL_P_NORMAL 1.1 // 3.0 for path tracking control (angular gain) when mowing -#define STANLEY_CONTROL_K_NORMAL 0.1 // 1.0 for path tracking control (lateral gain) when mowing - -#define STANLEY_CONTROL_P_SLOW 1.1 // 1.0 for path tracking control (angular gain) when docking tracking -#define STANLEY_CONTROL_K_SLOW 0.1 // 0.2 for path tracking control (lateral gain) when docking tracking - - -// ----- other options -------------------------------------------- - -// button control (turns on additional features via the POWER-ON button) -#define BUTTON_CONTROL true // additional features activated (press-and-hold button for specific beep count: - // 1 beep=stop, 6 beeps=start, 5 beeps=dock, 3 beeps=R/C mode ON/OFF) -//#define BUTTON_CONTROL false // additional features deactivated - -#define USE_TEMP_SENSOR true // only activate if temp sensor (htu21d) connected -//#define USE_TEMP_SENSOR false - -#define DOCK_OVERHEAT_TEMP 85 // if temperature above this degreeC, mower will dock -#define DOCK_TOO_COLD_TEMP 5 // if temperature below this degreeC, mower will dock - - -// activate support for model R/C control? -// use PCB pin 'mow' for R/C model control speed and PCB pin 'steering' for R/C model control steering, -// also connect 5v and GND and activate model R/C control via PCB P20 start button for 3 sec. -// more details: https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#R.2FC_model -//#define RCMODEL_ENABLE 1 // uncomment line to turn on R/C control - -#define BUZZER_ENABLE 1 // comment to disable - - -// ------ experimental options ------------------------- - -// drive curves smoothly? -//#define SMOOTH_CURVES true -#define SMOOTH_CURVES false - -// --------- serial monitor output (CONSOLE) ------------------------ -// which Arduino Due USB port do you want to your for serial monitor output (CONSOLE)? -// Arduino Due native USB port => choose SerialUSB -// Arduino Due programming port => choose Serial -#if defined (__arm__) && defined (__SAM3X8E__) // Arduino Due compatible - #define BOARD "Arduino Due" - #define CONSOLE SerialUSB // Arduino Due: do not change (used for Due native USB serial console) -#elif __SAMD51__ - #define BOARD "Adafruit Grand Central M4" - #define CONSOLE Serial // Adafruit Grand Central M4 -#elif __linux__ - #define BOARD "Linux" - #define CONSOLE Console -#else - #ifdef __cplusplus - #error "ERROR: you need to choose either Arduino Due or Adafruit GCM4 in Arduino IDE" - #endif -#endif - -// ------- serial ports and baudrates--------------------------------- -#define CONSOLE_BAUDRATE 115200 // baudrate used for console -//#define CONSOLE_BAUDRATE 921600 // baudrate used for console -#define BLE_BAUDRATE 115200 // baudrate used for BLE -#define BLE_NAME "Ardumower" // name for BLE module -#define GPS_BAUDRATE 115200 // baudrate for GPS RTK module -#define WIFI_BAUDRATE 115200 // baudrate for WIFI module -#define ROBOT_BAUDRATE 19200 // baudrate for Linux serial robot (non-Ardumower) - -#ifdef __SAM3X8E__ // Arduino Due - #define WIFI Serial1 - #define ROBOT Serial1 - #define BLE Serial2 - #define GPS Serial3 - //#define GPS Serial // only use this for .ubx logs (sendgps.py) -#elif __SAMD51__ // Adafruit Grand Central M4 - #define WIFI Serial2 - #define ROBOT Serial2 - #define BLE Serial3 - #define GPS Serial4 -#elif __linux__ - #define WIFI SerialWIFI // dummy serial device - #define SERIAL_WIFI_PATH "/dev/null" - #define LINUX_BLE // comment to disable BLE - #define BLE SerialBLE - #define SERIAL_BLE_PATH "/dev/null" // dummy serial device - #define GPS SerialGPS - #define SERIAL_GPS_PATH "/dev/serial/by-id/usb-u-blox_AG_-_www.u-blox.com_u-blox_GNSS_receiver-if00" - #define GPS_HOST "127.0.0.1" - #define GPS_PORT 2947 - #define ROBOT SerialROBOT - #define SERIAL_ROBOT_PATH "/dev/ttyS1" - #define NTRIP SerialNTRIP - #define SERIAL_NTRIP_PATH "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_00000000-if00-port0" -#endif - - - -// ------- I2C addresses ----------------------------- -#define DS1307_ADDRESS B1101000 -#define AT24C32_ADDRESS B1010000 - - -// ------- PCB1.3/Due settings ------------------------- -#define IOREF 3.3 // I/O reference voltage - -// ------ hardware pins--------------------------------------- -// no configuration needed here -#ifdef __linux__ - // ... -#else - #define pinMotorEnable 37 // EN motors enable - #define pinMotorLeftPWM 5 // M1_IN1 left motor PWM pin - #define pinMotorLeftDir 31 // M1_IN2 left motor Dir pin - #define pinMotorLeftSense A1 // M1_FB left motor current sense - #define pinMotorLeftFault 25 // M1_SF left motor fault - - #define pinMotorRightPWM 3 // M2_IN1 right motor PWM pin - #define pinMotorRightDir 33 // M2_IN2 right motor Dir pin - #define pinMotorRightSense A0 // M2_FB right motor current sense - #define pinMotorRightFault 27 // M2_SF right motor fault - - #define pinMotorMowPWM 2 // M1_IN1 mower motor PWM pin (if using MOSFET, use this pin) - #define pinMotorMowDir 29 // M1_IN2 mower motor Dir pin (if using MOSFET, keep unconnected) - #define pinMotorMowSense A3 // M1_FB mower motor current sense - #define pinMotorMowFault 26 // M1_SF mower motor fault (if using MOSFET/L298N, keep unconnected) - #define pinMotorMowEnable 28 // EN mower motor enable (if using MOSFET/L298N, keep unconnected) - #define pinMotorMowRpm A11 - - #define pinFreeWheel 8 // front/rear free wheel sensor - #define pinBumperLeft 39 // bumper pins - #define pinBumperRight 38 - - #define pinDropLeft 45 // drop pins Dropsensor - Absturzsensor - #define pinDropRight 23 // drop pins Dropsensor - Absturzsensor - - #define pinSonarCenterTrigger 24 // ultrasonic sensor pins - #define pinSonarCenterEcho 22 - #define pinSonarRightTrigger 30 - #define pinSonarRightEcho 32 - #define pinSonarLeftTrigger 34 - #define pinSonarLeftEcho 36 - #define pinPerimeterRight A4 // perimeter - #define pinDockingReflector A4 // docking IR reflector - #define pinPerimeterLeft A5 - - #define pinLED 13 // LED - #define pinBuzzer 53 // Buzzer - //#define pinTilt 35 // Tilt sensor (required for TC-G158 board) - #define pinLift 35 // Lift sensor (marked as 'Tilt' on PCB1.3/1.4) - #define pinButton 51 // digital ON/OFF button - #define pinBatteryVoltage A2 // battery voltage sensor - #define pinBatterySwitch 4 // battery-OFF switch - #define pinChargeVoltage A9 // charging voltage sensor - #define pinChargeCurrent A8 // charge current sensor - #define pinChargeRelay 50 // charge relay - #define pinRemoteMow 12 // remote control mower motor - #define pinRemoteSteer 11 // remote control steering - #define pinRemoteSpeed 10 // remote control speed - #define pinRemoteSwitch 52 // remote control switch - #define pinVoltageMeasurement A7 // test pin for your own voltage measurements - #if defined(_SAM3XA_) // Arduino Due - #define pinOdometryLeft DAC0 // left odometry sensor - #define pinOdometryRight CANRX // right odometry sensor - #define pinReservedP46 CANTX // reserved - #define pinReservedP48 DAC1 // reserved - #else // Adafruit Grand Central M4 - #define pinOdometryLeft A12 // left odometry sensor - #define pinOdometryRight A14 // right odometry sensor - #define pinReservedP46 A15 // reserved - #define pinReservedP48 A13 // reserved - #endif - #define pinLawnFrontRecv 40 // lawn sensor front receive - #define pinLawnFrontSend 41 // lawn sensor front sender - #define pinLawnBackRecv 42 // lawn sensor back receive - #define pinLawnBackSend 43 // lawn sensor back sender - #define pinUserSwitch1 46 // user-defined switch 1 - #define pinUserSwitch2 47 // user-defined switch 2 - #define pinUserSwitch3 48 // user-defined switch 3 - #define pinRain 44 // rain sensor - #define pinReservedP14 A7 // reserved - #define pinReservedP22 A6 // reserved - #define pinReservedP26 A10 // reserved - - #ifndef SDCARD_SS_PIN - #if defined(_SAM3XA_) // Arduino Due - #define SDCARD_SS_PIN pinUserSwitch1 - #else - #define SDCARD_SS_PIN 4 - #endif - #endif -#endif - -// IMU (compass/gyro/accel): I2C (SCL, SDA) -// Bluetooth: Serial2 (TX2, RX2) -// GPS: Serial3 (TX3, RX3) -// WIFI: Serial1 (TX1, RX1) - -#define DEBUG(x) CONSOLE.print(x) -#define DEBUGLN(x) CONSOLE.println(x) - -#if defined(ENABLE_SD_LOG) - #define CONSOLE sdSerial -#elif defined(ENABLE_UDP) - #define CONSOLE udpSerial -#endif - - -// the following will be used by Arduino library RingBuffer.h - to verify this Arduino library file: -// 1. Arduino IDE->File->Preferences->Click on 'preferences.txt' at the bottom -// 2. Locate file 'packages/arduino/hardware/sam/xxxxx/cores/arduino/RingBuffer.h - -#define SERIAL_BUFFER_SIZE 4096 - -#ifdef BNO055 - #define MPU9250 // just to make mpu driver happy to compile something -#endif - -#ifdef __cplusplus - #include "udpserial.h" - #include "sdserial.h" - #include "src/agcm4/adafruit_grand_central.h" - #ifdef __linux__ - #include "src/linux/linux.h" - #include - #endif -#endif From 926e4f5a0828ceade6bf2f6e2d17256f61ecfc72 Mon Sep 17 00:00:00 2001 From: roontoon Date: Mon, 14 Aug 2023 15:57:25 -0400 Subject: [PATCH 06/15] Delete esp32_ble directory --- esp32_ble/backoff.ino | 49 -- esp32_ble/config_example.h | 117 --- esp32_ble/doc/step1_add_esp32_boards.png | Bin 201675 -> 0 bytes esp32_ble/doc/step2_install_esp32.png | Bin 152586 -> 0 bytes .../doc/step3_choose_esp32_dev_module.png | Bin 256067 -> 0 bytes esp32_ble/doc/step4_choose_min_spiffs.png | Bin 276981 -> 0 bytes esp32_ble/doc/step5a_install_httpsserver.png | Bin 38180 -> 0 bytes esp32_ble/doc/step5b_install_arduinojson.png | Bin 86398 -> 0 bytes esp32_ble/doc/step5c_install_nimble.png | Bin 53009 -> 0 bytes esp32_ble/doc/step5d_install_mqtt.png | Bin 43715 -> 0 bytes esp32_ble/doc/step6_esp32_serial_mon_dbg.png | Bin 233801 -> 0 bytes esp32_ble/doc/wiring.png | Bin 589041 -> 0 bytes esp32_ble/esp32_ble.ino | 715 ------------------ esp32_ble/mqtt.ino | 218 ------ esp32_ble/relay.ino | 164 ---- esp32_ble/src/adapter.cpp | 310 -------- esp32_ble/src/adapter.h | 185 ----- esp32_ble/src/adapter_tojson.cpp | 98 --- esp32_ble/src/cert.h | 51 -- esp32_ble/src/checksum.h | 27 - esp32_ble/src/encrypt.cpp | 41 - esp32_ble/src/encrypt.h | 42 - esp32_ble/src/private_key.h | 57 -- esp32_ble/trust.h | 36 - 24 files changed, 2110 deletions(-) delete mode 100644 esp32_ble/backoff.ino delete mode 100644 esp32_ble/config_example.h delete mode 100644 esp32_ble/doc/step1_add_esp32_boards.png delete mode 100644 esp32_ble/doc/step2_install_esp32.png delete mode 100644 esp32_ble/doc/step3_choose_esp32_dev_module.png delete mode 100644 esp32_ble/doc/step4_choose_min_spiffs.png delete mode 100644 esp32_ble/doc/step5a_install_httpsserver.png delete mode 100644 esp32_ble/doc/step5b_install_arduinojson.png delete mode 100644 esp32_ble/doc/step5c_install_nimble.png delete mode 100644 esp32_ble/doc/step5d_install_mqtt.png delete mode 100644 esp32_ble/doc/step6_esp32_serial_mon_dbg.png delete mode 100644 esp32_ble/doc/wiring.png delete mode 100644 esp32_ble/esp32_ble.ino delete mode 100644 esp32_ble/mqtt.ino delete mode 100644 esp32_ble/relay.ino delete mode 100644 esp32_ble/src/adapter.cpp delete mode 100644 esp32_ble/src/adapter.h delete mode 100644 esp32_ble/src/adapter_tojson.cpp delete mode 100644 esp32_ble/src/cert.h delete mode 100644 esp32_ble/src/checksum.h delete mode 100644 esp32_ble/src/encrypt.cpp delete mode 100644 esp32_ble/src/encrypt.h delete mode 100644 esp32_ble/src/private_key.h delete mode 100644 esp32_ble/trust.h diff --git a/esp32_ble/backoff.ino b/esp32_ble/backoff.ino deleted file mode 100644 index 86f028e57..000000000 --- a/esp32_ble/backoff.ino +++ /dev/null @@ -1,49 +0,0 @@ -class Backoff -{ - private: - uint32_t min; - uint32_t max; - float factor; - - bool active; - uint32_t last_time; - uint32_t last_value; - - public: - Backoff(uint32_t _min, uint32_t _max, float _factor); - - void reset(); - uint32_t next(); -}; - -Backoff::Backoff(uint32_t _min, uint32_t _max, float _factor) - : min(_min), max(_max), factor(_factor), - active(false), last_time(0), last_value(0) -{ -} - -void Backoff::reset() -{ - active = false; - last_time = 0; - last_value = 0; -} - -uint32_t Backoff::next() -{ - if (!active) - { - active = true; - last_value = min; - - return min; - } - - uint32_t next_value = last_value * factor; - if (next_value > max) - next_value = max; - - last_value = next_value; - - return next_value; -} diff --git a/esp32_ble/config_example.h b/esp32_ble/config_example.h deleted file mode 100644 index 423b9f733..000000000 --- a/esp32_ble/config_example.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - ESP32 firmware providing: - 1. BLE UART bridge (GATT server UART) - 2. WiFi UART bridge (HTTP server UART) - - - Steps to install ESP32 for Arduino IDE 1.8.13: - 1. Arduino IDE: File->Preferences: Add to board manager URLs: ",https://dl.espressif.com/dl/package_esp32_index.json" - 2. Choose "Tools->Board->Boards Manager" - 3. Add board "esp32" (IMPORTANT!!! choose v1.0.4, latest v1.0.6 does not seem to connect to WiFi access point! ) - 4. Choose Board "ESP32 Dev Module" (if upload does not work: PRESS EN+BOOT, release EN on your ESP32) - 5. Choose Partition Scheme "Minimal SPIFFS" (otherwise you may get 'memory space errors' in the Arduino IDE) - (also see: https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md ) - 6. Choose Port (Windows NOTE: if the port is not shown you may have to install drivers: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) - 7. Choose "Tools->Manager Libraries..." - 8. Add library "ESP32_HTTPS_Server 1.0.0 by Frank Hessel" - 9. Add library "ArduinoJson 6.18.5 by Benoit Blanchon" and "ThingsOfValue SDK for Arduino 1.0.0 by Kyuseok Oh" (only required if activated 'USE_MQTT') - 10. Add library "NimBLE-Arduino 1.3.1 by h2zero" (requires less memory - only required if activated 'USE_NIM_BLE') - 11. Copy this file into 'config.h' - 12. Configure the options below and finally compile and upload this project. - - - wiring (also see wiring image in Github folder): - ESP32 Rx2 (GPIO16) --- Ardumower PCB1.3 Bluetooth conn RX (3.3v level) - ESP32 Tx2 (GPIO17) --- Ardumower PCB1.3 Bluetooth conn TX (3.3v level) - ESP32 GND --- Ardumower PCB1.3 Bluetooth conn GND - ESP32 5V (Vin) --- Ardumower PCB1.3 Bluetooth conn 5V - - - Note: ESP32 D1 Mini (china cheapo) can work as a comm/BLE chip. - Data is reported and mower can be steered using app. - Things to remember are: - - need to wait few secs after mower reboots before connecting (CRC issues) - - need to close/reopen app if the phone disconnects (CRC issues) - - Note: Please see and ask in the forum if you experience HTTP connection issues: - https://forum.ardumower.de/threads/sunray-app-connection-issue-solved-sunray-app-verbindungsproblem-gel%C3%B6st.24467/ - - NOTE: If your ESP32 is not available as a device, you may have to install an USB driver: - https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers - -*/ - -#define NAME "Ardumower" - -// bluetooth low energy (BLE) -#define USE_BLE 1 // comment this line to remove BLE support -#define BLE_MTU 20 // max. transfer bytes per BLE frame -#define BLE_MIN_INTERVAL 2 // connection parameters (tuned for high speed/high power consumption - see: https://support.ambiq.com/hc/en-us/articles/115002907792-Managing-BLE-Connection-Parameters) -#define BLE_MAX_INTERVAL 10 -#define BLE_LATENCY 0 -#define BLE_TIMEOUT 30 -//#define USE_NIM_BLE 1 // use NimBLE library (requires less memory) instead of ESP32 library? - -//IP WiFi: -//#define WIFI_STATIC_IP true // activate this for static IP -#define WIFI_STATIC_IP false // activate this for dynamic IP -// if using static IP, configure IPs below -#define WIFI_STATIC_IP_LOCAL 10,0,100,11 -#define WIFI_STATIC_IP_GW 10,0,100,1 -#define WIFI_STATIC_IP_SUBNET 255,255,255,0 -#define WIFI_STATIC_IP_DNS1 8,8,8,8 -#define WIFI_STATIC_IP_DNS2 8,8,4,4 - -#define WIFI_STA_SSID "yourSSID" // WiFi SSID (leave empty ("") to not use WiFi) -#define WIFI_STA_PSK "yourPASSWORD" // WiFi password (leave empty ("") to not use WiFi) -#define WIFI_TIMEOUT_FIRST_RESPONSE 800 // fast response times (500), for more reliable choose: 800 -#define WIFI_TIMEOUT_RESPONSE 400 // fast response times (100), for more reliable choose: 400 - -// comment this line to use HTTP, uncomment to use HTTPS -// NOTE: if using HTTPS, you also need to uncomment USE_NIM_BLE above! -//#define USE_HTTPS 1 - - -// Relay server -// -// Install this library with the Arduino Library Manager: -// ArduinoWebsockets - by Gil Maimon - https://github.com/gilmaimon/ArduinoWebsockets -// -//#define USE_RELAY -//#define RELAY_URL "wss://example.relay.mow.timotto.io/mower" -//#define RELAY_USERNAME "" -//#define RELAY_PASSWORD "" -//#define RELAY_TIMEOUT 1000 -//#define RELAY_PINGWAIT 55 - -// MQTT server -// (subscribed topcis: '/command/start', '/command/stop', '/command/dock', '/command/reboot', '/command/shutdown', '/command/"every AT+... command supported by comm.cpp"') -// e.g. command for start over AT+... payload: /command/AT+C,-1,1,0.29,100,0,-1,-1,1 -// (published topics: '/online', '/state', '/props', '/stats') - -//#define USE_MQTT 1 // uncomment to activate MQTT -#define MQTT_PREFIX "/ardumower/" -#define MQTT_HOSTNAME "mqtt-server.home.lan" // IP or hostname (example: "192.168.2.60") -#define MQTT_PORT 1883 -#define MQTT_CLIENT_ID NAME -#define MQTT_USERNAME "" -#define MQTT_PASSWORD "" - -#define ENCRYPTION_PASSWORD 123456 -#define ENCRYPTION_ENABLED true - -// pin assignment -#define pinGpioRx 16 // UART2 / GPIO16 / IO16 -#define pinGpioTx 17 // UART2 / GPIO17 / IO17 - -//#define pinGpioRx 9 // UART1 / GPIO9 / SD2 -//#define pinGpioTx 10 // UART1 / GPIO10 / SD3 - -//#define pinGpioRx 3 // UART0 / GPIO3 / RXD0 -//#define pinGpioTx 1 // UART0 / GPIO1 / TXD0 - -#define pinLED 2 - -#define CONSOLE Serial // where to send/receive console messages for debugging etc. -#define UART Serial2 // where to send/receive UART data - diff --git a/esp32_ble/doc/step1_add_esp32_boards.png b/esp32_ble/doc/step1_add_esp32_boards.png deleted file mode 100644 index 820699c8b5e0f02807c4b588cc8305516056a5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201675 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 z 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
P_-Oe0rsf*=>Hs^0l1^Rt;697s8fF2(=k7=vXX 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 z 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
ns}6g$*w!W3;g zUwK71HkyivIx`826d=>=n;POd$IBtwV7qK4S$_lH@d$u=+fjRsIy@S`2-ySis z))Qlef#W0F9rIb(I{3cK!Z@fWsJ6C**9!>3=p3s|*j^0EK<`DX@lX$FdE~}Z)4Qs{ zyvGI<(Ysow{odBscuQns22Z3q5d6hSR=W(yH2F+~X`XHq(IZZNus+6S#bt}%nF?#t z+E|_TgZV$=gVd=wz66WGTcju2JshiLo^eM377;Ki8ilJvw6QiN@zyKJQxc^z6CMTc z2T&dQ9jk1RW|#>{uqMEggsuKsI1*{HxVGm!ec@K&7oM_Pk9>Q~K40ywYL%_X)Qd7{ za{y_=@OaDS8WrR7I)oNZY}?<(_MApyuW@!gZO0r=n!_>D&5p@lyR*WlJEf?~C&+Qu zSfW`{9*~=l=~kULNba8xWj|J5jhsNehtnt-jlpE|)5I^PZJftqr^k^?gBl-jKo*bK2?%+(& z@XRzsc}|crb;W5{2V{Sa!6BQN6c*lsc*G8oJG~s5t;X&`ClI+`f63%d4K+!5!x$|H z+;wAz+n6qTOYtLGc;1uo#&)L@%;QSf>x5pcR)Rr&B{3Z@n?hGE!LG-`1?~l1Io*-(Q-%C$&s&O_=AD?d9>?<_a5z)s zPnC5)2Cozqa^tEDeXzR9|5hfZoz#p=Oe9Fr)zw`?A@e8nCFXVhnr2~TS*n%avDnIF z)^avY(5YE8-(OCjJdOfel3hODmJ#af!Y1h+txF5GYLEQXaR{iU=2Z~@|y)vzY)@b%RI zYtCof9nCchSz@^X-~_;em#V)`OlJ*)^-9rRx!?XPA6r(MUHbUWi=t>-rOBSz0Gq`{ z$EBVhFJLvo*$awWQCFOrDeGjwZ^D?XYdw-s=Agq@mYwOQ;Qr__5@PwN;tQE~Jkx6- zcDBr_kPP0#k}eQO4}8zi-CM6xTA{RGqA*6=an>-4bm7wRa1Wgw5w!x?J_RXIVRN1q zK6FfAE0${ki*Sm{u|i^KJM>;Pj$Xw{4BB&3O|e6HWA>;*2gqkp~Jfg8B)WC2g! zC$PQ`>wd-!Q5dK{_PxwA5J|bt;@Te`|6t*ul79^2r11o}a8xq*G(A;@{l!u(u`>8Y z-cqhVE8|&0Xu`g}@`ly2s6>nEuNqczoLXd!wH5LEz#*g0mM@0>Fvzb(SLU9sQXL6%hl=jBt@;EUcDh{B&H{Hl2?CnW44Cl?L3DbCLY#j z2o;}{h4E~N zcx5lJew51)otQf=rWP0*B9Dlm#^cTW@&fIuj$cwz8=*2O37`7)G(dtk6+m5F*v!kp zs)S$e+{u9#LYnFxjeQOpI$1Ip4a?f?Dy2te_gv8``xB)fq#Ayq2C~x`lBWsQagEB& zH#CNs9m2ieyvy28j!8At%wYxuN|L7&Od;Z_I2z2%@Yn2F5TA0z$@?5a+tOG4)Nc4~ zrT4(|2cpmb?{DXAhhl{UZO-yZGL~Fck<2a3m zvIR24NGhBz{FdBf@zy6mj6@uFY@fBQ#=>qsWJ$jwjhgEmbPguqjry?$J}E`~Np+RN zPD=P*p-bwQj3~FN8IOino0b)qIrFwzbGaO48-y*lFmDc5b- zTTrDD#eP~+E=!)&+KhZ=&&mYjF_9o22o#e%xUAD<5F})Ne`I*sqd;4i4~|j(p$_oA zUr5d%%)a1$7*&5*e@nab#E_qcF(EV8+3m<<;B#qEeFCtRRCeso`i`A$MTTwq?4xO7 z3cg)Z&+x;tac>C6ej{sTvYw66$_gHu9 zmES$fm=-{4l9JHa$BR|UMoXNLE#aD0!+GHk$M8?Ft2G(#i|C5K1TIz`Yp{Z(ZVHCo zYF^6%kMHzP0!pqqIAF|{nhkL;yTg#{>5;_@QW3WyzELWR$)-K=^L>404~MT1|8Fw3 zC0P}AZ-_s=&ke`l6eIWi z+h?0wh)$bjp!Fy2N~VmG{cOnV$4zf2bszfDPSiPvnLkgGKWEB%Z?KJygl5~LDmx`P z)wv@bH>{1UTHuJUm9M@=Qjg4k+Dp$8H?7qD3KZ&^Ci^0n1wfCeV-ZzOcDmE0b!`s1 z^7^<8X0=oQ4&XgQ9&qUo+B!oqhG8?R7`dnda)hti|DBDAC!<%lr< zj$~jG`iVz*`!}Hl9;{5QnVe2Z%k8vnw8T&GZoH5wg^J}Q?ya!?*NxyXl#J2e#eo<@ zq-K-sdt>8WFm-#zLjM@XA$p3yRJq+}t}WT|+<(a1MGV9Bow_vjgLo3xYg~(d_T#k9ZHV zkdwRQMe=%yLz0g1jL33pTlPa{N=Jl)eWRy1_~+gI!pPaI)@~MJz{X+lOHLaln6;n!>EC*>az( zyDL|*w6vHZ%`=CsBuef}3M~pyF`ZIU`xK=g!ceDlV47#0!1@M3U>?uEiHMNfEkb@j z5aDzmybc!Md{2L3^PAI{xB)q3;dlS~L@Jk_(Mm8ghec1aJ&1^MG#vzy{z&AW#E|gi zC&8ySZ(l{zv&BKnbqO6d=(&F9hUL4dG%gmayFJ&DN#|YK&V#Xol@7@`)try;?)$;@ z>D4nVt)?@0)Cs9;Ew^R^4m>T_A71!RkXGjxNS#)7R)s3QaH%$D;=W!GQ^-Z2a}ar! zJiCJXFKJQR?y>BUAtwcMLoaSi+6I^t1ZyH~Jax&>-)YPRW3@Qay~M_ zhMsSGatn@}q4q0%w=Ydmw0aCnzK{kSjEI=ND!zDJp`9h*u^Lduh(8glJ(<dEMgW zx`?xqa>mq6!EM-uFKIpuqx2KSg1mDPEzhpEH=IO^86NSx=;bQOV`XpJ?J32>T8 z8F7Z4MK-San~rP?&~GWsJ3i*fX`aOfsfS%@pkCH+D3bp!P+D%i?x)AXHHA=oKIC2v z*m_HEcQW^VbJkk1Xuf@X=n>b;$T*0r`ufyT9QjE86(T!*;&1$bFL%1qTew?UdlujA zY%M!&&#QSMg`e*^`HwE5&ZA%-UB6RoL7#QAH1C&}+j8z4^fypl`*jJ$3Af7S*c529 zGEE8v8Kz^}dJt4^sre)@h^HEW4{#m1tn=Fir9~67RS4cAF?(Kr7mp+!iTZS|mk4=d zf?OR-_;u|I-cjUQSTJlW`yV&+->uFd6Z1yAyhnsytlHEGkU{R`9RG8+-yAcsYhuEG zbudB0<5tlpICj?-`~8&OeMRL|YqW8dd0 znoHJ^N^hVz;m;DT-T>RHLu#87F03FnZLd-x}BSLJ$jVw{_Ow z%jepkAB(O=q2>DWzN@{PG5@YO_g1Pb%@7?C94R#6YhrfB5>P>rNUGc_#^^5biCbbt zk*zh*TLD%jd{djMg76C2*6$v;y2-5#~IHN@Dun$>pc? z3uWbv)Fb3j&T}#|NoWDK9&YktUbpxjtu^DNG%aqcBBKSJg%SPviaYx|Tcd{ytE!qB zgqu?|;jLbl)@h}^Gf>EBgU~*|%kCe)z)uKrPWnj_w;P$gDipY=6-FSLiP|F-f+(ZF zc|b+|8$dLm=x>tR8_VZ@1OM7}*%bbr*#qyrleM!4hQzvF*YLucsXTv%!s*Pf(bSty zb%c=_t8c1%98DkhhUusDofgu#PFMMKn0R$tyRPBDA+A_oPY$p%N6tF;CdQDrKWq5b zK1g{pb>3)~!uiHzy*T;ROsc4>8O*|dPpik6VU`4Qg7-cEii0@#H4-(4P7+2x)Vp)u4YKklva<@N1z3d!TimY4`;7nS^_9@|%sp$)uF`n^#tEvp zv~*|V#fM(k5eXl^`q6pQKG}ndai;+H^{a^q?BO9kRBM|hPm9~>J@c=%(|78Mtu<(E zI3%zxhj%kWTZ7ncdYSm)_4o8RBduk-{HnMxFOVd{E#>;e_A4{(g@WANfJ&ij2B@t| zZmWe>5Q>Rqyt+-h7N_0TMNVKkuS;xdYO0#+6vJIxKrt-W_?b#c9h}g`8}+rZBJ|xG z{Rnuv+^H^&4%1j6!+N*{4-GVV<1XNZ{5XH(MP{mZ^jBD<)(=!qYHoWFOD*(Nev(RE zw#|$0zTxMes66%N`<@uAgt(3-*<9k7!vVC}<}Rs^sDoRtWN`Bt5U969H|L)?Rq}<( z+~4+O%v`Z29%im$_;c%-eBb`IPd8R*z3%;(q6X0VgW8T?bx}po6*M%yZQ_#bYGHc6 zQA7sXuaV|8Es_hDF0ykRbm|<-3A3z9GoLAKL}-FdG`OQc-Dd%(p{D;v$aq3cDDx6^W3jhgLVe^>u2bAADJ zOSrW8a}<};fUXQFuj&W(3|iSaImTIE;&K3!T7&$yugX!!e6(Ux^eXP(f=Pwau>NK) zg|^TWTxn@3x8n|ao_M5%gI$SB=b26mH4*nubN1ntKWZ0`R+YIf@G|PUCWd58zqyWg zD59YRz?xrF2c}yJWI+^ER7r1+QvT@Tro%N9?R%e<&P3C6;&FF0msWS}j7q$?Zn)AZ z68NyCS5WBZ`w~4-vlJO9szBx`wv?X5zV2zR!3uwfZdL}(r_;O8Uugo030&yQZF4CF@L}b=Fu-kj>unAMvh~ zJOdJ>F%cVNmDg!HNa2IIRNYVrCvFJCLZsZLEhX+aeI%#m>unt?N~buiXK^&!IBoK6 zGVR>vq|B!AN)w#E7TnGNItUYO4CbQ(DpuBSd|2W2M($HmWK)+Q0r2EN!LC1{Gt6Y- zBUb9_#AF;g8767vqYPQRdgXk2ZX)Q;yf$8^YWRp$#zqTK8@6>{?c=N_FJ7Z2$gme- zXIS}O1WTe;M70)F{zB@q>_|0054*(^Vj!pvH%*=ndL0#PP9?e8NHXU=l;}G1w@YM7 zO7n?c=kcRN^e2O%SS>t|`LB)scvd_PPh<*;{rhbv`PySL)~kl58jyy&D$awGygoNB zSG`MLyEScefkOd++`A$_Ih5puhRswPt&`76O;O3QBCxG_pk(HojqRV3lFhfnT{@3W zZ%E{EGtEHAnj&a+`qTN8`#Rm9vurwL;f2z)no?c5rv^!}9;|ML1`Yu^&~!=NK`AF< zFEG~4YqwPIM}5L6C{b_w*_qG-=$KBY1F9Q~Eb4K!CLCdBUT(~sbRaB|S=oAYrm(5K z1}ReEW)6Gu^vh(Z%f6Y(b)oLtP_-651BK=KR{;?{;7sj=UPv^C6cXI#AIf@mH zs1H_{I0Tp#banfOFb9^JocP|B(#}_evWJz-(mV?yKTm`u%jlb~yWM zhaP?Xk#ayq=|NKAOOAz|jk(thqyx2Z$DUP(^dolW93DKE)d&1)vtCfW2 zI8U7aGFVV!s*4B8KTNIvmZDB6Lk9hSpWjperpf-l%~53C(;uP#NAkb8UodoZYuE2@ zHsiO&lB%*rVM$zB{;lQz(_$+Ze@y82W#|8U^6zgBE|wTja39|NZ^P7=-nrsAC}v6Y z|J#jK!D$2MFB0(oBa5S&S6TrVMlGr7^M79S6-g5lMz9?%#K-^`$A01CE!2s|uC{pC z*yB|{4eh(J4NnQQk@VB~w_%!vt#qD94wi+Bl?Z}=u!^`;C%I4%SI#^eM8f>|k4e0L zvkx_fCnQLmYo{IMI;k|UsV3kLlX3|qWj3WM^F=8TIE!J#s-{;uPvHfz8Rjp6>_=s` zFro?b_irh=1Vk>E5Fw0!^#X@&Rh9XB{m>yvBm*fky}v44vSf3>EDtD99v)f*k$thI z!=`l+h;|30mzEMhK6f(n`7Yf`3+g86{!IM*pO!RlZ&=${cT%Zo@P~K8G_os{Sg4q` zMBiqihrXt}clUugsNeUnSBn|seyIgNOJf^AeAYK^4R9J;JkBI4t0t`IY?2ild^1;$ zrq7Ntp{fKPZC_3+6c?M*UE~Faui|_M_$-o!YiK`0`-_m{kS*)<#Ekt|y*ia=<eSn$LE~2=*VMAIAipmlIJ*?fLARKq z7Vw05>vfU-_RS=mU47=Vc@_3KJD@XffY1AR#eyH~jxwSb?FYq!_?Pk?WFAL?ek72n zq1?}sTSX->O&^fTD)(t^?D6f$plFN1f(;`@i>U}F-}D0?Gh~X1DdTrV&h@OKYnfkK zLd&p2_bFg!b#@NV5ouJ!dy7P9sMi^`OCwPTLO7q8>P)l-fx-)xZSqB5GJqv3WU&C- zCX$>--r=J$X)))nf)#(+kZrsmb?x$nYo-ldVtIG=`0B}r~mVX9DldX#I+Xu*y8vaTph z^=?vA?BxbBr#G74X<^P^4H1#m_&!(+%>=$6xx=u#p^@0XI<+Qz9pu#cJ6nRe@ATp_ zGM2(NEPq+x<(uViHZz)->?WJe_*7hPcYTBN-@JnTvCoJAuI~WIeA2PH@=9F=ry$4+ zDLUah{%!mb{rTtjZP-F@7**RWdws}{Q|_;1IfXMDNB+kAa)9n0w0Cu^Z{1vcL|+7q z-w_C56j2_&(H%sxKPbGR1r9{r2JnAwRSk83aV{$onB&}i?RjQ2fbTn~X@fgomKNnm z3gr(cyzGd`iW&3hKfrLLFLlI$24p_eggBlCz4VTvKNrd8z5=n+53aJ60X3!RNOJ@z zc!grz1eC@l<2L|4uQA3LRL2x&9X|rYpTDlF7g!zVSX`;nT!($QL`V-eJq6#|1CJ|w z$Rn?pEyC)P@(U@Yy1^fydJdOZwM%_0X=#gZp~$|{(*>Yx^ff79P)+KKvkv}B&K_C3 zSRuLcwZ(bt=J}XI{iWbCuEcfgAys%`FI$#=qbW4btrL{6O9VzW02-$*WUnqb<{b8bFbR*%aw zT2)PPeaKvsHy^0KMZx;--1UaaSVbBTTpz>)D`oi6EwCedUJn-L=GI6lTuTe-X2@s; z7qyk7u7@;8<5zJ2eQ-@WJp;&^@hyI%i{4(lvf9x*)A6VDMNhlqJ)vbbfPrL!$}WzSw2>lus_mG&J2?6%_^IO^o^oeq1IXzwYKBR z#+IIWa`*hQmr32e8@~4Z4XOE2vV#X*q%P29bdG~rjDRTwjtr@f^}9xV;tyYC;c^5W zv|o=;P|^tm7zJo)bYJ?UX}rvPrO$skO6r^==CF;3ak4e-Z~SpRdq@Am0~AbZrVpw6NGI8V7*4SJw?Tyl$}Ffeb3skn|bAmh7{x2 zd8i^;KZ;U+#*Abji;J*{Xp_^ASXk>@6F8X=s;mXD>*`l`!H@+Zh+^yx@mM+@9j1(f zR9$*%{Zw3BlFu?xIa2YjJu;k1v{bpg&rhd$X1$Ld1aV$B!2InG2#twGOP)B8E9v2M ztopeRqlXngRwU7mTYDf89hrfJ-@d+G#|=uoyl5jDnxEf8l?lTfemiLrovDm)qFPF3h25=rypwb}F=@H~O~r3KuXynM4wot!b`;k5mT#3eYm zs!{KKsi(K|4o)m$=}w^AOI_u*PD?I9IgXaX>!Qh`+>K+SRqeUl3! zQqt(oddEGUL_nq!er3?FD{kGgbQ-z^wiP!086rOCbmy02P4`Rm7RKAzlOloPVKA8{ z+i9Jd_+{I8iSbd{Fa$IDkx&i1QD>pz^YD66D;{D_BM|GwDbCq{g3YC5+i4nAwHwNp ze6dDTR_dHwk|bA=?w$YQ;yH~ZUyhw3d))j$t~zHL>?T8UnT`c84oK)^IRX} ztJOS8Ap80ctL?8}e-{^<-Ij8(8Cl}%L6TMl-pS}wIWC0y#-vg8d!3o>y6=^@gz_Mn zUX?TXCOzZZ`A01z0)1ANSf5GD`G8deZ@ekUkLCx3|8N1i16Iv1(Qld|4g@_T)1IRwZH8aXvXHM+R|s`h=_gdghNQ1o$8G0X zoMCY|9n6&znO{o*w7Q$WVM_KNE#2=GSidf#!aWyqzfCS>VzDtX-99DDcV4v9UEyN~ z#uFQZ-DU^wZJcVyM=)d~sEr*jl3?-jnls8wV3?MlU>r_3;K8mrgHRgzdlvXf&jh^5 zx$3~C0rW(5>BFz_F1aAm%3AF&VeX5-w$k`cGVn)l=usoh{iGhs>QmwB%V$EWeiqLB z-9a4PrFBum<&X0W#Zci$vUs;2`mLh32Al=eGRG_>$OwAxpX z*!j>8tv}l|bAJo}`L9b`qKqpNTZYb|Drg{c@6{XZ!T4PtjBki3)O+f}sJtgjR&Ru+ z78aA_ILs=_ki*v6L zBnXTN8j1tTHt;Oz9L^^Ion%Zj*&51$#?-=tR;a?dQg=B2D#B z>{m)U=L>Eb%b!Sg052P^H0nVqvc_;@%J(}KI;!ICL1|tGUK0G5EE4w8SR7hIS3&h| z*6R|usPrtMGS+bZ%%d{k%3lI=EUttvi4o^&gs-y5MiJK!^(PDBBkJM3l8ZJtVvP1Z zM=c9V1DC{wV@bd^QW&m&c!#?=_$>b1 za}FV0BP{%kKI6RVTYq))X!5R_zO>CFRAgWJ0j1P=a;5hT)GA- zMOIQM@JAjyD~bMf3&^h?1}b|6<3O<6k&4q&wK9DCtI-_ob^&49fKMi&!6n)4r690V z;j5~kiKyFrWr`)+2QDa5`1EQe+MT=G$Kz;>?_khiUBfm*aa8l_X!d-sR)6U|KeTsR zSQ%p5rCivaB;Wagnwk}ZaYT|%K~7aDJVCi#h_rfVdCg{{ehGV^v|?>XdoOwQOIp(> z(a^S?KK&b=$|r@!X^EH0X_8*SN6ThzPa4W{LKEPpMW@k9ty2#t3hxui>UZtcPH zY*wa5*mtVLBGeS-0k|{anpHxIo?~8hZt7UA?5?-g1XNuE7SjQ8UpaE^`$`)Vcc@^! zoC79yYm$vab$=^9NksXXzsjhBvCZCX-%y&UNzx@P7I0J0X!v;-oiBGAP+u%PGc(iw zU4M*iGPo&`uyb|1!p}N)$S`ZnQ1ReN#@4b1-$rDb{Ka zM9=3$&a95Kg-i6?i)QZ2Z?BgfP}weZ(k!kL0HqwZ-i!zM6)~N9*E(Io?CuHJq|M&a zt3*KBSm-*JSvdr&;rlaM;Y3_Qbc=nLwi#)3=U%P^i#O|Ijd0bXC9ZZc+o8sGY3DVD zX-PWn@M44R!v#+c$dkuXRWJb%4WUdiUiimtFGMOol>?*ygHBGLk~;_P19g zPJdZq)s$N|8Dx;-^NSU z0)k8nWI#G*hsk<2Ccr7Tw-NX@5X3g(qoqv~E5;tU(bk064_I?R@5W_)cQNS4hEDEX z^9ed%gw1}h5x~)N>3Wi{$wRiAiV?8zFOyd~7PCFzft6`?5yH(p0X+ zkEEK<;>e%jY}Gsy3K~u;M;y}=7Ttv%Di&`-4BOsqv&XLmHmPgtaDSqinekDS2;QJ3 zOnB^UuXb=XS;Germr0VV-OmtrTrLIs5-eWLr~sxouY^iutsfM7N&^)-qw%ut^`|8F zo!PbM~kI7;4c+m2&xw24~^8>&#B*(E1RH>Qg0Aj(C7 z38D7fA@cxOGz+}LArLdg%dFd+rP<$1_{HwKIt0ML zlhf({$`aqg&xiN?y45iFnudxD{fR*YIb>E>M>ZU|0Qh!Dr>Fz@d5Vj7ll1Q)o_D1R zfy`B-arum{&ZI8$~Z72PF&i9UOP)Ut9PlEHp*b`jcQ zx8AD7d`9_*qZXj-#)8NoYtFp{H_X1+h(c`vmG(hQyQ{@0w&}{Ql^#e`j#1)Y;_Mb0 z1PerM-$#C%W_d%S$xpY8h~{mOBNuvnY0 z_88fcafECZ`02W`amN6s{gBz?)aqdI+@I83Ey*nOpxUX!c!{eUQRf};?t@O^3fBDO z>WI{Y^}wm9v9v}~%p9&p4>qAF{~z(#sl+kG>7B8u!k!V66ir&J`4xjw8YYv&@tpbmnkjs|eSF83Q; z9l-qMVVXSUoCjTa0sUNPcwM;_LFx>T)7x9XC9z9|z3LO?j&}@- zxuW2jppWWAQR3m^i>`vMvmRLo)vV!?2F2hAy-RJas>b_yoZCqFN;s zpQZo@vHcI1|&7Lfg{A+|M8mztw@PUZ0xKm()J<082?QGBSNq$3VLU}14A)1LN;?>x2jynOZv8^T_YAk_A0;vvY)Mnvr)RK* z9TtC6T2yVG_b^Lv>>crybSt^Vc7k;=Jw>6?4`?m&E59ChY9;-}?E*Eo^ zxIRg*_#~dkwdDbnko6p+9DEk=B(?V!MPbrb$u^i&AdlGLJ6h`R`H}EizEV`ejfb#g zWnehv{V{U^uU4XVj)mv9>z%?@Cbwg}4&%6U_xh8z*PxxE6kOhYKeeVT5TD6ayhBT^ ztr+2KRKDFi%BJ(Yje#yrB`ns{Ln;|_3bytR-CHbOo7&G3zlQP~ozGhXTt3P58`C&|Z(ZLcbTYenJsPxL?2lP|p19KS=(>WYie)2%=Aws2Hhf#x^GPZy zgk>huQr!)eGe25il4W=rb8u%5f{F4ER`Po%Q>lUev=$<}HeP4boZ-ohz7hw$^>f!5 z^-ZVcpOnNsToHHW*NMxJe0h%;PydNEIHOjEhlk%hius()9Bc z{xHI!g4~;~kql4me=Fp}G~q=2PTS>v8drN$21Xqp?bPwT0E@wW&Dzn!8ITn0WaNQt z)E#=!ta|^y?CI)8oQ-6&iGk(vREiK+x_I(I{1b@^=jv+vQ93beXG!TzT*B$hDL=&BXN+?lQg#w9 z6Cb|j+;3NUqoKo+N4)ndDACovU|4%*v>YYt%`(zc%xNK*-@9R~#;!4DkDUI&npEk` zn1fSB6GabL;Jv#08Q``=ssw_+T>*^q>h*sgNIhsk#vM>^CQR30OPqpd08m$oz76G^ z5`j?JHx1e8@O7C%#*g1FIfiS@I2Nxxy9a8EOmD_%dsl)VcMng)dpih-8sXQd7DD?4 ze|_u~_n_0BPQ%p%h9rt3hq|m~|+sx<4 zBNIztV`On2NbB9M)6Rrm8Zl-?n)}}3`DACcwXP6^#$}B){fn~>3kS*WdJt8OQ^A-q z&YT-ygQ4YLo$2&Lh^0w*#5T-`ZFfy#lc_$S2v9d6j9S4U-k=?HfG%T|Z14@&&VsJp zG1gmz5VBX-YtfWKm9EAd?X7daUe|ZMy5sP0`DOoI7-2=u)okCB8yoTdWy*wZVo0R4=;o`MJcOZ%b;Mu?7 z28Q{3PkhxGD4eaX{Fgg@h+`bf<-N%w0hq)F^WGkaL^~|GoJ-mSgk3z95AF@Mc|O|_ z?u?@$;ut7jz31yklCq&1Ol9H^(#;@)Y#LtCO zbEqlUn>r|fbo*`U9Qc%eIluJ814#1JB zJl$gOhI?ISOUKd!EJKB_1|$Kj8^YWhJ2f8t?nh%>;7bj!0E4ccyD()`J$)HYkx`E> zm34dn7LVH;<3>+j1xwSjzp$9hLlU4?cd{I!IS1yMUC45hILRqJFwXAO4f`81r)Zk% zh=uV*!8Z~cw6u<*EPmyH&LwKx$$DqydBm=Jo45%tYBGn}-ce!m`O>KbiEekwTpDzm z^osP#Z`3{5?e>uBF~s@n@DZM5boa?;dfbQ>W-7d&oju%9;U{tQXL}5d`_V8g->)Dc z22H$8Es`xpss5sTo==n@mWAs^I)1J#<01E^o1eRmcsOi3x*^PN`p&ucnTUPiV}sO&_$dknQ- z9!}zm!On~*QhhHL0jQbXI!axTLs3U47fyJ!VfL4MwNeUMr}SHJKwhn~#oVz^5qOpE zd<15@*tOR|YtJoAX-waTyfI2)kquc)QQ-dew+H{Xq+hLiZVW;sPKJVi9;AQ3?CWdQ z->TTsLSED2Si6+J<2e5 zHYl6yG;|b^I*sAqQT>8vGcpYt4aYbipN-^u4zIPIm%73LI6nl9Yb*X=xBsVS1}yk~ zU?bi3udhl~E9NupwC<2U`r%}#O}~BrZHAvI{V4M%v>6_#4>{b=T4vlqF?;` z*xfj!GX0vT0F>`l;^#=%bGTEFCl54L2WxV9--&J-bv?_B=cLfTuB~8!3Axg3J9mN1 zr8Q&3w6&g>|C(p}TZ8}a8iVi?iH%e!_HX8P_UOc*y3fZ(6g3b8iyEi~*PL&}1jSOn zXKguhJi_$iaVM_h!L40r>qrQ#%jgIt?4&Lu6Yh<~TR1JgOs>As`jtPZOD6Yi%s-;1 zW3nkRmh_P$O8`-S+MdJe)V?g{-#LtWpzS0c7B{u6z8V zM5Tfmm}jStTUK~Kp~|0bt#z{d}cY&^4h9Q9i4AFq|#95ph1e=WlYsqlzbtwTMmiE}zrq@;}mkRl*R2ab^?0+gM-G zwBK0~O9*zz4PNnu##ac{Ck)kd_(YH5H)`LDt9Z-w+{~A?Y>fO4au$|>-DSJtJr?;) zzmBZSy$;^uLR4a6--?&0dxik`m1}aro0pZswHy}Rygo1l7+@U}_^r?=ZW>qmB|@k) z|3kqlQ5GqN-Q(Szqu`c`nr8zC>$(`aadI!e(40L^(4F#}^H(FA`x2x@_K7Ty&V0X^ z>6XVr$F`mIJ^&3S1HZ(`hrds(Q=}m2M|7i}xdCA_;q^za z%5@dCc(6+_C;i`ZoKa$x(cqH5@REha^!}Y*`R5Ak!pGe2V|cPxuxW{DgWh|X%q3yh z)A?C|l4Hc~l?`fhaX~@s6W=c#pgS(N9?#eB%veQtAJM<0m(Z2ar8fqA^0QzzXGwe9 z{EC?!zfARWB-VX>I@6b*8|Nh2^l%#J_vx*Jq7N#T#HWZ!1aKZnhhQ20NAEqbpAc?c zt2@yw+U74k7aOc8VFl0gMVU-%LLw`bDC#}@q&ZMi;De*+4e~ERHO}e)=tzdiH)%7*82HOztM6TtV-NDMs#ltoZeYldUQF?M`H+)Hsf z73@?P7K%L1Q2CofL9oM#vJ@fsVC&X%V$g?sJ{6RoFw&4wvg}##;UB@E@2j5g@%&f_ zf!0sfcMDJG#2bVd^S+ zyJwyl`FnFo`hbjc-%JZh0m(k7fbGl~*6qP)Q`IHgl1>r1|GgF*Kuk19LKk7kf=fqT zWal({&a6thbfJY;(Vtw8J)`$ow~R+KGPJ%c{(EgC9YSWbgsut|efS{+F(~ z?aJ~+Zz2%5=|uuOWX4D{PA|f%j(CM^xJ5Iy1qr^2mi<80d{GUmLqffhBrNY6Q9JAp zGeb{yZ&#Nx+p?wB-*#%-@e`h)Hic7QeG|v=ykOt%6kZhcA5{8%*JWrU_G_u&9qB2` z#eXL>(1f+LaC9pp>4a5F`>xdGpynj{Fy3PEo-d{Kr^uIh*e{3J9CeFam>nPT4U1!( zN*5v3(ya`q`v->C{Rg;(Kb!QH|5V%mWNNZdi9|TE+{V z6+ka2#sBKFK^_Wk>B`g8iFu#1+S_!x7PGI?YjUG?*_v`iy#6{u`p&1!mOF;te3;)G z2}!umq{y3&hVS>q(+cwOU~9gi+dot=EbC-$_|kshxB)(Y({Sd75a1CxtSqPqb89+c zRxj0l!9}^U+B4?80c0{eN+{O&o^e@ET4b!)yWx%u z5l@+jFls+(s4lFxY!j101%We*iy5eIu4xMv(0^sDyVVyiGLW^j#9u^t9OP)6jV8k0 zO|6rFk#0$X8#u=0)KFxl-7O~L?Xt>LrQ6~r??=-4lOnyQFinYI$ce}KgpxOMglQPQ zAhm7dRajcMB8l|H4X5IMtUH!FpmV;1UQswkY}q`6AW6Xc8u`V=M(`pU_mYt6gy7&K zYjo)_B=EG2x%B_M;lH`eBb0>!Km<3wo$e0qw2C!LZ~ryzjbZJj4RnjXarw!_ZJoc& zvI1@|m~}fE;=Q_`o*b*INsslZ9s?i%h>`xZ9DJDF=(J6eq&tH#z;Dm+nBXBzfSupo z{$x)zIEtnW z7Re$TjrN{8jCRq5q>$GgZbsRkZ?8pepFeor+`Ttxc#@Eid$!7Sjj1AaLI}IWg*=Sw zK^Mr9(bLm|?A~0bF0PMnjoo?Sw*u&gh$PA`pcJkyMWA})_Rz-02;lij^wAj!xD|PI z!|^!_ugjtCBq8#uCr@fH@AgVCsM(2i_7oKYyA}7oEoVAJ-JWS>J_6Q=b~iGWHoKn6j~@<`yW z2J6)>aP&biQ-aj-61K#_Sl;;!iLa)+4JxC_`zHLhSJG`!=oiMBWA)WV2(ViNdVxf% zQ`5dS>7B*~4}#QM+Z6-Y@ibYw9U#MJ&*L2%+f}s6?Gv3E+m&-FePeVhfwl&EdIOhC z9!VS!&lGN*T9ijAH45Q>x!9|w0_;=CaIe_c*3t1Y`s7e+(iKew&wgw?wBX}?>SXXs z!}q-DHIW~a_mWhG@4AJ=$#JF6AZmPU=-s<_t=Oo=zDej!B$?eT1kr$|#)(NMWwcH&YF)purYXwSlac&| ztq_LTk-uF;#*#=ku#<30a3ZNWu&!+|Tx*yCS`?a-uhWqko%h8afP!5RsZpws&{bG~%CN^>fbc>=xk52)z z3op{|;1*eIPlR5@W6Baxt@suj)FwpVjzA)|#iHmXJF6_!WU7&dzn^0QZx7*kBkMOZ zHo!L>5Q>-cG1jw-i#ON6gM1a=G>#1SFpG>!nir%I1q+!{Cf9At#$YHj)kBWBd)tWZ zj{vam`!3QySmcpSz`F3)y0 zpn%mkJH~bIAV{YTT52Fv|386LH(%t_Wh?pb=e7eh3-f^F++g|E?zj5W&Pr)%|Lg?_ zGI>L1GjeJ?ot>aEst#>Ozezj+-;$t>Vu=dI)z<9+4ZKvZ?f0Z9^|_|= znZan=M^3&y$sMDSS5R|yc8=P86!yKTDgCg*KXCrAqC(0g%5>I0O?>as3F#AxCPFoI`P`f4cIuWbPl%O7~Eus#y;4zUjPZO?=HS8GdcL zK1=JzEMXE^kAsOMtv8LOsRFKkZ6q!rq`9YkhsJD6D4czJ(w<}=*>kfq1oA|u4@fQ6 zxnp8awx2EDw5+Zd&uYSK2M~^Xot*?{M$L1gm9mX?!l^9|VRV@mKHz2(=-DBsH_9ve z09}Oh*8P;d8g~xR>1)dY+59_!Et~jr+e8vS(a>kX|*n zNPAxl0e`c`{p$ykA^Tf>>{*%x@hS#VXA+{B6bbi>Lo%Z<> zpql2a6DF9~E0?$ON|lT0&PLl(b5L^+w=Zhtalld)K{^jZSK%f=HzY2~NX&$O7w=qg z%u-^EoJVh$^z1lUaPA~m9N*^C?a@e=`@Vmz?EP}sGzrixn>WMSu5F$p1C6XKsTdm|R0f_d%|1N( zjolm2eKU0GrB=|W^{f@q)?^?(ak-0>=xsvHbdq%*@GI>(!s-yVbu2 z-90-7Up_#&j0D21MT_)LGWlX&PcBIKx!D+n^CR8 z;bj*GpVrfY(f9A~)Y;;(w?3c@XKqkLZ0wy5oo~E#XT0DUuqX%}ebV?ToZP90_0bKV zZxVZ4XOaSlekljjOyZ;9$TuW-tq-!XEGzYFmEY6OsjVpaYWtFrJy~)8lIhk2gI$q& zNSb7>D~zJ=4SO6~<15S%!oM9W8uNI`4H`uxZC_ts9df}-v(6B6mtohmQp$)LM%O9>wqze^zf$2{Bn=HGxmbt@~Ue;~^f_DH7OBt|B#& zcYX96B|sT|K*x0c(BSey1fNAJ#0kcuVdvr^1lwP_<}!eOt*8*Fm?qSzvDtv!oD&4X z1>UE(@sIodJ_2Ze+f<}q9q{VW3--9>H4TxYYb4ND?&rp`?d)ykX$whXv=FDpyV$49 zsVCDv?SP9{(MbE9vx6+%HbW%I266%hFZDh@y4nKYGBqL?Ncipc=p*=lPv!)h+4Gha zU{L9f4GL#3h;eIw@NX%j&!K z?((GHQsH4G!U@*C>-5?m*cXSdG^9P2JKEZoKGXN3G44m&zg+6O+x+OAcQ(=Ve>+)N z6QN1LKI4bnqE`T5?yh2V+FeHUiQS%6B3@NhcfKaze1FHx)lNu4=GX21A`Dj9RU-GsBv()U2#s8Ads>;T$RQ9tA_r&O8 zweD=Za2g1vU*c5l(E1tIDRtwcWidjbyh^z?}JHUlaXy@rT2aiKi-taZYSau$5okQsFr zzt{TU+ruF6FAd-sLgOdlAHBsu=w1`}F^h26f0llM~+toWQ_xp3ZeF!@$5$U0-#VjM8Y}OE`gj8TR10*E9j+stcN{e|{XBIIS=U z>q)6i@K`>F@b5wS{E3Q%#&P(Yjg`KFccg4eUR0K|qmoDhlzc^*`VL>dW*LeEeG?rC zvS^T=E03QC;;Cc&os|8j*~y<-xXtHn_qD=1NM8q&wv9VKITGuuFRx6?-+EB};wsiB zLMRPYk@m*bUSgytp_g5mRm?uJgWq*L+ZVUA;{VTS)Gv5wtd~)8KuTyiT7`lu^Ieq_ zs}9Dj0tbdJK$owF*ntg`)Zy5G&R9NSkq`F#af>hGrH2UqOOvBy{Yy;y+P#NU0hqW1 z$|^gwCj@>BW0eMw;o3`Tjqj})q-Pc)Jg`R_f4UcB=#04TGDcnP!fvXQQHl8Y{wyc; z#VP6{?N6OV=QMg9OI$Jk8UNq+cl7vv|9#3=86YXR^k;ng`E&OP7Z7Xe+r$4ag?6!i z;$wy3^#T9fx(4kCtk~XiKBxBO)nSZNwq%Y53}<5b3}yOxsque z{bWu}NtC5vu9|2`%KN86n>AY{$|q%-LCbVdsXw%fjEp7~6U#6Xi}A_O zQIZshQlvjw`cX1HT&gGb0lEA;#iVDUiedxk+A*Szo1`yD8<)2QpZAa&9mm5brbSmd z^iPO(9sgtDbV+>m1*ndeQiuZSHzFyvOeNjDTSm!{B1WUElwA5REw#3iK$|-|rnh@~ zX%fE1{axFx#gn-8>f>&(lj7Hs>u;{k%DcM1j|DBgN1moq)y-#SLc73R{=!)VWXz?nZnp?h|4bH+xw;lTvWu9)5OqrnU* z!By{{Xo5@}KHmDG&us~>3bW-u&`VG6Z#s}!=hn1;y-ocDofg=t-}q>2m6cPUd{R5- ztrXOpo}RAp^Uj~D^Q1!cPV>GDp?}^`%4@V(KZv?LjW=H3nWmqswHvnSdB=LAtfeD+cZ{$8s6Kc1Sd7FDN- zI|Y+>MU6}iqf76j51zW%aI592nEYy&1C)4uu%c_BZ@!L{;3K43kiSr3%5gfMl?Bff zHaqCqCJE+kc15;+38$hBsopITtwh&4!iI{#FB%#erfR)VKTsi=2u_?yhadTcELyRw z8E@XIX`l-_vBoIAQ_~1pIljVmHbm;5BBz}?tm@Mq;$3`#%{NFdSqnSGKmF4d#FWds zxg1`NsT^&G^E#d$Z@o;Mdx-ZD;FZA53u~=Zk(6sdY&)AUNdE@fv%?qmWqZ4(QWw0Y z36igzw}rAyh4hY)>^i_`#d%!;A*VMQR6s-SgcaMo4!b`3ioOe!rAWFPYce%4!CFVaD zWV%l{scxjC$2!8LZ71QQy+?z<$XgnNQ~@s~vIQwTa(O*94lbD>}&22W|;kP+lhuC@IlP*<*AEmFlH4 za2ZIthnx82kL5Y6kN0q@8@Lf{oD)z*S>3j5bLO5CP~M-$^Si4+DL76-s*iLXzMhpL zk=gyvqFD(Lt}Wbj?8rQRA`z|Sw9aRF_@I}Q6TJ&;sXspstzFR%@z4me8c&sBv0_uZ z;_*7nEF|-@#Wo#Q$cYGPBSMW-<^EkV;h0B7%Bukj51CFcm}8j8F35~X*A2oyDn;eB z73Mn3Y4at#?~-HJJtJe=8tdS6yYsZ5Ak4GzG2wKLhZ;l`HfAxJwb00^LEc6J{@Iklyl*ed;O6RjxLFIG*r?Xz z>TF20%e9)TgJNLlx#_y1^nP-ja)Fnd)9kd-V;qezXvrv%-l?jt za@^aYVOL4MXqXV~q#VAc!ODxs-A;W2+l_Wywo4*$zy91E{rQmDZs`8HK{TE~J?T{F zqekn5hm0Jb**+FG_+yJ);o#=pGE?>0KDF&hjCsQ@m-7w{u{TX#mLN-R37FB|oD@@3 z3#-DruV26F9$d)G5_^8T2(v-!+|FDLgWvpYZKYRNRNtP{X@5M!YpK!w+F8T|aYI&x zP>P_%uy<)zMXc!222}<`!u3i%5iYCRMJp1|lU;9pPspvf zgOjr(xQ6s_UFOUcx8-~U`a%USZTGO;$aeMPD!}wzP9i<5uqc4s%x>BEh?X64EycFn zVw?c{R&jWk#aQZwu;{+NZ@3pJLJZ3Y3zKSUmDOH+e)J0m3hn`AGu)elL5+3F-1&uj zeUvG=b=2K`)>4E%sXF(Z>gfA=P*=W>jznH^X*Qn4PKv+|@sph!hCp<-^=q-a0S{Rj zVa98il4v<%TLi)WL~S2E02o>(WqJ6u_2QH})zZ!e+py=5;;V)_pTpsU)4iFy%^jVc zlhuRh{h!I2L>7g19OR{W*6Z%~Pgcre*a$tV-Ffb`kbR;g*KAdMUc>oN{&I?}-I?Ko z5d9BNrW_@UB#%9XIwK8!9+T&6Y&~Q);MHNHPL&kE(vLZRZ6L2swbd(07#S_l;I$ zw3N(W=8Rct>!jr87q_7*t7@v=>gZ@3OMv>hzv(D!I5>}bZ9Pp6;C_eiX^t3vM{|61!KDCN~E&nkmjPdrV-lv$J?G-UCgIMw>Y zx%gg+M$iW``|$AzhrNCp3}uK|Ph;<0j3UjZu!r3)CET2x*uSAM$mIRxI?g9}G^Cl^ zZ9%T$`zLg%Cda;Xx7at7u%CNB)G87x&eKYMCUz^3dOEy|13iYk`+(<@{qWIlNEMD$ zaZI$5SUXF|U=875hq-YJ->5Y`!1jMy=&b*L6m;vp8UB->OQ8xTVXt){a@Zl|0pT$aM5e!W5vVL_deA!A4qOn z%~$&!CS*4SR_3WV7$O&1f1oR1<9Di1Yb^+?XRtBVQmO|hgiegUy<~qRqON&=LT)Ze zdNbtC^q0zA?j_u$huPH-o+*kc$$H5`LQ`-BHSy-Wq?XF7e3ji?Mknk(?Y`N@ zP7?FEU@LWTbv?c3Crfuj{NA9PTf5=wp8vRl`e~JqeuEVo`>lv>xjE4~?MF6%F zYXY7dk@B_S6%Kw_jAG*C{sgOOXO_$5yQnS94tynz&2~xh)^q#8$~%fzzOO7m!M_ct z6Snw^x0-W&4>Oe27Thz!f}PNt4|F+d-FcMzTiWTyo>Q7U z&0;_gOq&Cj*G+Q8+)8Z=HR5;n=7}3>(b$E9cAWRdWIUgp=nZ~sGoWsS8uywDmsE1jCjsmyl`7yylKo1oRJO*#idEBL+8W1f}lLg0!&xzlGdZl&nRIm(x#3Y zhPnWkw$w1sxF{w`;jCR;0{^bj3!0_&a(@K1rB5J@!Wlu}q=q8y>8{DppdQA~Y*VU_ z*Xb(UZPys=>w}77@VO}Xb0O(-gp7p+#}M$E5FOR{=$FzN42205(f}QdjrQ|4{_=Sa zCqPr~v%4BL_J)wmAC!F3RROj|jZZ`lCl4Ot2odF-$B}Sv4A`Z#ksFA;+zfHI;r^QE zc7#4s!ZpM!v7?KaYVN z+Wb-&yz0sv%oc}5n69*e?PA34OJar%-f5b)cgh^TnRT{i-ED?z>x(-l-3_OT{s>!O z-p?}Y>l|Oa>|Snr)#MpQl?}CxGE!Vdu5EJ$Kg7F?;DZiNO;s*{el8%s5ag2gtWp#b zd@IhO0C7`%h_9-t@f#Q@o}HNs;15Ovj<(Jrf`X#znaFYjquJWpGZCR>kNOi4tN#SQ zlLhDDlp_-(J^67Q7)cUlPx~f|pt*Td^n5W~gjjn*v}eX00!1sv3{)f#g9aCY>NTn! z^UC%W2X+k^dQk=}9)=^k_4p#`$z)1vofI#-H;3X7&7t;-QH8;Yh2=_@E-hk)hUU}a zJa?N#(b43&?j=)cme3<2=l-N50-v9429wWcx}44UV>%+&UK*^>Mqo!_t3G);q2aXL7z{T3s(-=-XUg9v4xc zwhp#Q6^^u8C z(rz=2kb4awoT69|@^Jolb85q+>VUnTU8Z=GV#TR$ht2|UoJjV_sgRX~S}MlWk;Lx8 zNmh+M+V$;IX1|L6?!yaX9XgV)NmjgNFHE~p>WtU08(!1U*E%^Y5v*=|Vc;z#XM20usC2e&8&|r2gQTD>^AyC*_|Eb)J?<}q4aeDU57*(80#3R{|uXPm)N`d93n~0?MC#9?3k$JwS z4YO;Iy;zWE!L}?^jYIk4?Lw1wrLCS4TqA0dn0~mNMYhjM2YFqn&N}+-jj6l{|C8cf zo8(Iyn_Ux>c*S0A^t>H%lm6%8G=E1^;q49PKO-3zw+JI32IUuJ5X&a^qF*qCK-UH? zr6&jyww?PCqp2Hv+{#=iJ{#eCXrWU`3?`UvsFL#yWa*H6E%PfZjV=M9Eo#(5q+mPM zO++VZ#KsiP%H(8xk8Lhq2ob`%>vL|FF6NMxi{M)C&sUqd{uNHat%khD{-<{gK9^p6 zKk`htsa7$)D1N6TxG#s`_?N0IN*|t&np6L|B(mG^I`S|(D$62xH8@gRnaDK2fP>=7 z9Jj^x5iI8&aK^a%io~53GywE-xgnT$Z3z#$BL)Cbp|9994g&y+FBAZeitoQLf$P2d@Qn` zlT`Z3L}TF6q8chJkORxs!h6xUq6bGbK_x*Mr@8`i`g&v z-K?Iw(#Sf_neL|&`o%4mu24^7OFB-v^njNmc7AY}6q~YX6$ar-NgmX^lv#uwZWmlO zc(3JXSFbx(SJkLD?hG$|A%->>gy{R&^aj5#LEO+}zwIu*_Uv2rfWEhaZ5qgtpZ?1s zL*XQrWQAmk=GdaDZ``b7v?DJTH&>IHx%G$B#?WQYKeh!Ec`gT0Rk!Epo2m?= zj;~~+=tq9@(f8W3o|j=L|HkF&Ir~m;U2O1u{NVeeL8{a44@G6*v_0B1pn^SFwkUdu z?<}|^`Pr3f3JJU#vKAp?Vq$A`D`2^zYT8ZYWKf1agQT~no&sIwzF~A{+*jW4au|zUadx-c*A*4Aj+xQ}M#lFC1`26UePoQ?wIx ze0;n)p6#n2|e`#0Ba~u^Z%3x#t&Z$rHEh8Pn#PHHm6^gTX;eWt`@y&DX1IFz0PMqY} z6_rLGm!9=WJ-2j5_a#hj-MX^Xx5I&ffyvAnI@;P*#vS-JGgX#z0z-YVIokj11z*TavGm1_N^-K*mrYMfe?hOD zvK_Ts@jXq#m>3e|f}jFDMi4VKz3N#0F~K{}{^dAEf7Kz@k~_?JT7k0MU=r8I`mshvC@G6uDdcVAHPj4 z8}&HEwo&M?pf&d^J=V-%Kk4xQ`r%VU%Qe-wOXxw-IFyCzsrLEB3F4#)>7(+~4LR7q zrDMC9y30|TF)`Y_?dDoEf!y^`c4SR0Gl_@gH;W{nq?9v%D~_LCG&nf@U!#V?PdPDc zqZmf&n-lMOGXO=h*ybb6?3U2HC}?nsb@t@T1;UQ-^(xDhNFGcIe(;noBkxlxv% zL%m|`YV(ET5-?%V)JDHke%DLskiJFr1@Dgk5yqDaSQECUo8w&Z^7KSa=kKVfa(Ky} zY%UzdI+!xBAgD#N4@_T|ImF)PGS=pIMO0fs_xmG`ss7hOu8tOZu8vDxRSeeJjgc_U zm-ZbuCUEN&6witj78Zh@UM3#QZ>Y%Si-IGW9v{v;IZx-V7>G2HeohycOg^Pu*nK`G zz%Ir82UhtdtGi-Y2YgyTk<4+@6WN5o>@_vGrV8hIo3h|hGTeF%inFslwiC5AJ_am-@9UPu@(C9R_SKPoF{(V z81l{9V3Pa+FZscv1AB`uSf{3AG4}OS%kA+#S<}%4n>GXfaqTTAI-)wPxPeu4r!qdm z!c4{(KZQ2ds4ON+mYDOtxMro)|G4qIsqis|@Qat>p1wa;j*v0n9{l7L+zB^d%^}H) zf()NkKkc8i)fWY?XPQ8zGvcY$rd#)IW}z;lM*9YfUO}u|r8gI3J=7k%1Ba9@^6*}o zsQl$>wXkBH6q-jfG!gkn-L-5qY+b=P|90tDUz&xX8Jl&WmNJR@?#Z+Ged)?_ItEh< zWM(ELHlAm}NHac0g4EE_$gWu!Exx`y{ZU^3S|O2ZtOij?5{Qetaxu+I%!wEBz~JZm z!8eMTD;pG2^Mz-;wMM4+GB0ydU_Yv^>}~qLj^%{1^?0Z0(?Iug%oY@8td}q^hp(`FZhqLm^EZ^L(CiK{vGji zxevI_u~i>8EyPSpMu&6hgf9ArOq=RFy=Sv#g!Vzd*yE*~`K|VioznK=%$*iylj9hr$!&(j;_-ma zk4o^+3s-Z~_Xbm_FsWLv(%{Ae*zCV#G%Gqy@@Spr#c92$9PExn^%_7w_;QtG9<`;2 z@G`F`Hd;T*7!DHLaQ=wWPj^50kS^--PBw~ZvP6$}>o{L9WpX|zgbA3*>%Dfj=R3>X z_$@6?X6ZgR{Rgu*Kp4RwM+u|}Dwbq<&wI}sDwxd5Mi`1Rm-_eMf$E@4G z5#iSU@meYJqGiNHaGv2`$_(k9hTwEo!or7Ib~!k^FNLBQ;aTvwcsKSFJCg!|DObI0 z4ph|}cyG5nTwXo@Ql9v(O|iBtliITzt00}e`Ca$!&3Y8LtcY!~%sCY5e#uQ?OXAeS zKyvk*Hw~G*W&3YW-{fW9O*!Owi-$HtT6?Uz3N6pKuZCX?Ouq22tt(h7j>YvfHGK2a z;Aq0F=7WHGC$$!54z8baO{GA~H?d&GcipAzp9_8Umu7jibSE5>#BKE(KVwk;)4U-i zfp|&DZidL(?6k*T<1c^U+N@k^>_ND+a@Mw4@%Nikx@Y56%pcA-S~=oL}9+$jTJR4OY!s9QpWOz{HD-6O*-{hx#A>I5tv_Soy(TU|4M5 zc2ZC?M`!oXtI*Tx$An$AiM4^71*Db?u`SrQy{TEkjYqdE*Z&mCqHqf+vKM+V4)a({kx; zIV>G#Wo#VJ(>eT4zh0TUEOSkV#?rV;jc#h!aQU|&*eRnY^uwSBf-LO~UIt_#?t6n8 zYqx8qw9`+HPgQ}82&nFlbewm|nhFH0FFw!xVOAyOzekd7ZSPE?P3kvOGbJHgX%3TP z(;^dQT=v7a2{MObo1gi8KWix}dz;LC?@QwXywvWEYT_2V{F{G;V8I1}K)0dkPNk>= zgS0T(cDvdZK*P@4-HVI?nvyCmSi>l&;@t%D4`!*Je2*R zUiXf1g*}(8L-nGuMX}Altu0~=07XVaF#Bb<8UBEhorgcbW(_usaJ)jyP8&&{kKhUs)x2Nzy`dbvg{VRu=6%`APMP}n>`TFGM(el zi0jwy6a0560P9VqT*34_MrBBBl$gPC$EntV}o7chRy=+FnfB^Y&st95R= zo%fM#)Ow`!#%$M6-!5O=rJt;>6kWOtaN9>?*)43uxV&<~Q~mXKVlmu)+bAp@0^$JN`=v&JRMe$BG}XGx#&9Z%ivy-bJhm! z?a%TnRr=0`m5U=%2Gdu+Zr`N%_kqi~7Eim2#4|D}X>Yb8kX})E8ucf3rkf^QfaGta z{;G>L8#EdQ3`LQ#!<50t&RcH_pW2~fnFc6>3otB{z9QTwhd7pglTOm)Irnym@#_FY0dMzTQ0&kf9&QW_`l|7?8AW^=}sddPo`tLBM`X zpxNE(sj`}4ReU7ZQeJMA9uO8H)5LFH3 zSkA*fF|u$o2(+%muS3q$BUXJ@a*J%4Skx3;_?mizKq@IhGc)CCm4Wtu2E0z=K(y<- zLfoyOSZ9x3+sQbvlh|cp4c5nl&~1X=62N#uGtkw3Kfh= zU-zDUth2ZZIwxbJ-zP9PFuB&b8yZ&fW)Bs*B|L_FDZVi!2ja#_4g+O_;Al%|7J~ai z`XBwPmAZ-_EIJMHx(oRn;R&%lyo)}`V8vHd8nsq~lnjJp?ZsS95<}>AnPQ?%#BLG# zWEC0m6m~^Y(Jv}V-5;fZ!8-0mx$;P6H-=JjzHjn3ZH5PDT$qMx+K-qoDARC@p^ z7zq4Zy1{cyJE)1!@TdX%`LVGQYIs~Mal7+A!)WGiSSkrZr29lxb8sU5mD8;ZO0#34 zCI8sf-ZNZ=bs;7Y2n2SljbCF$2Dn+WTcnOz-n=s}*RLX)_ldnJa> z(%c)K>1x)`gY)f&!PF(coD81iRr`q9ynGBs87p|^i;4m$LmyD@&?T}CYABwk!}hVT&<7l|ZN{maxwfZY zKcVkm>6d2Q$(gKK8`hMVg%)R~O2F1&SF=HJNhJ1bgK;LHdACSVrtKm%XC3g3E3*m< zQVv80;b+(4nk-Cvn81z+;DGKKXIFw*`hEB=Kje)+#5!Dv0;3)#vCl{P>JJ=CTvPmW z?hE0+N3EHC-GYA&3OyTisTi<~+aDnfdD^FptS)Rx!oc`Pj@>#JPh5t!T*PjLx*new zW@m3>vo_Qjv@B1T-?@R-Zr(=+`m>V>gU#T&j&0*m$V|Pjz*yifS>UdWzS{z~(THvv z-5bHSJ;w`4J}<}GZ2lsgmHFyBc=6;3#j}8=65Upu%;3rCKLTys`PG+**|CuYcXYhW zl=9Je{P-~@a>QSOT{COYE~Nx;)vcAdG$SH%qb_Oejr^D^x5mx#R4;1Xb&U_SE`isD zDvh*`v+^$yezYznQP5d=dAg<-=IY+seeOw=n$q_Yx8#NK7lkzyb*Y(6^6L&6Y&(~X zj-sf`D`$NB%?cBs)aZh_<5!J(aZ@MH=3l`@{T91JOLmTxo+hQPQL+Q=f{qc=6OTpJ zJcW-uxa-I3wXnvpo}}VP8MVmSam|19uJUg@5iWamNIGv#xa@oawHI*l(DTsk3dzf+ ze2#LF5^@Uh2zM6ms1RhEfEuP7FOEWKd|E>nBzvrvUsi!BNxSd1g-t9=mK%Qw+JJL;! zOAn9@;K}kiR0b_oflRS=I&hvgP_-wG{qbOwW^(J2iuz=n+=z3NJvhG_#|v>@+p!VH z6+=Os=@oMld%^=U)3Y0i_U2J;*wj5m%o(@j=8(A;7gno62gQAAD&9s_fJq5r=GvOD zn)^#VX_a{3-LCJ3wm;b#{gJHnzch4-cd#%We>BDcFI1 zcaD=ztqaX~f($N>U()*pvQ6QoH{X5qH(dN(@~Bepk6T0yhAqApZKrKDimk1!WQ5#s z!8B3ltZCE0aD8(q*F;4rpke&skFW<{SH+H`G_x-TZ9L8oRubkLPR3QyAyob^;+0-y zZS;BK{V*bpGf?R_GIl`Ww&Q26fhE?S`>(o2k{Oqv2_hq{C-_pkg8L~6@#po6xCY%L=DN<65sWKaI-5msPq-?y=i zs{6Fj5UVpl_hxhEZ#jRq$G>cm{hBnKU{Dwtv~0q7pK%P5F6yw>pF|eP^jtzB*MMpV z@oYq@oCtfiMe$+bsa*nX`}m(Lc#|pdz13wU6n5UtU)tE%xQw}Z^CminDu9FCs^W=b zAz_1WL1?)fQB~g!gDJ-#uF_sEBb%r2+-W$kDF@S(c)blbM@=UIO!Y z!|G6u_e;o^o|Hf!!tAzuHcYegsioq<{HNQ%k`tJwR|OJp(aI;~S;;u3D@!t{jM8As zH4ATpQE#zH(9AsqAMmOQLk$@MR=fb0Z8+-5()&41=$W`-(qYzkKL&`*P1Gu2hQ!R8!r_atlz(m@pAQJj(SFn`kUAL?0 zqxux7N`q^x04+R}Nz`ef!F9DK=C41@cIr*TW%xDo6QBUC%DbeRU0r#;i%k1k95nZ_ zp{mpLW{wXQeNmvM(fP`bj)$p!&?T+0ROeMQXMA4ehf^EwG&iZiZVRrcs0i^z+v7cv zO8+%(%xI*Ht{YP}{%$&S#fMha94)00>9Y(*M#lb%=YeZU29x9Cxf^X~7EhZCybUo| zmT|QHdwph=DvtmpT8+Mv&fl=_>%E(Q4jjugHEeiE7pQw4NdnY}1L1$^RETbqOZ`FO znm$&C_O=C7{9r+Tt`03xZrrLrO@cq2Oy@NrNgIAg(!juF)#>e->O6__IfC%AFPVJg z;P=379FU70#& zZsJeWds|yTttwB}Xnzv8hHtp2M%&st|K-jXvlrHRyHWU=R z4m!9Q^ut@q+y#f%7ax!TAJ!ke^Yxma4)Hg5-X1zj{3o>X?eBL0C$d-`w0} z5RG(s`t}(u2cU3%onoGhq`j8^a_D|fn~P*R_LcQKx8TQrz^rwdHyoci?#|6wak`8N zZNC4Hg36NBmKOagiF0lS}feyh;h4Fbx@F5^~T zh$(`%kpg)pEG3muaL4r;D%5o37 zb3E>(mkg^H(HcDjE9m80^XeCKz+ny@)S&2@^!jFzi!EM!cn32$9i9yGMrTgX`eJo)#fIF)N& zZZB91v3H+9u&x9yM}0r>9T$MaSDa7XBPm&aqh+Dta=R>WZ87Fy@s1P|Vznv&AY7g1 zDw!;>mi^m^d7;H?m#fjy+ql0c?czF+eJaWy-b-pR(HMLWE68%IsB75+_3ouh!9xMS zB&2L5`vc*`a+RLwjMXF!UUMrS zdYj_s90G9@izjNhMT@Q@;$ybrH zkij*s#4J2Ur^R6DM!2HJkP#a)(UrSiDa(E%xhC=>9}OWjB~kGQ;>v^h2k7qaC!?cJ zxq@ryHL~|YC&RHTut1-zlzZuEA#k)k!+~zKZGXzSqfddSBu}>tg+qze6CnDaqYQB?}ii*eHlQm=QiBC0hPv zpTNATL}s@50K~2vJsQ&8Wm&EYJ1thlQXd%hSVcq(_lLR5SrjA}kTJBEB?&VY?aZ8~ zPqV?BMfJ&Q(o$#vHq)8IU&}qNPVVtGSh;q1g~J*XgM@};s|$(Nc7l%g>B$&toHsNw zlkr0t_{;=wOJcox-??;R`SL6E<@@aP2^1&84I2Z34Jy)1?EfA9A9DA=eXzi6)>FF1 zeK8HUbs+aW6ubO#*%u4(*qRBX8~!|e2aRt)er*lD&s=q@Mbr>kSVo&ZHbSW!p~LvE zoBfd~tcDjMmF;tryh_9L8DxJD8a=(1<(9ft6B>NdeSOkPDU^^mSnreZi%LkyEjob{ zD(Dvdm|brR)l^{$=lIp&789>5eG@>RIIah6JU)J(H9!>^hYDV8Y6wTCJMnvdHI*0Fe+a0ob(ZAZPq>yyh<1JQxt$(xM8ot> zoV|+o&J~GBZ#f3i(J;o)6G+)Zh;&W*^Wve)MZk@}WZ%A^<$b=fAem}mU?eY7M6_~J z7Z>|%de~SzHt&IpRkYq$E-qD)4lV{ldK7sGf3Q)GR&kmSANJx`8y+Z}MG5tjna6O~ zzi56?Dc=``qc%GbUDar~(E`vi-FhJWVRM7D3wh#lS#rmFq3ZJG1F){O%XT0eGi6Og zsD93!?~VVYANlAC)~|+0gOWUvf{h_nmWfHQmk)mL!Wm<3cy%9KXR0kEk5qoyEh3bS zhD59WXq|9as%+r|vJDVxt@*4GvKnflkp>XhCDTXJkp|U9`fEhCRU4{l%A9`HV3Gat z;E%-pr-ec6f1fs&F*o_Q;wvOWz!nwJCI99}@%W2~A1LZ9iwWtw(a_uuQ8!PB7k1+U z3@Rt$Gopp6H-mk@$(}i5sx!8Mk|IFoVRikGeVb0CyUoaE$9|w*533#rv(A$prIm=( zS;4<_Sgw{EauX4<7n+kHm2^ zQ}$`zMtxQc%4MlXa>8BRBEr1NlZ3ZWZ~NwemTILEVxPYN@m)#oVM#ymo%7?(@f8;>rmze7;K1`|FW8NlGycc+KWQ)Y!~2>X zG;W^TGcSol_&M)wlDvF?U?2`j%6l;_C?p~ds1sfV2PcwI5e-$10=8!l4!-)2ByP~c zynx35Lwrsx*f(Ap?(Btj#vrX2GSbdOxi8ftI|JXnV#9%y|CY}WjTU0 z_eARvHnaJd@p$eId@l2&`*QnvsL&6+6!D?HWoqh@@U9~>vBl<8n0## z)_h#WW1rP#;uq=rdy#{+r~chUis~^BW#;h#kXneL6duXe?tbTb5%@rvtWhC8f<##K zHSOn*s(ky{kkIxwch37PM1`qb*3(i}3$KL5-3geM774x+6$aeebo_{4vo~Z^*BO@| z{L#){=MJDB?Pt$uJ9MuJ0l`t9(TbB3tHsu1?|7Z#w*LGq6P}0v0ssK{c>(j~KLO9W zqM-vRwyU`so}$7^3BwfdlgmEy0OxC0^hJn-r!q-P*pNx&uCuu5bHKRl-+>26Bi`iFI=E%L?`7^zM^UC`vpBu>Z zCiIvPjh6J!?-=%xIxPLvfW(-@>+Q(JX`K4h2-&A0%ENi1+wp6-Ug-TOCo4;4(XZQW zvDxV}V;MWjFG2K)vN4Tk-CML&>+umWrax;Hb0)1QTnRQ?aaplnwt`gZSrDeS_uVFz z7MVOYWN^g0yW=CYjM!A4Ac8@iE{F4t6I@GUP&tHbT>jUMmqIt# zeuL|JO1CL{Th|vcGwIXC&9!>v>e}Ja{QM$i3Er3(z0zuU-`vvGZR zc2du;Q1_!THWr`UctLUF<&Ui601S>dWo!C%c}>_xB9MmXfmQTUbE&Fox*R6mhO)G| zxz^&T%aO1C18Sw|{7z)qyPI%z;tsa6rtiwcUCM(*w=GUn$M9Y-e#^EG_OV`x9~*iJ zyKvp2bgUtp5&B)|Rjjk@^M%j2KzM-Oc1OreDZWR9*KnzjcmQEPA3KD>00VVocbs)> z@-<|5=}3LSWWfQNf$k|yd3}#982J$C`^E*4FfW~Qvz1>Pma>K9!w}yyCb|LPgkPn8 zFN-c;wUw18TH=ML^|+Ouy6jkb1cVLTWt}QNX7t>waSA~75_@_=VjL1+ zg|xlBVj%QM;s{vuIHFU9f`|f83y-EE$OP@+-Gbn)WR}aq$ROw}K^4Bz7|s>O z9>`A#0DR@&z{v~bn;|hZf&P;zOuM6BV(K?zd824SO=`~AHD2F?{j3yGelCLqLQQ$1 zE=Fc$j=h^g8u&>U&l%@^X|l|I5;jvcd@wiM4eR z%Nc9nAEBaAa$EeG3j%H1yCu*QQVXKd6b>AFPdB2;H(D>MxA?~{81FNTx4X!>%8Fb4 zKsDLhI%ylIhKPr@zIdsaBJqs0VeFE{dGZu13#MRY8#XtWM&ns)9$Pb=`jh>+m_TmF*heYZuSt*L zo-}0PlcNjyvG_}n*n!O<@gMKP)In|9yCCh?LfpLj!gx#Ju8DWlYYAH|jiN3?ggTLR z=f#1ZKHxx)e8t0tA{Q~y@hTA`BgYKg0|!DQ_%HKg6(G@s;T^Sea*K-eX@FRaJ^rYu zT+s9Go@2M#MbYkTJ9^vduKH;H->IJ;I*t4He@fu#C4Em_!qOHS?qAQ6LauO;o_^_h z2bULV^yiFq`mv&=?vKspFzZ;4jZ;tKv8e|^%XO!+XYK*0t4MSjB6s+c_8r!--rV_< zj_Vrr6tnU2;pyUxKfeyM%!7ea2fP99h#zzFrn6%o9}PH9npC!_7*v>-b{`v0{qkiL z3(^_!$JJuSoixiCwS(praN~aaqcJEt@Z-CP*)W@Yg~VD>5vAh#wwI{=EA`g32=2Pv zW^Fc+;w5)>$aT?m4!_ha82Vmx!@YvSfA-W1Vk7;YQFL=}o_=#fmRajfx?a#vw^l4V z#om$2Dlg(xMEFKX%S_cf>m3^b8iV$p)+suONa(gRf}Y&<m>F_me_Ven)+8 z52cq<$v&4Or!9r`<~1)2>g$yf%y*b3>oqdQ6e}BeCfMGUo3~ZHMoQAZ;rO*)CTe3P zxoTAb!h1gKdc+x7WV}gNu|qgXr~4KOBXWHsT?b~s*C>fNS6efFgMc~PGAg`Tqivy6&XRL_p`T+xv$?Y$a zOF8xCOvBqsO1tEAoQ(S^8%${E?kMZ!p(F(M)GU{AI(NVzc0M&;254}JxgHIgALC?i z9ny-V6Rx+<=PWd|fK#xtoa^T#>%V4E7RiCZ8jK~=AeYl7p514#Ld!1wm7#i6gpY#A zSS8FmN+OL#yu92V3L`}FyUP|7AQnrRDoHm^B<8ALF*)IA%S{$b`&B!1kTubzbQtVPuv;HgVvLbhWnc{sZAN?4V^TfQ9VWI7YFb0imc!@`E zCXS4|?8R!|ARDh6NHj7HuB-G0tVOq2&K$Ms=Sznw=X0lvf(pM6VH%h+M)QCd@#c)N z#d(rtmT>0A>aQZL$DpQ~?s!Kv#h^o?0B4)HM^P2iEY3^$szTO{Fa;d9M;DY*T!BnO zreXxQujnxtRqEGwHxT z(|D$HgYgjC=yEO9cFtb?)-L$z#6qbE)24s%7u-qQb`j8D%df=?PHk5G>w* zMl|%s^rfS2&CB&eh?5d)^Pz9Rj!j%&|E8u>i@AYM7}?J}OL8W~&6w;s zy;v_*u8G_HuHaGN)E1b^~0|EKDX65 zK2XIBi&7uqUW7nuMp_=#Vk*&B6mP}J>1<)Fn@Xov&?{1DY+g3%B7&q5M&l%OG$a9P z>Gvjh(&{W8&#-6VVioTGY)0n1wX|%GiK*DG4tSX&Jr4=?|Vrhw%dV`xlzt=HC zG4^CJRD8Jh(pCtkcu@t5{>X47IuTUA3DZ-bJBip$3xb+enouW`4sY2|UCG%j`Nlml zD1^M`t&wo(Oxm|`G3J*#`Iz;g06y&D(8aottHEBXYQU%aGrU%(F2mDT;!dj$!Yoxv zn zVl#4Y)>G9gBiy)Vl*`ptHz39Vos103t7v=ona%@R`jBB-Ny5}ao{R}>VOnV_{ECT2 zIN?&8!qdYcP^=NpOLWt-6QpG`*~>a)GAL&6LAA*)D^tjXgql(;BDPyu8x{7&&^7lj z_Ucb!va_{v^B(SZLG+fHghh+&&3B6x6g0L!v+j@a1EDX+Ae9q0k@Ll>%-q+bdA=^r zZOO=Zj3cw1P9inOr?_H%ouNPpds`1Ya{%~0x2KA|y*+*x{Qi%uRELDM^}OWNJr&k; zc?lLfEt?qw#|0=Mu~}5zlQgv)d58TeWYERZp(3nSbvLBaJvRM%aK_=$(g#9-K#F+m zSgN)r`C}MObZgkG^j!py1vSNLRS-D~F$xcPly4txY(@=qB zb}K(MadlE%rV8Y|x!2jmK8S6?>k;%tLi#;IMST>1n=x#^@66xF{E^KSuoQo2Ulh0@ zWzM%HJzv2!MT^CGGR5mO6`A-Z*pU#OiivVhltjUXd&&o^#Ho@RBUU$}3w@Ot2xeFI zsego^;Ls4%_sr+szdYgW9}H*_rB?PV;PCVD?F@ii6|sQ#R=$^Y3KeP(sgJw7D-T3bPwf>wVd5~8w2Xd&Dv_<$-^ZTcKs`_R-2FUF zf{r4S#a``CVMb9hGSip6SsqV5QIve(5Ufxi73D&ug#uMaTG;SbQ-eHG&iAc_u7Rgf zA1n9(=e7SyrpCIqfS8y(V zLhgBYIk;k(K7>KItWn2dN266_r!Q`3BF11?6G}0>`6nm0`-O-Z5@huYHRbFt$BK>1 zQ~CZC8g#yoMplp)=^Izww0xWAYK752ofJ=Pzt8J!a`3SBF7l#kKI&;btF9rl3i}=_ zd#H{Z$~yythGH-fs)eF-y2$6(5%Uluk`m`fTnRPJjo`ydtvBng9e;4sOOlzP z-v=xY$@^L$tI`nW6?++|dpjnlF&NmF<_#(aCe#g+VDe&^zKKC)8-EBgQshVa z6)3qk*a9+IDkmZ3gn26k5uXalDB3f$dNzvfsDgnA!Qz3?+BtWt;^pIkJau1rIH9z6 zj&+(}gxt$F;vEK8mTR{yO&nX(MIE^v0=h9erMOq6v-Kt4!O#WIb*d3lt|}hL-sLIU zjd}aEco2O-GVj@$PYsB>+WpMEj|`7rO6vRC;VtIN2gtKJueBu0sg4`JgCDX+XVyne zRyaD4L_T7vEwN_Wk&!+%ZL2_z@f95_ z1RS*aVNScSQ+c$;b6-8JM@bm(WmK93uIfWr17AlDpV;*>>0P_j(D!_#p}f~eWmVqC zL(Ngz(=$0@u6EcSKmVllbV3n5m$^T>{ng|2FcR(mDE~dR0Z(#ihH#Ai7q$)ew86mG zAT=TD@`>VyzNWJ0BO9IrH$_Uiwx*N)WQ%#jp^pvzXjaselKrtOTGwY5Sbue{*^FL= z1IJ4KP*ewHHdz_TY2pT`JOmhIHQn|ceuFqd2-oMEuTEGu2p18YoJ#rx@VK2JyA7(7 ze%8$)V}bn2On2d*5mP_YLJ6uIL+pX;!bAco_Z}w(z!G&<7vh9drvc|Z(=QjH&vR)9 zpec@``!lXF7$VH<3)FM;?KcJE4?Uv7@kKYJQf6KHh=HovX90uTYhr_5Z}dUg*M)|w zZ3N=5a=k*vu(ST(LKAmp&3JEyJ4KF7tun@JFB4rWQf1g`sn$-xDskz7b*CRZ;p3my z&Cm+1`=!+oVtTKwsB4Tng@}UHscbp>2=d2#b4*ixt7?#Ghsm&&-lr$`!t=7s&-+tO zHrLwnOz0w}ye`UpN7m};7Sdm#xIk@N@6CKrL#tU#v)5%_r{ZMwX&GngBDTFZ+C}ag zm@4#qE-tus4cJSRHlF*18iaM(JKk0m1bg$uZ<~ZMrZW>KE{wQFo19iZi~n?2Gr&CP zZnMdLlTCAl@pMUq#fzd?suIh!yATPTuM*!^3SW#|XY+5zC*emzA35ba>(z>@DI2-G z`UAaiZMKVw;|L;I_5k`clLFeia|9WuKH%$$T%{Kmep$;c=Q0~mp(D|)Ayvj{dEsrV z$*CyOfHy04qvL1CNFPJVKy!6Kv0{n4p6}O<2iLBaZo{qhuU9!xQvAS@aYq`Qck^_!L@_WodvDLcQq^s9MIZa+YIij#hv=;3 z^#>xnzBB9KE%q zi!`@;xv`VfB0@{&PHVSC9p&s#f#Vx87=t-nvLw2R*8!5-{Q8e>;pd}8wMDTgND&n$ zog0nUh{MPPcCyJUmCoxGZH+5MmSj%rh)k~YxFwxAT5Yxbauls(@>^EObq{-Cp7SWLcu zcoeUG#u%0x@6GF?EhS=StxgN{;kI0{Hk?y~XOd&S1La=))6kik-^yI9=(E)`WMJLP z2M*+nIJ}2_7GTzh;ld|`sR{ke<$%|Swv<&dVqZKQre%BwuOo~3WqUEb zcG1l6UQhWiujK4+Nj7Gmg}$gZG|h9>G`Fx~&cna7($iDbsi8m6K5>AD^^gX4IM6Ew zZl(rK9QlPkUrmj=Ng{+djg%ik@Z#k>SQ(#tQ61m#juaS(39Ea8@T4V+oTBk8XrJg+ zk~@6$0Lf;;0N3Wg!;6+mIiak^0TgF(wtuGl`Z%?;q;cxcU34^=jm$5wmB6R zbPEJw@SZytbsAC!RwV`-9w>L zA19$(GW*TGf^<_OmNAT8kL;rrtWb&B!UO>~boi3StEmcByJ!DzzP&v^^da1Ta-xnvmZBAFe zJ##=ha+p8MCQg6&n7b)g;&P#zmHn`X3s1Y0`NjIBuL4)>>RQYTt|+jZKn_2JF*F=u znV7Kmw2PWYrFfr3es}&Z?s7nfx9U@!;utE6DU1pIbbb5YZdeeKkp+O1ZptwCSLXakBcs)ayRetC1F`cxW5vY$!Y; z%kF+Vv8dtf`xON`av?Uu6=-wkIu#Zpa>}R7TP@cG&4qCdK_zxw92`Ew%gSLg#ySCQ z^y)r~!YA12ZwI3BaZ~n{6sB0k-&|@Ee+-0~G{nb=G~DLe)Ns;Z%X)E7@zlv?cU;u_ zFh>2GO@2b|Ryv-yH=mSe{*kb7_@r1pJL7r}<~H}(NEgkGD5YlVwCeVcg~2^!J+*Wn zlNU*^a1I^-)4CwpS?Q)4&@PD%NU54vM{ZtszLOf$ymj2HEAb+3TdV%EJ@Ax%_E+I_ zhJIb|hR%xn!{w+QFbC(uMWQvm4rnYvw!=X)NgH_}V%a^%dEfL>@2U0&^|>#rfAma? zPF4Rooe^gw^oCjW$hfpqx>|J1b^7aX64H3e0gXc!kEzvT@l*PhG# zL`EAwV`Jd^?%rSjR}1iHUr~4A!6TMf!5KQS97u48mVo1H*vxn_!22CPe{00;f_DRK zTruGeJj|9W3@&nruCWSBBV9&%YT9jm#`LbhsJd@y1P5>1I-GZmLA*LV>15Q*RSxYo zw*xH?m=2i2Mi|sw|1k4Cedpb7?f!WhtftViJyJ;Gz4E08gNf5inj4)f1(kG)#vek7 z;aEWjaGbo5@%GuH*}!xMieKLQ?v|AgO^>}=mFe(v+wym;Oi^=giMt*B7b}(>_0NDT z+JzpfAaIci?H_hn9&-OcR_HE)WtAg2f|$DW3*^>%4c{{P`GNP&FQR2tMQaxw1Xq8( zGx6%rXCe_Uw@gI=Uc6CUmhJm-C)(k!o8X1xlb7Tu^xQYhLK-OMb+YxFdl*TU+rb^q z4=ma>H-$*{tL6P|f+Nocnrd7k(|62JliTDFMzSn>*7?a%9{qVtA-|LI;hxEfN9*V4 zdd`iq*2?Mt(KSJbO>qtA{wDv;KT)-UAnK$|R4Zp2{ZPP_H(ZU8+E3ckHp^L*3-EiI zzklMPrHwMzHQz|0l$er}(>h~!=NY7|3@4YiIe&Bob@9YSj@0k}P)*_MyV(wu@w`Q{ zDPvCq!2M{d8@yqY((`eBglbpDP$zb_@##3cia%qxeQ(zAnHFm{D`y8Yrlo1O zWMVTjGi#Eejgn{K(5U7^`GoyWTH)uiKTMI&yQ(p+ z*MPW}ewBnyF_6IdPKTn?^!NWUh>z=cV|Y|w<>x7@s@kCY^=>nZF~q^CFHPt%em3FL zgiuGO`A~{%f4OWKVncdOY2K2yPwp_$A3coC$$|{@?ZFOJT{#s@lwlO`e()v~A~DIk zgG^bPwVUaofKuFqSFF5HCicNnDa_HWq1i+i(@%cN8SwI`mbQ+NN6C82u7d`qL8_(v z%I5Cs?%d?!qwF*%yn_u8s6b)Mi>H!UHuqHc;k|QkU%ze_0Fvu z{3DsiZRPIp-%8=HpSvy>!m`~c^$ryJ=b?9K%9|E%sSZ>}fVty*A6uO!2_89JzS znDyIvFI$yOEm||(*Hxuquk#_h^EJ%QDqIBgFz+QFZ%5~Y+N}BG2PO@P9J5z35Yq|vzu(vwLIV4wZQMa;t zolEoJfh9x6JIi}jF5qj9n-dn}(jq1*;I7piFEKTzZTZLl%fI(%{3@DRIPGVy<<1N& zW{ovK>A~_c+IMqNGOl{HXFN|aPH8@$Xn9$pZ3iH>M>2$ok{H$8C(YjKa=l&E+b{W zs_sncTp>dSQy~n(P28U7*g3xDwc=q(nZEj8{?k9~niO;a&4wS}SW*8zJvU>sDCa!E z@+(@s4vii2VR~JK5(1Qwoea@Tx5LXfg+u>;g7?S90NMzrf9*SFFX_w<5@2iTZT>7UX9zrkFO}dvMVws%@+OmVG+Z&u5s9w*NL=Tot-4fvbcPs#7ytcZCWeH_BX zESl}nBW1fun$eY-1(z!Fm39#iX( zTKJl&xh9#JTXO>bnh_`nF%QKz#qMEv4c6%dZFXh&H2JNZtV5u4_TcjW{RN%fZIgO@ zaX5v1H=HnadAT9Vk`m+)^~vM;boU!gRW9p*OH`w$B!MY4rJq9telup1s#CDs_MB*Q zxtF@(FZ%v^E$V*$_M*+BsXt@TyP~K)F#nBHpSOoM_u(y|*(Q)WqpHo+i~zViGIyvz zdSN7D7)-XjJ~4xJ%)Qdr2U1>9c$v{hcL?)UI0#fQwd{yBRH#0<)9#uvsu>(C`{KcJ z+z!=^OMmz2lynpyR2jeQVUd(opn>-a(f8#?%v(+Tl*TmzntUE77G}Ab4(l0dcT{9b z7MGS7qqJTC%;hk<4dp)nwnnPiIOaM1jXsF*NL zIghpK(yxE3ybL@kJG_R6XMhs4iksP)ZLM{603a+nX`$L7<>YjHY;`hK)@lL|L`W=s zl(L1S$DddE5qZ@U?vyzJ^0S4Sjqpreu9aMPzV|1_?WDg2jh|=NSLz4|Uf3+|i_7D* z$<|XB?-aa&C$bD(Ap7gbHD1`w)lPVRVS%9IpBzxfx!#qqn_FXGgF!*!3;K zzXDfnhJ1tmIhn>Pdmr5i&KJAf&v&mgCoFznRpIILxDgcES8TnYB;sIngUEs?Sx*}6 z?wxE)p5pSI7GN4~}Tux`JhDbc-G=2V|!KTKiPa?lfDz?P01@+F6P?22=EE@LwM#VBI_ z%qWra4$noUrw5-p9c-MxoQsn z8d%A4`;1lW6aLnp9*W=?lo0-G?4_6Y|3lYp2gL7?)$#T`%md)7{PD_d_eBCb?PUDM2HB&D5PkRU(a)x8Zr_K2v@Q(+=j^_~U6GZ* z+=8N_Rqzo)vSMI@oVtyA_haGG-M{>&E#`H7y1LUluU^fSr@eW>E}&SmHeCjwq`Qh> z4-qkR+6)`+m1w_F6evQXc_x#ep=B1n4s5$oU&f#kMY=N=Tz_o~&{4>Y$V`v(tFxA^ zoBTEk*DO<+#1HVxPMoJ-3mM#Mj_p~5;cl+5LDih;RNG;xDs_oP#XhX=WHr5PbRT9$)-yhy=oB&{m2!{i|8PO)SIT9DAR}P1@xD$k%xuUpnjTMxuKPL z((6k8A6st$6=fH-fetMVBGRBDAYCF2DuO7b(v4Em-7zQv($Wng2-4j#<@J)}8=>cXfsiVO#PUHY`u5vStI9qcZ%5p<%N&{K+_aGRZXvSLlM ztwsDfgU-Xt*UK532UK4TXTLXd*V{Nl4qvWmokW`c8+M5r2G^re_r*jn1bcXuUhX7q zOJ;yydrgXwq4pmnZ!SjE1X{UaulxCbZ9+Jt*2;8Gi~%c z_l2A#eBTu79wuRj0h>sakX{Tvc1+$Q+ainKYZq@$M3uAk3#az;Py39EfzKP@rC*m@ zL}Qm=3s)6S)zKSgP&PBB@6~FM(JvZ`zbaOu{KtbcYOtj+@aR!El{hG{_F<{RJgrh2 zy6g^KD{kL6o_LKP0wx^VnhOC7+$Ha^oFjL#b`Ev%tx;qGqqGx2^1rrI?$?UuFhsbe zuUm5Nsyaz_O^m(3%k?uTbJbq07Ro3zx_Z+2oO`*vj|ZM)o*wL_FBW7kqMJ1<4Bd@F zl!=vb&CepRgQiG}UBW2qfDT-Lan30JKoQr{-X!C<@ABf5(xAY^ho!qBQKS!w4#459 zEVTso2en40q3k6O5aMo*OU3(S)8#}ZU9DCP?h-r(k#zMtOQ*Hd@n14?TeMhekyem0Yy?pgu)Ej<^mrW=#pZNS`mD6L z&D;5+wzTGK-?9<5P>(7g{E`LxlJw^oI;FwkH&v+JuE5*Wkt}5OgoC54+D0ydzUO3X z>~b`rSuJbVJi`at=yCjnhbPBss#wo?L^g~@Fegrq=kNU$$r@VTC%0&<2TX=W!D>T+A zkF17iffWtc1moCO+6$E;Uh%%BLMD#AlKK&5a6b6<@Wa_f(Mj`~!_MAiIPFib>>uS_ zcAaleIi`0_Eb(+saZH0N!zq7E2(LNmQZ=nx31B!k`Y8E$(?##N!_ykdHdL}HaU!8^1dwvQ>^tgNONn7cm*Vi=1XQmdt zuMWGo3>p&&c^iKm!n&9svHQIuH#rk{oC0 z?B7p7dyjwl*Q{I873lARN}8LKY0s+EPVE{|6M8RPoz5r=Ab}iu6dsGTfM(tZn*e?R zmM|nem6VI=O23zPQ?Or`EMi6gAg-#fzZ{s^O4noJgwDcg#R8u{7=&#oTkg%*d7n4H zOo6XJB7QM#Ty2@zV}4wUre-^VeG9GvGw_7dOW}GA+yBv8nB_YQU`SE!T^ z(tg$=*Wq$4VXVq(3U^<}!GS+7Z$iOa&tomlWtNCW;FW5@U)gbfse`5UD*G^+(2rOv zN#9a&bAEVr(AAf;e*Q{gx^*T;NnNySFFp8B6KV@9^5c<4Yo0m}L)WGy4Z9>=`SLPf z!t8WG%wI`TO-#s%u2Hz`KKerNn3@vsaI><$+wK5HU*B4%&!I zp;L3yJwxVfo8p3)Jif``k(TXN3<3YsSH8K>AWXrgY=rEjib+e;hff1X!=rtVZq3IG#mz`dDfE>SE(!hg=1n#{Q{k#%;j6%0m^^^Hq$(xMXgWjASO}AZv`dI$#&jwIxekJzwvQ3jUt^+J1|Q3gQ}|N zpjL<|(8UwJTLWA7f}t4C z7u=Yxk*A@e#X!@F3hNmG1E7!hZ853me)~#i=;<2af5t6JS^idKhbK7W*!v?+CZh$G zL!%C;S|D3kia$AQrEN!~Qk!%SP8i6=GL(8Roc?&)8H~!rO^!|Ge6Zz&TWpVaaeGLK z-Xy~>gVnD!y$C*2ARUwjIF_n_-7BVSLh!lE!9ES7+|ufxPtOMOuIn)_+>KUfZawC0 zY*7+k)Y_=N?JP4>VUBeGD4(Macw|(3{QWvZpi7O(!rk1O_2PXHy^LrG7gsfNu#1yY@FSn+AT`(G@XnN*YYj{1g&r=HT=GVlCuOI z=X%j)gQa$a&s(KrAX?Rxn9|?K|0++FqiaU2StCfP-q{} zI=9@eH3Q<=btIz@5-6M_OP#D!$&k`>oiQb% zdloil2T238$@pg`{g2*zbsLWRP3O_k(Rbah2&s5XmfHg60gw3UqRL-nvE}|3S%ly5 z+YOw1^@hfQAm^7S(j1Mfq1$OcKLo$oH@N;{-uqqkk0-ir70OOCrjl>R6<}$N;KE*S*X4d%iI;%z*5WO%hwrwF-N zkw=voLl3U^_4`&d4XxBbdTMGNK}^2gL%wH%AYj=f07WYE{yjNRiT>uCjY0RIkCOGG z!Axl2_h zHYReHaLIKo;nu)80OoQ)RYg)gcb7dkwaw1=IHmivVXr!CAov6&fEy1Tjv z{>x)0kIE%5B9DS9NP%qaM>mq+GNC<2ebk!JdSNZXb;lvjxZG88Me+(L=oF+C00fq5 z7?7*czWzih$xL`x1Wh}PGh?;o3)acrLW(JqPe&6NX`JRt!K%2#3--WX`_M3p4z z<@(sY+$IGW_3;Y8ur;BsDU`3WRjWsFwIXX@WKbhk8-5dw`>Oc$2*OEP59BK1=SX zA96#PM*BCW*EXNkjg1PRi?rwYo|1(HI}CM0`l&jUr1I{X2ubLD?iD8V z#q02ELG!`YUe1!$5YA%xeA*9UQWQE?;vx&4B6!bSCXvKJEz6+kawBLMjl{*U%+738 zXjmALS%2aes}_OxUAp(F{Y}4Eaak*dA44e$Fh!V|{Syp4gU83marZSLzSp$?;L)zJ zWjLRABGuG$z%jgW{G{5x4_pQV3wM0Z?CRpsdZE4w+6-)py~bl@p!;q8x50ldLWUR) zfcKDgNY{zGE>QcH12LP%+vSYQz`12js5ypsnPwi}%Nm4{>mCK-syu$HV@l zkMDhES^1q{@CjHn?=1zx5D!#a0AZ4ll}1IXf*3BvTOZ<9f+eGFx>U^iLABvmcs2Je zEb{bRw|+}pMzYoIj4HfQP$ASHe|>8AG2o>!VV_^w&XVZ-DyN@{^tJQNaR&MzuH^BJ zxUlPv)~&e)C~MW3L9X;{<#P6wky6O-#rh4=85xFl5TNgX$-z=<6hc;3cHR?FbhU&h zZ8ZGz1%Bke?)+km>Y&i?PYwQXaa?7ZJbF=zX+#eA4gnl>ybm5SUh7r2p05qIDyhp+ zPH|rzt#?6m4-V#-52b??(Q3l4pbFOx)H9ZR5gD)`$Ad{Ac&V@krZm`k%( zF_uN6gFVDJ)li|#t)KpL_LO$JRi4ZUWMJ{e+Q#AazE9-*yk3~D;8kaN>91Mc*18P- z^d%1ju$C9MQjwEl+lDxG1oS81$^KJVXmY$hAT-%$Q18qR*t9G#`lhzHZ??*6Yq7~I zyt%k;owm4kg+=eg3?!H5z_Iytl4xEJKFmpU7+ic|Vs9zKywCHTeC=ytl~1%ZwH419?& zth-7{=xn^6)U`84hHa%jb>U!)3^MMDD0ANWVBmF4?CYy~ifk1$?_VMXUr`v81gR>E z;zV}&4{g9JhN=Y}O&nj0j{a7lk@9w*@9n(0@(v_r8uZ$4>Z-IDqZYA$FeHtZ08A4b z3(N08mo0igJ!j_Y8PC7_p?kg9`>F(w-gtMBN56h)k|3mLczkHtm#eR>>ZR&);d0Dc zU~=YxOI-ozexn(+m(|#qnwm4F7trvW?&WH-Riwe7~#|8}R+Y`IC!vUS)@;2$%}A2NAT?;Sx(8(Yb;@8Cp{@UC7 zw!FMN5$K&Xig7Ss=X817(9SMJfv4^pmhQ?sD4UnUIm z76hJ7O*V4jw4K-IFhe^!zfhj~@4)j=?WM{6zk zspAf#_rVL0TqNTFJW`smuILPqny+!StwMhK`9R?}`7G)9ov(=IDFCpr>Mev)diR+U zLCagh>m^Ud5&`@77Ym*}{|^gN%NjD0t!^b1Z`ZXZ6u^zJ7%d-D2Mupz3c0}#YF_Szm1?Oz$Eq#Xt>8!;_Ij*Z5pJW69r}e% z6JwtKX=mMEDzwVSK6%=JL848>tgok?uI93i#F+*HE_pWxqr~7^n*0`*EKa>&QWu3c zg=1u#dc{)a2mV7wWc2fz*V=yqY$oRAFh7cWr{?=V~It|w|EQRqrboC83{WcUy7J1M%J|Tl7E)h2{Aw zEaUTX)c2=M6gnYo<$sE=!jlglPd||ua0-JzEMK?dBO)10`~X+5iLy`y79nmpjO)~* zhhS;)Zi%PPUx^dD|5t@$V(@k7Qq@YieAOZRN;AmW*PG%tf-f zr!vg$ho8u7iu4s5oB@iw{Nn;G@|2FuO)=i)IL!R9tnOs>#WmGmsk2Z9-Z~CkV44yD z=a5(<9DA*!xE7ah8zO+$(8AOpGT} z-#c&!hCTc{h$xK@m8RSokfVFY^=VM<;<4Fw;KLK5iTqyNvX467V=PH%T)fQA{axmA z%o-2Acwt5QW|kdZFM;0AjqIxv5D=i@vnNyC#s@#VK&Dri2uU}eDf^xu(DM*W^v?HU z0zsW|4PBe6iT~Hj+_Q!zGjELBPb`9kFZB_x3jn;g)dQ&*Y_Tixj+AstzuQ*9D0yw4H)3cpWJXj(n zyK}*e!orY-rJk-$)){wc+avW=QZB*KmD0W$B~?LW2?nr#Sg)AceqqU6BiQ}_FQ6h^ zz7st~r)SyoUktg@Iwrto#z;HUH1WYz-h;Op{K?b z=I4U|N(~Z{Vd48j3y?$W=!@K;+WLNi{GWUQ@-4lc90uDFuC1c`j{jug?_!W!l(XWt zd?fh)FzEtUNLlc%D|q=&S^fLds7VtUr}g5$f17Pw+S{k=b?5JG0k3aD6)}p){-dUT z+|9ww((sdXMkc80?A`xHqN6_;6C2$sUEpEFAOiC1>9t&o`d{|N$6dN!L7CbsbMJVS z6dh9R_yCpmb+TA{W>$ub+(JWtvdEn4U3^>~#NodyJW_gU+qT-h=8rlrvjabjGc`4u zaaWaCHF3){--EF|L2O(+VZbkayRrZXD-6F2vLj`XodX02DFR7y%}W;D8x82YmN%nhb`~m90B3~2=L0e>g-pNi@~YE^ zwtP>gxccuaDck=yQea5LNAwbR{Kg72IV1nsDPye$PhumHt#ON0%9B<&@no)t1f%C! zFTA6SqJ`RZ@1oEJkK@rOMhCH9dnM0*%)8Fd7G;7!_MT_f|1&d{-~cZ-RfG4v7s09r zp2o_GAzkq0Zy%WtF1=&#Q88_h12@T4h8~@~D@o`i=gO)&m?Q^l#oAnKz+2ZZmIJ8NbN-Kbpw4Hp&)^TcvjUcsi5b)IcL<{c8R|xF3G_!*Do(`87$* zSQWy7HtoB7SIj#QQLA4i3?Hj*sXU2@MkFk=Jt!tQKBOc+M5V^s^rH5CBeLXj=knwj z*VD4$Vd>L>UKb_|J|Mtllh11*>X{CtNM()Q8~(d+1G$y8iHjaM_*DY~yU<0+1|9cT zj~+4Twqe)<`K5t&-7Z?8`^B?PR3TsTd;-xn+lcO)2HqOXbR_G3e@M5`_^t&-33m(N-N)dA`tjFh?tY_So3cP12C9n` zha!MjDnP6z644IC$LJb)cW3g~`aIS%&?YmZzv;!?$x5dBrVrtDJG!uyUo?W2mHM?t z7()`L_YhJy)P4_Tf{v;bc$P!lr64|SKWZX%|bO*^jReXa*CW2|QY)lfmW%zqM) zou@ZdqjfnPsl51qB`NtP%Pe;>#MIL_1^X zGh?K9kP=t$(q_uL{Oe&BtL!YmE*Sj$0a@OaODc%TPK&rDM@9Oh7G4o{^I-yHwf!8n zQIKHpb|_ua!*@}_*99I9k~nI?iUPSK3$?uu7QN;@h9py+7Cmmi*Ymkt1NHkHy#Z2` z(pnA+L1*-0uLj!!R=KpEBYWe>kU0%wP2#_)^k4P#CtU=R+8sLlw_Co`lL9w>>+4rj z)A*pHL(n1vM$t(lmq{rxfpcEWH>{<-CNChdCIT*^rC}fPeyWJXPk)MqnK`srvYtg0 zJD|lz*7^I)aOFsqe?D^dv8V1M)fK4Nvncjrid~d@uy5F$Ba8i`A*aT(fkVBgRW<^< zk>^gsu}hG%{m-{iKL=obbaHpUjl|gN*C@{cAvV*6oC*B!%)GY>3Q5N`kV9Z`@9ixp z=y-~a0p4XM^hs_QwNSp?9AptJeVpMH(bnX3=-EWXBpSW1=cHuPyDkpCwyO3)vLhx7 zGk^WUESXY3V_;qMo^0v43<#N+naUz*r5zr@*_6Zd(A&bz~C=<9^2zyH$H-7+v}Tjpc}L2}$m(&eJpk_f0)TRYZg zOCh#D_01)XxltoNME|c@vY-MWcP-#~)$yVRbb?M>#uEln`^4yIW5DmaQV%3rggY=V zm)Lkc5%Y{~V+hwyZAyB%WUqPmz4*9|;&fuST19Z-m)ZH1aORQx-boSz;{f;YIC&gL zV`ONR^hi}`3R3U!Y;|TA-^dw2M)jF}+2uON&uT7}*}JWH_?IIr8F7Wb6^ozHu)MM@(-yEHuatFoH>k(^9Bb3RU?GA^PHY&1kX z_Z4u5+Ku)Poq%aB&Riq>Rae|cfj$REArio-IU!rpAP8va>Nq2+uiZ+eRmZbX8TM$j z*~4`Y`@wM5>x!EQT`4B*{YII=HqCCGqh}iGlpt1?fFnWW+|^%%?2;Swik_Yae!WL# z;x+$?W48n4srHZW-|4~lI4$v}%k?BELPF7x)ApDcRD78araN7T^YSdL7b~N8>8hVj z8>Uu#tIo%@wK>HxJLHf^VeYn81QRP2%n!TIS#D~=uBFrAN>5{p7OL}xWR25na@25z zrw|XLy4a9?)Q8Zq*yBPSh=dltHIc2F?7=sRT%%8F*K#NmME$p}cT9Z_PpJ96pZxjZ zifZLb0{N6WRrUZ=Z%t$+b9^9l=Bo29S5K!7vuJ3;qrqf^UzfMzLB zMJf~RH{C~Ujl6OKT*tMSfpl8HOzJ+fS+N6O5(>jyb;DiTQRgKNJ|~I%^9Ox~(4FHn z7KK`rFeF$HvIlhgbwDj;CdaD-xQ+xn7kqYxm^y(ubhYY~VxW_(IvHM@~RD|+%Ob(XU6&07_va1<;0HE^LX1b( z{?W1j=R-lk7`H_vFN)+|`N96s2j9Xeq-c!?7P%W-m$5Og;K6Jc*LGmSmR|{m z#pEFLdARV!@`UE=;-N&z6kS_L(_&euvnTXNxjAW`ZcTK#F&<#ymbtk)D!|g|S+C0? z8QP2U+oW8H+V(lQ32PLn<}07h^XS{xyR`T8F~57~2LXex{Bf7*o)Ljz%|;9v!fxsQ zco_Dcr*F4w$5o_R%v&*UQGhAxtlJm8)Ee8L_@XC_<|2^9X0q(B2fR{vPHLfdlABJ{ z^W;gfRjExVqogOF^~DohQqjz+Aht)N4(KNE#Qvk#>@?lAqXI?NKX=QYeW8Q%=-7^|h^&hxUzmDRbMEU5~=m zVQLe*Yp3aoEY1SAR>N+o$#yKcdkwG|EMy15NWI|R-rirewbXZ%5%U%1SNJMmpN+JW zt+|AS1~=7ObJD(e9vq`FX!vP*R%Io!Pu^m=>Z#SCdy}5aZdDX$djD9~7UkVV;(M0G zBwL)}){1krH3YU@N)L9Ha(#nO(-$9A<}JEapczx`E9v^?jbj?MzrJ1=F_}8MZc0jw z%tRu;nsTaq=Xjo4s<(ixvT_WRDN;BXG_9*8KiJ0`1KO!*>~xTFdGy{a~4S|l1I7nW`f+&gOc|s zDWlTT7zlici|L5`IXO9|D{Q+$DADH$IyViOkzK>1U^Wd_0UWeN_ zsHNJb_Cg^;z_Nq<2qkV}HaE>aqZS|U*oOZbNZ9HAsu@(_V{V&E`sMfT=)G}nwn?3~ zGTZ%~Nx1-sv0PZep<5%1zWs>omDipg$hLVI*B89sbh5pWA`?VX2FNm0C6(F&g)Ar$ zfEO5=F8zFQkBUmrrJouE9CJUNHJP8=5+F~Oht3!2X51EWs9y2#8r1&qy+#STUb*W{ znGUv-zP6>is~&gWa(%9sYt_ew{Z`n*T{?Ux>hQ>PBVA$Zasy8HtZ-&)8oKakw?0>w$Q8Y^<6DBkw+> z;+y`QbcvH<jNau=B;8pFl5 z#1UDd3`dTwg_6#gX9V#0uZLp=J2nw}o_9*z1f2{;qS}0B(xk8>s&Fk;CyMh6OJF9m z)v?ulfuD($-p^0pBxjY_vsf1P&aD5*vDuqa7BJ4=Z)Ta(G@fwV%Q>S>`KMSeU@2fpmo=?{NJf$LcrAfMhon^!HZs^;j@Ks{m4Cp0G=IX`;?x+1lY(1>KVf$@Bh}vmPs}DS z;XDN3;?t$1G=UuA-Xg9#6a08-5#z6K6tZ?g4YL8Y-a9CY7n3}j?es5s;FT}fkHgSU z+pqyh$oF?3jyL_NN5xq=AL+1MSTSfe!ddboZ9+g$D)_teeZU}E!3>oRV3-^noR=#e zhEVt+kRflM3Sx_(>0(1jMR@3mRPV+Zw)shQuDYJ``}V(JO-Ez0Z+VDN?%(}0t7xWd z2UTuJe7>e9AaF%55!+Ke)IfgcTLEjn%u>2!FOArr@9%T%MAaDF2q+wuBc3gy(V z`09U(@B@HIGv=(z!n->=OJW$Qe(j~eK~XXy@MLEuCcv(-wVhO=1;B-6V3?HkoLTp9 zreeAd!zU(gj+L*3ysKHi6+|6Z@5Gz(n{2*ocI{#D-bl9kbmnuEms{?+_7j*~h6|*UoUdsq@vg{q+_bzYDBrwX=6)s=&j!C^d?(w{K z*(onK!io$!5*)f+`M12aAYt)_y1l^vu%mpCn!0*Vb{^pO&M^uLeRx81|9&xlt?gz7 zmoc@VE76=Zs6@>!O5S@qb9SPH zOD$B{IW^9WP{n%mUARQ%sr4~0;6u%_k5 z@%n@pir2P|CDZrW-gMNshpbp~|2Zrdb$uRFX02^S%3`7M;Q3iwfC;ajd}j}v)2g|2 z))k?ld?S|e!QLYA^H!m$CHx}o2-EkXrUWd4X73zFWJOL34gck~38`OR5ixpWz9P7< zxCzND;-{VpSH!zMOjdXByh|SS3P1xvarE3~`+JfnJl$+$2k=Ap=>~IBFR3|liIupRF8>mgQf_gq*;dBiAl2EUsDsq46- z%4oG{gq0e8zmKavY9 zY|NW(U-B*Q4>i`AQw(lDE(gVnBxB8@%B*R8c$;F61P7Ov?0o(0E)H-b-z=2l?B862 z+(SYSiJ6pvLppGr42FQw@r-|6>+(S+L_qpC#U1QN5ACxFrl}R55Iln}DJgY2%zL6J z$fJ;e|0TooCh24^O{Ju9F*`dOyB((AFkNoLj7TWLHF^&F#FJDPj$vH<8(nKi{%8J6 zmlWvBT6XT`7XpI7u#boku;WV7`SUG0Emz#UncTyzZS-sOM+3!9xLUl1A6vq_LGGy4 zuuv@HLQhs@WWrma%KR3w3aTZi(Di&^$3->PC;6Uud87fvc41eyV;0 zoTO7MANC*#?( z`N7P#xjV`q!vVpY$or%UIE_a4ieS}6RY4C%i+`6GDBY;|zU)2Q z1s4ClDGsKy*U9^G;3(q*z7dS0V1wFtZB9YVmbA^In%sD2N}59sJ@Zlp0?I1}e_icV zSpQWC$yGc z%Kf{)*I7)AdZ&lE?M8=F#-oBck@*lRzP*QExAL)a?!u8R7yQi=t7po;R}bFCLmZho z4eA0`WHNq?F~`bIA>p=R8NVb|-g&MvK+`=aBK9Awy{;)QC?z}`o%?0Hh3(yGM95&8J3(M`W&+KzGV|HiOjvM{Kb5OT7{2lLIA(HEDO|?`<0uT+8 zul$hL-p7{94MF#9wIkmfCjgkW@vw^;$ozAgz+Nuf5kor(;xS)K6$m4T4PIsU+${zf zG&r+h;hlV3>4+({nXX-yIkUkpCKa~sCPxxUri_P4-P`v`HSlki`{|8;p9ETj-Dk9n z2X8O`>9uGwI{Iwon4zt9>Ch}DeTJgXkx%*aA~+wiWvtDfZAOw+UipJZ^0mGDzS)(O z%4d`NRjPU!L(p=f+TXzoqSxr#=@%pCB>Q>J>-!?XJj3Q@(1s4}hoKfu8?gV4;tmn@ z^9Q_<&wZtoZFy`pH0;Gp#ZM$(O?C3HxAJhdtEzo-gGn`_&fyDnG2=FK@^iIOv1#J1 zHqECQh0pyA+~!}*1`^X>z?t|L>+OOIVw?KCV;OC>cuX0D%hnFToT;J~7fya<+0AlQ=FqAgXMu(^1+()c`uR&*S=2NBgAT$Oh?P~*$OQ2h zj4)kVCkSAV<;_jiH9i2TUoofaDFb7fT{3GO!LceSa-DD3-UBe**41^T3*erdDz4RU zxVt&VX69#^5Fg#_DMZ8M^J?8|KMMF(L<^TROrURM*=1f?3i@Mnl#{~wWZno z5_n=h2j(q`PsFE_KtSs1M;NK}HyAqoxv%eIqRH9TzYcn#B&~$-P=4IdgYjXcB2e*> zcbCMkAfNtOu^u#-*^s%*we&;73bMdnkB;jgd-X@OCI3f`l5?p5-=MD%DYf*pe%Y?AmU~$dkp%noVKxa)f%xmQ#V!ZvY^aXV}z-HEa&Jx<>*@66d7VH9GxWot+)vqHDe>fo~JMWhQUwR zhkh|^ZyMTaSVaY1le&sS9cnWE-08j>!Qh!1GAi(4?4clD{VDcT6^1{h8*WQ7P*-r9 zs`%&;rXT<6^+~Q00XQvPlKp0~=E=>vF#hU>Fl;)S;dPBIJqkG`dUjfZhc%U(k%LfG zSr&Ev^ZweDNBiZX3b?l!kMY5vFfsgt%YUJz@A6+Que><55D1<7&~i&zu*8|LrUGuHSrgGKE6*-ie!hFY^W?vq zdSh62YoJq399X%-v!s#auYE6M6y@Xy!wN4GE1!lmU)zL04vFj0yLQfAn-2@~^Rtng z4*N~98IA;TsyR>l5$E5wiIk=%Iq-1TNl9p>8jTWV_2M|4~1dS{T!QoEH* zq|)%!tK>oDGru-0?O4W}#Qf3S6KWCvDEMnWk9h+<_@|Emw;xRZ+rGW#S#x7lh@`2J zN9$XB+rzJG7=5AW#8$(V$n7Sxa)dZhoL5dcI4T_d#OP%l6kj0c=}ZF~AakRcT2f3N z!V9q{Vs&v8tfj{jnxfwA#5O}$vtj>}3m|nBZYCfg0{nQ#`&6BSO;LW&sO#Z=PD-hF zbKu;wmlK;K^i6wWuF@#3j3Rx7W#&kGAmJ`gWcO(RAgd8joAC`IK?IsETqCeqT;@=Q1Qifx;&=mQ%BFuukY7#SIM{cC#yS&pIF%XH! zeY$GbTziCc&$bi}c+Iw#g!|`COBQzivyTV-s|{=w@JkQxYGXP!JtqP!*G;unrYX`s z-wWIr^agI=IYV1-#$MZ@rpm50kN>}8+hV3U*8`aO_+71FK#p6tavS)MaYjtBRPpA1lY60^jTz1_rq zsWP{KXqYk#%)M+!8vul!0~*Yl4m0t#H0I+gzsmP zaj*(sj#^+L!-H>REKwN=nhrtsu%qLnUPqr2{ia^QCaxZ!j+ zZ(SfS67}-^*97WiUsNQ%S9iODR+=2Q!+v-pSO=gaZzSKocp>}VIf7?aHYvY37N4kN zb${qLgXZ^(Rb1b!1$i`G#w@eZzLS-FShHMA>yl1Ak9p*E?*zhD6gtImAP{Hy`7uj} zlUTWTy(GaA-J^%!-0fH6^`snbyvb!hIC7;5M_zlKm+usmY);oXMVJoB$sMibX52lR zGJK_9_ch0&w!VI}-bObW8&}}d$>yUFo$2fJUvgDLV1vI5&3^cpMkpCwibds>R*1cCfu>~^go)gbVPOwkuVmd=EXk#5&3>l2M{xH;;p-JAZR@cDDG3(~NzKX}3GqCtmJOe6n? z@l4u?Fm)YUENE!ddy(V2&YtZnmdE91qo(&WLL&~M-+l3ll|%(2%?xG0 zI~d5cx;HUUn*heH?1+6_nhw%=)Qq+b+~2&vSduMAbI5O0D5w)*c;A#Wn(9CP|YxO^VDyDi* zvgQXFihzS)YSEop#p)(q1T3WzjO0z=hI=|cg|n$Zfw=}lgd*~{;EZ__DS?kjy9sQ08Nxg;Bi{-%&rJo&h^nC;V%ngfS1D0*ZB6keHKjJ|N4 zZ+3`RKunT*>`=ccesdAQp%5QcCnl1BHP!pu;go1;w5N$)5 zjvkXrpZpkri&fbwtpX*Rwy;mnj&DmC3=?=Js~ldF(m}VGz?JcDbXCsx2U2LR`USDa zixh(5xi4J?l8Ib?$BEO?^o$2n;9Cy+;Vz=R85zVKzm2p9l5g&-JYT4n7-4Gu`r_-gxemj|~L{oL0itrK~_N)%oCz1SVXekXqT<8z?%lQ zJ?AIu{fD_Qv!PQ3an_xKk8;EeZ;cHNt#sdO7TZ4)h-Rl?9nLn8#N3`V?fCH!P+=39 zRw+r$*H0gdBsNQWjRH2obs%MKM~030k-NjHJS_^TgHmyJeyYl<_+S{8fxEa!M8oIz zJCtg!(G}!CCu~M%=c$?U%(VNL?9;PT7GSdEfGG$^Oznz2E2++5%@sGH4NgCka35oB z*nXp^xH|DBCQ-~OXMs78BKhgVVtw(3UMaV0jwy;5ca*$)#M&Sfit%o;Clu?dr9x3z zikr_bL{ng{h{+iebtDwzaM}+`Z7|AyV_T%)lnX~(+$CQ>&*XIxI zUryfiY``?kWb7GIm;(S!5G#Q|U-)a=HNTn8Q}u?J5kt^tbes@0qo0_Rl>0<}=NY%I z0DXl|-~C3*$!ym&u}fPpP?=Ny`NkWnoY*oVXg*DGAIcml38m_bH)Xe~*1B-KbaZ8u zkk4XON|XSOIp;e)ABs1C6r-`;xcMe8s)`w+=hHxq<#h)|?AeJ)U%I6A9E6FDjV+Lr zwj=led{^(ea8&~{yRLW9zU$AeTLW#d)gR0d zH&;5r{Kh0M*AYwsBz~*(O&0A&%xHvJ% z$0DBVMCiH7;G%~QzcEOqF4x}LTR`j3hkRe!OcDfzF+K|;NfRsE?GG8yJl!HKX#bm`h^Rp69*57&c|lyRr|ziRSt=<&!LD z(wSU8Cqq{q;O@Q`_Q1S5|G92x@|sgGZc7quT!Ig%Q1Kj|Pi$KEx#UGVGVTfo^7*14 zt}{g%UB^AKeatF)FM&HFJp}t_iKb9`zBYs3kn-#GhQ(jQRhGRUxaP9#?m0dFUuZ-| z8t={GhoPLo-M3v;HG@K_arKnd#%_iGs{PFhroa&VL8JvDtS`pui6wRX?TE*gFKH0( zI51yP1W{Wvm;c_-nkSQDF)!h_9D_S@Ju~%(PJ}FB^t6tKvU3t9W!hP8!=FaafLph`9JzgQ4`K?eve|#XOM`U-R?b-QD?2k?a(F!HJ$hfwQc z#m`oUzOHcfWRw0=N(2-Bf$pR!{_)arHEpaLpT;z^S5e+`@E++TTK;ZMG&UIW>23no$>uvu1fn{ z=CkmB!0y$uy?2=~ow98FT2KaMG==$x5?Rvx3*y#j>IjxC#qIA#!z1tSG5_>;#q)!r z4_}Pk^~)Z=YvJtN`Q7UhoSB^O@Z>_0C_i9Y*SxOIT!@X?)^R%wkE$g05wc#qelKB2 z@LjjSbtPbHKdBDEU}7)Hep=Po_9scEY;Jz$Q2WyYC~{G1+TLF*3Oo6{H9~JwYAibk zZRXt9d)WAC!!Ir_M{@MV<-!>hk`z@RuOsP~^-LZI0R=q@_IyCM(515?-NK74Hc4-%Cz4b3 zQGL9%^>riXTe%EkC8^V1*Va9@1Mte-EsAK5@CwcS#r_n*pxSAz`T2$5$VhYGVovKr zHSzchHACxaBS3b3*9FF+e&u&Gkl3@%tvg!i;gtN$O3vurkAd<`)Y)?O+&P%e2~bbz zDT+DP6qPugot**SfS!_bLP}UIiG7|OC4j^6IG%e8s9*Q6ls*Jw`5!sQRu*DlMo0~3o&Rwn7Fu4AwV16;B zBcz&}A;PJ1h7fd8bg9xfG@jo&_qt8n;Y>o6ZrrI>`SqGPa(i`LYSa2P`u_jv6r9}W zcUwSF8+`|dQ!lO%y|Aa2ja0DsA^6JW6P+Vb=VMvt1)_RPj?MT6zlgk8awWm+eiGtr zmXE~BF7~`*Dc{65M5>QfB{(XVhBI}q?9%YujMKgpS~d2F7(Dz|3;vuO{}3ZPpTj5J zHyLQPKlK05^%hW3cHR3h-6bWBC`d_n3kpcLh;)N=cPj`I($do1(p@4A5(5m~-JSn~ z@B2PJzi+LN#hRG~Gjrefx%b&;@9VnG-oMHXH7Y+4JWM%gR%)iOR(%W&*wwm*Ny_W9 zN7fxdv3fC*Nrr)0^_;Kr3kQ?1B$>PoDV7JZ3q%L1$S2EAj`?u4L$GUuok{b5@eg z!&0AelhY4KSQP!!y55VrUROpNl!RYCEt?Ll>W`&i+09`st*&p=Fj@JFD_OOYw2yM#8r=!_Rg3g0lMCn&T;ra%R&qwD7x(ui2Hx+J^0{tTcUb+@d~xH-Y`i;D z6Yur|MJh}FyN;JMrR*o(-n{7Xg0D*{dWbMJawDS;8^loT?kAfZOykV8)4&WG7r8@e zE!c0#)xEz%oJh^hrByKUuQG3cn8kR>(u~XcNH%_iAqeuA)+1O&j zzI52$@&}UM7inK-=xT4d*K+LYP2_*SohYGQI1hWsKgw=DY>~8jXUiBvb)3EHZG+!c zCdkJ!+GliU5>se1s#8x`nv7qzx45_w*pwf5Ur52Ep7nZnR{aw=ex!3njDm4?Q7}4^ z;UN~hBan8}%Jr->|A695^H=A)h9LjtSX_5lw%YpAky5y&VG<^sMK+b5^36gHSiV$M7A8~YmRr>Xk%%1abx&xv`F+H-Gl8Q{ zt|jeon5!~VVcXsj`s-ga4puzwUTZ_#Dz42FoxHFEjCl% zOt1$jr3yeTbDl}7%`i_CXY=99h$JW_lwIL2Ma!rB|GZ1 z#&1HVSemcIT&=cL4Gau?W2il$SmYO%13bmsl(`U};U`$+ysbd{=r$oCHahohy+3Uz zlwQTv{KV`9Av!PsG7RjR>#J3D?^3IlyW0d|V>FKY4HQm$gC#5#yDwRNrKuQ@HK0ft6*Zsg$2 zbcM^-DjESp*;dW`g>4%g(#hs4Pfx*;k`lqANyAXUXfdeL&Cmy6GhO3*yv3I9{W0h0 zYicfWIk6c1d6c+%$a-aH!UE#9d%$MUZvw;6P&-_0z~_y1kQ>*K^y+Z8**jW=tz6Z` zsXRf@N~K&-$GYUfJodJE%r)-Ps`7zrsnIZ9tMWuIOjc6L+gXw=JX&>SDSLE!#CoOi z*T=6!{LXZPdSWJ5nGx!E*@;+PGX<^OZb(U1!~{2y_HC9a8rW#p6w1@`;H?%A+t~$6 zjDlL~1t^=|SrO2RGopP%wdK!~=|mxrwrS>n)x?ozq1Yk7+|%qC^`#G6^0$|Sq{J^>g5S^ z7JO0F|IQ^l%AS+i;qg&gUT?wV^`Nj;OKwf%piSQ{%b%8a>mKyl5IVK#Xv!AdL6sql zvckGmiwS+sL{=gUqA-b22|S7DM*(f0+w{t;)zt{b^km`0`3`L2oBzf{xhlHFWKBBmi%KgAzy8U5$-HjY<@g_gNEq!lFUbOD_T1PRq zOB4F_wZ(8s&Rd%LsE_Aka+Ae(;J(uH6X28q)lS_7*P#z z{A#XXL5JH{dM*Ob&5Y}DX;x^~Fjb%GusQS-4x&O-O9n5Z&2;A|JTjpR(Nj{9l6SCr z4kx8_?snw-lj@3)d|rp=(p$gAuM-ToRqWPe8=_hkTDkE5<#7;tAo#-t8Q-_dj%wb= zFjWRmHkdRfVTe0OR-7rfcDCtyu->LNvcptIP*OIcb z82X?nkLy&0f%$w-PyV~#arblwWx1cC@c|_MpS2TBrx^nC7C-hI?_=Q$PTw`T@ZtQ^ zCm*M2gBi}4B#9!cR_46{0kaXOTa{iDl z>Gl+kWT6`oW=RR0ib}KwY{c&xvUwpPiG3&N=F0-qk6wJlIp@a4#ukep?`zVdLKUFt zgI(#=4{7X72^-X^;kzkKRa!u9>Lvj>O+l-#OzejWCl5>cn{=lj@ffDdEE-sfo&^ z^i5N+le~NI8Q6)?+iR7x0BqKodSmrV>Cqg&uJ+xw0Cc{JjMd9ih-xC==-yEryK(Jo ziw~6q_1{x{z1ZUdN2DCx8UiamGUD`UHhp}uss)XoB$lyLIdelY~|D&u?lI=M!#CuXD$X9uXSvf+i4U^v`YOmNQ-)OGTX{KZQQ$J5$0T6 zd0<4t-p}EkqJgtqy8G_tYU^-f#?YT&xDHDao1@UZIYyshI{2E0@Rtw4moQ-0prjk! z@#Q)exeItBCw7Ebi1c5t___cF;TZps! z*NU=a;lunh=y>z#@7K6ClM+G^9$d7$c?7W7u1JiM#kcG)KZ?UpCREc`kI0JujzF_FkOZvuEa_ghyguu)X}<;kuEOsHZ3gAn05(R>yPPzf0mKmL{T)wz zp#_zMhHcD+YcG?A*i?jwgp{n~j$VLY-sLg)BpNO6zve;6%e$a4{+CMl+a2FYDg=M; zvsiK?Jptf64)>*-8-WW7F}|uGO>wG6@vi^dZ|hORjeHPV1?LN18n#G#^vB8#ULL)k zr?JbZ<4?1wpDV8wmgdbi3#}3|_p20vH$G2yI~Mya|F2=raIj(7iBmWWN2oR}p6xgO zotkU9f4CVj;2GLri49-$>NIW1=KTv4OxEbHn9#PCl1Xx>8vD zvAmeSlF?LQHj0c;Y(@QQMa$lvy|DQ{)d!orH^&MZ!dBpa{GFB(ee32p@t4vj=iF~km$1Y?Ux!<>+nG%e4{!a@~5Kb0+ zy*A)h`pe+qJZT~=S-;{Cz0qoL?yRwt64QH<7$oV}h4KAo=K?NC$oAfBt<`J@Agh|A zo6QXbT-J_$XKy@L@f)N4*QB>&{LSUNPx~pBY#>>0aDU^y@J*zQp3MxRKlwjY!|`?^mqzcTih^jekF(Q-o0|ruxqTsv*Hq(N%hv_HZ8sNl zXxx7D9luQ7%oX{hkM3xHDq8@H$nDso^V$AXM{BcJ@wxd{XYd821k-nKseN@w_*sV6 zHQ5l4Y<6L>~_B>x$55|dsw| zUFBXid66z>%kWYPg@C*0TJlcxvd$qN#NJiVnq2FSKvhasU;F)*h`zZd#JHQL(NfBI zk!y_EuI!gvcz?|*gZe9iEkzck`1KR?4`a$vonoKiB8BrI{qt!eKKChGTpx_+9w6-J z5v1J!XW_%481y@^l?W&A>nt~%Y7khyKCG{@&^WqW|Cqwx)to7Ln6DlY3}St{<3)eO z&@{n>SC1Z%2{|D70z^fYf+t)`B{zr6V+G~*>U_v{W<$SYV>lo0I-HDZXN*2Df}{&H zL?Gv%f52~sA3fs*hif~q{Q$}D0HJ&lsK_SxYx2=ESLa_iXXJeC;9p2!4uartT~WY% zhp!aaRfX%K*jyq{M5gKBL5p0{Bnhq<;2W^URdCjAWTrU>X$RA4gpZVUb@u1eTJ8re zY#K!Y_whovDN$siWWZj;e%mE{4g$C*93uSAuZtbz)~0~*VD~;UdO-Eh(_cAy+}OR? zjLK;^+gr__d>0-{^2z$e0;)bIriu|Y#rA}f^`QZST!L8DdTORgjkRmd2k}{77*C7w zc1R!Ns!}1L6Fl63^>|3)Y`xNM-FhCUG1@92%TL2ue%Z)KV!WS-FL_AnxGe~k&wC`G4OulcH}fMSz^M%kuK}dAqO<&9)+GUCRs)*VKPaH} za!DA*;enqXpi)(?RUXw{e#c)p(L%!St9R093wl4&tDqF=&ew0wf&z+FJaZShI%)$d zf5!fS4q23>)WF+MO-=1j0a{9??WEc_-unSg<3{ z@q|>Nb%J^uO2EP@#_b{nw57WrJw3jBY~qFJbPw>6<&|K(iS@G+0gpWk1B0iAI<9_q z0Z3D_chk`D%yTH_1vYEy^|?q;{m8H4^jCGlZtP%jw+s50nBsMMoo>rAo?F@e!5&8N z&Wr@F%#kLF(l>^;1)ar7JmkXG(VQ&8^;txOv7T?1 z1D+9`6LyB0_3N%?%`_KRd2}=$VI}b^tnF{p4mxs4T!zbOK1XKfdzS^dtl5-d$&`q8 z_tiGD(v^fvMMJxrE@v~4&C-@|0854?a_YB6D;yn~rY$aSZz~Fbqwx_xid?MiuV|Q; z^7huc*%O$lw#uAo|5Up-9c!pbqwQJvcIF$aA1DFze{D0Qzey-m5}!yj*pPUN@gp5p zPfw2}CaQivIt#1GjqCQARB2=T3BAgN$FT{g+^bQ}2ZG-`nwA5&Aq&2F_tSTk_B4q( zu(lTqqB#l)2I|mPf!ON<8kM!4o48-2KBn^98T@32N5a7+vkcP*R0Ad)+>ysLaU-wY zQx#fyBa1hmt5N`wiLnFak(mll5jdWkshhBWkiwjl>0_lqzJdCD0Kc)EE~9#-{VWi} zE-$rx1sKpa@R91|ZcRSmtu<%)O${y_+vDm92S?l>HtLrQcI7fyPj8&9vciF;R^Tb8G*SKABJl65NsW3yz_JWGee zBn;e77H$%`wBA)oN45N2sh0d4_C1r-;drB{ojBb-*j)P4sgJP%HqrXGg6{Up%4=YQ zIZbEp14o(%-v3w#ppkL4+0*)&6+UN)OY{p_CeDZ`xbEZ&%LDYskt;8*rk03=2pSBa zye)YbX+frNvKi22puf@TmmC(F)!ZUt2#QnY#xfQg^E>VJtEYMQ{-S!tnjrgt=6KdR znu}^76;4=9gMMwuK6%a(6Z^dTsknT5j>=1L9CG$^LYIlc+5{sk) zeoDYm2RPJ)j%*nXP9NcA$uPL@eVGxz3teo2w&-Om*ZcLivZQ3m1PC9itAmu$p*9?Z z7HMxwR^~ebBXKAdz$LCRYrO$a+uj~mDbLOclqH&c?sjW1yw`|zl3D$7k+FUhrj&rC zrCAK|c^GN;oOZ)OiAoSa-sn4Ss zFYHbc_Ns;EVy{WZh6s@T%bA9R0n|vdsWyNPHA;@($8z4pVZNjzH-tAaBi`+H{)d%0 z^%Udlo~-|3KE`3nj^uKXVNP=GQRTbpcf*{Rl~bWz22x(%*l3g3lA?>D18YV|CxhPn z3ny6Qlakr|`4$#GXWF3M5gh6z_y<#HN`g0yz+CS<5;l3b!3DFA9oS zBA8SXYbzuKOC!H9;V?NCnU~qDm&pH}dUJ7WpXzSnt3AM^TZxr9^07^?)r`{sfIW$! zL>LknNC8d_1qFFX@C6wec?<;w-x(O_&qZD=7n07~_tJl|x7r#Ek24M6jUTKPIH&>5(w4!p$Yb{H?9_Hc{TYT%Y?Zl+c*#X15R=s!UVl|2oro<2x8*N3lKnGz#4On*P}5#}Y+9?VgnRB(3aBHVMDlG;~~{&zqB z_pZ+dP71WX+G9zoP9fi2z6ST^;L&Y#kw^V6So-G-@RK~8(aavNa>vR>Vpy6ym2deH z{(MvSpa1`NG3tchO(lcf$?8;Yb4+XwOR?q3zwy3cuIbnDRh~&lrFtEVM^YURFL?$K zwEuf9ba3Z0D0;LsaUnnPPOw;&dR{F?98m93*WnbZz1SN*GMZnUt&2nbFvbos+@X)w zo=WaruPJIG3+C~fI=SANN>ynR!>`)8D#AHu7hz$MPZrTNTm7rj0~frqlPV396!VUO zRAG2_{>?xI12S_WpPSrreVx2r&|9Ml8IwJMM(7@b@>&HSjqb5Z^>?EZo;)R)2E3nL zk4kac*}QdhruJmgh-O+$u_>9}ccyALuqF)vfsc6ZV2U|#kIOzrYVnE9r`K&&W=(sr%rvFTGX>${`6~z90fY5A9;&C{< zag&vocLXcnV_I3TYA1`h{O(=^e!1>w)%j)Ju&_J)jwoukrnoV`MstbTj8L{; ziNRc78F`oN0->A!K!F;Wh&yL?$4nwlA zR;sx4%Z|YkPQ5C{o}dt)g{6qaV$RzXquILJj=q}j5=@m|Sv`X9hu1XOW5!nuFm?8$dZ%BeS5IaJ|zxa41JZeq5&bCsTsfX9ZUhW$6+Y|R1~|=nyES~&A?s2xI74z1Fh;#rG7!HQdmte zEPO6Msq1=#!7nb7pP&7pTd)A9i6FlW(4Pb&XIvC^g-&N8c@6ctquxdtR@` z1C0z7q<+-lgg;BWyC1><66;Y~g|%rN=WbK=Gw%l-0=E5K+j8V~Po8k}18z!iKk_TxPoN@{8;66pRjo>V<7>P}S$j{aiBF zmw6tWpB)|WFluV~Y7N{#37j*eqG0Ti43vx@Es^r_@p&M-?yaUf6!}{87w*JNH*2Tp^n#go8l$7qLdvYy0O$XR0-(Tg* zJCmpB!Xshlc&rbCAh)#}0;vZj6$&3DYP$C~(LAOD3{mewl)Hl{*N%<*h}b=AoiyLr zvd(&(=vll$v6`-_v7RrtB2~a9+pr}K*MT}&KKg4sC3lW2dYXu~dj-udbdgTv}c_^0WlQGAJQ2 zJ(Fur5(FyQ|BRvUcRSZ^*s3&DO=KcqR0DOQbxkgTB5aZZmrQm(Rmgl{SFT}g;Ez7l zO6X?z75Db`SUp!{uEP3cPCtOD2xE$2W%k# z5pO&|2~6l~T+XepL@ud;bO3i_Kh3z)z*(hajg!Da9@75kAt5{uCkJf9c6AE0nhp4f z>Kyr9boz525KMy*&bAg)vUC@yXN|yYBaZSi$B=kt_%mXCeY}vva!8?ND6Hw6k9KoE z8;BDCiNWzVwY<#aJbB%yo3 z{h_pdTZ~IP5zmRg$x_TDg6$8}XYZ>lM7y~$4_>Gwt~trTD$aEv_`=oJ)+v=p6BO_q ztQSC=QeXf;?ou7WxrrxUeFlYwH?bL6^OT;hbvL~&#rZ^UHTywRrNz{9p!&N;W*jHF znbH{5T0&ZU{D5R4Doaa00IDu;0gVZ=kDy%Y**Y%)ko=TSS>L{|BATpWi4Z&^0*3gj zs$^W`=Bu&$J4r{NZ_(bI7@hh5lS^V`QR5e=m8R0L)i_)`7rZSrfsjN-IPVVvzILkF z7#+s+*)u--3s&%_)a)IQK|hE`pLK^<$x8{?@4R~s@TR%h`;*GQAQCR{oB%dT2eJ{j z`se2M4TRx}YO!Z2{D+VnxtG1unFR&PAQJ?#f?DU(f~o=TU8t#)^y&odD6hTM`OdU> zLpXV5SRIJXcc!ZPt^`|dg=x>`OeL8v7vKZKiP`|lg%ud2(jZT6BAZ}PX{pqFmnCAv za_pfjYP-U}@>bzwyl`h;g;m7F{j2cb72{Bkv0UY)g>Pjv-gC8{s-iZt*Nk;_J8;Gp zTT96jttRmsFN#JgE{o4~zNmlBh^cEq;`)%lKI_0wFQqHgaqO{(j9nMTzCBw?ImpcH zS>ehCNV&`O_Ox^o*g8z=&esNw2X8KkC0;sjj0L-)Kd!Ky z6KvM3Li7E!-`uyu=U_I+o~>I@Aid3PwG-Y==uz_N8NcIJ=S0hW4iM~tG`Boe_j41Vr1??9Mqcym8Rc$Mb&r(PHz04@W=oJIzLL}2|@2V5w=J7OJ(yM{r^W>NQJL`z;?UiJJa0|0Ih5Mr-d!DNxTn%WI1 zx6vIk<#4Hbsbx!yE=bm8z>Zy@Dtd<(;}-et+vmzJUryaNn!UJlUAc)cCR%{vV4#uD z;q#ZUu7TMUppmIYK<4Q7%U4Q5KvJ$WkpnosQ&e;m3I+4YAa$c z$Gp=^kmaEX^63v%*}l$Y*1p*9ri907G{=Ka^}u=~h2VX;nfp+;sJN}I|9&B$5jpG@ zG64cJdwct8sTNQJ62l9AXa79B;#_z=zQ^b(C{_l&6~DZSzSGlOJJ0er*mwFBmee2+ z4O);uO#Af!sE9~r{Pw)h^skJa!jgs+wn(K1M>Ojr z+CghM7X$BYb9>%nG}?p@jHoHvaMKfSHj;wor*thA_(x`m5`bs5;zdUj`!^0jI%`+|NTM$ErTR}JU z3_sGh0)4#MNI~p?SKaBghqh89@DY=7mqPhZ2*y0*L5lZ)+njDs@Ck-F>dbEcYgu(I zi!DPalNVP(P!qzwG> z_%hYs?lQl+HD1_wI4Iy;T$PkW3Ms7w8vY#FH0#-k9~vCocbBFmQek&P!hJw@PQ>fV zDsp@A%tnCqiboFU)GrPpx(>3oAf_m%;pOd{js`&?dy$pK(0tl~VRzp8ewvjwm%r6|;ZI`m+EE-W+aCPyZLYY2&;=sbe&IJyS+VrGezJZ2KJCRX?>Z2%gb$4h zINrPrT$g-`_4pkbVlh}WFenATfg7vOmV2|X{@Rsy`R>+6Cz*F7y*_ngE`?y;v!e_B zv2P5^Jdf36t4yXO$L=Ylcol??xGh(w2{pF*&COpSoMDxbk)F4g>o>ZPk{jKee39

ArUbu%v#vk~SJ+xH&)fQW9!BtVLyw?W5I^HHBEPZ)W( zuQ(V#{2%TyvFmbM1+YR{fLrRMHp?ROY(0Qh>MS)_9~Nb{&EK7Mdw+M8kWcS}tc*KG zUMx>HZweu^OF)N2Sp&mKPqF=$ORBg11P`4a{8Bc`vmivcnvKqF$~qsd$@-87m?BYJ zb+FGwSJ%(u1+J|pp0pe1{0|5_@+wD>=H(-_xgIjAA*A1P7Pd1J2wxOa5h$+BRK&j< z-YxcMyHnFEvhSuE{ByOy>84}m6LV2hp?m7Gsb!#~dy->MkTT%8mpo`9c>`QLA8l6H zyt|K`^#8$w7uOths`W0zHAI52V-|VE=$W@?xkuqqd!aV`*rZ^J>^L! zA|j%gSS7D$>d$luSy|gLeq0j&$|46{067N|h+$PCG)g+d-u|V{%vw?+{;p`9sgyGG z(OQ){`f$LH_nzMVlIYRJ`TDe43$kf{Y~tZa3cAMc=leX%I_=mom(nA$c?a~m2{a&s ztXCI(o|kr}YECPXdpx&xJ-)cr<+z}8>m`uOtYO2aV2 z1P?axs6fY_I(Xi)XdKh@_u+on^QVHpY>IjFY(?1($3st5_In=IEMX|dacvYSE}}5i zoT;?$sGp+C1chcBp!UQB_+Mse&ybD>SYHgR*M>;IYYaTZoAHO>}X4zm%Nmo2BK{$G0# zED`C5e>m&3>1{G&#TtC;@pbxz%EhCkxx*Ax-&HBF#Q&TOwZuNV9u4)S?#G7ki%QV1 zjWi?MfxfsQuProY>y@6AI<=*7%Cc{BcIA4zzbF4TS&~Wy(X@+=b9yi)t*}A+9R8t! z(NM|xBrd+f>CCf*>tst7I4Qq^>FV?F3dz#0_3uXrT(Pwn6QN*{--wwmE>WPSay)tHTWyf!3#F>$ zv#_-}6VuZ*oVK^Bolp6JtnFK{(=iT<5gDMx5H)+USXQ;+AI)zB+!KxunX2H4^$T!x z8FQQSO_P1|MHu+9Cpgah&uKiB_FIT7D<{_rWQY2ySgn=zJ5wY8Xp z-Y^M}Ls984vb6Blmf8eLxBWA%CQ!A>N#8&^xW_)Wk!M97hGnOGjiNQ@h zC<15uRN@G5M4ewGI-GJRU}aSHZdya^SjCs~Q(kh! z7o)OJP4Mh~Txk0vT*nk%z43dJL`-!WryWL^Ynq+873IInsGli&q(k-wsar~}It<#c zMw`@Em*R_uMbN)0$$1%8N*&M$MYRj`cuW;ZTUWMTFt=+F=g5RyA99@S8_QG2dq>Ut zLIv;57GZap^ZEf9OO5L&d#$}4AfV=5>kQ^E(md7b*t1tVH5*jUuLtMa zv@=eG*t@j170CH`pN|kVIGtFPqhG!6p1lB&QMJ+Idj?cGQ5D6>&*30lV0#bhy}8=# zT>(~9Ts|{s(qQlpU0ITzY+utLkVJh}**D3T#&goTTl_C_5W!zD*2(ayB3`zJ&0{c;Dw-wUI6HB+b!A=7gl6S~A5Zu) z_W{>Os>yw_=0|AGRCPD=efe=5QpYU`9x|@r*>=)Gs|QzEQL->{+DZAcc&u>n)%v| zfv+fI8Y-^C{=dpN=C@HpH)F!ae0L1?7Z;Ed4SnTQMtW;8Mrx043quW6lVz(=mR(t> zhQ$W0-UbZbpdTnq#gf9KRvb9kAlZ=#tSDM}Cn~{~8%*HC{_`)DhCm~%@c;LK79s0< z&H27Mk;Mc{Ho64yMRLbFg<>YxTstQ%gpd^V)8$0{-0lGqp4uxKk?`NRhg5?BH`8Z z$_E$uAYF`cSdDDfc*t@1>VxckP%|(0v-W}H0I>k6f=%))*gE`V?&wGx6F=q;E5~~^ z&B4_QaGicq8d1^KOr<1K1t6E9)Wx(P=^m%h^?^K?qi(Y(;plH|I4-z>l&7e6O#970 zzjV!;pA1{fI zQsZjQywE~*BoGrIm*KTTB#Nr??~(#Uc1Ss7f4v%?c5bF}zH<6_+lj%EqJ2v&`)DPL z291fE>-h1Ll6ggiz=77Exkj^wlLe)Uw#G^|k(G)(wePZDF;LOI$=Ze^49P&ln~B=p zKYtB{$0bAkc6j^jc8`9N>3-4@yJ-h@??eH1L@q@_d^#v&O)8NFIQCQOP0( z!U4??Ev_Y1SWZ(MvZ^(7`V1Tg^)9#asO&>g8sN%M8u<7@G5QEc zj+Al;{cDz#&~c%^EvXlsoK%F6?5d>AyUeu|cfY#R=`bn8MAV{=lbA)Y9`qUxT`ImG!meSz^ z_C%Iq#bK2h5au_IED{C- zDfQ9A2ZhMuSEGQs&uBFU^k?gI%QTLU7DGb_liq3f_13{LF&}?d$ivzJeQQnDn^m5$ zwud(v2Ue-WVg+&)0%dmQ(*(pf$56`3*hAa2l^QK!8SXFNl$09PT7cGpPsJk2A>{#p z6>MJZ*SX!ML^izldh((lh)BzBinO9jC1va;mP}*w#m%acT^$}q%R(jqHDQfIfRw8W z^ad;W@QzvX(@7rv|Kmsgw-}0LGY~pTJ-Ll}I7U04zC6g8<0fGdHM?(r3cJYqLLXN$ zE>8)1SC-kmF!nP#wZTRJWdO>|EB52DAO3b)mj$FF~;6pIS>;3HB}O5|Sp zjGC-_HMCw`(3a-}sg9q}-szNE0%!uH+>=e<` z%9Pz6St5Qj(-N(QjPx@~nzGik|I>P7sFg}UjAb%kAU?7zAuKd`2g}dG`{d#v?9(;a zB?{88nl7P9+uNTX*&>G_WD3$J_#}vB%YX=oP>_;fS$?o2Bi>h|j`Zkj`RIa>5#!0w zx4TOV@sHB|ZCTcx4Ga>X`7uBk2-jNO1+!Fe5<`dE!0X>UwGiW`q=3ZTe1)?@OLmkL zGy21a)x7Edbb(>-43CAE+a1-pj>i^MfUl2aWH{(O9&~j-3zA!R=1Yz5)-tu2r?j?4!ewlo&F5i$3MGlGk^FIc$mqL`wR*QAoQM41|08FXxalys&+) z5J8s&NPQ4VP(%5Nj8)S}jg1*3Nm!ds8&(EM-0|kA7)PhXAHKOk|AWw#NuB}~^@|(%2PW|l-Bsc=avR(blLR#a{;y#|`f~9j;sZpT&YiJe*8(q%bsr>F zZnYL2PH*^IJBi_7-QC}Ogw~H=wU}jP#ew-&8QgIDm;sLX>>YF0FZCuQpCwaX)aJ#8 zmI^=3%gDLvi@YDqAzc@ho-95oRKVqK0^D^>lYD{v7kf^m{>kwgGyNYfE!y98f*IR) zZ}<<`;UT~y*gD~$8#Igyi?bHJGg+i}G!Qfl_Y}ss)wEE^<)HW|cv?{KAqcsOo-^W| z7JpmtBh~Ag>>}N_Ec@R3QM#UydmT=sWV=sN1-SWCs1mCNFJ6R9dRH!@WauFB9RM(>_ahF`9S z<0w?x);SD}_#sDY*MKZz|Iddkq`l~hC1*%V+(XBUe)y1xhyj%FM3SzL#Jof(L?;zY z7ADE7$IZzexX%Jlpxc=fnpsF?C-;g9bDf@cTsQ$I$W01~00nBHOC!ni`{dXd@o-zN z?NZro>N?K>x2G*8f}`WuxU@3%j%t~RR5r^i`oq(CG!CoPndDBR;|II>rGg(61Oi@i z*0}EOJX=NrLFE!^UZ9v^gP~D(gh6kpsi62-N3XZ0ysdFLnKL9^e;B><8O%Q`81GO2 zR9P$BS876{0k(okGym~Y77HiH*WbTGY;j|6&qsB(NbjaS&`ecr)exyq=c##`lPKqv zzmA&I%#}$_nTy+MOVjX(Ek0TJ;5zMY<8u1WYJi}cR()l>1l_^vZSvZ>NF3G&7a3Lu zrJF3kr5=x4PC8ZtzyEZ=i4iKEeD#k z-xv4K0d)i5rJcR))*jO`(BH8+5Y=1Gg;-BNPr(W;TQvEJnOe>AeyG^w&7;*jGd2R8 zV%b~1SqGfeawQm#C{K}WWr___WLgpfiIRs7Rzg=P zI4Wu?YmfJJu?|eQOf|bU*J@@3jZM~BGU=SSfqf#q3ENe`5eWh}ek^w9Fw~i!vKz3- z>Rjy#;&j-f9Eiq`q*HI&)LQhcrbUdE2?1EWg>q!}H0XhwG=uwIvH4a!PB;<-BC1gD zlhA=FQ3yNau-X7@v$8-7Ag}zpv}v1p60Endz-3d-;Ob*0%7p;>@V4Tx=7)Fy{B4}@ zM*#4?<={K_gg;fK>htt}n@tg!i4(4jj8w5yRTn;&W$9{p`m;8|mP$W5!NJ1|u5dek zOsZ>kd}M!FbVhBm0#CO{xIS8~rsMwY*k#DLod->|Cg6XTenRjMj#NVYHg;#loSp%O ziXMat?(i}Dh{@DkgS zdpVjZo_kwcA=0qOKI-8+An{I-lfMmv`SWoc?=tWgaUbpxkj@6rbhAh-hD5jPf$Qna zWEQXI>&l-@5fc{k2Zi5d>aZRx{D8(q7&##DPKQY$C7kL3ep~GT1%Tb^2_JgLre~cp zTgJxbMUSwbg6k^;R+Q8CV&z8yjf3xk3jTowEl7zwa&UKcXRgeYpdka^_IPHObHDIi z1{aslJD=!Q(Dzg3hTJxwqx{N{ZZ4V!-gzl1Dx-2TZS#V%Ez6v&zjthn+g+nXg~ysfB8y4nu-15@e=RuBJ|02`Frt{4Oq1DG%%h_tfaMNoJPj@=c<1voTSpS# zykV`FT4>eiy?_@ah17QdII|82g4W+U>jBC@DCp>M)b$;!TA9h*mWjeGqf}G?%m1Gw zdZCdNy~hYNOi!3egsk;V2;$tFG8$mTGx^8+;wYrgFSdVFjMiV?2<8n`CU@D$1}@3h z6~3n@BU_IaaLSRPh3R87S=)%{$$H;gvq^#W0be;~{Eh2sNL~DsYiPxi6A4Y5nIGQU z<8`#qFPD)r90>oW^JFr$QZF_VlrqLV& zjcAV;fy+nGc6-!!AAra`50n51IP`Js{tv$10<7xnYx_SmNF&_{DxD%7f&vnPbfq!~(aRhkU z`%_H>qb;}i;_Z>U_vDMUwxU&(6%sT7;v~)4v=O@1rC*-* z?ePnuXJ1B2>zWK@TwgeSYH~81xHwV~%o6dl^Z_(IbiB1O($@N>?}IVJ%@SX;C!n#F*?tZQ7lk7*_PAf?{-wtAjoA#dF*d8d3FN6- z?q-|I6)!WX)}^aFyCv#f-WxQ)!QBnlJ4%I@1H1s{q4~;mx>vI3dxzc_Ic*tZD4+A8 z-k*})EpT#&t$C`p^d zffx}EkR(`*))*k|UE2$>vva^if0_>we46Q;aB`6x6Z8C&9gqI%K)SuIk2=eoJa}vH zc~F?<)ziH0>)reVa6;fi-V=O{cfd}DgF6E6&+0e>?&py&T5p;GodlY0iQlYbE@PXu zR4|6#Vv_5g|EN-}UPCg3Obri{b8IroN%h^aQp15Wiro})<(T)YPMa2=`bHX!Tu{1a zij6w@ayOg58l1i-KUvCd2k(hlnl=Rfuw3$cXeb#`Tn1$S zmMRTyM(!35BrPkEggiTEwdCHrAm;1uPrcFBk>%yO#u|OO)iImkT-=+xf9b*J#L5jR ztZ(`j$HHdS{x%siQ<6x&n7+E?S-rz{fI`lP0-1`^($=YA>Qej31+Q(70A@m=^+#CnCuBat*_e}M17bg&}EP($~j#1eXnSY95U_KE5jvCKN* z2=>P5A1q%Qni(nmFIruJVRL5&(t#M9?qvDWrVg!BpG{wXaCy)ZY5d@_+HxVSETWW( z`uKOx{qo8l8VIL>kOyknYOXeH?5)mr= zm<3_JHz)Xv4jYgAA)|GqfdoK2r!^IjeXxRyM2Oe}V(=Nfg|05K!`ZjDiEP+2oYM--;XLMAC_tela?mp6%a;TMI4sZZR0C!_ zOVWG(v@MXs2^~Z#Gimq?Zi>>!tca|w$+SEY;I_ljeRR`O2g(kdC2e^SBw^v;HtE1 z0Mb>>Cq~N)Jff2^i#STaq^%{a#+c`EJ6z??oW@VGG5V)lek6-nb{ulls;(~fT^2>6 zW@aXL9v#u1WyJ=2N_H;jLijrW&3t*=@?^Lh?Du>JDmJ3zJI^XXVU)eKU{v)HDh{;F zDkRZ@SSwoG&=~8SvcekzfBQ|A*2P5v@d)x!)oKMF3b4b_d9#!RcdquxQpWTR{j{Zq z#@*Ix2DnmLx`gNCcR^OxD_x(i986RWNPY)J7v%4Ah?z*R!W$WV7QD?*1|tA%)erWY zXn}Y1t1DenN5`fm$It81&Efc6qQLH}`8hmXJZ>QQRj=dr97VgdYv-ObTRh_jV1{`ZJT zCtRVACUf8>?(%P8xFKLCdzGJab(F3LZjWM(Wz;}PkVYgiC%L+EF}UbIEWOIX zc8{{%WT|Zz8 z-jx~DobW#I28B=tL~*@ex2JFEs%+88p<`Qbv}@E7?TdaWz8M@^KW8#9X}XzF&?c#@ z3MAZYZR^qcPO#S!qYPY3(ml|~=Q(dp)ZaPY-KuW+6O&D%?>Lj#+s z95ZWqBSE(SE3F2f9tKzM)g|x>V1*6%!t@#v1-0EK!(mVTrtqeqSDTC}m;{%MDL`)o z#K*_)z3D|Xnk=6EjNO6MQIi?j-FR|#Pl*do^3v+!^rVTQDwvz|{qS0Q6ug-Q|KNu= zsYBXF=cXl$3|R5$0AeybCsH4X-`8MOv6o){0y2X(z$<;)Oc)B@TD9CFOZ~`wDvA|A zCp~F3Oz7Y;tB+@U!|34Udo3-78;P0;xzzXf=i!hrskn1VVBzjSRXkzP8(kkE5x0w0 zU;p4RW^t$=;`|*bHuv4w&wMH;`l>)X)z(;{e3i&mw%W_Zp1SCsqL^r*}p63@HjY7Xb#0CARl znoOD;m1X>BIok*```Ws7Cq`cn%gl(m^)*y`EB20h=S(f&LK)LYX^msNMwa$NQds*k z^>UQN7a*dcUevz=?K;O@E~-)mP~&d}4>6g`rMkQ4jV4)wqi@C}+uJ|pmUSi`0{XCO zVFpictE%wT6>2o8zj@wdnbrLZhusM^p80rl6Ez1b#l6#WuT5cG{1C@x(oA};OEyw8 zWZD>QmKw_i9~ly_woL=^6?wZS>>Lz%F&rC≷L@yg;IB;MF<(_)+DEZZX@uTU9(d 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℘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 z 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 UdZs56M_(x?qx`5q>gmh>1&JS5>;M1& diff --git a/esp32_ble/doc/step4_choose_min_spiffs.png b/esp32_ble/doc/step4_choose_min_spiffs.png deleted file mode 100644 index 58e8e24706ce477bbbbee5d0859b381b8d871eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276981 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%0DDh-6%qzWB7&ba^E6{2k*U6zu`Z>y0V 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

CvF|Gsnb2!9?+{jqH^krjV1OfU$bRT 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%0Do6r%;AyVc)>gQ%Q*;U#%bv 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

f=#Pn8yFc45<1Xp>4 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

)bgOEgyG3K1M4qS&)Cyo%O z_BkrS-TTq*dMo8)TO_h_mZ~~z-+&eV4b($uJnLmde5-3hb6fe`YTEpt%=`09%(q9a z#+asb>$n}hInN!n*9TJsew642dV5`crwbV{1l#GdW#UaHLg{7Gj?il4bE%{D#rbIL zMrng~nAGuiAOHL@8ZK?Y*r3!(!=yv?`~C@4(+}Zfi23)?7Nj%sIe0+jLsOYs%mYk5 z2JRv*92~-fQSCA)*Qm}jI?r~V#!u3waQg^yE7$E)NCL0(i?8hdc3|g*h6L-H$;vl2 zvdNY-mN=&6n>vTu+WOz=Dzw6vH^&&68V}qdh~g3it+m3-SDobnNsUIp_&Y<5G0yAO zDbDCk1CXZKZYmQFqzzptWhxJzk4Rd{uTPiy_yD}Nz5o8EJKe$gH9(m!^m=d~cn&s} zMwl$wmaDcX8e)k#p^;o{pdJPkiapo~b#-?an!xG@fWRMdZp$ey--Ha2!o0jx2CEDu ze}+;%oQYMn)lgNf>mnT354w5t>zQ+k0$3e@UN0RiO~lnMt{3{8a?6X%+LjdYnrZ!o zpFk5H7hRu$#+tb$pgm5^QJSAm1I6h^eTKhd7#~CT9r%$w_8qKGc?-Vl`uwIO+sCeJ zqBUktyW77>wUOTi?C0wHmj9puOdTGdpLNei{L8)JRMXu<8jG>Il6aYlb-w#MaKZ=3 zy7Cu()a9sbn+fJ2^b!Z{z+i@*$iH+M$SDKO1whvdLPpG}FG^e9Rp>pkQ_ncYe^v1y zEQ4C^L7gsC=j8jb&O+y^XkjfacC|F24v=u00w`vqULNn>#H>Ehq&zE>9UW?M3!TrUS~KDZ ziU=}b(>ypWiI__6_nkYF>+;xW6=oPelyUnTPlI68;IWIxed8#Gq*{yr9F<8&->iA z5@4OVYCH${ftU;_02aV2BWCSp>;|kvY#=Du1^6Nf22c}afT8g($oo#0S0LTX`y)nH z>Ppmn3R4kJ>~n_wY9|E=_XnU#p$kd8vT??a{qlJ5mILlxu4`25-j-VLw~~?ENW4{T zHF>Sdvi0!CyVt@2K|#o1ReRhOg#JG*01*ZfzBm;FLr7K@b-xJ*;TM|KfHq4BH8m1W z%Qu_71fQF5y%fUWoH;MeY%ZgeZA7cmynW;?UMM|0@Vo53pV9w}D|Qv|FVIfI z_#OP@nNj+uZt*5@jZtxTE>@+&qTc*%LV4{P9AkPJZAuZ)DNNbNE!shv2W;l)?0hX9 zf7YqTj<0m`khIc$2*RSsiVjdI54ny%LH@_v04%4s0?Ae>48d7>U%AaSu=^&Iv&dkf zlM6jp1+Vo3fqHUE3hb~W`9MbcHoprV*WOR+=$PctFOQPPe3U0lDihFFd+mDlJ{l3% zJqG~MOvD`q7V{p?Yt*N=qW?siVxNmDsD0B9qFW`F^36VfPpOG~%OwY_UQ_b^d7=}L z@A33o?@T%;{H*F#oajLHC1|j=UA-d5#l?Li`{oH78!TQAFDYkzRbGJRRBzsM__&W^ z7&?Ey{=cuJ>5@?O=#r_+J}BBb@GK>`eqI~L6x>>m;XhJe9&!F7`6BdyJ>#j&tk zGO@%slp;*VRhh`?7sUHfvOOcm>cB+h=k-WEe@zK%JZ6{vU;3B-3|OZZFj#X@TE7%6 zEwkz3XAI=|@jntqAy^uccM{!Oswawdk4!s@8Zzh@Ouoo_Mj=MC8Rsu0Prx=vs( zZKX2sEa8_tzg8ano>9PHBKM4H%Abvm3r>5e`c9x6mA8S{(B6*O*X;kGqz^}0nlprW z_L!SPZm9hWFUNE22S@}jjYJC63MJ%96L0QBQW|12^R1@_!+1aCQS0{eW^R9HKqGv( zg1~}z?4A03DU%3V$=a;E2}h5zfmtf?T5GAhxq0$A@7hYJEh=_)En!Lh`jWO2cNBx4In<4L`q2&f`dOYBaxuPWl|Y<|Z;|Y%c-Ygh7`%N zjK;Drtkc&|5sr%Y`Nx;PSQOw;=~w98#8UB}P`jbfEBLoeClSPxA}Nzsa0+dIK9xe-vt+y4rJYS)yZ4wM3K*UU@^x3COVsO` zRKt#`8gr0C<122nb6;w3x6P-XJsN4fYLA~j9DFY_=fmPnau0v)^y1p|QS-&>ndk?N zJI5dBNIw5*it$h&GH?ErUpZ0k`N6mRXx0zyuE{QQxS)!zK4=U!S!s%mLEI$?v_U^( zE$nPvR6Ls!edpH$a7=ck>EF<&vk%-`j(qI=7OCb6+4jSbbayijc$T!&B0J?jWl}f2 zI>FgUUc;i2W24(^!l*6aQP3x>n{#wKqVu$uMGn6C`u6S3QZB*8s4g}?^xjsJ_-!nZKdTykx_!USnwxm)JrX9YBO+gopwTYhk?S1Tm(!bS*HQr66Bg~yg&QPJ4;=2L0iZxe>* z#mN(&tGD()A6z5(Qzr925B4LuT3NDGQyCSwWE?ewX&Uyh5}`zXa!K6!KsmFqfnsni zNojCf0g3i+@lAjQeH(WWJY$vRacV0o@#N&>CP8ghEOLH?4%VgcFp12(5@OUv;yL=a zQ%HQ*?v}cJXSvNASduBD*$yp%7wVkQi{!fY{blgj=0-P{D}kUlr? zU^@wWaZNYAJGN={e1Lat@e)Ng(0PO?`+?)%96JQaLa& zGthL|cmGD6R7Zp2m#Zu@Um}&H=~uC%Z%`8Lg(odw_f}6A-fy=!{c=PC)u6T zaMv1XT(qH5(HR$)3Ji}>;T_fjRpLBM!>}nu=wp7|c8bql{4^FaJ#4Q088j-)&28RL zvOc$_+Nkr%miJf;)vF2VPkp984;iXQxG+dCt0S&eITJ2Q27n$?zV z9{V<3e%cM?#;XE~$|famAc|UKNpSo`7#VeS#C|VZ6R`O0+&99*v0`FkUP7EeZ?ZN# zqGrnE21rAdaj);LjA9KB8Yr_qJS`(x-I)fdb3%`rkSr}t!9JhCIITKHw{Gq5(Vh)) z5Md)xXeuk6AJiv;3xm33YiWM_J1g_Pp7O!GfcSwB4wOXk^yY zZzq-F{RyN$3;W>TdAfTd?OK!~DDp5mO_V`*uB=~pG}EnKwZmtZ{vV5xPP0$L$R1vV zKk>!>@|fi(-+FRDxnZ{$!za*RlUS34$6&kQ^up|w;oCM{7#tEsRb@CBGYgA=l5G?O zxP$9k&;V#qy%d5Dej~c!!7mj;`y%U&x5(?}wSyNp32^ET+l16YM@lTL7j0vX3Byw{ zrezUGD)sqE=u9d#BI6UrSiaup*TuD0Ed^!3V`d>_A-rwGZ;b#|@LP1pCk$`Z?<8>` zw|QtR&5A2z_iNH3B^O7(JhjCluG}&IXZhec|AZd?LN5zX*oO@m?%{|erKoi9+M3Dh zr;k3?cew6u#`_NLt-ycs#W9I1dA?NX^r<8>s}pqQY-k|$dkGV$|5AEW5TnCanPJtr zgH=&SCp>_H{4t52G=1hnuP%i^+e}Akl$M4{;+mTrvirNRM=-t$$pr0}G6EbFJXT8x>)QY z_E*_aPB4?nAEtCX)D2w95FbUf_8aCH%+%VwYj9@bwwzo*ux@B*c(l18@v@7S80x2s z0xMTrlTeziOh->I%1QDGvi+%KTV4->b@3q)iJs;oj{E|IFib*8n+p!=ME;W%9VRy^ zq^?vWpl%|`d|=TpD&J}|r@~}7B9P>K$f&u(2V$-D>1x`|u5@&2xE6~eqS!&l#=Vq^ z#p;(@wcl8${poQ>?R_MCQ;El%zxB;(dVja6if+9FwY7p8bCSiAzjL-%{4MN4o<5AU zC<9`)uMiV*SqtN5RJ`XeQT$>V)!|?qwS$y<`(dy?DUu-8$HG#lPqYhle2{fzV)P z5x;SkV9JI-WDWnGH-Ci@0Zg2-s3@%TqMiq1_0Du4XsqJs=%_c4$OUX&zPdyiZNv=! zJ!llwU**cx+JEth@3ayh4h;>iyc9-JOFKC2_S~mq{~VqbzJ4z#hTUAVo_*1lsO2*4 z-ft!|Dkp(iH6e$8PX?#5WowsZO7>h3A2fuV-?CVzHNKgE3@Tg-a9BtPO}rP?gUL(r zhRcYgBO#gJJa?{VtNl-r`#%OBqf0>tBh)2{_ym8LWUKS173E9%Pr%e2ot>ZJpgbYN z>exON8|9?SR?OO@J40BIy?gPIc%=%i+?l&nY^P8eEs(3pfs;fI?dALKa4UQxihh70(ub-{RKi=%4S+%7YEIdMv&%u=+J-ocxyT|B3}4d~U^~ zFJmSsaNG4ra(Lgkj7f?-wH>^qV9F}pQnH_`{ciE~Xwrqvr$&Iu|M5-=@yEW%N2s@p z=8WAG4n2GmoHnwiLqX7A-wj^neeKHK0^f*E^?mz|#>=jZmd`Xx1s_Y{5(#~ZqJE=3 zWz5F0g}+loV_56o5DcxVkZv8OzfpuySsI@8XlaO*>F|5!0kgx-M>Fd!ZbtU z$peY4s58X1^>{YBb-3x@bu`v@4u!t{fGMax|tNd;&n;;^b_}y-D0P$qv{r`Li zxt%i01oX=jTO0aTjEVP=h63I%)I7%^DaOgXs}A1&O&COYe~4)?!t^usl?|7PEl<2tn$A#PRq_s1SR!j#$M@U?O_a)!aRMP}Xn_Icy;;o#44 zMQQzs!_$CS{D0q8Qz2wuD|q}Aq2K#ih~2lCn%mgCnz1yjmm0q4_bw{#xA#iSNWnf!%`C zaLN#U*T#TZoIeNbjkfi`85v}LLrlJtgFzy9+^V95U?WBUI!*@Rs5yHg$pcJ_PmI?v ztgPQf^)UML(d6rW*AfG3DzTo>#0}uT*pr!>`_+AF?2-D6Ye9l@%rU6mHg6T@YBh)`s~7xm`^}>_ z05o`}PsTqMTC&IdMt4My^FK9wkMeF8gkuQf7dDn7B)@O`@`|9`+G-EqrA*Is6Oon- z-zyi~*L1I&lX?1-!Lkm~*AG^1L@27luM$Hk%rOCOj6UHn@cD^}gK-{K;1$vx~ zX25|W%XyIziGo!{){eYy-E~4-^^MErPLC(}Xydk6Q&Hr;6P8asuMl0p#j<0N9Lnm} zI~HnOWrhG-O39Te@k$zAf^%s{MG*%_O4sn(@c!&^yUk6k^GP~3cedx`}IG>RsQ*# z;ky=7S|^+Y*7a6Re7V=WNPhV^wYl8;n=YWpyV@G5NA{CgvD>{WA&gS>E!IE8?bj7~R9&+vNDbcDiARypqgmo25!GFqO}rb><8srJ`gEjTCae zI&`hELr=sed+8)6H|?BnhCdF5gd~vowG*P-C)~GR)p+x(ohQ{$Ueaw#wN$h>PB7uY zJjr$&n7AC6cPI>dd!0?CBxH~8yg!G?3M2dAc2&#j1^hwjq@tK><#1`ItYObM!%>vE}mH2sAk^5>nM7RyR|2O)*((KqYw!D``= z(!Z4bOgx9HZkZ!s{S`gOMzu2zl0D8;Rw!lgP8>7(B=bIVeC@z3znUcX47uoYX9=4Z z4Uj|`jn@8xPZr5Z72##gSe?GMG%BGLGRYHto{K+J@+TW;x|H1ita*rX1!Mc0qnN2x zY1pS2Z(TI~R=jl-e$U3Io;|*L81el-Bi;-q*CcJ$?Tw4QuRO;}cH$W?TQuu|1OGRjQB}=|LcyW{@L;$ ze~Xq_arOEPlC_X}E!T3}_>~`yc=|($`?IJ%)Ww;IAKiZ@ipYN^iWfEv^c&_3Z5@I< zUf)`Ms#T7Yr$cc~?&+KBr}6oA35bG%*;jL>$CclPDqfFyY)WV}K%UsgJM7m;dF*OZ zNA%0bA||V~PEt@|3J@`AsnA2O4fgqxH`9=J9AFo(AQ=YN2rx9oo9VIRFX^c`EsP_? z?qLER7K06x^%L_V(X>4cZv&h26sn@PQ*eoxzrv-SS3&j=^FMm0jAL)5mvZdvYckwA zvIKw5J6L6b!C*xZe8Xcs~p$5)rJmkkj5M)^8#Gq;OYI&y~*fqb6r?k!8O46d0{te~Toy`o{ z--9m(h30AhEKUT>E@=|IEA%1DrphE`Cac;8aXqKHpXzetkjxbr?jF?u64UV&|O$+tRsL|bvUv@%vj5V{K3I(3Gx znK+okmF&Ct;&UKxx|>}F_w$i8{*&d6oRkii6oCPAwxykL(%7K9Up@Xc%4F zP?jMM2tVY%nEqzmV{>zLVhG$ASXy&%aHzgK=uy(v7Mzg#r1D|19hrM9g5oWq2{A#? z<0{pqNFB4efDfvO-6?Br)fVVQJqg(Zw>PH!j7+$fCwHh?+KC`W+iE8Bd^o$N$*!9u z0Ek!v6Hsry^u&<+qz#vT8$Zc|IMMaBqWT9;~E{SwBJw`I-W4>N3>Pl5b4-F zo4I!H$*QwmiPBg)p0*y?N5L#HaYtGbE$uhKT(>{j4ivqluC$y+Yh_Q36gM+tFo!~I zfj(M}H4N=44DnCLIr;M8116+}w8@_YMMU{cpKs~-uGk%Em5MCUsip-sEGYnWh~V%< zK-Y3EuadblD4~T9*+HZ7qTr#I_pw5Df4T{l?QiB6FAV@`D2f`dU2kD6V2;rf&C)tv zs2!*Ssvi9IiB2}wJ15!IT&zDT?{Hg4Vf_OVe*^M{gw!|&E|Xiw+9^ZCE1B-Wp*a)O z;zB194|0mxxw+8vbbNb<%9GsWOvi}~*o%S?@-Dewo^N7leuOSK)1flUHQ7wN!3c6P z2XnJyw3Z>?CcF5-8^e%Fu&Zro_?XgdOKHtPTN^iDqqv35bN{aUHWbnxM3)?ED0uhT z?k^K9qHsV91P01QKHn{RaH3q@GIH!Pr&G)Ykzrh;M(1(8E2e@;=Tm3iQ5E!s44$i_ z{l1ZmJQam2e#<7U?Dr6Os33ALS(fyn^;A<7(VNS|({p%ZD1%Bi2;?q8)h}G-G#SC= zyd)4AG@|%=dW$*ebvX=3W{VS_eZ&}==u8%I5=S!Z znEh=Nj^lP~89#h&Y>ys#M&0SV1DWHaZQdm%aKPSaefL0+sIKk^eJF(h^ z7|r{_=GVZ^LI)xHlcRJrB?4LY&Xrhws(=~UjLTY*X6YML022un*raz~VS+Sw(E+E) zFKcOQ+s=EOEcz4aiLn#=4Xm}2m?rw{dhEK%$F&*ic^r*p9_l(y8dvYsBG_FHeq?$~ zS6O!|cpebU*bNB3uG$V2+-U+jd}w0ggALz3UHDVzIP;A2a>y+vzEi!7U7%Hg3Fw7L z3Qi7?zN4t&+&l-CI~8la^Xv|0*OfJ=Bg4{p`egTDm>lWW=NWdV=iH^^r)Z5w$J6L& zzHcp|cJIeljE!S?EJ?Gg8)ASR$(mK3!tux3zLEIx*#<4A`U(|FYCH( zo~`*tDk}FqaQYCvA1<-5E7xj&(kFl_kzP>1yfdNC{(&yp87W`Au%*G{;-Oztx!H)# zMpjJ6*wyvLE|7QZ6d8!nuo!57oU^6Q`)_pI_uBzTO5TIW{kY8b2uP92e77nq3-x5) zOLWftP!0ftWE1)DQf@BSO7)xHM|udKct~gQo>*=UNg3W;U)f$LS0K_qv9=&--0T2H z{I`cv2$neQ>OId;0w2G;Pk{WjpTa!046FBA?k4SascGo?@4BxE5{r7e4_EBW!N_=L?Fp>v_d7gm zVu0xKbQr}O4DbAU#yea>j($}#>!AQP5X9&@lCajU zKN8w+BLFIU3lMo8m!&kX9U3gQ_yyb96?Hry6}a54oUz>9iRJY33rH^EKl?3 zh`b=yfar}-QT5WtOb@pDJ*0jCL_y-zaT7Amg3lewrfS>eR5MZl{{^UGcR;5*PK}>l zvBB<(UTr7<%gOOT!o(>d+&2hCx&ZU=rJA^=I=3p4`kkE}`MiPMljUxvMt|Go4w}(L z%4*u-BCl=ov|i@dQG?m1(Q!AH^QFi!I`5udUW2&gkU?DAv!CD^MJRqvnLz{~P!Gff zl`~WnJ15zZ6d202wY7kQTEsya92>&`-J1W1so`-~;ukN#iOx&n!KA`yl)8b`G~>mP zumHIP8*yD-ogVzM*D)j5|KkFyySXs+&`-U=mI=P>JaPrHnZ-4Yrz^+6T!DO_(e9PW@qjbuH9f za%uj08}ih4={Y(zE_UGl>2laI8;~HDwegZ;?J`W{{AG6~g@`+`hOPr)zu>OQ=}5{o zIxr{#0?;mxs~Y_~mzxv$%fct%J)W5BTf5VMH!nc&LaHh&vn}9#yf+W@itpI1_JTnL znx&6+8YuZ}Ku$CJZbBDZW!0TuRlyhKDUCIC1vGc|GN(sU?+3FaMDTEthT3}^1hL1?=1^INVd?kGK%w&hvw%O z9@)$wgOGecfLL5ihqS^%LW=EY1pkW$r{h355Y8P znfB)b-CC;*W34k(H&eTZ?Rrf9O58xNxU4NAG~BUxXPqO;cE`1?+KnM+m?C9H7>rDe zshNI7W|}~Pch939NZXjMo_atK0d4H7i@$FEO& zztHTtz`T{e=I6IY&7VI2Vj710LJmiq)NhGM0(BP;ETFB>Vpss=`at6}hRvgE63BXj zLtB+!$x{TJy^Z+3X|CfrsWCV{9uPh@)_qf&Q+FiO#C;5*gS}Qor9h(BM8bUaqj++Q8B`?H{W-nA8iJ0Og4Y6$Y$VsX=Q%xr3?O%x$#S&%gF_k@1bW zxjDPXxqUrwh3z!N^URpsX~q^<73t5lj01+`QT0JL)9qk;j34w9whwy}6%~@FLt!1Y z_skzrF`JvD4GGK0k#7h1cX*ioC3b7_C9rZDm02qC)K|foGmsnPm-*w16i?z^$8ZzwV^G zxI^i&Mdf@RXIfy^?}gYfIs^+SM~2CUnh0DVas~2T59H&WXV8zyuYDW zM^#bbunyotb1=Dyx+;u7EiHD_{=`UQ|G}kAbLicrIk(+buggxSJ^xpYA3m|2AvNsx zS*HOzcJl2S_g546E(*#Frz1&HlZ4%{Ny*5P5EZ*V%9C>7q>TpM)0%7UX^|VlL?d4!e3KTHEG$(o}Go((}~7{V-v^x5hF~HbsPjcg6V135^N1f9~qenkg9`lx!_+%fS7 zMZU-NRz->zj5o0zLRr6BoOs*&0zFv zysBxKn=vt(p8JNeY%&*~X_5KHr69Q1NU>FoiEnZuQHv2s(vs&GDjqV9`mm_S~FV z>!+=bN8i}jygVfRe#xV;Vo#Q$Q2V2bs;cF0_j`U!z*8ep{A$|5Omy`eNt!lxr+sm* zXBl%!pm5g9%QfDI_cuR64HdRGH>T2u-iA&4Hb4CM>Z3|D6DxzHn_FGkZvCN%zv#`G zUZVZ*qnzH60ih7Umya@xQ2jFx!3Hn%-YcfkjpF8W9%Uwv6}a0RAB0X610JHkEWD%G za3T?WUIHGI+kFONclWf9QKi<=Ld$ha3vAu1sA`&@#1tkE$f-k4w$af0rb&!K3jlv3 zISQRs4M!|McKI87q$Xfm>3q;dw^)|F*r#6ENk~XY4Xn-r!JQ?E8|JD-Z#?&1AVdWm zOGmxS;o#ulg2h0ErEna(0g~sQFI8$<8u-?J?6OH^PN&{pqciXKaiqUa@dI@ff+eYL;_z({;II$VIpyvf!PHyuSi(a4qGf!aW_h8uAc@^htz{JEfG&$sxp8lweil%RY5@he- zkOtJ#>~*4S&yTIiGWcuc(}m{MKU8jHc$^3w zW$!}JDiB!B8!WFLu=2<4cZi#=)><@cK_c_O2uX`{@nt)*;jOH~}t%gy$jg(gZokvBKZ_jl@c#To4C zbhAbOK`F_Rn~qa(;G@3csm8Pee6%iw3kl^%Z~fB z5EcMLhvF-bQ-$U{KU+Cw84Nk){`s!`Av*vK99~?p z-)nX80F=OR@|!Uq;Ql!&V~8{Rj;mGV`B85}QC7g%mm34VHZ$_|o%fCBW5r8hKvLP& zzJ$QK-3Brs-hEv>60v&R4+F7b8} z>kI_fHtU1brqe)A?>F9DH1aJ6b0%6s&WB@cc3~$=z%(s~fEe3fT(i;BL&pQKogEor zBAW$)3EQ@}lb~xLW?u#-T+it5Bk4OPR#{9gMZN}3H%@jxkY01Jv$N}fmgT%@xH_K3 z!w$Ti?^Rz-RJ=PiT_5z43p4jVc2(t4&00!l$}S8?LucP1XN$M-3~R>WMA!MK0ET8+W1W zQ-a%QBI$x~bEhM^qa*U<(X4QHxks02^ukIEq~jYA!&<$mO zEI)w^_ykB+2iV@&*V<%ooUO25D}BXq6)~n+UrRfYpu(IhQQ~+L;|odemsN4#ts$TA z3~(`9boZleQ8|o^hT+UHdTLx&#?G`L&cSyZW5lzk53*s-qB1yJe(SANxoMGD_1TNt zls&zLpK!1<1!xmEHo8q1=i%RKzE}1+*2r2SpxPhM-d~s|ij!YMF;44Jm7V=;pOxU5n8M?%d8cYXl@0YLMfn)Z`l zE)g|;-<)uN$KkD3Fk)%a+#&f@@TOK^#a2b4j#JOS=3A6n&WYCb^*wO2MVgA zWVB7vbuzKsatOdIbvvQlnk%~#{t_iVJ1sjKjV`79J9$*$eRI?PHbKO=;nC(8uDJfs zbtO$8i;+-msEWLnA4`aKsYxFxaR69uL{V91E4U?4IhMByIB3VZsUrX_(PKO=me&b; zyb$;pLS}m$XBuxOrVVcmpZOAsNVo5lOWx~4SVYuVT+=TZiE0wXA!8G zHIQm!%T)Bm3m2E+)WIIM#(ThdRO|pi#!8>XZazxiTUgv#0oSpV_ppef5;VD21SESF zI_xd0KAxn?0I)l~6r5Ts+LhZ@R>bs7!4bV|KG|Q8z*+XWa~=8*U;|8sVnsaSRp!@3 zz3_Hw4_SdpZ7Xo*3tgfO5RM-)J&bBuAIh*DQ=4xmP!I~bfvr*ciBki?Y-&RT+JYalG&X#jVTG_`ChcrJc}-XEXqy(U z?F|DrGieM@_w5Sjr69Wfq}@w805JqGkO!=q-Uv^37MWKvUpA|MEDbE5r_Ae{FxH(9 zTsi!L9fK75gc;UurkTJNDTmTr$=5W*;=IU>L+H2|$ipC+S3biWVy}|5GS~R;tK7G- zWHcA{&d~EBCxFAy6}}3?vvVwE+U^Qf9aKcF%$c92Dy(%qfrD&{o((rMCorLTZ@i2M z1CAgNGs&Mhq>BHq0s- zGMY*{rpLx~xQVnNa#7t_??Ywu{KrhG2m!xr0Nw)5BDnTZNIa6}sz6n#%!irrnvC{| zJ2{~%7I8Zk%G-~9FfS)J4;WK~BaC)D+G(=WRUN?D8{P+oyiGZ-r+t!{EM4OZe#E@~R3j zz$~U}S`9d&r{EMp?EXW$z+y?5ccoZMZoH3I$Cj1JWJhR&ldYyq-F~kplw$wv*1|BKP8OlHB`W!!}>mTP( z_R!B8H~xrwR-$!BSI{*EJi~GA?9P6}$$k$^Z19kj$G1^&Rdv8q6l7p>NqgNmbp4ro z?1oF%>%%h9=qKTAMzWwn)62V4P};@QwQCfG%rf4X1yw=SYj~2}9-T@F{d9p&-3&m; zSUxt!%s$Stu>NU(39v;pNA?_tYltst9+7Hge(7IFRGU>6G@dxF7PIKC=E?SU_`^Jv z+)3onp=v?QCK$Fr=mw=`K)AfJD> zk$*W=wQ?20o{knOyjd-z2d2o~V#w;P@K)I(K=KAiS5eZvC=YPQ*Dd;(t;U$RoU%&} z6$VD$*UV+SWJ=6?2ue$hJR)|l{Do)@~5VW!`Y@V0i;mVyj z^sL6(KmA|ALn3mMuJL1A{UzpyZ#3f?XT2lEj$Sq)6vB@XuHhV0o9Bvr4BDERb5@g_ zc2E8A+V^{Q{2P~Tiem8L%rZQh;8_db{^$P8PrptlY@KmqS!XmjHXOPF+z@GFWy{B; z^fGZHpYP(41zB8AI$f=(IZAQ2@0XZV;D(Z-dmdPU?4tkZRFn&;j) zXl~(eT<-4(a_&&wlZT=tZm9|it34C5le5ay8R0#ef%nXNFx~&x2CtBVMA$uPYhlJ> z6PVYMkDI=mH&NN#a0lUGc)eUcrV*09On_1)lnWo*5A4%roDO=D*Buz3LqlM5#9N{# zlLcM~?E6_$^YB9>!4UhRqhqz~rdU|mWT*X;m%Q69ONTWMhe_Pt@B=4bwD59H@9iOY z3$}T@$^)iDv#kNwye8F!{hs0J&-5@Pf0FiRUOr_$^B%W#qSv z-2LUuLZxB#rs|Y3A43Y~dp42CvS=_w6%~< zk-Vu1L_*}6r?N0oTk_L-AL9;!bvbi1gBkrlqrAuSuY8LW$K%+mdAN{qwwC7VhMebQ z(F^3Hl+V*Q&91P%z#rWXaWB3}Fr!#fg?CsOkoMzyHLQ)Zyu|z&OVZ4^bEHW5keUmN zFiMTjSzolfhv}BgWx9jc9-kd2S{%QMdD@W;!h7`Khg>h3x?@0oJ|{G~Op-^N+f|6t z!b&p`Afy^w#O%FA_ZKf&m6v2*g-U&m;%xs`a$p`c7N;)ej`mIz_gK@OY5KLMiqiC& z`iBZsdADAJ*(BX0T*^YowA8P#<*Em9NKI_v3rBEY&^qRzJBq2aacKM7pao1_W#XMVo#%U{;d-)6V^3*Q(=>_L?+;R{O~6_9tp=O&`|vI;rFi4T#{)a1 zQ_!>_sJKTl`aK(vjvyQzc+Qdc9Tire9t+>hn&f=mqvLW)GuGikOQA?#jnT$;7zZaB zuQwr-v%XK4I~HeI5)^fGf}a|8;y6aohh=gneVeEHAXmK7pX#vcTnRZALVBI)8bR$1 zs8>mifv|vJ9lKL=C&&0A6JvW3#q`sa_1q7Vk4$EWkYrwpb$km#mdFqGCDqenm3owM#1oE*SVvWpe-fW9%whvULJ+B<|>WKrt-O*?O9>+`{J{E z*Z36D!*a7T2@c+OlXmv?e|~+6etP9>4SlQ*t9e(F@Z2Rcvn>PX+ET1vO;r`x6Op5@ zhXXL__hO6Tt2kww2 z8PWUqe-(d@M2ST|jw+sWOE%x2fhd{OH8OX?r8K+7|WW)bZN8*Q0kO zs818BX%E65@CoAoq~R2S80UInP(QS%cnp;^99_4)qSD9!6JiA3sl#BvkdruD-$$>g zTxdO+^EWVZPEmSjKZ^`8WAJVKRnJy$U~#M$^=|1}2F~6&lxdJ+lXQy~i_|L>9XLp* zwRb8RIlA6DZsi|F%}OG83ksEtX}tfHGF;?Yd)(X*GkZphFT(uQ^83b%x_g%n+UQX1 z7lRL!==U*YS;tFlGKuKMoRya0C55w1McA!T1{MSi{iyat8U{C`uCjV3Lg!wt9X>Iv zf+fW&PXK(OV-&%m35+E5c!C0<*^lt)dk}J@j2x)`=e6V3UZV+NJiUe5 z0MkV&8lb(KR$zfl`o4y_=?Y%?Ra^Wbp#IA=W|ZYO20_JJKdhcChLvZKWq?=Wy(U=< z%Ba<5Xmvq$QqCpk`fZHX+tPK%h5;Li1ff__@YFKfY9WEw(9joTPe^Hd%k zEAB{LmSU1(!)5zAVbuTD=btx5dU>=Gw4gF30YwdR@tn~;aczc5$Fm4*TuQcJF|*6_ zMrr>gNJDKEnc!4LtkQ~ItdH%T|>?gCv~sNtrN4Sifjn*GYQ({j>5-ev^h+W=)<;2uS1cU`_<=A4Mix-fv= zhZk8%sF+?xrqk$QL6X$pudIzP%thqwg_yO+YNpc|oj#&Ime{2xg5|pJYedi_m%f1mi8y*9JwNBB^mNh-T4_JK$U;Vh|-=zd7C}1vh z_!BxG7nr+SYT>zm=PKkHz7v!sK8jEfxbv6#;o%M05NRXxwX1eBOoBBez{*-U#toHJ zLC`Z9R5SYe$|^F`%X#qSKrN32jwIek89GHKKe2GB)?P-cYa3<49g!N$F+KZyh35Zp z0a)ac@Y#)~?D)ZN{@YlOKM;UCGhk1w0{xn_DPD9*(IabRPIrHQ5nvV<&hhF*EXQZJ zaq=VQjkT!f>8e3}38&v@JgUMmzowY%sD+{krl++pU-1`~+s)lqQF0ScQrA9w7xue( ze*J^_zSHwyFO35wE1)(VS0F3E*pg;qeEXGvn1+(GIE6_GAt;i`fsgf*Ce0oF7Zz|g z7Q7i(zK@L-+f4=LRG!~bk*KJa1B==j`AwBUM6wtQCkXKBYCCIyJR9|R1OkGi(*E7m=?08z z_w?o7(pz8S&hdj61cZ#kz6{Y$paysPT+;Bt^T_EmG3MH0J+N-BQ;TiWoJ&G94qL&EkfRs2NJ;DFmiV1)$!b=wz1D5 znom>kAw#-v%t| z{Qbas%wG(?7ds*r_IB1MK1{u%xQmHUe_|l3;<&htKzn+Bs))5bkS3DDw@MuSz6-Z1 zsy*;T5hC@&Rg_8Ne6-(@%&K$hOmJNJLf7GVZ?F!mD`rmlGHT^bqYlAedn|!*6cD6m z3_|uUa$$EljCh+b@?bVAW66nD77T-NfBcm4wk0P!T7RhR(dhUods?q=o;P-*6`F@H zp1*K2JrBh_!?RFUp#!Ts@pZwP{_5|uzx`~Rht#Z zutm;@%d27crbL|{gumwquDydx8A&-2l(^<-g8ScEVd@kkH-Q#LxMiKaNU+0%Cn-%Pjf8& zHT|?S&48zteZut9jqSl>S{OC`t#jF`mv*@YmKb4~%lMnJ%xtw_2oU|5Q=SS;E5baG z{q#}(TdYuKEr_YeI5!qyns02wxmDzj7tv=9V26}z8>&w@wPNBX--#oF*bfA$BDt(6 z^Agqk^rdoDM33-q z8|0&*QQkJb7|{X-n38Q_A6!dxecVc1w@Bk0^44<)`@cfLw%Oi0P~3^N{nT#=kV(A< zSx3VOxlo$^W^Q5a%enRY70;{$riT66F-k=GAY)_Ty^6(xq!JPa3F}Hc&epK(j z9Q-X4{(cpjjmZ0^l_5uR*b1Jk+Xc^ks<~uOM$;45#@z9%sF!@|NQ@|{Sc4hrtHo5f zCVNiZA1~O=S~*U+ut3O7{~LS1-tB+v|0v_&L@#*u5;+6M^4Zt{w8UvCcY=4t-cQC{ z-}%!5iYe-6@^=p~O0@;?EkNsB+KByloY_0*6b+&3vYHpfv{s&Yp1Og!S_MTS{^kEE z>IckM%Ag7CxMP~Y@%)WJ7!u{<5bs)y8D#bToxm<&RLMkozCJkF1w ziGeMnB5dCF%G#^SNmdt-;!---O)1t}xtf`EdrV}DtM{)my5$wf&h_bf#SM>O4TAk ze|B=AnX{m=chujp#M|oc49F9fr$)#`R|z4dr?9`A{-gAU^^seGIggyN zv){M>sL%TMaRjiNXRiyTU%s}W*M71(XvK|@7bw!q)1VbQ-N%mX@JKl)xwxs%+a5MC zeX7=Z9Ksb@#V35zDgMcuG=JNhZnYE+Z_8FX0zO#sc$nNwOp$xh$oa7`>4JSH_RrCl zD_g2_#MHZ7-k4omFE6(0hNpiIW3bD2P$dOJTvLsa6K!-=PXSO_L*ck_pFW3>3H!;y zxT!&^0~e}cW3-$+-mz7!C;IGw<4erHPYE%K2l zTEyQihQ1yMV#n=4p|tW@kX5+D_I%J~y_Pd4SkSN~BTsbtSSP$gE3 z?7|$%!~sPlf?*-nEPm5s0!ndG-e6nAfvRM;q8C=fdqhiV7_(~$6P{h38=r>E-~GFr zNE^R{o7uS8PD&>VjbLZgv+*K9;D?2N&p3nZ>C0v*HG|@^52RVKI zZb-m?=YerR$bkRz`LCl*za)(Wm4y5s_nUr6GRW<%vSFsHFEO%r9juUkSp9Ns{hsEi)k}x2@9fl2!6jj(e$Kp@eca*J42Fb{K{rD zwr`F{*?Q)%lU}N^Dpg(G9@v=L?AYus{P4c60|FpG6f#j>pYB~zf^HvE%G39UqpN)7 z+v|QdsojK0jwjN+W;#=^v6uX&UQ?0auoOZy#JPKsE?HdttO3E=9S{C>-R(Bt&kKi@IgRg!ddfHp9k3x`1zZsuaRzOBuF|3ve^z3=yRph4CtMo@HS z>5jvcQ(q(8{$w+55B`AB+w${e|H?_>$X@=9Z}M3a3u(h@$bsDS?1Mj-mg{KKWVK$c zt^4HPz&I%KRhbV9mB2dJ2X*J%2Opg_+L-29QeZxR3R%EzNdThKEz`x>@yt0W4V`SZ zGD9sXOaS-D#5*_VW1_bH5nl4X?SUJ3Tua#Lc*S+=3nYR&l##Y7Yc@p!rOxva14P}5 zlL+(A&n>N#koBR3$pX7t!Zq8*$`u}NmeQ8R6=_KNe}1GH^ne9a`GvA^kI>cRaO{ih zO85M5v(kHr_?tgJVp41c?->o43p87gDV7j;%g zEkSqsQ?t~Mj2pDc-F_ zvkjeHnl71+lTmIL<{2c6pg)2N#KMsmBA{%8gZUx_vZgn2Ejn~XbdHU$MbE~Zn8;qK z3iA>m1_udu2fHe!`&AFe-MSdVN#S=XYt<0)A`e(OX@R3s{`V+BdSMQ>EG(9S{G9IY z6lBUQknHTAEgV5!TR)(3e|EJjW#S>2v_9smQLh#u3?;EKyK&p7TNE2*kUCg;}+IQ>+T!r^G!!{-h;oVx0FZQ)|iWfzfa&nHv7?3l>#ni!% z6Z;hjhh^#P28;x*1~eMrAtC=R zm!{7n)TS>#1d7yCMADfW59deuZPTCh79M=0%amJt*~Q8blY-&1y=ATsrJ0A_kzveCe8*L0@yu2(*`xBnIfDrsrMG|LTt4B`DLXJ%@ur7}Jwye#bcXjWUe`*#3pNUVQ&Y|=;G8fXcCBpNS*UwN z_GpIY2KDzXO7QzsLE130g>p|r8y!Ib&Z)7e;lKfbtiFAVF#_FAH3cgfjkzn5BMJ|p zwuX91tuZ#s8CB<$!zTk8yX(~3lP7Qi=+?$LOG+zk-IJ!@azW~;Z|<%`-LiWcN@}xt z)eeo|wxio?_A4i%#bW~^_lrdB(j^2gbaEf(mZiWTbzblCT@Ob-s=YnaQG%t$?GgQ! z)P(6^g0n#CUsXZ8{GB^Aaak&JWO)%uYxyOj{|kvuMm1Rk;`!XiY92uZ&hLvr1?cTR zj;_0kUPDefrg$e`JH0O;gGq=kFlr@d1*a8 zEf~)zQpcUD^#+7!c9KMu`PF{PxG44WbZwEgyhS9_KjqWp_y{gx%dieRTA$uzIIDHF z7nmH%p@N*7WC`5q54L+!6Uz0JapiD$3hPTQ70iS{c*<*gcfCGkHe*{9ref6>S>=OL zy_)n#V$%Wco5R@}vrSDn>9$+*bkydS=pii5r6%-8?eI@O`>m267mLTJ(fK)S?ok1H zmlrZLZcw(I9i1qNH&f64(%^n^lqO{}d)IGH5dn@3YLm`R{tFJ-9pg`xd&g>9C2F^l zZ_+ePlo!8f=MPm(+wb;VzoZ+t$gc=4>9KVF%b04Kzc~s-DR74#t@{@%&27g{9#(NI zuT^Y!d5zW3QAQb((==X~2_JkpVH&9r7>)Wy0h_u>pC363^OBnOJTB(QDzzlQpV9xA zHG}VZ9{>JGFUzQG;3Z>fYR6^7V38 zL6vr{nsuJ!FU*xb6|J>EXE!#V(#sbMrdNaBU82d~&wv_U^UdV$2P`$ zoLJ<1s-EPuMJH2TM6Ti?V@U4MJ#u&F23qKK?DLt#Cat)PTQUMh*2?lO_em|5xth&u z7UtyLi4wQdej=Ygen7qUB}*!D(ehU|(Jb9C4~Z{Pi0U#e5%`I*9D%g^Sm*nTCU3qYCXTULxL>vD#Ee)K5SE_J`INZe_UL2Z2+S;Q`r~U^`Q>F zk9AKiuiAA#n$rC|WSXbeW(Z@Ib}Yn-*$N;Z|6Fp>Q~Az<36-$SpoqfQ;&D8`)0t4# z1(C)@(fC;*C2)A`zYnhTMa+fnbedv+nT2W|s;Qh;J2&rTML4U_HCJ{KF(AR3V58Q+ zp;#6f`q$PLX6vuFuiW8-=o6vTz(l8T|98Qg zl+~CcEMsK!Zyg=QNEA@;v&i*hy0e;)APeq$WC8J&Og?a8k1e4 z<@rZPy&tDvV{?ew$=7T8(-6#bWyc_^9GL}5wk)O-5BV^?GeJ^qm@dZ`vM_1&k6}Xj z4OBO<^W;mPHy%f<5~h9?F_3pNH;{i4cR|P*s?+(MxfSO5yTL%Ic!WJB(=;eN9ZJd#jzXRZ z^(ogG!3?T*1Vdl#{m~wfao(|#J7QXWi$7kA*@Xs#?s|Ue0P!_98^PoTd2x3MKM_O1Rj=;bEV*)f; zA8CN9DhYqK1eE$U{*e$J5uhao+)FoBG5T*m{f@I(*gM7q-2&rp!LJT6y|c0&Ai+O+ zV)*}Q2WHDdY~cHEZ0rtyi>}HBd`}&G;6LTKj(-4pwLOI$|M%Ux2S-7g=8d?qe}5@6 z^b`0pMc60z>W}R#`BMG_6rCm9xr=@IGpj12ClM*p2?iE^|NXy{~=Bw`}hon^exuGgy`G-HA@$2!-xEJa$|GA2p`YtJm ztaGewHOB0!z0SU?GGudm=d&%Q?$^Ry=sSV@&J+O!DbHGY4~2Oagd6wTwz#$|p^9yX$?0+Pevx9avcgJdCtl$-m z=Wk%A?TvZY4W9g=8D$hw8hX{wzJynlCGZLM#~CKCZH)2OOS09k`cJv->Rqj0xE;+j zr48VZD8K9PJ=zB18;Tn3_|!k5eX~6s zDJ$EPaNR(wFrTiv^I86fI-=h0M%J|0?URwfqdur?nn(FEU-#OfjN_A|@v3^c$E}ZL z6ev|41%%hg#r1)->o)(2M&Iq9wq|PZnmj7jX^R3i9gLKNs&8hnYWF)JBTZtB2a|MB z10oCqZjx(OXJp1<^Vu*3&u7-JFAy981fYwC;-D_+F0G^E<8E8VlORWOsSaWi!^l39 zv3b!{c*C*e)$D$RzT-Gds0alVodTGOu4_um#vhNi z>wj_>50kXdP`a#IP`u*TGUk2zq)bNT45O><$3+7+rO;PxE0~&_*U!fx!NK3P%xrAL z;0=5J=Y{i^a<^wAywk1PJmQE8cGPo?tAx0g%2Sc4n_GNas#f=F%CZc5b>d#A4%TX5 zvxu}^VTp!T=wKh}j&iG#Ld;|*&Y-Wqy4^jTX}QE6>lmv&VPDP{K6JJFHx_MD<`5R9 zVN1~vNr7x-fttRl)coKor6bkSJ>GhRAe6a*AgzT(Kx>HP~v_ z!=mKf&NITibl|#PFsquQUHkR3R++3a8PjjB*L!##XH1Z>qhj|gk%OTyV5@81Cb!2t za2I%w-Z_Uu@pepZ_<=e-wpGx9jWrN8DH@nX8io`w^v;ZRaNDsQsbUJf64k(zN!YK8 z3bkI@RotG@>de3TA1+feI_q*_dEQ^OGpKuWkkqb+31SvJECM;=+a^_OjS)A&vpsk0vfZ#(CgXUIKEn2ArBl6%=uDkP{<+4hAn;kKp2JbW7b7lV2Q7*k zjJU0@*T>P?M{NWO>${ETYPWiD;&Il%2DRLe>M|;KK%8lL^-q$z?f4zUS&VU4=HXZC z85gM5xK{q0F(*v!yLYi!m^NIkd^BDi8z0g2Jg(Gc&gYj6tvxTow?NN%zzVy|))QNdtt=zZSgbIfX z`Kw~l8^4B=zJw!~^>tK(^9Y?ob7;>GC+qReqXe#>%jT;$mH*=cP$9xZuJ^^&_GLjj z=LbRxlNRbRdhc@I2zS*YEF5WU3iryj*tM9dKXLE`OOE5JCh=rs*)egyvmWbEg@R{4 z&Ko?v5&pNpVuEqW$-`|MwjrVS*pB}nU2h%Lbo>90PZUKI^(`VwsW&Acpro{-f`lM7 zV6=2egEWZXtpZ96q(vlF^ypGuT^E+&=F9g)8y(+0K3eTl;9fbNIw|>r zJ5I%m>xVlVC-FS-r|%8LNpHF{tR@e#<=&2UDely%efRnAUW8=Z`1z@t$`=I4*AJ^5 z3$eCM_lGdk=(o7N^M{<$tN%(aD!LOD8I7#2R`w;v?9`w$2Hs4ycy<6kCMfJ=C`k+` z*`x07#qwyp?}*_Ysae5m>HCy7H@Aq3h-jyl>_|sXJ&ulXzTWNpyRISBFViA>3JW_g zDI(F%GRil8%giVHLwO8QG7`FfPAmP;ChGm$w>+fVKfQRwsYqn#icWxvwoqamR}-UK z((L4|EGrSdA-DL9P5JM4=O~o8v{r{v0bO!4=B&@WSB`@> ztSi>_2im4cfk8ia>o1LmqXV9M|1C`e>&FJm#K$>wozrh{)w9Y$7;L+1bcezl`YK8EkZS23WVx^sCrS?_|xZO-KJFk ziJab^o1N9NwI!!6OWK{eBQBl|j+K}(7ShVRV7>!8-DJq3W-Ta zUq4r3t;utKSZjBSmGIQ9J3zi5KVN8fr!AvH%{t|m(ZM*7hFFOu$Z*c;R+}b=Hkj+P zqT$p+iMY0(FV6_|7Sw-V_uDB7tNNMB0hsRGv{iYxoWHS45UJ5`YW@7r)F@>ytI`M0 z(GQq22C{fL6!M1ZX2h$0ets9{N== zbEjTM&$aOe=RZm5?rUxR`wzE;)-81aC95Bl<_VK_pZ+^&>t~QjrQ>@IjkUS_%%I(j z%++b>XaG-RciBga@qLX7BL#v+5){sBdxhGF_~H>XcnjILNosp*Yi*S`I4A3MdZMgm zY|;|ua0Y)CPH%3gqGKOO86#@@_>_aH1WfOmrniHNo=L)0?HwFcGwNq~c1NQm=al{H z3)X&mR86OzGrUr!?*;h?LDk2jQAFOOQ70&(SmqrvqLhQ&@*N-j-u)5JF|?V)CPGIESaC- z{CThkq}9!5q@0yO{?kmzpDP1GeRIC z*?c_Wyb{=4ovr4fz58S3&icW@^*lU0Z*LSXZ38)l&{ge`-$wsg4uQC95;)y>O{nbe z-+^X~jEpQC9C*k`nCP3Q{te6Yg=2}GbY#NV*F*Z?8rM!iBoq+OJ~_? zw@vD^x~+1-vc-b@jDzCHZI0+{wdv@_P3XLPY{C5AIA>YGat}b!^^ku zYacbO=8ViVnujtoxpbR{7`pMCRCQBF=y+I2Ey zZ>zus-|C@EvXQHtNOO;MBempM+0H!hKmBr9wY~Az%}ig6FRJShw??1vpfN`jT^OEI z|46Zti;@d8*eB`i8xGa(ko*Q%gC98J(OS}JP@%*WJz8U=*iKZ-lqydg3x|Am!QQU^ z+C=qYj7(CT4CC+SZD}~GW*fELNI}1f6|gS5?A=olboK{C62gPJ0#WNzoa|qgoP42e zBa0bZ+DHJUnsQMEbui)jJ*Lqb-;y7{UbtyaYJVlvR~l>d$WhUYdy8_TwdTSn-(^wtsqj?$fSmC97?=tNT ziV>;?EA5PidU*-Nb^oj;Zs*r+*Dg7LUL2#vB-yljFVxAcQ}Ofj@m$#hd{NQSvx)UP z;pss$_UsBl#`#mg*5a1A$nr$fu~+(Sm+on@&Q)J!clYXxs%t(Szj@$NQa30=NID?S zj0rC*OfMKp*NqOVI!95kD$lJ507@KmDrZ|KB*fY5)WMq*x{YQ7v77oUB?oi8XX$XV zA=IJB-gkqtSyz)J7c>y9SHp|YLsc<(SQg{kR|B7DsDo->*ZQ*F%WB&lbLQgY6fm;e zcVer|&)Tb#ziK({o6gqK=P8W>tx?kII4vWe<#U2pAtGyL(bD*JzCI$Nv(@T>kEmpG zI%bHs(W2d~*(IiE8eE zJDaj2l$~vwufFGDya)-Y4u`L2~X$( z9ILJS3lsy(7I(z|M3+eXO!esQOXy0$`gYi))y_I$jOsOx9|vV67PVzL65Z&JVX#ot zsZ;O{lGjS&Yw?wNttfdP!d)_1AlOMcN&6hz7 zmBO0lbEkAp((!fh;Y~L1`|D(b?ZpX0H`E<|F)Io8NWRi{-6V0TG-z;e2G9Zq`(mE{ z6?5}sZS>UTZ{{uVNE?`9%cb`%+yYHgrx}3yTY}Q5G&ZF&$lc^kiMw-uSZ39S@YMy& z9?jgWdUgx=LQ1BW{1FA$4oJ2`=apQD^9WhdX|D5C(OZ>h-mCQ&PNdWn%v-7Uut_7o zhQ{MDCK&NHA)s#|U2y#CYn~_+%Baoib>!5|j1GaguA6afz?M{W>W`{k+_eCNB$lY@99x%tS=;RFsOQlHDLByIE^ z_ecTaT@idDWpgC}^^we{kc8h@bBkh=x#1W&eYZHL_uT042)4YAZ=OmqXxplb#JUHf zDr}kJrYr7LM#oH5xOW&mDmQqFg&~}O1sGk`??*3}2ROrLFkUY38N24>1k@&BOi|$w zI=viN&XL03r+Ks@?w0(2=@ycLS@Pcin^$M+ZE+#H>+pi zwP9&V4MT?0yFo_(F_-Y~?w9D$nlWwle+QE@au)tx=uxgH&^S+Gi$9P(pTtw=%pN(u zGnTHpaDugoUH{Ds^|pt`>~AV!+1cmje?GPS{J`YRIWI3R+xm;)OVTpZ@!-prPTw~M z>P1PA7k3(ofCcHEy-a45fXb9#J!TV+g;tl_V61P<7(d1YJwLN~2>cZW=prCx-1}Ee zpPn{uLr;3g2)rPpOzHF~+j*Ju0W%mM4bf&v$9!m1)U(WVqhYe@@WF0`cYqXw<3D9tzw-e6#$^_zHjjSEY=kdU$`Xkzxo7r**oR}P5G z!0;_oL)Y2ho=z3+g9zO2;Jj}i^@hYEts>}$O>|xaB4=z zC42K*es+Q?)oiK!@8a_=AI0&bj4$N3X_ZY*9lW&n`DHB43n{+yXHg5)tlr}RWM^zY zMGt0)U2Nt1*hCdBL}E+E}0gbGZUfe?F{z0ET(ZnpDpI&~WJ)VN82B z@L-Qa?v3d}P9=<{H(*~OOa+MwS9eGYz7X3ndB_lX+f7Pbz1&| z;X-bYN z@la2qEA^svHRsc(d3~CJ_4MTwHw~14i5gWhzm(8V8DeF%CiszYW0q2LH3wtgtG3(z zvrVWI1mI=DxfaQ8M2aX6`!=$f(P`l?{Wbt5Z&2b*md(Spgm@Qm@rN8=czT*m{KQ$& zx)}2!CW@U^x?e_?slWUU*N=|jCTA=T4Z(!Z+&ag=+Tjfcqe2RwCKy9*F)5nAG(Y_E zqqEA%hGU9HzPZb}#?fF@X7WkD=9ibMCl{I*pBu7-LN?Z;kVI zMzUpo>z`5$evTd9m=JDZPsKUk^Z=qhPnnPJtU{e}-*_Cwur z?`kgI^4c*vP%;dvKn%@byntCNSIM!)H&A3T7%;Q}P@in-a_el0{?cN5B+Kny;HbO5;4D25B zrI(}E3)!z-OB9nF$1p(>>(9qWl-=(&Vp&ND5>hC0z=7BYUqeaFnU6XIua>qhFRG(702K& z2|)LqVW(ldez>t`IG>%d3x>WU^(XYg2kArA_M!B_VGZRq44(FM##>SuJpw6Rmr+6Q zRv#yu*vcy4Mp^XFNOiOfIU-wY;t5tihce-5s?Q>=|65vB}+4~$bB?Q>ebI-K( zJ?DtsazZ5bV9uXJc;_3gyJFU2>F+N(nr*{s*D)^esnn!0*+~XPqn=fuqQ&=+fx2T; z`_hsW97g?$3Q*6adEvcYsA~r^k;^&9oA(N{9{BMWZYEDmety&9_ozwRH~DvYJr(eo z?Riv`^BPeTv+N_kdT@}RD*u8))b7W_V5e`XfMP{irn__cYO$aR&?it+`CanIk2j&a zP=DG?*X(+dUOf(W|5T{^1qd@Z`!Z7U^zTj(>mdTUXljflAjU-`1P8z*k?Wzxwa08&sLAXzl{l7-M7V4W$bJ)%u=j zYIaZqokxlvUEAt?4V)L`*3}v*rkbzYP9T8CCHw6p_#gE{a>E$L!1k(sGoX&k__x5~ zv2nEOBn;z-3OBN7EU}3;nPu_)Gd?QZ#N}g%K9ap6!kL-f+H~*9!QyX4_cAqvJB*D8 zW`tcBzLK@QRBxs!w;oT}-=jKCRC)b@dbSBv`M`CQ8SeOb*{8C(rQd*hQJ<|>2PY&h z?iww4%x=BB+)H8sQ4^)Sj)QVqVwA~<%*hJkJ*a; z<#Jgrp$yI!v=o%?F*ZA~6GD0{eqEAW&dP9_KGJhOxv6kMTt(U<`@ee&fioR9SFSUi zki>LI4B>CL%kd$`<_Tne9;8elt!z(P+YSl;owRoB_+=x z6CWHya7W{K|GkPG*jM68uL1x3F=GtP-P=UDP=SRmqgnr3bxIkJYHi2Q!Sn(-NQBMu ze-U6vFUMPd$bNIf7lOzO7_*lRwpsx5K201g_{+&{GAX3&LRG>Ng>`=F5Adh35vI@! zigLZ%-VfTPm<>6XPe|Ch5c~CAZ^g9%WwUdu8yvshS5oG$@gA%|$Z-qmiRg=YxHH`| ztlc;VopJRAHopial40qCr{D`<6*Sxa<~L<-DF8;BkOM+dp6S}k8 z1%kq;q?Qg;3o2AxkpZQtX($O;L zc#QoK#@qogZjZVG&s&|wQRpmqreXCdcMCl8Z^MUy&06>idLPMbUUIm_8}lw#@-B@^ z6#whlfk4E}+|Ez>^H#6T)wTU#u8aKrgr_GUov98voGwM@GWDy1twl>Hao}s%sr5F^ zAZ_5G`t`y%NnI({O1+fbrvnw_xGTu;L2YPEJ?a&7y&J(S9U(`Uf9jjr(ycs9dB`Ab zR1{&;GxE4$^k;qB=8nol>?x~((^omJgZz2+&Q#b%I~w+`=N z{{4fUg99p(H2BXyuL6ieiFIq-Pt?`zz+U|U%YpZkRQ3GMEAi$|`z1D|;R_X|e^nHk zj;%os^;5{G;jN#0^BsNVO8#rW&*gNAeSVfzcQraH3b_5Ag4M*vtMja53j&|uVe4ya ztye^OcXq#@4>s_)BkbFz#vk#Ih2rE2y}4t`7!Aw8#37?5>c~P`*KoPeu-)LWr{$jY z6W1pf=I3t(F`p>PhSz6hWr;KEz>17GP7Iw1RRe%8SC3=R8N0(b*x5E+?p;@$R2+7+ zT_~dXn%Nq0}cB0j1DczgoTd^4V?)VSfH@J z`sR^uX5qB?OLa+YNW04P;BklnA3%7un*>8pWd=eRNW$Ff`uod9fU_U~n z?X(yUpBH%41Tjcvr8yPq@Kn#J?o^?!%nk$VPPd`*-+>|7qQ|@n>-w<=tQgXu`cxc} zVDq{G2fKIbhGXrrq{Fg|BRlY|R0@7_Ry#fk#B-@5IX$8~Zm_rVaG0m>bX@LTz$TQ1 zocl)Xx6D4~HoM*5Lux_QBBKhtqgJq&qJ5vZ9Ake~Zt-59Re9sU?ty$_nmgH`eFHF) z=7jnJX1dqx%)hJfFkeE_+_cRIaFwSPmiMWe9}Z<#mMr*54Zd`YEt}R8YiXe?ojWSu z@HP1he&Lug3yt#WV8q^`t<&p}d3;jw(_Gi6$IvQ$24!JiK<}J;R$lpe*9&_I1&1&I z1p4-=;HT{CPt&STxnjzCaHDd{6UQqELN@_G;;8 zTF>haO~OYXg9!p%*px8Pm!%A=OvnLqDs-v?$9Ew4K=wd*K7_+}v2by9DNbD=ao{18 zC3tW6v(OE@ef9N2g*+tuLLB*or5)qvCChNET-ux#=j)*AWq>A_@1oj zaw(Vi0|z!!i#O41Q^;ygK4m35AO@>5MXvVZ%c-4-7mi4Ux0kO&pm%oGF>qsLd*NKh zTxIy`ib&3f$z+wR#fRDyzin&G^oDoN+W-9OTVBb?;?79YBmi6ScT`Cw(jtC}wSg$l zfhUr)p!zLdO0#$6-&g>jx>feT$>Z0aj&{s$7U>i>w@Qi%eqKll414F%UHLdW>~JB4 z#igY*cj26546zb9 zZO?Nr|LN&ldWe$;))*v&DUbV@YtypN^cQ@-QEu=aIXInhFGrj2kK7FiFb0j$d#efS zLe?vW?5x)kmL8`g*lBu9?g=a&F=t1O295(i!cb!TFFAI0scam;ctKl{UQnKqyX#!A z4k8|?oqyDswl)=KVx5VL-#|)yx3!n2)5AK4*9}aorbh`E6}qg{=oeAk$YOGEzS**XWWDNmKBnhzU#E$a1+@wOEo&6 zqi~F8&Wewn-D3ry>xlt(5NdsOa8UQxZg1}gKsfRklWHjFNF?y8!7_K6wJlDVxK*t8 z&E$W!LCdL*v6DWSB(MOcz3j#vt1>Qnnni<)tJSLbu*9R;xrVn47@5T*-{q%pOW)=JJ%2C@zymE zMq#VJx25WD$S&=r=t~@stXpAP7%qCyKfg>ZYT@{!4q8X{yX;`!sB(<=R-ie+Zw>+=GM9V)Rvb+ho-1~kiW!`7B)%xgtwyl(Cpye`Q+SG%-l z_^bBI53;JIV<3_KtGF6=YwMj`hFu*>SYRhZ;2Z!AB1g|btp<_hJ>*vu)&;RcJo ze!T5?^O_MQ6}FlXq`z?YV8;^bBWV7QL=|*4QwB11TH;q_YuB=cag&pu$JrkMLc_6kz;C${7zyM|f&1M5M zdeUW)PV%{w{AvwQ)VBs)mCU$@Tv zK9Ml9c%~*k*zw;p2qE3{{J*8kY9<9}XlC5~43-W$RX_n%3YPiiU*5A3xheDkBrMRUdm2z{ru3{+H;(uiitJ4|Zwf4TiW;~)RUGXX zMmfVB92sOJ?h-oJgLXhA@6yVrPg!;nI8c{pPSJ%O2(ruic@V(M<%s$OzxL@8zpV|e zY>%rZpz+e5tEw3O$23SzO?9%%Z2qVSaf<9z51@c_%v4@WwkQov)#knky}($waZ3!P z6GLz&#RIMcDh6-q5T&!D!$RaAp!Zzi-3= z0^=qWP-8Y#AlpGAV;#!EswbnDR`#Hftu*+#4eQSpRbt?KdA%ZjgXG<_e-4!MFgn11 zE0bnYkz&iYv?(nijhuxJJm0+>CzfW zt)Qn3Wj~z3p zfgAaE#L4|)AF@TP$$Ao*=&@K^M1rc}>r}W;-#9HucY-@~_?7jvg!fdDJ^DGT{f9z1xUI#9aMbk)+T>){6LtK$1ytiyg6WVMbtMaCpf8}s|}Ud@8VwyLbu z5l&ZaYBY$ZW8QdE_nRs&Pst=3T1&6q6+(Oees-WkH2kpVW`*na1Rl36#RiA1XhBb% zW9wzETc!=%>@dSOo>xF0KXuN|-27g)_H62f3SE8>2vSyi+fuz2w+d#UWEid`_DeMD zX8X;voFmsiV3k6}i<=)4_%hmBx0?_YllBImvf9@&eKx-N(4mFsG{=Hz4fH1GwJn2z zUE9QxSzOfsb>7*tW@K}7ZrW$?W(ei=N<7W|o>mqPe zDtykL)_=(wqj%{M{mXk(Q&Y|nMK=694Bz~gSzpC`yQ#B(^+fUgr^Njs8DBCy=Z*GK z{DyAj?fxx-9(@%2jx*P|bFx59s=yZ$yAR_UFZ`C|w$~7vW)o|Bab%;U^0cB=lcj*p zv!Sd>9A7ksZt6PQ&OdV~izdBlIPjU6Z`$!)6IY^-)H6SB{Vj4O3GL@GFt zE!&HNO-!H^g$mSpvTnYO&p{w@$j>+b#5d80zXajn#Ut~&cbyhSB)Xfg*#EVGz5nTY z!pt&%S47x!F@wHxigU;aFC*&^d5gfct|}Hhsm&2I*OLz|g;h4oRf< zAa|9Q>84Y7kp5{t?%e`j8VEJ`mp9K6`BikJR1h`IDDKKPNHa&uRgdHx)d5|V*qbV` zh@NgKDKZb#(#rWJo}zkh?|6zGoWB z0B3j*e*dQ9oO5PWk_=fxw10@Brv7{7l6+7hynqfOR58nbxx0?KF4vnDm$OUw-Hjt^ z?kuM5Ro{KW$PE&3-{eN~s-UZhuKH?};nkmU1qI6bymZ^0KX7&39>VU@W(1x65{|S#n~ceiW|w5%jzw;n(Sy zPJA77lhF#WiNY{{Hso}ie<-B2bW_^!sZHm|x8m8QW9EFR!}}ldtM{7Uyd3p-=hzc$ z$S&vpI8)zIycmB)N+tBPRaC)JH3d!MXcfD4_6-%urH3&sQL;~N_b)IOLJ8zoC<2wT z59nIDw=M(M#(H`1whupCb$xPJ%2&9};414)I#H4PpBf@`oKufaF~RKhT*^f(xKeWX z&!xwxq!r`&KWNzplzMf9~e9Fj*>q|u;QOK3-Nw!AD zQEmz~RWgNYT;SRb*{v!5y~}-7N4tIt63tZ*7v8h=%@$;>)Gb ztR4n7oew>8Z@W^wKvnpts3<<*hUR}aqzh6$~d z3pZ=)$9n{WHkr0;5qUkUFZtIw8D%QP5=8B5n@Ys#J1cQ@aXnA#ZDlkMF&v11(cRq# z+ir*$swv8U+tYLT3+Pv+#Y9j0Nb8Gg_GhstOpn$H+xSt$Zb+Jkw3oxvmQx!1Dz(KU zLQ+?KElE$VFL5uWO<%mKPh@O30gX8wpY)NpxGX4Gr90Q1z+Y&pq!bHhI$|1!sHxpu zy;luyz@MD!@Zqa=d#9v2#UGtGeLU+=fUJK(QBe_M*~dL={W=|&&Usf#W+9x1Ke!eh zS>)cWBLBhoX5ye2V4jk3Iyt@EoWi^X*XiQh1zJgPo;S_PEr7rA(bKd=(C2V~28ai@ zw4rIK1|&rZ3SpaDRf_R9>HktuD(gVPJpk%rbQZ7+BeZKi)b=EQw&)=Vr7bgnm^^Q`hz$`-?~rc-6vWxUm2Yq0g@ z)QOK)RGBH65*(4cVn#EP3Cl|y%4 z8>AIISl>(?utVfApzvaC{zid^PHl*RZ}Q28I2%+-8j=Qj-H=Zt2JPX_qsvvm^~5?d zCPwQk$3QjGJOHY8Th3nAoCF zu7VE9=UP~(PU=4^1cAgher9VcD{||Lqt>+RuOiIZm6Ftw90Jm?xz(Q!uHVKzM=a7i zZrLd9X7e<5I#vJDqZPu?0~5d_pK+_8#ooZ1i~1{gmM*qsySwSBVDlX8b=~aMCGrvV zPoHW^pkNmTs&ka5aK)dmKh-b$RF}`eBq9Yw1r2B_;bZInKP#R=L(;|cyU=j0AGIeV zPKw`^|NNlkJs#yA_88%T*>I_r zekApWsvb~wixK)Rb)N>Z8r{1QD3n^I@nWiD3+=)S#apL~c_RiSkpbjGaU`KM|{ zirc}}!OnFtmFA$79jp8X(*$nPD+0OHdy*dQd}qgb9dSU)5OZt0N}3niS;>Zuk=jd4 z2B<|R(;+7!;-BpGx27r+BQ+69%3|{J`M?$=5KOsM{@mdcnKZnL!yse&D_%N5O-v@}!wLxm zUsxgQ@I8x3F8jZ(loczjo;}Kdf7~trx08)Vv&^gv&%b7BiagcO%`XN`x~(gpqQ_sL ziv3I=$TuN$=Fk_(dI%_~7SJCHI$@AFk=4MG^k&ZN31Q$0t!R}#-F_dngHyJU#!O`q6KJPN;lG-?4bsT-Ya8;j_FXpB@cBa`gTETm0~7x@%wnIAWF zWV#~Ycod!wfqIES5@6>;qwdh7W2m-0nv3g>>bpDB;z#CE=_L!EIU5=kLnXieYvWKb zglrnd1Mh|mi02jFJp3Bs`OoL)#T4EnZj+Fv^1NfqTt`tGg8*i(BgIo7x9UKWs1EHB zkoFzrB^1JV~rz@!AR9JfX|{-+Q{ub~=9Ha&`l_Nsi>7H&`zQLFvi zcVjTO0AEX;Pw^ABpIbE^!b+FnDtWpjY0gvPH6tsz=_`SWboMN;8R{&{hmu{a3A2{TX^v%! z(9W|wth8{^ux=%rlPOX8_SWhpMI}*YKZiH%NHPb@FgTa+2yzQkbKym$o%oBK6>32B z^NQl^4`n06-b>gkt3s!`zV(@0+ke_|Y`(Logf{=o)#|61?nj_G{C__N{2e@y1SphF zwq#fIvJEx;_^4MSoJ{+UoNo#J~w9LQ3gvJ`qpYfaQL&{gs}H+yl7Lxc9CsopS=vMg zFQ+ZxFc}+#T(hCX0L_8z+O7SKkJGhvzbQ+p(!b*}wiLLRxX8Rg(!1-zd#VFc|1Pp& z#WvCJSk%UwAyo-|1DVwqGE>ZISzcmBL+%E`LUM`UOlv%7dqjIQBkC9YCawh*fB$8+ z(V>ts6!7mG%zX{KnHmNJa~&p=a76AiD%^`c?D&{5$Y3GX7o zb-xtav^2VVykQeb$6T`T9bNggy$K>Oo-3E^`lN(^iX+=Z8=?dK61Vs27hbI_ycoF_ zV1-{b^V^o`miawmwug-#KZwA)mG%e$F&!hK)>(&;!6q3{DivtdiS#Chq?OEKL)7iJ zrG5+i)+L$KwKde(JMQ*KcYEV(ZNsKtNPg18uv{gv7Y+}3qtDw@Y$bMA0n{ZuSEiJ1z3Rg`0tbU#BfQ(mb zC#?Wmkv}?$PXo!qA&qe2;bb(Z+|MQnylbfE2 z32oH5^Bo3R4KUxOOA#>+*yMIn@eeL7AD_gCp0fbBzD_rt2GTW0Kk8EOnEqs}sZm)$ zpPH#RoMZQE$tZP0i>U>r8e6JEZ1Wu*+4sq$8t`3qtQDnxH<@oA%0}itBAb9X;IO5D zg6F#%uRX^id#S%QgLGrpy7t$eZ(e1p6Qx2lemqpzCkF?7#UIe7w2P@fgw=BGWlBb_ z`v8^YeBgWAC7uu!tUH&6j@JAVecKbRLiZy)d7HuYWXA&uo%1!d?aFyo* zxl0^*H&RhvYipaySY6X|n1oy-dx~?;h-rP)tx_7F6;n~NJ@2$>zFtGg!m9rba++-2 zw#ia8S0hnlbF+RUF58smUv^;dsZ1awtYHqW5QN(6(wyK&y+x94FvS^QRSkvSa;c0M zYq(w1q%G6p$+}Gk=R%}<#Kx?Izw8&&;(NjrkqHon3;5$^mXXu7#ha<)54~W((#?9T zbp=QMa490R%mh@}t)*S3GOrD%H%f1<74Fd5IZGS$`U3nTr@Nf-Z*OT?XEEZMsOAL_`y(Qrl0}t@f7L&iXg_Xu;q2g6kZ9Q&<~+Rg=F^k6ppfAotWMJrr)bCNbtx zOA(S(Y&ETU8LERHm`31j18ro zf71&ALQCL02!2v=zZhK2WY-j%jKsYyPI@dk{sL}VMNwU-vB5Z*OYc3xvU*F<>!;A> zQwb$5c#n=QRU;QsQ2`IzGf~W=JXIs>0=2tqPMI@`)Gd=pUo9%UeBY*VDr1*qR^1?Q zAQ{tag63z8jD!+ve>bDnqp5pHRm&Eyt!XWgUzIJSCzPTS%jHhsd!kKpHw5PQ-8b-m z-t-S5U>JmMK0h6XzA|!UGu7z=5{lx>Zvqb{cHmL|wbQ8}=T`s9Bh?=UD#@)<1;!Gh zdMc?o>;AMBf$9k3K06xtt-aP- zGx0|EY&~LvzGD<}`-kta%j}@J3Y;W3$*F+13E*_!S$g?+A)qLbAuK?rXzg*8)*gAA zUi_{YIwt0`du3!qPo#rq4H_nxa0l9rYcxi1oNyT(E+8zvEFOt;-$Yl@`%00m!|u6N zA|0?fiu$Hl*b|k?&p=xpzGqa1)*&?~N3#X%YPnndragc~At9tsB*;c_nh|b@6{*Xn zpZP&2nTx*hajgDD-apn54ba1ZrE=YsMc}fRyX#}+==6Tk9=3tKuof{1m{vB6z%mqn zqFCaCR;|GhEX#=}zDOxN|8a^$KAx25+)L7T>QCrmjqe!}h;lZ+bV7+BMLI*PqLls2 z5TSxP#+I1UzFJy%(OR9~dt6obts=U0Oswhw=5h(R%8u z{95mn=XE4skWH+GfuV@{rp;I29ZYE~vKaO;Ni~9fS2Bn5Xa&q)GyVDz)!4PoP6|?n zcOt?G!#%ZhK1!^1B z^sRsf@45GmFP1}!M_vZa=NoYgGrfBRHngbkj-Df;%HJGMO?lw9T z8UN*v5C{~RaD37@Q&~o6EVJmlj%utfXO<-ZD1lI7YH0!Z0JVQ{X+iI4mxD8Ceaj5v zYmpYcq(=V-vv5*UVH2QxKw4F5(pKSY%$i%A)kYZT3Z=9)wdwyG3!oLq>U%g^h1f9k z)Me#&?N;vepC1$auc`odxOV)TOD%6ctABAe!t?3>3>YIZ7;SlNvscHrMIfOLfIt#E z_~;)@By&=qZPt7A*24!mC=%!Gs{(NBiPg}p_+p$~tKLyB`FbgmdYN&+CNZt|Dn zP@I}+KvcxZ7O`cgY|b;CGsS)+M>Dj{q90&(A}s9ke5`|GDl$v(9uho9!#)|%P0gr=snKQI5z?>&W3&b7$O5GmRzia@Irq~nQ#02Koug~q- z#h=xca!T~~Z!Q2|2eSdtD(z|Y)WY@muNrA)nx3ipH zRt-8eamYuxq0h8<-zRu}+J2Q@`Rv}1afu#C@6|OkE9e*No19dU+nrZ&o`(f5uFnN< zFKavgvAYhu4UmcrEE6Q-uA7p=*7qAGK8+eoEy_%fVp75Ne<)E{jDV}9RaI5TFY)K) z=Bm}o(FQ8}dri+;wD|}Hts{mu9)G^JYkn_R^O6^(Bb)U(=-KefZ~j*p3p*dB7?-qK zpku2znY576Ck5<0_xtd&GuU|Q!MY)rKVu*Uv2~lcmePgd^>%AcZns;&{nXrkh0`*s zrY4pPmz4P*xz+JIa=#mG*VevIsWN5-^x{?mi$@-hc{>dzdj+zvUL9Iq{urSVl?Qv$ zeU)4*=IUfj+-Z+f)v+hTS=S~X_+zcRs&YJfcu%BXU6a_Bt?e&Mlk+pWO1$Zm9)yPf zio)OaSSaZl>GmUA0&`Lj`z-x^o4Ie%j2Zuc(ZwE|gx}U?Wpk-}eqSva*3v27$u^++ zj$~sA^R2U?q*Kxl$WGw?*so-s?KYK&9Ot5aR@#`2Zp^UyK z!gVm8dJ^yY;`yDoL8PG|ZGDB{FxBik3~4OAZH&rZGi#qBUMq`BNPkwX{2UWw0nkan zU7n;2&FcBo+$-4nRS03J>2kN!()b81uB7?V^6MrHd@d9t>-fMGE z=`Ue-ZUu4l5dYTzPFxoPC!C53Vn)J0xl6rDS~YBRy6;tTuLACy*hoE4J$qH0^&y&m zE5EW})n!J3yHbBvl(Ukj6Wrrqy%H0Nt@<@Xp3NU3BE2a3e36mh+&q8${1hvOOA_S- zB3>_ByYHugmewVH6~Fklhk$VqqyTc4zxbTAVhAFJOeJpnP5Yl(Ul&%$fAcXQ+j&f2wbH_@Cjj&cH>J9mVLA$a4rSVA^nrRa;%OW# zdX>ibpLUP1ceOCuaSSxv_DEn$*6Ir}BR+Jro(zSqGY!If>~M3YO!S5rlQERK#9*^? zt+co+IO{n^SS`{>UoQAv4HZ_BqhC(=O=Bn^w>f+o-ZG#Oq-;RrvCt>8JKjkxp{)?O zG470)*wiLucoz#EhF{xAE&)zw{3H9W_Kg&+x(@?bNvEL%%r4mVmUW+uV5Q^7ZFNyn z;l&~%Z@)cWQM&(OXr_x&>P)s-|2-`hFjE>4(d;=lm>1D~N!+vaFJWHR)TcbGH{;I0 zm)dV8p1*X8Nv|cfZawOngLCkE3Fk$9p~N8;%k^)}rWkkbzP%PreneMprHAFh{C;(> zKl+k@bFG14&eCyN6V&$pfthHGoWY)2_H4eQqJ7DbeLPs#Y%6zZwwg#leGf&h$YCLL>q%IFv~Uz+)nXaa@j#YAMvX68)9)DCuGSi*4%dqqOez450U7zo`#Bu z*ymMP>9VPczo__Ut?@jy;44|8wfKLK4-)^*V%puGkq}W@+yteDB+~rQ8u&-E#*( zh+5lA{*YW&cD^UIk|N2i;XOsx+kU&%W;Hs;c{S&1ukBPtr;mPea1R4jY06xr@|jH} zk*ua0vev6H96`%hxpA}ltiHVA?Kewfsix-_XH=kjQhy~hix_FpLoh2&2_W3C-)Sjtp_^ayd^8n{I7tJ;70?4-7>%+O6=?_COXw#&so zY;S!}Zfla)QtsE9GOpy84y=6Flmy*>8xcpHbJ-)A?oK4;<8lNODRUIbo8DL{a_xQ{ zFT9In6$Mw*0f+=8ztUI^^;fpg?C{nYgA8jps*7gGe`!RLQc1GO#xQ#=ls7LK$ zia2?p8x^K41M7`^ucQSwSCt1Qb+M zq=V>{A|Qeyy;-S(w9uQ)(}IeFumNH#Qb5^4di+@- z9%l~JqDULJnVY!*yBZmb3dn-HC<|WiH&07ZTh*nRqE#rP0w9VEIK6M2iW?QfUCWEH zcNf-Z8ceaxNyM=%EIe2BV4F_sxs8G4DsCjoILs}|Ixv6xRp!P>X@@gbLCj4`;bx^a zQ{ZydXbD&v@m(R%QrqZSJ~zL_^7r+EV(B+-WilS-@O$a-{{&9qb3a*;#u4N(>&7aJ zmnD&E>TkID3Nr%9J@CNALORmU_gFX|C5VL3f~e97nX(}lfgN+_jnxIP{#Q>+0K!x(G=m;ao>C6$!mGCTzm?jHhRxG z_?r3eXuQ1U(h`EagUj@diOPa6%1~tfp+_ERxPSIuwcG+d+y-k;&UKsQ6Ta-s$#su%M7b%1;%CAnsYMRbM z=oGI_77ZTlUjxG(QsN<2Xzj?_H1=J-4l+R5Eziyb0t zN%&^a=DVitRwSXB!a7ps>DwP3&&DeV*zJTF&2*(F_gqr0Bz22M-r-YJ zDWJpf8d_?f_hbD-JcB?rH!I&qhiHyB(v!z9lOmakMj}x_sI(UPsAt_I?(~{!ks;ml z!=-v0+!mb``^gBEGDx?l2|M6WgOOs?CMiXO(@sDl)%x&D_A+raAGV)4i7P6Z*qR?L zeS)C0NT99BZiqHDhJ=oLosQ*9*@u{tJG!bP5YtZ)_7AevaQ_}h?~UXN+MvD>iVBw@ zxbWsRU^EMG0oJ3Qb1NAeTRy3<=4scpIck5sU6)y>8Q3&)cAV;5%@EyaE^{0#uK7^i zpjO~ihK7Ha4&9+Faw7X7^&k^a5^-Se9Z)*Bqbob^lfKqKFh;CmoTr8=Zs5KtN^ptj zoXhQ5D$I`oq^R+Az`W%K^oQEe<$eZUAKirv&b$IRK@6Wl35MDdw%oCOg~wt30QKF|ab47E-xk%&ZCq|8 zYbn121wx{V3z<-Nnfg8658R4jJ;}bZ3WIMP3C=P$*&ADpdj`Q6(uBC?;kVZ+xZbiP z(WcA4-^ULZk7Lb(%Ddm7jYnV!y*L4G9zL+irF@`?&)h2D;N7d&+6sQ_mC?L>1_(<- zRGeruYcMPzx&@Qbn?zmG2cl8q)jAQ}L-d+rr~O}oE}|lEe#&AvbYXmQpaX9=f(m_+R?4zPnA9yWaBbzZvtZFmcA_xNYR*Shg5)B4;h5xERGmi!@Jj z-kRSTX&5FXT9kkhiO!4L1q{(Fgn`1dr%pu`8bnL0nCllBVfUTyvm6l&L$-UJu;>!? zQ5j_av|Ya6%GY;k%zkrK>4#;b)vjB+r$)-c;$=L|as{p}eciZRZoJt8H$aGHVt^v2 z4hUdK3EMvknvQl}13{%K+=Cz^f!mXIa3ncd%5{IiGV|s17=y>I4tW@l|H)Q>{O(xL ztS5iUQlZuo7k5<2k6*?vv(>Z}y~Bv;KGp;@vkKBpJOS`Y016|nxfS~yT+1yqLKq2h z$qUahj~8J@i;UmYi66)ISDV*{TDQr~`EY6K;xt;E82lXphINIstCxs5=ZiUS zi7hG*tqnJJ!j9Wv2RU3@+Q6M0k;Pg!M2qACv@Sd8F3(0>268`la%XC83`YW4s#?oL z?esV~{ggazIr#!)SXecsEA!|f-%y~|pnLse{V$UTAH<5&gB#K}-sbiyq#)eNaHCfQ zT65h(hUBFL(pN1j@KJXrnYkzdBi|QNFHm&%ApAi#EqH#?zWUCF>OR>wnmnjVkw`b= z{e8ns&v}4>&~1LnkXy{yZ@33lxAJCZq%Ju9MzTihW6cTqTDq!2JQcNt;<1 z#|ae~i)zIi9o(_LeMU6Gt*AAkD4_^oD&htv^Ib%BzO%NM0a*@|`Cr7h3es}LjSu;7 z&nL;T(R^G6xbuF)hpiqYr3!_B!-Zi{FDLkM&w!XEyL`;#;*mSJdUdQGEB!riB{wUf zXfD^)OxZ@ec8@pH2WA;wpALb%KUO(NA=LH>V&*PfXNc3uH)l!9+D@iU~~uui8^}ldlPIAO5;q( zSOsE~ZaU{+_M~EtSLob{Fp^>nA(sD03S36jp)}Z3>~YFPhfp#t&!tsp%@D zVJ|noi~6uZ1;pA~!ga?dO`jOd$EksiXGXM0bHi=ds^%&u=Ef+sY+{0Ajixu5^qiQ% zsq|f4~>%)e-9*zXg;l7zwnJG)Rc(jDNNMtXAtT!1F@OF#o3iW*pG* z1gu&#v6GuetjPGSe~7aYhEJt%A%o`!kVpWF%Oi*u*{g1Yew&aF*w9_7)uM7@eXAvL zcA`d19eVofLSp5wlFL7<-|goK(?zi?nknI!W(I@s5H2<>`iOR zOp1y99gi!;CPPxl60GSXV*`y5-Tit4l;I`FC%DTAC}Dy`nG{<8<1m3mcwV4YOe!)J z5o5aR@I@on9Beh57Fp(m40sw>^xi0U*);3AU|grqX1Us?^^Lag&cl|I$UX>wTDgdG z4h}jwYZrwrYP?s|d0d>RlP@Ria!p+bR#%hm03UmkDI@h|i&P9|%py=QwU)88A#;TB zPtm01kvqO63jVG5)PUil@wNDP)YCfOmq3q|T7PPU$;Vr5jO9%B4GC$Z#AsWyRNewo=^Dkxm(?^(8HQX79Ek0Lc#c}soujkP46-y8Hnh6M|$qXYd z3y=rhcP5z4g6ny4KcW+i$fGMwtCcT2cS7_1Hx=R4P?bqW*j@`?{U4zuQ_6QYuLs08?NERt2kN!gX^{-3=3*kCrU4z~rZR~#rX2pWcDzf`1eTfS(*wk7 zxh@JDTJOI`#0g|5WC)b4L0hcE5q6mDm_-L$$#z>5WHFOF@+2Mch*mH-?A<64~wGzPuJ_n;4~SEw|jUx3L<`^$UsXyV8sjJ#iH$Oe&e zsPLbDQ)5oMWeFldwUzxH=!Xj*bGV&}vc!?U3c`ebklU(u{rJCo6VBHBec!EV&k2@t z2ne`pN`n0ESyhNYHQ8b>_A0{|!tW0R0PSeK-xmMY&EN%c{}Z$$IxOLsaYi}+ zvOZIV{cRde1s>2tqa%P}7dd{19_I?SsXiRE&Q5BYb(CN5Ur%=00dQ(wyf7mh_S{@w z#o(DgRgI;zoR_5<=_`$>bgG5GK7DPVotnt7{wcVji1b6xhGv<^D~Ge1Ow#Rdc3m@R z^d209Ws*Xq*JsgNg(k-!xjjJfL#t-7fTmI5dugRmwKh%!(FTzj)rAo`U4xks40YL@o)%&*#O70|ugw$6;$qGOU&MXxWz}hN&)0!2{ zr&?qwgH*KM@fi>8-#G-vXx+zO#xK7y%+3t42WIo-;9=fxoc=7sd!%OKTcnf^u^qa)w}!;+%N8 ze7~8gijb?FS7Q6~ba-~MI3{vdM`hgX{T{SO^BaEpk!#aHTG(z5#Vj(bKfKbP-tSRwowZ<9YncBq6Su)C?AP_yx&Q?< zc)LyRCx*D{KK;)zHcKwp++kH6x0f#MnQuM<^MlwuKhvy_w0p)1u#xJvKkqdV+_jx9 zlh@Q$K9$7Ir1@HoDi%QkRPqCr0?1!gKF9UA%mYIf4DwR0AfgF8Hsr($2Nb(HLOW5< zO9sv=9PLJ`>aN>DA$vK{N74vQA!_{X|GfK0k&&@S_n4iND`4$=tW;)@Dd%WMM?(W} z7d`^NY%S2)uqO*o5QIce3&kOC+!C#(vUL7t^G6j@GRAFc*2TjVZJn>1(TD5i@gsEw zxClsAeE(yM5+nD@S(lL4Sz#F2coMB)A3cZ}+Y1U((IogcULL6wLQ1P1TpMr1f4CD4 zrUjH=E`l`g-8SkU5ioNaV9P&TkbvH2%m_9n6Aq=leQpgZQAIt58gAdmv)BExm!-Gb zG*C4%!+5hc-IYB>{dG5cdoYr=L{OUkwo^7UsAk}54gL0mc=3b43 z6GgW8t%1fJrpC>0B4J^+__FC}Tlu8|q=$Vc{TJ7jA;UE%oQ`j0}#Ipbv?e zhAJE7{Uro@#l?qVhpyv*yD!{}%Ttl%RvbN0vlB-7=+y6-7XK-kmNb-MT^e>ey}X%j zqN5m6MZay&R(gU~d2d?^(9*Jc<3QVdKiik4bkC=!qc&vDLyTtqf7>F8bSCK-SmH)T zp~kAd`+NSAh0s>ddGva6lkmFP)5tnjKy@GqxtIi<)&abDn}$Tq{DH#y*O-C1=Ua|u z&c~IcE+()G2U#(tTebkX%=ZGTK*D{_H@-dJ&EdP{;CF{Alnjs5pn^G{>{b(^=eH{m zyDgL2f0;$Om{0MV$(dt2E4F{BO0q&|c-$PKwt?{z&IFvecD*ggbXtKOL`tS9%~S+Y z4!WXU#>FNqsrQKnFT;2Se1}nWTl?XZx&1uHz`pOtWiP|c<6QUlF5tu^>NK5Rz4l*4 znGhm`GmK2)x%?)szRe%^4w5$-yVlB`LZ1nw!Q+1XE<2&XcGr}3d+M4Cmt#gPJd4$I2+AcQvriasb61ZXA0BqwE@9DY^Q4VV`w$hjF>LuTu zdW>-<@znbrq*ROYo`ySyM0Iv`o%i%G`C+eu@h*DWKdNdM6xT9oDF$s+VYdSO}7Ax1Gu+mq(Chv&Le(YIcHdRGUj^Yfmx_JDZ6Ma9IncL`p7 zy9kT6kUEg$rzmHTJ1bkWamE4~Gau%gY6O{M6mavOX;mNabw|(lSO`_;+?iXD=#LUk z*{-I<8_LPj`=p>SD(z<6$ZfuN<-?X)xi(8kMI-+e&K@Ihs*B}j zm1Q(nv3X$W#@*x==Z^D!8E@COT0J2C!{sl{;87GyxoTN?KHz)tx-=)-xn8v4qFC=~R9^Qoy^Hbhb3HDm7{pPdZnA4|{c zE0Njv5)?DQ2XS3sR44+sMsgyrIj8riF{C_pm2w)aP=L+<$NpBN;5(uv71zWUUFkV1cr`?Pyi(b(q^Jtyu|C1U8jq4 zNxvk1G&3RV5!fcE@EXFkxAK|yHIs)*z?2a#xW>(_aH+@q60N34YU+ia)4)2C%JBEA za9wotjoA^l|Ds6N?r+AR(OIUc?=*i}Q8wffmp(pdeHesKiT(4#yw zr{M`81ZuP}J`9T251D!Z`Yp|LIlH7pm!Go!dS{&Rf}WXK zvblxD&NNHd-@t%2wRin!&8;7%ZVq??RR~PmZe{tz91Ip@>NYEyFl59AulrkBhZ#`a zdU+1N&&X~s-A5AQ-&zm8#*F4#KUAO`zAd-D*FP_gJD9UdVO!>0KU{s|ykwDBP!HFR zJHHgQI2(Z%^&2~T_yRam1*dUw=G>v_Grq&z3Q4!5Exv_ZYZ;tn@7@?puKN9QUX=i= z-5U$59vK}4X1W38lLCcE-M~eIL6ET)XvKtjp>IW+m{^>^DmvH@7ud)hA!@g? z%?5H-q)#mPtO$3kK)1Ee(+TXvN3S*X6+8;kP!K{FZCq@cm#v-(Hq$R$^;$9b7VW;D z>Rt+x?x)Op+&vKogzkYeya&f>>`ad@p8dUh=HZhrUY`Y-;@JOSubEg7Fn2>q5QYTz*=}*#wOB$6<%F z;#WKgf#ZLpT&0a=CxaSCMn~);FUy|!!Gk2~6|!$#v`1qIDt!RGp(@a-wS+@m8Q=AW`=^fS(a9(anlfmrg-)p(t<6>~#m zm4SvhmtLi)-5-Ti5?4_wo%@)j)r&` z31>fQB-i;fu^;m*n#*y-WWd{DWD7Pf*(Kf<mug#|w2cFRJrD81AE_3!s zH}fq$xf{DQR{Lt`Ak9~x{TDiK4w7-&Ray=6O>%V_$TgzLf2)?QFfvw080b3fKq8K0p}<3=C}HQw$^wl(DAh>)pJQ`5TghPGTdI{S`(AiV?`B;yE#i4o+J2 zZ2eV;Z}qd!A3H@w+iVj-lEL;zhN++K<>E%}F)!{Df|#9U*~frEK*S1TeL_b_*|H4} z@-QLt`i-_&yR;!USgN#|zSxdA9OrD>?=-OZN(`x2T6#-8H5F{5svV`CQn}QcBrV0+ zDbsZ+^ae0L193Jjy2#>}`QTLUGA{W6_)*ls%LPBmm(~<(LowMidN;YTONsHWu1Z;Y z`epMO)wad?OdwWkoHg@Cg0FA1HmmqYWldv!49nBG-BVAFZpsEclHCd}UworB;F&F2 zSo{O!R?_!<#5G+m*dX7c1?XE(++7(*E>KD}rJh}?ZR47H5DdEkx^XSr7lPALuRW0}(wyNru35Jdjj6Iqp3JXkIs zosmc6u(q$Xwy8!mD~!!L)~0XxydF;%qhvM|pzaM=-$%EfzIppr8c}Hk#`fQIGfsES zGl2vB22MR`;FhNhY#eNEyDPP>E-u&@D&bM^_#^CVts^FU!@prO2=qb82Ow!wMNw^w zon3>@t5}o6X|LihgImQ-n}O7i&Ia_}q2f~y$#d%G2o!TOvxnuI_6Pw&$6HkhrS`Ah zg1;Icy=-Y*j(UL|9?lIT?P_(7$T9!_$vh1V1r4!0ad1GOF+#Mqg0xez0S&Ro-!MX=Uzhz9<)dRdMk^{R3e4|7 z@wQ_DNH5Enx^HRT14|?Hxo!af7o_ zW8+zW|3G*>+`?mZb!4(sJxZP1zbNNyrCAOXVG+FA{m zn*krm*_WW*_Ss?Nvi&r}VTZ0G$z zubZK($b`o+H&}nfwseowx*@f+-t5e;g{53L-YFez)62sg#)ofj+;E*Jyr#U^y$k(l zD`zOUeyjbIk$f7IGHt}gQW@Y?6?R|^6If9EfC-~i94?b#gI*Ay(fMeJmDRyEc?*k$ zX@-Vu{|Ubh>8H6A0<9A%`M2o`6VKOOawl-z&uX+&PPoKeLobRf)|;zz@!@qU&Zh&# ze|bl1i*~4pB70@}v}2hiJQJ_0vFY9}Uao%VlS>?Wffj0ke)9PyQ+o>4|#IxGQ#Ev@c6g z`@EoQ!6$$4yxILI za4eyXe2_xo=lAND=~|g zo3?|Pg^Ib$%KLn}rOCX<7S8dq+>|-6ysPY`64x>jbTN&WwjFkDBh%z4`Qoo!2B$JW zXXrgD&{&YzBu2C)c}AjT+H&0AO4NR6@VF^xBcYNsyD(dOjF}k)ObJ6d?Ex}g!FRCz zZap2mG`2T*0CRK1Q7ML(eI^rEoDgYbJSEg7AMwmanEmKb{9{E%;Fb8~dun#%$?c2V zz-?n0aSZv0S0DABPjzu`dS%|7;s##77iYahnyG5!fFfY5kS39mw?!aPQbKvpq7S8he78=4P^c8Bq(i@VSAuWweFYkzqmeV6P z_Ll6_@8%J5Z4@n}eXg80@CuqKaX1OWYc^xoIlvDo^lRLK;jzzCT`x(t#ULlBfx#xo zJQK2RmFUzbTbJ~>PNA@hwwydZe zg=%=G_tuRmO?=5wvnd_FjxK|vvcz1i&5sn`oHm=xE^q&EH#5O*+2FM65g0lUXU23A zH9D(syIRGLYyWiR?z%>$*@a@Pf0G@fg;=n_{1KK!y+)|3Vjb6jCO)_=|9j@0WZk)h zrnddAo1I!^fHe**q|V@bT2;9mYOQBjznLQ^cY9rRPJs-&Yl=a-GFbCFEbP{&+51k* zYV-&z0lHG-hqyqAZz1G;ie*nKX6RE-;FZ3+Qx9g`b^<~ld9|_s7#_JJ?8V<1f(9;R z=-K^Wux}wT$w-6{Otw%IW-PQzF5LA}^spna?uk(n-XGS2KzC(J#KQ4HTa!nT0pZDT zpawDhy3z&Dk7>}*DuR7I?v~w_JVry~v;yXSslwSaze_R}tbLjl_4XA%K!}ZjU+3S$ zpW+zvXn~{fsuqf6W1W{>b~dI}f8OV1vwycOEVYWr(<(;S{3Dkl?UZE}T^vPj%|UGz z3u7wE0ahSdZ7w(iz|mQ~&MRm2b7ZqLa%9Vt&n;m|lm7Uj&|fFTerH)sVhJd;793F) zPU_!09~9b-CwQ(Ewd|v#QHu`({fOt`zbIbQ}Tw85$NjKKjeH~)qrtF zhkofmUtiWwS^Ta1JJ4VbbK`Kjqr1$9ZKZp4{nUDdl13+&yeRWt+kiAv zHNa3M2#mw1Na$Lx5=txV@&mZ~*@Q)Otn2 z$OPa7nb-QfH0WwL2}mp3zK}C6q&7fVs5UpdvWYf%c4YM<)!Q904<5YwlWkqZS8G+3 zXHehm*egFgb?Q_KY@%T(!0X5BocDVysz-qC)S5XEKDh}JGVkJ+R|l=&fIy@%3waMF z+@|)|S*wsGi#g8Agy5p$f*&*YnORA&!}!eQS3D(vT0g)m-+pS3NW5lMgs$1MCT}L8 zBhyC-q?6^9;SAwtXSP|~`l;#lS{9V5-|Go~8k~`Uf(n+Rj5D0(%tW}OIyv*bMlZ(f z*UrQ&WWsK{AwZm$d@xv^2NBW8)F0-h4|C$H3m zVkgw&R;|?$ly*iGEPDU>&jV=CHqPDLL8i1^5Zmb$%(80V$F+=z|U)z!m_`nArW?pqh9U<`J%W@7C* zKTq{~WIf1~n|jGR&6%=P%d z2bOlkj^UnyK5SsC6i7%+ELvSL1OC|M8Jw6XnVFe+zk!mLKHP$=^=2qTwt+_URL{np z7{6{TFvjD~r+1XeY6_U1p8iI3ybosb>xfzxCzpCTZi%FH_iLCqXb~T|bFBPRZ_Bqj zz`O^)9N5^17aaP9U&1@Sj0|l?;gFzRi>nq0$mr;HpSFZsdvyBdj2lU4~*vS0=*)pfkA<DPvBFP`0g`Rq~xM^Zs$jcLDD7aJ3M zbeHSY_Acg^j|8PLLwOv<;HHA!EApHtmtnA7*it5CiC|vqngCENC9QASJD%{Os;k`w z*T#W-XN_mW245U7UR8lS-yytHRo$rb^wzEFi2!)h(VPUlR5GW!(F0*q=!VD$p6Buy z+AnU}ZYPR`i;VC0Ek z`jvHQlOULxjhfJ`p!e(ryFXmNyEjR7Ag={JToP72DCFkm23lq>p7{|cs9m`|^EP)# zIlG?Nqzy;_(dw-L4524Ne_nI4+~gDQ+oaMV1~ z5}4zK6E!j~th+B}uq%r`NU0mOK*72gq#NpPpF(;X1HanRpVLJ&8y`{a{@&3|$|k}AWd^xjwL69@Jt%tg+4??eY$ zB6%jBG!{FN#;IjxTBBPW-v`My)|usqoE%dkj7r+3?4c#P{KEprck=59C92&DZRT(; z6zcFt=H%sM$e}_Q_hmDQ0AdGF6k_MG;!j~~9$tHN%FpfXs5MBa{_Lsn%e{Y}=JPVX z>udLT^eAD_8LJbxoCWtXEU5Hp#^ax^A0@a6YL2fWMmAP1k8JKgcMbB-PBGUlD4cu2 zKG5AaHWET_87Ppi`tg5gpAJ9;#JBvZs~2lV4UA8YeXIw{ zX6BI%YH^k5T78MNv7)Myp4b$qHG>6J*5dCJH$9~|JDQ7>mr04T|12v0`A%{1kvG;{ zOqC|OQCA5P#`Z;X6w`Y7i86)|80NqUY~t3*3VJ`4J@j|ZS2G~V5w#rJn%cP+0lY)P zngA=gxQkIPcw5rsA)uQs37azqmUrss-i7SL1B>d(kus}ed2f3ZZFa!YmqQSKmr)c6 zP$c7XRO<%yah$~GUwZ>?ps$P)KXizvh%~hlOVc=?=q_-;9=$Kvj!HT-=aSd#N@&fp zIaN#VS6nW4cBOob3v?1q8wA^$zPAsV23IdjvG8+ltjiAHH<`@CD23kIlBl%?8n2sG zR=re|TnFjGH9NM!^dy@&oz8#=nO_JE4}7fOBzH43-YNe57B|mm-gS47hhY2H&XY6Z znfSe2_s}LFI|Y1fC9G)xVlhk%rfD9KEM}S_>%7K#4|p9kEVr>N?~*R?M#!HM<&DK1 z!C+$Yx24@Fxx4Knx)KGcQlf)A5jy}=tt5FP0$sAgu`cuyT}b@L%}HjQXJ;>JBp1^@ zr8P_bT32VV(i1Hm#`YN+?EY6cYU9nA{`;C&OBV4%*GpztS5lwHMqmq3RT;*Q9zCLP z@XTfySD~K%4EKEKy?whPfUO`cG-XO3t$KQ4TWo3#6*I!@3zD>Yc}^2FT4*%;QWSA+ z-6Zst4jYb|!nv=1TiRW$eNk6ia#qRcIVy)C{Kf62@2UG#x-%p~*FBQcUHX3zc5{$4 zWY-c%;k~5=e3qJzrSQ@OFym3d$5I`z)g^>Ze?EFzN(Di|hgV88X8!;`=))@<5H^^Z zjmKd8t>mL)pB%lDJ9FH*eRuFCWOu9q#?D1_5gaFS&rV&U*nmK7)tA7a>Og;?5fz(_ zi5NHFWIOVW9?iRrY<^{_oQvRJe6t6&l!YA;?xr}8J#8eNk5XeLE+A{~x9>G&z3N5} zMAMOsjE%C&vt}MyUFN8LRdSiD2PlMF`+DFb@0EAGW3)hzA+N+8w#w-hbrgy{Ld zHJ*jINb{={ul4jmM+e8stfxz4q&+7K5Tt;ma^@tlsk-1y*u?{eS~@Tdi*S(6>8Fe% z44@7`gD=8UPR+mup7~y)!zH2lpF6_|V`5_R+o|&(sc_5BfO%%u)g4aCW?p&o=8bgV zL~z|~`B96Frbq&Mi3J8TcXMXq2R)#f9|0%Lp^8F6$0zk%UaD-Z)4bFYW8|G&UuIBV z@2$>tX9jNcd<-nCxpUgj$-=_lo7hxLYO(SNS<$X8sD@iHFFVdPUMS_b8M6FxL27NZ zQkmpWV|%rAP){?=!vR5^Fc%{PmzQrUQT+$r9%6b6vU&@YForj|^>3a71HTJ!gKwVG z7dY1o@wAqe;r|sveEWPC9WvtO&v*RFRGrUw_*ghKZS2{I95A;O7Ql-(ACl8Gzkbi$ zIc=94)b^!US;D2`zBb$Onj39g9}BuPj9pz7;(&WRKAn-{598;(dDI<}u`30bAXw3B zv`;?Zt{C|;8`ivJK4;xP)Y>%)z?1>kk9jxG0E*W+Od8nkv?)aH_->jvM@!8*%=~jZ z!+pPKGCg74t9n08F-e5jgCx&ZR;PEkSUMG7zGoe{w=y+d9CiSDlIx0?Sl|? z>glTS>S9&>K?f@{?)GYunUe1tBzHUR_MwWbY5*w+2^ka6E!ff{WM9+83Wi@1tPpK{ zz(Z}WHOP}p=H`2Wo3khGXHSIN0sA&;hF+Ih0M#gtWzQ$F#^tyX%`*pc7|exhf{Dgq zTRjOO6yfA{UU~0}_&W5kWhnmj(NY`I>>E*E{- zuHaXZaPz)nWV|zB#oje)glPTY+~^S=znV#!plc2?w6cQFw_P@4c2vgncd)jD4UDge z#DHp+W}j$6cZh(C+)5evX=!6r_FZvWwwi}n^icu@Us0V~`9dXZ`MqwYQoC`U5t!*;?$`UD^*@3y!IEJx0oT)&*B`1)oUfJ?T^_#5&L z#E=~djtfM7tgK4S9RQi=1v(|Au<%{zL(SWSycH;1davrl0|7M;ygOj_3>jUxci-Db zF>Rk?&Xn!ftB}lSg~RYKPiY}Rx^;|+eW&Ye_O&@r+J-{9`sPA_U*(&A>i~xe@r?l} z!;1vXEsRah)_i6rC(pOJ7vs|x{9m`kz26!^C%@1V^9S7Yq6zirgfg`s)+3jc=?I=R(xWj;z2zh5B%-lE}f@Om__-K+o;?~!0n+#usx7t~jqso)HQ z?Lxu^DAIr zwfiYv-M;7p#tV(5qiR$2VDj ze>FYbz+6s8P%^x*nd(WPR#n6Sjn8Dgf8q_Bm;i2b=dRUY zgmQf}Z+ik>j?&^k*Oozk_G(~xa$8cak?gCbaS{~&z>~(?-eBTBM!9!P zVhnIbuFx%1F=@f(P`BI0S9?wPL1upzwhx(Gk=KEGYS6|*#E$N!)Q9M(hkVaEHiuY6$bMpZFy{hz2zT=G}f2{S8ymGwcaER5-MrB`us!i@|F(N)l52Ls z0<3md2`O(e8KB{Rv~1Jv{}_y3wxLOr;TQc?0i5@0+g5twl{`wJ z8tG=0#WZyNhLAjH4bG(d0$mc%8E;7@@Q(&kW(kfTrk$aoAkORE-Q9<~)o4V?TGLTQ zX{p{GboO!)AS~Xf-} z`{9^wn&U`uE2ZJFFXq)5&Sv|>35Jm?l>38uMl_0T-+X!HH=mmU5nfa$%hSdtoE%Or zE~2eTNiohnOS;ms9l4F-5)Hpka{9+(3ZP)ROixMG_A(L8CS|k?s{8&9yzvI7+#`V~ zk#*XufzK~w$16n4c|?`&!{5ux%iBNa%T0z&(Ig}!6rxaIe#(#6248GM+Cf1VeY?mD zcFBt3`9b?)z`o-}@}Y>U|fXeK4h6>A1}``K2}aAo{AIqSz(kJ_IAbr&FEdbEKJ zvoke$vgV(!VQ4mah>j4CSPf%QZ!18i$kulIW{Fp77N1Bv4l}$nX$c45=3_v@w_iDM z62aKC*BCjCyh%&rT{82}PJ?A93lGEwwc_d&>$hhlnsQ(1#1uXusc9PA)-S|0P~Wzg z({Y0GikkexNh7z~(WVw6XGhxLfCbv*?T8h|_|D2vf@fAg3U++k8a&!LLctuAmAuSAH4{@M1{-bjY|K#r`QZ4UZVL19`Alze2OiA_+u#)8SuzC$$YpDHL@k#SGk zyKPX$valIKg#U|&viv{9(1%Sjs)ykU<|*g!OmDPMYj)H`=joFm&I@)qv&C4>_(et! zonrAy={Wp0^HYzjS9c?0l`#BXeDZC`UFqn-!L{KhWRRT5J{!$1bvu`|(E;>e&8HQibTniuc;(NSl4Pw3La{pyCznd|+SpIpmhleskPyY#E zNUm`H436hzZMy1Cdw=8G=Y@OL83J+1uzKa(1|w=~FJ_m=P~NQ!H&zC{_hqs_3UU-o z|GWj@HzS?G*w9>iqK0gx5si{rWG zUPbu}fTV#R;e`&(Aell@S;122vK<)Kgg%Y?aF@QR132LRmDiW~8Jr3z-40D4N#ptN z8TpM~YX+;4b?-%|{Cb^@)Kht+eI3I}XuLJXr%M6cL|Ro0YJ-)C$KIhSRE#^|eHiA| zSfxbyXdZLndks3LNSC0p%SZpV(b4Z6)|9{T(6@TT4$b{yyDH-`novYx)bI01@&nkdi z9}vvcJC1}NhtNdYNjc({oDD0gnhwhokqrWN$9bdFP{i(WCWhyt@PcpRpleL*Mc_V) zIL|q^Jt4)3X~yQa@EnhJsZ9J5jM^7Ic%`t2rwnLzjz%B65hyGUdN(lul3Y5tgrq9V zh;t@tzNc%yYwLzkQm2@I#vOvuxK8N}X{d)*Gw&oj?5m7WNvz0z?ysShwyquT%Y+y| z7t(mUqCC+aZTrAgeObR@+$%EeW&YADtI=;|86>HH)uQ&!C@^qoo+G3GfSJQBLlU!p`4+lGg&Tk0x!;-snV{7)xY*0&2TGWmbM=(}^vXomehj@@<2N4aV&<_63L4K0 zd(wPne}6)JWIKE3r)j*cYJV-77-kk{WNfMQ*8*Mm##KX}MR&v}DbzFF(@&!W)T3>% zJn(gYRvNFXKXjPG`jK{0MxcD+KR2>@;KmR0X0pY-J(e(XKu>2)lULrlEQGKyHh&C+ ze|bGR5n)=$+8$k4wp6;?SgU;_nwGw#Q>zPXqN<(HUvv&n7k3V2HVn-LCmbf!{*MHL z!0+THh>!xS_i5J0d|a&W+gL2x4^E)0nT-)x7=ju;@=(UHLAPbzX4wy)@u>RQ=|I#H z@QvbfTyp2+`3D1JTD}Te-Sj$q2jt`yI&B}hgZC|1_wC~Q`plP#u*GN`Sm;)#8jOE{!bbXl$cXj#4XM1F#tI26%LSgU&ZU(RxFflJ=ec) zetv*Fo^Is|Oq>ED6)XR}!AeL=%+4}~dL54fuGh}CtV&J-@i6C_DT&gc@=ie79r``f z*I#F%ownINUi*03(a49OZ=-u0@yWDP`-Itr?ZM;;;Eg|!X5`-e88l(XvB^6COWADn z9w@_sri*`HMDY2bTa-YG4J9O0m#gEF>ZZ0k-Q0v8KDbFY+9kZ5xuP!Lqt}cj`H0 zPh^aBO%@7(hPr7atk?v$D-EzQ4s9paCid;btx3Z2$P-70tdp^`CRh6@T+K%Dg{S=T z!kz=9Ond8d%lPBZa|f2EYo5~Dd;wmjB$%r`mK98Vl%^}A(QuA2ju=UTEDo8i^Tnl-;Cv;5X7+}xMlKtV=c($WMH<9iCBd99% zKlL$%%}>(-Je{M`eBw(Wy(6&d?%sblH3fy&*u7{Prz^YGo5zp%`Qh(Z0b8Dan{LY6 zB=rKRPkedRb?~Up%v?{_sWc|x3q#a}gKpMfJ~|K{Yx{_B3z4!FmOi?}F!oO+X}E}E zsijO3?niA?&o;D_K+}9L5k)I!=A*q>E44f@=5uF!)oJ^O$=U!TWi2+cU8!8L2my&+ z9#85Scv;c8eGr)B;$)X9vnH1trTEZ6=_l?BX}6)8T0nQDSBLjAgTvnGsG1`uN&;R! zyWNdIbP-GokuzK%q32J{Z##`-TA#Y=@^0rTiJxCpXlwsyp5=dcF}zTupIq?y%UI~- zf{za9!#AKzE4S&4+!RCQ%8}qmgKug8g`%%~l%VKO3S-&jfq4^ER-N7Y=NrXCFexEc zVUJMP(!hDlP67XJCich7A6cI#GK&5w|O792(f)quF5V{l-swmGV3TQB(RFzKXorFMaAV`M<=_s9$ zPy-T4_^*$EeCNOCz&T0w?##~4&g{(2%w7P!D)&A3K%B}EIySH$q4`ZYZacfZl)qU$ z+i<{_U$%#|7k@qO2FLWvy|>$qq$J9h@fvzvfaP8HTQuEnSnhti)zG4uYhfvYjy=jcG=R(GOoQ*Zy`ckRb#31 zlpqIaY}otZH}}Tl3tK1tj&jZ%cOMH39^2US>eCYEe^jUwDi$liEI!20>(~gL#4I{? z?T+UCeIB$<#BU#_m@A_NnE$j9OnuXVa27+vX+h#K=1KqPO}?4p_yu0Pm|})~(_%o! zBEI7L-SkSe#l8NODa0;YO({idwTK&YGJ}Npu2pz75bt1ku*tz)N3?e0>E$g!d4`?h z%<}5$NzJxahm9Oo>OH^j@F@difchGT`ch<)-<@Coym)Q5AFv2IoE$LXM;Z2h!|Q-U z{kcrt_Nekk?fJsbodL6)EShOGQQKEolxJpR_N07I>KjLV!ct)b&J=41&6qP z1`#}e9zlOHKmDKPF};`rBp8^vc20u@_Tn>8jL!-2ZCkj#I&>hI#n8uPC{JE5aN{w< zpi?*M`e_xveB~19VljgB&CKy9%p-RBw>;R`06nqzn@Bx;X35z>5<|liPjeX8GZUssyOIkr}NBP zwQ~6f-LZ#QuR%;TbvS0Ha#RNk;#Ui`^jC)at*-~(xjI^HdNG5R_uN80;|4R<_{-5J}j_;)E0qSeIS@!pr6T2_g#ZU8J-5ufpH2W$031t00 zcl0hg^RX2FNjwCQ7}F71H~RZx&g=|JK-)XXi|2xMC1M(OMK`2GABfeF%fa{Dt} z?>6z~V05;X_=k}vcXA3cqMzkuSw&CZ{L{km0uZwK;a$gp%CiR^q+#1JZwzO+lb%mG~O$OO&m3j_Hu0mK$us(!|Q3_{yzDlo%^6C+`E! z*Eq#u^rsJ1PS`R-BAAl39ZCRndVDa44gcVsC@YV&MRz^|XJe6nTK!hVn)V&UX>&12 z{;?zF;8JkqJN?XVn0(NLq!eY=!pGpaBB$RcT9s0u1!I z>VDq#c&&T`tAZs6l&}Z*f7NBLiMdnimsSZRgt&%TRRw6}v%3&sO%be+(3PBsqWZ$S zI#bUlowRlm4nZJCUjY>8n_b=2q^ULnNic=o&mWEV=en#N({w7r=!ChoBUcGn6^p6B zWf<}nVZjMPDjCznf@_Jqy9gBC`^pSvRj?P$Sm)(Z9*AG#-+kS)A^0>8h|LW~T@v>qz<{${_WhOu zhnkHJhCV)uJ(2$A#vA07D+S++h2}Y7pHWsb1v2#+!($Rl8iN0W&fV*K9J52SQtj*X z*;G{JrMS$sim%w;p8uj%5OXQZ=WH@eoMz^Coq_CDciUHxS}trKE7PQC2l*< z*hsN2Bs;@UrqKHJfv~R;tjHJ1W}#nno!{>vaBC91hB^uAmB;x(iijIONPF9(ZvFLpdDeDDvfGqtB!@r}IFUGGypEqNlxPssjc zNpF$YMroZAoSPvoMn3%=FuL74qzS>CNv%;lyT_`}dI;QL~EGm1#p0 zYjrad@asmG;4gU+CkU@oiy=XX9_}a2ahDywLM(Z>&pAG;BoK930>{J5cX|a~Y-3$g zA2kfYB_a?OLXya5z@|FpsWmz^Rj42poJ*Q&Atpz$QxRrlWw?Gl%)Kk7%tKO2`bC^` ztDT8?kX4m*-q~*dDFP`XPm=Yd&SQuPsp;Y4iis6|Zk}Jaye>ELq4skSdWJHIG=!y) zO7gr8u)$;Gf~>zz{S@}hGWlvCGgBx-nw}9e7#+nn1AF)T2JIt>URSAm{VAV ze^MQG-5CfdvV1T$`(x>H$aI&1-^7PyalN$aAD0PS`>CB)_HiezMrv1%4VBFO__Wwg z9!{TkAI>L}Q=<6Nwcb9b)Z9UNVtxXKZ;*^bdOXE5WEp>ooAn`bLr#_NK#tT&u$6O7 zlu3#Z&E$`82c3BZf{=1|R@AK9 zYwM)xXk_T(_zfDK=s}yZ^)dsZO$5S5Q)J>I8{OdU{P|_Fif%bFB+4tn81xa|bLgnkWyqn2wzdkKwJ7jD>ERpkS*qbPv`x~bXS;^OIykGpty zQS2zFUL9eo_-!x5v3*)Jr7I2Yl`|ZWafsqg*S8&0S{knkkI@#zAlfeIb@jDz(n-T~ z_J7z3$D?NrgC4i}`O#umIsK`tlGcB9{PS8zdLbC0>nR`U)=9_K_W63$Vw8H_5sxc6 z6iIkSse9Jhhh2tcVbstc9N#j0=2>vT)80P@W#r|iNr&0EFG!o~$mL;qTDrYFv09mt zkr+2dFnx8^mKy(Ik5)ksd4D;%TC)mMdKsnUd0Rt4q0xTqEN{TVsozt)^;|q9Mg%En zKg@cYI;9u$0$Py#t-mg{!o2nyk+12K@t6&_cuLooFH|)+aPVm_BEmXY7pGe2UTm7m z3!9j;;WhxuXvk}8A-Sk`#BE?s$5*wSC(g7tLg4n4PS4=+k5jEJ>pO*f0DbRujAa3q zN7yuVy8T!p-J@-#=lzR+^GVHRsa)t{@`1IS^*Ni?qC(;lO@&p>1PpEu^qXyVPT`s5KMQYMkhvztjgFwe-e%A%4>70HZDq>}S zkNiAl7k`zk3^rub_Kc2HFZX<(y`CSJjCTOJ17~B%sr7q* z%E*MD6Du(-lt_sr&7c=& z6lP(QwHhN0Uuv|5aaVw$sw&h67=BuN;PBb8p9yvIosBEKvFg%#mt)e?21ApE6+;sH z`v=4uJDrAZ;T&()6rxw#jE6MRwH>OL*u&a7bLtpB3?wf|N7?B_Jqi+Y+Ndf0AhXS1 zfF$|UBq3Tbdp7}=p$p9(Vei)kgW00ff2H+Jr*-(Od>ruVHtDs?JZ}&sH-tz$hZaC* z&*TOIS)8?FWcF%CfBg}S%?QSfX?h(Y*l;Aor%deJD25hRHJC5qg|SyOM0dE`5D;c| zmXN&7I?ntk6LFKiG*(Z1|KpeqY5ks$otBE~#EIOzbf@cKraP#CE)KJ143h4A zRaN0C2Y)Y=hNmVd6$8P{VZSCrEhDeetn*dYQl9e80DsQvy}hAyfslZyB*`>N(Zny_ zqS~x(4>FBZRTL*?C+}5Qn5d{oTHIXfk)>%Ker%!Qk(fWSX+vD*0``v`5KF)EM(qZO zfRbZf|uRT=|UoWc) z3nGs`=asmUag{^&aHM{Qcem(L>c3qAqM{KHk-VO#jJ>#7Rzoz zf5EC!Uk1Y6CCX({@m%TDC)oUL)lb7iuT$WN5`L(9Y9Bmk(qnD;g*!Zzu0E9vg+jgR zH0qbv;N+!=R3{*Ut#@g~A>=#|AI(uS_6g_8tp(9~;nWyAm82OWWwJqS3f`>XP@k{& zo-t>PdfB(6ZTt-LU7=vRC8LsnDwVUYMACW(m6Tfv!BV=|nK|d*Hr=oehf1whPxls1 zNURMd&`{@sb9NdL5-2o89L=f%=+oj{@LC zZ$)s91d8fJi51wrcQ+efXx3+>n>TrFj%iK-*>6kJIvU9i^;47!R%kfAe_%aflU~0u zpsHwIvo@SR2%ieNC!tr72!PddhDKMx+MN}do5^BLf{F}qiX>dU8W5AJ^dcH&b?@h= zkgA~)i`+Xih1jKels=)K|YA+DFF6EohC66ib;qFRt1L~bhJ(E?L2s+xrsOC!88 zKxq#FJ+lnopWd8;xYHFVCsk6dbGWE$MOSrzyv~T7lNaPFlO29_d$4$y24082Dwdu& z+-wc2+q_>%l%866^2;;zeGo}Ri<97{N5-9tvhBaTX2xYx2#!nF@v0$8DHU4e^Xx_d#Bh3cKZzqKCGpoN%Hd9??kp^!d(hL^(dMJ8r{WC<;HvuDP>+W` z(%S>CUpW*Wm-279ts!R6eNq-i(v$29rW3df49*P?rKl1#wO-tIJ(pBepO}Gc&o6-1 zC>x4MZP!d%jaA<}TIqRdrm@Jbb#GFVtA~3AgV-LInTbqL2+z#y8KJ=;0s?Tyd$Pjy z0sfEv-nLQkjEknAWWQKF&3a6tQ!98D&D(A5V3N1@h+>_ad^DBXVh(cB@{P87PSo29_UmR*F3Usl9nR%e(nvRXt+LnA zR-rE&WnmzEY)OMMm#z^mi7|wLpT;pF_+YDzpd);N;Z;X2SJm@Ogl` zVp?FNn%@LOsMaSW*_p|Wa|TYr#DN%}K(_a3)jsONLxW#p!7-DKjWI6wLZqS%(77j7 zUS_W0WDFWd(lXP}=k~;pcpOj3An2D2=`J^DCwe&;Ehp3)niWYH7$|p1E{#$J*2f#7 zPkL4~*fGsge4ShXXpmSV@Y5TO8o@A(Lzf$4Oj_Ny4 znUpSLLOfj0ebst##NBHueZDsCh?l2xO>Yd-`vyY3U*5IO1S@N2!FHWk+ zylJoT(x3vOfF{UE5&}sOmLqR4P+TnurV8FGz3t* z+!K_gm}){V&-uvRc4;O9xW5zvNdPx=ZzuFQV$K``RqYu4S>e6~hnOyzQZ`bq0GnAoc1fxU-qo zPs>kWvaV?&%Ox*4QC6boDaN-)%ZvF>(o%g+xgo_68cHIimCl0&J3>s98j zb21ffu_EQAqaKZNV8XVu@Rf9F`|(W_b^JS~O&kuFHw6Ws-}Zmt)lNu)G!Bs8FiF5e z=ui!h#4`!G?D~kOqitIRz0x_&iubtc$Ry_aB`_#?TNZ*QKY!ajF>DoNIRl~6%b&6O z7A?WsyD6t!lprq3j0wvn{UuKa)^#6~0v81`+3-)c1&|{TFz*sOz+988fx$h(M{Gl% zd36^wcxDH++T4A+-tEfb+4Zhop0R2?_jWdzVFPy82%madaZHPLKXcg`^F-n-KR#t! zdV(fqj)6?-1vHF|u<)<@7GuW*o( z@_|#uqs#`@etUrl`Fn?MJbi!drklexpqkze4K$+v+BJ@K+1mgOK9zPqb;(v`USEL! z!G9X$Sth`=033ySn)$Q7EG_xg(KdRQzr@96o<-h+woR@y-Eftw#15C#-aP-7k?F2@ zVnU6{!T1QEI;C;yuZG^G%%b4+NfIC?^m}!1_cf8~Q@!D}tc_`Q(FA6-vRCoB8u05jw=-~izZ~`nYhj)7dUf$ooFcX)J z6pK}>>CRgpd|jqY|6y@hW~(8+vtF17e5HVbk3bEx2e1kLmc*zAOlshdV zAmc3lJ-jzkm`vyx;O2a|9JuznNMn<#wlwZ^E^7QYh9OH9C!)1uX^>bN*?d-&TTe1w zgXv|(?>Q?43Z)1*d`+lZnn)^2gH!s%nsRyT)bG#(^>gR7w?)DnG_xW+bS1aZ3%mNQ z+oUDGj(2EBdz|2i1JXz6=RIP%WcV0u19 z*voLMNw^JAZ$|^b4>|rqA`l{NE$a{LcK)Owz`KHU;__^z7)Fn2Ey?vWi+9pB>zEr}c$B3Sh560z%kaq>Xjy3~5|w@)z7SXcA`>E|x$*w%@xslbOJLkr zb8%kErlYbG6Iu&i3JQwtzO&w$EmTkLcQVnuREA&@>0wqs{8rCj)ziLCWqpY@>P+(f zeS;KGl2XCheT)Xo@^5fnHNVMxt|!4KV)1U27k#2N%!)A`3oYI9C^@bMK=-Gp$UgF{ zz`_vG1g~U!o6m3j=@fxg#^v(f;@;$kJ%?mRE{+|t)ij_JRhpo$d%mTsb?2njw_)t5 z%L~gL@*q!vGY~rV|1AM^l1TzYlm6HJHJLbE=wJV#82<3B!$O&rX&=9ZKSx18?;N+g zKSvqOj^tc~hY3YU@0b000k$@X+cV(0Z)Pl*(J!CkkJETu#&DnG2T45CK@UW08{-zp z$%yX*dyNLq;zBW}7V<}w{_EUvaiy7;Ho=)9(1jta^_LTER4J2{u3j;)_9`oHXqkOj zSxe=lxRn5PxwmlUP+8Dx{{z7T{P>|~2Zc_7)O)3eh6NO5_o@fk&7UkAq28K&RcXI@)QL!=fIO3i^spZx z$*3)n#MUT+z2A7r@QU)mhvkiemQ{B6plD5f^zh|6ne@;j+II6IV{7a$f2jxY&qJr$ zgQ_n5gVV_K(F|KYrgG%=C`idB<8B4+`29=Zt*zXJI(rtgsxmFrK+Bk8Km4&8cXQ;Q zEWnFEMOLpApMYx~K6(;FF!UYvp$I^6^oT)Ea`ab(X7(b3)2*X@L?mqju3!O5zF>YJ z`9i8~o$4g>L1iH?7**IG-)ktMV5Q)9kXp>gb|5cQHj0_b@bvB>(uWvUh zTF#oHP8D`{0ILYRwTjLfRHY=RKQg2TJTg|PomE^F!Fux!)vC8EouX9FPl@dr*Nc4r zFyDVr@JF|WAhkhsULKO_^|WkDi92p4I^VYl@K!)C1f<wxMl8i<)0y^GE&7AFRkt z@)N(Xcn|!zj^1e>Hp|U-Sm5R1<7!5t8|0qz8KlZG_#hbbkYY%_sRMmF;wg_Ks<&}= zhOTjz4qv7Qt=h{65sXg16kZ*iw1;vXG4F-dw$%i^riPjF<+A!^e|9}+N72X9MPE?` zwl*p)+C?IHDS~sHUojyed=D$5J$nx!vb>9avDFmigNe@5Hw}uG<5Xb*X_p4cu#as6 zFp3#bH6KSDAoZ=~@w?ash45h1q4iTEq+cT>7_NbD@}BJUD|$mxW%HCU&E3`3iTCtA zV@#o64RSe+wz87IRA1sr&geP4mICV9DCb>J@?a%o+soP__pa1{> diff --git a/esp32_ble/doc/step3_choose_esp32_dev_module.png b/esp32_ble/doc/step3_choose_esp32_dev_module.png deleted file mode 100644 index 9d4d66f78643d78ece0c04f6d2e4d8801c4b0286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256067 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