fake_sensor_service.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2020 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. #include "chromeos/components/sensors/fake_sensor_service.h"
  5. #include <utility>
  6. #include "base/bind.h"
  7. #include "base/containers/flat_map.h"
  8. #include "base/threading/sequenced_task_runner_handle.h"
  9. namespace chromeos {
  10. namespace sensors {
  11. FakeSensorService::FakeSensorService() {
  12. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  13. }
  14. FakeSensorService::~FakeSensorService() {
  15. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  16. }
  17. void FakeSensorService::AddReceiver(
  18. mojo::PendingReceiver<mojom::SensorService> pending_receiver) {
  19. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  20. receiver_set_.Add(this, std::move(pending_receiver));
  21. }
  22. void FakeSensorService::ClearReceivers() {
  23. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  24. receiver_set_.Clear();
  25. }
  26. bool FakeSensorService::HasReceivers() const {
  27. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  28. return !receiver_set_.empty();
  29. }
  30. void FakeSensorService::SetDevice(
  31. int32_t iio_device_id,
  32. std::set<mojom::DeviceType> types,
  33. std::unique_ptr<FakeSensorDevice> sensor_device) {
  34. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  35. DeviceData data;
  36. data.types = types;
  37. data.sensor_device = std::move(sensor_device);
  38. devices_[iio_device_id] = std::move(data);
  39. for (auto& observer : observers_) {
  40. observer->OnNewDeviceAdded(iio_device_id, std::vector<mojom::DeviceType>(
  41. types.begin(), types.end()));
  42. }
  43. }
  44. void FakeSensorService::GetDeviceIds(mojom::DeviceType type,
  45. GetDeviceIdsCallback callback) {
  46. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  47. std::vector<int32_t> ids;
  48. for (const auto& device : devices_) {
  49. if (device.second.types.count(type) == 0)
  50. continue;
  51. ids.push_back(device.first);
  52. }
  53. base::SequencedTaskRunnerHandle::Get()->PostTask(
  54. FROM_HERE, base::BindOnce(std::move(callback), std::move(ids)));
  55. }
  56. void FakeSensorService::GetAllDeviceIds(GetAllDeviceIdsCallback callback) {
  57. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  58. base::flat_map<int32_t, std::vector<mojom::DeviceType>> id_types;
  59. for (const auto& device : devices_) {
  60. id_types.emplace(device.first,
  61. std::vector<mojom::DeviceType>(device.second.types.begin(),
  62. device.second.types.end()));
  63. }
  64. base::SequencedTaskRunnerHandle::Get()->PostTask(
  65. FROM_HERE, base::BindOnce(std::move(callback), std::move(id_types)));
  66. }
  67. void FakeSensorService::GetDevice(
  68. int32_t iio_device_id,
  69. mojo::PendingReceiver<mojom::SensorDevice> device_request) {
  70. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  71. auto it = devices_.find(iio_device_id);
  72. if (it == devices_.end())
  73. return;
  74. it->second.sensor_device->AddReceiver(std::move(device_request));
  75. }
  76. void FakeSensorService::RegisterNewDevicesObserver(
  77. mojo::PendingRemote<mojom::SensorServiceNewDevicesObserver> observer) {
  78. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  79. observers_.Add(std::move(observer));
  80. }
  81. FakeSensorService::DeviceData::DeviceData() = default;
  82. FakeSensorService::DeviceData::DeviceData(FakeSensorService::DeviceData&&) =
  83. default;
  84. FakeSensorService::DeviceData& FakeSensorService::DeviceData::operator=(
  85. FakeSensorService::DeviceData&&) = default;
  86. FakeSensorService::DeviceData::~DeviceData() = default;
  87. } // namespace sensors
  88. } // namespace chromeos