[Sensor] Add new batched type sensor (#1522)
authorMuHong Byun <mh.byun@samsung.com>
Wed, 22 Apr 2020 02:39:19 +0000 (11:39 +0900)
committerGitHub <noreply@github.com>
Wed, 22 Apr 2020 02:39:19 +0000 (11:39 +0900)
* HeartRateMonitorBatch, HeartRateMonitorLEDGreenBatch

Signed-off-by: MuHong Byun <mh.byun@samsung.com>
40 files changed:
src/Tizen.Sensor/Interop/Interop.Sensor.cs
src/Tizen.Sensor/Tizen.Sensor/BatchData/BatchData.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorBatchData.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorLEDGreenBatchData.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/BatchSensor.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorBatchDataUpdatedEventArgs.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/Accelerometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/AutoRotationSensor.cs
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/HeartRateMonitorBatch.cs [new file with mode: 0644]
src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitorLEDGreenBatch.cs [new file with mode: 0644]
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 b4d5862..b03adf0 100644 (file)
@@ -106,6 +106,9 @@ internal static partial class Interop
 
         [DllImport(Libraries.Sensor, EntryPoint = "sensor_listener_read_data")]
         internal static extern int ReadData(IntPtr listenerHandle, out SensorEventStruct data);
+
+        [DllImport(Libraries.Sensor, EntryPoint = "sensor_listener_read_data_list")]
+        internal static extern int ReadDataList(IntPtr listenerHandle, out IntPtr eventsData, out uint events_count);
     }
 
     internal static class SensorManager
