| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/bluetooth/dbus/bluetooth_gatt_descriptor_service_provider.h" | 5 #include "device/bluetooth/dbus/bluetooth_gatt_descriptor_service_provider.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 |
| 7 #include "base/bind.h" | 9 #include "base/bind.h" |
| 8 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/macros.h" |
| 9 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
| 10 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 11 #include "base/threading/platform_thread.h" | 14 #include "base/threading/platform_thread.h" |
| 12 #include "dbus/exported_object.h" | 15 #include "dbus/exported_object.h" |
| 13 #include "dbus/message.h" | 16 #include "dbus/message.h" |
| 14 #include "device/bluetooth/dbus/bluez_dbus_manager.h" | 17 #include "device/bluetooth/dbus/bluez_dbus_manager.h" |
| 15 #include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_service_provider.
h" | 18 #include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_service_provider.
h" |
| 16 #include "third_party/cros_system_api/dbus/service_constants.h" | 19 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 17 | 20 |
| 18 namespace bluez { | 21 namespace bluez { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 weak_ptr_factory_.GetWeakPtr())); | 79 weak_ptr_factory_.GetWeakPtr())); |
| 77 } | 80 } |
| 78 | 81 |
| 79 ~BluetoothGattDescriptorServiceProviderImpl() override { | 82 ~BluetoothGattDescriptorServiceProviderImpl() override { |
| 80 VLOG(1) << "Cleaning up Bluetooth GATT characteristic descriptor: " | 83 VLOG(1) << "Cleaning up Bluetooth GATT characteristic descriptor: " |
| 81 << object_path_.value(); | 84 << object_path_.value(); |
| 82 bus_->UnregisterExportedObject(object_path_); | 85 bus_->UnregisterExportedObject(object_path_); |
| 83 } | 86 } |
| 84 | 87 |
| 85 // BluetoothGattDescriptorServiceProvider override. | 88 // BluetoothGattDescriptorServiceProvider override. |
| 86 void SendValueChanged(const std::vector<uint8>& value) override { | 89 void SendValueChanged(const std::vector<uint8_t>& value) override { |
| 87 VLOG(2) << "Emitting a PropertiesChanged signal for descriptor value."; | 90 VLOG(2) << "Emitting a PropertiesChanged signal for descriptor value."; |
| 88 dbus::Signal signal(dbus::kDBusPropertiesInterface, | 91 dbus::Signal signal(dbus::kDBusPropertiesInterface, |
| 89 dbus::kDBusPropertiesChangedSignal); | 92 dbus::kDBusPropertiesChangedSignal); |
| 90 dbus::MessageWriter writer(&signal); | 93 dbus::MessageWriter writer(&signal); |
| 91 dbus::MessageWriter array_writer(NULL); | 94 dbus::MessageWriter array_writer(NULL); |
| 92 dbus::MessageWriter dict_entry_writer(NULL); | 95 dbus::MessageWriter dict_entry_writer(NULL); |
| 93 dbus::MessageWriter variant_writer(NULL); | 96 dbus::MessageWriter variant_writer(NULL); |
| 94 | 97 |
| 95 // interface_name | 98 // interface_name |
| 96 writer.AppendString( | 99 writer.AppendString( |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 error_message = "No such property: '" + property_name + "'."; | 238 error_message = "No such property: '" + property_name + "'."; |
| 236 } | 239 } |
| 237 scoped_ptr<dbus::ErrorResponse> error_response = | 240 scoped_ptr<dbus::ErrorResponse> error_response = |
| 238 dbus::ErrorResponse::FromMethodCall(method_call, error_name, | 241 dbus::ErrorResponse::FromMethodCall(method_call, error_name, |
| 239 error_message); | 242 error_message); |
| 240 response_sender.Run(error_response.Pass()); | 243 response_sender.Run(error_response.Pass()); |
| 241 return; | 244 return; |
| 242 } | 245 } |
| 243 | 246 |
| 244 // Obtain the value. | 247 // Obtain the value. |
| 245 const uint8* bytes = NULL; | 248 const uint8_t* bytes = NULL; |
| 246 size_t length = 0; | 249 size_t length = 0; |
| 247 if (!variant_reader.PopArrayOfBytes(&bytes, &length)) { | 250 if (!variant_reader.PopArrayOfBytes(&bytes, &length)) { |
| 248 scoped_ptr<dbus::ErrorResponse> error_response = | 251 scoped_ptr<dbus::ErrorResponse> error_response = |
| 249 dbus::ErrorResponse::FromMethodCall( | 252 dbus::ErrorResponse::FromMethodCall( |
| 250 method_call, kErrorInvalidArgs, | 253 method_call, kErrorInvalidArgs, |
| 251 "Property '" + property_name + "' has type 'ay'."); | 254 "Property '" + property_name + "' has type 'ay'."); |
| 252 response_sender.Run(error_response.Pass()); | 255 response_sender.Run(error_response.Pass()); |
| 253 return; | 256 return; |
| 254 } | 257 } |
| 255 | 258 |
| 256 // Pass the set request onto the delegate. | 259 // Pass the set request onto the delegate. |
| 257 std::vector<uint8> value(bytes, bytes + length); | 260 std::vector<uint8_t> value(bytes, bytes + length); |
| 258 DCHECK(delegate_); | 261 DCHECK(delegate_); |
| 259 delegate_->SetDescriptorValue( | 262 delegate_->SetDescriptorValue( |
| 260 value, base::Bind(&BluetoothGattDescriptorServiceProviderImpl::OnSet, | 263 value, base::Bind(&BluetoothGattDescriptorServiceProviderImpl::OnSet, |
| 261 weak_ptr_factory_.GetWeakPtr(), method_call, | 264 weak_ptr_factory_.GetWeakPtr(), method_call, |
| 262 response_sender), | 265 response_sender), |
| 263 base::Bind(&BluetoothGattDescriptorServiceProviderImpl::OnFailure, | 266 base::Bind(&BluetoothGattDescriptorServiceProviderImpl::OnFailure, |
| 264 weak_ptr_factory_.GetWeakPtr(), method_call, | 267 weak_ptr_factory_.GetWeakPtr(), method_call, |
| 265 response_sender)); | 268 response_sender)); |
| 266 } | 269 } |
| 267 | 270 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 bool success) { | 316 bool success) { |
| 314 LOG_IF(WARNING, !success) << "Failed to export " << interface_name << "." | 317 LOG_IF(WARNING, !success) << "Failed to export " << interface_name << "." |
| 315 << method_name; | 318 << method_name; |
| 316 } | 319 } |
| 317 | 320 |
| 318 // Called by the Delegate in response to a method to call to get all | 321 // Called by the Delegate in response to a method to call to get all |
| 319 // properties, in which the delegate has successfully returned the | 322 // properties, in which the delegate has successfully returned the |
| 320 // descriptor value. | 323 // descriptor value. |
| 321 void OnGetAll(dbus::MethodCall* method_call, | 324 void OnGetAll(dbus::MethodCall* method_call, |
| 322 dbus::ExportedObject::ResponseSender response_sender, | 325 dbus::ExportedObject::ResponseSender response_sender, |
| 323 const std::vector<uint8>& value) { | 326 const std::vector<uint8_t>& value) { |
| 324 VLOG(2) << "Descriptor value obtained from delegate. Responding to " | 327 VLOG(2) << "Descriptor value obtained from delegate. Responding to " |
| 325 << "GetAll."; | 328 << "GetAll."; |
| 326 | 329 |
| 327 scoped_ptr<dbus::Response> response = | 330 scoped_ptr<dbus::Response> response = |
| 328 dbus::Response::FromMethodCall(method_call); | 331 dbus::Response::FromMethodCall(method_call); |
| 329 dbus::MessageWriter writer(response.get()); | 332 dbus::MessageWriter writer(response.get()); |
| 330 dbus::MessageWriter array_writer(NULL); | 333 dbus::MessageWriter array_writer(NULL); |
| 331 dbus::MessageWriter dict_entry_writer(NULL); | 334 dbus::MessageWriter dict_entry_writer(NULL); |
| 332 dbus::MessageWriter variant_writer(NULL); | 335 dbus::MessageWriter variant_writer(NULL); |
| 333 | 336 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 355 | 358 |
| 356 writer.CloseContainer(&array_writer); | 359 writer.CloseContainer(&array_writer); |
| 357 | 360 |
| 358 response_sender.Run(response.Pass()); | 361 response_sender.Run(response.Pass()); |
| 359 } | 362 } |
| 360 | 363 |
| 361 // Called by the Delegate in response to a successful method call to get the | 364 // Called by the Delegate in response to a successful method call to get the |
| 362 // descriptor value. | 365 // descriptor value. |
| 363 void OnGet(dbus::MethodCall* method_call, | 366 void OnGet(dbus::MethodCall* method_call, |
| 364 dbus::ExportedObject::ResponseSender response_sender, | 367 dbus::ExportedObject::ResponseSender response_sender, |
| 365 const std::vector<uint8>& value) { | 368 const std::vector<uint8_t>& value) { |
| 366 VLOG(2) << "Returning descriptor value obtained from delegate."; | 369 VLOG(2) << "Returning descriptor value obtained from delegate."; |
| 367 scoped_ptr<dbus::Response> response = | 370 scoped_ptr<dbus::Response> response = |
| 368 dbus::Response::FromMethodCall(method_call); | 371 dbus::Response::FromMethodCall(method_call); |
| 369 dbus::MessageWriter writer(response.get()); | 372 dbus::MessageWriter writer(response.get()); |
| 370 dbus::MessageWriter variant_writer(NULL); | 373 dbus::MessageWriter variant_writer(NULL); |
| 371 | 374 |
| 372 writer.OpenVariant("ay", &variant_writer); | 375 writer.OpenVariant("ay", &variant_writer); |
| 373 variant_writer.AppendArrayOfBytes(value.data(), value.size()); | 376 variant_writer.AppendArrayOfBytes(value.data(), value.size()); |
| 374 writer.CloseContainer(&variant_writer); | 377 writer.CloseContainer(&variant_writer); |
| 375 | 378 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 const dbus::ObjectPath& characteristic_path) { | 451 const dbus::ObjectPath& characteristic_path) { |
| 449 if (!bluez::BluezDBusManager::Get()->IsUsingStub()) { | 452 if (!bluez::BluezDBusManager::Get()->IsUsingStub()) { |
| 450 return new BluetoothGattDescriptorServiceProviderImpl( | 453 return new BluetoothGattDescriptorServiceProviderImpl( |
| 451 bus, object_path, delegate, uuid, permissions, characteristic_path); | 454 bus, object_path, delegate, uuid, permissions, characteristic_path); |
| 452 } | 455 } |
| 453 return new FakeBluetoothGattDescriptorServiceProvider( | 456 return new FakeBluetoothGattDescriptorServiceProvider( |
| 454 object_path, delegate, uuid, permissions, characteristic_path); | 457 object_path, delegate, uuid, permissions, characteristic_path); |
| 455 } | 458 } |
| 456 | 459 |
| 457 } // namespace bluez | 460 } // namespace bluez |
| OLD | NEW |