[Sensor] Sync with API7 branch (#1303)
authorMuHong Byun <mh.byun@samsung.com>
Wed, 15 Jan 2020 02:24:09 +0000 (11:24 +0900)
committerHaesik Jun <haesik.jun@samsung.com>
Wed, 15 Jan 2020 02:24:09 +0000 (11:24 +0900)
* [Sensor] Add auto rotation sensor

Signed-off-by: MuHong Byun <mh.byun@samsung.com>
* [Sensor] Addition of initial sensor values (#1153)

* addition of initial sensor values

* method name changed

* addition of ReadData() method in sensor class

* comment updated

* adding abstract method

* change in access modifier

* access modifier changed

Co-authored-by: pvschakradhar <48746416+pvschakradhar@users.noreply.github.com>
32 files changed:
src/Tizen.Sensor/Interop/Interop.Sensor.cs
src/Tizen.Sensor/Tizen.Sensor/EventArgs/AutoRotationSensorDataUpdatedEventArgs.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/Plugins/Accelerometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/AutoRotationSensor.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/Plugins/FaceDownGestureDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/GravitySensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/Gyroscope.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/GyroscopeRotationVectorSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/HumiditySensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/InVehicleActivityDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/LightSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/LinearAccelerationSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/Magnetometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/MagnetometerRotationVectorSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/OrientationSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/Pedometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/PickUpGestureDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/PressureSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/ProximitySensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/RotationVectorSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/RunningActivityDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/SleepMonitor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/StationaryActivityDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/UltravioletSensor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/UncalibratedGyroscope.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/UncalibratedMagnetometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/WalkingActivityDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/WristUpGestureDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Sensor.cs
src/Tizen.Sensor/Tizen.Sensor/SensorEnumerations.cs

index 160c033..daa838d 100644 (file)
@@ -90,6 +90,9 @@ internal static partial class Interop
 
         [DllImport(Libraries.Sensor, EntryPoint = "sensor_listener_set_attribute_int")]
         internal static extern int SetAttribute(IntPtr listenerHandle, SensorAttribute sensorAttribute, int option);
+
+        [DllImport(Libraries.Sensor, EntryPoint = "sensor_listener_read_data")]
+        internal static extern int ReadData(IntPtr listenerHandle, out SensorEventStruct data);
     }
 
     internal static class SensorManager
diff --git a/src/Tizen.Sensor/Tizen.Sensor/EventArgs/AutoRotationSensorDataUpdatedEventArgs.cs b/src/Tizen.Sensor/Tizen.Sensor/EventArgs/AutoRotationSensorDataUpdatedEventArgs.cs
new file mode 100644 (file)
index 0000000..bd4cc10
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The AutoRotationSensor changed event arguments class is used for storing the data returned by the auto rotation sensor.
+    /// </summary>
+    /// <since_tizen> 7 </since_tizen>
+    public class AutoRotationSensorDataUpdatedEventArgs : EventArgs
+    {
+        internal AutoRotationSensorDataUpdatedEventArgs(float[] values, SensorDataAccuracy accuracy)
+        {
+            Rotation = (AutoRotationState)values[0];
+            Accuracy = accuracy;
+        }
+
+        /// <summary>
+        /// Gets the value of the rotation state.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <value> The rotation state. </value>
+        public AutoRotationState Rotation { get; private set; } = AutoRotationState.Degree_0;
+
+        /// <summary>
+        /// Gets the accuracy of the auto rotation data.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <value> Accuracy </value>
+        public SensorDataAccuracy Accuracy { get; private set; }
+    }
+}
\ No newline at end of file
index b8f7e89..9f7efc9 100755 (executable)
@@ -117,6 +117,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read accelerometer data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading accelerometer data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading accelerometer data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
diff --git a/src/Tizen.Sensor/Tizen.Sensor/Plugins/AutoRotationSensor.cs b/src/Tizen.Sensor/Tizen.Sensor/Plugins/AutoRotationSensor.cs
new file mode 100644 (file)
index 0000000..d435bee
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The AutoRotationSensor class is used for registering callbacks for the auto rotation sensor and getting the auto rotation data.
+    /// </summary>
+    /// <since_tizen> 7 </since_tizen>
+    public sealed class AutoRotationSensor : Sensor
+    {
+        private static string AccelerometerKey = "http://tizen.org/feature/sensor.accelerometer";
+
+        private event EventHandler<SensorAccuracyChangedEventArgs> _accuracyChanged;
+
+        /// <summary>
+        /// Gets the value of the rotation state.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <value> The rotation state. </value>
+        public AutoRotationState Rotation { get; private set; } = AutoRotationState.Degree_0;
+
+
+        /// <summary>
+        /// Gets the accuracy of the auto rotation data.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <value> Accuracy </value>
+        public SensorDataAccuracy Accuracy { get; private set; } = SensorDataAccuracy.Undefined;
+
+        /// <summary>
+        /// Returns true or false based on whether the auto rotation sensor is supported by the device.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <value><c>true</c> if supported; otherwise <c>false</c>.</value>
+        public static bool IsSupported
+        {
+            get
+            {
+                Log.Info(Globals.LogTag, "Checking if the AutoRotationSensor is supported");
+                return CheckIfSupported(SensorType.AutoRotation, AccelerometerKey);
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Tizen.Sensor.AutoRotationSensor"/> class.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        /// <feature>http://tizen.org/feature/sensor.accelerometer</feature>
+        /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
+        /// <exception cref="NotSupportedException">Thrown when the sensor is not supported.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
+        /// <param name='index'>
+        /// Index. Default value for this is 0. Index refers to a particular auto rotation sensor in case of multiple sensors.
+        /// </param>
+        public AutoRotationSensor(uint index = 0) : base(index)
+        {
+            Log.Info(Globals.LogTag, "Creating AutoRotationSensor object");
+        }
+
+        internal override SensorType GetSensorType()
+        {
+            return SensorType.AutoRotation;
+        }
+
+        /// <summary>
+        /// An event handler for storing the callback functions for the event corresponding to the change in the auto rotation sensor data.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+
+        public event EventHandler<AutoRotationSensorDataUpdatedEventArgs> DataUpdated;
+
+        /// <summary>
+        /// An event handler for accuracy changed events.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        public event EventHandler<SensorAccuracyChangedEventArgs> AccuracyChanged
+        {
+            add
+            {
+                if (_accuracyChanged == null)
+                {
+                    AccuracyListenStart();
+                }
+                _accuracyChanged += value;
+            }
+            remove
+            {
+                _accuracyChanged -= value;
+                if (_accuracyChanged == null)
+                {
+                    AccuracyListenStop();
+                }
+            }
+        }
+
+        private static int GetCount()
+        {
+            IntPtr list;
+            int count;
+            int error = Interop.SensorManager.GetSensorList(SensorType.AutoRotation, out list, out count);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error getting sensor list for auto rotation");
+                count = 0;
+            }
+            else
+                Interop.Libc.Free(list);
+            return count;
+        }
+
+        /// <summary>
+        /// Read auto rotation data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading auto rotation data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading auto rotation data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            if (sensorData.values[0] == 0) {
+                Rotation = AutoRotationState.Degree_0;
+            } else {
+                Rotation = (AutoRotationState)sensorData.values[0];
+            }
+            Accuracy = sensorData.accuracy;
+        }
+
+        private static Interop.SensorListener.SensorEventCallback _callback;
+
+        internal override void EventListenStart()
+        {
+            _callback = (IntPtr sensorHandle, IntPtr eventPtr, IntPtr data) => {
+                Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(eventPtr);
+
+                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                if (sensorData.values[0] == 0) {
+                    Rotation = AutoRotationState.Degree_0;
+                } else {
+                    Rotation = (AutoRotationState)sensorData.values[0];
+                }
+                Accuracy = sensorData.accuracy;
+
+                DataUpdated?.Invoke(this, new AutoRotationSensorDataUpdatedEventArgs(sensorData.values, sensorData.accuracy));
+            };
+
+            int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, _callback, IntPtr.Zero);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error setting event callback for auto rotation sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for auto rotation");
+            }
+        }
+
+        internal override void EventListenStop()
+        {
+            int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting event callback for auto rotation sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for auto rotation");
+            }
+        }
+
+        private static Interop.SensorListener.SensorAccuracyCallback _accuracyCallback;
+
+        private void AccuracyListenStart()
+        {
+            _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
+                TimeSpan = new TimeSpan((Int64)timestamp);
+                Accuracy = accuracy;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+            };
+
+            int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error setting accuracy event callback for auto rotation sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for auto rotation");
+            }
+        }
+
+        private void AccuracyListenStop()
+        {
+            int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for auto rotation sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for auto rotation");
+            }
+        }
+    }
+}
index 2d6a301..70346b8 100755 (executable)
@@ -98,6 +98,23 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read face down gesture detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading face down gesture detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading face down gesture detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            FaceDown = (DetectorState)sensorData.values[0];
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the face down gesture detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index f8b1d40..e71a2a7 100755 (executable)
@@ -143,6 +143,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read gravity sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading gravity sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading gravity sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index a1a859d..0015d26 100755 (executable)
@@ -118,6 +118,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read gyroscope data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading gyroscope data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading gyroscope data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index ae0ad4e..699eaec 100755 (executable)
@@ -132,6 +132,27 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read gyroscope rotation vector sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading gyroscope rotation vector sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading gyroscope rotation vector sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+            W = sensorData.values[3];
+            Accuracy = sensorData.accuracy;
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 010cd52..d2f7a08 100755 (executable)
@@ -106,6 +106,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read heart rate monitor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading heart rate monitor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading heart rate monitor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            HeartRate = (int)sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 387138b..dfb1d2c 100755 (executable)
@@ -104,6 +104,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read humidity sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading humidity sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading humidity sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Humidity = sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 233b079..3b2958a 100755 (executable)
@@ -94,6 +94,24 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read in-vehicle activity detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading in-vehicle activity detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading in-vehicle activity detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            InVehicle = (DetectorState)sensorData.values[0];
+            ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the in-vehicle activity detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index deff1c6..af68a5b 100755 (executable)
@@ -104,6 +104,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read light sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading light sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading light sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Level = sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 46bd57a..4d80669 100755 (executable)
@@ -143,6 +143,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read linear acceleration sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading linear acceleration sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading linear acceleration sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 0b13b71..ac06bc2 100755 (executable)
@@ -143,6 +143,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read magnetometer data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading magnetometer data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading magnetometer data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 288af33..fa3480b 100755 (executable)
@@ -169,6 +169,27 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read magnetometer rotation vector sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading magnetometer rotation vector sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading magnetometer rotation vector sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+            W = sensorData.values[3];
+            Accuracy = sensorData.accuracy;
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 866b29f..674be0c 100755 (executable)
@@ -143,6 +143,25 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read orientation sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading orientation sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading orientation sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Azimuth = sensorData.values[0];
+            Pitch = sensorData.values[1];
+            Roll = sensorData.values[2];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 7408d87..a175477 100755 (executable)
@@ -156,6 +156,29 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read pedometer sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct pedoSensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out pedoSensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading pedometer sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading pedometer sensor data failed");
+            }
+
+            StepCount = (uint)pedoSensorData.values[0];
+            WalkStepCount = (uint)pedoSensorData.values[1];
+            RunStepCount = (uint)pedoSensorData.values[2];
+            MovingDistance = pedoSensorData.values[3];
+            CalorieBurned = pedoSensorData.values[4];
+            LastSpeed = pedoSensorData.values[5];
+            LastSteppingFrequency = pedoSensorData.values[6];
+            LastStepStatus = (PedometerState)pedoSensorData.values[7];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 1f54973..fc9ccd6 100755 (executable)
@@ -110,6 +110,23 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read pick up gesture detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading pick up gesture detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading pick up gesture detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            PickUp = (DetectorState)sensorData.values[0];
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the pick up gesture detector data.        
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index 03a8eff..9d5aaa2 100755 (executable)
@@ -105,6 +105,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read pressure sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading pressure sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading pressure sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Pressure = sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index ddcf132..dec5a49 100755 (executable)
@@ -104,6 +104,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read proximity sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading proximity sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading proximity sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Proximity = (ProximitySensorState)sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 724e4c2..8de60c7 100755 (executable)
@@ -157,6 +157,27 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read rotation vector sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading rotation vector sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading rotation vector sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+            W = sensorData.values[3];
+            Accuracy = sensorData.accuracy;
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index c8cb810..db8c7e7 100755 (executable)
@@ -94,6 +94,24 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read running activity detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading running activity detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading running activity detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Running = (DetectorState)sensorData.values[0];
+            ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in running the activity detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index 65d06d6..edb7ca7 100755 (executable)
@@ -108,6 +108,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read sleep monitor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading sleep monitor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading sleep monitor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            SleepState = (SleepMonitorState)sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 98cf01a..c8cfd3a 100755 (executable)
@@ -94,6 +94,24 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read stationary activity detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading stationary activity detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading stationary activity detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Stationary = (DetectorState)sensorData.values[0];
+            ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the stationary activity detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index 2518e70..ba6df4e 100755 (executable)
@@ -105,6 +105,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read temperature sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading temperature sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading temperature sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Temperature = sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index ec80d52..ec900da 100755 (executable)
@@ -105,6 +105,23 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read ultraviolet sensor data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading ultraviolet sensor data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading ultraviolet sensor data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            UltravioletIndex = sensorData.values[0];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index ff1e28c..3c1e20e 100755 (executable)
@@ -139,6 +139,28 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read uncalibrated gyroscope data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading uncalibrated gyroscope data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading uncalibrated gyroscope data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+            BiasX = sensorData.values[3];
+            BiasY = sensorData.values[4];
+            BiasZ = sensorData.values[5];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 948e863..f87b09e 100755 (executable)
@@ -164,6 +164,28 @@ namespace Tizen.Sensor
             return count;
         }
 
