From 7ae3f9eebc4e930d51e6b61f845ffd0f9a8cb9f8 Mon Sep 17 00:00:00 2001 From: Satya Calloji Date: Sat, 14 Jun 2014 23:16:18 -0700 Subject: [PATCH] LE Onfound and Onlost feature BTIF and stack layer changes for onfound/onlost feature DO NOT MERGE Change-Id: Id52cdd5855ca8c0ff276b42613b51c4cd3882bfc --- bta/dm/bta_dm_act.c | 15 ++++++++++++ bta/dm/bta_dm_api.c | 29 +++++++++++++++++++++- bta/dm/bta_dm_int.h | 10 +++++--- bta/dm/bta_dm_main.c | 1 + bta/include/bta_api.h | 48 ++++++++++++++++++++++++++++++------ bta/include/bta_gatt_api.h | 19 ++++++++------- btif/src/btif_gatt_client.c | 36 +++++++++++++++++++++++++-- stack/btm/btm_ble_batchscan.c | 57 ++++++++++++++++++++++++++++++++++++++++--- stack/include/btm_ble_api.h | 22 +++++++++++------ 9 files changed, 203 insertions(+), 34 deletions(-) diff --git a/bta/dm/bta_dm_act.c b/bta/dm/bta_dm_act.c index 762dfdee9..9012dc63e 100644 --- a/bta/dm/bta_dm_act.c +++ b/bta/dm/bta_dm_act.c @@ -5427,6 +5427,21 @@ void bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data) /******************************************************************************* ** +** Function bta_dm_ble_track_advertiser +** +** Description This function tracks the specific advertiser +** +** Parameters: +** +*******************************************************************************/ +void bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data) +{ + BTM_BleTrackAdvertiser(p_data->ble_track_advert.p_track_adv_cback, + p_data->ble_track_advert.ref_value); +} + +/******************************************************************************* +** ** Function bta_ble_scan_setup_cb ** ** Description Handle the setup callback from BTM layer and forward it to app layer diff --git a/bta/dm/bta_dm_api.c b/bta/dm/bta_dm_api.c index 3c3602c7b..f80fda838 100644 --- a/bta/dm/bta_dm_api.c +++ b/bta/dm/bta_dm_api.c @@ -1707,6 +1707,33 @@ BTA_API extern void BTA_DmBleReadScanReports(tBTA_BLE_SCAN_MODE scan_type, /******************************************************************************* ** +** Function BTA_DmBleTrackAdvertiser +** +** Description This function is called to track advertiser +** +** Parameters ref_value - Reference value +** p_track_adv_cback - Track ADV callback +** +** Returns None +** +*******************************************************************************/ +BTA_API extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback) +{ + tBTA_DM_API_TRACK_ADVERTISER *p_msg; + + if ((p_msg = (tBTA_DM_API_TRACK_ADVERTISER *) + GKI_getbuf(sizeof(tBTA_DM_API_TRACK_ADVERTISER))) != NULL) + { + p_msg->hdr.event = BTA_DM_API_BLE_TRACK_ADVERTISER_EVT; + p_msg->p_track_adv_cback = p_track_adv_cback; + p_msg->ref_value = ref_value; + bta_sys_sendmsg(p_msg); + } +} + +/******************************************************************************* +** ** Function BTA_DmBleBroadcast ** ** Description This function starts or stops LE broadcasting. @@ -2308,7 +2335,7 @@ void BTA_DmBleScanFilterSetup(UINT8 action, tBTA_DM_BLE_PF_FILT_INDEX filt_index ** ** Description This function is called to enable the adv data payload filter ** -** Parameters action - enable or disable the APCF feature +** Parameters action - enable or disable the APCF feature ** p_cmpl_cback - Command completed callback ** ref_value - Reference value ** diff --git a/bta/dm/bta_dm_int.h b/bta/dm/bta_dm_int.h index 0b8cde67b..a1b935b61 100644 --- a/bta/dm/bta_dm_int.h +++ b/bta/dm/bta_dm_int.h @@ -637,10 +637,8 @@ typedef struct typedef struct { BT_HDR hdr; - UINT8 track_adv_action; - tBLE_ADDR_TYPE addr_type; - tBLE_BD_ADDR *p_bda; - UINT8 onlost_timeout; + tBTA_DM_BLE_REF_VALUE ref_value; + tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback; } tBTA_DM_API_TRACK_ADVERTISER; #endif /* BLE_INCLUDED */ @@ -914,7 +912,9 @@ typedef struct BOOLEAN is_bta_dm_active; tBTA_DM_ACTIVE_LINK device_list; tBTA_DM_SEC_CBACK *p_sec_cback; +#if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback; +#endif 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; @@ -1197,6 +1197,8 @@ extern void bta_dm_ble_setup_storage(tBTA_DM_MSG *p_data); 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); + #endif extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data); extern void bta_dm_confirm(tBTA_DM_MSG *p_data); diff --git a/bta/dm/bta_dm_main.c b/bta/dm/bta_dm_main.c index df5001df3..d378744ec 100644 --- a/bta/dm/bta_dm_main.c +++ b/bta/dm/bta_dm_main.c @@ -117,6 +117,7 @@ const tBTA_DM_ACTION bta_dm_action[] = bta_dm_ble_enable_batch_scan, /* BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT */ 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 */ #endif #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) diff --git a/bta/include/bta_api.h b/bta/include/bta_api.h index 677383883..0653d01a2 100644 --- a/bta/include/bta_api.h +++ b/bta/include/bta_api.h @@ -1132,9 +1132,16 @@ 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, 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); + +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); + #else typedef UINT8 tBTA_DM_BLE_SEC_ACT; #endif @@ -2323,7 +2330,7 @@ BTA_API extern void BTA_DmBleUpdateConnectionParams(BD_ADDR bd_addr, UINT16 min_ ** p_setup_cback - Setup callback ** p_thres_cback - Threshold callback ** p_rep_cback - Reports callback -** p_ref - Ref pointer +** ref_value - Reference value ** ** Returns None ** @@ -2347,6 +2354,7 @@ BTA_API extern void BTA_DmBleSetStorageParams(UINT8 batch_scan_full_max, ** scan_window - Scan window ** discard_rule -Discard rules ** addr_type - Address type +** ref_value - Reference value ** ** Returns None ** @@ -2364,6 +2372,7 @@ BTA_API extern void BTA_DmBleEnableBatchScan(tBTA_BLE_SCAN_MODE scan_mode, ** Description This function is called to read the batch scan reports ** ** Parameters scan_mode -Batch scan mode +** ref_value - Reference value ** ** Returns None ** @@ -2377,7 +2386,7 @@ BTA_API extern void BTA_DmBleReadScanReports(tBTA_BLE_SCAN_MODE scan_type, ** ** Description This function is called to disable the batch scanning ** -** Parameters None +** Parameters ref_value - Reference value ** ** Returns None ** @@ -2390,7 +2399,9 @@ BTA_API extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value); ** ** Description This function is called to enable the adv data payload filter ** -** Parameters action -1: enable the filter condition, 0 - disables the filter condition +** Parameters action - enable or disable the APCF feature +** p_cmpl_cback - Command completed callback +** ref_value - Reference value ** ** Returns void ** @@ -2405,8 +2416,12 @@ BTA_API extern void BTA_DmEnableScanFilter(UINT8 action, ** ** Description This function is called to setup the filter params ** -** Parameters action: to read/write/clear -** filt_index - filter index +** Parameters p_target: enable the filter condition on a target device; if NULL +** filt_index - Filter index +** p_filt_params -Filter parameters +** ref_value - Reference value +** action - Add, delete or clear +** p_cmpl_back - Command completed callback ** ** Returns void ** @@ -2426,10 +2441,11 @@ BTA_API extern void BTA_DmBleScanFilterSetup(UINT8 action, ** condition. ** ** Parameters action: to read/write/clear -** cond_type: filter condition type. -** filt_index - filter index +** cond_type: filter condition type +** filt_index - Filter index ** p_cond: filter condition parameter -** ref_value: Reference +** p_cmpl_back - Command completed callback +** ref_value - Reference value ** ** Returns void ** @@ -2441,6 +2457,22 @@ BTA_API extern void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, tBTA_DM_BLE_REF_VALUE ref_value); + +/******************************************************************************* +** +** Function BTA_DmBleTrackAdvertiser +** +** Description This function is called to track the advertiser +** +** Parameters ref_value - Reference value +** p_track_adv_cback - ADV callback +** +** Returns None +** +*******************************************************************************/ +BTA_API extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback); + #endif #ifdef __cplusplus diff --git a/bta/include/bta_gatt_api.h b/bta/include/bta_gatt_api.h index 8e70dae4e..9e75eef93 100644 --- a/bta/include/bta_gatt_api.h +++ b/bta/include/bta_gatt_api.h @@ -135,15 +135,16 @@ typedef UINT8 tBTA_GATT_STATUS; #define BTA_GATTC_MULT_ADV_DATA_EVT 22 /* Multi ADV data event */ #define BTA_GATTC_MULT_ADV_DIS_EVT 23 /* Disable Multi ADV event */ #define BTA_GATTC_CONGEST_EVT 24 /* Congestion event */ -#define BTA_GATTC_BTH_SCAN_ENB_EVT 24 /* Enable batch scan event */ -#define BTA_GATTC_BTH_SCAN_CFG_EVT 25 /* Config storage event */ -#define BTA_GATTC_BTH_SCAN_RD_EVT 26 /* Batch scan reports read event */ -#define BTA_GATTC_BTH_SCAN_THR_EVT 27 /* Batch scan threshold event */ -#define BTA_GATTC_BTH_SCAN_PARAM_EVT 28 /* Batch scan param event */ -#define BTA_GATTC_BTH_SCAN_DIS_EVT 29 /* Disable batch scan event */ -#define BTA_GATTC_SCAN_FLT_CFG_EVT 30 /* Scan filter config event */ -#define BTA_GATTC_SCAN_FLT_PARAM_EVT 31 /* Param filter event */ -#define BTA_GATTC_SCAN_FLT_STATUS_EVT 32 /* Filter status event */ +#define BTA_GATTC_BTH_SCAN_ENB_EVT 25 /* Enable batch scan event */ +#define BTA_GATTC_BTH_SCAN_CFG_EVT 26 /* Config storage event */ +#define BTA_GATTC_BTH_SCAN_RD_EVT 27 /* Batch scan reports read event */ +#define BTA_GATTC_BTH_SCAN_THR_EVT 28 /* Batch scan threshold event */ +#define BTA_GATTC_BTH_SCAN_PARAM_EVT 29 /* Batch scan param event */ +#define BTA_GATTC_BTH_SCAN_DIS_EVT 30 /* Disable batch scan event */ +#define BTA_GATTC_SCAN_FLT_CFG_EVT 31 /* Scan filter config event */ +#define BTA_GATTC_SCAN_FLT_PARAM_EVT 32 /* Param filter event */ +#define BTA_GATTC_SCAN_FLT_STATUS_EVT 33 /* Filter status event */ +#define BTA_GATTC_ADV_VSC_EVT 34 /* ADV VSC event */ typedef UINT8 tBTA_GATTC_EVT; diff --git a/btif/src/btif_gatt_client.c b/btif/src/btif_gatt_client.c index 21e64e1f1..f4ad664ab 100644 --- a/btif/src/btif_gatt_client.c +++ b/btif/src/btif_gatt_client.c @@ -131,6 +131,12 @@ typedef struct { uint8_t status; uint8_t client_if; + uint8_t filt_index; + uint8_t adv_state; + uint8_t action; + uint8_t avbl_space; + uint8_t lost_timeout; + bt_bdaddr_t bd_addr; uint8_t batch_scan_full_max; uint8_t batch_scan_trunc_max; uint8_t batch_scan_notify_threshold; @@ -732,7 +738,7 @@ static void btif_gattc_upstreams_evt(uint16_t event, char* p_param) btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if, p_data->action, p_data->avbl_space, p_data->status); - HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb + HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb , p_data->action, p_data->client_if, p_data->status , p_data->avbl_space); break; @@ -743,11 +749,20 @@ static void btif_gattc_upstreams_evt(uint16_t event, char* p_param) btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if, p_data->action, p_data->status); - HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb + HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb , p_data->action, p_data->client_if, p_data->status); break; } + case BTA_GATTC_ADV_VSC_EVT: + { + btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*)p_param; + HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb + ,p_data->client_if, p_data->filt_index, p_data->addr_type, &p_data->bd_addr + ,p_data->adv_state); + break; + } + default: ALOGE("%s: Unhandled event (%d)!", __FUNCTION__, event); break; @@ -955,6 +970,21 @@ static void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_dat (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); } +static void bta_track_adv_event_cb(int filt_index, tBLE_ADDR_TYPE addr_type, BD_ADDR bda, + int adv_state, tBTA_DM_BLE_REF_VALUE ref_value) +{ + btgatt_batch_track_cb_t btif_scan_track_cb; + BTIF_TRACE_DEBUG("%s :%d, %d, %d, %d", + __FUNCTION__,filt_index, addr_type, adv_state, ref_value); + btif_scan_track_cb.filt_index = filt_index; + btif_scan_track_cb.addr_type = addr_type; + memcpy(btif_scan_track_cb.bd_addr.address, bda, sizeof(BD_ADDR)); + btif_scan_track_cb.client_if = ref_value; + btif_scan_track_cb.adv_state = adv_state; + btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT, + (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL); +} + static void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result) { btif_gattc_cb_t btif_cb; @@ -1322,6 +1352,8 @@ static void btgattc_handle_event(uint16_t event, char* p_param) { if(NULL == p_adv_filt_cb) return; + if(1 == p_adv_filt_cb->adv_filt_param.dely_mode) + BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb); BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index, &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb, p_adv_filt_cb->client_if); diff --git a/stack/btm/btm_ble_batchscan.c b/stack/btm/btm_ble_batchscan.c index 015284fd1..41150be8e 100644 --- a/stack/btm/btm_ble_batchscan.c +++ b/stack/btm/btm_ble_batchscan.c @@ -30,6 +30,7 @@ #if (BLE_INCLUDED == TRUE && BLE_BATCH_SCAN_INCLUDED == TRUE) tBTM_BLE_BATCH_SCAN_CB ble_batchscan_cb; +tBTM_BLE_ADV_TRACK_CB ble_advtrack_cb; /* length of each batch scan command */ @@ -41,6 +42,8 @@ tBTM_BLE_BATCH_SCAN_CB ble_batchscan_cb; #define BTM_BLE_BATCH_SCAN_CB_EVT_MASK 0xF0 #define BTM_BLE_BATCH_SCAN_SUBCODE_MASK 0x0F +#define BTM_BLE_TRACK_ADV_CMD_LEN 9 + /******************************************************************************* ** Local functions *******************************************************************************/ @@ -56,9 +59,8 @@ tBTM_BLE_BATCH_SCAN_CB ble_batchscan_cb; *******************************************************************************/ void btm_ble_batchscan_filter_track_adv_vse_cback(UINT8 len, UINT8 *p) { - UINT8 sub_event; - UINT8 reason; - + UINT8 sub_event = 0, filt_index = 0, addr_type = 0, adv_state = 0; + BD_ADDR bd_addr; STREAM_TO_UINT8(sub_event, p); BTM_TRACE_EVENT("btm_ble_batchscan_filter_track_adv_vse_cback called with event:%x", sub_event); @@ -66,6 +68,21 @@ void btm_ble_batchscan_filter_track_adv_vse_cback(UINT8 len, UINT8 *p) NULL != ble_batchscan_cb.p_thres_cback) { ble_batchscan_cb.p_thres_cback(ble_batchscan_cb.ref_value); + return; + } + + if (HCI_VSE_SUBCODE_BLE_TRACKING_SUB_EVT == sub_event && NULL != ble_advtrack_cb.p_track_cback) + { + if(len < 10) + return; + STREAM_TO_UINT8(filt_index, p); + STREAM_TO_UINT8(addr_type, p); + STREAM_TO_BDADDR(bd_addr, p); + STREAM_TO_UINT8(adv_state, p); + BTM_TRACE_EVENT("track_adv_vse_cback called: %d, %d, %d", filt_index, addr_type, adv_state); + ble_advtrack_cb.p_track_cback(filt_index, addr_type, bd_addr, adv_state, + ble_advtrack_cb.ref_value); + return; } } @@ -636,6 +653,39 @@ tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_BATCH_SCAN_MODE scan_mode, /******************************************************************************* ** +** Function BTM_BleTrackAdvertiser +** +** Description This function is called to setup the callback for tracking advertisers +** +** Parameters: p_track_cback - Tracking callback pointer +** ref_value - Reference value +** +** Returns tBTM_STATUS +** +*******************************************************************************/ +tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback, + tBTM_BLE_REF_VALUE ref_value) +{ + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + BTM_TRACE_EVENT (" BTM_BleTrackAdvertiser"); + if (!HCI_LE_HOST_SUPPORTED(btm_cb.devcb.local_lmp_features[HCI_EXT_FEATURES_PAGE_1])) + return BTM_ILLEGAL_VALUE; + + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); + + if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) + { + BTM_TRACE_ERROR("Controller does not support scan storage"); + return BTM_ERR_PROCESSING; + } + + ble_advtrack_cb.p_track_cback = p_track_cback; + ble_advtrack_cb.ref_value = ref_value; + return BTM_SUCCESS; +} + +/******************************************************************************* +** ** Function btm_ble_batchscan_init ** ** Description This function initialize the batch scan control block. @@ -649,6 +699,7 @@ void btm_ble_batchscan_init(void) { BTM_TRACE_EVENT (" btm_ble_batchscan_init"); memset(&ble_batchscan_cb, 0, sizeof(tBTM_BLE_BATCH_SCAN_CB)); + memset(&ble_advtrack_cb, 0, sizeof(tBTM_BLE_ADV_TRACK_CB)); BTM_RegisterForVSEvents(btm_ble_batchscan_filter_track_adv_vse_cback, TRUE); } diff --git a/stack/include/btm_ble_api.h b/stack/include/btm_ble_api.h index ed2334482..731fce9b1 100644 --- a/stack/include/btm_ble_api.h +++ b/stack/include/btm_ble_api.h @@ -675,6 +675,17 @@ enum }; 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); + +typedef UINT8 tBTM_BLE_TRACK_ADV_EVT; + +typedef struct +{ + tBTM_BLE_REF_VALUE ref_value; + tBTM_BLE_TRACK_ADV_CBACK *p_track_cback; +}tBTM_BLE_ADV_TRACK_CB; + enum { BTM_BLE_TRACK_ADV_ADD, @@ -694,7 +705,6 @@ typedef UINT8 tBTM_BLE_TRACK_ADV_ACTION; typedef UINT8 tBTM_BLE_BATCH_SCAN_EVT; - typedef BOOLEAN (tBTM_BLE_SEL_CBACK)(BD_ADDR random_bda, UINT8 *p_remote_name); typedef void (tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status); @@ -915,16 +925,14 @@ BTM_API extern tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_SCAN_MODE scan_mode, ** ** Description This function is called to read batch scan reports ** -** Parameters track_adv_action - Track advertiser action - addr_type - address type - p_bda - BD address - onlost_timeout - Timeout for onlost event +** Parameters p_track_cback - Tracking callback +** ref_value - Reference value ** ** Returns tBTM_STATUS ** *******************************************************************************/ -BTM_API extern tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_ACTION track_adv_action, - tBLE_BD_ADDR *p_bda, UINT8 onlost_timeout); +BTM_API extern tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback, + tBTM_BLE_REF_VALUE ref_value); /******************************************************************************* ** -- 2.11.0