diff --git a/src/Tizen.Sensor/Tizen.Sensor/BatchData/BatchData.cs b/src/Tizen.Sensor/Tizen.Sensor/BatchData/BatchData.cs
new file mode 100644 (file)
index 0000000..d66e614
--- /dev/null
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The BatchData class is used for storing value of particular batch type sensor.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public abstract class BatchData
+    {
+        /// <summary>
+        /// Initializes a new instance of the BatchData class.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <param name="timestamp">Timestamp of sensor event.</param>
+        /// <param name="accuracy">Sensor accuracy of sensor event.</param>
+        public BatchData(ulong timestamp, SensorDataAccuracy accuracy)
+        {
+            Timestamp = timestamp;
+            Accuracy = accuracy;
+        }
+
+        /// <summary>
+        /// Timestamp as ticks that data was created
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Timestamp </value>
+        public ulong Timestamp
+        {
+            get; private set;
+        }
+
+        /// <summary>
+        /// Accuracy of the HeartRateMonitorBatch data.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Accuracy </value>
+        public SensorDataAccuracy Accuracy { get; private set; } = SensorDataAccuracy.Undefined;
+    }
+}
diff --git a/src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorBatchData.cs b/src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorBatchData.cs
new file mode 100644 (file)
index 0000000..02f11e2
--- /dev/null
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorBatchData class is used for storing value of HeartRateMonitorBatch sensor.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class HeartRateMonitorBatchData : BatchData
+    {
+        /// <summary>
+        /// Initializes a new instance of the HeartRateMonitorBatchData class.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <param name="timestamp">Timestamp of HeartRateMonitorBatch sensor event.</param>
+        /// <param name="accuracy">Sensor accuracy of HeartRateMonitorBatch sensor event.</param>
+        /// <param name="state">Value indicating the status of the HeartRateMonitorBatch sensor.</param>
+        /// <param name="heartRate">heartRate of HeartRateMonitorBatch sensor event.</param>
+        /// <param name="rri">rri of HeartRateMonitorBatch sensor event.</param>
+        public HeartRateMonitorBatchData(ulong timestamp, SensorDataAccuracy accuracy, HeartRateMonitorBatchState state, int heartRate, int rri) : base(timestamp, accuracy)
+        {
+            State = state;
+            HeartRate = heartRate;
+            RRInterval = rri;
+        }
+
+        /// <summary>
+        /// Gets the value of the HeartRateMonitorBatch state.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> State </value>
+        public HeartRateMonitorBatchState State { get; }
+
+        /// <summary>
+        /// Heart rate in beats per minute
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> HeartRate </value>
+        public int HeartRate { get; }
+
+        /// <summary>
+        /// Gets the value R wave-to-R wave interval(RRI) from ECG sensor(Unit is millisecond).
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> RRInterval </value>
+        public int RRInterval { get; }
+
+    }
+}
diff --git a/src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorLEDGreenBatchData.cs b/src/Tizen.Sensor/Tizen.Sensor/BatchData/HeartRateMonitorLEDGreenBatchData.cs
new file mode 100644 (file)
index 0000000..3efa1cf
--- /dev/null
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorLEDGreenBatchData class is used for storing value of HeartRateMonitorLEDGreenBatch sensor.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class HeartRateMonitorLEDGreenBatchData : BatchData
+    {
+        /// <summary>
+        /// Initializes a new instance of the HeartRateMonitorLEDGreenBatchData class.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <param name="timestamp">Timestamp of sensor event.</param>
+        /// <param name="accuracy">Sensor accuracy of sensor event.</param>
+        /// <param name="green">Green LED ADC value of sensor event</param>
+        /// <param name="accelerationX">X axis's value of gravitational acceleration of sensor event.</param>
+        /// <param name="accelerationY">Y axis's value of gravitational acceleration of sensor event.</param>
+        /// <param name="accelerationZ">Z axis's value of gravitational acceleration of sensor event.</param>
+        /// <param name="index">Sequential index of sensor event.</param>
+        public HeartRateMonitorLEDGreenBatchData(ulong timestamp, SensorDataAccuracy accuracy, uint green, int accelerationX, int accelerationY, int accelerationZ, uint index) : base(timestamp, accuracy)
+        {
+            Green = green;
+            AccelerationX = accelerationX;
+            AccelerationY = accelerationY;
+            AccelerationY = accelerationZ;
+            Index = index;
+        }
+
+        /// <summary>
+        /// Gets the value of the Green LED ADC Value. (0 ~ 4194304)
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Green </value>
+        public uint Green { get; }
+
+        /// <summary>
+        /// Gets the X axis's uncalibrated value of the gravitational acceleration. (-4096 ~ 4096)
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> AccelerationX </value>
+        public int AccelerationX { get; }
+
+        /// <summary>
+        /// Gets the Y axis's uncalibrated value of the gravitational acceleration. (-4096 ~ 4096)
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> AccelerationY </value>
+        public int AccelerationY { get; }
+
+
+        /// <summary>
+        /// Gets the Z axis's uncalibrated value of the gravitational acceleration. (-4096 ~ 4096)
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> AccelerationZ </value>
+        public int AccelerationZ { get; }
+
+
+        /// <summary>
+        /// Gets the index value between 0 and 299 used for deburring purposes
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Index </value>
+        public uint Index { get; }
+    }
+}
diff --git a/src/Tizen.Sensor/Tizen.Sensor/BatchSensor.cs b/src/Tizen.Sensor/Tizen.Sensor/BatchSensor.cs
new file mode 100644 (file)
index 0000000..8e86d7a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2020 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.Collections.Generic;
+
+namespace Tizen.Sensor
+{
+    public abstract class BatchSensor<TData> : Sensor where TData : Tizen.Sensor.BatchData
+    {
+        public BatchSensor(uint index = 0) : base(index) { }
+        public IReadOnlyList<TData> Data { get; protected set; }
+
+        /// <summary>
+        /// Convert general batch data to specific batch data
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <returns> List of converted specific batch data </returns>
+        protected abstract IReadOnlyList<TData> ConvertBatchData();
+
+        /// <summary>
+        /// Update the internal batch data using the latest events
+        /// </summary>
+        /// <param name="eventsPtr">
+        /// General batch data's raw pointer
+        /// </param>
+        /// <param name="eventsCount">
+        /// Number of general batch events
+        /// </param>
+        protected void UpdateBatchData(IntPtr eventsPtr, uint eventsCount)
+        {
+            updateBatchEvents(eventsPtr, eventsCount);
+            Data = ConvertBatchData();
+        }
+    }
+}
diff --git a/src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorBatchDataUpdatedEventArgs.cs b/src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorBatchDataUpdatedEventArgs.cs
new file mode 100644 (file)
index 0000000..939a150
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2020 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.Collections.Generic;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorBatch changed event arguments class is used for storing the data returned by the HeartRateMonitorBatch sensor.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class HeartRateMonitorBatchDataUpdatedEventArgs : EventArgs
+    {
+        internal HeartRateMonitorBatchDataUpdatedEventArgs(IReadOnlyList<HeartRateMonitorBatchData> batchedData)
+        {
+            Data = batchedData;
+        }
+        /// <summary>
+        /// Gets the series value of the HeartRateMonitorBatch.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> HeartRateMonitorBatchData. </value>
+        public IReadOnlyList<HeartRateMonitorBatchData> Data { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs.cs b/src/Tizen.Sensor/Tizen.Sensor/EventArgs/HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs.cs
new file mode 100644 (file)
index 0000000..15cab72
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2020 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.Collections.Generic;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorLEDGreenBatch changed event arguments class is used for storing the data returned by the HeartRateMonitorLEDGreenBatch sensor
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs : EventArgs
+    {
+        internal HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs(IReadOnlyList<HeartRateMonitorLEDGreenBatchData> batchedDataList)
+        {
+            Data = batchedDataList;
+        }
+        /// <summary>
+        /// Gets the series value of the HeartRateMonitorLEDGreenBatch.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> HeartRateMonitorLEDGreenBatchData. </value>
+        public IReadOnlyList<HeartRateMonitorLEDGreenBatchData> Data { get; }
+    }
+}
\ No newline at end of file
index a6a401a..e4061ba 100755 (executable)
@@ -26,7 +26,13 @@ namespace Tizen.Sensor
     {
         internal SensorAccuracyChangedEventArgs(TimeSpan timespan, SensorDataAccuracy accuracy)
         {
-            TimeSpan = timespan;
+            Accuracy = accuracy;
+            Timestamp = (ulong)timespan.Ticks;
+        }
+
+        internal SensorAccuracyChangedEventArgs(ulong timestamp, SensorDataAccuracy accuracy)
+        {
+            Timestamp = timestamp;
             Accuracy = accuracy;
         }
 
@@ -35,7 +41,20 @@ namespace Tizen.Sensor
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value> The time span. </value>
-        public TimeSpan TimeSpan { get; private set; }
+        public TimeSpan TimeSpan
+        {
+            get
+            {
+                return new TimeSpan((Int64)Timestamp);
+            }
+        }
+
+        /// <summary>
+        /// Gets the time stamp.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Timestamp </value>
+        public ulong Timestamp { get; private set; }
 
         /// <summary>
         /// Gets the accuracy.
index d6c053a..d60f83c 100755 (executable)
@@ -130,7 +130,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading accelerometer data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -143,7 +143,7 @@ namespace Tizen.Sensor
             _callback = (IntPtr sensorHandle, IntPtr eventPtr, uint events_count, IntPtr data) => {
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
index 9de5051..c2e2221 100644 (file)
@@ -138,7 +138,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading auto rotation data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             if (sensorData.values[0] == 0) {
                 Rotation = AutoRotationState.Degree_0;
             } else {
@@ -155,7 +155,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 if (sensorData.values[0] == 0) {
                     Rotation = AutoRotationState.Degree_0;
                 } else {
@@ -189,9 +189,9 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
+                Timestamp = timestamp;
                 Accuracy = accuracy;
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index c21440f..8cdf940 100755 (executable)
@@ -110,7 +110,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading face down gesture detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             FaceDown = (DetectorState)sensorData.values[0];
         }
 
@@ -128,7 +128,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 FaceDown = (DetectorState) sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new FaceDownGestureDetectorDataUpdatedEventArgs(sensorData.values[0]));
index 3d7fbf6..f3e4f23 100755 (executable)
@@ -156,7 +156,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading gravity sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -170,7 +170,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -201,8 +201,8 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                Timestamp = timestamp;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 167d478..4730feb 100755 (executable)
@@ -131,7 +131,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading gyroscope data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -145,7 +145,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
index 4412c13..21738e2 100755 (executable)
@@ -145,7 +145,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading gyroscope rotation vector sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -161,7 +161,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
index 7170ce0..b26ea9c 100755 (executable)
@@ -119,7 +119,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading heart rate monitor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             HeartRate = (int)sensorData.values[0];
         }
 
@@ -127,11 +127,12 @@ namespace Tizen.Sensor
 
         internal override void EventListenStart()
         {
-            _callback = (IntPtr sensorHandle, IntPtr eventPtr, uint events_count, IntPtr data) => {
+            _callback = (IntPtr sensorHandle, IntPtr eventPtr, uint events_count, IntPtr data) =>
+            {
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 HeartRate = (int)sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new HeartRateMonitorDataUpdatedEventArgs((int)sensorData.values[0]));
diff --git a/src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitorBatch.cs b/src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitorBatch.cs
new file mode 100644 (file)
index 0000000..8568874
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2020 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.Collections.Generic;
+using System.ComponentModel;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorBatch class is used for registering callbacks for the heart rate monitor batch and getting the heart rate batch data.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public sealed class HeartRateMonitorBatch : BatchSensor<HeartRateMonitorBatchData>
+    {
+        private static string HRMBatchKey = "http://tizen.org/feature/sensor.heart_rate_monitor.batch";
+
+        private event EventHandler<SensorAccuracyChangedEventArgs> _accuracyChanged;
+
+        protected override IReadOnlyList<HeartRateMonitorBatchData> ConvertBatchData()
+        {
+            List<HeartRateMonitorBatchData> list = new List<HeartRateMonitorBatchData>();
+            Interop.SensorEventStruct sensorData;
+            for (int i = 0; i < BatchedEvents.Count; i++)
+            {
+                sensorData = BatchedEvents[i];
+                list.Add(new HeartRateMonitorBatchData(sensorData.timestamp, sensorData.accuracy, (HeartRateMonitorBatchState)sensorData.values[0], (int)sensorData.values[1], (int)sensorData.values[2]));
+            }
+            return list.AsReadOnly();
+        }
+
+        /// <summary>
+        /// Gets the accuracy of the HeartRateMonitorBatch data.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Accuracy </value>
+        public SensorDataAccuracy Accuracy { get; private set; } = SensorDataAccuracy.Undefined;
+
+        /// <summary>
+        /// Returns true or false based on whether the HeartRateMonitorBatch sensor is supported by the device.
+        /// </summary>
+        /// <since_tizen> 8 </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 HeartRateMonitorBatch is supported");
+                return CheckIfSupported(SensorType.HRMBatch, HRMBatchKey);
+            }
+        }
+
+        /// <summary>
+        /// Returns the number of HeartRateMonitorBatch sensors available on the device.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> The count of HeartRateMonitorBatch sensors. </value>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
+        public static int Count
+        {
+            get
+            {
+                Log.Info(Globals.LogTag, "Getting the count of accelerometer sensors");
+                return GetCount();
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Tizen.Sensor.HeartRateMonitorBatch"/> class.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <privilege>http://tizen.org/privilege/healthinfo</privilege>
+        /// <privlevel>public</privlevel>
+        /// <feature>http://tizen.org/feature/sensor.heart_rate_monitor.batch</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="UnauthorizedAccessException">Thrown when the application has no privilege to use the sensor.</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 HeartRateMonitorBatch in case of multiple sensors.
+        /// </param>
+        public HeartRateMonitorBatch(uint index = 0) : base(index)
+        {
+            Log.Info(Globals.LogTag, "Creating HeartRateMonitorBatch object");
+        }
+
+        internal override SensorType GetSensorType()
+        {
+            return SensorType.HRMBatch;
+        }
+
+        /// <summary>
+        /// An event handler for storing the callback functions for the event corresponding to the change in the HeartRateMonitorBatch data.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+
+        public event EventHandler<HeartRateMonitorBatchDataUpdatedEventArgs> DataUpdated;
+
+        /// <summary>
+        /// An event handler for accuracy changed events.
+        /// </summary>
+        /// <since_tizen> 8 </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.HRMBatch, out list, out count);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error getting sensor list for HeartRateMonitorBatch");
+                count = 0;
+            }
+            else
+                Interop.Libc.Free(list);
+            return count;
+        }
+
+        /// <summary>
+        /// Read HeartRateMonitorBatch data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            int error = Interop.SensorListener.ReadDataList(ListenerHandle, out IntPtr eventsPtr, out uint events_count);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading HeartRateMonitorBatch data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading HeartRateMonitorBatch data failed");
+            }
+            UpdateBatchData(eventsPtr, events_count);
+            Interop.SensorEventStruct sensorData = latestEvent();
+            Timestamp = (ulong)DateTimeOffset.Now.ToUnixTimeMilliseconds();
+            Accuracy = sensorData.accuracy;
+            Interop.Libc.Free(eventsPtr);
+        }
+
+        private static Interop.SensorListener.SensorEventsCallback _callback;
+
+        internal override void EventListenStart()
+        {
+            _callback = (IntPtr sensorHandle, IntPtr eventsPtr, uint events_count, IntPtr data) =>
+            {
+                UpdateBatchData(eventsPtr, events_count);
+                Interop.SensorEventStruct sensorData = latestEvent();
+                Timestamp = (ulong)DateTimeOffset.Now.ToUnixTimeMilliseconds();
+                Accuracy = sensorData.accuracy;
+                DataUpdated?.Invoke(this, new HeartRateMonitorBatchDataUpdatedEventArgs((IReadOnlyList<HeartRateMonitorBatchData>)Data));
+            };
+            int error = Interop.SensorListener.SetEventsCallback(ListenerHandle, _callback, IntPtr.Zero);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error setting event callback for HeartRateMonitorBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for HeartRateMonitorBatch");
+            }
+        }
+
+        internal override void EventListenStop()
+        {
+            int error = Interop.SensorListener.UnsetEventsCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting event callback for HeartRateMonitorBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for HeartRateMonitorBatch");
+            }
+        }
+
+        private static Interop.SensorListener.SensorAccuracyCallback _accuracyCallback;
+
+        private void AccuracyListenStart()
+        {
+            _accuracyCallback = (IntPtr sensorHandle, ulong timestamp, SensorDataAccuracy accuracy, IntPtr data) =>
+            {
+                Timestamp = timestamp;
+                Accuracy = accuracy;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(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 HeartRateMonitorBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for HeartRateMonitorBatch");
+            }
+        }
+
+        private void AccuracyListenStop()
+        {
+            int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for HeartRateMonitorBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for auto rotation");
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitorLEDGreenBatch.cs b/src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitorLEDGreenBatch.cs
new file mode 100644 (file)
index 0000000..f5a3a28
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2020 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.Collections.Generic;
+using System.ComponentModel;
+
+namespace Tizen.Sensor
+{
+    /// <summary>
+    /// The HeartRateMonitorLEDGreenBatch class is used for registering callbacks for the HRMLEDGreen batch and getting the HRMLEDGreen batch data.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public sealed class HeartRateMonitorLEDGreenBatch : BatchSensor<HeartRateMonitorLEDGreenBatchData>
+    {
+        private static string HRMLEDGreenBatchKey = "http://tizen.org/feature/sensor.heart_rate_monitor.led_green.batch";
+
+        private event EventHandler<SensorAccuracyChangedEventArgs> _accuracyChanged;
+
+        protected override IReadOnlyList<HeartRateMonitorLEDGreenBatchData> ConvertBatchData()
+        {
+            List<HeartRateMonitorLEDGreenBatchData> list = new List<HeartRateMonitorLEDGreenBatchData>();
+            Interop.SensorEventStruct sensorData;
+            for (int i = 0; i < BatchedEvents.Count; i++)
+            {
+                sensorData = BatchedEvents[i];
+                list.Add(new HeartRateMonitorLEDGreenBatchData(sensorData.timestamp, sensorData.accuracy, (uint)sensorData.values[0], (int)sensorData.values[1], (int)sensorData.values[2], (int)sensorData.values[3], (uint)sensorData.values[4]));
+            }
+            return list.AsReadOnly(); ;
+        }
+
+        /// <summary>
+        /// Gets the accuracy of the auto HeartRateMonitorLEDGreenBatch data.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Accuracy </value>
+        public SensorDataAccuracy Accuracy { get; private set; } = SensorDataAccuracy.Undefined;
+
+        /// <summary>
+        /// Returns true or false based on whether the HeartRateMonitorLEDGreenBatch sensor is supported by the device.
+        /// </summary>
+        /// <since_tizen> 8 </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 HeartRateMonitorLEDGreenBatch is supported");
+                return CheckIfSupported(SensorType.HRMLEDGreenBatch, HRMLEDGreenBatchKey);
+            }
+        }
+
+        /// <summary>
+        /// Returns the number of HeartRateMonitorLEDGreenBatch sensors available on the device.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> The count of HeartRateMonitorLEDGreenBatch sensors. </value>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
+        public static int Count
+        {
+            get
+            {
+                Log.Info(Globals.LogTag, "Getting the count of accelerometer sensors");
+                return GetCount();
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Tizen.Sensor.HeartRateMonitorLEDGreenBatch"/> class.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <privilege>http://tizen.org/privilege/healthinfo</privilege>
+        /// <privlevel>public</privlevel>
+        /// <feature>http://tizen.org/feature/sensor.heart_rate_monitor.led_green.batch</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="UnauthorizedAccessException">Thrown when the application has no privilege to use the sensor.</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 HeartRateMonitorLEDGreenBatch sensor in case of multiple sensors.
+        /// </param>
+        public HeartRateMonitorLEDGreenBatch(uint index = 0) : base(index)
+        {
+            Log.Info(Globals.LogTag, "Creating HeartRateMonitorLEDGreenBatch object");
+        }
+
+        internal override SensorType GetSensorType()
+        {
+            return SensorType.HRMLEDGreenBatch;
+        }
+
+        /// <summary>
+        /// An event handler for storing the callback functions for the event corresponding to the change in the HeartRateMonitorLEDGreenBatch sensor data.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+
+        public event EventHandler<HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs> DataUpdated;
+
+        /// <summary>
+        /// An event handler for accuracy changed events.
+        /// </summary>
+        /// <since_tizen> 8 </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.HRMLEDGreenBatch, out list, out count);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error getting sensor list for HeartRateMonitorLEDGreenBatch");
+                count = 0;
+            }
+            else
+                Interop.Libc.Free(list);
+            return count;
+        }
+
+        /// <summary>
+        /// Read HeartRateMonitorLEDGreenBatch data synchronously.
+        /// </summary>
+        internal override void ReadData()
+        {
+            int error = Interop.SensorListener.ReadDataList(ListenerHandle, out IntPtr eventsPtr, out uint events_count);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error reading HeartRateMonitorLEDGreenBatch data");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Reading HeartRateMonitorBatch data failed");
+            }
+            UpdateBatchData(eventsPtr, events_count);
+            Interop.SensorEventStruct sensorData = latestEvent();
+            Timestamp = sensorData.timestamp;
+            Accuracy = sensorData.accuracy;
+            Interop.Libc.Free(eventsPtr);
+        }
+
+        private static Interop.SensorListener.SensorEventsCallback _callback;
+
+        internal override void EventListenStart()
+        {
+            _callback = (IntPtr sensorHandle, IntPtr eventsPtr, uint events_count, IntPtr data) =>
+            {
+                UpdateBatchData(eventsPtr, events_count);
+                Interop.SensorEventStruct sensorData = latestEvent();
+                Timestamp = (ulong)DateTimeOffset.Now.ToUnixTimeMilliseconds();
+                Accuracy = sensorData.accuracy;
+                DataUpdated?.Invoke(this, new HeartRateMonitorLEDGreenBatchDataUpdatedEventArgs((IReadOnlyList<HeartRateMonitorLEDGreenBatchData>)Data));
+
+            };
+
+            int error = Interop.SensorListener.SetEventsCallback(ListenerHandle, _callback, IntPtr.Zero);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error setting event callback for HeartRateMonitorLEDGreenBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for HeartRateMonitorLEDGreenBatch");
+            }
+        }
+
+        internal override void EventListenStop()
+        {
+            int error = Interop.SensorListener.UnsetEventsCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting event callback for HeartRateMonitorLEDGreenBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for HeartRateMonitorLEDGreenBatch");
+            }
+        }
+
+        private static Interop.SensorListener.SensorAccuracyCallback _accuracyCallback;
+
+        private void AccuracyListenStart()
+        {
+            _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) =>
+            {
+                Timestamp = timestamp;
+                Accuracy = accuracy;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(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 HeartRateMonitorLEDGreenBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for HeartRateMonitorLEDGreenBatch");
+            }
+        }
+
+        private void AccuracyListenStop()
+        {
+            int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle);
+            if (error != (int)SensorError.None)
+            {
+                Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for HeartRateMonitorLEDGreenBatch sensor");
+                throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for HeartRateMonitorLEDGreenBatch");
+            }
+        }
+    }
+}
index 24247b2..b18c7bb 100755 (executable)
@@ -117,7 +117,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading humidity sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Humidity = sensorData.values[0];
         }
 
