Loading system/bta/gatt/bta_gattc_act.c +7 −3 Original line number Diff line number Diff line Loading @@ -851,9 +851,10 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS statu void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) { APPL_TRACE_DEBUG("Discovery cancel conn_id=%d",p_clcb->bta_conn_id); if (p_clcb->disc_active) bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR); bta_gattc_sm_execute(p_clcb, BTA_GATTC_API_CLOSE_EVT, p_data); else p_clcb->state = BTA_GATTC_CONN_ST; } /******************************************************************************* ** Loading Loading @@ -978,6 +979,8 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) APPL_TRACE_ERROR("discovery on server failed"); bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); } else p_clcb->disc_active = TRUE; } else { Loading Loading @@ -1015,6 +1018,7 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, TRUE); #endif p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; p_clcb->disc_active = FALSE; if (p_clcb->status != GATT_SUCCESS) { Loading system/bta/gatt/bta_gattc_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ typedef struct #define BTA_GATTC_REQ_WAITING 0x10 UINT8 auto_update; /* auto update is waiting */ BOOLEAN disc_active; BOOLEAN in_use; tBTA_GATTC_STATE state; tBTA_GATT_STATUS status; Loading system/bta/hh/bta_hh_le.c 100755 → 100644 +27 −8 Original line number Diff line number Diff line Loading @@ -1278,6 +1278,31 @@ void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) bta_hh_start_security(p_cb, NULL); } /******************************************************************************* ** ** Function bta_hh_clear_service_cache ** ** Description clear the service cache ** ** Parameters: ** *******************************************************************************/ void bta_hh_clear_service_cache(tBTA_HH_DEV_CB *p_cb) { UINT8 i; tBTA_HH_LE_HID_SRVC *p_hid_srvc = &p_cb->hid_srvc[0]; p_cb->app_id = 0; p_cb->total_srvc = 0; p_cb->dscp_info.descriptor.dsc_list = NULL; for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++) { utl_freebuf((void **)&p_hid_srvc->rpt_map); memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); } } /******************************************************************************* ** ** Function bta_hh_start_security Loading Loading @@ -1325,6 +1350,7 @@ void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) { sec_flag = BTM_BLE_SEC_ENCRYPT_NO_MITM; p_cb->status = BTA_HH_ERR_AUTH_FAILED; bta_hh_clear_service_cache(p_cb); BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, &sec_flag); } /* otherwise let it go through */ Loading Loading @@ -2307,18 +2333,11 @@ void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) { tBTA_HH_CONN conn_dat ; tBTA_HH_LE_HID_SRVC *p_hid_srvc = &p_cb->hid_srvc[0]; UINT8 i; /* open failure in the middle of service discovery, clear all services */ if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS) { p_cb->total_srvc = 0; p_cb->dscp_info.descriptor.dsc_list = NULL; for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++) { utl_freebuf((void **)&p_hid_srvc->rpt_map); memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); } bta_hh_clear_service_cache(p_cb); } p_cb->disc_active = BTA_HH_LE_DISC_NONE; Loading system/stack/btm/btm_ble_bgconn.c +2 −3 Original line number Diff line number Diff line Loading @@ -192,7 +192,6 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr { /* look up the sec device record, and find the address */ tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; BOOLEAN started = FALSE; UINT8 wl_state = p_cb->wl_state; if ((to_add && p_cb->num_empty_filter == 0) || Loading @@ -200,7 +199,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr { BTM_TRACE_ERROR("WL full or empty, unable to update to WL. num_entry available: %d", p_cb->num_empty_filter); return started; return FALSE; } btm_suspend_wl_activity(wl_state); Loading @@ -210,7 +209,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr btm_resume_wl_activity(wl_state); return started; return TRUE; } /******************************************************************************* ** Loading system/stack/btm/btm_sec.c +3 −0 Original line number Diff line number Diff line Loading @@ -4191,6 +4191,9 @@ void btm_sec_encrypt_change (UINT16 handle, UINT8 status, UINT8 encr_enable) if (p_acl && p_acl->transport == BT_TRANSPORT_LE) { if (status == HCI_ERR_KEY_MISSING || status == HCI_ERR_AUTH_FAILURE ||status == HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE) p_dev_rec->sec_flags &= ~ (BTM_SEC_LE_LINK_KEY_KNOWN); btm_ble_link_encrypted(p_dev_rec->bd_addr, encr_enable); return; } Loading Loading
system/bta/gatt/bta_gattc_act.c +7 −3 Original line number Diff line number Diff line Loading @@ -851,9 +851,10 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS statu void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) { APPL_TRACE_DEBUG("Discovery cancel conn_id=%d",p_clcb->bta_conn_id); if (p_clcb->disc_active) bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR); bta_gattc_sm_execute(p_clcb, BTA_GATTC_API_CLOSE_EVT, p_data); else p_clcb->state = BTA_GATTC_CONN_ST; } /******************************************************************************* ** Loading Loading @@ -978,6 +979,8 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) APPL_TRACE_ERROR("discovery on server failed"); bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); } else p_clcb->disc_active = TRUE; } else { Loading Loading @@ -1015,6 +1018,7 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, TRUE); #endif p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; p_clcb->disc_active = FALSE; if (p_clcb->status != GATT_SUCCESS) { Loading
system/bta/gatt/bta_gattc_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ typedef struct #define BTA_GATTC_REQ_WAITING 0x10 UINT8 auto_update; /* auto update is waiting */ BOOLEAN disc_active; BOOLEAN in_use; tBTA_GATTC_STATE state; tBTA_GATT_STATUS status; Loading
system/bta/hh/bta_hh_le.c 100755 → 100644 +27 −8 Original line number Diff line number Diff line Loading @@ -1278,6 +1278,31 @@ void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) bta_hh_start_security(p_cb, NULL); } /******************************************************************************* ** ** Function bta_hh_clear_service_cache ** ** Description clear the service cache ** ** Parameters: ** *******************************************************************************/ void bta_hh_clear_service_cache(tBTA_HH_DEV_CB *p_cb) { UINT8 i; tBTA_HH_LE_HID_SRVC *p_hid_srvc = &p_cb->hid_srvc[0]; p_cb->app_id = 0; p_cb->total_srvc = 0; p_cb->dscp_info.descriptor.dsc_list = NULL; for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++) { utl_freebuf((void **)&p_hid_srvc->rpt_map); memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); } } /******************************************************************************* ** ** Function bta_hh_start_security Loading Loading @@ -1325,6 +1350,7 @@ void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) { sec_flag = BTM_BLE_SEC_ENCRYPT_NO_MITM; p_cb->status = BTA_HH_ERR_AUTH_FAILED; bta_hh_clear_service_cache(p_cb); BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, &sec_flag); } /* otherwise let it go through */ Loading Loading @@ -2307,18 +2333,11 @@ void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) { tBTA_HH_CONN conn_dat ; tBTA_HH_LE_HID_SRVC *p_hid_srvc = &p_cb->hid_srvc[0]; UINT8 i; /* open failure in the middle of service discovery, clear all services */ if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS) { p_cb->total_srvc = 0; p_cb->dscp_info.descriptor.dsc_list = NULL; for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++) { utl_freebuf((void **)&p_hid_srvc->rpt_map); memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); } bta_hh_clear_service_cache(p_cb); } p_cb->disc_active = BTA_HH_LE_DISC_NONE; Loading
system/stack/btm/btm_ble_bgconn.c +2 −3 Original line number Diff line number Diff line Loading @@ -192,7 +192,6 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr { /* look up the sec device record, and find the address */ tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; BOOLEAN started = FALSE; UINT8 wl_state = p_cb->wl_state; if ((to_add && p_cb->num_empty_filter == 0) || Loading @@ -200,7 +199,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr { BTM_TRACE_ERROR("WL full or empty, unable to update to WL. num_entry available: %d", p_cb->num_empty_filter); return started; return FALSE; } btm_suspend_wl_activity(wl_state); Loading @@ -210,7 +209,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr btm_resume_wl_activity(wl_state); return started; return TRUE; } /******************************************************************************* ** Loading
system/stack/btm/btm_sec.c +3 −0 Original line number Diff line number Diff line Loading @@ -4191,6 +4191,9 @@ void btm_sec_encrypt_change (UINT16 handle, UINT8 status, UINT8 encr_enable) if (p_acl && p_acl->transport == BT_TRANSPORT_LE) { if (status == HCI_ERR_KEY_MISSING || status == HCI_ERR_AUTH_FAILURE ||status == HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE) p_dev_rec->sec_flags &= ~ (BTM_SEC_LE_LINK_KEY_KNOWN); btm_ble_link_encrypted(p_dev_rec->bd_addr, encr_enable); return; } Loading