Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fa1ed0f authored by Wei Wang's avatar Wei Wang Committed by Android (Google) Code Review
Browse files

Merge "onBatchScanStorageConfigured returns status 12" into lmp-dev

parents 683672f1 8aaf3952
Loading
Loading
Loading
Loading
+54 −35
Original line number Diff line number Diff line
@@ -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);
@@ -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;
@@ -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,
@@ -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;
@@ -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);
@@ -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);
@@ -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);
@@ -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);
    }
@@ -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)
+12 −7
Original line number Diff line number Diff line
@@ -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
@@ -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];
@@ -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;
@@ -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);