@@ -129,7 +129,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Humidity = sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new HumiditySensorDataUpdatedEventArgs(sensorData.values[0]));
index 58955f0..389c47d 100755 (executable)
@@ -106,7 +106,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading in-vehicle activity detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             InVehicle = (DetectorState)sensorData.values[0];
             ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
         }
@@ -125,7 +125,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 InVehicle = (DetectorState)sensorData.values[0];
                 ActivityAccuracy = (SensorDataAccuracy) sensorData.accuracy;
 
index 9458ace..9a11d2a 100755 (executable)
@@ -117,7 +117,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading light sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Level = sensorData.values[0];
         }
 
@@ -129,7 +129,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Level = sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new LightSensorDataUpdatedEventArgs(sensorData.values[0]));
index b41965c..2a2d80c 100755 (executable)
@@ -156,7 +156,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading linear acceleration sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -166,11 +166,12 @@ namespace Tizen.Sensor
 
         internal override void EventListenStart()
         {
-            _callback = (IntPtr sensorHandle, IntPtr eventPtr, uint events_count, IntPtr data) => {
+            _callback = (IntPtr sensorHandle, IntPtr eventPtr, uint events_count, IntPtr data) =>
+            {
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -200,9 +201,10 @@ namespace Tizen.Sensor
 
         private void AccuracyListenStart()
         {
-            _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+            _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) =>
+            {
+                Timestamp = timestamp;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 8782d57..0e47cec 100755 (executable)
@@ -156,7 +156,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading magnetometer data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -170,7 +170,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -201,8 +201,8 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                Timestamp = timestamp;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 97d45f4..8813bd2 100755 (executable)
@@ -182,7 +182,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading magnetometer rotation vector sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -198,7 +198,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -231,9 +231,9 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
+                Timestamp = timestamp;
                 Accuracy = accuracy;
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 6293574..0a221a0 100755 (executable)
@@ -156,7 +156,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading orientation sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Azimuth = sensorData.values[0];
             Pitch = sensorData.values[1];
             Roll = sensorData.values[2];
@@ -170,7 +170,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Azimuth = sensorData.values[0];
                 Pitch = sensorData.values[1];
                 Roll = sensorData.values[2];
@@ -201,8 +201,8 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                Timestamp = timestamp;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 0481ca0..a6e8190 100755 (executable)
@@ -187,7 +187,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 StepCount = (uint)sensorData.values[0];
                 WalkStepCount = (uint)sensorData.values[1];
                 RunStepCount = (uint)sensorData.values[2];
index 418bec3..e6c9b73 100755 (executable)
@@ -122,7 +122,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading pick up gesture detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             PickUp = (DetectorState)sensorData.values[0];
         }
 
@@ -140,7 +140,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 PickUp = (DetectorState) sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new PickUpGestureDetectorDataUpdatedEventArgs(sensorData.values[0]));
index 295609e..80a1838 100755 (executable)
@@ -118,7 +118,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading pressure sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Pressure = sensorData.values[0];
         }
 
@@ -130,7 +130,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Pressure = sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new PressureSensorDataUpdatedEventArgs(sensorData.values[0]));
index fd4205a..e1e4aa3 100755 (executable)
@@ -117,7 +117,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading proximity sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Proximity = (ProximitySensorState)sensorData.values[0];
         }
 