+        /// <summary>
+        /// Read uncalibrated magnetometer data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading uncalibrated magnetometer data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading uncalibrated magnetometer data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            X = sensorData.values[0];
+            Y = sensorData.values[1];
+            Z = sensorData.values[2];
+            BiasX = sensorData.values[3];
+            BiasY = sensorData.values[4];
+            BiasZ = sensorData.values[5];
+        }
+
         private static Interop.SensorListener.SensorEventCallback _callback;
 
         internal override void EventListenStart()
index 0a28317..8b9d104 100755 (executable)
@@ -94,6 +94,24 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read walking activity detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading walking activity detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading walking activity detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Walking = (DetectorState)sensorData.values[0];
+            ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the walking activity gesture detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index 93ab50d..27f488a 100755 (executable)
@@ -98,6 +98,23 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
+        /// Read wrist up gesture detector data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            Interop.SensorEventStruct sensorData;
+            int error = Interop.SensorListener.ReadData(ListenerHandle, out sensorData);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading wrist up gesture detector data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading wrist up gesture detector data failed");
+            }
+
+            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            WristUp = (DetectorState)sensorData.values[0];
+        }
+
+        /// <summary>
         /// An event handler for storing the callback functions for the event corresponding to the change in the wrist up gesture detector data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index 0910188..3ebcfbb 100755 (executable)
