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 |