Index: device/bluetooth/bluez/bluetooth_remote_gatt_characteristic_bluez.cc |
diff --git a/device/bluetooth/bluez/bluetooth_remote_gatt_characteristic_bluez.cc b/device/bluetooth/bluez/bluetooth_remote_gatt_characteristic_bluez.cc |
index ce386daaa9a9019601770fc70ccdc2500d9a4f0c..f9a2e23760183ca1782f2bf64e13ef7e528672c2 100644 |
--- a/device/bluetooth/bluez/bluetooth_remote_gatt_characteristic_bluez.cc |
+++ b/device/bluetooth/bluez/bluetooth_remote_gatt_characteristic_bluez.cc |
@@ -45,6 +45,7 @@ BluetoothRemoteGattCharacteristicBlueZ::BluetoothRemoteGattCharacteristicBlueZ( |
: BluetoothGattCharacteristicBlueZ(object_path), |
has_notify_session_(false), |
service_(service), |
+ num_of_characteristic_value_read_in_progress_(0), |
weak_ptr_factory_(this) { |
VLOG(1) << "Creating remote GATT characteristic with identifier: " |
<< GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); |
@@ -184,11 +185,15 @@ void BluetoothRemoteGattCharacteristicBlueZ::ReadRemoteCharacteristic( |
<< GetIdentifier() << ", UUID: " << GetUUID().canonical_value() |
<< "."; |
+ DCHECK_GE(num_of_characteristic_value_read_in_progress_, 0); |
+ ++num_of_characteristic_value_read_in_progress_; |
+ |
bluez::BluezDBusManager::Get() |
->GetBluetoothGattCharacteristicClient() |
- ->ReadValue(object_path(), callback, |
- base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, |
- weak_ptr_factory_.GetWeakPtr(), error_callback)); |
+ ->ReadValue( |
+ object_path(), callback, |
+ base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnReadError, |
+ weak_ptr_factory_.GetWeakPtr(), error_callback)); |
} |
void BluetoothRemoteGattCharacteristicBlueZ::WriteRemoteCharacteristic( |
@@ -201,9 +206,10 @@ void BluetoothRemoteGattCharacteristicBlueZ::WriteRemoteCharacteristic( |
bluez::BluezDBusManager::Get() |
->GetBluetoothGattCharacteristicClient() |
- ->WriteValue(object_path(), value, callback, |
- base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, |
- weak_ptr_factory_.GetWeakPtr(), error_callback)); |
+ ->WriteValue( |
+ object_path(), value, callback, |
+ base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnWriteError, |
+ weak_ptr_factory_.GetWeakPtr(), error_callback)); |
} |
void BluetoothRemoteGattCharacteristicBlueZ::SubscribeToNotifications( |
@@ -353,7 +359,19 @@ void BluetoothRemoteGattCharacteristicBlueZ::OnStopNotifyError( |
OnStopNotifySuccess(callback); |
} |
-void BluetoothRemoteGattCharacteristicBlueZ::OnError( |
+void BluetoothRemoteGattCharacteristicBlueZ::OnReadError( |
+ const ErrorCallback& error_callback, |
+ const std::string& error_name, |
+ const std::string& error_message) { |
+ VLOG(1) << "Operation failed: " << error_name |
+ << ", message: " << error_message; |
+ --num_of_characteristic_value_read_in_progress_; |
+ DCHECK_GE(num_of_characteristic_value_read_in_progress_, 0); |
+ error_callback.Run( |
+ BluetoothGattServiceBlueZ::DBusErrorToServiceError(error_name)); |
+} |
+ |
+void BluetoothRemoteGattCharacteristicBlueZ::OnWriteError( |
const ErrorCallback& error_callback, |
const std::string& error_name, |
const std::string& error_message) { |