Home | History | Annotate | Download | only in hardware
      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 */