@@ -129,7 +129,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Proximity = (ProximitySensorState) sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new ProximitySensorDataUpdatedEventArgs(sensorData.values[0]));
index cac4716..209cc33 100755 (executable)
@@ -170,7 +170,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading rotation vector sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -186,7 +186,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -219,9 +219,9 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
+                Timestamp = timestamp;
                 Accuracy = accuracy;
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 3778331..d42a2cb 100755 (executable)
@@ -106,7 +106,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading running activity detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Running = (DetectorState)sensorData.values[0];
             ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
         }
@@ -125,7 +125,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Running = (DetectorState)sensorData.values[0];
                 ActivityAccuracy = (SensorDataAccuracy) sensorData.accuracy;
 
index cc15999..bdeb27e 100755 (executable)
@@ -121,7 +121,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading sleep monitor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             SleepState = (SleepMonitorState)sensorData.values[0];
         }
 
@@ -133,7 +133,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 SleepState = (SleepMonitorState)sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new SleepMonitorDataUpdatedEventArgs((int)sensorData.values[0]));
index 00ad3ef..d723062 100755 (executable)
@@ -106,7 +106,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading stationary activity detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Stationary = (DetectorState)sensorData.values[0];
             ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
         }
@@ -125,7 +125,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Stationary = (DetectorState)sensorData.values[0];
                 ActivityAccuracy = (SensorDataAccuracy) sensorData.accuracy;
 
