Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: chromeos/components/tether/ble_scanner.h

Issue 2604063003: [CrOS Tether] Create BleScanner, a class which scan BLE advertisements and identifies nearby device… (Closed)
Patch Set: Add missing dependency. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chromeos/components/tether/ble_constants.cc ('k') | chromeos/components/tether/ble_scanner.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROMEOS_COMPONENTS_BLE_SCANNER_H_
6 #define CHROMEOS_COMPONENTS_BLE_SCANNER_H_
7
8 #include <map>
9
10 #include "base/macros.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/observer_list.h"
13 #include "chromeos/components/tether/local_device_data_provider.h"
14 #include "components/cryptauth/eid_generator.h"
15 #include "device/bluetooth/bluetooth_adapter.h"
16 #include "device/bluetooth/bluetooth_adapter_factory.h"
17
18 namespace device {
19 class BluetoothDevice;
20 class BluetoothDiscoverySession;
21 }
22
23 namespace chromeos {
24
25 namespace tether {
26
27 class BleScanner : public device::BluetoothAdapter::Observer {
28 public:
29 class Observer {
30 public:
31 virtual void OnReceivedAdvertisementFromDevice(
32 const device::BluetoothDevice* bluetooth_device,
33 cryptauth::RemoteDevice remote_device) = 0;
34 };
35
36 BleScanner(const LocalDeviceDataProvider* local_device_data_provider);
37 ~BleScanner() override;
38
39 bool RegisterScanFilterForDevice(
40 const cryptauth::RemoteDevice& remote_device);
41 bool UnregisterScanFilterForDevice(
42 const cryptauth::RemoteDevice& remote_device);
43
44 bool IsDeviceRegistered(const std::string& device_id);
45
46 void AddObserver(Observer* observer);
47 void RemoveObserver(Observer* observer);
48
49 // device::BluetoothAdapter::Observer
50 void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
51 bool powered) override;
52 void DeviceAdded(device::BluetoothAdapter* adapter,
53 device::BluetoothDevice* bluetooth_device) override;
54 void DeviceChanged(device::BluetoothAdapter* adapter,
55 device::BluetoothDevice* bluetooth_device) override;
56
57 private:
58 friend class BleScannerTest;
59
60 class Delegate {
61 public:
62 virtual ~Delegate() {}
63 virtual bool IsBluetoothAdapterAvailable() const = 0;
64 virtual void GetAdapter(
65 const device::BluetoothAdapterFactory::AdapterCallback& callback) = 0;
66 virtual const std::vector<uint8_t>* GetServiceDataForUUID(
67 const device::BluetoothUUID& service_uuid,
68 device::BluetoothDevice* bluetooth_device) = 0;
69 };
70
71 class DelegateImpl : public Delegate {
72 public:
73 DelegateImpl();
74 ~DelegateImpl() override;
75 bool IsBluetoothAdapterAvailable() const override;
76 void GetAdapter(const device::BluetoothAdapterFactory::AdapterCallback&
77 callback) override;
78 const std::vector<uint8_t>* GetServiceDataForUUID(
79 const device::BluetoothUUID& service_uuid,
80 device::BluetoothDevice* bluetooth_device) override;
81 };
82
83 BleScanner(std::unique_ptr<Delegate> delegate,
84 const cryptauth::EidGenerator* eid_generator,
85 const LocalDeviceDataProvider* local_device_data_provider);
86
87 void UpdateDiscoveryStatus();
88 void InitializeBluetoothAdapter();
89 void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter);
90 void StartDiscoverySession();
91 void OnDiscoverySessionStarted(
92 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session);
93 void OnStartDiscoverySessionError();
94 void StopDiscoverySession();
95 void HandleDeviceUpdated(device::BluetoothDevice* bluetooth_device);
96 void CheckForMatchingScanFilters(device::BluetoothDevice* bluetooth_device,
97 std::string& service_data);
98
99 std::unique_ptr<Delegate> delegate_;
100
101 // |eid_generator_| and |local_device_data_provider_| are not owned by this
102 // instance and must outlive it.
103 const cryptauth::EidGenerator* eid_generator_;
104 const LocalDeviceDataProvider* local_device_data_provider_;
105
106 bool is_initializing_adapter_;
107 scoped_refptr<device::BluetoothAdapter> adapter_;
108
109 bool is_initializing_discovery_session_;
110 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session_;
111
112 std::vector<cryptauth::RemoteDevice> registered_remote_devices_;
113
114 base::ObserverList<Observer> observer_list_;
115
116 base::WeakPtrFactory<BleScanner> weak_ptr_factory_;
117
118 DISALLOW_COPY_AND_ASSIGN(BleScanner);
119 };
120
121 } // namespace tether
122
123 } // namespace chromeos
124
125 #endif // CHROMEOS_COMPONENTS_BLE_SCANNER_H_
OLDNEW
« no previous file with comments | « chromeos/components/tether/ble_constants.cc ('k') | chromeos/components/tether/ble_scanner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698