bt: Add option to ena/dis BLE service change registration

Add option to enable/disable automatic registration of BLE Gattc
service change notify. Which sends in parralel
(with user message flow) commands to BLE server which
sometime leads to GATT_BUSY.
(BLE server is able to handle only one command at time)

Closes https://github.com/espressif/esp-idf/issues/1575

Merges https://github.com/espressif/esp-idf/pull/1673
This commit is contained in:
Ing. Jaroslav Safka 2018-02-11 20:49:38 +01:00 committed by Angus Gratton
parent 2bfef060ba
commit 801632d68b
2 changed files with 17 additions and 6 deletions

View file

@ -168,6 +168,15 @@ config BLE_SMP_ENABLE
help help
This option can be close when the app not used the ble security connect. This option can be close when the app not used the ble security connect.
config BLE_ENABLE_SRVCHG_REG
bool "Enable automatic service change notify registration"
depends on BLUEDROID_ENABLED
default y
help
This option enables automatic registration of service change notification
after connect. Be careful, it can may collide with your command sequences
and lead to GATT_BUSY.
config BT_STACK_NO_LOG config BT_STACK_NO_LOG
bool "Close the bluedroid bt stack log print" bool "Close the bluedroid bt stack log print"
depends on BLUEDROID_ENABLED depends on BLUEDROID_ENABLED

View file

@ -1635,7 +1635,9 @@ static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, UINT16 conn_id,
if ((transport == BT_TRANSPORT_LE) && (connected == TRUE) && (p_conn != NULL) \ if ((transport == BT_TRANSPORT_LE) && (connected == TRUE) && (p_conn != NULL) \
&& (p_conn->service_change_ccc_written == FALSE) && (p_conn->ccc_timer_used == FALSE)) { && (p_conn->service_change_ccc_written == FALSE) && (p_conn->ccc_timer_used == FALSE)) {
#ifdef CONFIG_BLE_ENABLE_SRVCHG_REG
result = bta_gattc_register_service_change_notify(conn_id, bda, &start_ccc_timer); result = bta_gattc_register_service_change_notify(conn_id, bda, &start_ccc_timer);
#endif
if (start_ccc_timer == TRUE) { if (start_ccc_timer == TRUE) {
TIMER_LIST_ENT *ccc_timer = &(p_conn->service_change_ccc_timer); TIMER_LIST_ENT *ccc_timer = &(p_conn->service_change_ccc_timer);
/* start a 1000ms timer to wait for service discovery finished */ /* start a 1000ms timer to wait for service discovery finished */