From eafbd37e8fd4010c24a834899668cc576dcaba4b Mon Sep 17 00:00:00 2001 From: Yi Ying Date: Thu, 27 Jul 2023 19:57:31 +0800 Subject: [PATCH] docs (Bluetooth): add bluetooth overview document --- .../bluetooth-architecture-no-ble-mesh.png | Bin 0 -> 31268 bytes .../bluetooth-architecture-no-blufi.png | Bin 0 -> 31461 bytes docs/_static/bluetooth-architecture.png | Bin 0 -> 31905 bytes docs/conf_common.py | 3 +- docs/en/api-guides/bluetooth.rst | 193 ++++++++++++++++++ docs/en/api-guides/index.rst | 1 + docs/zh_CN/api-guides/bluetooth.rst | 1 + docs/zh_CN/api-guides/index.rst | 1 + 8 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 docs/_static/bluetooth-architecture-no-ble-mesh.png create mode 100644 docs/_static/bluetooth-architecture-no-blufi.png create mode 100644 docs/_static/bluetooth-architecture.png create mode 100644 docs/en/api-guides/bluetooth.rst create mode 100644 docs/zh_CN/api-guides/bluetooth.rst diff --git a/docs/_static/bluetooth-architecture-no-ble-mesh.png b/docs/_static/bluetooth-architecture-no-ble-mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..1924684fd6744e3318f463b04eeaca8fdf3cd122 GIT binary patch literal 31268 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 Q0|Nttr>mdKI;Vst0Bpju6aWAK literal 0 HcmV?d00001 diff --git a/docs/_static/bluetooth-architecture-no-blufi.png b/docs/_static/bluetooth-architecture-no-blufi.png new file mode 100644 index 0000000000000000000000000000000000000000..3963b7eb1c5c3a92fa5ba4e2c86e204e4620580e GIT binary patch literal 31461 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 Tzi1)@0|SGntDnm{r-UW|VJW9M literal 0 HcmV?d00001 diff --git a/docs/_static/bluetooth-architecture.png b/docs/_static/bluetooth-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa42f6e47c33814ce8cd3f0e1d756032c7225e1 GIT binary patch literal 31905 zcmeAS@N?(olHy`uVBq!ia0y~yU|PVyz$nSV#=yYfAvpah0|NtNage(c!@6@aFBuq= z^h;bLN^&dGGILTHRE?b>EL9_ejQrvfRbv-bBO}+G)Z~(){5(}7BUK}V-29Zxw9M2L zh@6puk+H6Ug|2~dh=H-Hv7@1-sH{RgDaCGP6@vjSSpVle65vd`G7hcubWbgC4bLbG^YRS$aLhG__`EE&s5mn}526faIY@I! zWkD)LG$pkxGdUHc+}Kssz){r*6fCO7&MBFR=|zdTszwHRiMdd<0g36Ux`rUNMh2PC z;Ey*<4s!Z|eul%iqb2sRWX>qfd> zxHpU78Hy6)LOuOTJfjLsON|Wz(~TlR<4q0RVacm3F{cz7xR8`kTv7=O?V|kBycBTu zH&iutD$mF)NewPYOa>`0FG?&>HFnA<$<0wUb^%GJW#;5K=jY@XsT#ZF<>#fU8at)u zBo>1r+(6aXDJ?&*1e%@tnB76w-bXjUqNh&PCf}Dgu0}@!8zVDlXeWYPuWDqJ4mTR4UDb$il&TuJ zK~n^N=YvXNw1k5-wv0g`VPt?5Tdu(YszwG*Ii;y3`S~Ropt3GMucRnHCnvQCqL>;n zscK}LmX>OkoQx$3i%W{~vr}Plu4-hQVs4pa0E%pg{j`l-3uqj{;ucHfn!<`LKi<9YXS)_)VS4k@^RJmbq)4_NKz{V(jacl+#bjrYJ zaSSibkutC$EZzrq9GgL+5iO4WGIO1LTp?0ais2N~RErc7Vsfj6QIfHl8J%L%7?$mz z+11e065?&7s5HV>7Q^%np6m*3F`-2zs31-$%Fj%Jcx!maCVIXcx{(R1A&_FzDW}ve zld7=@DszWWscQra6j)w`HKLL7>JTY*4PlK+L@O86ugpwNEXmBzE2e5JrzECYq!HCl zGE25dO-iFv$%~d(VdW`OTn>?Dk|Aar*uxVvXrXFkK&9e#h-FlaN_7ZlRLn-Oo}M06 z^XCwYToZF>M`ak4!qB!JQYEWuWR_E+YV4GxYGjrUVgwZBgT^I`VG^oFZg4s3B?IWd z1gN)zJQ#u6%YiCN%*jj#jp*g1rhyy?aRhDqw7Re|Zs^B3tXqaJ&OP#rOGYCcJk$=0 za4aq9A=1^>$hA+aMkw&N>`F}KX{qim?eI%d5MDJYRzWT|;6j-auB z#K3S$VsQq1Tp4K$88P6DcN8%-1vX0nZr4^C-ti$9+ znB#1t$q_o$2#Ry?oFg&=OX5JEH8F(c2KuE(3@e9jf`m;FBL*Nw6C{NR5%c|Qm-Feos1x;TbZ#J!!%xx@FW z^s)HhXNp}NUdt9~tkf`4>6+rB_<2fzk*Lw~NgG8bDw;@4GV-qv4CD;#bZT8K3Dlkd~-C5^e#xK< zF5w^|81eM__476LpN;>YSC(>D;STUF2+9dc;rpWelK+PB2IVTX6@_po#3??=ui5-> z+m}g8yI0Is3R8BS#jw>Sz25%dOHJ4JQ)jL&gPXm?gK3(=(rJ(GUkMaccT;w42&(wi z?N?u3-8Dz{)f8CJG;p*uFt}=%iUl9xxLCj)Q2$WVJDnqK;VO90ba*jM6X@kwow0*u z#r_Xdwi;{gXMeQ?rr$w=;|F(Ol*{2ohYu+_gfk@^35&3jX=@Cd3U{-TKqt$JlZPJ7 z;$O-z^{TPZ@_D!5aVT(><jppjPDhzv#f}DKW~2$+DyB?lzaco?CKYu|Qu%(CSy_A72-?_sy&M^e%e6 z`#+nTg}LwEc729;H2P!ko{aX zTo*mmm(OwxzP6uvLD^yU{L>TX6qT%p`OG0jXvV&Z#|ycifBe{RO;LE^$xTgap$(V* z-iyC>{=}S?e`{ZvXF72Gabs;6! z%Gc|CiT@=|j|R25bKi+TQ^$Hij*See^Hg3QN)X+2=e^wQPN4;I(gvpCP^%|7D)2Cw zc!pg_U|n(N{mB_34|jwznaErTT@LkAOM3%LM#YZR*DP36986WAQLRwL(c;*kcG6mI z4XcS~-M<%--%h+<$&&G;w=)Ws2lE6uni*2Vo36DVXbxbvjio@H&AU$Z} z^x$MUq~g$gk6o&Vfp^!3DFzeb-Z!(Xxb7bCRvhYq-yj{EgZ#ufJsNg#gu8Y_ia3WB zL61(R5Wx?EW+&g6xHDbhQ++Df_(V|R|FP8)A1`sQi2PmHBlW%R6Bl zk5i_vXL501aq?I2VKRA`(B4n z&i}iO`NTBc_QhBJu)bKbQMo5W#<;R<)9V}i-|OFrHnMNqXUMwswfRB&cD@HEm-Rn- znfEtfq1RWqJq}DJU(SRkGcXA)m?ft4K(8_XdTndlR;>j&KTrLr`s$Uubj|0AVt4JY z;tTx5WWpP)BDb9qVie@yZ=9mx(9E}ypTFwrD}M*3kk5`RcT_L@|JgUguGD7VjUC*g zdHe5iT+G}&{dmZ)XB`JEs=x6VrJn2gS-kA=fqnaXSMSSSFFsMTSnSQOT=uw{hmluu zuP}K(JA3T8_Vh&_8y~&6mAyf;`(%8>zVGKE{%k0;jgzMFB6r>Xz$ZmjtjlX7;J zEWd3Kzi(8jL*wgwlk4I&Hq6}5&lx@XF>TV)!tZ;hUi`IE&!Xsud`V6yzkNUFR0+uZ7fRcEc1y(vGoKkZh1 z^~|CfW*>Rq+}$jldTQG72E}}(>!CY+=at6SH}BJb6rj6bQr{UwZx3~rUZY5X>~I_cQ%{Nx+mdp|@p zr>(fW!IJA<#F00QvfrMC*hIbO+;eBW^s+sFt>(SEC*RtAw`b{R`$LN=`@O^>c zvh`j{3QXsOCoq)GTj}M)#K?I;#o@B9Qo`f|i*|1Q@Md!F$8Xi216F47Dw}9pRDYB2 z3iB`RRdulcn`ZqfKKw$>w_g_+-8lZee?7nO%L_qe2l@P4V)}g5r(^6(3hYl!JCPmp zv*hLPXotV78f&}e-ZncTJvr@YgzED%bFy?+afjs|I#wG0uzTuhAIX(Lv0Kcq?06q` znQxorI_`U1PKy|HtMgTpFXmo*mia}}=G2|)e}5{k)PBg5v9FUkeJ!U`a6$L}8#yh; zmoMi^J$Sx$_SsT4@6wD&^K08$BH#PEth%x?aDSop>?u=ySzHt(n1mJ_ybu(3ox`JH zS6disH$#;9szjE!^^Aun=+#zTP_ils@K1ibgmqG9)0gY<+aw*+mgevKCF3i%y6L2` zn6mr17`KMLc@~!=IM-g;a_+B1;Uf#Xs86MPn7(Wc|DF71#qp*e5x+hfq##2o=DxD+Cvc@ z({+Au#OL0VF0TFY;NCH^!S zKqZsVf^){9ot_E`jI&rWcDb_T2>d91|9(Zpt_3$=&oKSHbj9~%cRuNZsXNbWI`qrg z_VC+9iUz+DpReco`k1NVzq>or;#F8*>@E&_@UB|x*prpN6C#(KpK$Pw_8ntvt5oYJes<8-p_X|U*3M4a&vd&x<7w4LcXXy4toBr;Rs8{u9BBMrPG;yT)Tbh z$dt3m3tqV0|Mc5)&z0?~Z*Ja|^mf~f*EW4!ze6+~X7nXqdzvCPi>elzTO`axu=Ii1A zGDl*~pF2Jld+Y1qU&AzInn#pM`kDVsOW*6Hze~MvafRaF5C4wOf3z{H{NbuQl?LDI zr6*XGW)=V4cRT-pud0`tmP5Wy%$YBbf7Y#ERN9_r_%}J)Z@!)Ei8@&Ee&bKRbo_4+tm`8A(k!FQI)EKel`CO%O9l33B@Eyc)rVM*cTSfvR9 zjPw3R?ycdReDwa-bM?{Bo90>k(+|tPm8*1ir}>nmO_j6LKYX1vRpM8Yzwk@D?1!^v zD5$V~>ZyIMoN{s&Z*qLKr1rEkhkwssb7XF+_7QD|wYIaj6qLRExhT_re%{-Oe@|%} z{=eLt5%!+(&7V~3Wi>mlZ0Vl(s^`XX>zY$%R4t01@x0TR#qGbPg3I6b_USwMtcr$F zd&{<37e1L^e@5;y({*u{?|UvWS!KM4Fv+=g?hT`_M?>BILfKcgA$)hM_>V3AI_tre zm6KmwSj4w(|3;2`vx+WCtx{o9dZ5F|8IWGNYKw}{1O{Ivi@Rz}oB|ux%=vfF?cdG& z691I$N!VT3aW!-4oll3=Qcg@cDU*8SNbLlDKKb^V>v7`B4)51Sh-TaUp1;#?d)@K8 z+9aJtoO?MtC%zNedHla^+Pm5XZn-7z{~B?L>1Fjfy!sXr{O9ZQc{8$A^Y+T#vA(sX zRQ*fsOVfynzj-PiT@3h_@AND8xLHX~sJQjE+}@XRy1Qem_>8W_bX`0jrsH>k_5R}E z;xlt=U%m}^b9>3l?tnknZkrr;abSs2P+)w;6e22V!^nBz!OWL@f(4TpVn2wqi!8RT zzuR|a=H?l-^TRgvB`(@J`FY8wn6paecZH@@&pK}S_TEqJPfyOKpA-A)-xG8H-{rI? zXX|6nNY9dxnPQl%mYkbvRrEvPQu>Jw9!aCPYhR0>pG*9nzkf#Unv&D$XQ$a_*wnwd znR<@n>?~91JdF^O1Y1Y(RnjgFEKEWZ7_J`a;9wG3AZW;wOacMz6&i7G#1I~ zfVK^H_&G3LDLu0403Rb~fc2Cqu=Z>a8zbk1DTaOX-nX)>c-|f$3+waUW>Im-T^!_Q z4rbb{3H3kpw9oQ+kMk-Pt_J;a}#G+vMGA~+n$=Eg$As*a~nSG z^iDYNBwtNLs~~jt?)<&y?skRjf_kFEA%ZiYLGM@6>t%_ur|-+PwXrM}R&_XR;Iwef zrpp_qPMyG}JwJ1e`I?qVyI(;&U5x?43x3;XUn?<<&y21MT=AOkT7V{_RGT1I=~QO5 zwXu?T+PUzn9k+`J8siFVb&j zSy7#{H`eIxM@ge)vJ>@UXXPC4o3Hog?Y$LWAz=uLy-lfp`)!?nX7Ltf&z^h$_k89xytMQ!F&204l_XG8&Pl$>a?4f>*9!kAh-G;TDHSgWK(n)%&6DP+(FLNMjOOkSNCxs*mXIUUYL{ zGP&gz^B1YBYam<@+7MMM&5_XXUj9#g{r&sD{wQ%23b5De>z!jP6kuQ59>u?vZ^@q0 z1x5_7AN=-W2>VsC;BEMx+vgF4HH6g}~H-YKjewcdeSYU(q`3n!Fbv7K%1km}oD>h@V7=Y{gBq~*^V zo##$sDCJ1$(pu&}-|q3Zx3|Bie0_B_a7RJn=lPSibG*5+@vuq7nHh#Brt9Bd!pO|F zg>xJGEcSy!-FyDbVxMTP_Aq1OGe?UR?s0Sd&M>oAt1`Y)I3p5xWr1V!JNm4 z?tbPWC>x}1kaVQO`T6qW)h^s`a~yv&~bin@#wG-rZokY<#vk zA!F&CJqOP)i)(l^>|(gO*|qHDrPSol&(3m-YX+%wr&}*se#@@pC7qWy@K3Uf!L`YRn(=VkyfC z?f~29l-*@-^-lbKck`k5mWL(V_x$~Kd!^9n6(EcAH6jalThYMcIoS(>w2+7FQ;4FHbkll&dIvA(Ok~S>s|0+vpj0D<3$qt2)Fsyt=8R zYGY$vvP~+leBni#4Xu|q&otq;u`cN|i}`#YaLzp4Gw*B)7B&kl&~x~jGf_xxo~%_g z@AlmnGURR?dU?}l7W+I|D|hL2l@B!h&Woj$%k8+}$QdBMplX{3C;xfAxog{Q$7Y!D z=REw9qjr}0Jm1{Kyw`0CM3$#>Z?@)-d9eWE%_S}E>Fwvj4!_kinZ>@Xpvr9Wv&QuH za~IpPeusPnhzh|T)6pa!EWx}XN|gZ=AB(q`QYZl;w=wnvG+atl9O2W zypdaW3Ii{LDRYAfLm#sTf5UUNd29|5npT#IHh%N%diVeP#jWl?&*j~nofD1I&xxEp z(|hjk@AvzEd_HeK(W*2nrueMsi8+>=m9O52&6qQTz0V|~b%&F~=L4c^=4pp~K2YrZ z%&YnBIc9OK?>!8EB^@qWFnnY9A>?4suxH+#5RL;j3`ZGrmS8Tc?#ITJag7-lj zLoS1lS6=JHvU-JwhJ}w@d}f>J-dkq(`_1MR!OQ!0+NGb9+4JpI_Qp^5O0UPhxVBdM z)3dYLcKz%3EOPB$lzMvFj_+}gc;{4oebs83eeKAuil< z{{DXa*4FHU*LzsKUSC^loZF>;xBPysgiS@kfzzAQ&K{bbzpvA0rcvU}b`}4v1$;rv; z7mbuvoxSF=7ye}XZ2NH6(XX#B``f$T+LC#3L!$GWySvT9CdMp&x979pmW+!`FE3v< zd-zsF_w#|WW9j|!g|28{3b{azN%oZ$jjz}3 z=Bw%OpKo`!=G(X1`O@9V65YuB_CE*pT30cHaKK&A#97 ztheOdy%l3$`by-7*2byY;j^qX@@Br_3g8mqn!2O&Yw#KtFXQxcM`jo%pILf6zFv0w z{d1W`nj3rLYrjtYc|d4^h-3Z#zvglk4;mX%?f(6E>}Iq1{bV&?qeCmRuC8+PI5*$^ zen;N3mp3*p-Z`KDTGG+3#1|J9PM>;xO{8(LeC2W9GI1$=t^ls0?)MiLyKk)fTc!L< z+B~o4+uPgC^KJipIQ*c0M!Q^<#>MyZR2_aczqpmXey@)G^WzJh+t18-+&?vDXOU`D z+L9EHm7f*#?kDV1pT-coF^TokQtxz@7c-61&y@Fe+9&KdmV0~K**_0t?P@HH(#}X| zI?q~C=5pG`Luii1u9NR<3K%<|v%Fwu_z@q*pvw^Q-EpNi^BiA?m5g)vCrtlt&z2z8 zpw2LdIbmklwVy0`SGX=bJw09h$Ljl02QpoEyjrz7=|i8Kt<>i9^JY#{_=~(7E>+Di z)o%Zov?$@lt*zR(wq!DQt#Igkly`ky>770B+kq>=bvBmsk89sZP5iaZ(qok z-$^XK6?5j9zJq-A8^aH$vsJyHMEw6IzMy7B6Dj$ettgo zsOZUwi4vzX4EV$T?|P$W5+|}?YxZ@s&&R#e&(CxH{OoLR>nyQ9OSl4}W}cp^Eq+C& z^UE2{Qn@2f<<5LpnZWS0|MEm-_hTZ}4-c_E{=4AlY`M-~Uthcb3Q)hXFJmVAJh>$T zCig%^ujV}A1+|P3`!32b{QKxw$#)=xVcPl`b^%ew|Gz|PXFglBf77J%lYZ^h|Nq)< zp(U3?GQ-Z=ci&SPR_LVtKJ}h2!JUCyqju4rZx#%*-tPOh^I7^Y-Y{K;y|sCN?laVI zJ&0wvzsq33Ni8Eq?u;a+D@Fam9M4W1T)1;a-Os1u%5z>_U7fyW(MQgJsL2{iudc1l z)>+vYRKxV;@Av!1e|&uGtmTlIyEygIect??_bYq%G>I-KQJt<4$dr7%uUBxvlLJL& zIX4n^1O%{tPUsC|JXIGwLC&H;VFAO_evwUi7Zy13DAl=T+pYaOjnzbv(JR~LdEEJV zwzgZZ-+ae>Jlo#oj@Sa7`L|OvY+myIda<~F($;%zzn^8yWPkWf=H=JhbJ_L29KOsn zrOt5I{h9N=y}f@&l>JgQ!#u_hll^0krFxiK-F>Oe5b`nBhAlz3VO5>p4`3 z-N_}vvGsqyPJcU*N5vuY>Eq@(*WG#~62C!h4PNGR zW}okFv4E~;lT^Lq!bF>wXKdt|vZn6R+gr>1+;kv+QKYoDH)>S$PXT6a6kooEk6uj#h2rwcD@uiuk&=itR>P3p!`HZvuTY|Xr^ z_E>KFH;v<48zvCseEWG0!_uckx(scsmp5f} z?%ZUTy0YqWgcxO5A?X?c>pKEd18< z`Sp2vfeC>n7kU4kx1W|Mwd4Q4-@Q{`KAYVsX($#DH9zC*;^^+Mpm+au0v0rE3_HsE zX5*`G_v0nE+lp{)&AMtd&3QMI$v(TlJ%JwTDh`=fmuAm#n#kxo?ZCnZ3r(m0{UE+T zV+kdR(Q(wY9^@AJ%b=!YFK6Wci!b5P{@3vZVvnR6r&5Boq>Nu+NZIW9Bg7uTd%fV=0iT4zQM1# zd6wJM*D<6z9Ol;FQxF*|;#tVNaK`k5e6!8-&DPcY^Zj_zD6{r)^Vc@%Jcs>tHVjH- zRnKOo`^?J_UNA>_n(K@|-`?D8E_{4!=Ks&`g0aj0IeL`oF0eVMux{#{-#wP{Dh|q7 zKXav~yLcH{Z8JAWv) ze$=;nt#NqzrKB2Yx|25|Gx8^OdU9fRK>lUZu zyiQ4d@^wEB?zn6zzhkYkBI7A}}E>CY%n)uu1JL8Uv z>Nb*Z^IXpwADQ~wxLI_;?Z0c*Y^hquUSQjhwXaGtT$^Lek-VMjtRqPl~CC`yE%}O~Z__W@S^Mb?M z58?}Y9;FwE_Pa#wtuo!g`(UEGoaZElrK#IPSBJGt6y?po>aTcvdw#rf$IX;E9mMtHa<-X&Xm^{aqUlrB_*hcIG^gr;esUGhAUv%1^Zu``E_6@_mk8|~3-B02Q zmWw*E*-cqZ^{KDNwA9JZ^*#xdzU%$u|EK7(SH*c-lYenl!a};7k(*LDSH1tZm$TE+ ze2d40Q%6%cFF3Ro-%t7W=B99s@TC6>zZIU|aIYn0ZgN(n-p_zdYxX~RAkRAg#_S1g zywYvE-|xFEBk7{8zIJ8UBe}r1#T8rmUhqHT)&KW)`|b-BZySa0&z_*+l^OVqziUUn z)2)5Ay9Iyo)Fme|NVB@#+?47VDAmInlJCUzDqCjLnS(X{Z}xC@RyXdP+WdNE@cQGt zl06KfORs!Apcnja#e8!aOgz* zbdeU#hf_=W9&U~0S-Z4G+@`-`;fp8IOXhf#iA$+JYZQK4x|`?SZLLY!QJ`uSGp}t`S)04 zo!cJy`9S5eIGu|i2j>s#?mT$tWy*&SZ!X--+Htql?ehUKzw>FAY(BiXV0o+HEVFxI z)iwjrXbB$~qb1ef-t62PxY(_gTU_tWO}iBj8#zDp`d(h{f8Q|W#Dwnk-Chcraw={o zc3(H;-(y|ow=L%L0nb_YbhT$xK5){94!QjP{@#9J%E?K&ay1_u&wq2|?T>Hpn`xAK zc}3vjJpZ1F&m5Cl_EgX1mpRM)zHff8?sc1jt|i+~bEe7dxDX5(UO8cwdn?3iuGQC5 zfs5TLxAA9HBruh1PB}ks@3Rewhs9Knd3;tdbh@{9UFCzj8;dtRoyG2V=}TTDXpE~$ z6Er&FFK(G|prJGK^0Kw}mwHdnnfIW{`2i@i$6R#`1WnmMVk%Yr>uXP z@b57W%i9+6`GD`Pdz#jopAS5|=hx0o`}Ve6 z>#a3EKk@wh{CxhU_3`_s9sK6>Ss@~6;`I2>3ZIUt$mm|O;b8xIV)fL3aB=(Vcb2)mN}2JMfQP6uVklTCp}&D;g{|KyRV1+o0*ssi z?GCFXpi4%;QweCxNWfz493Bl;EI~)1OJu;yL~bZ6FlO~nE`qNs>S*AwaB*O|qBudz zjRiDJ4H>UKAjilVP(5dgH?o)_lh6Xb#t=iq__YGlH;x@z4r|qTSPTw)=l{2V|NH#f zI>8o;j^=&h;?El_I-0LJuWgTF54vX+AldNMZ6A1KIzg*CN_4|qL5F}-*YcRB_#<2L znWgDcr_h3V^7*9@r+~>rehy3~Z=4sfb%4DAA{|OVb0q6NhUFs-Ouqq*U)!-{!BsVI zxQH`yUU(su|1}I@4T;7H-fCd{d^=>9QSv+Wb91a?UmmGH&gGtAd{swKppk_m#cO`) z@1391`{&yf?>XHNCA_wIL37%&uL>C{yBt}R`Wk{?H#*Bsh72`7`}%*c!N(IP|E|qH zS8l%U+%);{^u1=TU;XC_HfAVp_ z33m7}`K@8+`{u)R#c_t_A`QEopyhtC`@KFM-@LSgZ>6x30#n<8E?r~3`PS8GY16aT zZ`1uvBfelTlHxW+7A1uCdR&Wl;5e7r1uN~~_jmY8?*WSvZ7 zScFtIJni55i+@4K51FK_E^&}Ayw{dM)% zvQ4EL=g@?6B1vilVrF8*}HbIQ(-=UDQ8eO!O`*{^%H z)fb=N+!wLCD%a=VnMk9@H}B28xFa$^2dbFo}coV|1Z?GLh2*K3&M*Z+}l z&G-A#YR%|fyYl<#h>aDjc6WCuJt$Rwwc+Mmk?CjOF}uHZ{M0`0KJ&S&KQ7G?m0uXq znPgG>%OvjYcdazPxuV*yAD@+e@YC_Ua_z4#&ptamEtJ))4bLojeO=Twuj~Ksvhaty z3;*1IT#YCw@QA&ri>}rJC+;%{YGE z`a{OiTM`yE46jUAif@qH{ii8!NnVFyLb+`LQi0tkm=u@-{RBGMR)E0|3^CczI1n2==;N~QdeKt7^$xFFH3Np zc13J~?6#S=ISYTByPTs7nO+E25#WG4Nq zefK8v&z`60fATMKJvll1c+L9D={q#S9;&(x9myU0$nS_`NjFaORrx^0^;0 z;^h7Y^)Te#-6*>2+gqv0@Bi%loDsNP)vRVOrTQP_XJ z)lQVbSMzy|Kt7{^go7x9JHv(Z-#g#$_hZP|w(DYgWGu@9)rL6?aV#G=7=Ah0f4%G8 z{U%bJP5p`Mt43j&qTNg-ulb_`-#7lsxV}@@>ia91)swcz&u578`f0G?RJXQ6C3Ea0 zd7pm_^K18Wg+JYQY8!)X^)nqW(H*>J=jF6LXSXY#$*^?w+igZm&y;F^+-&_`v)N5o zdS?HPI=ct^{(q~Esek-+Mc{A6;^)g3zpYW$LDZF9Yj%Q*QK7ahz^gZeA?6`deJ2!fKle;6Gd1+Z^c!OT_ z2AYwe|K@0-z^sZ#s9iJ=jLWb zJ4UH;-AN3-|Nay$V%hz=QMmM|=HX(d62pe|f2cz;`?_bE4~ze9|9*8VyF+IDJV%CKyA3Q9^@I55JeUyO zG_hLeFYBC8uf92!XPRnWJ<+^Vp6$B%f7j1JGR?b=&DK7hM%%p!cJ;{_WvI{o+aY+CTRmZBf!+$GYW^?)Qba4)ZT~KVhHY z(@(~`KE3>Q`_o^sE9&PkDi8#h(=)XMFp%`&d!TiU>uW+52U@pXnYv!KoauH>{NB zou$Nlz1Yle4YyV*@0i&A?oOG!MHK%edw-qoryU=8LObRfrJQNFb3LXeq%`Bw!J2%F z@2jt^$*L1!yHziFf~o4)mCTaN%SZ40zj{7?mZ^HcB8Ii0?-Q@o?J<+GyK-X3@B1^1 zZl!z`UvN$CLh9>jk8UwtU-auP|EvQV>*T-Nm)P6Q`?&F^dGKMee&yp+Ee-On{E*=9 zzq|FsI)} zw3RXqrTeNgMCZP~{ax}p>-l^W-K9Pv%SASCX)${BSp0rnp!hNME#O?1?`?3bTwJ$r zn!!@h!W#!3Zfu$$p%Aj))AmYc2z!l0Y_wJh;*o8;@{1u43} z8rR(|x~-dLf8F%wI?kwuZP{N`%+}s+IbZ+d%$A9nM-~Xqu=ytYd4u%dQyD(U}*+!Kp5P z#+py>G^*Qwnjc*rYFDrDt$J(xp5ARN8ud9vy0boA6A8AzJ#hwu?dSWFIF&1iCy=E-mGKS6ZkZT;i=oK)H;PM<`u8g8JB9$ z6}u?Op!bVkf7dzwU;pyB5)>Pp>rw;Oe2TVbJ1~9UdFHo_OP_9CbH8>qLl3(_v|fey zvSsXDTUeBpEu??nx%%(yzF)IePc#-^et&7nmlJ`1e%uwS*_@{P?A)w$rk0Ga3!a|0 zU$HW#)jRm@sTj+^Wp`wEeEk;f>)1R`z9sauUAJb*u}3eD-8$JWEbkC1wu*H8tCy`e*x#yFXd~l>f3< zmRh^z!D7~meaYt|n5JBld7b$C=_>t;+Y)!rXrEtt{{rJ-gVH-8o6k?xt2xc&#hsN@ zT9L5J#Ygz9U4e?jWc!pqexE!xDdro5nUyWNuJHfs9n~^TL;de6;kWtw z&pV%as7?ERyYK#m4L_F(>l>w=>X@Cs_a=*8QS=#gV|znKm#|mXOZqvBzKAcdDLj0u z{M38B{r%Ip?Iy5Jxy`(W!DH8p+1K+LJ2$H>x>GBDeWl#n>V(t$(Pym^I4>NzrnH;M zM56Ab{KgmB;4C3|p7X+yMGtf*X6(FuQb&0HQM-yc|cA^#U<41aGQGcbbX5_4^-JHC( zvch1M-37UT|I^OS{AakMBKqaZb#HrT&*ERc!_ni6apD)2J>NdPj`;ZY|A))Z<|nxx zJYIUx_`}0%+1|5G+}7JW|7h;@yM5AJcN>1Mx>qhaM?K2aY#M)D`j<6RZ^Z8s`5XJ; zXufXVw<(6Y^LDe`o&Tn9rgvJywMgyA-!c1t*9y0Nkrh&QSbe9ieo-lldC|qWw;@f* z=bdwH7ufW5-0!sFl|Q`odaU&7OB0*j6EDr4Y>;^D_KxM3Y(KtZ{JOuBsqko0n?{UJ z&jJ0wO%*zfr_S&H^(T8v<^{Igd3nve+2$%54yVKSnWxR}Q+3FEyTl-sOT|Gry1U}p z%DEa9tct4ja%v$>cfTHJ4O?QtXmxG-`N?{fY=VImc5DfK{Bp7HDj7qVH=HhS(>VGf zVE*Yk-iA+gOkbE8{23kuZ&GGpdd=6c`iL=u#D*hB7O2b%ef4q)sD+*$-e9yKtziB1 z5C8sr?@_&EzxU4}?TY$Kza##?w)#*|YRzO4p#AvvkMn!Dyv^O-mlX%TMOJTEF#w zfRD7jZX9FQR?|F{b^DiIuIJa-&ZrXRUZ5;~cjsHXf-Q0?_495BF5ua)y0|{JI3@bE z-HFJD;(r{yvvs~#7;$J$V7;Qr_-en{-<{w6 zIRmVjpBKsPe%;7@)}xSV3i}CTj?T_?Uws+0e*E*DZh7}}X-!^nolm(9|E%TN^Y#fu z+3#d3P(JGrFBx3J^tC+R@;*}p-vhb$n<8u19JX40rL~aDcVg88mg6^t7V!L98TI&I zgZbxGkyN~YyH;wmKDFQtPK9~YV&%Bjb-^yt9z?$7Ha%B5|!3z#m0Ik z?Af9dsUI%6%bzi<_K>V_;7+-tpyIY?ecVo|lI_MPGLJl%c;m;}V-k#B(=B2jZ<%Cs z>w%y!r~RX&6V;^Vxu1^seK4vtqx0BWY3YSG_Wx!GuCEchP@H~#VcgbV7N5=w3UBo` ze==#Ox6hLL{|o<~S@`oG(-lA2&W{(rdb7NNgzB{bgHJoQ^4*pAUsd_2+`fF?os3@@ z#>Ln2&x=<}Z8tmrbT^!?Uh;zp?_bH44q{c!sCs9RH}O!7MLu4=-SPr^IS7c)({ zpS0`x+9QV_z0~_|-!V_AxJt&{vQ@1==+^t)7rDYdr8@_DW~+am@}<+~^wo3UIqhBv zFAMu({XR8A-~WQIV7~VyX7wHGXUsKMy!h$_JG;Cda}`fdCtJGjo!g;1t5j`n|Bg&K zJI(Z&ug8|A2=*Jda|5073)gFW zUlRTOqfJuY-kJMeFc;5a7iQ+)$#yX~sa$u{y%v!bZ~p|ITA;rB&zmptl}y4LK&|`p z#!MzR_AO^D*z4a?w0Vwb%aeFM<=c{i=P$&~(>!=R@0a>MwI)Fo8|y3o>!Knnr(C{o zXI|H3!8}FwI&)L>4t$*|Ha83J*i68D8%l*2x;#h_PsH@xP+9kR`Z-duQ*H?{`KOK*-6=4K7 zCuV6YP51;JmQhdyjp&{iTgl#+-tNaM&UhP=f^WF3>QQbeIzfTZnoFT ziB+k0t>=Htk-t(PDA4$W^TORSx#!yaD@+SRljdxZQ*raS?t0)hOH(9#pewA{W2@C!mF;w6 zqWBjTJX&#Db5euw>&E5;=xDpt#x?G}o1g!$*34a16502^d`m&st2tK6Oo2`cmqjDX zQ}!rbzW)3F-{MKK+pB9Lw#d1hYzZ_EHept@Z-GS+focdGfDtfR?K}Q423TK7T9>fasjs{yMp#|S8G^ZnrIkUuwE(num zXOejEn|;O7{7(!FQXHUj0sh~=|9!jNehw#@BaZjGyNexUjyS$vc+Gh&vu3{R3Z8_i z{=Y++HeC8%uC+VqTA3Szqh|DO-T*sdo@(m?YRne6nH{Gki(jh^TG!H zMk%CY0WP{aFq!N+7QGi~x%vj-2@Jfy1y(R3{4Wp-+A@*7=V~;<8Y&p~_WQT#nLo3a zoSU%p-_HMi)9j0j@)LiTYr!__b~r2%^q6jVzwh&Nzj+ql@7vGK&y)U~wy3}~n8_sO ziSo{SvhsHf-kte4*FP?FiLBAnU5EcHhwax@dJxN`&X;GmKL=F??fg|c?OMP3+=VBE59%K-A2Rxr{?uUSV^s%JS$)A9W~#@JWxuc3S+Fdo zJXKH}7G{l8ydNCcw!QGrf$8t>2ILoCHuw_6WWsYndD|)3_fPLm+kT}%>DFh-jm}Hj zU^6_*EIZV{oPW>uPUB8WzMwl7&pH9l3lA!mzPS^v{-Ej3d(G;etJYBSH*j3wtuKyV z!o@7edBMP;|Av;TgK}BM6$7Yz!JGz`6^}ha6M{HA8q`{6y@PonUuXiu*JnGH?g;a4 zShhnkv>iH=q!0(%xGN**=)h#6)aKX=Nk#&V69gtO@N%YwPLf~*4V1lvZ9Q2c!z8po zGhN5_t}thSKmU9w*uDry!3hk!T+@wqyE-sk(cPp4+iIcI-@uYlkUWX+z*dHT3@w&0 z&Hcw8z5RdMt%Ap2uParD?M=~*WL`Ae^*|yh%Qc9xd|+#sRd@3`W5vAp`rE@@0(N#W zCd{p7tdYMmx6yb#TY-Lq8G{;Q$M1ahRUUDILJLklUcTGe`@xUS$tQw#I5ka;yRrLT z%>Av;{kOcb;+Vhg*`z|l)U%T~^}oMq@mni3qyBh!+`H99k1oCvHGI;#e4?@Yw$rbo z|KAn6^D|)cX*>POV!@J(KzV<&waM#rBmS{wnZ9q5jjwBRGJoQ4w#GR9+@sT9?=Oy6 z_`1;dUCc?ne%3ekKlr!h{N^p6zVB$qIsWJW`FZEP>9oDCcWCSNC);9=??3MU;N~=58l+!RXml!)$f|p_k~~9nlDVUtlOHjT>H{e<3$r!7VTBv`06xo#{D&Vax23G z-TVG_|2upv@%H-NhUKR`Y=Yj}MLeCl_i>m_%-2O5o~EzfcdKE&`JaYk{k9$7kMrzX zGp}@Z-H}++S&KdIO6^$u#CJyl3DcK3$DT-sscCU|adhdh*w3UPvS7v)hI8t1H3wuoMHhU$s>wL(NaKZE zC4r6xRf*r_+3k#XZyn|C%==!m-M(Xav~AzT=ISF)Hrs7ynHYMnSa#OKt9Iv)Jh3i+ zw?}Y8{F=KRmv`@DYF%5uiRDF4q5k8K?yHW*EL#2lm$m${&AHOaR}QQTRCc&O%Su|d ziq|mt(8i6IK)dr7mPxOP{4Tp~?aXE+*7e@sj!a|lHFFXbc*>&UAUu!ZOQr0`)JVPu zm$>*%7#+A(gEi-`o^$O|IAaKtgT46O=fRA7_#VhKykS`O`&}isgEvF@C1^FXYuQSQHFTMWDyO!$rPm0*i%-PP9eD9}#{r^qe z<@ds5=0=$vXrB7saN1R?wY!t=F4H|0bn{#1@e7-SxpQuQ)6O^;{r9X|%9#m_Tjf?X zOs_6w*)C`>*S4DP@V!}Wn#RwiU+b?u{v>F7nyAj7`&lKj2A68i?PB|y(VzT(o`GJ) zu4UfU9=&%f z7Ri5R$J|NItst-JEK#_7VTZLAKQ4Euk( zto{1akU`{x$n2}kQ%?TQWB)LpSKNkGm9_AWiMT^9LoY*(!1G00=UnyV6%zG(z45{)qOi zzq#}HmE>Gb3G1iMC2#&}$*n5lm#bc3Bv$`R)h=$2ki4%<*Kh4Rtsmc?JNUWTU3z+1 zH`~@8fu%>MKHB(tvTwnM3yEKA=6q%->)0y}2iMC*OPB zouUuNywArTTafZm=|t$9{a5wheO#)L8ZWe3U6JwBzhZ5t*KYlf&fWH!@omFd>FKoz z-#&ec%QH`SWX2nHvpCk%x_uIdiyb59g_h$h>>48X>1^ToH^JeXqn)=(tD^1#k%lij zKNhR~OR;~V?%@7oO;^WGOlr%{1ldW%uKsG#xT$re?hp?u=oa{>yH& zOOlh=h0c9th1QI>PyK)QUHh>a!_mJi8m$`hTT&)Yn8BCz&AWlE)qCb)p94ZYA5ELX z+`0VJq8u|NzwkRHO%Tv+Un^ysbfiC2Zfz^in?$Q0=LM5PQ)d0Ub~@w7iv7&blFm+J z;Jw1vb+BKJ&$+RtvPoz`sP>&y7h~NfZ@UM4Dh+}!dCGP@>MC*LI9_VczUfj_qyJ`g z9@m@Jd5-@snf8=^_$t2pxYp#_|CL|oRD5snleov8EA_eDz~I^3$QNG@1^n4qX!z;r zPOGr(^>@Fv3tsEY?S9~U?OzbrD=SmIu4ByYe2-s6uR4}9eFMvjY3J>ZoOP8D=GyH3 zwSBF%PxWIXi;^EJ1Q*EM&KL7HT`qHDrMeyCslEH3W^Fa8?wtSr#M8e)(!XtP-|C3= zZuqw^QSj6At@0~GpRMm-CC=#Vz-02U^T3MoUB_o~G5=6)e4|~n?vG8SfbH-{=4N@4nyx`#Pp6ic8ez{QKw8VC5U~bf@P5p&pTmveBQ)v);HA zx^&O2Uv#?s@OS&fr?bA!`1X+L@u_7?`^6moFHqxh(B9bd`_!~!vD+_m7FBLyc@gbg zH8Z1f+2a3l=8Lw+_8&AW=#ys?&n^2CAQ#Z6&l-Zil{_|MtekJx?e9j()EHTPZT%o&0Uu0KDYy+f3R~+I5V#<2A1dyWr049q)GQzWALZtz5Ilr90_n zd-ROjDI&%zgATe}WxvHdD?t9yZRS(eag~o{ztpAjl&z2N@U{OZBg`s)g7y60i8=hS zA1pVeIv%wW|K2`LD^4Zs>&l>|MvvaT|J$DAdhqfm4{gQ8@7AWUMisu-zI*ge@~^Xt zRvw$0qk6jN*ZpT<)DXX7<+Ft(Vi0u*{7b*KK=4O9) z@bW}hZLZe6wCt%+jbR~w=D(WC4N2Fc-5T^Fe=aRN8NKrQ>HMTKQzALJ0(Sl1$=lG$ z7}$ALcs_&dpIa(lWPeT5e0}OoNkFU@&!R^ggZ_QrWqLhy9mft=1y!zquJw%!VU`TN zzil#omvC3{`-gmtp~{q1wx zCOCdNU%+W#Ahdw*Oqi&k5mOoKiqxY~#`&8#(?0s2|03CDu6F*&e(QY()#h`>7U=Hg zF=4cCua9dzzyF_^TSMB33HLZm>#u)X^0N3~gBaI^+xePpuTNdsqf<0L_2Mc|?&KKm z7l+TzGi`MFH}RLql>TimxOP2QzuTd$#M+?v~X zYWgG22&OAsmpHE^vc0$v6tO6%R@mb6wF&do4$Vpr)%#zww)5AzxRrBmrc1^P1SKix za%-$joOa-D`2+cYfJ?D?tWSRIevsLFCT@+=r)T?4xts|8WA^Sx6X%poO%pUUG^5(T zz3e&lecHh}uJfg`S8d%tDShTMjj)q4W&fR?hdoBAqg83u%-{W{?SE}ne8T?jwLATpZ|DB0eShCAWwQO^TRXQ;z2?^S zM&532XLO#H$OWcX`VNncPE4@ddz1NxmwzL6!>@iy}xPdf2rr`A7r!N8Ov;VJ*~KD6#jp7QNCi-xPL zaI5Um90hS3U)4LaGp9N;p8LC8WY!j+eebXHb@_BT@A|)X3$KIoG5a5OKaQ2(5ng;( z)9mrT*}tvYf9mY`ms)W9;P!o+Zs3HGkv&=K1dv?mW1o9KFfQSy^uRKD!Gti(OVPtv?{Rc8$pKX&yXB zGLGl(e>`*F;hqIw{Y7@Yon^z8r<{-!*=zO1?9gqmf9lKy)dv>&UqAA?>ACGc9yh)h zO>@k{4RiCu{$KL`EVNpEp}Au1=8x`IaxWh?NK7iRtv88qj1*c>womnx@Jg1TMGRZx ziXWbNt(VjQ+ukp8*w;00$D6-zY`$OGai};}GCMylsBPxc4;7kn-Xbe>btYeXF~97M%d9Ia z1J```s#ausLu9(+g5Q&a`I(n%-21tBdBw%16O(2xWc5;dP|K7kwBSlx&yA9!tnZgG zeErwqp24r;pj?u0MF%#>)94_7NOFAlXNj)zc9_R;j+Tf9waowO6TKR$a*|kY-;sU)^!B{%A^#7}EV?WBW-aKX7sx>8 z14Ym{;DPz~dG7@7IC-yoy;rfl>dC+JLKsi|&d7V3`MpMbcMyy4k5adXoRRBSUV64_ z(KYRt$~!h@&4RkO!(kFE7>eSpDKHXEvwc=$I2o-EU zu->@K&u6Mt?qBIs{-@O}pdp~Zq}hMq+*M!x`PS7%X%CNC-)>(}er(6oBWvd@tMt6d zob}Z^?1DhghTzbEmU(vD)_yHbJw97$tNInqP4IIV4>>pJeSgfp-?Fse_Yxk-P4`Wf zCN$5FYFnWyGT-M;-^?XbWEf9zrLy`8efx07rMza=mYZ%%{HCkko;kUiyM4Lns!-UP z>jRujFO8nvo%gKkO}3xx&&*e6bDgE8Pks}z;0aeiq~qKfj#|zzwGJ$M92>5kKhF>$ zW#GBiZyiJG(moRv&$ZWm;a*cxU|Oi;a52)*a$Wgq&^e#eRKsglw8eb|tqgAf2fD)x z&WJ|$KAFQWr!Y*_w)-ONXbOvZjt++v92T!WmU%U7`Yg0?;Vh>e#ydeFQ9vU@w{4kf$J zBbkh+j8vWW+TOfU1&>a_0^gclst&47rkRLU>j!qT#E8z%;|k~uc<*PmH3k+A3RRpt z^z816Ef89G(Yo?#G2E2*f*hSccv=~@x@at3K0{*8mQ&S_7m6WV;LxQeaOtthT@I(N z{1TnewH!Z1Z0oOD!u9hDa&+5qFJ=6$+)&J^fiEo7m+^MQ}d&)$|PUtzkEHGS!} zmwnTt@4d^=oDU9DkncED<~u~JnfLE3-*kqr+uJ_f3E;f=#9wVHB&&eQkAe&CJ*w|H z&H20RL;+Voy@QxQom%&beKv^rd%(k}y+cE(W%<>m9)b(Ps&y1!<%>Qwbvgg#Px;;*ZZ7YYeH)IYi*99knZA$bUsK2<6QyO7q!eMhBLtL~uDJd? zX8k&!%kPzvx4!F?7hlqaPcoUjllZ0mtLtL}|HU1vrQpFJ$RW*G|9G~lnew?)GX-Sz zIWKJJ-J}I6z93~(L0<#QiejD6NiYY20)UrEXn~o6W;e1}F^h`B+~k#$kb^QuU;@Kd zM$brOu{p{LjIU(8r^2Tg6qu9}nj2VF@Oqq5f_X!MN$G(MBWJ+#h*c^G#|kh?gAR*w u2oggUdk)&` +- :example:`Application examples ` + +Hosts +----- + +There are two hosts, ESP-Bluedroid and ESP-NimBLE. The major difference between them is as follows: + +- Although both support Bluetooth LE, ESP-NimBLE requires less heap and flash size. + +.. only:: esp32 + + - ESP-Bluedroid supports both Classic Bluetooth and Bluetooth LE, while ESP-NimBLE only supports Bluetooth LE. + +ESP-Bluedroid +^^^^^^^^^^^^^ + +ESP-Bluedroid is a modified version of the native Android Bluetooth stack, Bluedroid. It consists of two layers: the Bluetooth Upper Layer (BTU) and the Bluetooth Transport Controller layer (BTC). The BTU layer is responsible for processing bottom layer Bluetooth protocols such as L2CAP, GATT/ATT, SMP, GAP, and other profiles. The BTU layer provides an interface prefixed with "bta". The BTC layer is mainly responsible for providing a supported interface, prefixed with “esp”, to the application layer, processing GATT-based profiles and handling miscellaneous tasks. All the APIs are located in the ESP_API layer. Developers should use the Bluetooth APIs prefixed with “esp". + +.. only:: esp32 + + ESP-Bluedroid for {IDF_TARGET_NAME} supports Classic Bluetooth and Bluetooth LE. + +.. only:: not esp32 + + ESP-Bluedroid for {IDF_TARGET_NAME} supports Bluetooth LE only. Classic Bluetooth is not supported. + +- API references + + - :doc:`../api-reference/bluetooth/bt_common` + - :doc:`Bluetooth LE <../api-reference/bluetooth/bt_le>` + + .. only:: esp32 + + - :doc:`../api-reference/bluetooth/classic_bt` + +- :example:`Application examples ` + +ESP-NimBLE +^^^^^^^^^^ + +ESP-NimBLE is a host stack built on top of the NimBLE host stack developed by Apache Mynewt. The NimBLE host stack is ported for {IDF_TARGET_NAME} chip series and FreeRTOS. The porting layer is kept clean by maintaining all the existing APIs of NimBLE along with a single ESP-NimBLE API for initialization, making it simpler for the application developers. + +ESP-NimBLE supports Bluetooth LE only. Classic Bluetooth is not supported. + +- `Apache Mynewt NimBLE User Guide `__ +- API references + + - `NimBLE API references `__ + - :doc:`ESP-NimBLE API references for initialization <../api-reference/bluetooth/nimble/index>` + +- :example:`Application examples ` + +Profiles +-------- + +Above the host stacks are the profile implementations by Espressif and some common profiles. Depending on your configuration, these profiles can run on ESP-Bluedroid or ESP-NimBLE. + +.. only:: SOC_BLE_MESH_SUPPORTED + + ESP-BLE-MESH + ^^^^^^^^^^^^ + + Built on top of Zephyr Bluetooth Mesh stack, the ESP-BLE-MESH implementation supports device provisioning and node control. It also supports such node features as Proxy, Relay, Low power and Friend. + + - :doc:`ESP-BLE-MESH documentation `: feature list, get started, architecture, description of application examples, frequently asked questions, etc. + - :example:`Application examples ` + +.. only:: SOC_BLUFI_SUPPORTED + + BluFi + ^^^^^ + + The BluFi for {IDF_TARGET_NAME} is a Wi-Fi network configuration function via Bluetooth channel. It provides a secure protocol to pass Wi-Fi configuration and credentials to {IDF_TARGET_NAME}. Using this information, {IDF_TARGET_NAME} can then connect to an AP or establish a softAP. + + - :doc:`BluFi documentation ` + - :example:`Application examples ` + +Applications +------------ + +At the uppermost layer are applications. You can build your own applications on top of the ESP-Bluedroid and ESP-NimBLE stacks, leveraging the provided APIs and profiles to create Bluetooth-enabled applications tailored to specific use cases. \ No newline at end of file diff --git a/docs/en/api-guides/index.rst b/docs/en/api-guides/index.rst index e716ec91a1..4ebda350c0 100644 --- a/docs/en/api-guides/index.rst +++ b/docs/en/api-guides/index.rst @@ -8,6 +8,7 @@ API Guides app_trace startup :SOC_BLUFI_SUPPORTED: blufi + :SOC_BT_SUPPORTED: bluetooth bootloader build-system :SOC_SUPPORT_COEXISTENCE: coexist diff --git a/docs/zh_CN/api-guides/bluetooth.rst b/docs/zh_CN/api-guides/bluetooth.rst new file mode 100644 index 0000000000..36795781ea --- /dev/null +++ b/docs/zh_CN/api-guides/bluetooth.rst @@ -0,0 +1 @@ +.. include:: ../../en/api-guides/bluetooth.rst \ No newline at end of file diff --git a/docs/zh_CN/api-guides/index.rst b/docs/zh_CN/api-guides/index.rst index d963866b71..60f1095c40 100644 --- a/docs/zh_CN/api-guides/index.rst +++ b/docs/zh_CN/api-guides/index.rst @@ -8,6 +8,7 @@ API 指南 app_trace startup :SOC_BLUFI_SUPPORTED: blufi + :SOC_BT_SUPPORTED: bluetooth bootloader build-system :SOC_SUPPORT_COEXISTENCE: coexist