index 2ced599..d9a1df9 100755 (executable)
@@ -118,7 +118,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading temperature sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Temperature = sensorData.values[0];
         }
 
@@ -130,7 +130,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Temperature = sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new TemperatureSensorDataUpdatedEventArgs(sensorData.values[0]));
index 2a86228..53bfb10 100755 (executable)
@@ -118,7 +118,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading ultraviolet sensor data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             UltravioletIndex = sensorData.values[0];
         }
 
@@ -130,7 +130,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 UltravioletIndex = sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new UltravioletSensorDataUpdatedEventArgs(sensorData.values[0]));
index f459eac..33c9b12 100755 (executable)
@@ -152,7 +152,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading uncalibrated gyroscope data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -169,7 +169,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
index 6152992..ee1927d 100755 (executable)
@@ -177,7 +177,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading uncalibrated magnetometer data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             X = sensorData.values[0];
             Y = sensorData.values[1];
             Z = sensorData.values[2];
@@ -194,7 +194,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 X = sensorData.values[0];
                 Y = sensorData.values[1];
                 Z = sensorData.values[2];
@@ -228,8 +228,8 @@ namespace Tizen.Sensor
         private void AccuracyListenStart()
         {
             _accuracyCallback = (IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) => {
-                TimeSpan = new TimeSpan((Int64)timestamp);
-                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy));
+                Timestamp = timestamp;
+                _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(timestamp, accuracy));
             };
 
             int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, _accuracyCallback, IntPtr.Zero);
