Loading system/stack/btm/btm_ble_batchscan.c +54 −35 Original line number Diff line number Diff line Loading @@ -361,19 +361,8 @@ void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } if (BTM_SUCCESS == status && BTM_BLE_SCAN_DISABLE_CALLED == cur_state) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLED_STATE; else if (BTM_BLE_SCAN_DISABLE_CALLED == cur_state) { BTM_TRACE_ERROR("SCAN_ENB_DISAB_CUST_FEATURE - Invalid state after disabled"); ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEAT status = %d, state: %d,evt=%d", status, ble_batchscan_cb.cur_state, cb_evt); /* Clear the queues here */ if(BTM_SUCCESS == status && BTM_BLE_SCAN_DISABLE_CALLED == cur_state) btm_ble_batchscan_cleanup(); if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); Loading @@ -392,6 +381,20 @@ void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) case BTM_BLE_BATCH_SCAN_SET_PARAMS: { BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_SET_PARAMS status = %d,evt=%d", status, cb_evt); if (BTM_BLE_SCAN_DISABLE_CALLED == cur_state) { if (BTM_SUCCESS == status) { ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLED_STATE; } else { BTM_TRACE_ERROR("BTM_BLE_BATCH_SCAN_SET_PARAMS - Invalid state after disabled"); ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } } if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); break; Loading Loading @@ -536,20 +539,22 @@ tBTM_STATUS btm_ble_set_batchscan_param(tBTM_BLE_BATCH_SCAN_MODE scan_mode, ** Returns status ** *******************************************************************************/ tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN enable_disable) tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN should_enable) { tBTM_STATUS status = BTM_NO_RESOURCES; UINT8 enb_disble = 0x01; UINT8 shld_enable = 0x01; UINT8 enable_param[BTM_BLE_BATCH_SCAN_ENB_DISB_LEN], *pp_enable; if (!enable_disable) enb_disble = 0x00; if (!should_enable) shld_enable = 0x00; if (should_enable) { pp_enable = enable_param; memset(enable_param, 0, BTM_BLE_BATCH_SCAN_ENB_DISB_LEN); UINT8_TO_STREAM (pp_enable, BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE); UINT8_TO_STREAM (pp_enable, enb_disble); UINT8_TO_STREAM (pp_enable, shld_enable); if ((status = BTM_VendorSpecificCommand(HCI_BLE_BATCH_SCAN_OCF, BTM_BLE_BATCH_SCAN_ENB_DISB_LEN, enable_param, Loading @@ -559,8 +564,18 @@ tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN enable_disable) BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); return BTM_ILLEGAL_VALUE; } } else if ((status = btm_ble_set_batchscan_param(BTM_BLE_BATCH_SCAN_MODE_DISABLE, ble_batchscan_cb.scan_interval, ble_batchscan_cb.scan_window, ble_batchscan_cb.addr_type, ble_batchscan_cb.discard_rule)) != BTM_CMD_STARTED) { status = BTM_MODE_UNSUPPORTED; BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); return BTM_ILLEGAL_VALUE; } if (enable_disable) if (should_enable) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; else ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLE_CALLED; Loading Loading @@ -629,6 +644,7 @@ tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max, UINT8 batch_scan_ status = btm_ble_enable_disable_batchscan(TRUE); if (BTM_CMD_STARTED != status) return status; ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, BTM_BLE_SCAN_ENABLE_CALLED, 0, ref_value); Loading Loading @@ -693,8 +709,8 @@ tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, && (BTM_BLE_DISCARD_OLD_ITEMS == discard_rule || BTM_BLE_DISCARD_LOWER_RSSI_ITEMS == discard_rule)) { if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLE_CALLED == ble_batchscan_cb.cur_state) { status = btm_ble_enable_disable_batchscan(TRUE); Loading @@ -705,6 +721,10 @@ tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, } ble_batchscan_cb.scan_mode = scan_mode; ble_batchscan_cb.scan_interval = scan_interval; ble_batchscan_cb.scan_window = scan_window; ble_batchscan_cb.addr_type = addr_type; ble_batchscan_cb.discard_rule = discard_rule; /* This command starts batch scanning, if enabled */ status = btm_ble_set_batchscan_param(scan_mode, scan_interval, scan_window, addr_type, discard_rule); Loading Loading @@ -755,7 +775,7 @@ tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value) if (BTM_CMD_STARTED == status) { /* The user needs to be provided scan disable event */ btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_SET_PARAMS, BTM_BLE_SCAN_DISABLE_CALLED, BTM_BLE_BATCH_SCAN_DISABLE_EVT, ref_value); } Loading Loading @@ -802,10 +822,9 @@ tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_BATCH_SCAN_MODE scan_mode, if (0 == read_scan_mode) read_scan_mode = ble_batchscan_cb.scan_mode & BTM_BLE_BATCH_SCAN_MODE_PASS; /* Check only for modes, as scan reports can be called after disabling batch scan */ if (read_scan_mode > 0 && (BTM_BLE_BATCH_SCAN_MODE_PASS == scan_mode || BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode) && (BTM_BLE_SCAN_ENABLED_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_ENABLE_CALLED == ble_batchscan_cb.cur_state)) BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode)) { status = btm_ble_batchscan_enq_rep_q(scan_mode, ref_value); if (BTM_SUCCESS == status) Loading system/stack/include/btm_ble_api.h +12 −7 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ typedef UINT32 tBTM_BLE_REF_VALUE; #define BTM_BLE_SCAN_MODE_NONE 0xff typedef UINT8 tBTM_BLE_SCAN_MODE; #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0 #define BTM_BLE_BATCH_SCAN_MODE_PASS 1 #define BTM_BLE_BATCH_SCAN_MODE_ACTI 2 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3 Loading Loading @@ -493,6 +494,13 @@ typedef enum BTM_BLE_SCAN_DISABLED_STATE=4 }tBTM_BLE_BATCH_SCAN_STATE; enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; typedef UINT8 tBTM_BLE_DISCARD_RULE; typedef struct { UINT8 sub_code[BTM_BLE_BATCH_SCAN_MAX]; Loading @@ -517,6 +525,10 @@ typedef struct { tBTM_BLE_BATCH_SCAN_STATE cur_state; tBTM_BLE_BATCH_SCAN_MODE scan_mode; UINT32 scan_interval; UINT32 scan_window; tBLE_ADDR_TYPE addr_type; tBTM_BLE_DISCARD_RULE discard_rule; tBTM_BLE_BATCH_SCAN_OPQ op_q; tBTM_BLE_BATCH_SCAN_REP_Q main_rep_q; tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback; Loading Loading @@ -750,13 +762,6 @@ enum }; typedef UINT8 tBTM_BLE_CONN_TYPE; enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; typedef UINT8 tBTM_BLE_DISCARD_RULE; typedef void (tBTM_BLE_TRACK_ADV_CBACK)(int filt_index, tBLE_ADDR_TYPE addr_type, BD_ADDR bda, int adv_state, tBTM_BLE_REF_VALUE ref_value); Loading Loading
system/stack/btm/btm_ble_batchscan.c +54 −35 Original line number Diff line number Diff line Loading @@ -361,19 +361,8 @@ void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } if (BTM_SUCCESS == status && BTM_BLE_SCAN_DISABLE_CALLED == cur_state) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLED_STATE; else if (BTM_BLE_SCAN_DISABLE_CALLED == cur_state) { BTM_TRACE_ERROR("SCAN_ENB_DISAB_CUST_FEATURE - Invalid state after disabled"); ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEAT status = %d, state: %d,evt=%d", status, ble_batchscan_cb.cur_state, cb_evt); /* Clear the queues here */ if(BTM_SUCCESS == status && BTM_BLE_SCAN_DISABLE_CALLED == cur_state) btm_ble_batchscan_cleanup(); if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); Loading @@ -392,6 +381,20 @@ void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) case BTM_BLE_BATCH_SCAN_SET_PARAMS: { BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_SET_PARAMS status = %d,evt=%d", status, cb_evt); if (BTM_BLE_SCAN_DISABLE_CALLED == cur_state) { if (BTM_SUCCESS == status) { ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLED_STATE; } else { BTM_TRACE_ERROR("BTM_BLE_BATCH_SCAN_SET_PARAMS - Invalid state after disabled"); ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; } } if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); break; Loading Loading @@ -536,20 +539,22 @@ tBTM_STATUS btm_ble_set_batchscan_param(tBTM_BLE_BATCH_SCAN_MODE scan_mode, ** Returns status ** *******************************************************************************/ tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN enable_disable) tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN should_enable) { tBTM_STATUS status = BTM_NO_RESOURCES; UINT8 enb_disble = 0x01; UINT8 shld_enable = 0x01; UINT8 enable_param[BTM_BLE_BATCH_SCAN_ENB_DISB_LEN], *pp_enable; if (!enable_disable) enb_disble = 0x00; if (!should_enable) shld_enable = 0x00; if (should_enable) { pp_enable = enable_param; memset(enable_param, 0, BTM_BLE_BATCH_SCAN_ENB_DISB_LEN); UINT8_TO_STREAM (pp_enable, BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE); UINT8_TO_STREAM (pp_enable, enb_disble); UINT8_TO_STREAM (pp_enable, shld_enable); if ((status = BTM_VendorSpecificCommand(HCI_BLE_BATCH_SCAN_OCF, BTM_BLE_BATCH_SCAN_ENB_DISB_LEN, enable_param, Loading @@ -559,8 +564,18 @@ tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN enable_disable) BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); return BTM_ILLEGAL_VALUE; } } else if ((status = btm_ble_set_batchscan_param(BTM_BLE_BATCH_SCAN_MODE_DISABLE, ble_batchscan_cb.scan_interval, ble_batchscan_cb.scan_window, ble_batchscan_cb.addr_type, ble_batchscan_cb.discard_rule)) != BTM_CMD_STARTED) { status = BTM_MODE_UNSUPPORTED; BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); return BTM_ILLEGAL_VALUE; } if (enable_disable) if (should_enable) ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; else ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLE_CALLED; Loading Loading @@ -629,6 +644,7 @@ tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max, UINT8 batch_scan_ status = btm_ble_enable_disable_batchscan(TRUE); if (BTM_CMD_STARTED != status) return status; ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, BTM_BLE_SCAN_ENABLE_CALLED, 0, ref_value); Loading Loading @@ -693,8 +709,8 @@ tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, && (BTM_BLE_DISCARD_OLD_ITEMS == discard_rule || BTM_BLE_DISCARD_LOWER_RSSI_ITEMS == discard_rule)) { if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_DISABLE_CALLED == ble_batchscan_cb.cur_state) { status = btm_ble_enable_disable_batchscan(TRUE); Loading @@ -705,6 +721,10 @@ tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, } ble_batchscan_cb.scan_mode = scan_mode; ble_batchscan_cb.scan_interval = scan_interval; ble_batchscan_cb.scan_window = scan_window; ble_batchscan_cb.addr_type = addr_type; ble_batchscan_cb.discard_rule = discard_rule; /* This command starts batch scanning, if enabled */ status = btm_ble_set_batchscan_param(scan_mode, scan_interval, scan_window, addr_type, discard_rule); Loading Loading @@ -755,7 +775,7 @@ tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value) if (BTM_CMD_STARTED == status) { /* The user needs to be provided scan disable event */ btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_SET_PARAMS, BTM_BLE_SCAN_DISABLE_CALLED, BTM_BLE_BATCH_SCAN_DISABLE_EVT, ref_value); } Loading Loading @@ -802,10 +822,9 @@ tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_BATCH_SCAN_MODE scan_mode, if (0 == read_scan_mode) read_scan_mode = ble_batchscan_cb.scan_mode & BTM_BLE_BATCH_SCAN_MODE_PASS; /* Check only for modes, as scan reports can be called after disabling batch scan */ if (read_scan_mode > 0 && (BTM_BLE_BATCH_SCAN_MODE_PASS == scan_mode || BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode) && (BTM_BLE_SCAN_ENABLED_STATE == ble_batchscan_cb.cur_state || BTM_BLE_SCAN_ENABLE_CALLED == ble_batchscan_cb.cur_state)) BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode)) { status = btm_ble_batchscan_enq_rep_q(scan_mode, ref_value); if (BTM_SUCCESS == status) Loading
system/stack/include/btm_ble_api.h +12 −7 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ typedef UINT32 tBTM_BLE_REF_VALUE; #define BTM_BLE_SCAN_MODE_NONE 0xff typedef UINT8 tBTM_BLE_SCAN_MODE; #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0 #define BTM_BLE_BATCH_SCAN_MODE_PASS 1 #define BTM_BLE_BATCH_SCAN_MODE_ACTI 2 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3 Loading Loading @@ -493,6 +494,13 @@ typedef enum BTM_BLE_SCAN_DISABLED_STATE=4 }tBTM_BLE_BATCH_SCAN_STATE; enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; typedef UINT8 tBTM_BLE_DISCARD_RULE; typedef struct { UINT8 sub_code[BTM_BLE_BATCH_SCAN_MAX]; Loading @@ -517,6 +525,10 @@ typedef struct { tBTM_BLE_BATCH_SCAN_STATE cur_state; tBTM_BLE_BATCH_SCAN_MODE scan_mode; UINT32 scan_interval; UINT32 scan_window; tBLE_ADDR_TYPE addr_type; tBTM_BLE_DISCARD_RULE discard_rule; tBTM_BLE_BATCH_SCAN_OPQ op_q; tBTM_BLE_BATCH_SCAN_REP_Q main_rep_q; tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback; Loading Loading @@ -750,13 +762,6 @@ enum }; typedef UINT8 tBTM_BLE_CONN_TYPE; enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; typedef UINT8 tBTM_BLE_DISCARD_RULE; typedef void (tBTM_BLE_TRACK_ADV_CBACK)(int filt_index, tBLE_ADDR_TYPE addr_type, BD_ADDR bda, int adv_state, tBTM_BLE_REF_VALUE ref_value); Loading