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

Side by Side Diff: device/bluetooth/bluetooth_task_manager_win.h

Issue 1606013002: BLE GATT service implementation in Chrome for Windows 8 and later (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Build.gn Created 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_ 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_ 6 #define DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_vector.h" 16 #include "base/memory/scoped_vector.h"
17 #include "base/observer_list.h" 17 #include "base/observer_list.h"
18 #include "base/win/scoped_handle.h" 18 #include "base/win/scoped_handle.h"
19 #include "device/bluetooth/bluetooth_adapter.h" 19 #include "device/bluetooth/bluetooth_adapter.h"
20 #include "device/bluetooth/bluetooth_export.h" 20 #include "device/bluetooth/bluetooth_export.h"
21 #include "device/bluetooth/bluetooth_low_energy_win.h"
21 22
22 namespace base { 23 namespace base {
23 24
24 class SequencedTaskRunner; 25 class SequencedTaskRunner;
25 class SequencedWorkerPool; 26 class SequencedWorkerPool;
26 27
27 } // namespace base 28 } // namespace base
28 29
29 namespace device { 30 namespace device {
30 31
(...skipping 18 matching lines...) Expand all
49 50
50 struct DEVICE_BLUETOOTH_EXPORT ServiceRecordState { 51 struct DEVICE_BLUETOOTH_EXPORT ServiceRecordState {
51 ServiceRecordState(); 52 ServiceRecordState();
52 ~ServiceRecordState(); 53 ~ServiceRecordState();
53 // Properties common to Bluetooth Classic and LE devices. 54 // Properties common to Bluetooth Classic and LE devices.
54 std::string name; 55 std::string name;
55 // Properties specific to Bluetooth Classic devices. 56 // Properties specific to Bluetooth Classic devices.
56 std::vector<uint8_t> sdp_bytes; 57 std::vector<uint8_t> sdp_bytes;
57 // Properties specific to Bluetooth LE devices. 58 // Properties specific to Bluetooth LE devices.
58 BluetoothUUID gatt_uuid; 59 BluetoothUUID gatt_uuid;
60 uint16_t gatt_attribute_handle;
61 base::FilePath path;
59 }; 62 };
60 63
61 struct DEVICE_BLUETOOTH_EXPORT DeviceState { 64 struct DEVICE_BLUETOOTH_EXPORT DeviceState {
62 DeviceState(); 65 DeviceState();
63 ~DeviceState(); 66 ~DeviceState();
64 67
65 bool is_bluetooth_classic() const { return path.empty(); } 68 bool is_bluetooth_classic() const { return path.empty(); }
66 69
67 // Properties common to Bluetooth Classic and LE devices. 70 // Properties common to Bluetooth Classic and LE devices.
68 std::string address; // This uniquely identifies the device. 71 std::string address; // This uniquely identifies the device.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner); 108 scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner);
106 void Shutdown(); 109 void Shutdown();
107 110
108 void PostSetPoweredBluetoothTask( 111 void PostSetPoweredBluetoothTask(
109 bool powered, 112 bool powered,
110 const base::Closure& callback, 113 const base::Closure& callback,
111 const BluetoothAdapter::ErrorCallback& error_callback); 114 const BluetoothAdapter::ErrorCallback& error_callback);
112 void PostStartDiscoveryTask(); 115 void PostStartDiscoveryTask();
113 void PostStopDiscoveryTask(); 116 void PostStopDiscoveryTask();
114 117
118 // Callbacks of asynchronous operations of GATT services, characteristics and
119 // descriptors.
120 typedef base::Callback<void(HRESULT)> HResultCallback;
121 typedef base::Callback<void(PBTH_LE_GATT_SERVICE, uint16_t, HRESULT)>
122 GetGattIncludedServicesCallback;
123 typedef base::Callback<void(PBTH_LE_GATT_CHARACTERISTIC, uint16_t, HRESULT)>
124 GetGattIncludedCharacteristicsCallback;
125 typedef base::Callback<void(PBTH_LE_GATT_CHARACTERISTIC_VALUE, HRESULT)>
126 ReadCharacteristicValueCallback;
127 typedef base::Callback<void(PBTH_LE_GATT_DESCRIPTOR, uint16_t, HRESULT)>
128 GetGattIncludedDescriptorsCallback;
129 typedef base::Callback<void(PBTH_LE_GATT_DESCRIPTOR_VALUE, HRESULT)>
130 ReadDescriptorValueCallback;
131 typedef base::Callback<void(BLUETOOTH_GATT_EVENT_HANDLE, HRESULT)>
132 GattEventRegistrationCallback;
133
134 // Get all included services of a given service. The service is uniquely
135 // identified by its |uuid| and |attribute_handle| on service device
136 // |service_path|. The result is returned asynchronously through |callback|.
137 void PostGetGattIncludedServices(
138 const base::FilePath& service_path,
139 const BluetoothUUID& uuid,
140 uint16_t attribute_handle,
141 const GetGattIncludedServicesCallback& callback);
142
143 // Get all included characteristics of a given service. The service is
144 // uniquely identified by its |uuid| and |attribute_handle| on service device
145 // |service_path|. The result is returned asynchronously through |callback|.
146 void PostGetGattIncludedCharacteristics(
147 const base::FilePath& service_path,
148 const BluetoothUUID& uuid,
149 uint16_t attribute_handle,
150 const GetGattIncludedCharacteristicsCallback& callback);
151
152 // Read the value of a given |characteristic| in service |service_path|. The
153 // result is returned asynchronously through |callback|.
154 void PostReadCharacteristicValue(
155 const base::FilePath& device_path,
156 const PBTH_LE_GATT_CHARACTERISTIC characteristic,
157 const ReadCharacteristicValueCallback& callback);
158
159 // Write the value of a given |characteristic| in service |service_path| with
160 // the |new_value|. The operation result is returned asynchronously through
161 // |callback|.
162 void PostWriteCharacteristicValue(
163 const base::FilePath& service_path,
164 const PBTH_LE_GATT_CHARACTERISTIC characteristic,
165 const std::vector<uint8_t>& new_value,
166 const HResultCallback& callback);
167
168 // Reliable write the value of a given |characteristic| in service
169 // |service_path| with the |new_value|. The operation result is returned
170 // asynchronously through |callback|.
171 void PostReliableWriteCharacteristicValue(
172 const base::FilePath& service_path,
173 const PBTH_LE_GATT_CHARACTERISTIC characteristic,
174 const std::vector<uint8_t>& new_value,
175 const HResultCallback& callback);
176
177 // Get included descriptors of a given |characterisitc| in service
178 // |service_path|. The result is returned asynchronously through |callback|.
179 void PostGetGattIncludedDescriptors(
180 const base::FilePath& service_path,
181 const PBTH_LE_GATT_CHARACTERISTIC characteristic,
182 const GetGattIncludedDescriptorsCallback& callback);
183
184 // Read a given |descriptor| value in service |service_path|. The result is
185 // returned asynchronously through |callback|.
186 void PostReadDescriptorValue(const base::FilePath& service_path,
187 const PBTH_LE_GATT_DESCRIPTOR descriptor,
188 const ReadDescriptorValueCallback& callback);
189
190 // Write a given |descriptor| value in service |service_path| with the
191 // |new_value|. The operation result is returned asynchronously through
192 // |callback|.
193 void PostWriteDescriptorValue(const base::FilePath& service_path,
194 const PBTH_LE_GATT_DESCRIPTOR descriptor,
195 const std::vector<uint8_t>& new_value,
196 const HResultCallback& callback);
197
198 // Register a given |characteristic|'s value change notification of a service
199 // |service_path| with |registered_callback|. |context| is the given void
200 // pointer send back to caller through |registered_callback|. The operation
201 // result is returned asynchronously through |callback|.
202 void PostRegisterCharacteristicValueChangedEvent(
203 const base::FilePath& service_path,
204 const PBTH_LE_GATT_CHARACTERISTIC characteristic,
205 const GattEventRegistrationCallback& callback,
206 PFNBLUETOOTH_GATT_EVENT_CALLBACK registered_callback,
207 void* context);
208
209 // Unregister characteristic value change notification. |event_handle| was
210 // returned by PostRegisterCharacteristicValueChangedEvent.
211 void UnregisterCharacteristicValueChangedEvent(
212 BLUETOOTH_GATT_EVENT_HANDLE event_handle);
213
214 BluetoothUUID BluetoothLowEnergyUuidToBluetoothUuid(
215 const BTH_LE_UUID& bth_le_uuid);
216
115 private: 217 private:
116 friend class base::RefCountedThreadSafe<BluetoothTaskManagerWin>; 218 friend class base::RefCountedThreadSafe<BluetoothTaskManagerWin>;
117 friend class BluetoothTaskManagerWinTest; 219 friend class BluetoothTaskManagerWinTest;
118 220
119 static const int kPollIntervalMs; 221 static const int kPollIntervalMs;
120 222
121 virtual ~BluetoothTaskManagerWin(); 223 virtual ~BluetoothTaskManagerWin();
122 224
123 // Logs Win32 errors occurring during polling on the worker thread. The method 225 // Logs Win32 errors occurring during polling on the worker thread. The method
124 // may discard messages to avoid logging being too verbose. 226 // may discard messages to avoid logging being too verbose.
125 void LogPollingError(const char* message, int win32_error); 227 void LogPollingError(const char* message, int win32_error);
126 228
127 // Notify all Observers of updated AdapterState. Should only be called on the 229 // Notify all Observers of updated AdapterState. Should only be called on the
128 // UI thread. 230 // UI thread.
129 void OnAdapterStateChanged(const AdapterState* state); 231 void OnAdapterStateChanged(const AdapterState* state);
130 void OnDiscoveryStarted(bool success); 232 void OnDiscoveryStarted(bool success);
131 void OnDiscoveryStopped(); 233 void OnDiscoveryStopped();
132 void OnDevicesPolled(const ScopedVector<DeviceState>* devices); 234 void OnDevicesPolled(const ScopedVector<DeviceState>* devices);
133 235
134 // Called on BluetoothTaskRunner. 236 // Called on BluetoothTaskRunner.
135 void StartPolling(); 237 void StartPolling();
136 void PollAdapter(); 238 void PollAdapter();
137 void PostAdapterStateToUi(); 239 void PostAdapterStateToUi();
138 void SetPowered(bool powered, 240 void SetPowered(bool powered,
139 const base::Closure& callback, 241 const base::Closure& callback,
140 const BluetoothAdapter::ErrorCallback& error_callback); 242 const BluetoothAdapter::ErrorCallback& error_callback);
141 243
244 // Gatt services related functions.
245 void GetGattIncludedServices(base::FilePath service_path,
246 BluetoothUUID uuid,
247 uint16_t attribute_handle,
248 const GetGattIncludedServicesCallback& callback);
249 void GetGattIncludedCharacteristics(
250 base::FilePath device_path,
251 BluetoothUUID uuid,
252 uint16_t attribute_handle,
253 const GetGattIncludedCharacteristicsCallback& callback);
254 void ReadCharacteristicValue(base::FilePath service_path,
255 BTH_LE_GATT_CHARACTERISTIC characteristic,
256 const ReadCharacteristicValueCallback& callback);
257 void WriteCharacteristicValue(base::FilePath device_path,
258 BTH_LE_GATT_CHARACTERISTIC characteristic,
259 std::vector<uint8_t> new_value,
260 const HResultCallback& callback);
261 void ReliableWriteCharacteristicValue(
262 base::FilePath service_path,
263 BTH_LE_GATT_CHARACTERISTIC characteristic,
264 std::vector<uint8_t> new_value,
265 const HResultCallback& callback);
266 void GetGattIncludedDescriptors(
267 base::FilePath service_path,
268 BTH_LE_GATT_CHARACTERISTIC characteristic,
269 const GetGattIncludedDescriptorsCallback& callback);
270 void ReadDescriptorValue(base::FilePath service_path,
271 BTH_LE_GATT_DESCRIPTOR descriptor,
272 const ReadDescriptorValueCallback& callback);
273 void WriteDescriptorValue(base::FilePath service_path,
274 BTH_LE_GATT_DESCRIPTOR descriptor,
275 std::vector<uint8_t> new_value,
276 const HResultCallback& callback);
277 void RegisterCharacteristicValueChangedEvent(
278 base::FilePath service_path,
279 BTH_LE_GATT_CHARACTERISTIC characteristic,
280 const GattEventRegistrationCallback& callback,
281 PFNBLUETOOTH_GATT_EVENT_CALLBACK registered_callback,
282 void* context);
283
142 // Starts discovery. Once the discovery starts, it issues a discovery inquiry 284 // Starts discovery. Once the discovery starts, it issues a discovery inquiry
143 // with a short timeout, then issues more inquiries with greater timeout 285 // with a short timeout, then issues more inquiries with greater timeout
144 // values. The discovery finishes when StopDiscovery() is called or timeout 286 // values. The discovery finishes when StopDiscovery() is called or timeout
145 // has reached its maximum value. 287 // has reached its maximum value.
146 void StartDiscovery(); 288 void StartDiscovery();
147 void StopDiscovery(); 289 void StopDiscovery();
148 290
149 // Issues a device inquiry that runs for |timeout_multiplier| * 1.28 seconds. 291 // Issues a device inquiry that runs for |timeout_multiplier| * 1.28 seconds.
150 // This posts itself again with |timeout_multiplier| + 1 until 292 // This posts itself again with |timeout_multiplier| + 1 until
151 // |timeout_multiplier| reaches the maximum value or stop discovery call is 293 // |timeout_multiplier| reaches the maximum value or stop discovery call is
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 // Returns a Win32 error code. 329 // Returns a Win32 error code.
188 int DiscoverClassicDeviceServicesWorker( 330 int DiscoverClassicDeviceServicesWorker(
189 const std::string& device_address, 331 const std::string& device_address,
190 const GUID& protocol_uuid, 332 const GUID& protocol_uuid,
191 bool search_cached_services_only, 333 bool search_cached_services_only,
192 ScopedVector<ServiceRecordState>* service_record_states); 334 ScopedVector<ServiceRecordState>* service_record_states);
193 335
194 // Discover Bluetooth Low Energy services for the given |device_path|. 336 // Discover Bluetooth Low Energy services for the given |device_path|.
195 bool DiscoverLowEnergyDeviceServices( 337 bool DiscoverLowEnergyDeviceServices(
196 const base::FilePath& device_path, 338 const base::FilePath& device_path,
339 const std::string device_address,
197 ScopedVector<ServiceRecordState>* service_record_states); 340 ScopedVector<ServiceRecordState>* service_record_states);
198 341
342 bool BluetoothUUIDToBLEUUIDWin(const BluetoothUUID& uuid,
343 BTH_LE_UUID* win_uuid);
344
199 // UI task runner reference. 345 // UI task runner reference.
200 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 346 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
201 347
202 scoped_refptr<base::SequencedWorkerPool> worker_pool_; 348 scoped_refptr<base::SequencedWorkerPool> worker_pool_;
203 scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner_; 349 scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner_;
204 350
205 // List of observers interested in event notifications. 351 // List of observers interested in event notifications.
206 base::ObserverList<Observer> observers_; 352 base::ObserverList<Observer> observers_;
207 353
208 // Adapter handle owned by bluetooth task runner. 354 // Adapter handle owned by bluetooth task runner.
209 base::win::ScopedHandle adapter_handle_; 355 base::win::ScopedHandle adapter_handle_;
210 356
211 // indicates whether the adapter is in discovery mode or not. 357 // indicates whether the adapter is in discovery mode or not.
212 bool discovering_; 358 bool discovering_;
213 359
214 // Use for discarding too many log messages. 360 // Use for discarding too many log messages.
215 base::TimeTicks current_logging_batch_ticks_; 361 base::TimeTicks current_logging_batch_ticks_;
216 int current_logging_batch_count_; 362 int current_logging_batch_count_;
217 363
218 DISALLOW_COPY_AND_ASSIGN(BluetoothTaskManagerWin); 364 DISALLOW_COPY_AND_ASSIGN(BluetoothTaskManagerWin);
219 }; 365 };
220 366
221 } // namespace device 367 } // namespace device
222 368
223 #endif // DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_ 369 #endif // DEVICE_BLUETOOTH_BLUETOOTH_TASK_MANAGER_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698