index 116f712..a7ecb61 100755 (executable)
@@ -106,7 +106,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading walking activity detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             Walking = (DetectorState)sensorData.values[0];
             ActivityAccuracy = (SensorDataAccuracy)sensorData.accuracy;
         }
@@ -125,7 +125,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 Walking = (DetectorState)sensorData.values[0];
                 ActivityAccuracy = (SensorDataAccuracy) sensorData.accuracy;
 
index 6ff7e47..1e4966f 100755 (executable)
@@ -110,7 +110,7 @@ namespace Tizen.Sensor
                 throw SensorErrorFactory.CheckAndThrowException(error, "Reading wrist up gesture detector data failed");
             }
 
-            TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+            Timestamp = sensorData.timestamp;
             WristUp = (DetectorState)sensorData.values[0];
         }
 
@@ -128,7 +128,7 @@ namespace Tizen.Sensor
                 updateBatchEvents(eventPtr, events_count);
                 Interop.SensorEventStruct sensorData = latestEvent();
 
-                TimeSpan = new TimeSpan((Int64)sensorData.timestamp);
+                Timestamp = sensorData.timestamp;
                 WristUp = (DetectorState) sensorData.values[0];
 
                 DataUpdated?.Invoke(this, new WristUpGestureDetectorDataUpdatedEventArgs(sensorData.values[0]));
