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

Commit 75fd880a authored by Satya Calloji's avatar Satya Calloji Committed by Prerepa Viswanadham
Browse files

LE energy info feature

Stack and BT-IF changes for LE energy feature

Change-Id: I671e63aaead210c6352b45a5e20ad5e4bbbb77b7
parent 961137a0
Loading
Loading
Loading
Loading
+48 −1
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result);
static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr);

extern void sdpu_uuid16_to_uuid128(UINT16 uuid16, UINT8* p_uuid128);
extern tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void);

const UINT16 bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID] =
{
@@ -5503,7 +5504,7 @@ static void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_

/*******************************************************************************
**
** Function         bta_ble_enable_scan_cmpl
** Function         bta_ble_status_cmpl
**
** Description      ADV payload filtering enable / disable complete callback
**
@@ -5522,6 +5523,51 @@ static void bta_ble_status_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_REF_VALUE re
       bta_dm_cb.p_scan_filt_status_cback(action, ref_value, st);
}

/*******************************************************************************
**
** Function         bta_ble_enable_scan_cmpl
**
** Description      ADV payload filtering enable / disable complete callback
**
**
** Returns          None
**
*******************************************************************************/
static void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time,
                                        tBTM_BLE_RX_TIME_MS rx_time,
                                        tBTM_BLE_IDLE_TIME_MS idle_time,
                                        tBTM_BLE_ENERGY_USED  energy_used,
                                        tBTM_STATUS status)
{
    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
    tBTA_DM_CONTRL_STATE ctrl_state = 0;

    if (BTA_SUCCESS == st)
       ctrl_state = bta_dm_pm_obtain_controller_state();

    if (bta_dm_cb.p_energy_info_cback)
        bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, ctrl_state, st);
}

/*******************************************************************************
**
** Function         bta_dm_ble_get_energy_info
**
** Description      This function obtains the energy info
**
** Parameters:
**
*******************************************************************************/
void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data)
{
    tBTM_STATUS btm_status = 0;

    bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback;
    btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl);
    if (BTM_CMD_STARTED != btm_status)
        bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status);
}

/*******************************************************************************
**
** Function         bta_dm_cfg_filter_cond
@@ -5593,6 +5639,7 @@ void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data)
                                            p_data->ble_enable_scan_filt.ref_value, status);

}

/*******************************************************************************
**
** Function         bta_dm_scan_filter_param_setup
+27 −0
Original line number Diff line number Diff line
@@ -2329,6 +2329,33 @@ void BTA_DmBleScanFilterSetup(UINT8 action, tBTA_DM_BLE_PF_FILT_INDEX filt_index
#endif
}

/*******************************************************************************
**
** Function         BTA_DmBleGetEnergyInfo
**
** Description      This function is called to obtain the energy info
**
** Parameters       p_cmpl_cback - Command complete callback
**
** Returns          void
**
*******************************************************************************/
void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback)
{
    tBTA_DM_API_ENERGY_INFO *p_msg;
    APPL_TRACE_API ("BTA_DmBleGetEnergyInfo");

    UINT16  len = sizeof(tBTA_DM_API_ENERGY_INFO) + sizeof(tBLE_BD_ADDR);

    if ((p_msg = (tBTA_DM_API_ENERGY_INFO *) GKI_getbuf(len)) != NULL)
    {
        memset (p_msg, 0, len);
        p_msg->hdr.event        = BTA_DM_API_BLE_ENERGY_INFO_EVT;
        p_msg->p_energy_info_cback = p_cmpl_cback;
        bta_sys_sendmsg(p_msg);
    }
}

/*******************************************************************************
**
** Function         BTA_DmEnableScanFilter
+10 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ enum
    BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT,
    BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT,
    BTA_DM_API_BLE_TRACK_ADVERTISER_EVT,
    BTA_DM_API_BLE_ENERGY_INFO_EVT,
#endif

#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
@@ -641,6 +642,12 @@ typedef struct
    tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback;
} tBTA_DM_API_TRACK_ADVERTISER;

typedef struct
{
    BT_HDR                  hdr;
    tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback;
} tBTA_DM_API_ENERGY_INFO;

#endif /* BLE_INCLUDED */

typedef struct
@@ -810,6 +817,7 @@ typedef union
    tBTA_DM_API_READ_SCAN_REPORTS       ble_read_reports;
    tBTA_DM_API_DISABLE_SCAN            ble_disable_scan;
    tBTA_DM_API_TRACK_ADVERTISER        ble_track_advert;
    tBTA_DM_API_ENERGY_INFO             ble_energy_info;
#endif

    tBTA_DM_API_SET_AFH_CHANNEL_ASSESSMENT set_afh_channel_assessment;
@@ -918,6 +926,7 @@ typedef struct
    tBTA_DM_BLE_PF_CFG_CBACK     *p_scan_filt_cfg_cback;
    tBTA_DM_BLE_PF_STATUS_CBACK  *p_scan_filt_status_cback;
    tBTA_DM_BLE_PF_PARAM_CBACK   *p_scan_filt_param_cback;
    tBTA_BLE_ENERGY_INFO_CBACK   *p_energy_info_cback;
    TIMER_LIST_ENT              signal_strength_timer;
    tBTA_SIG_STRENGTH_MASK      signal_strength_mask;
    UINT16                      state;
@@ -1198,6 +1207,7 @@ extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG * p_data);
extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG * p_data);
extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG * p_data);
extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG * p_data);
extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data);

#endif
extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data);
+1 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ const tBTA_DM_ACTION bta_dm_action[] =
    bta_dm_ble_disable_batch_scan, /* BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT */
    bta_dm_ble_read_scan_reports,  /* BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT */
    bta_dm_ble_track_advertiser,   /* BTA_DM_API_BLE_TRACK_ADVERTISER_EVT */
    bta_dm_ble_get_energy_info,    /* BTA_DM_API_BLE_ENERGY_INFO_EVT */
#endif

#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
+21 −0
Original line number Diff line number Diff line
@@ -970,3 +970,24 @@ static void bta_dm_pm_set_sniff_policy(tBTA_DM_PEER_DEVICE *p_dev, BOOLEAN bDisa
    BTM_SetLinkPolicy(p_dev->peer_bdaddr, &policy_setting);

}

/*******************************************************************************
**
** Function         bta_dm_pm_obtain_controller_state
**
** Description      This function obtains the consolidated controller power state
**
** Parameters:
**
*******************************************************************************/
tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void)
{
    /*   Did not use counts as it is not sure, how accurate the count values are in
     **  bta_dm_cb.device_list.count > 0 || bta_dm_cb.device_list.le_count > 0 */

    tBTA_DM_CONTRL_STATE cur_state = BTA_DM_CONTRL_UNKNOWN;
    cur_state = BTM_PM_ReadControllerState();

    APPL_TRACE_DEBUG("bta_dm_pm_obtain_controller_state: %d", cur_state);
    return cur_state;
}
Loading