From 96a93f31005cf4d7fbe79157e1891d4ea99c49a3 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Thu, 30 Nov 2023 11:06:56 +0900 Subject: [PATCH] [sensor_plus] Implement set*SamplingPeriod method call (#634) --- packages/sensors_plus/CHANGELOG.md | 7 + packages/sensors_plus/README.md | 4 +- .../integration_test/sensors_plus_test.dart | 4 +- packages/sensors_plus/example/lib/main.dart | 226 +++++++++++++----- packages/sensors_plus/example/lib/snake.dart | 2 +- packages/sensors_plus/example/pubspec.yaml | 2 +- packages/sensors_plus/pubspec.yaml | 4 +- .../sensors_plus/tizen/src/device_sensor.cc | 44 ++-- .../sensors_plus/tizen/src/device_sensor.h | 3 + .../tizen/src/sensors_plus_plugin.cc | 151 +++++++++--- 10 files changed, 327 insertions(+), 120 deletions(-) diff --git a/packages/sensors_plus/CHANGELOG.md b/packages/sensors_plus/CHANGELOG.md index 9df081147..f9ec7375d 100644 --- a/packages/sensors_plus/CHANGELOG.md +++ b/packages/sensors_plus/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.1.4 + +* Implement set*SamplingPeriod method call. +* Update deprecated API in integration_test. +* Update sensors_plus to 4.0.1. +* Update sensors_plus_platform_interface to 1.2.0. + ## 1.1.3 * Update sensors_plus to 3.0.2. diff --git a/packages/sensors_plus/README.md b/packages/sensors_plus/README.md index ca4143861..6d9830ef4 100644 --- a/packages/sensors_plus/README.md +++ b/packages/sensors_plus/README.md @@ -10,8 +10,8 @@ This package is not an _endorsed_ implementation of 'sensors_plus'. Therefore, y ```yaml dependencies: - sensors_plus: ^3.0.2 - sensors_plus_tizen: ^1.1.3 + sensors_plus: ^4.0.1 + sensors_plus_tizen: ^1.1.4 ``` Then you can import `sensors_plus` in your Dart code: diff --git a/packages/sensors_plus/example/integration_test/sensors_plus_test.dart b/packages/sensors_plus/example/integration_test/sensors_plus_test.dart index 9981a2834..03e6ca732 100644 --- a/packages/sensors_plus/example/integration_test/sensors_plus_test.dart +++ b/packages/sensors_plus/example/integration_test/sensors_plus_test.dart @@ -1,7 +1,6 @@ // Copyright 2019, the Chromium project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. - import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:sensors_plus/sensors_plus.dart'; @@ -14,7 +13,8 @@ void main() { (WidgetTester tester) async { final completer = Completer(); late StreamSubscription subscription; - subscription = accelerometerEvents.listen((AccelerometerEvent event) { + subscription = + accelerometerEventStream().listen((AccelerometerEvent event) { completer.complete(event); subscription.cancel(); }); diff --git a/packages/sensors_plus/example/lib/main.dart b/packages/sensors_plus/example/lib/main.dart index 5453b596a..a8d6634ba 100644 --- a/packages/sensors_plus/example/lib/main.dart +++ b/packages/sensors_plus/example/lib/main.dart @@ -50,28 +50,32 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { + static const Duration _ignoreDuration = Duration(milliseconds: 20); + static const int _snakeRows = 20; static const int _snakeColumns = 20; static const double _snakeCellSize = 10.0; - List? _userAccelerometerValues; - List? _accelerometerValues; - List? _gyroscopeValues; - List? _magnetometerValues; + UserAccelerometerEvent? _userAccelerometerEvent; + AccelerometerEvent? _accelerometerEvent; + GyroscopeEvent? _gyroscopeEvent; + MagnetometerEvent? _magnetometerEvent; + + DateTime? _userAccelerometerUpdateTime; + DateTime? _accelerometerUpdateTime; + DateTime? _gyroscopeUpdateTime; + DateTime? _magnetometerUpdateTime; + + int? _userAccelerometerLastInterval; + int? _accelerometerLastInterval; + int? _gyroscopeLastInterval; + int? _magnetometerLastInterval; final _streamSubscriptions = >[]; + Duration sensorInterval = SensorInterval.normalInterval; + @override Widget build(BuildContext context) { - final userAccelerometer = _userAccelerometerValues - ?.map((double v) => v.toStringAsFixed(1)) - .toList(); - final accelerometer = - _accelerometerValues?.map((double v) => v.toStringAsFixed(1)).toList(); - final gyroscope = - _gyroscopeValues?.map((double v) => v.toStringAsFixed(1)).toList(); - final magnetometer = - _magnetometerValues?.map((double v) => v.toStringAsFixed(1)).toList(); - return Scaffold( appBar: AppBar( title: const Text('Sensors Plus Example'), @@ -97,40 +101,118 @@ class _MyHomePageState extends State { ), ), Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('UserAccelerometer: $userAccelerometer'), - ], - ), - ), - Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Accelerometer: $accelerometer'), - ], - ), - ), - Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Gyroscope: $gyroscope'), + padding: const EdgeInsets.all(20.0), + child: Table( + columnWidths: const { + 0: FlexColumnWidth(4), + 4: FlexColumnWidth(2), + }, + children: [ + const TableRow( + children: [ + SizedBox.shrink(), + Text('X'), + Text('Y'), + Text('Z'), + Text('Interval'), + ], + ), + TableRow( + children: [ + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text('UserAccelerometer'), + ), + Text(_userAccelerometerEvent?.x.toStringAsFixed(1) ?? '?'), + Text(_userAccelerometerEvent?.y.toStringAsFixed(1) ?? '?'), + Text(_userAccelerometerEvent?.z.toStringAsFixed(1) ?? '?'), + Text( + '${_userAccelerometerLastInterval?.toString() ?? '?'} ms'), + ], + ), + TableRow( + children: [ + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text('Accelerometer'), + ), + Text(_accelerometerEvent?.x.toStringAsFixed(1) ?? '?'), + Text(_accelerometerEvent?.y.toStringAsFixed(1) ?? '?'), + Text(_accelerometerEvent?.z.toStringAsFixed(1) ?? '?'), + Text('${_accelerometerLastInterval?.toString() ?? '?'} ms'), + ], + ), + TableRow( + children: [ + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text('Gyroscope'), + ), + Text(_gyroscopeEvent?.x.toStringAsFixed(1) ?? '?'), + Text(_gyroscopeEvent?.y.toStringAsFixed(1) ?? '?'), + Text(_gyroscopeEvent?.z.toStringAsFixed(1) ?? '?'), + Text('${_gyroscopeLastInterval?.toString() ?? '?'} ms'), + ], + ), + TableRow( + children: [ + const Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text('Magnetometer'), + ), + Text(_magnetometerEvent?.x.toStringAsFixed(1) ?? '?'), + Text(_magnetometerEvent?.y.toStringAsFixed(1) ?? '?'), + Text(_magnetometerEvent?.z.toStringAsFixed(1) ?? '?'), + Text('${_magnetometerLastInterval?.toString() ?? '?'} ms'), + ], + ), ], ), ), - Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Magnetometer: $magnetometer'), - ], - ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('Update Interval:'), + SegmentedButton( + segments: [ + ButtonSegment( + value: SensorInterval.gameInterval, + label: Text('Game\n' + '(${SensorInterval.gameInterval.inMilliseconds}ms)'), + ), + ButtonSegment( + value: SensorInterval.uiInterval, + label: Text('UI\n' + '(${SensorInterval.uiInterval.inMilliseconds}ms)'), + ), + ButtonSegment( + value: SensorInterval.normalInterval, + label: Text('Normal\n' + '(${SensorInterval.normalInterval.inMilliseconds}ms)'), + ), + const ButtonSegment( + value: Duration(milliseconds: 500), + label: Text('500ms'), + ), + const ButtonSegment( + value: Duration(seconds: 1), + label: Text('1s'), + ), + ], + selected: {sensorInterval}, + showSelectedIcon: false, + onSelectionChanged: (value) { + setState(() { + sensorInterval = value.first; + userAccelerometerEventStream( + samplingPeriod: sensorInterval); + accelerometerEventStream(samplingPeriod: sensorInterval); + gyroscopeEventStream(samplingPeriod: sensorInterval); + magnetometerEventStream(samplingPeriod: sensorInterval); + }); + }, + ), + ], ), ], ), @@ -149,11 +231,19 @@ class _MyHomePageState extends State { void initState() { super.initState(); _streamSubscriptions.add( - userAccelerometerEvents.listen( + userAccelerometerEventStream(samplingPeriod: sensorInterval).listen( (UserAccelerometerEvent event) { + final now = DateTime.now(); setState(() { - _userAccelerometerValues = [event.x, event.y, event.z]; + _userAccelerometerEvent = event; + if (_userAccelerometerUpdateTime != null) { + final interval = now.difference(_userAccelerometerUpdateTime!); + if (interval > _ignoreDuration) { + _userAccelerometerLastInterval = interval.inMilliseconds; + } + } }); + _userAccelerometerUpdateTime = now; }, onError: (e) { showDialog( @@ -162,7 +252,7 @@ class _MyHomePageState extends State { return const AlertDialog( title: Text("Sensor Not Found"), content: Text( - "It seems that your device doesn't support Accelerometer Sensor"), + "It seems that your device doesn't support User Accelerometer Sensor"), ); }); }, @@ -170,11 +260,19 @@ class _MyHomePageState extends State { ), ); _streamSubscriptions.add( - accelerometerEvents.listen( + accelerometerEventStream(samplingPeriod: sensorInterval).listen( (AccelerometerEvent event) { + final now = DateTime.now(); setState(() { - _accelerometerValues = [event.x, event.y, event.z]; + _accelerometerEvent = event; + if (_accelerometerUpdateTime != null) { + final interval = now.difference(_accelerometerUpdateTime!); + if (interval > _ignoreDuration) { + _accelerometerLastInterval = interval.inMilliseconds; + } + } }); + _accelerometerUpdateTime = now; }, onError: (e) { showDialog( @@ -183,7 +281,7 @@ class _MyHomePageState extends State { return const AlertDialog( title: Text("Sensor Not Found"), content: Text( - "It seems that your device doesn't support Gyroscope Sensor"), + "It seems that your device doesn't support Accelerometer Sensor"), ); }); }, @@ -191,11 +289,19 @@ class _MyHomePageState extends State { ), ); _streamSubscriptions.add( - gyroscopeEvents.listen( + gyroscopeEventStream(samplingPeriod: sensorInterval).listen( (GyroscopeEvent event) { + final now = DateTime.now(); setState(() { - _gyroscopeValues = [event.x, event.y, event.z]; + _gyroscopeEvent = event; + if (_gyroscopeUpdateTime != null) { + final interval = now.difference(_gyroscopeUpdateTime!); + if (interval > _ignoreDuration) { + _gyroscopeLastInterval = interval.inMilliseconds; + } + } }); + _gyroscopeUpdateTime = now; }, onError: (e) { showDialog( @@ -204,7 +310,7 @@ class _MyHomePageState extends State { return const AlertDialog( title: Text("Sensor Not Found"), content: Text( - "It seems that your device doesn't support User Accelerometer Sensor"), + "It seems that your device doesn't support Gyroscope Sensor"), ); }); }, @@ -212,11 +318,19 @@ class _MyHomePageState extends State { ), ); _streamSubscriptions.add( - magnetometerEvents.listen( + magnetometerEventStream(samplingPeriod: sensorInterval).listen( (MagnetometerEvent event) { + final now = DateTime.now(); setState(() { - _magnetometerValues = [event.x, event.y, event.z]; + _magnetometerEvent = event; + if (_magnetometerUpdateTime != null) { + final interval = now.difference(_magnetometerUpdateTime!); + if (interval > _ignoreDuration) { + _magnetometerLastInterval = interval.inMilliseconds; + } + } }); + _magnetometerUpdateTime = now; }, onError: (e) { showDialog( diff --git a/packages/sensors_plus/example/lib/snake.dart b/packages/sensors_plus/example/lib/snake.dart index 0b4d18b66..dfb677a50 100644 --- a/packages/sensors_plus/example/lib/snake.dart +++ b/packages/sensors_plus/example/lib/snake.dart @@ -84,7 +84,7 @@ class SnakeState extends State { void initState() { super.initState(); _streamSubscription = - accelerometerEvents.listen((AccelerometerEvent event) { + accelerometerEventStream().listen((AccelerometerEvent event) { setState(() { acceleration = event; }); diff --git a/packages/sensors_plus/example/pubspec.yaml b/packages/sensors_plus/example/pubspec.yaml index 21f0c13fd..582b38a3f 100644 --- a/packages/sensors_plus/example/pubspec.yaml +++ b/packages/sensors_plus/example/pubspec.yaml @@ -9,7 +9,7 @@ environment: dependencies: flutter: sdk: flutter - sensors_plus: ^3.0.2 + sensors_plus: ^4.0.1 sensors_plus_tizen: path: ../ diff --git a/packages/sensors_plus/pubspec.yaml b/packages/sensors_plus/pubspec.yaml index c7bc88fce..39557ad59 100644 --- a/packages/sensors_plus/pubspec.yaml +++ b/packages/sensors_plus/pubspec.yaml @@ -2,7 +2,7 @@ name: sensors_plus_tizen description: Tizen implementation of the sensors plugin. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/sensors_plus -version: 1.1.3 +version: 1.1.4 environment: sdk: ">=2.18.0 <4.0.0" @@ -18,7 +18,7 @@ flutter: dependencies: flutter: sdk: flutter - sensors_plus_platform_interface: ^1.1.3 + sensors_plus_platform_interface: ^1.2.0 dev_dependencies: flutter_lints: ^2.0.1 diff --git a/packages/sensors_plus/tizen/src/device_sensor.cc b/packages/sensors_plus/tizen/src/device_sensor.cc index a840c510c..cc2c8b137 100644 --- a/packages/sensors_plus/tizen/src/device_sensor.cc +++ b/packages/sensors_plus/tizen/src/device_sensor.cc @@ -24,8 +24,21 @@ sensor_type_e ToTizenSensorType(const SensorType &sensor_type) { } // namespace -DeviceSensor::DeviceSensor(SensorType sensor_type) - : sensor_type_(sensor_type) {} +DeviceSensor::DeviceSensor(SensorType sensor_type) : sensor_type_(sensor_type) { + sensor_h sensor; + int ret = sensor_get_default_sensor(ToTizenSensorType(sensor_type_), &sensor); + if (ret != SENSOR_ERROR_NONE) { + LOG_ERROR("Failed to get default sensor: %s", get_error_message(ret)); + last_error_ = ret; + return; + } + + ret = sensor_create_listener(sensor, &listener_); + if (ret != SENSOR_ERROR_NONE) { + LOG_ERROR("Failed to create listener: %s", get_error_message(ret)); + last_error_ = ret; + } +} DeviceSensor::~DeviceSensor() { if (is_listening_) { @@ -51,23 +64,8 @@ bool DeviceSensor::StartListen(SensorEventCallback callback) { return false; } - sensor_h sensor; - int ret = sensor_get_default_sensor(ToTizenSensorType(sensor_type_), &sensor); - if (ret != SENSOR_ERROR_NONE) { - LOG_ERROR("Failed to get default sensor: %s", get_error_message(ret)); - last_error_ = ret; - return false; - } - - ret = sensor_create_listener(sensor, &listener_); - if (ret != SENSOR_ERROR_NONE) { - LOG_ERROR("Failed to create listener: %s", get_error_message(ret)); - last_error_ = ret; - return false; - } - - ret = sensor_listener_set_event_cb( - listener_, 60, + int ret = sensor_listener_set_event_cb( + listener_, interval_ms_, [](sensor_h sensor, sensor_event_s *event, void *user_data) { auto *self = static_cast(user_data); SensorEvent sensor_event; @@ -118,3 +116,11 @@ void DeviceSensor::StopListen() { return; } } + +void DeviceSensor::SetInterval(int interval_ms) { + interval_ms_ = interval_ms; + + if (listener_) { + sensor_listener_set_interval(listener_, interval_ms_); + } +} diff --git a/packages/sensors_plus/tizen/src/device_sensor.h b/packages/sensors_plus/tizen/src/device_sensor.h index ed55b148d..73a75935f 100644 --- a/packages/sensors_plus/tizen/src/device_sensor.h +++ b/packages/sensors_plus/tizen/src/device_sensor.h @@ -30,8 +30,11 @@ class DeviceSensor { void StopListen(); + void SetInterval(int interval_ms); + private: SensorType sensor_type_; + int interval_ms_ = 0; sensor_listener_h listener_ = nullptr; bool is_listening_ = false; int last_error_ = TIZEN_ERROR_NONE; diff --git a/packages/sensors_plus/tizen/src/sensors_plus_plugin.cc b/packages/sensors_plus/tizen/src/sensors_plus_plugin.cc index e36cb0c39..7432e0eab 100644 --- a/packages/sensors_plus/tizen/src/sensors_plus_plugin.cc +++ b/packages/sensors_plus/tizen/src/sensors_plus_plugin.cc @@ -7,22 +7,27 @@ #include #include #include +#include #include #include #include #include "device_sensor.h" +#include "log.h" typedef flutter::EventChannel FlEventChannel; typedef flutter::EventSink FlEventSink; +typedef flutter::MethodCall FlMethodCall; +typedef flutter::MethodChannel FlMethodChannel; +typedef flutter::MethodResult FlMethodResult; typedef flutter::StreamHandler FlStreamHandler; typedef flutter::StreamHandlerError FlStreamHandlerError; class DeviceSensorStreamHandler : public FlStreamHandler { public: - DeviceSensorStreamHandler(SensorType type) : sensor_(type) {} + DeviceSensorStreamHandler(DeviceSensor *sensor) : sensor_(sensor) {} protected: std::unique_ptr OnListenInternal( @@ -33,24 +38,24 @@ class DeviceSensorStreamHandler : public FlStreamHandler { SensorEventCallback callback = [this](SensorEvent sensor_event) -> void { events_->Success(flutter::EncodableValue(sensor_event)); }; - if (!sensor_.StartListen(callback)) { - events_->Error(sensor_.GetLastErrorString()); + if (!sensor_->StartListen(callback)) { + events_->Error(sensor_->GetLastErrorString()); return std::make_unique( - std::to_string(sensor_.GetLastError()), sensor_.GetLastErrorString(), - nullptr); + std::to_string(sensor_->GetLastError()), + sensor_->GetLastErrorString(), nullptr); } return nullptr; } std::unique_ptr OnCancelInternal( const flutter::EncodableValue *arguments) override { - sensor_.StopListen(); + sensor_->StopListen(); events_.reset(); return nullptr; } private: - DeviceSensor sensor_; + DeviceSensor *sensor_; std::unique_ptr events_; }; @@ -58,7 +63,16 @@ class SensorsPlusPlugin : public flutter::Plugin { public: static void RegisterWithRegistrar(flutter::PluginRegistrar *registrar) { auto plugin = std::make_unique(); - plugin->SetupEventChannels(registrar); + std::unique_ptr method_channel = + std::make_unique( + registrar->messenger(), "dev.fluttercommunity.plus/sensors/method", + &flutter::StandardMethodCodec::GetInstance()); + + method_channel->SetMethodCallHandler( + [plugin_pointer = plugin.get()](const auto &call, auto result) { + plugin_pointer->HandleMethodCall(call, std::move(result)); + }); + plugin->SetUpEventChannels(registrar, plugin.get()); registrar->AddPlugin(std::move(plugin)); } @@ -67,40 +81,103 @@ class SensorsPlusPlugin : public flutter::Plugin { virtual ~SensorsPlusPlugin() {} private: - void SetupEventChannels(flutter::PluginRegistrar *registrar) { - std::unique_ptr accelerometer_channel = - std::make_unique( - registrar->messenger(), - "dev.fluttercommunity.plus/sensors/accelerometer", - &flutter::StandardMethodCodec::GetInstance()); - accelerometer_channel->SetStreamHandler( + void SetUpEventChannels(flutter::PluginRegistrar *registrar, + SensorsPlusPlugin *plugin) { + accelerometer_event_channel_ = std::make_unique( + registrar->messenger(), + "dev.fluttercommunity.plus/sensors/accelerometer", + &flutter::StandardMethodCodec::GetInstance()); + accelerometer_sensor_ = + std::make_unique(SensorType::kAccelerometer); + accelerometer_event_channel_->SetStreamHandler( + std::make_unique( + accelerometer_sensor_.get())); + + gyroscope_event_channel_ = std::make_unique( + registrar->messenger(), "dev.fluttercommunity.plus/sensors/gyroscope", + &flutter::StandardMethodCodec::GetInstance()); + gyroscope_sensor_ = std::make_unique(SensorType::kGyroscope); + gyroscope_event_channel_->SetStreamHandler( + std::make_unique(gyroscope_sensor_.get())); + + user_accelerometer_event_channel_ = std::make_unique( + registrar->messenger(), "dev.fluttercommunity.plus/sensors/user_accel", + &flutter::StandardMethodCodec::GetInstance()); + user_accelerometer_sensor_ = + std::make_unique(SensorType::kUserAccel); + user_accelerometer_event_channel_->SetStreamHandler( std::make_unique( - SensorType::kAccelerometer)); + user_accelerometer_sensor_.get())); + + magnetometer_event_channel_ = std::make_unique( + registrar->messenger(), + "dev.fluttercommunity.plus/sensors/magnetometer", + &flutter::StandardMethodCodec::GetInstance()); + magnetometer_sensor_ = + std::make_unique(SensorType::kMagnetometer); + magnetometer_event_channel_->SetStreamHandler( + std::make_unique( + magnetometer_sensor_.get())); + } - std::unique_ptr gyroscope_channel = - std::make_unique( - registrar->messenger(), - "dev.fluttercommunity.plus/sensors/gyroscope", - &flutter::StandardMethodCodec::GetInstance()); - gyroscope_channel->SetStreamHandler( - std::make_unique(SensorType::kGyroscope)); + void HandleMethodCall(const FlMethodCall &method_call, + std::unique_ptr result) { + const std::string &method_name = method_call.method_name(); + + if (method_name == "setAccelerationSamplingPeriod") { + if (!SetInterval(method_call, result.get())) { + return; + } + accelerometer_sensor_->SetInterval(interval_ms_); + } else if (method_name == "setGyroscopeSamplingPeriod") { + if (!SetInterval(method_call, result.get())) { + return; + } + gyroscope_sensor_->SetInterval(interval_ms_); + } else if (method_name == "setUserAccelerometerSamplingPeriod") { + if (!SetInterval(method_call, result.get())) { + return; + } + user_accelerometer_sensor_->SetInterval(interval_ms_); + } else if (method_name == "setMagnetometerSamplingPeriod") { + if (!SetInterval(method_call, result.get())) { + return; + } + magnetometer_sensor_->SetInterval(interval_ms_); + } else { + result->NotImplemented(); + return; + } + result->Success(); + } - std::unique_ptr user_accel_channel = - std::make_unique( - registrar->messenger(), - "dev.fluttercommunity.plus/sensors/user_accel", - &flutter::StandardMethodCodec::GetInstance()); - user_accel_channel->SetStreamHandler( - std::make_unique(SensorType::kUserAccel)); + bool SetInterval(const FlMethodCall &method_call, FlMethodResult *result) { + const auto *sampling_period = std::get_if(method_call.arguments()); + if (!sampling_period) { + result->Error("Invalid argument", "No sampling period provided."); + return false; + } - std::unique_ptr magnetometer_channel = - std::make_unique( - registrar->messenger(), - "dev.fluttercommunity.plus/sensors/magnetometer", - &flutter::StandardMethodCodec::GetInstance()); - magnetometer_channel->SetStreamHandler( - std::make_unique(SensorType::kMagnetometer)); + if (*sampling_period < 10000) { + interval_ms_ = 10; + } else { + interval_ms_ = + *sampling_period / 1000; // sampling_period is in microsecond. + } + + return true; } + + int32_t interval_ms_ = 0; + std::unique_ptr accelerometer_sensor_; + std::unique_ptr gyroscope_sensor_; + std::unique_ptr user_accelerometer_sensor_; + std::unique_ptr magnetometer_sensor_; + + std::unique_ptr accelerometer_event_channel_; + std::unique_ptr gyroscope_event_channel_; + std::unique_ptr user_accelerometer_event_channel_; + std::unique_ptr magnetometer_event_channel_; }; void SensorsPlusPluginRegisterWithRegistrar(