index 83fa534..863e8a8 100755 (executable)
@@ -42,13 +42,13 @@ namespace Tizen.Sensor
         private int _maxBatchCount;
         private bool _isSensing = false;
         private bool _disposed = false;
-        private TimeSpan _timeSpan;
+        private ulong _timestamp;
         private uint _interval = 0;
         private uint _maxBatchLatency = 0;
         private SensorPausePolicy _pausePolicy = SensorPausePolicy.None;
         private IntPtr _sensorHandle = IntPtr.Zero;
         private IntPtr _listenerHandle = IntPtr.Zero;
-        private List<Interop.SensorEventStruct> batchedEvents { get; set; } = new List<Interop.SensorEventStruct>();
+        internal IList<Interop.SensorEventStruct> BatchedEvents { get; set; } = new List<Interop.SensorEventStruct>();
 
 
         /// <summary>
@@ -63,11 +63,11 @@ namespace Tizen.Sensor
         {
             if (events_count >= 1)
             {
-                batchedEvents.Clear();
+                BatchedEvents.Clear();
                 IntPtr currentPtr = eventsPtr;
                 for (int i = 0; i < events_count; i++)
                 {
-                    batchedEvents.Add(Interop.IntPtrToEventStruct(currentPtr));
+                    BatchedEvents.Add(Interop.IntPtrToEventStruct(currentPtr));
                     currentPtr += Marshal.SizeOf<Interop.SensorEventStruct>();
                 }
             }
@@ -75,9 +75,9 @@ namespace Tizen.Sensor
 
         internal Interop.SensorEventStruct latestEvent()
         {
-            if (batchedEvents.Count > 0)
+            if (BatchedEvents.Count > 0)
             {
-                return batchedEvents[batchedEvents.Count-1];
+                return BatchedEvents[BatchedEvents.Count - 1];
             }
             return default(Interop.SensorEventStruct);
         }
@@ -288,12 +288,31 @@ namespace Tizen.Sensor
             set
             {
                 Log.Info(Globals.LogTag, "Setting the timespan of the sensor values");
-                _timeSpan = value;
+                _timestamp = (ulong)value.Ticks;
             }
             get
             {
                 Log.Info(Globals.LogTag, "Getting the timespan of the sensor values");
-                return _timeSpan;
+                return new TimeSpan((Int64)_timestamp);
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the timestamp.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        /// <value> Timestamp. </value>
+        public ulong Timestamp
+        {
+            set
+            {
+                Log.Info(Globals.LogTag, "Setting the timestamp of the sensor values");
+                _timestamp = value;
+            }
+            get
+            {
+                Log.Info(Globals.LogTag, "Getting the timestamp of the sensor values");
+                return _timestamp;
             }
         }
 
@@ -357,7 +376,14 @@ namespace Tizen.Sensor
                     Log.Error(Globals.LogTag, "Error starting sensor");
                     throw SensorErrorFactory.CheckAndThrowException(error, "Unable to Start Sensor Listener");
                 }
-                ReadData();
+                try
+                {
+                    ReadData();
+                }
+                catch (InvalidOperationException e)
+                {
+                    Log.Error(Globals.LogTag, "Sensor has no data.");
+                }
                 EventListenStart();
                 _isSensing = true;
                 Log.Info(Globals.LogTag, "Sensor started");
index fe7020a..b9cca5c 100755 (executable)
@@ -102,18 +102,26 @@ namespace Tizen.Sensor
         /// <summary>
         /// Pedometer sensor.
         /// </summary>
+        HRMBatch = 0x200,
+        /// <summary>
+        /// Pedometer sensor.
+        /// </summary>
+        HRMLEDGreenBatch = 0x201,
+        /// <summary>
+        /// Pedometer sensor.
+        /// </summary>
         Pedometer = 0x300,
         /// <summary>
         /// Sleep monitor sensor.
         /// </summary>
         SleepMonitor = 0x301,
         /// <summary>
-        /// Stationary activity detector.
-        /// </summary>
         /// Auto Rotation sensor.
         /// </summary>
         AutoRotation = 0x901,
         /// <summary>
+        /// Stationary activity detector.
+        /// </summary>
         StationaryActivityDetector = 0x1A00,
         /// <summary>
         /// Walking activity detector.
@@ -354,4 +362,57 @@ namespace Tizen.Sensor
         /// <since_tizen> 7 </since_tizen>
         Degree_270 = 4
     }
+
+
+    /// <summary>
+    /// HeartRateMonitorBatchState types.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public enum HeartRateMonitorBatchState
+    {
+        /// <summary>
+        /// Flush but there was no batched data
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_NODATA_FLUSH = -99,
+
+        /// <summary>
+        /// Very low measurement reliability 
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_VERYLOW_RELIABILITY = -10,
+
+        /// <summary>
+        ///  Low measurement reliability
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_LOW_RELIABILITY = -8,
+
+        /// <summary>
+        /// Device detachment was detected during auto measurement
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_DETACHED_AUTO = -5,
+
+        /// <summary>
+        /// Device detachment was detected
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_DETACHED = -3,
+
+        /// <summary>
+        /// The Movement was detected during on-demand measurement
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_DETECT_MOVE = -2,
+
+        /// <summary>
+        /// Device attachment was detected
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_ATTACHED = -1,
+
+        /// <summary>
+        /// Initial state before measurement
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_NONE = 0,
+
+        /// <summary>
+        /// SENSOR_HRM_BATCH_STATE_OK
+        /// </summary>
+        SENSOR_HRM_BATCH_STATE_OK = 1
+    }
 }