| Index: device/bluetooth/bluetooth_low_energy_win.cc
|
| diff --git a/device/bluetooth/bluetooth_low_energy_win.cc b/device/bluetooth/bluetooth_low_energy_win.cc
|
| index 29932b9301e258b97ff4241e14b1148fcff7fbc9..1e985b54f1b00b2b771c61374519a5c76a19490b 100644
|
| --- a/device/bluetooth/bluetooth_low_energy_win.cc
|
| +++ b/device/bluetooth/bluetooth_low_energy_win.cc
|
| @@ -650,10 +650,6 @@ BluetoothLowEnergyDeviceInfo::BluetoothLowEnergyDeviceInfo()
|
| BluetoothLowEnergyDeviceInfo::~BluetoothLowEnergyDeviceInfo() {
|
| }
|
|
|
| -bool IsBluetoothLowEnergySupported() {
|
| - return base::win::GetVersion() >= base::win::VERSION_WIN8;
|
| -}
|
| -
|
| bool ExtractBluetoothAddressFromDeviceInstanceIdForTesting(
|
| const std::string& instance_id,
|
| BLUETOOTH_ADDRESS* btha,
|
| @@ -682,6 +678,10 @@ void BluetoothLowEnergyWrapper::SetInstanceForTest(
|
| BluetoothLowEnergyWrapper::BluetoothLowEnergyWrapper() {}
|
| BluetoothLowEnergyWrapper::~BluetoothLowEnergyWrapper() {}
|
|
|
| +bool BluetoothLowEnergyWrapper::IsBluetoothLowEnergySupported() {
|
| + return base::win::GetVersion() >= base::win::VERSION_WIN8;
|
| +}
|
| +
|
| bool BluetoothLowEnergyWrapper::EnumerateKnownBluetoothLowEnergyDevices(
|
| ScopedVector<BluetoothLowEnergyDeviceInfo>* devices,
|
| std::string* error) {
|
| @@ -719,5 +719,43 @@ bool BluetoothLowEnergyWrapper::EnumerateKnownBluetoothLowEnergyServices(
|
| return CollectBluetoothLowEnergyDeviceServices(device_path, services, error);
|
| }
|
|
|
| +HRESULT BluetoothLowEnergyWrapper::ReadCharacteristicsOfAService(
|
| + base::FilePath& service_path,
|
| + const PBTH_LE_GATT_SERVICE service,
|
| + scoped_ptr<BTH_LE_GATT_CHARACTERISTIC>* out_included_characteristics,
|
| + USHORT* out_counts) {
|
| + base::File file(service_path, base::File::FLAG_OPEN | base::File::FLAG_READ);
|
| + if (!file.IsValid())
|
| + return HRESULT_FROM_WIN32(ERROR_OPEN_FAILED);
|
| +
|
| + USHORT required_length = 0;
|
| + HRESULT hr = BluetoothGATTGetCharacteristics(file.GetPlatformFile(), service,
|
| + 0, NULL, &required_length,
|
| + BLUETOOTH_GATT_FLAG_NONE);
|
| + if (hr != HRESULT_FROM_WIN32(ERROR_MORE_DATA))
|
| + return hr;
|
| +
|
| + out_included_characteristics->reset(
|
| + new BTH_LE_GATT_CHARACTERISTIC[required_length]);
|
| + USHORT actual_length = required_length;
|
| + hr = BluetoothGATTGetCharacteristics(
|
| + file.GetPlatformFile(), service, actual_length,
|
| + out_included_characteristics->get(), &required_length,
|
| + BLUETOOTH_GATT_FLAG_NONE);
|
| + if (SUCCEEDED(hr) && required_length != actual_length) {
|
| + LOG(ERROR) << "Retrieved charactersitics is not equal to expected"
|
| + << " actual_length " << actual_length << " required_length "
|
| + << required_length;
|
| + hr = HRESULT_FROM_WIN32(ERROR_INVALID_USER_BUFFER);
|
| + }
|
| + *out_counts = actual_length;
|
| +
|
| + if (FAILED(hr)) {
|
| + out_included_characteristics->reset(nullptr);
|
| + *out_counts = 0;
|
| + }
|
| + return hr;
|
| +}
|
| +
|
| } // namespace win
|
| } // namespace device
|
|
|