Index: device/bluetooth/bluetooth_remote_gatt_descriptor_chromeos.cc |
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_chromeos.cc b/device/bluetooth/bluetooth_remote_gatt_descriptor_chromeos.cc |
index 00271737cb1a97fc0052145d5d1a4359d3015a71..8978cc558121851e9f1fcd68be6b26200323c066 100644 |
--- a/device/bluetooth/bluetooth_remote_gatt_descriptor_chromeos.cc |
+++ b/device/bluetooth/bluetooth_remote_gatt_descriptor_chromeos.cc |
@@ -10,6 +10,7 @@ |
#include "chromeos/dbus/bluetooth_gatt_descriptor_client.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "device/bluetooth/bluetooth_remote_gatt_characteristic_chromeos.h" |
+#include "device/bluetooth/bluetooth_remote_gatt_service_chromeos.h" |
namespace chromeos { |
@@ -59,11 +60,7 @@ bool BluetoothRemoteGattDescriptorChromeOS::IsLocal() const { |
const std::vector<uint8>& |
BluetoothRemoteGattDescriptorChromeOS::GetValue() const { |
- BluetoothGattDescriptorClient::Properties* properties = |
- DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()-> |
- GetProperties(object_path_); |
- DCHECK(properties); |
- return properties->value.value(); |
+ return cached_value_; |
} |
device::BluetoothGattCharacteristic* |
@@ -84,14 +81,15 @@ void BluetoothRemoteGattDescriptorChromeOS::ReadRemoteDescriptor( |
VLOG(1) << "Sending GATT characteristic descriptor read request to " |
<< "descriptor: " << GetIdentifier() << ", UUID: " |
<< GetUUID().canonical_value(); |
- BluetoothGattDescriptorClient::Properties* properties = |
- DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()-> |
- GetProperties(object_path_); |
- DCHECK(properties); |
- properties->value.Get( |
- base::Bind(&BluetoothRemoteGattDescriptorChromeOS::OnGetValue, |
+ |
+ DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()->ReadValue( |
+ object_path_, |
+ base::Bind(&BluetoothRemoteGattDescriptorChromeOS::OnValueSuccess, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ callback), |
+ base::Bind(&BluetoothRemoteGattDescriptorChromeOS::OnError, |
weak_ptr_factory_.GetWeakPtr(), |
- callback, error_callback)); |
+ error_callback)); |
} |
void BluetoothRemoteGattDescriptorChromeOS::WriteRemoteDescriptor( |
@@ -102,47 +100,38 @@ void BluetoothRemoteGattDescriptorChromeOS::WriteRemoteDescriptor( |
<< "characteristic: " << GetIdentifier() << ", UUID: " |
<< GetUUID().canonical_value() << ", with value: " |
<< new_value << "."; |
- BluetoothGattDescriptorClient::Properties* properties = |
- DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()-> |
- GetProperties(object_path_); |
- DCHECK(properties); |
- properties->value.Set( |
+ |
+ DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()->WriteValue( |
+ object_path_, |
new_value, |
- base::Bind(&BluetoothRemoteGattDescriptorChromeOS::OnSetValue, |
+ callback, |
+ base::Bind(&BluetoothRemoteGattDescriptorChromeOS::OnError, |
weak_ptr_factory_.GetWeakPtr(), |
- callback, error_callback)); |
+ error_callback)); |
} |
-void BluetoothRemoteGattDescriptorChromeOS::OnGetValue( |
+void BluetoothRemoteGattDescriptorChromeOS::OnValueSuccess( |
const ValueCallback& callback, |
- const ErrorCallback& error_callback, |
- bool success) { |
- if (!success) { |
- VLOG(1) << "Failed to read the value from the remote descriptor."; |
- error_callback.Run(); |
- return; |
- } |
- |
- VLOG(1) << "Read value of remote descriptor."; |
- BluetoothGattDescriptorClient::Properties* properties = |
- DBusThreadManager::Get()->GetBluetoothGattDescriptorClient()-> |
- GetProperties(object_path_); |
- DCHECK(properties); |
- callback.Run(properties->value.value()); |
+ const std::vector<uint8>& value) { |
+ VLOG(1) << "Descriptor value read: " << value; |
+ cached_value_ = value; |
+ |
+ DCHECK(characteristic_); |
+ BluetoothRemoteGattServiceChromeOS* service = |
+ static_cast<BluetoothRemoteGattServiceChromeOS*>( |
+ characteristic_->GetService()); |
+ DCHECK(service); |
+ service->NotifyDescriptorValueChanged(characteristic_, this, value); |
+ callback.Run(value); |
} |
-void BluetoothRemoteGattDescriptorChromeOS::OnSetValue( |
- const base::Closure& callback, |
+void BluetoothRemoteGattDescriptorChromeOS::OnError( |
const ErrorCallback& error_callback, |
- bool success) { |
- if (!success) { |
- VLOG(1) << "Failed to write the value of remote descriptor."; |
- error_callback.Run(); |
- return; |
- } |
- |
- VLOG(1) << "Wrote value of remote descriptor."; |
- callback.Run(); |
+ const std::string& error_name, |
+ const std::string& error_message) { |
+ VLOG(1) << "Operation failed: " << error_name |
+ << ", message: " << error_message; |
+ error_callback.Run(); |
} |
} // namespace chromeos |