From 6a0e7ee9680be43decf88e7cae611a8d2911c2f1 Mon Sep 17 00:00:00 2001 From: demik Date: Mon, 3 Jun 2024 22:05:37 +0200 Subject: [PATCH] early work to restore ADB to bluetooth functionality --- EDA/SMT/quack-bom.numbers | Bin 188214 -> 190623 bytes main/blue.c | 34 +++++++++--------- main/esp_hid_gap.c | 6 ++-- main/esp_hid_gap.h | 63 ++++++++++++++++++++++++-------- sdkconfig | 73 +++++--------------------------------- 5 files changed, 79 insertions(+), 97 deletions(-) diff --git a/EDA/SMT/quack-bom.numbers b/EDA/SMT/quack-bom.numbers index 5434c1c582558529055ecddb840890d2329c62ea..56e214d0082f6698831907b0376d225131881473 100755 GIT binary patch delta 60590 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%0AFe=X5kAD6yoTap{C1YYhK6bp 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 delta 58111 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

GnAkJ$5n1sxN}*R>bchzV z_Exrf3KGAD4LrtY4HX8&Y+R>WDSXJ~Zns(cp?rX6=m;^WLtVkEZq2JZpG<$>&v&#$cc8b3sr20HdBwJYh4z}xrU~>ca811^Y9?ur&RJ2oidwF zOI%ITYt1WziZi=gloii$0~R+W?mc&tv>bOjCuJFXyXET}9S%#2RZQgMu->zd&D0xJ zg&xTJOML0S*Gj%Oy}?iGM*55BQt-H!TQ!PDP_t(5Feb&uWfrEpAKXZO&E)S@$QL`^ znf5ldJC9yt(ofD;j5&t4K!QtmDb>>vPolp{@65eMQ+l@7EQ3qzq$^Jy-`h;(Gx@=@ z{v=$x*3BaaR6CyL{l}1f>csck4@L41o8=m&S2*!TD>gSNB#it_D&3Y; zcoI5G>2@ZF5=6_^h^i$sUyIV4E7Kz^DJmt6g1qfcGsCC7GAQjtjW37YfxdwIFgGfV z_NVaf{2^nL^}#aBo@?m=>SJu~DVxmhig$L92}Sjg=9F}%W*doyp~xpw3F24sAX2Xr z3@R!MEvvU4IyB-3?{*wKOMCpdVmx>C!1?{1x}X&fzm<=C&AfS(bt|a5?eyZU*QA~D zMhPxA@=~ObmLk@NolcJb&HExR->OT-)K7Vg*&Oc6N3=z|U*G;(*`NGvuC(!6gK+2A zV6e}J^9T-R=Y4?tqV8>ZX;oy_h9h%zaiAwF?T$r~R(%lOe$lB{ z+B)0cMedRoD>*_}r+S~>M$p84yEMXS?@1eGnVs2Tt1J9@Vh4Le_)(r?s7CcL(`a`i z{21amhSnOXrTfJWcH532uVZLu8ajtWwxHi!0aZ$v$kzL8ywJ8$H#CiPNE@JaY} z$=)`{F&XEehLo~#k>2k#Dw%QPf`tK@AA`I6c<6@Xt-U_mD3Em7?3P#L`ubQ^zQjQraLpb#T)jV%8zhyQCa5T6T-Q+c90~#wCd^QFIIq6=FeD*pD~MKO_FvUpwK7Cm{)tut&xwI<%>BoUve$Msii z%pSA+VQ8Y(jVO0ab#mH#s^q-IT^^!v43&IsVMclTHbxF;^!~8O+}xKM1?I-Id$(=t z-A_Zq5i-j!6O7Gaw_fqqH)S^!Z8xH8>88crKDwMOCu*Tz`uVoZi$hJtqENMO9H0F7 zS1#EPHDj6ey;z#2A7@vyySobO1y=eLi+1G`%@0}*&m+ynD28iB=ub};D#7E=A3r9{ z=c#8@`$|A>&K$KW@@v6IE4&rV8GAzUVcd_fL*%q8hqwHhZm&zTu2ByZ7yfl%#qg zHj+%M^gAb$uT~Tq(J#cQ>-#?<$E_mIwbrQy z=11IX=$w%}Vb$9o$S7z|R?g2+o@At`V=}xLfV@|w$vR)r-}{Yq$FZ88DRiiCddV)x z&HpZ4EB*qilGoeMJUlzSxu$6fU1irgmaj`~@VDQ%H5dbYrQ)BV%PPlee06GE%S#zo zGmCd|McIXt)^@4&Z-fWprwdLle^at!f7mLDRzm@Adcv%!&i!$Jo9b?(?-~Q@M~tl(KQ(7Sj|^k zKb|yDgkio&DukU15ypM!o%I!=G96n0xYwcoK_)4$yd^m-E z@8*u>A768ldo~;yw6FW`QQi1LM+u@4^W8B5slW)m0F>l zto@JLKmDKkNmrTAukr_B^<}-r+-D8XN0i>rKRflJ- zri4vu+2BoTy4QCsWL!nQyfF(pdc{}lK2CLD{%d~ul1e?c;(I*TwNnKn>@y9b0mbz6&aR$b# zZ@w&1fyNv6f#Xg)OcHFCG?$x!k69Dm##LvY9scz^Ctsy$!$V!-w1?lXFrwAaW61W5 z-z6gvmV2=_4Cak}4nj1((oa1Uon21g>^VQ2(`}G~XWttYb(;>#vQ)pA01dy|6Tdh3 z-q9PcOK450KU>`>S7#+IDlYWdI)?7ktK2}z%}v)pPFYx&m+xV|^7#@^;&be*i3oo` z>N3LBhq{c{{p9@4?D2^%4#gsgOFf@(6MSLM@9^Rh%&Ki?w5E(DSl-Mo=vW=`ZT0#iVbJA99)m(fiA>SB?89L%Co*xo&@Z-=F+rta1DbUoUmMYV`5+}L=gp|= zCl)yhf~>1GmfLUkug=qTw(%cuA93I%<-hZMt#?_f#MhR+DtFVhbi63{!J)Nh1CoxS z&w_1VzW;g*eFWi7=V7kS?neGGRF6NxKC%&_9oOikw!bXy&%!GJg$FEA=jfsp^*{GQTB}eO@TBo2NWJeN2A@B= z(bjdix5i>Jo?DVWPo3QV=3_3|hs=9Sb)2*{h1Jf5SAKo3_MosQB^w&c81`Pu8kGTI z1UG20G|e4tesU;UE!?jD?7ATEIO-G z-a&KJ_TZ*SktcQmFPT#qQ_s5`kZFCfR(fMtoI~l0!-L$rVvxYs^rg&Ws4cYa=mv<9 z7OE^MR{duyST7pk(n``_-xJ1N6W))fersK6964>?s?O!3F@BBx0?AP6&@n`Cqx^(e zieym#&*s^IBampvRzH5Wb@HzO()24qDA)gzif5k8!JgJPpzJj&XvM)qR<4^lfp8dg zV6N`B&Clb`AebmFvLG~T&VtsCZa#=G@}E6^0Nskydk1eA(DmK#X4A?&D%M?*QSWnXR ziF8Gfzp=%Ob+TjpRD0U<9CRZ@ZHL*_3 zq1)Y(En5byc-`8=Rwz(zquX!^B~VBZJ6 zz*-}S{?`2fS}ll9CW-@(y0CI~o$DC75xy+;=}=}N_S3t9)jZ8Lx-4oZJ}KE01B%%j zrgZh}zGSHCGnaZ#2r-QnUT`IEom#Hv9C}&eOR($7WwGbKkD+hHGTJ-pA13a|ZYJdL zEC`uoYP%A@Yn0EoSI39M)Y=(6s1 zp!qmKTkL-AjQG%pCl&vf@{#_#fXITJEo z$uE>M&v;ec?Hi+^W(x^Mc80y)3KnIxpS}09L42Pw3)1g?#S8HCAHZV^>1eW%nXP?Q zi+1_!+NUr=FoZlT}Pe}k1y)? zRtLvxqgOZX{d^a$*^^WBrcc*_`OWq%x=K3p#&EHBcQ-oJJqjiv)}pN$;O`%M?oWft zQF>?;|F3rStv|a4u6Povg1Ynj&qp_Af%^W{d%*V2Xm=A-wWaFEkW2L6+o2D>5;`6J zs)hey$$!g!%lJ>L5_&V6@ff3=p)vaaCfZD0MzgGI`HSO5Ag{*&CT$-1WX(M8!`a>CI0PIWVK zofQ`ywG^cFTW@iC>qrkA5U*V=&T1SHTO$TN6Bm=8$8dkJbH6iwI7+cDx@hNi+UiL6 z!~q+LnL_sP!-`_X@0G)is~d!nf9PxN5iRgqpNqw` zb{^p;uD)i&4(`}K>cr!z+8=YNAyd|R>j$;oUbXprOab)|KXP4WPcLY*AoOd18t_Be zYkY5Mu#a{R|Vk7$#W!!i|TBRVk;uF02sV&2oGm*kAE#{{0Fd`5YjD+CJ%k5Str zr6g-`Pke7qDtLocrPq@U2Qzm?|5JKd)3fN$VSNl+D}U>XQnxnHAu+qd^Z4sce%!*! zb5W)Qs%3mmZ|V7Wp9IzESF{e?2iI&{%>6z555-s72kuf z?5{fFADVSU4Rsf<8pHaEXm*s^ zlDKfSwd8DG{HH9Pr-`QiYj=suUOaY+cQSk#FvX*k`9p8NA?lX+FR_T7TNbp_9_iq2 zmz!mm5)Dj@Ot=RN3x_OJ2IVhGQE^_U!)KA`(ocWn{xIsb+Pk9Wfup+}Bvi zap7unf*hHEeFjT|olU-}JfF`A=(45$DiO$zoL8tr_Xzn^cDvvas%#TkWGeB@A`v?i_F=Oi18 zv&F#r*+@jFnX^;*U2>Mh+P++fq4OcF2VHRBh3}nzN68?kf&wWpW%kN@ISf@BI|;4*UsJl$XZ86uO~buugvEzq+niMkWfup zdCya$zWduU*I_`FEcerO#Hen0TxmmHKK{*a1!~7EnZqGDRrQQj*IC6qp;0K=R*Rvf zlfM4VR}<~;1y{PBG`S}9A$w*Qri)o(x>zmL#bQl{aMR^`h-~+L=$t4$-8#)ME%zOh z_;MXNB&@1=Z9>)@kIn6vZ}nt1Fa%3E+Gu=HKuh>fHtNI9h7A_Z8UmRi$-NxLn<{cA zfs?V}=B`YW&(F8wo5O-~#vl71EQ>iQHi=^Qj?7Pu zT^46JBtnO2gIXA-PBr(?eVK!HbIJxqTrY!P{pznDnyA0K(h=Syx^FkoC404)0VRs` zLO@~RukQBlZEBKl^nk^ld`io1VR3Bo#$>KRRz1-)q+*r&zO1r52bxrCI<*xQIZWHB z@oLiUi9LgNTtjc65iRXky{k^DMj-ujf|ElbEFJN{69h6oCa04_oc1Wc(B)!Xu@}$G zd=g=)4^nab!MnHTsgu2g*E*L@Y^T4kJz^%ioZ_;>vmLcFkSA%SX*6ltzb&4o)%QDo ztkXGiYyP7={d9;*e5dsCl?30N!EVl~Ti$vI_s0IXASR~zrOW;s{pU);t1jo^A`kjI zX1cfG%|#IBBzYVwuY>Sgs0P#qpbjx>rf_cCI`R!`F{sdl#FA0aH!jC_o7}QJB=l0q zJIlcI-;G8|$2H{8B08vXsD4c)?tfl_S90{xllZK4agnILPk%byMuRwe=BX_{3OtJr zUXyOvTI~Pu1c@BGs8dq1?Vf2+tIziE@BML=M0YjRyPnzg)zvYa7dqSoq@8eE%9gc5 zLQfZO{o&ER{?8`LW;C=kC58RdNruO^`F`p36F6zoCK{2K>Dk#dvsH=DrqD+I_w+mi z%^OvWeb=8@Q0Ru1=V>l9n(VO8K@rVYYv^x{U!$(D5h|Z`V&HCC>@~Hsj zplVV|jc8h{jAnUu`Vr#ikK@_ckhHGkr1d43F^e^FM>v6TX+M`OMbE94`(;XqpSv_U zbm~n@2Ll_Ba@zRp4AoR5tY@f{UiK*kumgeQG$Q;d9f69Qm>II_bNCRQTjL)3& z@IGH0dm{8tUkMJ{XvN}6LhX*E(17CQEP>3H>(+Bml2tiUZ``6RQbl!*1=?uCb?s-S z))92F37C-!rn)n>?fh>qLM`+nq-}EJ1qCLGXxxQCgs7Cid7rh zBpv6{McSTYO}RDLqb5M7-&mxqIo4-nR~9GSO*B1Rv5KC>mBm))Hbe6>P>*t2C0+LW z3LE0LUG`+s-X*7}H&oAQ;OvCA8QeVRf_TCswCV!M6#yF=N>rs$nZDaMBIlaFOW;dGHTKN^kbID4#e^ zoQqBR((Zy-rmd7k3%{_i;;@^}Nb$w}FCM?4+=Kj+b`GIPi| z!{wJ6vIk4fmd{GRpiTdX6no0yu`KSBW!IOVG*lSvQd_DI68+)GVON}FP)}F;f=P-( zFU>t*tddhHD>9w9myhk3yncxsaNwxkFFzqf5yRm|H9?0q53EEhMBXSl-KZ+cUJ2@(cAfs|< z7X#=kVG)rbFUSoi;a3MSlH?-)Tu7oS13;O8f$IHcGAPmrf|2r{<=pi{MQS!d6}>zF z#JI>WI>r>Q2_gta@|%zmhSaN;(rEhtkmMql{EG9dV44C(giT0OQ|fDT1yp_z=l}yt zE+2^T={&x25J(V+FoELIzNid!SQDeoEwH&rs*bq;D#`@AfxQ*C6&EIu5W?~@VvMRn zPze^00{5^IW%NFVTIHc;nNXIiHM(;MIDlenST2vI3;|srWW(kAhQKzie8~uz`~NK8 zhl>P8`sf@JY)5B?zz*=j2A;nn`spx~q)DXmSu3Cs!%)&UJiZ>|2Z`w1Fwhp#_POR1 zQhNZ$J4VBU5Uq@UU;=S8d;~U?f$dO0ACAD&!Jv`1VsG-G?|3E4Bd{@xLtGS*1^FBv ze;wl&xIA^pMgV2A;K4Z9qCTTQ0o5Iag$3LV2e1a$V?YD##dfCJ@iuhF0G_{uX&TNG z=57xK$OA)tRBsGugHn48em5HY79Lv71bXu=(BRhG{Bh2W9Y*F?>{FctF6yr&B$)alyAgymeu@&< zU>EoPbMtaYY#_CTqREHa8}Z3&Z5%8Ao1L?!Igbj4L;{MLa;X_0>f{@31vfcq% tE@*Rj|3*|=7Ha$sC~;ALg(kz8disconnect.dev), dev->disconnect.reason)); +#if CONFIG_BT_BLE_ENABLED esp_hid_ble_gap_adv_start(); +#endif xTaskNotify(t_blue, LED_SLOW, eSetValueWithOverwrite); } static void blue_d_init() { esp_err_t ret; - ret = esp_hid_ble_gap_adv_init(ESP_HID_APPEARANCE_MOUSE, m4848_config.device_name); - ESP_ERROR_CHECK( ret ); - - if ((ret = esp_ble_gatts_register_callback(esp_hidd_gatts_event_handler)) != ESP_OK) { - ESP_LOGE(TAG, "GATTS register callback failed: %d", ret); + if ((ret = esp_bt_gap_register_callback(bt_gap_event_handler)) != ESP_OK) { + ESP_LOGE(TAG, "BT GAP register callback failed: %d", ret); return; } - ESP_ERROR_CHECK(esp_hidd_dev_init(&m4848_config, ESP_HID_TRANSPORT_BLE, blue_d_callback, &hid_dev)); + ESP_ERROR_CHECK(esp_hidd_dev_init(&m4848_config, ESP_HID_TRANSPORT_BT, blue_d_callback, &hid_dev)); xTaskCreate(blue_adb2hid, "ADB2BT", 2 * 1024, NULL, tskIDLE_PRIORITY + 1, &t_adb2hid); } @@ -161,12 +162,16 @@ static void blue_d_start() { ESP_LOGD(TAG, "Bluetooth stack started"); xTaskNotify(t_blue, LED_SLOW, eSetValueWithOverwrite); +#if CONFIG_BT_BLE_ENABLED esp_hid_ble_gap_adv_start(); +#endif } /* * Called by the ADB stack from adb_task_host on mouse activity * Convert the 16bit ADB data to a 3 bytes HID INPUT REPORT matching the m4848 + * + * The format is also BOOT compatible so don't bother to check what mode we are in */ void blue_adb2hid(void *pvParameters) { @@ -335,9 +340,7 @@ void blue_init(void) ESP_LOGD(TAG, "Starting Bluetooth init on core %d", xPortGetCoreID()); ESP_ERROR_CHECK(ret); - /* ESP_BT_MODE_CLASSIC_BT doesn't work, it freezes esp_hidh_init */ - ESP_ERROR_CHECK(esp_hid_gap_init(ESP_BT_MODE_BTDM)); - ESP_ERROR_CHECK(esp_ble_gattc_register_callback(esp_hidh_gattc_event_handler)); + ESP_ERROR_CHECK(esp_hid_gap_init(ESP_BT_MODE_CLASSIC_BT)); esp_log_level_set("event", ESP_LOG_INFO); /* complains about wrong data len on BOOT mode and CCONTROL */ @@ -555,12 +558,11 @@ void blue_scan(void *pvParameters) { esp_hid_scan_result_t *r = results; while (r) { - ESP_LOGI(TAG, "found %s %s device: " ESP_BD_ADDR_STR ", RSSI: %d, NAME: %s", - (r->transport == ESP_HID_TRANSPORT_BLE) ? "BLE" : "BT", - esp_hid_cod_major_str(r->bt.cod.major), - ESP_BD_ADDR_HEX(r->bda), r->rssi, r->name ? r->name : ""); + /* + * as of v1.4.5, esp_hid_gap will print detected devices in console (handle_bt_device_result()) + * just look for something that looks like Bluetooth Classic mouse + */ - /* search for something that looks like Bluetooth Classic mouse */ if (r->transport == ESP_HID_TRANSPORT_BT && strcmp("PERIPHERAL", esp_hid_cod_major_str(r->bt.cod.major)) == 0 && (r->bt.cod.minor & ESP_HID_COD_MIN_MOUSE)) { diff --git a/main/esp_hid_gap.c b/main/esp_hid_gap.c index 5d71844..1e0c396 100644 --- a/main/esp_hid_gap.c +++ b/main/esp_hid_gap.c @@ -381,14 +381,16 @@ static void handle_ble_device_result(struct ble_scan_result_evt_param *scan_rst) } #endif /* CONFIG_BT_BLE_ENABLED */ +#warning here1 #if CONFIG_BT_HID_HOST_ENABLED /* * BT GAP * */ -static void bt_gap_event_handler(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) +#warning here2 +void bt_gap_event_handler(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) { - switch (event) { + switch (event) { case ESP_BT_GAP_DISC_STATE_CHANGED_EVT: { ESP_LOGV(TAG, "BT GAP DISC_STATE %s", (param->disc_st_chg.state == ESP_BT_GAP_DISCOVERY_STARTED) ? "START" : "STOP"); if (param->disc_st_chg.state == ESP_BT_GAP_DISCOVERY_STOPPED) { diff --git a/main/esp_hid_gap.h b/main/esp_hid_gap.h index f2fb240..e04a7a0 100644 --- a/main/esp_hid_gap.h +++ b/main/esp_hid_gap.h @@ -1,31 +1,51 @@ -// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at +/* + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. #ifndef _ESP_HID_GAP_H_ #define _ESP_HID_GAP_H_ +#define HIDH_IDLE_MODE 0x00 +#define HIDH_BLE_MODE 0x01 +#define HIDH_BT_MODE 0x02 +#define HIDH_BTDM_MODE 0x03 + +#if CONFIG_BT_HID_HOST_ENABLED +#if CONFIG_BT_BLE_ENABLED +#define HID_HOST_MODE HIDH_BTDM_MODE +#else +#define HID_HOST_MODE HIDH_BT_MODE +#endif +#elif CONFIG_BT_BLE_ENABLED +#define HID_HOST_MODE HIDH_BLE_MODE +#elif CONFIG_BT_NIMBLE_ENABLED +#define HID_HOST_MODE HIDH_BLE_MODE +#else +#define HID_HOST_MODE HIDH_IDLE_MODE +#endif + #include "esp_err.h" #include "esp_log.h" #include "esp_bt.h" +#if !CONFIG_BT_NIMBLE_ENABLED #include "esp_bt_defs.h" #include "esp_bt_main.h" +#include "esp_gap_bt_api.h" +#endif +#include "esp_hid_common.h" +#if CONFIG_BT_BLE_ENABLED #include "esp_gattc_api.h" #include "esp_gatt_defs.h" #include "esp_gap_ble_api.h" -#include "esp_gap_bt_api.h" -#include "esp_hid_common.h" +#endif + +#if CONFIG_BT_NIMBLE_ENABLED +#include "nimble/ble.h" +#endif #ifdef __cplusplus extern "C" { @@ -33,13 +53,18 @@ extern "C" { typedef struct esp_hidh_scan_result_s { struct esp_hidh_scan_result_s *next; +#if CONFIG_BT_NIMBLE_ENABLED + uint8_t bda[6]; +#else + esp_bd_addr_t bda; +#endif - esp_bd_addr_t bda; const char *name; int8_t rssi; esp_hid_usage_t usage; esp_hid_transport_t transport; //BT, BLE or USB union { + #if !CONFIG_BT_NIMBLE_ENABLED struct { esp_bt_cod_t cod; esp_bt_uuid_t uuid; @@ -48,6 +73,12 @@ typedef struct esp_hidh_scan_result_s { esp_ble_addr_type_t addr_type; uint16_t appearance; } ble; + #else + struct { + uint8_t addr_type; + uint16_t appearance; + } ble; + #endif }; } esp_hid_scan_result_t; @@ -58,8 +89,10 @@ void esp_hid_scan_results_free(esp_hid_scan_result_t *results); esp_err_t esp_hid_ble_gap_adv_init(uint16_t appearance, const char *device_name); esp_err_t esp_hid_ble_gap_adv_start(void); +#if !CONFIG_BT_NIMBLE_ENABLED void print_uuid(esp_bt_uuid_t *uuid); const char *ble_addr_type_str(esp_ble_addr_type_t ble_addr_type); +#endif #ifdef __cplusplus } diff --git a/sdkconfig b/sdkconfig index bce28c1..dbcd9a6 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1,6 +1,6 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) Project Configuration # CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" @@ -410,24 +410,7 @@ CONFIG_BT_HID_ENABLED=y CONFIG_BT_HID_HOST_ENABLED=y # CONFIG_BT_HID_DEVICE_ENABLED is not set CONFIG_BT_SSP_ENABLED=y -CONFIG_BT_BLE_ENABLED=y -CONFIG_BT_GATTS_ENABLE=y -# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set -# CONFIG_BT_BLE_BLUFI_ENABLE is not set -CONFIG_BT_GATT_MAX_SR_PROFILES=8 -CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 -# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0 -# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set -# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set -# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set -CONFIG_BT_GATTC_ENABLE=y -CONFIG_BT_GATTC_MAX_CACHE_CHAR=40 -# CONFIG_BT_GATTC_CACHE_NVS_FLASH is not set -CONFIG_BT_GATTC_CONNECT_RETRY_COUNT=3 -CONFIG_BT_BLE_SMP_ENABLE=y -# CONFIG_BT_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set +# CONFIG_BT_BLE_ENABLED is not set # CONFIG_BT_STACK_NO_LOG is not set # @@ -604,12 +587,11 @@ CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2 # end of BT DEBUG LOG LEVEL CONFIG_BT_ACL_CONNECTIONS=4 -CONFIG_BT_MULTI_CONNECTION_ENBALE=y +# CONFIG_BT_MULTI_CONNECTION_ENBALE is not set # CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST is not set # CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY is not set # CONFIG_BT_BLE_HOST_QUEUE_CONG_CHECK is not set CONFIG_BT_SMP_ENABLE=y -# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30 CONFIG_BT_MAX_DEVICE_NAME_LEN=32 # CONFIG_BT_BLE_RPA_SUPPORTED is not set @@ -621,9 +603,8 @@ CONFIG_BT_BLE_RPA_TIMEOUT=900 # Controller Options # # CONFIG_BTDM_CTRL_MODE_BLE_ONLY is not set -# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set -CONFIG_BTDM_CTRL_MODE_BTDM=y -CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 +CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=y +# CONFIG_BTDM_CTRL_MODE_BTDM is not set CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN=2 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN=0 # CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_HCI is not set @@ -636,11 +617,9 @@ CONFIG_BTDM_CTRL_PCM_POLAR_FALLING_EDGE=y # CONFIG_BTDM_CTRL_PCM_POLAR_RISING_EDGE is not set CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 -CONFIG_BTDM_CTRL_AUTO_LATENCY=y -CONFIG_BTDM_CTRL_AUTO_LATENCY_EFF=y CONFIG_BTDM_CTRL_LEGACY_AUTH_VENDOR_EVT=y CONFIG_BTDM_CTRL_LEGACY_AUTH_VENDOR_EVT_EFF=y -CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=2 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y @@ -658,20 +637,7 @@ CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y # end of MODEM SLEEP Options -CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 -CONFIG_BTDM_BLE_SCAN_DUPL=y -CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set -CONFIG_BTDM_SCAN_DUPL_TYPE=0 -CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=200 -CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0 -# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set -CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 -CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_BTDM_RESERVE_DRAM=0xdb5c CONFIG_BTDM_CTRL_HLI=y # end of Controller Options @@ -1928,14 +1894,6 @@ CONFIG_BTU_TASK_STACK_SIZE=4096 CONFIG_CLASSIC_BT_ENABLED=y # CONFIG_A2DP_ENABLE is not set # CONFIG_HFP_ENABLE is not set -CONFIG_GATTS_ENABLE=y -# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0 -CONFIG_GATTC_ENABLE=y -# CONFIG_GATTC_CACHE_NVS_FLASH is not set -CONFIG_BLE_SMP_ENABLE=y -# CONFIG_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set # CONFIG_HCI_TRACE_LEVEL_NONE is not set # CONFIG_HCI_TRACE_LEVEL_ERROR is not set CONFIG_HCI_TRACE_LEVEL_WARNING=y @@ -2099,32 +2057,19 @@ CONFIG_BLUFI_TRACE_LEVEL_WARNING=y CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2 # CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set CONFIG_SMP_ENABLE=y -# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30 # CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY is not set -# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set -CONFIG_BTDM_CONTROLLER_MODE_BTDM=y -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 +CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY=y +# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN=2 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN=0 -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=2 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y # CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y -CONFIG_BLE_SCAN_DUPLICATE=y -CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set -CONFIG_SCAN_DUPLICATE_TYPE=0 -CONFIG_DUPLICATE_SCAN_CACHE_SIZE=200 -# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set -CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 -CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_ADC2_DISABLE_DAC=y # CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_SW_COEXIST_ENABLE is not set