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

Unified Diff: device/bluetooth/bluetooth_remote_gatt_service_win.h

Issue 1690133002: Implement BluetoothRemoteGattServiceWin and related unit tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: device/bluetooth/bluetooth_remote_gatt_service_win.h
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_win.h b/device/bluetooth/bluetooth_remote_gatt_service_win.h
index 218bc90a03e343170a443d6da69c4fead898846b..25bf5cadd91f16993f11470673c48615ad9c7fa8 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_win.h
+++ b/device/bluetooth/bluetooth_remote_gatt_service_win.h
@@ -5,12 +5,21 @@
#ifndef DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_SERVICE_WIN_H_
#define DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_SERVICE_WIN_H_
+#include <set>
+
#include "base/files/file.h"
-#include "device/bluetooth/bluetooth_device_win.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
#include "device/bluetooth/bluetooth_gatt_service.h"
+#include "device/bluetooth/bluetooth_low_energy_defs_win.h"
namespace device {
+class BluetoothAdapterWin;
+class BluetoothDeviceWin;
+class BluetoothRemoteGattCharacteristicWin;
+class BluetoothTaskManagerWin;
+
// The BluetoothRemoteGattServiceWin class implements BluetoothGattService
// for remote GATT services on Windows 8 and later.
class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattServiceWin
@@ -43,11 +52,66 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattServiceWin
void Unregister(const base::Closure& callback,
const ErrorCallback& error_callback) override;
+ // Notify |service| discovery complete, |service| is the included service of
+ // this service.
+ void GattServiceDiscoverComplete(BluetoothRemoteGattServiceWin* service);
+
+ // Notify |characteristic| discovery complete, |characteristic| is the
+ // included characteritic of this service.
+ void GattCharacteristicDiscoverComplete(
+ BluetoothRemoteGattCharacteristicWin* characteristic);
+
// Update included services and characteristics.
void Update();
- uint16_t GetAttributeHandle();
+ uint16_t GetAttributeHandle() const { return service_attribute_handle_; }
+ BluetoothRemoteGattServiceWin* GetParentService() const {
+ return parent_service_;
+ }
private:
+ void GetIncludedCharacteristicsCallback(
+ scoped_ptr<BTH_LE_GATT_CHARACTERISTIC> characteristics,
+ uint16_t num,
+ HRESULT hr);
+ void GetIncludedServicesCallback(scoped_ptr<BTH_LE_GATT_SERVICE> services,
+ uint16_t num,
+ HRESULT hr);
+ void UpdateIncludedCharacteristics(
+ PBTH_LE_GATT_CHARACTERISTIC characteristics,
+ uint16_t num);
+ void UpdateIncludedServices(PBTH_LE_GATT_SERVICE services, uint16_t num);
+
+ // Sends GattDiscoveryCompleteForService notification if necessary.
+ void NotifyServiceDiscComplIfNecessary();
+
+ // Checks if the characteristic with |uuid| and |attribute_handle| has already
+ // been discovered as included characteristic.
+ bool IsCharacteristicDiscovered(BTH_LE_UUID& uuid, uint16_t attribute_handle);
+
+ // Checks if |characteristic| is still exist in this service according to
+ // newly retreived |num| of included |characteristics|.
+ bool DoesCharacteristicExist(
+ PBTH_LE_GATT_CHARACTERISTIC characteristics,
+ uint16_t num,
+ BluetoothRemoteGattCharacteristicWin* characteristic);
+
+ void RemoveIncludedCharacteristic(std::string identifier);
+ void ClearIncludedCharacteristics();
+
+ // Checks if the service with |uuid| and |attribute_handle| has already been
+ // discovered as included service.
+ bool IsServiceDiscovered(BluetoothUUID& uuid, uint16_t attribute_handle);
+
+ // Checks if |service| is still exist in this service according to newly
+ // retrieved |num| of included |services|.
+ bool DoesServiceExist(PBTH_LE_GATT_SERVICE services,
+ uint16_t num,
+ BluetoothRemoteGattServiceWin* service);
+
+ void RemoveIncludedService(std::string identifier);
+ void ClearIncludedServices();
+
+ BluetoothAdapterWin* adapter_;
BluetoothDeviceWin* device_;
base::FilePath service_path_;
BluetoothUUID service_uuid_;
@@ -56,6 +120,44 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattServiceWin
BluetoothRemoteGattServiceWin* parent_service_;
scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
+ // BluetoothTaskManagerWin to handle asynchronously Bluetooth IO and platform
+ // dependent operations.
+ scoped_refptr<BluetoothTaskManagerWin> task_manager_;
+
+ // The key of GattCharacteristicsMap is the identifier of
+ // BluetoothRemoteGattCharacteristicWin instance.
+ typedef std::unordered_map<std::string,
+ scoped_ptr<BluetoothRemoteGattCharacteristicWin>>
+ GattCharacteristicsMap;
+ GattCharacteristicsMap included_characteristic_;
+
+ // The element of the set is the identifier of
+ // BluetoothRemoteGattCharacteristicWin instance.
+ std::set<std::string> discovery_completed_included_charateristics_;
+
+ // The key of GattServicesMap is the identifier of
+ // BluetoothRemoteGattServiceWin instance.
+ typedef std::unordered_map<std::string,
+ scoped_ptr<BluetoothRemoteGattServiceWin>>
+ GattServicesMap;
+ GattServicesMap included_service_;
+
+ // The element of the set is the identifier of BluetoothRemoteGattServiceWin
+ // instance.
+ std::set<std::string> discovery_completed_included_services_;
+
+ // Flag indicates if discovery complete notification has been send out to
+ // avoid duplicate notification.
+ bool discovery_complete_notified_;
+
+ // Flag indicates if asynchronous discovery of included service has completed.
+ bool included_services_discovered_;
+
+ // Flag indicates if asynchronous discovery of included characteristic has
+ // completed.
+ bool included_characteristics_discovered_;
+
+ base::WeakPtrFactory<BluetoothRemoteGattServiceWin> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattServiceWin);
};

Powered by Google App Engine
This is Rietveld 408576698