| Index: chromeos/dbus/fake_bluetooth_gatt_service_client.cc
|
| diff --git a/chromeos/dbus/fake_bluetooth_gatt_service_client.cc b/chromeos/dbus/fake_bluetooth_gatt_service_client.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d579a2631fbd008a563a96529be4e3426fd73fef
|
| --- /dev/null
|
| +++ b/chromeos/dbus/fake_bluetooth_gatt_service_client.cc
|
| @@ -0,0 +1,152 @@
|
| +// 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_service_client.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h"
|
| +#include "third_party/cros_system_api/dbus/service_constants.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +// static
|
| +const char FakeBluetoothGattServiceClient::kHeartRateServicePathComponent[] =
|
| + "service0000";
|
| +const char FakeBluetoothGattServiceClient::kHeartRateServiceUUID[] =
|
| + "0000180d-0000-1000-8000-00805f9b34fb";
|
| +
|
| +FakeBluetoothGattServiceClient::Properties::Properties(
|
| + const PropertyChangedCallback& callback)
|
| + : BluetoothGattServiceClient::Properties(
|
| + NULL,
|
| + bluetooth_gatt_service::kBluetoothGattServiceInterface,
|
| + callback) {
|
| +}
|
| +
|
| +FakeBluetoothGattServiceClient::Properties::~Properties() {
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::Properties::Get(
|
| + dbus::PropertyBase* property,
|
| + dbus::PropertySet::GetCallback callback) {
|
| + VLOG(1) << "Get " << property->name();
|
| + callback.Run(false);
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::Properties::GetAll() {
|
| + VLOG(1) << "GetAll";
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::Properties::Set(
|
| + dbus::PropertyBase* property,
|
| + dbus::PropertySet::GetCallback callback) {
|
| + VLOG(1) << "Set " << property->name();
|
| + callback.Run(false);
|
| +}
|
| +
|
| +FakeBluetoothGattServiceClient::FakeBluetoothGattServiceClient() {
|
| +}
|
| +
|
| +FakeBluetoothGattServiceClient::~FakeBluetoothGattServiceClient() {
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::Init(dbus::Bus* bus) {
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::AddObserver(Observer* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::RemoveObserver(Observer* observer) {
|
| + observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| +std::vector<dbus::ObjectPath> FakeBluetoothGattServiceClient::GetServices() {
|
| + std::vector<dbus::ObjectPath> paths;
|
| + if (heart_rate_service_properties_.get()) {
|
| + DCHECK(!heart_rate_service_path_.empty());
|
| + paths.push_back(dbus::ObjectPath(heart_rate_service_path_));
|
| + }
|
| + return paths;
|
| +}
|
| +
|
| +FakeBluetoothGattServiceClient::Properties*
|
| +FakeBluetoothGattServiceClient::GetProperties(
|
| + const dbus::ObjectPath& object_path) {
|
| + if (object_path.value() == heart_rate_service_path_)
|
| + return heart_rate_service_properties_.get();
|
| + return NULL;
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::ExposeHeartRateService(
|
| + const dbus::ObjectPath& device_path) {
|
| + if (heart_rate_service_properties_.get()) {
|
| + DCHECK(!heart_rate_service_path_.empty());
|
| + VLOG(1) << "Fake Heart Rate Service already exposed.";
|
| + return;
|
| + }
|
| + VLOG(2) << "Exposing fake Heart Rate Service.";
|
| + heart_rate_service_path_ =
|
| + device_path.value() + "/" + kHeartRateServicePathComponent;
|
| + heart_rate_service_properties_.reset(new Properties(base::Bind(
|
| + &FakeBluetoothGattServiceClient::OnPropertyChanged,
|
| + base::Unretained(this),
|
| + dbus::ObjectPath(heart_rate_service_path_))));
|
| + heart_rate_service_properties_->uuid.ReplaceValue(heart_rate_service_path_);
|
| +
|
| + NotifyServiceAdded(dbus::ObjectPath(heart_rate_service_path_));
|
| +
|
| + FakeBluetoothGattCharacteristicClient* char_client =
|
| + static_cast<FakeBluetoothGattCharacteristicClient*>(
|
| + DBusThreadManager::Get()->GetBluetoothGattCharacteristicClient());
|
| + char_client->ExposeHeartRateCharacteristics(
|
| + dbus::ObjectPath(heart_rate_service_path_));
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::HideHeartRateService() {
|
| + if (!heart_rate_service_properties_.get()) {
|
| + DCHECK(heart_rate_service_path_.empty());
|
| + VLOG(1) << "Fake Heart Rate Service already hidden.";
|
| + return;
|
| + }
|
| + VLOG(2) << "Hiding fake Heart Rate Service.";
|
| + FakeBluetoothGattCharacteristicClient* char_client =
|
| + static_cast<FakeBluetoothGattCharacteristicClient*>(
|
| + DBusThreadManager::Get()->GetBluetoothGattCharacteristicClient());
|
| + char_client->HideHeartRateCharacteristics();
|
| +
|
| + heart_rate_service_properties_.reset();
|
| + std::string hrs_path = heart_rate_service_path_;
|
| + heart_rate_service_path_.clear();
|
| +
|
| + NotifyServiceRemoved(dbus::ObjectPath(hrs_path));
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::OnPropertyChanged(
|
| + const dbus::ObjectPath& object_path,
|
| + const std::string& property_name) {
|
| + VLOG(2) << "Fake GATT Service property changed: " << object_path.value()
|
| + << ": " << property_name;
|
| + FOR_EACH_OBSERVER(BluetoothGattServiceClient::Observer, observers_,
|
| + GattServicePropertyChanged(object_path, property_name));
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::NotifyServiceAdded(
|
| + const dbus::ObjectPath& object_path) {
|
| + VLOG(2) << "GATT service added: " << object_path.value();
|
| + FOR_EACH_OBSERVER(
|
| + BluetoothGattServiceClient::Observer, observers_,
|
| + GattServiceAdded(object_path));
|
| +}
|
| +
|
| +void FakeBluetoothGattServiceClient::NotifyServiceRemoved(
|
| + const dbus::ObjectPath& object_path) {
|
| + VLOG(2) << "GATT service removed: " << object_path.value();
|
| + FOR_EACH_OBSERVER(
|
| + BluetoothGattServiceClient::Observer, observers_,
|
| + GattServiceRemoved(object_path));
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|