OLD | NEW |
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 "device/bluetooth/bluetooth_remote_gatt_service_chromeos.h" | 5 #include "device/bluetooth/bluetooth_remote_gatt_service_chromeos.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "chromeos/dbus/bluetooth_gatt_service_client.h" | 9 #include "chromeos/dbus/bluetooth_gatt_service_client.h" |
10 #include "chromeos/dbus/dbus_thread_manager.h" | 10 #include "chromeos/dbus/dbus_thread_manager.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 // Don't send service changed unless we know that all characteristics have | 188 // Don't send service changed unless we know that all characteristics have |
189 // already been discovered. This is to prevent spammy events before sending | 189 // already been discovered. This is to prevent spammy events before sending |
190 // out the first Gatt | 190 // out the first Gatt |
191 if (!discovery_complete_) | 191 if (!discovery_complete_) |
192 return; | 192 return; |
193 | 193 |
194 DCHECK(adapter_); | 194 DCHECK(adapter_); |
195 adapter_->NotifyGattServiceChanged(this); | 195 adapter_->NotifyGattServiceChanged(this); |
196 } | 196 } |
197 | 197 |
198 void BluetoothRemoteGattServiceChromeOS::NotifyCharacteristicValueChanged( | |
199 BluetoothRemoteGattCharacteristicChromeOS* characteristic, | |
200 const std::vector<uint8>& value) { | |
201 DCHECK(characteristic->GetService() == this); | |
202 DCHECK(adapter_); | |
203 adapter_->NotifyGattCharacteristicValueChanged(characteristic, value); | |
204 } | |
205 | |
206 void BluetoothRemoteGattServiceChromeOS::NotifyDescriptorAddedOrRemoved( | 198 void BluetoothRemoteGattServiceChromeOS::NotifyDescriptorAddedOrRemoved( |
207 BluetoothRemoteGattCharacteristicChromeOS* characteristic, | 199 BluetoothRemoteGattCharacteristicChromeOS* characteristic, |
208 BluetoothRemoteGattDescriptorChromeOS* descriptor, | 200 BluetoothRemoteGattDescriptorChromeOS* descriptor, |
209 bool added) { | 201 bool added) { |
210 DCHECK(characteristic->GetService() == this); | 202 DCHECK(characteristic->GetService() == this); |
211 DCHECK(descriptor->GetCharacteristic() == characteristic); | 203 DCHECK(descriptor->GetCharacteristic() == characteristic); |
212 DCHECK(adapter_); | 204 DCHECK(adapter_); |
213 | 205 |
214 if (added) { | 206 if (added) { |
215 adapter_->NotifyGattDescriptorAdded(descriptor); | 207 adapter_->NotifyGattDescriptorAdded(descriptor); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 | 296 |
305 DCHECK(adapter_); | 297 DCHECK(adapter_); |
306 adapter_->NotifyGattCharacteristicRemoved(characteristic); | 298 adapter_->NotifyGattCharacteristicRemoved(characteristic); |
307 | 299 |
308 delete characteristic; | 300 delete characteristic; |
309 } | 301 } |
310 | 302 |
311 void BluetoothRemoteGattServiceChromeOS::GattCharacteristicPropertyChanged( | 303 void BluetoothRemoteGattServiceChromeOS::GattCharacteristicPropertyChanged( |
312 const dbus::ObjectPath& object_path, | 304 const dbus::ObjectPath& object_path, |
313 const std::string& property_name) { | 305 const std::string& property_name) { |
314 if (characteristics_.find(object_path) == characteristics_.end()) { | 306 CharacteristicMap::iterator iter = characteristics_.find(object_path); |
| 307 if (iter == characteristics_.end()) { |
315 VLOG(3) << "Properties of unknown characteristic changed"; | 308 VLOG(3) << "Properties of unknown characteristic changed"; |
316 return; | 309 return; |
317 } | 310 } |
318 | 311 |
319 // We may receive a property changed event in certain cases, e.g. when the | 312 // We may receive a property changed event in certain cases, e.g. when the |
320 // characteristic "Flags" property has been updated with values from the | 313 // characteristic "Flags" property has been updated with values from the |
321 // "Characteristic Extended Properties" descriptor. In this case, kick off | 314 // "Characteristic Extended Properties" descriptor. In this case, kick off |
322 // a service changed observer event to let observers refresh the | 315 // a service changed observer event to let observers refresh the |
323 // characteristics. | 316 // characteristics. |
324 BluetoothGattCharacteristicClient::Properties* properties = | 317 BluetoothGattCharacteristicClient::Properties* properties = |
325 DBusThreadManager::Get()->GetBluetoothGattCharacteristicClient()-> | 318 DBusThreadManager::Get()->GetBluetoothGattCharacteristicClient()-> |
326 GetProperties(object_path); | 319 GetProperties(object_path); |
| 320 |
327 DCHECK(properties); | 321 DCHECK(properties); |
328 if (property_name != properties->flags.name()) | 322 DCHECK(adapter_); |
329 return; | |
330 | 323 |
331 NotifyServiceChanged(); | 324 if (property_name == properties->flags.name()) |
| 325 NotifyServiceChanged(); |
| 326 else if (property_name == properties->value.name()) |
| 327 adapter_->NotifyGattCharacteristicValueChanged(iter->second, |
| 328 properties->value.value()); |
332 } | 329 } |
333 | 330 |
334 } // namespace chromeos | 331 } // namespace chromeos |
OLD | NEW |