| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/dbus/fake_bluetooth_gatt_characteristic_service_provider.h" |
| |
| #include "base/logging.h" |
| #include "base/strings/string_util.h" |
| #include "chromeos/dbus/dbus_thread_manager.h" |
| #include "chromeos/dbus/fake_bluetooth_gatt_manager_client.h" |
| |
| namespace chromeos { |
| |
| FakeBluetoothGattCharacteristicServiceProvider:: |
| FakeBluetoothGattCharacteristicServiceProvider( |
| const dbus::ObjectPath& object_path, |
| Delegate* delegate, |
| const std::string& uuid, |
| const std::vector<std::string>& flags, |
| const std::vector<std::string>& permissions, |
| const dbus::ObjectPath& service_path) |
| : object_path_(object_path), |
| uuid_(uuid), |
| service_path_(service_path), |
| delegate_(delegate) { |
| VLOG(1) << "Creating Bluetooth GATT characteristic: " << object_path_.value(); |
| |
| DCHECK(object_path_.IsValid()); |
| DCHECK(service_path_.IsValid()); |
| DCHECK(!uuid.empty()); |
| DCHECK(delegate_); |
| DCHECK(StartsWithASCII( |
| object_path_.value(), service_path_.value() + "/", true)); |
| |
| // TODO(armansito): Do something with |flags| and |permissions|. |
| |
| FakeBluetoothGattManagerClient* fake_bluetooth_gatt_manager_client = |
| static_cast<FakeBluetoothGattManagerClient*>( |
| DBusThreadManager::Get()->GetBluetoothGattManagerClient()); |
| fake_bluetooth_gatt_manager_client-> |
| RegisterCharacteristicServiceProvider(this); |
| } |
| |
| FakeBluetoothGattCharacteristicServiceProvider:: |
| ~FakeBluetoothGattCharacteristicServiceProvider() { |
| VLOG(1) << "Cleaning up Bluetooth GATT characteristic: " |
| << object_path_.value(); |
| |
| FakeBluetoothGattManagerClient* fake_bluetooth_gatt_manager_client = |
| static_cast<FakeBluetoothGattManagerClient*>( |
| DBusThreadManager::Get()->GetBluetoothGattManagerClient()); |
| fake_bluetooth_gatt_manager_client-> |
| UnregisterCharacteristicServiceProvider(this); |
| } |
| |
| void FakeBluetoothGattCharacteristicServiceProvider::SendValueChanged( |
| const std::vector<uint8>& value) { |
| VLOG(1) << "Sent characteristic value changed: " << object_path_.value() |
| << " UUID: " << uuid_; |
| } |
| |
| void FakeBluetoothGattCharacteristicServiceProvider::GetValue( |
| const Delegate::ValueCallback& callback, |
| const Delegate::ErrorCallback& error_callback) { |
| VLOG(1) << "GATT characteristic value Get request: " << object_path_.value() |
| << " UUID: " << uuid_; |
| |
| // Check if this characteristic is registered. |
| FakeBluetoothGattManagerClient* fake_bluetooth_gatt_manager_client = |
| static_cast<FakeBluetoothGattManagerClient*>( |
| DBusThreadManager::Get()->GetBluetoothGattManagerClient()); |
| if (!fake_bluetooth_gatt_manager_client->IsServiceRegistered(service_path_)) { |
| VLOG(1) << "GATT characteristic not registered."; |
| error_callback.Run(); |
| return; |
| } |
| |
| // Pass on to the delegate. |
| DCHECK(delegate_); |
| delegate_->GetCharacteristicValue(callback, error_callback); |
| } |
| |
| void FakeBluetoothGattCharacteristicServiceProvider::SetValue( |
| const std::vector<uint8>& value, |
| const base::Closure& callback, |
| const Delegate::ErrorCallback& error_callback) { |
| VLOG(1) << "GATT characteristic value Set request: " << object_path_.value() |
| << " UUID: " << uuid_; |
| |
| // Check if this characteristic is registered. |
| FakeBluetoothGattManagerClient* fake_bluetooth_gatt_manager_client = |
| static_cast<FakeBluetoothGattManagerClient*>( |
| DBusThreadManager::Get()->GetBluetoothGattManagerClient()); |
| if (!fake_bluetooth_gatt_manager_client->IsServiceRegistered(service_path_)) { |
| VLOG(1) << "GATT characteristic not registered."; |
| error_callback.Run(); |
| return; |
| } |
| |
| // Pass on to the delegate. |
| DCHECK(delegate_); |
| delegate_->SetCharacteristicValue(value, callback, error_callback); |
| } |
| |
| } // namespace chromeos |