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] =
{
/*******************************************************************************
**
-** Function bta_ble_enable_scan_cmpl
+** Function bta_ble_status_cmpl
**
** Description ADV payload filtering enable / disable complete callback
**
/*******************************************************************************
**
+** 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
**
** Description This function configure adv payload filtering condition
p_data->ble_enable_scan_filt.ref_value, status);
}
+
/*******************************************************************************
**
** Function bta_dm_scan_filter_param_setup
/*******************************************************************************
**
+** 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
**
** Description This function is called to enable the adv data payload filter
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)
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
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;
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;
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);
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)
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;
+}
#define BTA_DM_DEV_UNPAIRED_EVT 23
#define BTA_DM_HW_ERROR_EVT 24 /* BT Chip H/W error */
#define BTA_DM_LE_FEATURES_READ 25 /* Cotroller specific LE features are read */
+#define BTA_DM_ENER_INFO_READ 26 /* Energy info read */
typedef UINT8 tBTA_DM_SEC_EVT;
/* Structure associated with BTA_DM_ENABLE_EVT */
/* multi adv callback */
typedef void (tBTA_BLE_MULTI_ADV_CBACK)(tBTA_BLE_MULTI_ADV_EVT event,
UINT8 inst_id, void *p_ref, tBTA_STATUS status);
-typedef UINT8 tBTA_DM_BLE_REF_VALUE;
+typedef UINT32 tBTA_DM_BLE_REF_VALUE;
#define BTA_DM_BLE_PF_ENABLE_EVT BTM_BLE_PF_ENABLE
#define BTA_DM_BLE_PF_CONFIG_EVT BTM_BLE_PF_CONFIG
tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status);
/* Status callback */
-typedef void (tBTA_DM_BLE_PF_STATUS_CBACK) (UINT8 action, tBTA_DM_BLE_REF_VALUE ref_value,
- tBTA_STATUS status);
+typedef void (tBTA_DM_BLE_PF_STATUS_CBACK) (UINT8 action, tBTA_STATUS status,
+ tBTA_DM_BLE_REF_VALUE ref_value);
#define BTA_DM_BLE_PF_BRDCAST_ADDR_FILT 1
#define BTA_DM_BLE_SEC_MITM BTM_BLE_SEC_ENCRYPT_MITM
typedef tBTM_BLE_SEC_ACT tBTA_DM_BLE_SEC_ACT;
+typedef tBTM_BLE_TX_TIME_MS tBTA_DM_BLE_TX_TIME_MS;
+typedef tBTM_BLE_RX_TIME_MS tBTA_DM_BLE_RX_TIME_MS;
+typedef tBTM_BLE_IDLE_TIME_MS tBTA_DM_BLE_IDLE_TIME_MS;
+typedef tBTM_BLE_ENERGY_USED tBTA_DM_BLE_ENERGY_USED;
+
+#define BTA_DM_CONTRL_UNKNOWN 0 /* Unknown state */
+#define BTA_DM_CONTRL_ACTIVE 1 /* ACL link on, SCO link ongoing, sniff mode */
+#define BTA_DM_CONTRL_SCAN 2 /* Scan state - paging/inquiry/trying to connect*/
+#define BTA_DM_CONTRL_IDLE 3 /* Idle state - page scan, LE advt, inquiry scan */
+
+typedef UINT8 tBTA_DM_CONTRL_STATE;
+
+
typedef void (tBTA_BLE_SCAN_THRESHOLD_CBACK)(tBTA_DM_BLE_REF_VALUE ref_value);
+
typedef void (tBTA_BLE_SCAN_REP_CBACK) (tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
UINT8 num_records, UINT16 data_len,
UINT8* p_rep_data, tBTA_STATUS status);
-typedef void (tBTA_BLE_SCAN_SETUP_CBACK) (tBTA_BLE_BATCH_SCAN_EVT evt, tBTA_DM_BLE_REF_VALUE ref_value,
+typedef void (tBTA_BLE_SCAN_SETUP_CBACK) (tBTA_BLE_BATCH_SCAN_EVT evt,
+ tBTA_DM_BLE_REF_VALUE ref_value,
tBTA_STATUS status);
typedef void (tBTA_BLE_TRACK_ADV_CMPL_CBACK)(int action, tBTA_STATUS status,
- tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_DM_BLE_REF_VALUE ref_value);
+ tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
+ tBTA_DM_BLE_REF_VALUE ref_value);
typedef void (tBTA_BLE_TRACK_ADV_CBACK)(int filt_index, tBLE_ADDR_TYPE addr_type, BD_ADDR bda,
int adv_state, tBTA_DM_BLE_REF_VALUE ref_value);
+typedef void (tBTA_BLE_ENERGY_INFO_CBACK)(tBTA_DM_BLE_TX_TIME_MS tx_time,
+ tBTA_DM_BLE_RX_TIME_MS rx_time,
+ tBTA_DM_BLE_IDLE_TIME_MS idle_time,
+ tBTA_DM_BLE_ENERGY_USED energy_used,
+ tBTA_DM_CONTRL_STATE ctrl_state,
+ tBTA_STATUS status);
+
#else
typedef UINT8 tBTA_DM_BLE_SEC_ACT;
#endif
BTA_API extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value,
tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback);
+/*******************************************************************************
+**
+** Function BTA_DmBleGetEnergyInfo
+**
+** Description This function is called to obtain the energy info
+**
+** Parameters p_cmpl_cback - Command complete callback
+**
+** Returns void
+**
+*******************************************************************************/
+BTA_API extern void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback);
+
#endif
#ifdef __cplusplus
/*******************************************************************************
**
+** Function btif_dm_read_energy_info
+**
+** Description Reads the energy info from controller
+**
+** Returns void
+**
+*******************************************************************************/
+void btif_dm_read_energy_info();
+
+/*******************************************************************************
+**
** Function btif_config_hci_snoop_log
**
** Description enable or disable HCI snoop log
return btif_dm_ssp_reply(bd_addr, variant, accept, passkey);
}
+static int read_energy_info()
+{
+ if (interface_ready() == FALSE)
+ return BT_STATUS_NOT_READY;
+ btif_dm_read_energy_info();
+ return BT_STATUS_SUCCESS;
+}
+
static const void* get_profile_interface (const char *profile_id)
{
ALOGI("get_profile_interface %s", profile_id);
#endif
config_hci_snoop_log,
set_os_callouts,
+ read_energy_info,
};
const bt_interface_t* bluetooth__get_bluetooth_interface ()
local_le_features.max_irk_list_size = cmn_vsc_cb.max_irk_list_sz;
local_le_features.rpa_offload_supported = cmn_vsc_cb.rpa_offloading;
local_le_features.scan_result_storage_size = cmn_vsc_cb.tot_scan_results_strg;
+ local_le_features.activity_energy_info_supported = cmn_vsc_cb.energy_support;
memcpy(prop.val, &local_le_features, prop.len);
#endif
}
BT_OCTET16 sp_r;
BD_ADDR oob_bdaddr; /* peer bdaddr*/
} btif_dm_oob_cb_t;
+
+typedef struct
+{
+ uint8_t status;
+ uint8_t ctrl_state;
+ uint64_t tx_time;
+ uint64_t rx_time;
+ uint64_t idle_time;
+ uint64_t energy_used;
+} btif_activity_energy_info_cb_t;
+
#define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id))
/* This flag will be true if HCI_Inquiry is in progress */
HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, BT_STATUS_SUCCESS, 1, &prop);
break;
}
+
+ case BTA_DM_ENER_INFO_READ:
+ {
+ btif_activity_energy_info_cb_t *p_ener_data = (btif_activity_energy_info_cb_t*) p_param;
+ bt_activity_energy_info energy_info;
+ energy_info.status = p_ener_data->status;
+ energy_info.ctrl_state = p_ener_data->ctrl_state;
+ energy_info.rx_time = p_ener_data->rx_time;
+ energy_info.tx_time = p_ener_data->tx_time;
+ energy_info.idle_time = p_ener_data->idle_time;
+ energy_info.energy_used = p_ener_data->energy_used;
+ HAL_CBACK(bt_hal_cbacks, energy_info_cb, &energy_info);
+ break;
+ }
#endif
case BTA_DM_AUTHORIZE_EVT:
btif_transfer_context(btif_dm_remote_service_record_evt, event, (char*)p_data, sizeof(tBTA_DM_SEARCH), NULL);
}
+/*******************************************************************************
+**
+** Function bta_energy_info_cb
+**
+** Description Switches context from BTE to BTIF for DM energy info event
+**
+** Returns void
+**
+*******************************************************************************/
+static void bta_energy_info_cb(tBTA_DM_BLE_TX_TIME_MS tx_time, tBTA_DM_BLE_RX_TIME_MS rx_time,
+ tBTA_DM_BLE_IDLE_TIME_MS idle_time,
+ tBTA_DM_BLE_ENERGY_USED energy_used,
+ tBTA_DM_CONTRL_STATE ctrl_state, tBTA_STATUS status)
+{
+ BTIF_TRACE_DEBUG("energy_info_cb-Status:%d,state=%d,tx_t=%ld, rx_t=%ld, idle_time=%ld,used=%ld",
+ status, ctrl_state, tx_time, rx_time, idle_time, energy_used);
+
+ btif_activity_energy_info_cb_t btif_cb;
+ btif_cb.status = status;
+ btif_cb.ctrl_state = ctrl_state;
+ btif_cb.tx_time = (uint64_t) tx_time;
+ btif_cb.rx_time = (uint64_t) rx_time;
+ btif_cb.idle_time =(uint64_t) idle_time;
+ btif_cb.energy_used =(uint64_t) energy_used;
+ btif_transfer_context(btif_dm_upstreams_evt, BTA_DM_ENER_INFO_READ,
+ (char*) &btif_cb, sizeof(btif_activity_energy_info_cb_t), NULL);
+}
+
/*****************************************************************************
**
** btif api functions (no context switch)
}
}
+/*******************************************************************************
+**
+** Function btif_dm_read_energy_info
+**
+** Description Reads the energy info from controller
+**
+** Returns void
+**
+*******************************************************************************/
+void btif_dm_read_energy_info()
+{
+ BTA_DmBleGetEnergyInfo(bta_energy_info_cb);
+}
+
static char* btif_get_default_local_name() {
if (btif_default_local_name[0] == '\0')
{
CASE_RETURN_STR(BTA_DM_BLE_AUTH_CMPL_EVT)
CASE_RETURN_STR(BTA_DM_DEV_UNPAIRED_EVT)
CASE_RETURN_STR(BTA_DM_HW_ERROR_EVT)
+ CASE_RETURN_STR(BTA_DM_ENER_INFO_READ)
default:
return "UNKNOWN DM EVENT";
./btm/btm_ble_adv_filter.c \
./btm/btm_ble_multi_adv.c \
./btm/btm_ble_batchscan.c \
+ ./btm/btm_ble_cont_energy.c \
./btm/btm_acl.c \
./btm/btm_sco.c \
./btm/btm_pm.c \
--- /dev/null
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Broadcom Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include <string.h>
+#include "bt_target.h"
+
+#if (BLE_INCLUDED == TRUE)
+#include "bt_types.h"
+#include "hcimsgs.h"
+#include "btu.h"
+#include "btm_int.h"
+#include "bt_utils.h"
+#include "hcidefs.h"
+#include "btm_ble_api.h"
+
+tBTM_BLE_ENERGY_INFO_CB ble_energy_info_cb;
+
+/*******************************************************************************
+**
+** Function btm_ble_cont_energy_cmpl_cback
+**
+** Description Controller VSC complete callback
+**
+** Parameters
+**
+** Returns void
+**
+*******************************************************************************/
+void btm_ble_cont_energy_cmpl_cback (tBTM_VSC_CMPL *p_params)
+{
+ UINT8 *p = p_params->p_param_buf;
+ UINT16 len = p_params->param_len;
+ UINT8 status = 0;
+ UINT32 total_tx_time = 0, total_rx_time = 0, total_idle_time = 0, total_energy_used = 0;
+
+ if (len < 17)
+ {
+ BTM_TRACE_ERROR("wrong length for btm_ble_cont_energy_cmpl_cback");
+ return;
+ }
+
+ STREAM_TO_UINT8(status, p);
+ STREAM_TO_UINT32(total_tx_time, p);
+ STREAM_TO_UINT32(total_rx_time, p);
+ STREAM_TO_UINT32(total_idle_time, p);
+ STREAM_TO_UINT32(total_energy_used, p);
+
+ BTM_TRACE_DEBUG("energy_info status=%d,tx_t=%ld, rx_t=%ld, ener_used=%ld, idle_t=%ld",
+ status, total_tx_time, total_rx_time, total_energy_used, total_idle_time);
+
+ if (NULL != ble_energy_info_cb.p_ener_cback)
+ ble_energy_info_cb.p_ener_cback(total_tx_time, total_rx_time, total_idle_time,
+ total_energy_used, status);
+
+ return;
+}
+
+/*******************************************************************************
+**
+** Function BTM_BleGetEnergyInfo
+**
+** Description This function obtains the energy info
+**
+** Parameters p_ener_cback - Callback pointer
+**
+** Returns status
+**
+*******************************************************************************/
+tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback)
+{
+ tBTM_STATUS status = BTM_ILLEGAL_VALUE;
+ tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
+
+ BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
+
+ BTM_TRACE_EVENT("BTM_BleGetEnergyInfo");
+
+ if (0 == cmn_ble_vsc_cb.energy_support)
+ {
+ BTM_TRACE_ERROR("Controller does not support get energy info");
+ return BTM_ERR_PROCESSING;
+ }
+
+ ble_energy_info_cb.p_ener_cback = p_ener_cback;
+ if ((status = BTM_VendorSpecificCommand (HCI_BLE_ENERGY_INFO_OCF, 0, NULL,
+ btm_ble_cont_energy_cmpl_cback)) != BTM_CMD_STARTED)
+ {
+ BTM_TRACE_ERROR("BTM_BleGetEnergyInfo status: %d", status);
+ return BTM_ILLEGAL_VALUE;
+ }
+
+ return status;
+}
+
+#endif
+
STREAM_TO_UINT8 (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz, p);
STREAM_TO_UINT8 (btm_cb.cmn_ble_vsc_cb.filter_support, p);
STREAM_TO_UINT8 (btm_cb.cmn_ble_vsc_cb.max_filter, p);
+ STREAM_TO_UINT8 (btm_cb.cmn_ble_vsc_cb.energy_support, p);
}
p_vcb->irk_avail_size = max_irk_list_sz;
return BTM_PWR_MGR_INCLUDED;
}
+/*******************************************************************************
+**
+** Function btm_pm_device_in_active_or_sniff_mode
+**
+** Description This function is called to check if in active or sniff mode
+**
+** Returns TRUE, if in active or sniff mode
+**
+*******************************************************************************/
+BOOLEAN btm_pm_device_in_active_or_sniff_mode(void)
+{
+ /* The active state is the highest state-includes connected device and sniff mode*/
+
+ /* Covers active and sniff modes */
+ if (btm_cb.num_acl > 0)
+ {
+ BTM_TRACE_DEBUG("btm_pm_device_in_active_or_sniff_mode-acl:%d", btm_cb.num_acl);
+ return TRUE;
+ }
+
+ /* Check BLE states */
+ if (btm_ble_get_conn_st() != BLE_CONN_IDLE)
+ {
+ BTM_TRACE_DEBUG("btm_pm_device_in_active_or_sniff_mode- BLE state: %x",
+ btm_ble_get_conn_st());
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/*******************************************************************************
+**
+** Function btm_pm_device_in_scan_state
+**
+** Description This function is called to check if in paging, inquiry or connecting mode
+**
+** Returns TRUE, if in paging, inquiry or connecting mode
+**
+*******************************************************************************/
+BOOLEAN btm_pm_device_in_scan_state(void)
+{
+ /* Scan state-paging, inquiry, and trying to connect */
+
+ /* Check for paging */
+ if (btm_cb.is_paging || btm_cb.page_queue.count > 0 ||
+ BTM_BL_PAGING_STARTED == btm_cb.busy_level)
+ {
+ BTM_TRACE_DEBUG("btm_pm_device_in_scan_state- paging");
+ return TRUE;
+ }
+
+ /* Check for inquiry */
+ if ((btm_cb.btm_inq_vars.inq_active & (BTM_BR_INQ_ACTIVE_MASK | BTM_BLE_INQ_ACTIVE_MASK)) != 0)
+ {
+ BTM_TRACE_DEBUG("btm_pm_device_in_scan_state- Inq active");
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/*******************************************************************************
+**
+** Function BTM_PM_ReadControllerState
+**
+** Description This function is called to obtain the controller state
+**
+** Returns Controller State-BTM_CONTRL_ACTIVE, BTM_CONTRL_SCAN, and BTM_CONTRL_IDLE
+**
+*******************************************************************************/
+tBTM_CONTRL_STATE BTM_PM_ReadControllerState(void)
+{
+ if (TRUE == btm_pm_device_in_active_or_sniff_mode())
+ return BTM_CONTRL_ACTIVE;
+ else
+ if (TRUE == btm_pm_device_in_scan_state())
+ return BTM_CONTRL_SCAN;
+ else
+ return BTM_CONTRL_IDLE;
+}
/* MIP Device query callback function */
typedef BOOLEAN (tBTM_MIP_QUERY_CB) (BD_ADDR dev_addr, UINT8 *p_mode, LINK_KEY link_key);
+#define BTM_CONTRL_ACTIVE 1 /* ACL link on, SCO link ongoing, sniff mode */
+#define BTM_CONTRL_SCAN 2 /* Scan state - paging/inquiry/trying to connect*/
+#define BTM_CONTRL_IDLE 3 /* Idle state - page scan, LE advt, inquiry scan */
+
+typedef UINT8 tBTM_CONTRL_STATE;
+
/*****************************************************************************
** EXTERNAL FUNCTION DECLARATIONS
*****************************************************************************/
*******************************************************************************/
BTM_API extern void BTM_PCM2Setup_Write (BOOLEAN clk_master, tBTM_VSC_CMPL_CB *p_arc_cb);
+
+/*******************************************************************************
+**
+** Function BTM_PM_ReadControllerState
+**
+** Description This function is called to obtain the controller state
+**
+** Returns Controller state (BTM_CONTRL_ACTIVE, BTM_CONTRL_SCAN, and BTM_CONTRL_IDLE)
+**
+*******************************************************************************/
+BTM_API extern tBTM_CONTRL_STATE BTM_PM_ReadControllerState(void);
+
#ifdef __cplusplus
}
#endif
#define BTM_BLE_UNKNOWN_EVT 0xff
-typedef UINT8 tBTM_BLE_REF_VALUE;
+typedef UINT32 tBTM_BLE_REF_VALUE;
#define BTM_BLE_SCAN_MODE_PASS 0
#define BTM_BLE_SCAN_MODE_ACTI 1
UINT8 max_irk_list_sz;
UINT8 filter_support;
UINT8 max_filter;
+ UINT8 energy_support;
}tBTM_BLE_VSC_CB;
/* slave preferred connection interval range */
typedef UINT8 tBTM_BLE_BATCH_SCAN_EVT;
+typedef UINT32 tBTM_BLE_TX_TIME_MS;
+typedef UINT32 tBTM_BLE_RX_TIME_MS;
+typedef UINT32 tBTM_BLE_IDLE_TIME_MS;
+typedef UINT32 tBTM_BLE_ENERGY_USED;
+
+typedef void (tBTM_BLE_ENERGY_INFO_CBACK)(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);
+
+typedef struct
+{
+ tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback;
+}tBTM_BLE_ENERGY_INFO_CB;
+
typedef BOOLEAN (tBTM_BLE_SEL_CBACK)(BD_ADDR random_bda, UINT8 *p_remote_name);
typedef void (tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status);
tBTM_BLE_PF_STATUS_CBACK *p_stat_cback,
tBTM_BLE_REF_VALUE ref_value);
+/*******************************************************************************
+**
+** Function BTM_BleGetEnergyInfo
+**
+** Description This function obtains the energy info
+**
+** Parameters p_ener_cback - Callback pointer
+**
+** Returns status
+**
+*******************************************************************************/
+BTM_API extern tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback);
#ifdef __cplusplus
}
/* Tracking OCF */
#define HCI_BLE_TRACK_ADV_OCF (0x0158 | HCI_GRP_VENDOR_SPECIFIC)
+/* Energy info OCF */
+#define HCI_BLE_ENERGY_INFO_OCF (0x0159 | HCI_GRP_VENDOR_SPECIFIC)
+
/* subcode for multi adv feature */
#define BTM_BLE_MULTI_ADV_SET_PARAM 0x01
#define BTM_BLE_MULTI_ADV_WRITE_ADV_DATA 0x02
thread_evt, // callback_thread_event
NULL, // dut_mode_recv_callback
NULL, // le_test_mode_callback
+ NULL,
};
static btpan_callbacks_t pan_callbacks = {