Commit 1e60a66e authored by Harvey Yang's avatar Harvey Yang Committed by Commit Bot

sensors: Add SensorServiceNewDevicesObserver in SensorService

Updating with CL:2386879, this commit adds
SensorServiceNewDevicesObserver to support sensors that are setup after
iioservice starts, and let iioservice notify sensor clients that new
sensors are available.
This commit also adds the implementation of the new method in the fake
class.

BUG=b:172414309
TEST=builds

Change-Id: Ib2bfba1038dc737336424699bfabf02b6ae68941
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2523131Reviewed-by: default avatarRyo Hashimoto <hashimoto@chromium.org>
Reviewed-by: default avatarJorge Lucangeli Obes <jorgelo@chromium.org>
Commit-Queue: Cheng-Hao Yang <chenghaoyang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825268}
parent 202e93e8
...@@ -50,9 +50,14 @@ void FakeSensorService::SetDevice( ...@@ -50,9 +50,14 @@ void FakeSensorService::SetDevice(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DeviceData data; DeviceData data;
data.types = std::move(types); data.types = types;
data.sensor_device = std::move(sensor_device); data.sensor_device = std::move(sensor_device);
devices_[iio_device_id] = std::move(data); devices_[iio_device_id] = std::move(data);
for (auto& observer : observers_) {
observer->OnNewDeviceAdded(iio_device_id, std::vector<mojom::DeviceType>(
types.begin(), types.end()));
}
} }
void FakeSensorService::GetDeviceIds(mojom::DeviceType type, void FakeSensorService::GetDeviceIds(mojom::DeviceType type,
...@@ -97,6 +102,13 @@ void FakeSensorService::GetDevice( ...@@ -97,6 +102,13 @@ void FakeSensorService::GetDevice(
it->second.sensor_device->AddReceiver(std::move(device_request)); it->second.sensor_device->AddReceiver(std::move(device_request));
} }
void FakeSensorService::RegisterNewDevicesObserver(
mojo::PendingRemote<mojom::SensorServiceNewDevicesObserver> observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
observers_.Add(std::move(observer));
}
FakeSensorService::DeviceData::DeviceData() = default; FakeSensorService::DeviceData::DeviceData() = default;
FakeSensorService::DeviceData::DeviceData(FakeSensorService::DeviceData&&) = FakeSensorService::DeviceData::DeviceData(FakeSensorService::DeviceData&&) =
default; default;
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "base/sequence_checker.h" #include "base/sequence_checker.h"
#include "chromeos/components/sensors/fake_sensor_device.h" #include "chromeos/components/sensors/fake_sensor_device.h"
#include "chromeos/components/sensors/mojom/sensor.mojom.h" #include "chromeos/components/sensors/mojom/sensor.mojom.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote_set.h"
namespace chromeos { namespace chromeos {
namespace sensors { namespace sensors {
...@@ -38,6 +40,9 @@ class FakeSensorService final : public mojom::SensorService { ...@@ -38,6 +40,9 @@ class FakeSensorService final : public mojom::SensorService {
void GetDevice( void GetDevice(
int32_t iio_device_id, int32_t iio_device_id,
mojo::PendingReceiver<mojom::SensorDevice> device_request) override; mojo::PendingReceiver<mojom::SensorDevice> device_request) override;
void RegisterNewDevicesObserver(
mojo::PendingRemote<mojom::SensorServiceNewDevicesObserver> observer)
override;
private: private:
struct DeviceData { struct DeviceData {
...@@ -54,6 +59,7 @@ class FakeSensorService final : public mojom::SensorService { ...@@ -54,6 +59,7 @@ class FakeSensorService final : public mojom::SensorService {
std::map<int32_t, DeviceData> devices_; std::map<int32_t, DeviceData> devices_;
mojo::Receiver<mojom::SensorService> receiver_{this}; mojo::Receiver<mojom::SensorService> receiver_{this};
mojo::RemoteSet<mojom::SensorServiceNewDevicesObserver> observers_;
SEQUENCE_CHECKER(sequence_checker_); SEQUENCE_CHECKER(sequence_checker_);
}; };
......
...@@ -62,7 +62,7 @@ enum ObserverErrorType { ...@@ -62,7 +62,7 @@ enum ObserverErrorType {
// multiple isolated SensorDevices for one physical device, if it wants // multiple isolated SensorDevices for one physical device, if it wants
// different frequencies of that device's samples. // different frequencies of that device's samples.
// //
// Next method ID: 3 // Next method ID: 4
interface SensorService { interface SensorService {
// Gets device ids as a vector of int given the device's type. Only devices // Gets device ids as a vector of int given the device's type. Only devices
// with id having "iio:device" as the prefix would be available. // with id having "iio:device" as the prefix would be available.
...@@ -81,6 +81,11 @@ interface SensorService { ...@@ -81,6 +81,11 @@ interface SensorService {
// If failed, the request won't be bound and will be destroyed directly. // If failed, the request won't be bound and will be destroyed directly.
GetDevice@2(int32 iio_device_id, GetDevice@2(int32 iio_device_id,
pending_receiver<SensorDevice> device_request); pending_receiver<SensorDevice> device_request);
// Registers a SensorServiceNewDevicesObserver to iioservice. Users will get
// notified when new devices are added and visible to iioservice.
RegisterNewDevicesObserver
@3(pending_remote<SensorServiceNewDevicesObserver> observer);
}; };
// SensorDevice, an interface sending requests for a physical device // SensorDevice, an interface sending requests for a physical device
...@@ -149,3 +154,13 @@ interface SensorDeviceSamplesObserver { ...@@ -149,3 +154,13 @@ interface SensorDeviceSamplesObserver {
// An error occurs and is sent to the client as an enum type. // An error occurs and is sent to the client as an enum type.
OnErrorOccurred@1(ObserverErrorType type); OnErrorOccurred@1(ObserverErrorType type);
}; };
// One observer is created to track new sensors updated to iioservice, using
// SensorService::RegisterNewDevicesObserver to register the observer.
//
// Next method ID: 1
interface SensorServiceNewDevicesObserver {
// A new IIO device with |iio_device_id| and |types| is added and visible to
// iioservice. Sensor clients can get access to this device with the id.
OnNewDeviceAdded@0(int32 iio_device_id, array<DeviceType> types);
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment