summaryrefslogtreecommitdiffstats
path: root/device/bluetooth/bluetooth_remote_gatt_service_win.h
diff options
context:
space:
mode:
Diffstat (limited to 'device/bluetooth/bluetooth_remote_gatt_service_win.h')
-rw-r--r--device/bluetooth/bluetooth_remote_gatt_service_win.h69
1 files changed, 67 insertions, 2 deletions
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_win.h b/device/bluetooth/bluetooth_remote_gatt_service_win.h
index 218bc90..ada0c83d 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);
};