Merge "Refactor LE scanning HAL (1/3)"
diff --git a/include/hardware/ble_scanner.h b/include/hardware/ble_scanner.h
index dca7e43..f2a9370 100644
--- a/include/hardware/ble_scanner.h
+++ b/include/hardware/ble_scanner.h
@@ -19,107 +19,115 @@
 
 #include <stdint.h>
 #include <vector>
-#include "bt_gatt_types.h"
 #include "bt_common_types.h"
 #include "bt_gatt_client.h"
-
-/** Callback invoked in response to register_scanner */
-typedef void (*register_scanner_callback)(int status, int scanner_id,
-                bt_uuid_t *app_uuid);
+#include "bt_gatt_types.h"
 
 /** Callback invoked when batchscan storage config operation has completed */
 typedef void (*batchscan_cfg_storage_callback)(int client_if, int status);
 
 /** Callback invoked when batchscan enable / disable operation has completed */
-typedef void (*batchscan_enable_disable_callback)(int action, int client_if, int status);
+typedef void (*batchscan_enable_disable_callback)(int action, int client_if,
+                                                  int status);
 
 /** Callback invoked when batchscan reports are obtained */
-typedef void (*batchscan_reports_callback)(int client_if, int status, int report_format,
-                                           int num_records, std::vector<uint8_t> data);
+typedef void (*batchscan_reports_callback)(int client_if, int status,
+                                           int report_format, int num_records,
+                                           std::vector<uint8_t> data);
 
 /** Callback invoked when batchscan storage threshold limit is crossed */
 typedef void (*batchscan_threshold_callback)(int client_if);
 
 /** Track ADV VSE callback invoked when tracked device is found or lost */
-typedef void (*track_adv_event_callback)(btgatt_track_adv_info_t *p_track_adv_info);
+typedef void (*track_adv_event_callback)(
+    btgatt_track_adv_info_t *p_track_adv_info);
 
 /** Callback invoked when scan parameter setup has completed */
 typedef void (*scan_parameter_setup_completed_callback)(int client_if,
                                                         btgattc_error_t status);
 
 /** Callback for scan results */
-typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi, std::vector<uint8_t> adv_data);
+typedef void (*scan_result_callback)(bt_bdaddr_t *bda, int rssi,
+                                     std::vector<uint8_t> adv_data);
 
 /** Callback invoked when a scan filter configuration command has completed */
-typedef void (*scan_filter_cfg_callback)(int action, int client_if, int status, int filt_type,
-                                         int avbl_space);
+typedef void (*scan_filter_cfg_callback)(int action, int client_if, int status,
+                                         int filt_type, int avbl_space);
 
 /** Callback invoked when scan param has been added, cleared, or deleted */
-typedef void (*scan_filter_param_callback)(int action, int client_if, int status,
-                                         int avbl_space);
+typedef void (*scan_filter_param_callback)(int action, int client_if,
+                                           int status, int avbl_space);
 
 /** Callback invoked when a scan filter configuration command has completed */
-typedef void (*scan_filter_status_callback)(int enable, int client_if, int status);
+typedef void (*scan_filter_status_callback)(int enable, int client_if,
+                                            int status);
 
 typedef struct {
-    register_scanner_callback           register_scanner_cb;
-    scan_result_callback                scan_result_cb;
-    batchscan_cfg_storage_callback      batchscan_cfg_storage_cb;
-    batchscan_enable_disable_callback   batchscan_enb_disable_cb;
-    batchscan_reports_callback          batchscan_reports_cb;
-    batchscan_threshold_callback        batchscan_threshold_cb;
-    track_adv_event_callback            track_adv_event_cb;
-    scan_parameter_setup_completed_callback scan_parameter_setup_completed_cb;
-    scan_filter_cfg_callback            scan_filter_cfg_cb;
-    scan_filter_param_callback          scan_filter_param_cb;
-    scan_filter_status_callback         scan_filter_status_cb;
+  scan_result_callback scan_result_cb;
+  batchscan_cfg_storage_callback batchscan_cfg_storage_cb;
+  batchscan_enable_disable_callback batchscan_enb_disable_cb;
+  batchscan_reports_callback batchscan_reports_cb;
+  batchscan_threshold_callback batchscan_threshold_cb;
+  track_adv_event_callback track_adv_event_cb;
+  scan_parameter_setup_completed_callback scan_parameter_setup_completed_cb;
+  scan_filter_cfg_callback scan_filter_cfg_cb;
+  scan_filter_param_callback scan_filter_param_cb;
+  scan_filter_status_callback scan_filter_status_cb;
 } btgatt_scanner_callbacks_t;
 
