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

Side by Side Diff: chromeos/dbus/fake_bluetooth_gatt_characteristic_client.cc

Issue 788193004: chromeos/dbus: Update Bluetooth GATT API clients to upstream definition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase & tbr Created 5 years, 10 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/fake_bluetooth_gatt_characteristic_client.h" 5 #include "chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 delayed->delay_--; 169 delayed->delay_--;
170 error_callback.Run("org.bluez.Error.InProgress", 170 error_callback.Run("org.bluez.Error.InProgress",
171 "Another read is currenty in progress"); 171 "Another read is currenty in progress");
172 if (delayed->delay_ == 0) { 172 if (delayed->delay_ == 0) {
173 delayed->callback_.Run(); 173 delayed->callback_.Run();
174 action_extra_requests_.erase("ReadValue"); 174 action_extra_requests_.erase("ReadValue");
175 delete delayed; 175 delete delayed;
176 } 176 }
177 return; 177 return;
178 } 178 }
179
179 base::Closure completed_callback; 180 base::Closure completed_callback;
180 if (!IsHeartRateVisible()) { 181 if (!IsHeartRateVisible()) {
181 completed_callback = 182 completed_callback =
182 base::Bind(error_callback, kUnknownCharacteristicError, ""); 183 base::Bind(error_callback, kUnknownCharacteristicError, "");
183 } else { 184 } else {
184 std::vector<uint8> value; 185 std::vector<uint8> value = {0x06}; // Location is "foot".
185 value.push_back(0x06); // Location is "foot". 186 completed_callback = base::Bind(
186 completed_callback = base::Bind(callback, value); 187 &FakeBluetoothGattCharacteristicClient::DelayedReadValueCallback,
188 weak_ptr_factory_.GetWeakPtr(), object_path, callback, value);
187 } 189 }
188 190
189 if (extra_requests_ > 0) { 191 if (extra_requests_ > 0) {
190 action_extra_requests_["ReadValue"] = 192 action_extra_requests_["ReadValue"] =
191 new DelayedCallback(completed_callback, extra_requests_); 193 new DelayedCallback(completed_callback, extra_requests_);
192 return; 194 return;
193 } 195 }
196
194 completed_callback.Run(); 197 completed_callback.Run();
195 } 198 }
196 199
197 void FakeBluetoothGattCharacteristicClient::WriteValue( 200 void FakeBluetoothGattCharacteristicClient::WriteValue(
198 const dbus::ObjectPath& object_path, 201 const dbus::ObjectPath& object_path,
199 const std::vector<uint8>& value, 202 const std::vector<uint8>& value,
200 const base::Closure& callback, 203 const base::Closure& callback,
201 const ErrorCallback& error_callback) { 204 const ErrorCallback& error_callback) {
202 if (!authenticated_) { 205 if (!authenticated_) {
203 error_callback.Run("org.bluez.Error.NotPaired", "Please login"); 206 error_callback.Run("org.bluez.Error.NotPaired", "Please login");
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 ScheduleHeartRateMeasurementValueChange() { 484 ScheduleHeartRateMeasurementValueChange() {
482 if (!IsHeartRateVisible()) 485 if (!IsHeartRateVisible())
483 return; 486 return;
484 487
485 // Don't send updates if the characteristic is not notifying. 488 // Don't send updates if the characteristic is not notifying.
486 if (!heart_rate_measurement_properties_->notifying.value()) 489 if (!heart_rate_measurement_properties_->notifying.value())
487 return; 490 return;
488 491
489 VLOG(2) << "Updating heart rate value."; 492 VLOG(2) << "Updating heart rate value.";
490 std::vector<uint8> measurement = GetHeartRateMeasurementValue(); 493 std::vector<uint8> measurement = GetHeartRateMeasurementValue();
491 494 heart_rate_measurement_properties_->value.ReplaceValue(measurement);
492 FOR_EACH_OBSERVER(
493 BluetoothGattCharacteristicClient::Observer,
494 observers_,
495 GattCharacteristicValueUpdated(
496 dbus::ObjectPath(heart_rate_measurement_path_), measurement));
497 495
498 base::MessageLoop::current()->PostDelayedTask( 496 base::MessageLoop::current()->PostDelayedTask(
499 FROM_HERE, 497 FROM_HERE,
500 base::Bind(&FakeBluetoothGattCharacteristicClient:: 498 base::Bind(&FakeBluetoothGattCharacteristicClient::
501 ScheduleHeartRateMeasurementValueChange, 499 ScheduleHeartRateMeasurementValueChange,
502 weak_ptr_factory_.GetWeakPtr()), 500 weak_ptr_factory_.GetWeakPtr()),
503 base::TimeDelta::FromMilliseconds( 501 base::TimeDelta::FromMilliseconds(
504 kHeartRateMeasurementNotificationIntervalMs)); 502 kHeartRateMeasurementNotificationIntervalMs));
505 } 503 }
506 504
505 void FakeBluetoothGattCharacteristicClient::DelayedReadValueCallback(
506 const dbus::ObjectPath& object_path,
507 const ValueCallback& callback,
508 const std::vector<uint8_t>& value) {
509 Properties* properties = GetProperties(object_path);
510 DCHECK(properties);
511
512 properties->value.ReplaceValue(value);
513 callback.Run(value);
514 }
515
507 std::vector<uint8> 516 std::vector<uint8>
508 FakeBluetoothGattCharacteristicClient::GetHeartRateMeasurementValue() { 517 FakeBluetoothGattCharacteristicClient::GetHeartRateMeasurementValue() {
509 // TODO(armansito): We should make sure to properly pack this struct to ensure 518 // TODO(armansito): We should make sure to properly pack this struct to ensure
510 // correct byte alignment and endianness. It doesn't matter too much right now 519 // correct byte alignment and endianness. It doesn't matter too much right now
511 // as this is a fake and GCC on Linux seems to do the right thing. 520 // as this is a fake and GCC on Linux seems to do the right thing.
512 struct { 521 struct {
513 uint8 flags; 522 uint8 flags;
514 uint8 bpm; 523 uint8 bpm;
515 uint16 energy_expanded; 524 uint16 energy_expanded;
516 uint16 rr_interval; 525 uint16 rr_interval;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 DCHECK(heart_rate_visible_ != heart_rate_measurement_path_.empty()); 559 DCHECK(heart_rate_visible_ != heart_rate_measurement_path_.empty());
551 DCHECK(heart_rate_visible_ != body_sensor_location_path_.empty()); 560 DCHECK(heart_rate_visible_ != body_sensor_location_path_.empty());
552 DCHECK(heart_rate_visible_ != heart_rate_control_point_path_.empty()); 561 DCHECK(heart_rate_visible_ != heart_rate_control_point_path_.empty());
553 DCHECK(heart_rate_visible_ == !!heart_rate_measurement_properties_.get()); 562 DCHECK(heart_rate_visible_ == !!heart_rate_measurement_properties_.get());
554 DCHECK(heart_rate_visible_ == !!body_sensor_location_properties_.get()); 563 DCHECK(heart_rate_visible_ == !!body_sensor_location_properties_.get());
555 DCHECK(heart_rate_visible_ == !!heart_rate_control_point_properties_.get()); 564 DCHECK(heart_rate_visible_ == !!heart_rate_control_point_properties_.get());
556 return heart_rate_visible_; 565 return heart_rate_visible_;
557 } 566 }
558 567
559 } // namespace chromeos 568 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h ('k') | chromeos/dbus/fake_bluetooth_gatt_descriptor_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698