• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "chromeos/dbus/fake_bluetooth_gatt_manager_client.h"
6 
7 #include "base/logging.h"
8 #include "chromeos/dbus/fake_bluetooth_gatt_characteristic_service_provider.h"
9 #include "chromeos/dbus/fake_bluetooth_gatt_descriptor_service_provider.h"
10 #include "chromeos/dbus/fake_bluetooth_gatt_service_service_provider.h"
11 #include "third_party/cros_system_api/dbus/service_constants.h"
12 
13 namespace chromeos {
14 
FakeBluetoothGattManagerClient()15 FakeBluetoothGattManagerClient::FakeBluetoothGattManagerClient() {
16 }
17 
~FakeBluetoothGattManagerClient()18 FakeBluetoothGattManagerClient::~FakeBluetoothGattManagerClient() {
19 }
20 
21 // DBusClient override.
Init(dbus::Bus * bus)22 void FakeBluetoothGattManagerClient::Init(dbus::Bus* bus) {
23 }
24 
25 // BluetoothGattManagerClient overrides.
RegisterService(const dbus::ObjectPath & service_path,const Options & options,const base::Closure & callback,const ErrorCallback & error_callback)26 void FakeBluetoothGattManagerClient::RegisterService(
27     const dbus::ObjectPath& service_path,
28     const Options& options,
29     const base::Closure& callback,
30     const ErrorCallback& error_callback) {
31   VLOG(1) << "Register GATT service: " << service_path.value();
32 
33   // If a service provider wasn't created before, return error.
34   ServiceMap::iterator iter = service_map_.find(service_path);
35   if (iter == service_map_.end()) {
36     error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments,
37                        "GATT service doesn't exist: " + service_path.value());
38     return;
39   }
40 
41   // Check to see if this GATT service was already registered.
42   ServiceProvider* provider = &iter->second;
43   if (provider->first) {
44     error_callback.Run(
45         bluetooth_gatt_manager::kErrorAlreadyExists,
46         "GATT service already registered: " + service_path.value());
47     return;
48   }
49 
50   // Success!
51   provider->first = true;
52   callback.Run();
53 }
54 
UnregisterService(const dbus::ObjectPath & service_path,const base::Closure & callback,const ErrorCallback & error_callback)55 void FakeBluetoothGattManagerClient::UnregisterService(
56     const dbus::ObjectPath& service_path,
57     const base::Closure& callback,
58     const ErrorCallback& error_callback) {
59   VLOG(1) << "Unregister GATT service: " << service_path.value();
60 
61   // If a service provider wasn't created before, return error.
62   ServiceMap::iterator iter = service_map_.find(service_path);
63   if (iter == service_map_.end()) {
64     error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments,
65                        "GATT service doesn't exist: " + service_path.value());
66     return;
67   }
68 
69   // Return error if the GATT service wasn't registered before.
70   ServiceProvider* provider = &iter->second;
71   if (!provider->first) {
72     error_callback.Run(
73         bluetooth_gatt_manager::kErrorDoesNotExist,
74         "GATT service not registered: " + service_path.value());
75     return;
76   }
77 
78   // Success!
79   provider->first = false;
80   callback.Run();
81 }
82 
RegisterServiceServiceProvider(FakeBluetoothGattServiceServiceProvider * provider)83 void FakeBluetoothGattManagerClient::RegisterServiceServiceProvider(
84     FakeBluetoothGattServiceServiceProvider* provider) {
85   // Ignore, if a service provider is already registered for the object path.
86   ServiceMap::iterator iter = service_map_.find(provider->object_path());
87   if (iter != service_map_.end()) {
88     VLOG(1) << "GATT service service provider already registered for "
89             << "object path: " << provider->object_path().value();
90     return;
91   }
92   service_map_[provider->object_path()] = std::make_pair(false, provider);
93 }
94 
RegisterCharacteristicServiceProvider(FakeBluetoothGattCharacteristicServiceProvider * provider)95 void FakeBluetoothGattManagerClient::RegisterCharacteristicServiceProvider(
96     FakeBluetoothGattCharacteristicServiceProvider* provider) {
97   // Ignore, if a service provider is already registered for the object path.
98   CharacteristicMap::iterator iter =
99       characteristic_map_.find(provider->object_path());
100   if (iter != characteristic_map_.end()) {
101     VLOG(1) << "GATT characteristic service provider already registered for "
102             << "object path: " << provider->object_path().value();
103     return;
104   }
105   characteristic_map_[provider->object_path()] = provider;
106 }
107 
RegisterDescriptorServiceProvider(FakeBluetoothGattDescriptorServiceProvider * provider)108 void FakeBluetoothGattManagerClient::RegisterDescriptorServiceProvider(
109     FakeBluetoothGattDescriptorServiceProvider* provider) {
110   // Ignore, if a service provider is already registered for the object path.
111   DescriptorMap::iterator iter =
112       descriptor_map_.find(provider->object_path());
113   if (iter != descriptor_map_.end()) {
114     VLOG(1) << "GATT descriptor service provider already registered for "
115             << "object path: " << provider->object_path().value();
116     return;
117   }
118   descriptor_map_[provider->object_path()] = provider;
119 }
120 
UnregisterServiceServiceProvider(FakeBluetoothGattServiceServiceProvider * provider)121 void FakeBluetoothGattManagerClient::UnregisterServiceServiceProvider(
122     FakeBluetoothGattServiceServiceProvider* provider) {
123   ServiceMap::iterator iter =
124       service_map_.find(provider->object_path());
125   if (iter != service_map_.end() && iter->second.second == provider)
126     service_map_.erase(iter);
127 }
128 
UnregisterCharacteristicServiceProvider(FakeBluetoothGattCharacteristicServiceProvider * provider)129 void FakeBluetoothGattManagerClient::UnregisterCharacteristicServiceProvider(
130     FakeBluetoothGattCharacteristicServiceProvider* provider) {
131   characteristic_map_.erase(provider->object_path());
132 }
133 
UnregisterDescriptorServiceProvider(FakeBluetoothGattDescriptorServiceProvider * provider)134 void FakeBluetoothGattManagerClient::UnregisterDescriptorServiceProvider(
135     FakeBluetoothGattDescriptorServiceProvider* provider) {
136   descriptor_map_.erase(provider->object_path());
137 }
138 
139 FakeBluetoothGattServiceServiceProvider*
GetServiceServiceProvider(const dbus::ObjectPath & object_path) const140 FakeBluetoothGattManagerClient::GetServiceServiceProvider(
141     const dbus::ObjectPath& object_path) const {
142   ServiceMap::const_iterator iter = service_map_.find(object_path);
143   if (iter == service_map_.end())
144     return NULL;
145   return iter->second.second;
146 }
147 
148 FakeBluetoothGattCharacteristicServiceProvider*
GetCharacteristicServiceProvider(const dbus::ObjectPath & object_path) const149 FakeBluetoothGattManagerClient::GetCharacteristicServiceProvider(
150         const dbus::ObjectPath& object_path) const {
151   CharacteristicMap::const_iterator iter =
152       characteristic_map_.find(object_path);
153   if (iter == characteristic_map_.end())
154     return NULL;
155   return iter->second;
156 }
157 
158 FakeBluetoothGattDescriptorServiceProvider*
GetDescriptorServiceProvider(const dbus::ObjectPath & object_path) const159 FakeBluetoothGattManagerClient::GetDescriptorServiceProvider(
160     const dbus::ObjectPath& object_path) const {
161   DescriptorMap::const_iterator iter = descriptor_map_.find(object_path);
162   if (iter == descriptor_map_.end())
163     return NULL;
164   return iter->second;
165 }
166 
IsServiceRegistered(const dbus::ObjectPath & object_path) const167 bool FakeBluetoothGattManagerClient::IsServiceRegistered(
168     const dbus::ObjectPath& object_path) const {
169   ServiceMap::const_iterator iter = service_map_.find(object_path);
170   if (iter == service_map_.end())
171     return false;
172   return iter->second.first;
173 }
174 
175 }  // namespace chromeos
176