payload: {"action":"created","comment":{"url":"https://api.github.com/repos/Samsung/TizenFX/pulls/comments/285587331","pull_request_review_id":239492556,"id":285587331,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI4NTU4NzMzMQ==","diff_hunk":"@@ -541,9 +689,778 @@ private bool CheckSensorHandle()\n             return result;\n         }\n \n+        private bool CheckProviderHandle()\n+        {\n+            bool result = false;\n+            if (_sensorProviderHandle != IntPtr.Zero)\n+            {\n+                result = true;\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Sensor Provider handle is null\");\n+                throw new ArgumentException(\"Invalid Parameter: Sensor provider handle is null\");\n+            }\n+            return result;\n+        }\n+\n+        private bool CheckRecorderOption()\n+        {\n+            bool result = false;\n+            if (recorderOption != IntPtr.Zero)\n+            {\n+                result = true;\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Sensor Recorder Option is null\");\n+                throw new ArgumentException(\"Invalid Parameter: Sensor Recorder Option is null\");\n+            }\n+            return result;\n+        }\n+\n+        private bool CheckRecorderQuery()\n+        {\n+            bool result = false;\n+            if (recorderQuery != IntPtr.Zero)\n+            {\n+                result = true;\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Sensor Recorder Query is null\");\n+                throw new ArgumentException(\"Invalid Parameter: Sensor Recorder Query is null\");\n+            }\n+            return result;\n+        }\n+\n         private void DestroyHandles()\n         {\n             Interop.SensorListener.DestroyListener(_listenerHandle);\n+            RecorderDestroyOption();\n+            RecorderDestroyQuery();\n+            DestroyProvider();\n+\n+        }\n+\n+        /// <summary>\n+        /// Gets the handle for the default sensor of a given sensor URI.\n+        /// </summary>\n+        /// <param name=\"uri\">\n+        /// A sensor or a sensor type URI to get the handle of its default sensor.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void GetDefaultSensorByUri(string uri)\n+        {\n+            IntPtr sensorHandle;\n+            int error = Interop.SensorManager.GetDefaultSensorByUri(uri, out sensorHandle);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error getting default sensor by uri\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.GetDefaultSensorByUri Failed\");\n+            }\n+            _sensorHandle = sensorHandle;\n+        }\n+\n+        private void GetHandleList(string uri, uint index)\n+        {\n+            IntPtr list;\n+            IntPtr[] sensorList;\n+            int count;\n+            int error = Interop.SensorManager.GetSensorListByUri(uri, out list, out count);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error getting sensor list by uri\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.GetSensorListByUri Failed\");\n+            }\n+            sensorList = Interop.IntPtrToIntPtrArray(list, count);\n+            _sensorHandle = sensorList[index];\n+            Interop.Libc.Free(list);\n+        }\n+\n+        /// <summary>\n+        /// Creates a recorder option handle.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void RecorderCreateOption()\n+        {\n+            int error = Interop.SensorRecoder.RecorderCreateOption(out recorderOption);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error creating the sensor recorder option\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderCreateOption Failed\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Creates a recorder query handle.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void RecorderCreateQuery()\n+        {\n+            int error = Interop.SensorRecoder.RecorderCreateQuery(out recorderQuery);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error creating the sensor recorder query\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderCreateQuery Failed\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Gets a double value from a record data.\n+        /// </summary>\n+        /// <param name=\"data\">\n+        /// Record data handle.\n+        /// </param>\n+        /// <param name=\"key\">\n+        /// Data attribute to retrieve.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public double RecorderDataGetDouble(int data, int key)\n+        {\n+            double value;\n+            int error = Interop.SensorRecoder.RecorderDataGetDouble(data, key, out value);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error getting the sensor recorder double data\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderDataGetDouble Failed\");\n+            }\n+            return value;\n+        }\n+\n+        /// <summary>\n+        /// Gets the start and the end time of the time period of a given record data.\n+        /// </summary>\n+        /// <param name=\"data\">\n+        /// Record data handle.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public Tuple<long, long> RecorderDataGetTime(int data)\n+        {\n+            long startTime, endTime;\n+            \n+            int error = Interop.SensorRecoder.RecorderDataGetTime(data, out startTime, out endTime);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error getting the sensor recorder time\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderDataGetTime Failed\");\n+            }\n+\n+            Tuple<long, long> list = new Tuple<long, long>(startTime, endTime);\n+            return list;\n+        }\n+\n+        /// <summary>\n+        /// Destroys a recorder option handle.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void RecorderDestroyOption()\n+        {\n+            if (CheckRecorderOption())\n+            {\n+                int error = Interop.SensorRecoder.RecorderDestroyOption(recorderOption);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error deleting the sensor recorder option\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderDestroyOption Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder option is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Destroys a recorder query handle.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void RecorderDestroyQuery()\n+        {\n+            if (CheckRecorderQuery())\n+            { \n+                int error = Interop.SensorRecoder.RecorderDestroyQuery(recorderQuery);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error deleting the sensor recorder query\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderDestroyQuery Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder query is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Checks whether it is supported to record a given sensor type.\n+        /// </summary>\n+        /// <param name=\"type\">\n+        /// A sensor type to check.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public bool RecorderIsSupported(int type)\n+        {\n+            bool isSupported;\n+            int error = Interop.SensorRecoder.RecorderIsSupported(type, out isSupported);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error checking if sensor recorder is supported\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderIsSupported Failed\");\n+            }\n+            return isSupported;\n+        }\n+\n+        /// <summary>\n+        /// Sets a recording option parameter.\n+        /// </summary>\n+        /// <param name=\"recorderOptionE\">\n+        /// Option parameter.\n+        /// </param>\n+        /// <param name=\"value\">\n+        /// Value.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderOptionSetInt(int recorderOptionE, int value)\n+        {\n+            if (CheckRecorderOption())\n+            { \n+                int error = Interop.SensorRecoder.RecorderOptionSetInt(recorderOption, recorderOptionE, value);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error checking sensor recorder option set int\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderOptionSetInt Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder option is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Sets an integer-type query parameter.\n+        /// </summary>\n+        /// <param name=\"recorderQueryE\">\n+        /// Query parameter.\n+        /// </param>\n+        /// <param name=\"value\">\n+        /// Value.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderQuerySetInt(int recorderQueryE, int value)\n+        {\n+            if (CheckRecorderQuery())\n+            { \n+                int error = Interop.SensorRecoder.RecorderQuerySetInt(recorderQuery, recorderQueryE, value);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error checking sensor recorder query set int\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderQuerySetInt Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder query is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Sets a time-type query parameter.\n+        /// </summary>\n+        /// <param name=\"recorderQueryE\">\n+        /// Query parameter.\n+        /// </param>\n+        /// <param name=\"time\">\n+        /// Time.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderQuerySetTime(int recorderQueryE, int time)\n+        {\n+            if (CheckRecorderQuery()) { \n+                int error = Interop.SensorRecoder.RecorderQuerySetTime(recorderQuery, recorderQueryE, time);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error checking sensor recorder query set time\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderQuerySetTime Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder query is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Queries the recorded data synchronously.\n+        /// </summary>\n+        /// <param name=\"type\">\n+        /// Sensor type.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderReadSync(int type)\n+        {\n+            if (CheckRecorderQuery())\n+            {\n+                _sensorRecorderDataCallBack = (int _type, int data, int remains, int _error, Int64 _userData) =>\n+                {\n+                    RecorderDataEventArgs e = new RecorderDataEventArgs(_type, data, remains, _error, _userData)\n+                    {\n+                    };\n+\n+                    if (_error != 0)\n+                    {\n+                        Log.Error(Globals.LogTag, \"Error in Sensor Recorder Data Read Synchronously CallBack\");\n+                    }\n+\n+                    RecorderDataReceived?.Invoke(null, e);\n+                    Log.Debug(Globals.LogTag, \"Recorder data callback recieved\");\n+                    return true;\n+                };\n+\n+                int error = Interop.SensorRecoder.RecorderReadSync(type, recorderQuery, _sensorRecorderDataCallBack, IntPtr.Zero);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in synchronously reading recorder\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderRead Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder query is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Queries the recorded data asynchronously.\n+        /// </summary>\n+        /// <param name=\"type\">\n+        /// Sensor type.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderRead(int type)\n+        {\n+            if (CheckRecorderQuery())\n+            { \n+                _sensorRecorderDataCallBack = (int _type, int data, int remains, int _error, Int64 _userData) =>\n+                {\n+                    RecorderDataEventArgs e = new RecorderDataEventArgs(_type, data, remains, _error, _userData)\n+                    {\n+                    };\n+\n+                    if (_error != 0)\n+                    {\n+                        Log.Error(Globals.LogTag, \"Error in Sensor Recorder Data aynchronously CallBack\");\n+                    }\n+\n+                    RecorderDataReceived?.Invoke(null, e);\n+                    Log.Debug(Globals.LogTag, \"Recorder data callback recieved\");\n+                    return true;\n+                };\n+\n+                int error = Interop.SensorRecoder.RecorderRead(type, recorderQuery, _sensorRecorderDataCallBack, IntPtr.Zero);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in asynchronously reading recorder\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderRead Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder query is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Starts to record a given sensor type.\n+        /// </summary>\n+        /// <param name=\"type\">\n+        /// A sensor type to be recorded.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderStart(int type)\n+        {\n+            if (CheckRecorderOption()) { \n+                int error = Interop.SensorRecoder.RecorderStart(type, recorderOption);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in starting recorder\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderStart Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Recorder option is not created\");\n+            }\n+        }\n+\n+        /// <summary>\n+        ///  Stops recording a given sensor type.\n+        /// </summary>\n+        /// <param name=\"type\">\n+        /// A sensor type to be recorded.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RecorderStop(int type)\n+        {\n+            int error = Interop.SensorRecoder.RecorderStop(type);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error in starting recorder\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RecorderStop Failed\");\n+            }\n+\n+        }\n+\n+        /// <summary>\n+        ///  This function creates a sensor provider handle with a given URI.\n+        /// </summary>\n+        /// <param name=\"uri\">\n+        /// The URI of sensor to be created.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void CreateProvider(string uri)\n+        {\n+            int error = Interop.SensorProvider.CreateProvider(uri, out _sensorProviderHandle);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error in creating sensor provider\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.CreateProvider Failed\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Registers the sensor provider.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void AddProvider()\n+        {\n+            if (CheckProviderHandle())\n+            {\n+                AddSensorAddedCB();\n+                int error = Interop.SensorProvider.AddProvider(_sensorProviderHandle);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in adding sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.AddProvider Failed\");\n+                }\n+                RemoveSensorAddedCB();\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Unregisters the sensor provider.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void RemoveProvider()\n+        {\n+            if (CheckProviderHandle())\n+            {\n+                AddSensorRemovedCB();\n+                int error = Interop.SensorProvider.RemoveProvider(_sensorProviderHandle);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in removing sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.RemoveProvider Failed\");\n+                }\n+                RemoveSensorRemovedCB();\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Releases all the resources allocated for the sensor provider.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void DestroyProvider()\n+        {\n+            int error = Interop.SensorProvider.DestroyProvider(_sensorProviderHandle);\n+            if (error != (int)SensorError.None)\n+            {\n+                Log.Error(Globals.LogTag, \"Error in destroying sensor provider\");\n+                throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.DestroyProvider Failed\");\n+            }\n+\n+        }\n+\n+\n+        /// <summary>\n+        ///  Sets the name to the sensor provider.\n+        /// </summary>\n+        /// <param name=\"name\">\n+        /// The name of the sensor.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void ProviderSetName(string name)\n+        {\n+            if (CheckProviderHandle())\n+            {\n+                int error = Interop.SensorProvider.ProviderSetName(_sensorProviderHandle, name);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in setting name of sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.ProviderSetName Failed\");\n+                }\n+            }\n+            else {\n+                Log.Error(Globals.LogTag, \"Provider handle does not exist\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Sets the vendor to the sensor provider.\n+        /// </summary>\n+        /// <param name=\"vendor\">\n+        /// The vendor of the sensor.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void ProviderSetVendor(string vendor)\n+        {\n+            if (CheckProviderHandle())\n+            { \n+                int error = Interop.SensorProvider.ProviderSetVendor(_sensorProviderHandle, vendor);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in setting vendor of sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.ProviderSetVendor Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Provider handle does not exist\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Sets the range of possible sensor values to the sensor provider.\n+        /// </summary>\n+        /// <param name=\"minRange\">\n+        /// The lower bound.\n+        /// </param>\n+        /// <param name=\"maxRange\">\n+        /// The upper bound.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void ProviderSetRange(float minRange, float maxRange)\n+        {\n+            if (CheckProviderHandle())\n+            { \n+                int error = Interop.SensorProvider.ProviderSetRange(_sensorProviderHandle, minRange, maxRange);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in setting range of sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.ProviderSetRange Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Provider handle does not exist\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Sets the resolution of sensor values to the sensor provider.\n+        /// </summary>\n+        /// <param name=\"resolution\">\n+        /// The resolution.\n+        /// </param>\n+        /// <since_tizen> 6 </since_tizen>\n+        public void ProviderSetResolution(float resolution)\n+        {\n+            if (CheckProviderHandle())\n+            {\n+                int error = Interop.SensorProvider.ProviderSetResolution(_sensorProviderHandle, resolution);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in setting resolution of sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.ProviderSetResolution Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Provider handle does not exist\");\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Registers the callback function to be invoked when a listener starts the sensor provider.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void SetProviderStartCb()\n+        {\n+            if (CheckProviderHandle())\n+            {\n+                _sensorProviderStartCallBack = (IntPtr _provider, Int64 _userData) =>\n+                {\n+                };\n+\n+                int error = Interop.SensorProvider.SetProviderStartCb(_sensorProviderHandle, _sensorProviderStartCallBack, IntPtr.Zero);\n+                if (error != (int)SensorError.None)\n+                {\n+                    Log.Error(Globals.LogTag, \"Error in setting start callback of sensor provider\");\n+                    throw SensorErrorFactory.CheckAndThrowException(error, \"Sensor.ProviderSetStartCb Failed\");\n+                }\n+            }\n+            else\n+            {\n+                Log.Error(Globals.LogTag, \"Provider handle does not exist\");\n+            }\n         }\n+\n+        /// <summary>\n+        /// Registers the callback function to be invoked when a sensor listener stops the sensor provider.\n+        /// </summary>\n+        /// <since_tizen> 6 </since_tizen>\n+        private void SetProviderStopCb()","path":"src/Tizen.Sensor/Tizen.Sensor/Sensor.cs","position":851,"original_position":851,"commit_id":"8b5c24e6c53b0e757f26497f8edafb50dc8ff1cb","original_commit_id":"8b5c24e6c53b0e757f26497f8edafb50dc8ff1cb","user":{"login":"pvschakradhar","id":48746416,"node_id":"MDQ6VXNlcjQ4NzQ2NDE2","avatar_url":"https://avatars2.githubusercontent.com/u/48746416?v=4","gravatar_id":"","url":"https://api.github.com/users/pvschakradhar","html_url":"https://github.com/pvschakradhar","followers_url":"https://api.github.com/users/pvschakradhar/followers","following_url":"https://api.github.com/users/pvschakradhar/following{/other_user}","gists_url":"https://api.github.com/users/pvschakradhar/gists{/gist_id}","starred_url":"https://api.github.com/users/pvschakradhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvschakradhar/subscriptions","organizations_url":"https://api.github.com/users/pvschakradhar/orgs","repos_url":"https://api.github.com/users/pvschakradhar/repos","events_url":"https://api.github.com/users/pvschakradhar/events{/privacy}","received_events_url":"https://api.github.com/users/pvschakradhar/received_events","type":"User","site_admin":false},"body":"This API sets the callback function for getting called when provider stop. As per sensor spec need to set following 3 callbacks before calling AddProvider API.\r\n1.  sensor_provider_start_cb()\r\n2. sensor_provider_stop_cb(),\r\n3. sensor_provider_set_interval_changed_cb()","created_at":"2019-05-20T13:18:32Z","updated_at":"2019-05-20T13:18:32Z","html_url":"https://github.com/Samsung/TizenFX/pull/827#discussion_r285587331","pull_request_url":"https://api.github.com/repos/Samsung/TizenFX/pulls/827","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/comments/285587331"},"html":{"href":"https://github.com/Samsung/TizenFX/pull/827#discussion_r285587331"},"pull_request":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/827"}},"in_reply_to_id":283628793},"pull_request":{"url":"https://api.github.com/repos/Samsung/TizenFX/pulls/827","id":277477258,"node_id":"MDExOlB1bGxSZXF1ZXN0Mjc3NDc3MjU4","html_url":"https://github.com/Samsung/TizenFX/pull/827","diff_url":"https://github.com/Samsung/TizenFX/pull/827.diff","patch_url":"https://github.com/Samsung/TizenFX/pull/827.patch","issue_url":"https://api.github.com/repos/Samsung/TizenFX/issues/827","number":827,"state":"open","locked":false,"title":"Missing sensor apis","user":{"login":"pvschakradhar","id":48746416,"node_id":"MDQ6VXNlcjQ4NzQ2NDE2","avatar_url":"https://avatars2.githubusercontent.com/u/48746416?v=4","gravatar_id":"","url":"https://api.github.com/users/pvschakradhar","html_url":"https://github.com/pvschakradhar","followers_url":"https://api.github.com/users/pvschakradhar/followers","following_url":"https://api.github.com/users/pvschakradhar/following{/other_user}","gists_url":"https://api.github.com/users/pvschakradhar/gists{/gist_id}","starred_url":"https://api.github.com/users/pvschakradhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvschakradhar/subscriptions","organizations_url":"https://api.github.com/users/pvschakradhar/orgs","repos_url":"https://api.github.com/users/pvschakradhar/repos","events_url":"https://api.github.com/users/pvschakradhar/events{/privacy}","received_events_url":"https://api.github.com/users/pvschakradhar/received_events","type":"User","site_admin":false},"body":"### Description of Change ###\r\nprevious pull request : https://github.com/Samsung/TizenFX/pull/776\r\n\r\n### API Changes ###\r\nACR: http://suprem.sec.samsung.net/jira/browse/TCSACR-218\r\n","created_at":"2019-05-09T17:16:44Z","updated_at":"2019-05-20T13:18:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"18e60aa459440869327edf67f6e9c5c3d42efb5f","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":797883446,"node_id":"MDU6TGFiZWw3OTc4ODM0NDY=","url":"https://api.github.com/repos/Samsung/TizenFX/labels/ACR%20Required","name":"ACR Required","color":"ff4645","default":false},{"id":1101034470,"node_id":"MDU6TGFiZWwxMTAxMDM0NDcw","url":"https://api.github.com/repos/Samsung/TizenFX/labels/API6","name":"API6","color":"b9d3ff","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Samsung/TizenFX/pulls/827/commits","review_comments_url":"https://api.github.com/repos/Samsung/TizenFX/pulls/827/comments","review_comment_url":"https://api.github.com/repos/Samsung/TizenFX/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Samsung/TizenFX/issues/827/comments","statuses_url":"https://api.github.com/repos/Samsung/TizenFX/statuses/8b5c24e6c53b0e757f26497f8edafb50dc8ff1cb","head":{"label":"pvschakradhar:Missing-Sensor-Apis","ref":"Missing-Sensor-Apis","sha":"8b5c24e6c53b0e757f26497f8edafb50dc8ff1cb","user":{"login":"pvschakradhar","id":48746416,"node_id":"MDQ6VXNlcjQ4NzQ2NDE2","avatar_url":"https://avatars2.githubusercontent.com/u/48746416?v=4","gravatar_id":"","url":"https://api.github.com/users/pvschakradhar","html_url":"https://github.com/pvschakradhar","followers_url":"https://api.github.com/users/pvschakradhar/followers","following_url":"https://api.github.com/users/pvschakradhar/following{/other_user}","gists_url":"https://api.github.com/users/pvschakradhar/gists{/gist_id}","starred_url":"https://api.github.com/users/pvschakradhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvschakradhar/subscriptions","organizations_url":"https://api.github.com/users/pvschakradhar/orgs","repos_url":"https://api.github.com/users/pvschakradhar/repos","events_url":"https://api.github.com/users/pvschakradhar/events{/privacy}","received_events_url":"https://api.github.com/users/pvschakradhar/received_events","type":"User","site_admin":false},"repo":{"id":178183072,"node_id":"MDEwOlJlcG9zaXRvcnkxNzgxODMwNzI=","name":"TizenFX","full_name":"pvschakradhar/TizenFX","private":false,"owner":{"login":"pvschakradhar","id":48746416,"node_id":"MDQ6VXNlcjQ4NzQ2NDE2","avatar_url":"https://avatars2.githubusercontent.com/u/48746416?v=4","gravatar_id":"","url":"https://api.github.com/users/pvschakradhar","html_url":"https://github.com/pvschakradhar","followers_url":"https://api.github.com/users/pvschakradhar/followers","following_url":"https://api.github.com/users/pvschakradhar/following{/other_user}","gists_url":"https://api.github.com/users/pvschakradhar/gists{/gist_id}","starred_url":"https://api.github.com/users/pvschakradhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvschakradhar/subscriptions","organizations_url":"https://api.github.com/users/pvschakradhar/orgs","repos_url":"https://api.github.com/users/pvschakradhar/repos","events_url":"https://api.github.com/users/pvschakradhar/events{/privacy}","received_events_url":"https://api.github.com/users/pvschakradhar/received_events","type":"User","site_admin":false},"html_url":"https://github.com/pvschakradhar/TizenFX","description":"C# Device APIs for Tizen","fork":true,"url":"https://api.github.com/repos/pvschakradhar/TizenFX","forks_url":"https://api.github.com/repos/pvschakradhar/TizenFX/forks","keys_url":"https://api.github.com/repos/pvschakradhar/TizenFX/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pvschakradhar/TizenFX/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pvschakradhar/TizenFX/teams","hooks_url":"https://api.github.com/repos/pvschakradhar/TizenFX/hooks","issue_events_url":"https://api.github.com/repos/pvschakradhar/TizenFX/issues/events{/number}","events_url":"https://api.github.com/repos/pvschakradhar/TizenFX/events","assignees_url":"https://api.github.com/repos/pvschakradhar/TizenFX/assignees{/user}","branches_url":"https://api.github.com/repos/pvschakradhar/TizenFX/branches{/branch}","tags_url":"https://api.github.com/repos/pvschakradhar/TizenFX/tags","blobs_url":"https://api.github.com/repos/pvschakradhar/TizenFX/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pvschakradhar/TizenFX/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pvschakradhar/TizenFX/git/refs{/sha}","trees_url":"https://api.github.com/repos/pvschakradhar/TizenFX/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pvschakradhar/TizenFX/statuses/{sha}","languages_url":"https://api.github.com/repos/pvschakradhar/TizenFX/languages","stargazers_url":"https://api.github.com/repos/pvschakradhar/TizenFX/stargazers","contributors_url":"https://api.github.com/repos/pvschakradhar/TizenFX/contributors","subscribers_url":"https://api.github.com/repos/pvschakradhar/TizenFX/subscribers","subscription_url":"https://api.github.com/repos/pvschakradhar/TizenFX/subscription","commits_url":"https://api.github.com/repos/pvschakradhar/TizenFX/commits{/sha}","git_commits_url":"https://api.github.com/repos/pvschakradhar/TizenFX/git/commits{/sha}","comments_url":"https://api.github.com/repos/pvschakradhar/TizenFX/comments{/number}","issue_comment_url":"https://api.github.com/repos/pvschakradhar/TizenFX/issues/comments{/number}","contents_url":"https://api.github.com/repos/pvschakradhar/TizenFX/contents/{+path}","compare_url":"https://api.github.com/repos/pvschakradhar/TizenFX/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pvschakradhar/TizenFX/merges","archive_url":"https://api.github.com/repos/pvschakradhar/TizenFX/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pvschakradhar/TizenFX/downloads","issues_url":"https://api.github.com/repos/pvschakradhar/TizenFX/issues{/number}","pulls_url":"https://api.github.com/repos/pvschakradhar/TizenFX/pulls{/number}","milestones_url":"https://api.github.com/repos/pvschakradhar/TizenFX/milestones{/number}","notifications_url":"https://api.github.com/repos/pvschakradhar/TizenFX/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pvschakradhar/TizenFX/labels{/name}","releases_url":"https://api.github.com/repos/pvschakradhar/TizenFX/releases{/id}","deployments_url":"https://api.github.com/repos/pvschakradhar/TizenFX/deployments","created_at":"2019-03-28T10:44:41Z","updated_at":"2019-03-28T10:44:55Z","pushed_at":"2019-05-09T17:04:53Z","git_url":"git://github.com/pvschakradhar/TizenFX.git","ssh_url":"git@github.com:pvschakradhar/TizenFX.git","clone_url":"https://github.com/pvschakradhar/TizenFX.git","svn_url":"https://github.com/pvschakradhar/TizenFX","homepage":"","size":187178,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Samsung:master","ref":"master","sha":"78474c49c7ec2f128fbccbcf6a5a7f6773ef344c","user":{"login":"Samsung","id":6210390,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyMTAzOTA=","avatar_url":"https://avatars3.githubusercontent.com/u/6210390?v=4","gravatar_id":"","url":"https://api.github.com/users/Samsung","html_url":"https://github.com/Samsung","followers_url":"https://api.github.com/users/Samsung/followers","following_url":"https://api.github.com/users/Samsung/following{/other_user}","gists_url":"https://api.github.com/users/Samsung/gists{/gist_id}","starred_url":"https://api.github.com/users/Samsung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Samsung/subscriptions","organizations_url":"https://api.github.com/users/Samsung/orgs","repos_url":"https://api.github.com/users/Samsung/repos","events_url":"https://api.github.com/users/Samsung/events{/privacy}","received_events_url":"https://api.github.com/users/Samsung/received_events","type":"Organization","site_admin":false},"repo":{"id":115076596,"node_id":"MDEwOlJlcG9zaXRvcnkxMTUwNzY1OTY=","name":"TizenFX","full_name":"Samsung/TizenFX","private":false,"owner":{"login":"Samsung","id":6210390,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyMTAzOTA=","avatar_url":"https://avatars3.githubusercontent.com/u/6210390?v=4","gravatar_id":"","url":"https://api.github.com/users/Samsung","html_url":"https://github.com/Samsung","followers_url":"https://api.github.com/users/Samsung/followers","following_url":"https://api.github.com/users/Samsung/following{/other_user}","gists_url":"https://api.github.com/users/Samsung/gists{/gist_id}","starred_url":"https://api.github.com/users/Samsung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Samsung/subscriptions","organizations_url":"https://api.github.com/users/Samsung/orgs","repos_url":"https://api.github.com/users/Samsung/repos","events_url":"https://api.github.com/users/Samsung/events{/privacy}","received_events_url":"https://api.github.com/users/Samsung/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Samsung/TizenFX","description":"C# Device APIs for Tizen","fork":false,"url":"https://api.github.com/repos/Samsung/TizenFX","forks_url":"https://api.github.com/repos/Samsung/TizenFX/forks","keys_url":"https://api.github.com/repos/Samsung/TizenFX/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Samsung/TizenFX/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Samsung/TizenFX/teams","hooks_url":"https://api.github.com/repos/Samsung/TizenFX/hooks","issue_events_url":"https://api.github.com/repos/Samsung/TizenFX/issues/events{/number}","events_url":"https://api.github.com/repos/Samsung/TizenFX/events","assignees_url":"https://api.github.com/repos/Samsung/TizenFX/assignees{/user}","branches_url":"https://api.github.com/repos/Samsung/TizenFX/branches{/branch}","tags_url":"https://api.github.com/repos/Samsung/TizenFX/tags","blobs_url":"https://api.github.com/repos/Samsung/TizenFX/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Samsung/TizenFX/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Samsung/TizenFX/git/refs{/sha}","trees_url":"https://api.github.com/repos/Samsung/TizenFX/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Samsung/TizenFX/statuses/{sha}","languages_url":"https://api.github.com/repos/Samsung/TizenFX/languages","stargazers_url":"https://api.github.com/repos/Samsung/TizenFX/stargazers","contributors_url":"https://api.github.com/repos/Samsung/TizenFX/contributors","subscribers_url":"https://api.github.com/repos/Samsung/TizenFX/subscribers","subscription_url":"https://api.github.com/repos/Samsung/TizenFX/subscription","commits_url":"https://api.github.com/repos/Samsung/TizenFX/commits{/sha}","git_commits_url":"https://api.github.com/repos/Samsung/TizenFX/git/commits{/sha}","comments_url":"https://api.github.com/repos/Samsung/TizenFX/comments{/number}","issue_comment_url":"https://api.github.com/repos/Samsung/TizenFX/issues/comments{/number}","contents_url":"https://api.github.com/repos/Samsung/TizenFX/contents/{+path}","compare_url":"https://api.github.com/repos/Samsung/TizenFX/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Samsung/TizenFX/merges","archive_url":"https://api.github.com/repos/Samsung/TizenFX/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Samsung/TizenFX/downloads","issues_url":"https://api.github.com/repos/Samsung/TizenFX/issues{/number}","pulls_url":"https://api.github.com/repos/Samsung/TizenFX/pulls{/number}","milestones_url":"https://api.github.com/repos/Samsung/TizenFX/milestones{/number}","notifications_url":"https://api.github.com/repos/Samsung/TizenFX/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Samsung/TizenFX/labels{/name}","releases_url":"https://api.github.com/repos/Samsung/TizenFX/releases{/id}","deployments_url":"https://api.github.com/repos/Samsung/TizenFX/deployments","created_at":"2017-12-22T04:30:55Z","updated_at":"2019-05-20T05:07:46Z","pushed_at":"2019-05-20T10:54:04Z","git_url":"git://github.com/Samsung/TizenFX.git","ssh_url":"git@github.com:Samsung/TizenFX.git","clone_url":"https://github.com/Samsung/TizenFX.git","svn_url":"https://github.com/Samsung/TizenFX","homepage":"","size":193655,"stargazers_count":58,"watchers_count":58,"language":"C#","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":119,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":14,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":119,"open_issues":14,"watchers":58,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/827"},"html":{"href":"https://github.com/Samsung/TizenFX/pull/827"},"issue":{"href":"https://api.github.com/repos/Samsung/TizenFX/issues/827"},"comments":{"href":"https://api.github.com/repos/Samsung/TizenFX/issues/827/comments"},"review_comments":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/827/comments"},"review_comment":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Samsung/TizenFX/pulls/827/commits"},"statuses":{"href":"https://api.github.com/repos/Samsung/TizenFX/statuses/8b5c24e6c53b0e757f26497f8edafb50dc8ff1cb"}},"author_association":"NONE"}}
other: {"actor":{"display_login":"pvschakradhar"}}