blob: 4ab0a77f67b8e5f321868c7f6c6b2fcf659394fe [file] [log] [blame]
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_INCLUDE_BLE_SCANNER_H
18#define ANDROID_INCLUDE_BLE_SCANNER_H
19
20#include <stdint.h>
21#include <vector>
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070022#include "bt_common_types.h"
23#include "bt_gatt_client.h"
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080024#include "bt_gatt_types.h"
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070025
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070026/** Callback invoked when batchscan reports are obtained */
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080027typedef void (*batchscan_reports_callback)(int client_if, int status,
28 int report_format, int num_records,
29 std::vector<uint8_t> data);
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070030
31/** Callback invoked when batchscan storage threshold limit is crossed */
32typedef void (*batchscan_threshold_callback)(int client_if);
33
34/** Track ADV VSE callback invoked when tracked device is found or lost */
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080035typedef void (*track_adv_event_callback)(
36 btgatt_track_adv_info_t *p_track_adv_info);
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070037
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070038/** Callback for scan results */
Jakub Pawlowski701ab732017-01-30 06:44:55 -080039typedef void (*scan_result_callback)(uint16_t event_type, uint8_t addr_type,
40 bt_bdaddr_t *bda, uint8_t primary_phy,
41 uint8_t secondary_phy,
42 uint8_t advertising_sid, int8_t tx_power,
43 int8_t rssi, uint16_t periodic_adv_int,
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080044 std::vector<uint8_t> adv_data);
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070045
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070046typedef struct {
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080047 scan_result_callback scan_result_cb;
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080048 batchscan_reports_callback batchscan_reports_cb;
49 batchscan_threshold_callback batchscan_threshold_cb;
50 track_adv_event_callback track_adv_event_cb;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070051} btgatt_scanner_callbacks_t;
52
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080053class BleScannerInterface {
54 public:
55 virtual ~BleScannerInterface() = default;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070056
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080057 using RegisterCallback =
58 base::Callback<void(uint8_t /* scanner_id */, uint8_t /* status */)>;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070059
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -080060 using Callback = base::Callback<void(uint8_t /* status */)>;
61
62 using EnableCallback =
63 base::Callback<void(uint8_t /* action */, uint8_t /* status */)>;
64
65 using FilterParamSetupCallback =
66 base::Callback<void(uint8_t /* avbl_space */, uint8_t /* action_type */,
67 uint8_t /* status */)>;
68
69 using FilterConfigCallback =
70 base::Callback<void(uint8_t /* filt_type */, uint8_t /* avbl_space */,
71 uint8_t /* action */, uint8_t /* status */)>;
72
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080073 /** Registers a scanner with the stack */
74 virtual void RegisterScanner(RegisterCallback) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070075
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080076 /** Unregister a scanner from the stack */
77 virtual void Unregister(int scanner_id) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070078
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080079 /** Start or stop LE device scanning */
80 virtual void Scan(bool start) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070081
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080082 /** Setup scan filter params */
Jakub Pawlowski442eae02016-12-19 11:52:19 -080083 virtual void ScanFilterParamSetup(
84 uint8_t client_if, uint8_t action, uint8_t filt_index,
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -080085 std::unique_ptr<btgatt_filt_param_setup_t> filt_param,
86 FilterParamSetupCallback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070087
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080088 /** Configure a scan filter condition */
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -080089 virtual void ScanFilterAddRemove(int action, int filt_type, int filt_index,
90 int company_id, int company_id_mask,
91 const bt_uuid_t *p_uuid,
Jakub Pawlowski442eae02016-12-19 11:52:19 -080092 const bt_uuid_t *p_uuid_mask,
93 const bt_bdaddr_t *bd_addr, char addr_type,
94 std::vector<uint8_t> data,
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -080095 std::vector<uint8_t> p_mask,
96 FilterConfigCallback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -070097
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -080098 /** Clear all scan filter conditions for specific filter index*/
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -080099 virtual void ScanFilterClear(int filt_index, FilterConfigCallback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700100
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800101 /** Enable / disable scan filter feature*/
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -0800102 virtual void ScanFilterEnable(bool enable, EnableCallback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700103
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800104 /** Sets the LE scan interval and window in units of N*0.625 msec */
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -0800105 virtual void SetScanParameters(int scan_interval, int scan_window,
106 Callback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700107
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800108 /* Configure the batchscan storage */
Jakub Pawlowski442eae02016-12-19 11:52:19 -0800109 virtual void BatchscanConfigStorage(int client_if, int batch_scan_full_max,
110 int batch_scan_trunc_max,
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -0800111 int batch_scan_notify_threshold,
112 Callback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700113
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800114 /* Enable batchscan */
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -0800115 virtual void BatchscanEnable(int scan_mode, int scan_interval,
116 int scan_window, int addr_type, int discard_rule,
117 Callback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700118
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800119 /* Disable batchscan */
Jakub Pawlowski62ddb5d2017-02-16 11:57:11 -0800120 virtual void BatchscanDisable(Callback cb) = 0;
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700121
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800122 /* Read out batchscan reports */
Jakub Pawlowski442eae02016-12-19 11:52:19 -0800123 virtual void BatchscanReadReports(int client_if, int scan_mode) = 0;
Jakub Pawlowskid5286ae2016-12-14 13:38:18 -0800124};
Jakub Pawlowski1e24ce92016-10-27 12:26:07 -0700125
126#endif /* ANDROID_INCLUDE_BLE_SCANNER_H */