1 // Copyright 2014 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.
5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_WIN_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_WIN_H_
8 #include "base/files/file_path.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/scoped_vector.h"
11 #include "base/win/scoped_handle.h"
12 #include "device/bluetooth/bluetooth_export.h"
13 #include "device/bluetooth/bluetooth_low_energy_defs_win.h"
18 // Represents a device registry property value
19 class DEVICE_BLUETOOTH_EXPORT DeviceRegistryPropertyValue
{
21 // Creates a property value instance, where |property_type| is one of REG_xxx
22 // registry value type (e.g. REG_SZ, REG_DWORD), |value| is a byte array
23 // containing the property value and |value_size| is the number of bytes in
24 // |value|. Note the returned instance takes ownership of the bytes in
26 static scoped_ptr
<DeviceRegistryPropertyValue
> Create(
28 scoped_ptr
<uint8_t[]> value
,
30 ~DeviceRegistryPropertyValue();
32 // Returns the vaue type a REG_xxx value (e.g. REG_SZ, REG_DWORD, ...)
33 DWORD
property_type() const { return property_type_
; }
35 std::string
AsString() const;
36 DWORD
AsDWORD() const;
39 DeviceRegistryPropertyValue(DWORD property_type
,
40 scoped_ptr
<uint8_t[]> value
,
44 scoped_ptr
<uint8_t[]> value_
;
47 DISALLOW_COPY_AND_ASSIGN(DeviceRegistryPropertyValue
);
50 // Represents the value associated to a DEVPROPKEY.
51 class DEVICE_BLUETOOTH_EXPORT DevicePropertyValue
{
53 // Creates a property value instance, where |property_type| is one of
54 // DEVPROP_TYPE_xxx value type , |value| is a byte array containing the
55 // property value and |value_size| is the number of bytes in |value|. Note the
56 // returned instance takes ownership of the bytes in |value|.
57 DevicePropertyValue(DEVPROPTYPE property_type
,
58 scoped_ptr
<uint8_t[]> value
,
60 ~DevicePropertyValue();
62 DEVPROPTYPE
property_type() const { return property_type_
; }
64 uint32_t AsUint32() const;
67 DEVPROPTYPE property_type_
;
68 scoped_ptr
<uint8_t[]> value_
;
71 DISALLOW_COPY_AND_ASSIGN(DevicePropertyValue
);
74 // Returns true only on Windows platforms supporting Bluetooth Low Energy.
75 bool IsBluetoothLowEnergySupported();
77 struct BluetoothLowEnergyServiceInfo
{
78 BluetoothLowEnergyServiceInfo();
79 ~BluetoothLowEnergyServiceInfo();
84 struct BluetoothLowEnergyDeviceInfo
{
85 BluetoothLowEnergyDeviceInfo();
86 ~BluetoothLowEnergyDeviceInfo();
90 std::string friendly_name
;
91 BLUETOOTH_ADDRESS address
;
97 // Enumerates the list of known (i.e. already paired) Bluetooth LE devices on
98 // this machine. In case of error, returns false and sets |error| with an error
99 // message describing the problem.
100 // Note: This function returns an error if Bluetooth Low Energy is not supported
101 // on this Windows platform.
102 bool EnumerateKnownBluetoothLowEnergyDevices(
103 ScopedVector
<BluetoothLowEnergyDeviceInfo
>* devices
,
106 // Enumerates the list of known (i.e. cached) GATT services for a given
107 // Bluetooth LE device |device_path| into |services|. In case of error, returns
108 // false and sets |error| with an error message describing the problem. Note:
109 // This function returns an error if Bluetooth Low Energy is not supported on
110 // this Windows platform.
111 bool EnumerateKnownBluetoothLowEnergyServices(
112 const base::FilePath
& device_path
,
113 ScopedVector
<BluetoothLowEnergyServiceInfo
>* services
,
116 bool DEVICE_BLUETOOTH_EXPORT
117 ExtractBluetoothAddressFromDeviceInstanceIdForTesting(
118 const std::string
& instance_id
,
119 BLUETOOTH_ADDRESS
* btha
,
123 } // namespace device
125 #endif // DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_WIN_H_