| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef RMAD_UTILS_MOJO_SERVICE_UTILS_H_ |
| #define RMAD_UTILS_MOJO_SERVICE_UTILS_H_ |
| |
| #include <map> |
| |
| #include <base/memory/ref_counted.h> |
| #include <iioservice/mojo/sensor.mojom.h> |
| #include <mojo/public/cpp/bindings/remote.h> |
| #include <mojo_service_manager/lib/mojom/service_manager.mojom.h> |
| |
| namespace rmad { |
| |
| class MojoServiceUtils : public base::RefCounted<MojoServiceUtils> { |
| public: |
| MojoServiceUtils() = default; |
| virtual cros::mojom::SensorDevice* GetSensorDevice(int device_id) = 0; |
| |
| protected: |
| // Hide the destructor so we don't accidentally delete this while there are |
| // references to it. |
| friend class base::RefCounted<MojoServiceUtils>; |
| virtual ~MojoServiceUtils() = default; |
| }; |
| |
| class MojoServiceUtilsImpl : public MojoServiceUtils { |
| public: |
| MojoServiceUtilsImpl() = default; |
| MojoServiceUtilsImpl(const MojoServiceUtilsImpl&) = delete; |
| MojoServiceUtilsImpl& operator=(const MojoServiceUtilsImpl&) = delete; |
| |
| void Initialize(); |
| cros::mojom::SensorDevice* GetSensorDevice(int device_id) override; |
| |
| // Functions for testing. |
| void SetSensorServiceForTesting( |
| mojo::PendingRemote<cros::mojom::SensorService> service); |
| void InsertDeviceForTesting(int device_id); |
| void SetInitializedForTesting(); |
| void SetConnectionErrorHandler(base::RepeatingCallback<void()> callback); |
| |
| private: |
| bool is_initialized = false; |
| mojo::Remote<chromeos::mojo_service_manager::mojom::ServiceManager> |
| service_manager_; |
| mojo::Remote<cros::mojom::SensorService> sensor_service_; |
| std::map<int, mojo::Remote<cros::mojom::SensorDevice>> sensor_devices_map_; |
| base::RepeatingCallback<void()> connection_error_callback_ = |
| base::DoNothing(); |
| }; |
| |
| } // namespace rmad |
| |
| #endif // RMAD_UTILS_MOJO_SERVICE_UTILS_H_ |