1 /* 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> 22 #include "bt_common_types.h" 23 #include "bt_gatt_client.h" 24 #include "bt_gatt_types.h" 25 26 /** Callback invoked when batchscan reports are obtained */ 27 typedef void (*batchscan_reports_callback)(int client_if, int status, 28 int report_format, int num_records, 29 std::vector<uint8_t> data); 30 31 /** Callback invoked when batchscan storage threshold limit is crossed */ 32 typedef void (*batchscan_threshold_callback)(int client_if); 33 34 /** Track ADV VSE callback invoked when tracked device is found or lost */ 35 typedef void (*track_adv_event_callback)( 36 btgatt_track_adv_info_t* p_track_adv_info); 37 38 /** Callback for scan results */ 39 typedef void (*scan_result_callback)(uint16_t event_type, uint8_t addr_type, 40 RawAddress* 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, 44 std::vector<uint8_t> adv_data); 45 46 typedef struct { 47 scan_result_callback scan_result_cb; 48 batchscan_reports_callback batchscan_reports_cb; 49 batchscan_threshold_callback batchscan_threshold_cb; 50 track_adv_event_callback track_adv_event_cb; 51 } btgatt_scanner_callbacks_t; 52 53 class BleScannerInterface { 54 public: 55 virtual ~BleScannerInterface() = default; 56 57 using RegisterCallback = 58 base::Callback<void(uint8_t /* scanner_id */, uint8_t /* status */)>; 59 60 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 73 /** Registers a scanner with the stack */ 74 virtual void RegisterScanner(RegisterCallback) = 0; 75 76 /** Unregister a scanner from the stack */ 77 virtual void Unregister(int scanner_id) = 0; 78 79 /** Start or stop LE device scanning */ 80 virtual void Scan(bool start) = 0; 81 82 /** Setup scan filter params */ 83 virtual void ScanFilterParamSetup( 84 uint8_t client_if, uint8_t action, uint8_t filt_index, 85 std::unique_ptr<btgatt_filt_param_setup_t> filt_param, 86 FilterParamSetupCallback cb) = 0; 87 88 /** Configure a scan filter condition */ 89 virtual void ScanFilterAdd(int filter_index, std::vector<ApcfCommand> filters, 90 FilterConfigCallback cb) = 0; 91 92 /** Clear all scan filter conditions for specific filter index*/ 93 virtual void ScanFilterClear(int filt_index, FilterConfigCallback cb) = 0; 94 95 /** Enable / disable scan filter feature*/ 96 virtual void ScanFilterEnable(bool enable, EnableCallback cb) = 0; 97 98 /** Sets the LE scan interval and window in units of N*0.625 msec */ 99 virtual void SetScanParameters(int scan_interval, int scan_window, 100 Callback cb) = 0; 101 102 /* Configure the batchscan storage */ 103 virtual void BatchscanConfigStorage(int client_if, int batch_scan_full_max, 104 int batch_scan_trunc_max, 105 int batch_scan_notify_threshold, 106 Callback cb) = 0; 107 108 /* Enable batchscan */ 109 virtual void BatchscanEnable(int scan_mode, int scan_interval, 110 int scan_window, int addr_type, int discard_rule, 111 Callback cb) = 0; 112 113 /* Disable batchscan */ 114 virtual void BatchscanDisable(Callback cb) = 0; 115 116 /* Read out batchscan reports */ 117 virtual void BatchscanReadReports(int client_if, int scan_mode) = 0; 118 119 using StartSyncCb = 120 base::Callback<void(uint8_t status, uint16_t sync_handle, 121 uint8_t advertising_sid, uint8_t address_type, 122 RawAddress address, uint8_t phy, uint16_t interval)>; 123 using SyncReportCb = 124 base::Callback<void(uint16_t sync_handle, int8_t tx_power, int8_t rssi, 125 uint8_t status, std::vector<uint8_t> data)>; 126 using SyncLostCb = base::Callback<void(uint16_t sync_handle)>; 127 virtual void StartSync(uint8_t sid, RawAddress address, uint16_t skip, 128 uint16_t timeout, StartSyncCb start_cb, 129 SyncReportCb report_cb, SyncLostCb lost_cb) = 0; 130 virtual void StopSync(uint16_t handle) = 0; 131 }; 132 133 #endif /* ANDROID_INCLUDE_BLE_SCANNER_H */