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..ada0c83dfe75c492a91829d26889619ffd902ad7 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,42 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattServiceWin |
void Unregister(const base::Closure& callback, |
const ErrorCallback& error_callback) override; |
+ // Notify |characteristic| discovery complete, |characteristic| is the |
+ // included characteritic of this service. |
+ void GattCharacteristicDiscoveryComplete( |
+ BluetoothRemoteGattCharacteristicWin* characteristic); |
+ |
// Update included services and characteristics. |
void Update(); |
- uint16_t GetAttributeHandle(); |
+ uint16_t GetAttributeHandle() const { return service_attribute_handle_; } |
private: |
+ void OnGetIncludedCharacteristics( |
+ scoped_ptr<BTH_LE_GATT_CHARACTERISTIC> characteristics, |
+ uint16_t num, |
+ HRESULT hr); |
+ void UpdateIncludedCharacteristics( |
+ PBTH_LE_GATT_CHARACTERISTIC characteristics, |
+ uint16_t num); |
+ |
+ // Sends GattDiscoveryCompleteForService notification if necessary. |
+ void NotifyGattDiscoveryCompleteForServiceIfNecessary(); |
+ |
+ // 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| still exists in this service according to newly |
+ // retreived |num| of included |characteristics|. |
+ static bool DoesCharacteristicExist( |
+ PBTH_LE_GATT_CHARACTERISTIC characteristics, |
+ uint16_t num, |
+ BluetoothRemoteGattCharacteristicWin* characteristic); |
+ |
+ void RemoveIncludedCharacteristic(std::string identifier); |
+ void ClearIncludedCharacteristics(); |
+ |
+ BluetoothAdapterWin* adapter_; |
BluetoothDeviceWin* device_; |
base::FilePath service_path_; |
BluetoothUUID service_uuid_; |
@@ -55,7 +95,32 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattServiceWin |
bool is_primary_; |
BluetoothRemoteGattServiceWin* parent_service_; |
scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; |
+ std::string service_identifier_; |
+ |
+ // 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_characteristics_; |
+ |
+ // The element of the set is the identifier of |
+ // BluetoothRemoteGattCharacteristicWin instance. |
+ std::set<std::string> discovery_completed_included_charateristics_; |
+ |
+ // 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 characteristic has |
+ // completed. |
+ bool included_characteristics_discovered_; |
+ base::WeakPtrFactory<BluetoothRemoteGattServiceWin> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattServiceWin); |
}; |