Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(598)

Side by Side Diff: device/bluetooth/dbus/bluetooth_gatt_descriptor_client.cc

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chromeos/dbus/bluetooth_gatt_descriptor_client.h" 5 #include "device/bluetooth/dbus/bluetooth_gatt_descriptor_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/observer_list.h" 9 #include "base/observer_list.h"
10 #include "dbus/bus.h" 10 #include "dbus/bus.h"
11 #include "dbus/object_manager.h" 11 #include "dbus/object_manager.h"
12 #include "third_party/cros_system_api/dbus/service_constants.h" 12 #include "third_party/cros_system_api/dbus/service_constants.h"
13 13
14 namespace chromeos { 14 namespace bluez {
15 15
16 namespace { 16 namespace {
17 17
18 // TODO(armansito): Move this constant to cros_system_api. 18 // TODO(armansito): Move this constant to cros_system_api.
19 const char kValueProperty[] = "Value"; 19 const char kValueProperty[] = "Value";
20 20
21 } // namespace 21 } // namespace
22 22
23 // static 23 // static
24 const char BluetoothGattDescriptorClient::kNoResponseError[] = 24 const char BluetoothGattDescriptorClient::kNoResponseError[] =
25 "org.chromium.Error.NoResponse"; 25 "org.chromium.Error.NoResponse";
26 // static 26 // static
27 const char BluetoothGattDescriptorClient::kUnknownDescriptorError[] = 27 const char BluetoothGattDescriptorClient::kUnknownDescriptorError[] =
28 "org.chromium.Error.UnknownDescriptor"; 28 "org.chromium.Error.UnknownDescriptor";
29 29
30 BluetoothGattDescriptorClient::Properties::Properties( 30 BluetoothGattDescriptorClient::Properties::Properties(
31 dbus::ObjectProxy* object_proxy, 31 dbus::ObjectProxy* object_proxy,
32 const std::string& interface_name, 32 const std::string& interface_name,
33 const PropertyChangedCallback&callback) 33 const PropertyChangedCallback& callback)
34 : dbus::PropertySet(object_proxy, interface_name, callback) { 34 : dbus::PropertySet(object_proxy, interface_name, callback) {
35 RegisterProperty(bluetooth_gatt_descriptor::kUUIDProperty, &uuid); 35 RegisterProperty(bluetooth_gatt_descriptor::kUUIDProperty, &uuid);
36 RegisterProperty(bluetooth_gatt_descriptor::kCharacteristicProperty, 36 RegisterProperty(bluetooth_gatt_descriptor::kCharacteristicProperty,
37 &characteristic); 37 &characteristic);
38 RegisterProperty(kValueProperty, &value); 38 RegisterProperty(kValueProperty, &value);
39 } 39 }
40 40
41 BluetoothGattDescriptorClient::Properties::~Properties() { 41 BluetoothGattDescriptorClient::Properties::~Properties() {}
42 }
43 42
44 // The BluetoothGattDescriptorClient implementation used in production. 43 // The BluetoothGattDescriptorClient implementation used in production.
45 class BluetoothGattDescriptorClientImpl 44 class BluetoothGattDescriptorClientImpl
46 : public BluetoothGattDescriptorClient, 45 : public BluetoothGattDescriptorClient,
47 public dbus::ObjectManager::Interface { 46 public dbus::ObjectManager::Interface {
48 public: 47 public:
49 BluetoothGattDescriptorClientImpl() 48 BluetoothGattDescriptorClientImpl()
50 : object_manager_(NULL), 49 : object_manager_(NULL), weak_ptr_factory_(this) {}
51 weak_ptr_factory_(this) {
52 }
53 50
54 ~BluetoothGattDescriptorClientImpl() override { 51 ~BluetoothGattDescriptorClientImpl() override {
55 object_manager_->UnregisterInterface( 52 object_manager_->UnregisterInterface(
56 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface); 53 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface);
57 } 54 }
58 55
59 // BluetoothGattDescriptorClientImpl override. 56 // BluetoothGattDescriptorClientImpl override.
60 void AddObserver(BluetoothGattDescriptorClient::Observer* observer) override { 57 void AddObserver(BluetoothGattDescriptorClient::Observer* observer) override {
61 DCHECK(observer); 58 DCHECK(observer);
62 observers_.AddObserver(observer); 59 observers_.AddObserver(observer);
63 } 60 }
64 61
65 // BluetoothGattDescriptorClientImpl override. 62 // BluetoothGattDescriptorClientImpl override.
66 void RemoveObserver( 63 void RemoveObserver(
67 BluetoothGattDescriptorClient::Observer* observer) override { 64 BluetoothGattDescriptorClient::Observer* observer) override {
68 DCHECK(observer); 65 DCHECK(observer);
69 observers_.RemoveObserver(observer); 66 observers_.RemoveObserver(observer);
70 } 67 }
71 68
72 // BluetoothGattDescriptorClientImpl override. 69 // BluetoothGattDescriptorClientImpl override.
73 std::vector<dbus::ObjectPath> GetDescriptors() override { 70 std::vector<dbus::ObjectPath> GetDescriptors() override {
74 DCHECK(object_manager_); 71 DCHECK(object_manager_);
75 return object_manager_->GetObjectsWithInterface( 72 return object_manager_->GetObjectsWithInterface(
76 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface); 73 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface);
77 } 74 }
78 75
79 // BluetoothGattDescriptorClientImpl override. 76 // BluetoothGattDescriptorClientImpl override.
80 Properties* GetProperties(const dbus::ObjectPath& object_path) override { 77 Properties* GetProperties(const dbus::ObjectPath& object_path) override {
81 DCHECK(object_manager_); 78 DCHECK(object_manager_);
82 return static_cast<Properties*>( 79 return static_cast<Properties*>(object_manager_->GetProperties(
83 object_manager_->GetProperties( 80 object_path,
84 object_path, 81 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface));
85 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface));
86 } 82 }
87 83
88 // BluetoothGattDescriptorClientImpl override. 84 // BluetoothGattDescriptorClientImpl override.
89 void ReadValue(const dbus::ObjectPath& object_path, 85 void ReadValue(const dbus::ObjectPath& object_path,
90 const ValueCallback& callback, 86 const ValueCallback& callback,
91 const ErrorCallback& error_callback) override { 87 const ErrorCallback& error_callback) override {
92 dbus::ObjectProxy* object_proxy = 88 dbus::ObjectProxy* object_proxy =
93 object_manager_->GetObjectProxy(object_path); 89 object_manager_->GetObjectProxy(object_path);
94 if (!object_proxy) { 90 if (!object_proxy) {
95 error_callback.Run(kUnknownDescriptorError, ""); 91 error_callback.Run(kUnknownDescriptorError, "");
96 return; 92 return;
97 } 93 }
98 94
99 dbus::MethodCall method_call( 95 dbus::MethodCall method_call(
100 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface, 96 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface,
101 bluetooth_gatt_descriptor::kReadValue); 97 bluetooth_gatt_descriptor::kReadValue);
102 98
103 object_proxy->CallMethodWithErrorCallback( 99 object_proxy->CallMethodWithErrorCallback(
104 &method_call, 100 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
105 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
106 base::Bind(&BluetoothGattDescriptorClientImpl::OnValueSuccess, 101 base::Bind(&BluetoothGattDescriptorClientImpl::OnValueSuccess,
107 weak_ptr_factory_.GetWeakPtr(), 102 weak_ptr_factory_.GetWeakPtr(), callback),
108 callback),
109 base::Bind(&BluetoothGattDescriptorClientImpl::OnError, 103 base::Bind(&BluetoothGattDescriptorClientImpl::OnError,
110 weak_ptr_factory_.GetWeakPtr(), 104 weak_ptr_factory_.GetWeakPtr(), error_callback));
111 error_callback));
112 } 105 }
113 106
114 // BluetoothGattDescriptorClientImpl override. 107 // BluetoothGattDescriptorClientImpl override.
115 void WriteValue(const dbus::ObjectPath& object_path, 108 void WriteValue(const dbus::ObjectPath& object_path,
116 const std::vector<uint8>& value, 109 const std::vector<uint8>& value,
117 const base::Closure& callback, 110 const base::Closure& callback,
118 const ErrorCallback& error_callback) override { 111 const ErrorCallback& error_callback) override {
119 dbus::ObjectProxy* object_proxy = 112 dbus::ObjectProxy* object_proxy =
120 object_manager_->GetObjectProxy(object_path); 113 object_manager_->GetObjectProxy(object_path);
121 if (!object_proxy) { 114 if (!object_proxy) {
122 error_callback.Run(kUnknownDescriptorError, ""); 115 error_callback.Run(kUnknownDescriptorError, "");
123 return; 116 return;
124 } 117 }
125 118
126 dbus::MethodCall method_call( 119 dbus::MethodCall method_call(
127 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface, 120 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface,
128 bluetooth_gatt_descriptor::kWriteValue); 121 bluetooth_gatt_descriptor::kWriteValue);
129 dbus::MessageWriter writer(&method_call); 122 dbus::MessageWriter writer(&method_call);
130 writer.AppendArrayOfBytes(value.data(), value.size()); 123 writer.AppendArrayOfBytes(value.data(), value.size());
131 124
132 object_proxy->CallMethodWithErrorCallback( 125 object_proxy->CallMethodWithErrorCallback(
133 &method_call, 126 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
134 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
135 base::Bind(&BluetoothGattDescriptorClientImpl::OnSuccess, 127 base::Bind(&BluetoothGattDescriptorClientImpl::OnSuccess,
136 weak_ptr_factory_.GetWeakPtr(), 128 weak_ptr_factory_.GetWeakPtr(), callback),
137 callback),
138 base::Bind(&BluetoothGattDescriptorClientImpl::OnError, 129 base::Bind(&BluetoothGattDescriptorClientImpl::OnError,
139 weak_ptr_factory_.GetWeakPtr(), 130 weak_ptr_factory_.GetWeakPtr(), error_callback));
140 error_callback));
141 } 131 }
142 132
143 // dbus::ObjectManager::Interface override. 133 // dbus::ObjectManager::Interface override.
144 dbus::PropertySet* CreateProperties( 134 dbus::PropertySet* CreateProperties(
145 dbus::ObjectProxy* object_proxy, 135 dbus::ObjectProxy* object_proxy,
146 const dbus::ObjectPath& object_path, 136 const dbus::ObjectPath& object_path,
147 const std::string& interface_name) override { 137 const std::string& interface_name) override {
148 Properties* properties = new Properties( 138 Properties* properties = new Properties(
149 object_proxy, 139 object_proxy, interface_name,
150 interface_name,
151 base::Bind(&BluetoothGattDescriptorClientImpl::OnPropertyChanged, 140 base::Bind(&BluetoothGattDescriptorClientImpl::OnPropertyChanged,
152 weak_ptr_factory_.GetWeakPtr(), 141 weak_ptr_factory_.GetWeakPtr(), object_path));
153 object_path));
154 return static_cast<dbus::PropertySet*>(properties); 142 return static_cast<dbus::PropertySet*>(properties);
155 } 143 }
156 144
157 // dbus::ObjectManager::Interface override. 145 // dbus::ObjectManager::Interface override.
158 void ObjectAdded(const dbus::ObjectPath& object_path, 146 void ObjectAdded(const dbus::ObjectPath& object_path,
159 const std::string& interface_name) override { 147 const std::string& interface_name) override {
160 VLOG(2) << "Remote GATT descriptor added: " << object_path.value(); 148 VLOG(2) << "Remote GATT descriptor added: " << object_path.value();
161 FOR_EACH_OBSERVER(BluetoothGattDescriptorClient::Observer, observers_, 149 FOR_EACH_OBSERVER(BluetoothGattDescriptorClient::Observer, observers_,
162 GattDescriptorAdded(object_path)); 150 GattDescriptorAdded(object_path));
163 } 151 }
164 152
165 // dbus::ObjectManager::Interface override. 153 // dbus::ObjectManager::Interface override.
166 void ObjectRemoved(const dbus::ObjectPath& object_path, 154 void ObjectRemoved(const dbus::ObjectPath& object_path,
167 const std::string& interface_name) override { 155 const std::string& interface_name) override {
168 VLOG(2) << "Remote GATT descriptor removed: " << object_path.value(); 156 VLOG(2) << "Remote GATT descriptor removed: " << object_path.value();
169 FOR_EACH_OBSERVER(BluetoothGattDescriptorClient::Observer, observers_, 157 FOR_EACH_OBSERVER(BluetoothGattDescriptorClient::Observer, observers_,
170 GattDescriptorRemoved(object_path)); 158 GattDescriptorRemoved(object_path));
171 } 159 }
172 160
173 protected: 161 protected:
174 // chromeos::DBusClient override. 162 // chromeos::DBusClient override.
175 void Init(dbus::Bus* bus) override { 163 void Init(dbus::Bus* bus) override {
176 object_manager_ = bus->GetObjectManager( 164 object_manager_ = bus->GetObjectManager(
177 bluetooth_object_manager::kBluetoothObjectManagerServiceName, 165 bluetooth_object_manager::kBluetoothObjectManagerServiceName,
178 dbus::ObjectPath( 166 dbus::ObjectPath(
179 bluetooth_object_manager::kBluetoothObjectManagerServicePath)); 167 bluetooth_object_manager::kBluetoothObjectManagerServicePath));
180 object_manager_->RegisterInterface( 168 object_manager_->RegisterInterface(
181 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface, 169 bluetooth_gatt_descriptor::kBluetoothGattDescriptorInterface, this);
182 this);
183 } 170 }
184 171
185 private: 172 private:
186 // Called by dbus::PropertySet when a property value is changed, either by 173 // Called by dbus::PropertySet when a property value is changed, either by
187 // result of a signal or response to a GetAll() or Get() call. Informs 174 // result of a signal or response to a GetAll() or Get() call. Informs
188 // observers. 175 // observers.
189 virtual void OnPropertyChanged(const dbus::ObjectPath& object_path, 176 virtual void OnPropertyChanged(const dbus::ObjectPath& object_path,
190 const std::string& property_name) { 177 const std::string& property_name) {
191 VLOG(2) << "Remote GATT descriptor property changed: " 178 VLOG(2) << "Remote GATT descriptor property changed: "
192 << object_path.value() << ": " << property_name; 179 << object_path.value() << ": " << property_name;
193 FOR_EACH_OBSERVER(BluetoothGattDescriptorClient::Observer, observers_, 180 FOR_EACH_OBSERVER(
194 GattDescriptorPropertyChanged(object_path, 181 BluetoothGattDescriptorClient::Observer, observers_,
195 property_name)); 182 GattDescriptorPropertyChanged(object_path, property_name));
196 } 183 }
197 184
198 // Called when a response for a successful method call is received. 185 // Called when a response for a successful method call is received.
199 void OnSuccess(const base::Closure& callback, dbus::Response* response) { 186 void OnSuccess(const base::Closure& callback, dbus::Response* response) {
200 DCHECK(response); 187 DCHECK(response);
201 callback.Run(); 188 callback.Run();
202 } 189 }
203 190
204 // Called when a descriptor value response for a successful method call is 191 // Called when a descriptor value response for a successful method call is
205 // received. 192 // received.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 232
246 // Weak pointer factory for generating 'this' pointers that might live longer 233 // Weak pointer factory for generating 'this' pointers that might live longer
247 // than we do. 234 // than we do.
248 // Note: This should remain the last member so it'll be destroyed and 235 // Note: This should remain the last member so it'll be destroyed and
249 // invalidate its weak pointers before any other members are destroyed. 236 // invalidate its weak pointers before any other members are destroyed.
250 base::WeakPtrFactory<BluetoothGattDescriptorClientImpl> weak_ptr_factory_; 237 base::WeakPtrFactory<BluetoothGattDescriptorClientImpl> weak_ptr_factory_;
251 238
252 DISALLOW_COPY_AND_ASSIGN(BluetoothGattDescriptorClientImpl); 239 DISALLOW_COPY_AND_ASSIGN(BluetoothGattDescriptorClientImpl);
253 }; 240 };
254 241
255 BluetoothGattDescriptorClient::BluetoothGattDescriptorClient() { 242 BluetoothGattDescriptorClient::BluetoothGattDescriptorClient() {}
256 }
257 243
258 BluetoothGattDescriptorClient::~BluetoothGattDescriptorClient() { 244 BluetoothGattDescriptorClient::~BluetoothGattDescriptorClient() {}
259 }
260 245
261 // static 246 // static
262 BluetoothGattDescriptorClient* BluetoothGattDescriptorClient::Create() { 247 BluetoothGattDescriptorClient* BluetoothGattDescriptorClient::Create() {
263 return new BluetoothGattDescriptorClientImpl(); 248 return new BluetoothGattDescriptorClientImpl();
264 } 249 }
265 250
266 } // namespace chromeos 251 } // namespace bluez
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698