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

Commit 1b24cb02 authored by Satya Calloji's avatar Satya Calloji Committed by Andre Eisenbach
Browse files

Random address does not get written properly

The random address not getting written with correct
instance ID, as per Google spec.

Bug: 19370739
Change-Id: I7e5fc8d274bad5f127bd791469a46e2f257eaddd
parent 693a3cdc
Loading
Loading
Loading
Loading
+27 −18
Original line number Diff line number Diff line
@@ -127,12 +127,14 @@ void btm_ble_multi_adv_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params)
    switch (subcode)
    {
        case BTM_BLE_MULTI_ADV_ENB:
        BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_ENB status = %d", status);
        if (status != HCI_SUCCESS)
        {
            btm_multi_adv_cb.p_adv_inst[inst_id-1].inst_id = 0;
        }
            BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_ENB status = %d", status);

            /* Mark as not in use here, if instance cannot be enabled */
            if (HCI_SUCCESS != status && BTM_BLE_MULTI_ADV_ENB_EVT == cb_evt)
                btm_multi_adv_cb.p_adv_inst[inst_id-1].in_use = FALSE;
            break;
        }

        case BTM_BLE_MULTI_ADV_SET_PARAM:
        {
@@ -327,7 +329,9 @@ tBTM_STATUS btm_ble_multi_adv_write_rpa (tBTM_BLE_MULTI_ADV_INST *p_inst, BD_ADD
    UINT8           param[BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN], *pp = param;
    tBTM_STATUS     rt;

    BTM_TRACE_EVENT (" btm_ble_multi_adv_set_random_addr");
    BTM_TRACE_EVENT ("%s-BD_ADDR:%02x-%02x-%02x-%02x-%02x-%02x,inst_id:%d",
                      __FUNCTION__, random_addr[5], random_addr[4], random_addr[3], random_addr[2],
                      random_addr[1], random_addr[0], p_inst->inst_id);

    memset(param, 0, BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN);

@@ -411,14 +415,15 @@ void btm_ble_multi_adv_gen_rpa_cmpl(tBTM_RAND_ENC *p)
            p_inst->rpa[5] = output.param_buf[0];
            p_inst->rpa[4] = output.param_buf[1];
            p_inst->rpa[3] = output.param_buf[2];
        }

            if (p_inst->inst_id != 0 && (p_inst->inst_id < BTM_BleMaxMultiAdvInstanceCount()))
        if (p_inst->inst_id != BTM_BLE_MULTI_ADV_DEFAULT_STD &&
            p_inst->inst_id < BTM_BleMaxMultiAdvInstanceCount())
        {
            /* set it to controller */
            btm_ble_multi_adv_write_rpa(p_inst, p_inst->rpa);
        }
    }
    }
#endif
}

@@ -471,7 +476,7 @@ void btm_ble_multi_adv_reenable(UINT8 inst_id)
{
    tBTM_BLE_MULTI_ADV_INST *p_inst = &btm_multi_adv_cb.p_adv_inst[inst_id - 1];

    if (p_inst->inst_id != 0)
    if (TRUE == p_inst->in_use)
    {
        if (p_inst->adv_evt != BTM_BLE_CONNECT_DIR_EVT)
            btm_ble_enable_multi_adv (TRUE, p_inst->inst_id, 0);
@@ -479,7 +484,7 @@ void btm_ble_multi_adv_reenable(UINT8 inst_id)
          /* mark directed adv as disabled if adv has been stopped */
        {
            (p_inst->p_cback)(BTM_BLE_MULTI_ADV_DISABLE_EVT,p_inst->inst_id,p_inst->p_ref,0);
             p_inst->inst_id = 0;
             p_inst->in_use = FALSE;
        }
     }
}
@@ -502,8 +507,13 @@ void btm_ble_multi_adv_enb_privacy(BOOLEAN enable)

    for (i = 0; i <  BTM_BleMaxMultiAdvInstanceCount() - 1; i ++, p_inst++)
    {
        p_inst->in_use = FALSE;
        if (enable)
        {
            /* Setup the instance ID before configuring the RPA */
            p_inst->inst_id = i + 1;
            btm_ble_multi_adv_configure_rpa (p_inst);
        }
        else
            btu_stop_timer_oneshot(&p_inst->raddr_timer_ent);
    }
@@ -547,10 +557,9 @@ tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params,

    for (i = 0; i <  BTM_BleMaxMultiAdvInstanceCount() - 1; i ++, p_inst++)
    {
        if (p_inst->inst_id == 0)
        if (FALSE == p_inst->in_use)
        {
            p_inst->inst_id = i + 1;

            p_inst->in_use = TRUE;
            /* configure adv parameter */
            if (p_params)
                rt = btm_ble_multi_adv_set_params(p_inst, p_params, 0);
@@ -573,7 +582,7 @@ tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params,

            if (BTM_CMD_STARTED != rt)
            {
                p_inst->inst_id = 0;
                p_inst->in_use = FALSE;
                BTM_TRACE_ERROR("BTM_BleEnableAdvInstance failed");
            }
            break;
@@ -612,7 +621,7 @@ tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_par
        inst_id != BTM_BLE_MULTI_ADV_DEFAULT_STD &&
        p_params != NULL)
    {
        if (p_inst->inst_id == 0)
        if (FALSE == p_inst->in_use)
        {
            BTM_TRACE_DEBUG("adv instance %d is not active", inst_id);
            return BTM_WRONG_MODE;
@@ -718,7 +727,7 @@ tBTM_STATUS BTM_BleDisableAdvInstance (UINT8 inst_id)
         {
            btm_ble_multi_adv_configure_rpa(&btm_multi_adv_cb.p_adv_inst[inst_id-1]);
            btu_stop_timer(&btm_multi_adv_cb.p_adv_inst[inst_id-1].raddr_timer_ent);
            btm_multi_adv_cb.p_adv_inst[inst_id-1].inst_id = 0;
            btm_multi_adv_cb.p_adv_inst[inst_id-1].in_use = FALSE;
         }
     }
    return rt;
+1 −0
Original line number Diff line number Diff line
@@ -451,6 +451,7 @@ typedef void (tBTM_BLE_MULTI_ADV_CBACK)(tBTM_BLE_MULTI_ADV_EVT evt, UINT8 inst_i
typedef struct
{
    UINT8                       inst_id;
    BOOLEAN                     in_use;
    UINT8                       adv_evt;
    BD_ADDR                     rpa;
    TIMER_LIST_ENT              raddr_timer_ent;