diff options
Diffstat (limited to 'src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs')
-rwxr-xr-x | src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs b/src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs new file mode 100755 index 0000000..b90b1bc --- /dev/null +++ b/src/Tizen.Sensor/Tizen.Sensor/Plugins/TemperatureSensor.cs @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2016 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; + +namespace Tizen.Sensor +{ + /// <summary> + /// TemperatureSensor Class. Used for registering callbacks for temperature sensor and getting temperature data + /// </summary> + public sealed class TemperatureSensor : Sensor + { + private static string TemperatureSensorKey = "http://tizen.org/feature/sensor.temperature"; + + /// <summary> + /// Gets the value of the temperature sensor. + /// </summary> + /// <since_tizen> 3 </since_tizen> + /// <value> Temperature (Celsius) </value> + public float Temperature { get; private set; } = float.MinValue; + + /// <summary> + /// Returns true or false based on whether temperature sensor is supported by device. + /// </summary> + /// <since_tizen> 3 </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 TemperatureSensor is supported"); + return CheckIfSupported(SensorType.TemperatureSensor, TemperatureSensorKey); + } + } + + /// <summary> + /// Returns the number of temperature sensors available on the device. + /// </summary> + /// <since_tizen> 3 </since_tizen> + /// <value> The count of temperature sensors </value> + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of temperature sensors"); + return GetCount(); + } + } + + /// <summary> + /// Initializes a new instance of the <see cref="Tizen.Sensor.TemperatureSensor"/> class. + /// </summary> + /// <since_tizen> 3 </since_tizen> + /// <feature>http://tizen.org/feature/sensor.temperature</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 temperature sensor in case of multiple sensors + /// </param> + public TemperatureSensor(uint index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating TemperatureSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.TemperatureSensor; + } + + /// <summary> + /// Event Handler for storing the callback functions for event corresponding to change in temperature sensor data. + /// </summary> + /// <since_tizen> 3 </since_tizen> + + public event EventHandler<TemperatureSensorDataUpdatedEventArgs> DataUpdated; + + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.TemperatureSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for temperature"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + 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); + Temperature = sensorData.values[0]; + + DataUpdated?.Invoke(this, new TemperatureSensorDataUpdatedEventArgs(sensorData.values[0])); + }; + + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, _callback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for temperature sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for temperature"); + } + } + + internal override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for temperature sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for temperature"); + } + } + } +} |