@@ -47,6 +47,10 @@ namespace Tizen.Sensor
         private IntPtr _sensorHandle = IntPtr.Zero;
         private IntPtr _listenerHandle = IntPtr.Zero;
 
+        /// <summary>
+        /// Read a sensor data synchronously.
+        /// </summary>
+        internal abstract void ReadData();
         internal abstract SensorType GetSensorType();
         internal abstract void EventListenStart();
         internal abstract void EventListenStop();
@@ -326,6 +330,7 @@ namespace Tizen.Sensor
                     Log.Error(Globals.LogTag, "Error starting sensor");
                     throw SensorErrorFactory.CheckAndThrowException(error, "Unable to Start Sensor Listener");
                 }
+                ReadData();
                 EventListenStart();
                 _isSensing = true;
                 Log.Info(Globals.LogTag, "Sensor started");
index 37e0b24..fe7020a 100755 (executable)
@@ -110,6 +110,10 @@ namespace Tizen.Sensor
         /// <summary>
         /// Stationary activity detector.
         /// </summary>
+        /// Auto Rotation sensor.
+        /// </summary>
+        AutoRotation = 0x901,
+        /// <summary>
         StationaryActivityDetector = 0x1A00,
         /// <summary>
         /// Walking activity detector.
@@ -319,4 +323,35 @@ namespace Tizen.Sensor
         /// <since_tizen> 3 </since_tizen>
         Detected = 1
     }
+    
+    /// <summary>
+    /// The auto rotation state.
+    /// </summary>
+    /// <since_tizen> 7 </since_tizen>
+    public enum AutoRotationState
+    {
+        /// <summary>
+        /// Degree_0 sate.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        Degree_0 = 1,
+
+        /// <summary>
+        /// Degree_90 state.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        Degree_90 = 2,
+
+        /// <summary>
+        /// Degree_180 state.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        Degree_180 = 3,
+
+        /// <summary>
+        /// Degree_270 state.
+        /// </summary>
+        /// <since_tizen> 7 </since_tizen>
+        Degree_270 = 4
+    }
 }