From 45e59a9f56295b87d62881fba2148c49e9ac785c Mon Sep 17 00:00:00 2001 From: baohongde Date: Wed, 19 Dec 2018 19:42:47 +0800 Subject: [PATCH] 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 | 17 +------- .../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, 14 insertions(+), 56 deletions(-) diff --git a/components/bt/bluedroid/bta/dm/bta_dm_act.c b/components/bt/bluedroid/bta/dm/bta_dm_act.c index 8d34a9d3a..bfc052c2c 100644 --- a/components/bt/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/bluedroid/bta/dm/bta_dm_act.c @@ -2666,9 +2666,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 @@ -2725,6 +2723,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 /******************************************************************************* ** @@ -2744,18 +2743,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)); 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 c378b9386..a5af828e1 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 f0963b469..2d4d29a4f 100644 --- a/components/bt/bluedroid/device/controller.c +++ b/components/bt/bluedroid/device/controller.c @@ -250,10 +250,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 642edf3b1..2dece0f4c 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;