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