-typedef struct {
-    /** Registers a scanner with the stack */
-    bt_status_t (*register_scanner)( bt_uuid_t *uuid );
+class BleScannerInterface {
+ public:
+  virtual ~BleScannerInterface() = default;
 
-    /** Unregister a scanner from the stack */
-    bt_status_t (*unregister_scanner)(int scanner_id );
+  using RegisterCallback =
+      base::Callback<void(uint8_t /* scanner_id */, uint8_t /* status */)>;
 
-    /** Start or stop LE device scanning */
-    bt_status_t (*scan)( bool start );
+  /** Registers a scanner with the stack */
+  virtual void RegisterScanner(RegisterCallback) = 0;
 
-    /** Setup scan filter params */
-    bt_status_t (*scan_filter_param_setup)(btgatt_filt_param_setup_t filt_param);
+  /** Unregister a scanner from the stack */
+  virtual void Unregister(int scanner_id) = 0;
 
+  /** Start or stop LE device scanning */
+  virtual void Scan(bool start) = 0;
 
-    /** Configure a scan filter condition  */
-    bt_status_t (*scan_filter_add_remove)(int client_if, int action, int filt_type,
-                                   int filt_index, int company_id,
-                                   int company_id_mask, const bt_uuid_t *p_uuid,
-                                   const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
-                                   char addr_type, std::vector<uint8_t> data,
-                                   std::vector<uint8_t> p_mask);
+  /** Setup scan filter params */
+  virtual bt_status_t scan_filter_param_setup(
+      btgatt_filt_param_setup_t filt_param) = 0;
 
-    /** Clear all scan filter conditions for specific filter index*/
-    bt_status_t (*scan_filter_clear)(int client_if, int filt_index);
+  /** Configure a scan filter condition  */
+  virtual bt_status_t scan_filter_add_remove(
+      int client_if, int action, int filt_type, int filt_index, int company_id,
+      int company_id_mask, const bt_uuid_t *p_uuid,
+      const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr, char addr_type,
+      std::vector<uint8_t> data, std::vector<uint8_t> p_mask) = 0;
 
-    /** Enable / disable scan filter feature*/
-    bt_status_t (*scan_filter_enable)(int client_if, bool enable);
+  /** Clear all scan filter conditions for specific filter index*/
+  virtual bt_status_t scan_filter_clear(int client_if, int filt_index) = 0;
 
-    /** Sets the LE scan interval and window in units of N*0.625 msec */
-    bt_status_t (*set_scan_parameters)(int client_if, int scan_interval, int scan_window);
+  /** Enable / disable scan filter feature*/
+  virtual bt_status_t scan_filter_enable(int client_if, bool enable) = 0;
 
-    /* Configure the batchscan storage */
-    bt_status_t (*batchscan_cfg_storage)(int client_if, int batch_scan_full_max,
-        int batch_scan_trunc_max, int batch_scan_notify_threshold);
+  /** Sets the LE scan interval and window in units of N*0.625 msec */
+  virtual bt_status_t set_scan_parameters(int client_if, int scan_interval,
+                                          int scan_window) = 0;
 
-    /* Enable batchscan */
-    bt_status_t (*batchscan_enb_batch_scan)(int client_if, int scan_mode,
-        int scan_interval, int scan_window, int addr_type, int discard_rule);
+  /* Configure the batchscan storage */
+  virtual bt_status_t batchscan_cfg_storage(
+      int client_if, int batch_scan_full_max, int batch_scan_trunc_max,
+      int batch_scan_notify_threshold) = 0;
 
-    /* Disable batchscan */
-    bt_status_t (*batchscan_dis_batch_scan)(int client_if);
+  /* Enable batchscan */
+  virtual bt_status_t batchscan_enb_batch_scan(int client_if, int scan_mode,
+                                               int scan_interval,
+                                               int scan_window, int addr_type,
+                                               int discard_rule) = 0;
 
-    /* Read out batchscan reports */
-    bt_status_t (*batchscan_read_reports)(int client_if, int scan_mode);
+  /* Disable batchscan */
+  virtual bt_status_t batchscan_dis_batch_scan(int client_if) = 0;
 
-} btgatt_scanner_interface_t;
+  /* Read out batchscan reports */
+  virtual bt_status_t batchscan_read_reports(int client_if, int scan_mode) = 0;
+};
 
 #endif /* ANDROID_INCLUDE_BLE_SCANNER_H */
\ No newline at end of file
diff --git a/include/hardware/bt_gatt.h b/include/hardware/bt_gatt.h
index 414d3e4..393d1a5 100644
--- a/include/hardware/bt_gatt.h
+++ b/include/hardware/bt_gatt.h
@@ -61,7 +61,7 @@
     const btgatt_server_interface_t* server;
 
     /** Pointer to the LE scanner interface methods.*/
-    const btgatt_scanner_interface_t* scanner;
+    BleScannerInterface* scanner;
 
     /** Pointer to the advertiser interface methods.*/
     BleAdvertiserInterface* advertiser;