From 9c48528fcc41e0b810dc7bac2345d2ddaa34fcaf Mon Sep 17 00:00:00 2001 From: baohongde Date: Fri, 7 Dec 2018 14:19:47 +0800 Subject: [PATCH 1/2] components/bt: Configure SSP in menuconfig --- components/bt/Kconfig | 19 +++++++++++++------ .../common/include/common/bt_target.h | 5 ++++- components/bt/bluedroid/device/controller.c | 4 ++++ examples/bluetooth/a2dp_sink/main/main.c | 6 ++++++ examples/bluetooth/a2dp_source/main/main.c | 6 ++++++ .../main/example_spp_acceptor_demo.c | 6 ++++++ .../main/example_spp_initiator_demo.c | 6 ++++++ .../main/example_spp_vfs_acceptor_demo.c | 6 ++++++ .../main/example_spp_vfs_initiator_demo.c | 6 ++++++ 9 files changed, 57 insertions(+), 7 deletions(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index c8e63ad9e78..cfe0ff2f293 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -181,16 +181,16 @@ choice SCAN_DUPLICATE_TYPE default SCAN_DUPLICATE_BY_DEVICE_ADDR depends on BLE_SCAN_DUPLICATE help - Scan duplicate have three ways. one is "Scan Duplicate By Device Address", This way is to use advertiser address - filtering. The adv packet of the same address is only allowed to be reported once. Another way is "Scan Duplicate - By Device Address And Advertising Data". This way is to use advertising data and device address filtering. All - different adv packets with the same address are allowed to be reported. The last way is "Scan Duplicate By Advertising + Scan duplicate have three ways. one is "Scan Duplicate By Device Address", This way is to use advertiser address + filtering. The adv packet of the same address is only allowed to be reported once. Another way is "Scan Duplicate + By Device Address And Advertising Data". This way is to use advertising data and device address filtering. All + different adv packets with the same address are allowed to be reported. The last way is "Scan Duplicate By Advertising Data". This way is to use advertising data filtering. All same advertising data only allow to be reported once even though they are from different devices. config SCAN_DUPLICATE_BY_DEVICE_ADDR bool "Scan Duplicate By Device Address" - help + help This way is to use advertiser address filtering. The adv packet of the same address is only allowed to be reported once config SCAN_DUPLICATE_BY_ADV_DATA @@ -202,7 +202,7 @@ config SCAN_DUPLICATE_BY_ADV_DATA config SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR bool "Scan Duplicate By Device Address And Advertising Data" help - This way is to use advertising data and device address filtering. All different adv packets with the same address are + This way is to use advertising data and device address filtering. All different adv packets with the same address are allowed to be reported. endchoice @@ -349,6 +349,13 @@ config HFP_AUDIO_DATA_PATH_HCI This enables the Serial Port Profile endchoice +config BT_SSP_ENABLED + bool "Secure Simple Pairing" + depends on CLASSIC_BT_ENABLED + default y + help + This enables the Secure Simple Pairing. If disable this option, Bluedroid will only support Legacy Pairing + config GATTS_ENABLE bool "Include GATT server module(GATTS)" depends on BLUEDROID_ENABLED && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY) diff --git a/components/bt/bluedroid/common/include/common/bt_target.h b/components/bt/bluedroid/common/include/common/bt_target.h index 5c415a2b6d7..dc360dbedc8 100644 --- a/components/bt/bluedroid/common/include/common/bt_target.h +++ b/components/bt/bluedroid/common/include/common/bt_target.h @@ -52,7 +52,6 @@ #define BTA_SDP_INCLUDED TRUE #define BTA_DM_PM_INCLUDED TRUE #define SDP_INCLUDED TRUE -#define BT_SSP_INCLUDED TRUE #if CONFIG_A2DP_ENABLE #define BTA_AR_INCLUDED TRUE @@ -89,6 +88,10 @@ #endif #endif /* CONFIG_HFP_HF_ENABLE */ +#if CONFIG_BT_SSP_ENABLED +#define BT_SSP_INCLUDED TRUE +#endif /* CONFIG_BT_SSP_ENABLED */ + #endif /* #if CONFIG_CLASSIC_BT_ENABLED */ #ifndef CLASSIC_BT_INCLUDED diff --git a/components/bt/bluedroid/device/controller.c b/components/bt/bluedroid/device/controller.c index f0963b4695d..13160faccb5 100644 --- a/components/bt/bluedroid/device/controller.c +++ b/components/bt/bluedroid/device/controller.c @@ -149,7 +149,11 @@ static void start_up(void) // it told us it supports. We need to do this first before we request the // next page, because the controller's response for page 1 may be // dependent on what we configure from page 0 +#if (BT_SSP_INCLUDED == TRUE) simple_pairing_supported = HCI_SIMPLE_PAIRING_SUPPORTED(features_classic[0].as_array); +#else + simple_pairing_supported = false; +#endif if (simple_pairing_supported) { response = AWAIT_COMMAND(packet_factory->make_write_simple_pairing_mode(HCI_SP_MODE_ENABLED)); packet_parser->parse_generic_command_complete(response); diff --git a/examples/bluetooth/a2dp_sink/main/main.c b/examples/bluetooth/a2dp_sink/main/main.c index 830afe45e47..6a08fdc8a48 100644 --- a/examples/bluetooth/a2dp_sink/main/main.c +++ b/examples/bluetooth/a2dp_sink/main/main.c @@ -114,10 +114,12 @@ void app_main() /* Bluetooth device name, connection mode and profile set up */ bt_app_work_dispatch(bt_av_hdl_stack_evt, BT_APP_EVT_STACK_UP, NULL, 0, NULL); +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing @@ -144,6 +146,8 @@ void bt_app_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(BT_AV_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -154,6 +158,8 @@ void bt_app_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(BT_AV_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: { ESP_LOGI(BT_AV_TAG, "event: %d", event); break; diff --git a/examples/bluetooth/a2dp_source/main/main.c b/examples/bluetooth/a2dp_source/main/main.c index 174448c103b..448a0fec12c 100644 --- a/examples/bluetooth/a2dp_source/main/main.c +++ b/examples/bluetooth/a2dp_source/main/main.c @@ -136,10 +136,12 @@ void app_main() /* Bluetooth device name, connection mode and profile set up */ bt_app_work_dispatch(bt_av_hdl_stack_evt, BT_APP_EVT_STACK_UP, NULL, 0, NULL); +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing @@ -286,6 +288,8 @@ void bt_app_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(BT_AV_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -296,6 +300,8 @@ void bt_app_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(BT_AV_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: { ESP_LOGI(BT_AV_TAG, "event: %d", event); break; diff --git a/examples/bluetooth/bt_spp_acceptor/main/example_spp_acceptor_demo.c b/examples/bluetooth/bt_spp_acceptor/main/example_spp_acceptor_demo.c index 713e94c851d..e73241e300f 100644 --- a/examples/bluetooth/bt_spp_acceptor/main/example_spp_acceptor_demo.c +++ b/examples/bluetooth/bt_spp_acceptor/main/example_spp_acceptor_demo.c @@ -132,6 +132,8 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -142,6 +144,8 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: { ESP_LOGI(SPP_TAG, "event: %d", event); break; @@ -197,10 +201,12 @@ void app_main() return; } +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing diff --git a/examples/bluetooth/bt_spp_initiator/main/example_spp_initiator_demo.c b/examples/bluetooth/bt_spp_initiator/main/example_spp_initiator_demo.c index 37233ee3766..91cf6940bd2 100644 --- a/examples/bluetooth/bt_spp_initiator/main/example_spp_initiator_demo.c +++ b/examples/bluetooth/bt_spp_initiator/main/example_spp_initiator_demo.c @@ -216,6 +216,8 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -226,6 +228,8 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: break; } @@ -282,10 +286,12 @@ void app_main() return; } +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing diff --git a/examples/bluetooth/bt_spp_vfs_acceptor/main/example_spp_vfs_acceptor_demo.c b/examples/bluetooth/bt_spp_vfs_acceptor/main/example_spp_vfs_acceptor_demo.c index 7ab10dcf60d..fdd75cc8696 100644 --- a/examples/bluetooth/bt_spp_vfs_acceptor/main/example_spp_vfs_acceptor_demo.c +++ b/examples/bluetooth/bt_spp_vfs_acceptor/main/example_spp_vfs_acceptor_demo.c @@ -137,6 +137,8 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -147,6 +149,8 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: { ESP_LOGI(SPP_TAG, "event: %d", event); break; @@ -204,10 +208,12 @@ void app_main() return; } +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing diff --git a/examples/bluetooth/bt_spp_vfs_initiator/main/example_spp_vfs_initiator_demo.c b/examples/bluetooth/bt_spp_vfs_initiator/main/example_spp_vfs_initiator_demo.c index 1e309285a19..4a290255369 100644 --- a/examples/bluetooth/bt_spp_vfs_initiator/main/example_spp_vfs_initiator_demo.c +++ b/examples/bluetooth/bt_spp_vfs_initiator/main/example_spp_vfs_initiator_demo.c @@ -199,6 +199,8 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa } break; } + +#if (CONFIG_BT_SSP_ENABLED == true) case ESP_BT_GAP_CFM_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true); @@ -209,6 +211,8 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa case ESP_BT_GAP_KEY_REQ_EVT: ESP_LOGI(SPP_TAG, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!"); break; +#endif + default: break; } @@ -271,10 +275,12 @@ void app_main() return; } +#if (CONFIG_BT_SSP_ENABLED == true) /* Set default parameters for Secure Simple Pairing */ esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE; esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO; esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t)); +#endif /* * Set default parameters for Legacy Pairing From d601ed8023ee9a73200b8f63f53ee9bc72e47ef7 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 11 Dec 2018 19:39:04 +0800 Subject: [PATCH 2/2] components/bt: Fix two bugs about pairing 1. Fix Legacy Pairing failed without remote device name 2. Fix discovery no device after disabling SSP --- components/bt/bluedroid/bta/dm/bta_dm_act.c | 25 +++-------- .../btc/profile/std/gap/btc_gap_bt.c | 2 +- components/bt/bluedroid/device/controller.c | 8 ++-- components/bt/bluedroid/stack/btm/btm_sec.c | 43 +++---------------- 4 files changed, 18 insertions(+), 60 deletions(-) diff --git a/components/bt/bluedroid/bta/dm/bta_dm_act.c b/components/bt/bluedroid/bta/dm/bta_dm_act.c index 86779c78c05..129e6a06c00 100644 --- a/components/bt/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/bluedroid/bta/dm/bta_dm_act.c @@ -1160,7 +1160,7 @@ void bta_dm_loc_oob(tBTA_DM_MSG *p_data) ** Returns void ** *******************************************************************************/ -void bta_dm_oob_reply(tBTA_DM_MSG *p_data) +void bta_dm_oob_reply(tBTA_DM_MSG *p_data) { BTM_BleOobDataReply(p_data->oob_reply.bd_addr, BTM_SUCCESS, p_data->oob_reply.len, p_data->oob_reply.value); } @@ -2681,9 +2681,7 @@ static UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NA } } - - - +#if (BT_SSP_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_pinname_cback @@ -2740,6 +2738,7 @@ static UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NA bta_dm_cb.p_sec_cback(event, &sec_event); } } +#endif /// BT_SSP_INCLUDED == TRUE /******************************************************************************* ** @@ -2759,18 +2758,6 @@ static UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_ return BTM_NOT_AUTHORIZED; } - /* If the device name is not known, save bdaddr and devclass and initiate a name request */ - if (bd_name[0] == 0) { - bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT; - bdcpy(bta_dm_cb.pin_bd_addr, bd_addr); - BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class); - if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) { - return BTM_CMD_STARTED; - } - - APPL_TRACE_WARNING(" bta_dm_pin_cback() -> Failed to start Remote Name Request "); - } - bdcpy(sec_event.pin_req.bd_addr, bd_addr); BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); BCM_STRNCPY_S((char *)sec_event.pin_req.bd_name, sizeof(BD_NAME), (char *)bd_name, (BD_NAME_LEN - 1)); @@ -4632,12 +4619,12 @@ void bta_dm_ble_set_scan_fil_params(tBTA_DM_MSG *p_data) status = BTA_SUCCESS; } else { - APPL_TRACE_ERROR("%s(), fail to set scan params.", __func__); + APPL_TRACE_ERROR("%s(), fail to set scan params.", __func__); } if (p_data->ble_set_scan_fil_params.scan_param_setup_cback != NULL) { p_data->ble_set_scan_fil_params.scan_param_setup_cback(p_data->ble_set_scan_fil_params.client_if, status); } - + } @@ -4902,7 +4889,7 @@ void bta_dm_ble_set_adv_params_all (tBTA_DM_MSG *p_data) } if(p_data->ble_set_adv_params_all.p_start_adv_cback) { (*p_data->ble_set_adv_params_all.p_start_adv_cback)(status); - } + } } /******************************************************************************* diff --git a/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c b/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c index c378b938694..a5af828e1a5 100644 --- a/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c +++ b/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c @@ -750,7 +750,7 @@ void btc_gap_bt_arg_deep_free(btc_msg_t *msg) break; #endif ///BT_SSP_INCLUDED == TRUE default: - BTC_TRACE_ERROR("Unhandled deep copy %d\n", msg->act); + BTC_TRACE_ERROR("Unhandled deep copy %d, arg: %p\n", msg->act, arg); break; } } diff --git a/components/bt/bluedroid/device/controller.c b/components/bt/bluedroid/device/controller.c index 13160faccb5..b4fec286c3a 100644 --- a/components/bt/bluedroid/device/controller.c +++ b/components/bt/bluedroid/device/controller.c @@ -254,10 +254,10 @@ static void start_up(void) } #endif - if (simple_pairing_supported) { - response = AWAIT_COMMAND(packet_factory->make_set_event_mask(&CLASSIC_EVENT_MASK)); - packet_parser->parse_generic_command_complete(response); - } + + response = AWAIT_COMMAND(packet_factory->make_set_event_mask(&CLASSIC_EVENT_MASK)); + packet_parser->parse_generic_command_complete(response); + #if (BTM_SCO_HCI_INCLUDED == TRUE) response = AWAIT_COMMAND(packet_factory->make_write_sync_flow_control_enable(1)); diff --git a/components/bt/bluedroid/stack/btm/btm_sec.c b/components/bt/bluedroid/stack/btm/btm_sec.c index 642edf3b184..2dece0f4c9d 100644 --- a/components/bt/bluedroid/stack/btm/btm_sec.c +++ b/components/bt/bluedroid/stack/btm/btm_sec.c @@ -5030,42 +5030,13 @@ void btm_sec_pin_code_request (UINT8 *p_bda) memcpy (p_cb->connecting_bda, p_bda, BD_ADDR_LEN); memcpy (p_cb->connecting_dc, p_dev_rec->dev_class, DEV_CLASS_LEN); - /* Check if the name is known */ - /* Even if name is not known we might not be able to get one */ - /* this is the case when we are already getting something from the */ - /* device, so HCI level is flow controlled */ - /* Also cannot send remote name request while paging, i.e. connection is not completed */ - if (p_dev_rec->sec_flags & BTM_SEC_NAME_KNOWN) { - BTM_TRACE_EVENT ("btm_sec_pin_code_request going for callback\n"); - - btm_cb.pairing_flags |= BTM_PAIR_FLAGS_PIN_REQD; - if (p_cb->api.p_pin_callback) { - (*p_cb->api.p_pin_callback) (p_bda, p_dev_rec->dev_class, p_dev_rec->sec_bd_name, - (p_dev_rec->p_cur_service == NULL) ? FALSE - : (p_dev_rec->p_cur_service->security_flags - & BTM_SEC_IN_MIN_16_DIGIT_PIN)); - } - } else { - BTM_TRACE_EVENT ("btm_sec_pin_code_request going for remote name\n"); - - /* We received PIN code request for the device with unknown name */ - /* it is not user friendly just to ask for the PIN without name */ - /* try to get name at first */ - if (!btsnd_hcic_rmt_name_req (p_dev_rec->bd_addr, - HCI_PAGE_SCAN_REP_MODE_R1, - HCI_MANDATARY_PAGE_SCAN_MODE, 0)) { - p_dev_rec->sec_flags |= BTM_SEC_NAME_KNOWN; - p_dev_rec->sec_bd_name[0] = 'f'; - p_dev_rec->sec_bd_name[1] = '0'; - BTM_TRACE_ERROR ("can not send rmt_name_req?? fake a name and call callback\n"); - - btm_cb.pairing_flags |= BTM_PAIR_FLAGS_PIN_REQD; - if (p_cb->api.p_pin_callback) - (*p_cb->api.p_pin_callback) (p_bda, p_dev_rec->dev_class, - p_dev_rec->sec_bd_name, (p_dev_rec->p_cur_service == NULL) ? FALSE - : (p_dev_rec->p_cur_service->security_flags - & BTM_SEC_IN_MIN_16_DIGIT_PIN)); - } + BTM_TRACE_EVENT ("btm_sec_pin_code_request going for callback\n"); + btm_cb.pairing_flags |= BTM_PAIR_FLAGS_PIN_REQD; + if (p_cb->api.p_pin_callback) { + (*p_cb->api.p_pin_callback) (p_bda, p_dev_rec->dev_class, p_dev_rec->sec_bd_name, + (p_dev_rec->p_cur_service == NULL) ? FALSE + : (p_dev_rec->p_cur_service->security_flags + & BTM_SEC_IN_MIN_16_DIGIT_PIN)); } } return;