From b92c022320605774917532d5a3d98994756f90c6 Mon Sep 17 00:00:00 2001 From: Ankur Date: Thu, 26 May 2016 16:03:12 +0530 Subject: [PATCH] Adding Other sensor classes and tct-test folder for accelerometer -Added the Test case file for accelerometer -Added other sensor files (apart from accelerometer) Patch-Set-2: Minor Changes Patch-Set-3: Minor CHanges Patch-Set-4: Added Lib fodler to tct Patch-Set-5: Bug Fixing for tct passing. Now 17/18 passing. Set Sensor.MaxBatchLatency not passing Patch-Set-6: Changed .Net Framwork Version to 4.5 Patch-Set-7: Removed MaxBatchLatency TCT as Batch Mode is currently not suported by sensor framework Patch-Set-8: Added Log.Info and Log.Error Tags and removed extra whitespace Patch-Set-9: Minor changes as per reviews/comments Patch-Set-10: Added GravitySensor, LinearAccelerationSensor, Magnetometer, RotationVectorSensor, OrientationSensor, Gyroscope Patch-Set-11: Added LightSensor, ProximitySensor, PressureSensor, UltravioletSensor, TemperatureSensor, HumiditySensor, HeartRateSensor Patch-Set-12: Added UncalibratedGyroscope, UncalibratedMagnetometer, GyroscopeRV, MagnetometerRV. Updates as per reviews/comments. Patch-Set-13: Added Pedometer and SleepMonitor, Renamed Sensor folder to Tizen.System.Senosr, Enumerations.cs to SensorEnumerations.cs, Removed sln file, Added LICENSE file, Renamed EventArgs classes Patch-Set-14: Changes as per reivew Patch-Set-15: Removed Tizen.System.Sensor/obj/ Patch-Set-16: Timestamp type changed to TimeSpan Patch-Set-17: Renmaing Timestamp to TimeSpan Patch-Set-18: Minor Changes Patch-Set-19: Updated Commit message Patch-Set-20: New tpk file for tct Patch-Set-21: Renamed dll from Tizen.System.Sensor.dll to Tizen.System.dll and linked snk file Patch-Set-22: Added logs to tct, updated new dll for Tizen.System.dll, Added tct for LinearAcceleration, Gravity and Proximity Sensors Patch-Set-23: Updated tpk file Patch-Set-24: Tested LinearAccel, Proximity and Gravity Sensor. Updated tpk file.. tct 62/64 working Patch-Set-25: Changes by SeungHun Choi - Bug Fixing for TCT Patch-Set-26: Minor Changes - removed extra whitespace signed-off-by:"Ankur Garg " Change-Id: I6dd6f8ca439c57f0ac8576036df39ce547adbaa6 --- LICENSE | 202 +++ Tizen.System.Sensor.sln | 53 - Tizen.System.Sensor.userprefs | 29 - .../Tizen.System.Sensor.csproj | 187 ++- .../AccelerometerDataUpdatedEventArgs.cs} | 4 +- .../GravitySensorDataUpdatedEventArgs.cs | 40 + .../GyroscopeDataUpdatedEventArgs.cs | 40 + ...otationVectorSensorDataUpdatedEventArgs.cs | 52 + .../HeartRateMonitorDataUpdatedEventArgs.cs | 28 + .../HumiditySensorDataUpdatedEventArgs.cs | 28 + .../LightSensorDataUpdatedEventArgs.cs | 28 + ...rAccelerationSensorDataUpdatedEventArgs.cs | 40 + .../MagnetometerDataUpdatedEventArgs.cs | 40 + ...otationVectorSensorDataUpdatedEventArgs.cs | 52 + .../OrientationSensorDataUpdatedEventArgs.cs | 40 + .../PedometerDataUpdatedEventArgs.cs | 70 + .../PressureSensorDataUpdatedEventArgs.cs | 28 + .../ProximitySensorDataUpdatedEventArgs.cs | 28 + ...otationVectorSensorDataUpdatedEventArgs.cs | 52 + .../SensorAccuracyChangedEventArgs.cs | 6 +- .../SleepMonitorDataUpdatedEventArgs.cs | 28 + .../TemperatureSensorDataUpdatedEventArgs.cs | 28 + .../UltravioletSensorDataUpdatedEventArgs.cs | 28 + ...calibratedGyroscopeDataUpdatedEventArgs.cs | 58 + ...ibratedMagnetometerDataUpdatedEventArgs.cs | 58 + .../Plugins/Accelerometer.cs | 36 +- .../Plugins/GravitySensor.cs | 184 +++ .../Tizen.System.Sensor/Plugins/Gyroscope.cs | 137 ++ .../Plugins/GyroscopeRotationVectorSensor.cs | 149 ++ .../Plugins/HeartRateMonitor.cs | 125 ++ .../Plugins/HumiditySensor.cs | 125 ++ .../Plugins/LightSensor.cs | 125 ++ .../Plugins/LinearAccelerationSensor.cs | 184 +++ .../Plugins/Magnetometer.cs | 184 +++ .../MagnetometerRotationVectorSensor.cs | 196 +++ .../Plugins/OrientationSensor.cs | 184 +++ .../Tizen.System.Sensor/Plugins/Pedometer.cs | 167 +++ .../Plugins/PressureSensor.cs | 125 ++ .../Plugins/ProximitySensor.cs | 125 ++ .../Plugins/RotationVectorSensor.cs | 196 +++ .../Plugins/SleepMonitor.cs | 125 ++ .../Plugins/TemperatureSensor.cs | 125 ++ .../Plugins/UltravioletSensor.cs | 125 ++ .../Plugins/UncalibratedGyroscope.cs | 155 +++ .../Plugins/UncalibratedMagnetometer.cs | 202 +++ .../{Sensor => Tizen.System.Sensor}/Sensor.cs | 138 +- .../SensorEnumerations.cs} | 33 +- .../SensorErrorFactory.cs | 24 +- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6013 -> 0 bytes packaging/csapi-system.sensor.spec | 2 +- tct-system-sensor-tizen-tests/Makefile | 48 + .../Properties/AssemblyInfo.cs | 36 + tct-system-sensor-tizen-tests/ReadMe.md | 15 + tct-system-sensor-tizen-tests/TCTCert.p12 | Bin 0 -> 2429 bytes .../bin/tct-system-sensor-tizen-tests.exe | Bin 0 -> 48128 bytes .../lib/TestFramework.dll | Bin 0 -> 39936 bytes .../lib/Tizen.Applications.dll | Bin 0 -> 66560 bytes .../lib/Tizen.Internals.dll | Bin 0 -> 9216 bytes .../lib/Tizen.System.dll | Bin 0 -> 87040 bytes tct-system-sensor-tizen-tests/lib/Tizen.dll | Bin 0 -> 7168 bytes .../org.test.tizen.system.sensor.tpk | Bin 0 -> 297515 bytes tct-system-sensor-tizen-tests/res/ReadMe.md | 27 + .../res/Result/System.xml | 1107 +++++++++++++++ .../res/Result/style/application.js | 194 +++ .../res/Result/style/back_top.png | Bin 0 -> 1122 bytes .../res/Result/style/blue.jpg | Bin 0 -> 954 bytes .../res/Result/style/gray.jpg | Bin 0 -> 866 bytes .../res/Result/style/jquery.min.js | 4 + .../res/Result/style/orange.jpg | Bin 0 -> 934 bytes .../res/Result/style/popup.js | 1215 +++++++++++++++++ .../res/Result/style/red.jpg | Bin 0 -> 937 bytes .../res/Result/style/summary.xsl | 358 +++++ .../res/Result/style/testresult.xsl | 571 ++++++++ .../res/Result/style/tests.css | 195 +++ .../res/Result/summary.xml | 21 + tct-system-sensor-tizen-tests/res/install.sh | 9 + tct-system-sensor-tizen-tests/res/pull.sh | 4 + tct-system-sensor-tizen-tests/res/push.sh | 2 + tct-system-sensor-tizen-tests/res/run.sh | 4 + tct-system-sensor-tizen-tests/src/Program.cs | 29 + .../src/Testcase/TSAccelerometer.cs | 400 ++++++ .../src/Testcase/TSGravitySensor.cs | 398 ++++++ .../Testcase/TSLinearAccelerationSensor.cs | 396 ++++++ .../src/Testcase/TSProximitySensor.cs | 396 ++++++ .../tct-system-sensor-tizen-tests.csproj | 104 ++ .../tizen-manifest.xml | 9 + 86 files changed, 9750 insertions(+), 210 deletions(-) create mode 100644 LICENSE delete mode 100644 Tizen.System.Sensor.sln delete mode 100644 Tizen.System.Sensor.userprefs rename Tizen.System.Sensor/{Sensor/EventArgs/AccelerometerChangedEventArgs.cs => Tizen.System.Sensor/EventArgs/AccelerometerDataUpdatedEventArgs.cs} (89%) create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GravitySensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeRotationVectorSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HeartRateMonitorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HumiditySensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LightSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LinearAccelerationSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerRotationVectorSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/OrientationSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PedometerDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PressureSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/ProximitySensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/RotationVectorSensorDataUpdatedEventArgs.cs rename Tizen.System.Sensor/{Sensor => Tizen.System.Sensor}/EventArgs/SensorAccuracyChangedEventArgs.cs (82%) create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SleepMonitorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/TemperatureSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UltravioletSensorDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedGyroscopeDataUpdatedEventArgs.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedMagnetometerDataUpdatedEventArgs.cs rename Tizen.System.Sensor/{Sensor => Tizen.System.Sensor}/Plugins/Accelerometer.cs (75%) create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GravitySensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Gyroscope.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GyroscopeRotationVectorSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HeartRateMonitor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HumiditySensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LightSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LinearAccelerationSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Magnetometer.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/MagnetometerRotationVectorSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/OrientationSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Pedometer.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/PressureSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/ProximitySensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/RotationVectorSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/SleepMonitor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/TemperatureSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UltravioletSensor.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedGyroscope.cs create mode 100644 Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedMagnetometer.cs rename Tizen.System.Sensor/{Sensor => Tizen.System.Sensor}/Sensor.cs (66%) rename Tizen.System.Sensor/{Sensor/Enumerations.cs => Tizen.System.Sensor/SensorEnumerations.cs} (87%) mode change 100755 => 100644 rename Tizen.System.Sensor/{Sensor => Tizen.System.Sensor}/SensorErrorFactory.cs (80%) delete mode 100644 Tizen.System.Sensor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100755 tct-system-sensor-tizen-tests/Makefile create mode 100644 tct-system-sensor-tizen-tests/Properties/AssemblyInfo.cs create mode 100755 tct-system-sensor-tizen-tests/ReadMe.md create mode 100644 tct-system-sensor-tizen-tests/TCTCert.p12 create mode 100755 tct-system-sensor-tizen-tests/bin/tct-system-sensor-tizen-tests.exe create mode 100644 tct-system-sensor-tizen-tests/lib/TestFramework.dll create mode 100644 tct-system-sensor-tizen-tests/lib/Tizen.Applications.dll create mode 100755 tct-system-sensor-tizen-tests/lib/Tizen.Internals.dll create mode 100644 tct-system-sensor-tizen-tests/lib/Tizen.System.dll create mode 100755 tct-system-sensor-tizen-tests/lib/Tizen.dll create mode 100644 tct-system-sensor-tizen-tests/org.test.tizen.system.sensor.tpk create mode 100755 tct-system-sensor-tizen-tests/res/ReadMe.md create mode 100644 tct-system-sensor-tizen-tests/res/Result/System.xml create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/application.js create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/back_top.png create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/blue.jpg create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/gray.jpg create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/jquery.min.js create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/orange.jpg create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/popup.js create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/red.jpg create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/summary.xsl create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/testresult.xsl create mode 100755 tct-system-sensor-tizen-tests/res/Result/style/tests.css create mode 100644 tct-system-sensor-tizen-tests/res/Result/summary.xml create mode 100755 tct-system-sensor-tizen-tests/res/install.sh create mode 100755 tct-system-sensor-tizen-tests/res/pull.sh create mode 100755 tct-system-sensor-tizen-tests/res/push.sh create mode 100755 tct-system-sensor-tizen-tests/res/run.sh create mode 100755 tct-system-sensor-tizen-tests/src/Program.cs create mode 100644 tct-system-sensor-tizen-tests/src/Testcase/TSAccelerometer.cs create mode 100644 tct-system-sensor-tizen-tests/src/Testcase/TSGravitySensor.cs create mode 100644 tct-system-sensor-tizen-tests/src/Testcase/TSLinearAccelerationSensor.cs create mode 100644 tct-system-sensor-tizen-tests/src/Testcase/TSProximitySensor.cs create mode 100644 tct-system-sensor-tizen-tests/tct-system-sensor-tizen-tests.csproj create mode 100755 tct-system-sensor-tizen-tests/tizen-manifest.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/Tizen.System.Sensor.sln b/Tizen.System.Sensor.sln deleted file mode 100644 index 7e415e3..0000000 --- a/Tizen.System.Sensor.sln +++ /dev/null @@ -1,53 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.Sensor", "Tizen.System.Sensor\Tizen.System.Sensor.csproj", "{CB655C6A-F73B-448E-913C-CA4DCBC5E401}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Internals", "..\tizen\Tizen.Internals\Tizen.Internals.csproj", "{B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}.Release|Any CPU.Build.0 = Release|Any CPU - {CB655C6A-F73B-448E-913C-CA4DCBC5E401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB655C6A-F73B-448E-913C-CA4DCBC5E401}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB655C6A-F73B-448E-913C-CA4DCBC5E401}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB655C6A-F73B-448E-913C-CA4DCBC5E401}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = Tizen.System.Sensor\Tizen.System.Sensor.csproj - Policies = $0 - $0.DotNetNamingPolicy = $1 - $1.DirectoryNamespaceAssociation = None - $1.ResourceNamePolicy = FileFormatDefault - $0.TextStylePolicy = $2 - $2.inheritsSet = null - $2.scope = text/x-csharp - $0.CSharpFormattingPolicy = $3 - $3.inheritsSet = Mono - $3.inheritsScope = text/x-csharp - $3.scope = text/x-csharp - $0.StandardHeader = $4 - $4.Text = - $4.IncludeInNewFiles = True - $0.TextStylePolicy = $5 - $5.EolMarker = Unix - $5.inheritsSet = VisualStudio - $5.inheritsScope = text/plain - $5.scope = text/plain - $0.TextStylePolicy = $6 - $6.inheritsSet = Mono - $6.inheritsScope = text/plain - $6.scope = application/xml - $0.XmlFormattingPolicy = $7 - $7.inheritsSet = Mono - $7.inheritsScope = application/xml - $7.scope = application/xml - EndGlobalSection -EndGlobal diff --git a/Tizen.System.Sensor.userprefs b/Tizen.System.Sensor.userprefs deleted file mode 100644 index 2a833c1..0000000 --- a/Tizen.System.Sensor.userprefs +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor.csproj b/Tizen.System.Sensor/Tizen.System.Sensor.csproj index 4856c17..4d15d61 100644 --- a/Tizen.System.Sensor/Tizen.System.Sensor.csproj +++ b/Tizen.System.Sensor/Tizen.System.Sensor.csproj @@ -1,67 +1,122 @@ - - - - Debug - AnyCPU - 10.0.0 - 2.0 - {CB655C6A-F73B-448E-913C-CA4DCBC5E401} - Library - Tizen.System.Sensor - Tizen.System.Sensor - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - - - none - false - bin\Release - prompt - 4 - false - - - - - - - - - - - - - - - - - - - {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0} - Tizen.Internals - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {CB655C6A-F73B-448E-913C-CA4DCBC5E401} + Library + Tizen.System.Sensor + Tizen.System + v4.5 + + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + false + + + none + false + bin\Release + prompt + 4 + false + false + + + true + + + Tizen.System.Sensor.snk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {B9AA1CB2-F72D-4A30-A33B-A20C850A38A0} + Tizen.Internals + + + {7659ca59-410d-41a1-9841-586e88bc78c9} + Tizen + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tizen.System.Sensor/Sensor/EventArgs/AccelerometerChangedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/AccelerometerDataUpdatedEventArgs.cs similarity index 89% rename from Tizen.System.Sensor/Sensor/EventArgs/AccelerometerChangedEventArgs.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/AccelerometerDataUpdatedEventArgs.cs index 84d2cee..0089c77 100644 --- a/Tizen.System.Sensor/Sensor/EventArgs/AccelerometerChangedEventArgs.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/AccelerometerDataUpdatedEventArgs.cs @@ -13,9 +13,9 @@ namespace Tizen.System.Sensor /// /// Accelerometer changed event arguments. Class for storing the data returned by accelerometer /// - public class AccelerometerChangedEventArgs : EventArgs + public class AccelerometerDataUpdatedEventArgs : EventArgs { - internal AccelerometerChangedEventArgs(float[] values) + internal AccelerometerDataUpdatedEventArgs(float[] values) { X = values[0]; Y = values[1]; diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GravitySensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GravitySensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..ed24a8f --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GravitySensorDataUpdatedEventArgs.cs @@ -0,0 +1,40 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// GravitySensor changed event arguments. Class for storing the data returned by gravity sensor + /// + public class GravitySensorDataUpdatedEventArgs : EventArgs + { + internal GravitySensorDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + } + + /// + /// Gets the X component of the gravity. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the gravity. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the gravity. + /// + public float Z { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeDataUpdatedEventArgs.cs new file mode 100644 index 0000000..1cf91d9 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeDataUpdatedEventArgs.cs @@ -0,0 +1,40 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Gyroscope changed event arguments. Class for storing the data returned by gyroscope + /// + public class GyroscopeDataUpdatedEventArgs : EventArgs + { + internal GyroscopeDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + } + + /// + /// Gets the X component of the gyroscope data. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the gyroscope data. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the gyroscope data. + /// + public float Z { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeRotationVectorSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeRotationVectorSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..a1cf5ed --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/GyroscopeRotationVectorSensorDataUpdatedEventArgs.cs @@ -0,0 +1,52 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// GyroscopeRotationVectorSensor changed event arguments. Class for storing the data returned by gyroscope rotation vector sensor + /// + public class GyroscopeRotationVectorSensorDataUpdatedEventArgs : EventArgs + { + internal GyroscopeRotationVectorSensorDataUpdatedEventArgs(float[] values, SensorDataAccuracy accuracy) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + W = values[3]; + Accuracy = accuracy; + } + + /// + /// Gets the X component of the gyroscope rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the gyroscope rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the gyroscope rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the gyroscope rotation vector. + /// + public float W { get; private set; } + + /// + /// Gets the accuracy of the gyroscope rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HeartRateMonitorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HeartRateMonitorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..39f9921 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HeartRateMonitorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// HeartRateMonitor changed event arguments. Class for storing the data returned by heart rate monitor + /// + public class HeartRateMonitorDataUpdatedEventArgs : EventArgs + { + internal HeartRateMonitorDataUpdatedEventArgs(int heartRate) + { + HeartRate = heartRate; + } + + /// + /// Gets the value of the heartRate. + /// + public int HeartRate { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HumiditySensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HumiditySensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..5fd0d7c --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/HumiditySensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// HumiditySensor changed event arguments. Class for storing the data returned by humidity sensor + /// + public class HumiditySensorDataUpdatedEventArgs : EventArgs + { + internal HumiditySensorDataUpdatedEventArgs(float humidity) + { + Humidity = humidity; + } + + /// + /// Gets the value of the humidity. + /// + public float Humidity { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LightSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LightSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..d0d1896 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LightSensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// LightSensor changed event arguments. Class for storing the data returned by light sensor + /// + public class LightSensorDataUpdatedEventArgs : EventArgs + { + internal LightSensorDataUpdatedEventArgs(float level) + { + Level = level; + } + + /// + /// Gets the level of the light. + /// + public float Level { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LinearAccelerationSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LinearAccelerationSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..cf531ca --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/LinearAccelerationSensorDataUpdatedEventArgs.cs @@ -0,0 +1,40 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// LinearAccelerationSensor changed event arguments. Class for storing the data returned by linear acceleration sensor + /// + public class LinearAccelerationSensorDataUpdatedEventArgs : EventArgs + { + internal LinearAccelerationSensorDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + } + + /// + /// Gets the X component of the linear acceleration. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the linear acceleration. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the linear acceleration. + /// + public float Z { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerDataUpdatedEventArgs.cs new file mode 100644 index 0000000..8ca789e --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerDataUpdatedEventArgs.cs @@ -0,0 +1,40 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Magnetometer changed event arguments. Class for storing the data returned by magnetometer sensor + /// + public class MagnetometerDataUpdatedEventArgs : EventArgs + { + internal MagnetometerDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + } + + /// + /// Gets the X component of the magnetometer. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the magnetometer. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the magnetometer. + /// + public float Z { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerRotationVectorSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerRotationVectorSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..abb096e --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/MagnetometerRotationVectorSensorDataUpdatedEventArgs.cs @@ -0,0 +1,52 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// MagnetometerRotationVectorSensor changed event arguments. Class for storing the data returned by magnetometer rotation vector sensor + /// + public class MagnetometerRotationVectorSensorDataUpdatedEventArgs : EventArgs + { + internal MagnetometerRotationVectorSensorDataUpdatedEventArgs(float[] values, SensorDataAccuracy accuracy) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + W = values[3]; + Accuracy = accuracy; + } + + /// + /// Gets the X component of the magnetometer rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the magnetometer rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the magnetometer rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the magnetometer rotation vector. + /// + public float W { get; private set; } + + /// + /// Gets the accuracy of the magnetometer rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/OrientationSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/OrientationSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..a95f377 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/OrientationSensorDataUpdatedEventArgs.cs @@ -0,0 +1,40 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// OrientationSensor changed event arguments. Class for storing the data returned by orientation sensor + /// + public class OrientationSensorDataUpdatedEventArgs : EventArgs + { + internal OrientationSensorDataUpdatedEventArgs(float[] values) + { + Azimuth = values[0]; + Pitch = values[1]; + Roll = values[2]; + } + + /// + /// Gets the azimuth component of the orientation. + /// + public float Azimuth { get; private set; } + + /// + /// Gets the pitch component of the orientation. + /// + public float Pitch { get; private set; } + + /// + /// Gets the roll component of the orientation. + /// + public float Roll { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PedometerDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PedometerDataUpdatedEventArgs.cs new file mode 100644 index 0000000..5b77d98 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PedometerDataUpdatedEventArgs.cs @@ -0,0 +1,70 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Pedometer changed event arguments. Class for storing the data returned by pedometer + /// + public class PedometerDataUpdatedEventArgs : EventArgs + { + internal PedometerDataUpdatedEventArgs(float[] values) + { + StepCount = (int) values[0]; + WalkStepCount = (int) values[1]; + RunStepCount = (int) values[2]; + MovingDistance = values[3]; + CalorieBurned = values[4]; + LastSpeed = values[5]; + LastSteppingFrequency = values[6]; + LastStepStatus = (PedometerState) values[7]; + } + + /// + /// Gets the step count + /// + public int StepCount { get; private set; } + + /// + /// Gets the walking step count + /// + public int WalkStepCount { get; private set; } + + /// + /// Gets the running step count + /// + public int RunStepCount { get; private set; } + + /// + /// Gets the moving distance + /// + public float MovingDistance { get; private set; } + + /// + /// Gets the calorie burned + /// + public float CalorieBurned { get; private set; } + + /// + /// Gets the last speed + /// + public float LastSpeed { get; private set; } + + /// + /// Gets the last stepping frequency + /// + public float LastSteppingFrequency { get; private set; } + + /// + /// Gets the last step status + /// + public PedometerState LastStepStatus { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PressureSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PressureSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..b6f6e4a --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/PressureSensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// PressureSensor changed event arguments. Class for storing the data returned by pressure sensor + /// + public class PressureSensorDataUpdatedEventArgs : EventArgs + { + internal PressureSensorDataUpdatedEventArgs(float pressure) + { + Pressure = pressure; + } + + /// + /// Gets the value of the pressure. + /// + public float Pressure { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/ProximitySensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/ProximitySensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..a959ad4 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/ProximitySensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// ProximitySensor changed event arguments. Class for storing the data returned by proximity sensor + /// + public class ProximitySensorDataUpdatedEventArgs : EventArgs + { + internal ProximitySensorDataUpdatedEventArgs(float proximity) + { + Proximity = (ProximitySensorState) proximity; + } + + /// + /// Gets the proximity state. + /// + public ProximitySensorState Proximity { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/RotationVectorSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/RotationVectorSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..8111981 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/RotationVectorSensorDataUpdatedEventArgs.cs @@ -0,0 +1,52 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// RotationVectorSensor changed event arguments. Class for storing the data returned by rotation vector sensor + /// + public class RotationVectorSensorDataUpdatedEventArgs : EventArgs + { + internal RotationVectorSensorDataUpdatedEventArgs(float[] values, SensorDataAccuracy accuracy) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + W = values[3]; + Accuracy = accuracy; + } + + /// + /// Gets the X component of the rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the rotation vector. + /// + public float W { get; private set;} + + /// + /// Gets the accuracy of the rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs similarity index 82% rename from Tizen.System.Sensor/Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs index 126b555..5846d40 100644 --- a/Tizen.System.Sensor/Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SensorAccuracyChangedEventArgs.cs @@ -15,16 +15,16 @@ namespace Tizen.System.Sensor /// public class SensorAccuracyChangedEventArgs : EventArgs { - internal SensorAccuracyChangedEventArgs(DateTime timestamp, SensorDataAccuracy accuracy) + internal SensorAccuracyChangedEventArgs(TimeSpan timespan, SensorDataAccuracy accuracy) { - TimeStamp = timestamp; + TimeSpan = timespan; Accuracy = accuracy; } /// /// Gets the time stamp. /// - public DateTime TimeStamp { get; private set; } + public TimeSpan TimeSpan { get; private set; } /// /// Gets the accuracy. diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SleepMonitorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SleepMonitorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..2a6d5ab --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/SleepMonitorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// SleepMonitor changed event arguments. Class for storing the data returned by sleep monitor + /// + public class SleepMonitorDataUpdatedEventArgs : EventArgs + { + internal SleepMonitorDataUpdatedEventArgs(int sleepState) + { + SleepState = (SleepMonitorState) sleepState; + } + + /// + /// Gets the value of the sleep state. + /// + public SleepMonitorState SleepState { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/TemperatureSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/TemperatureSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..8e746bf --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/TemperatureSensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// TemperatureSensor changed event arguments. Class for storing the data returned by temperature sensor + /// + public class TemperatureSensorDataUpdatedEventArgs : EventArgs + { + internal TemperatureSensorDataUpdatedEventArgs(float temperature) + { + Temperature = temperature; + } + + /// + /// Gets the value of the temperature. + /// + public float Temperature { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UltravioletSensorDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UltravioletSensorDataUpdatedEventArgs.cs new file mode 100644 index 0000000..d6a140d --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UltravioletSensorDataUpdatedEventArgs.cs @@ -0,0 +1,28 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UltravioletSensor changed event arguments. Class for storing the data returned by ultraviolet sensor + /// + public class UltravioletSensorDataUpdatedEventArgs : EventArgs + { + internal UltravioletSensorDataUpdatedEventArgs(float ultravioletIndex) + { + UltravioletIndex = ultravioletIndex; + } + + /// + /// Gets the value of the ultraviolet index. + /// + public float UltravioletIndex { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedGyroscopeDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedGyroscopeDataUpdatedEventArgs.cs new file mode 100644 index 0000000..9e44476 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedGyroscopeDataUpdatedEventArgs.cs @@ -0,0 +1,58 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UncalibratedGyroscope changed event arguments. Class for storing the data returned by uncalibrated gyroscope + /// + public class UncalibratedGyroscopeDataUpdatedEventArgs : EventArgs + { + internal UncalibratedGyroscopeDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + BiasX = values[3]; + BiasY = values[4]; + BiasZ = values[5]; + } + + /// + /// Gets the X component of the uncalibrated gyroscope data. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the uncalibrated gyroscope data. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the uncalibrated gyroscope data. + /// + public float Z { get; private set; } + + /// + /// Gets the BiasX component of the uncalibrated gyroscope data. + /// + public float BiasX { get; private set; } + + /// + /// Gets the BiasY component of the uncalibrated gyroscope data. + /// + public float BiasY { get; private set; } + + /// + /// Gets the BiasZ component of the uncalibrated gyroscope data. + /// + public float BiasZ { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedMagnetometerDataUpdatedEventArgs.cs b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedMagnetometerDataUpdatedEventArgs.cs new file mode 100644 index 0000000..1227e98 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/EventArgs/UncalibratedMagnetometerDataUpdatedEventArgs.cs @@ -0,0 +1,58 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UncalibratedMagnetometer changed event arguments. Class for storing the data returned by uncalibrated magnetometer + /// + public class UncalibratedMagnetometerDataUpdatedEventArgs : EventArgs + { + internal UncalibratedMagnetometerDataUpdatedEventArgs(float[] values) + { + X = values[0]; + Y = values[1]; + Z = values[2]; + BiasX = values[3]; + BiasY = values[4]; + BiasZ = values[5]; + } + + /// + /// Gets the X component of the uncalibrated magnetometer data. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the uncalibrated magnetometer data. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the uncalibrated magnetometer data. + /// + public float Z { get; private set; } + + /// + /// Gets the BiasX component of the uncalibrated magnetometer data. + /// + public float BiasX { get; private set; } + + /// + /// Gets the BiasY component of the uncalibrated magnetometer data. + /// + public float BiasY { get; private set; } + + /// + /// Gets the BiasZ component of the uncalibrated magnetometer data. + /// + public float BiasZ { get; private set; } + } +} \ No newline at end of file diff --git a/Tizen.System.Sensor/Sensor/Plugins/Accelerometer.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Accelerometer.cs similarity index 75% rename from Tizen.System.Sensor/Sensor/Plugins/Accelerometer.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Accelerometer.cs index a0f9d3c..f583f1e 100644 --- a/Tizen.System.Sensor/Sensor/Plugins/Accelerometer.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Accelerometer.cs @@ -15,8 +15,6 @@ namespace Tizen.System.Sensor /// /// public class Accelerometer : Sensor { - private uint _defaultInterval = 0; - /// /// Gets the X component of the acceleration. /// @@ -39,6 +37,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Checking if the Accelerometer sensor is supported"); return CheckIfSupported(); } } @@ -50,6 +49,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the count of accelerometer sensors"); return GetCount(); } } @@ -62,10 +62,10 @@ namespace Tizen.System.Sensor /// public Accelerometer(int index = 0) : base(index) { - Interval = _defaultInterval; + Log.Info(Globals.LogTag, "Creating Accelerometer object"); } - protected override SensorType GetSensorType() + internal override SensorType GetSensorType() { return SensorType.Accelerometer; } @@ -74,14 +74,17 @@ namespace Tizen.System.Sensor /// Event Handler for storing the callback functions for event corresponding to change in accelerometer sensor data. /// - public event EventHandler DataUpdated; + public event EventHandler DataUpdated; private static bool CheckIfSupported() { bool isSupported; int error = Interop.SensorManager.SensorIsSupported(SensorType.Accelerometer, out isSupported); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if accelerometer sensor is supported"); isSupported = false; + } return isSupported; } @@ -90,8 +93,11 @@ namespace Tizen.System.Sensor IntPtr list; int count; int error = Interop.SensorManager.GetSensorList(SensorType.Accelerometer, out list, out count); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for accelerometer"); count = 0; + } else Interop.Libc.Free(list); return count; @@ -100,26 +106,32 @@ namespace Tizen.System.Sensor protected override void EventListenStart() { int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for accelerometer sensor"); throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for accelerometer"); + } } protected override void EventListenStop() { int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for accelerometer sensor"); throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for accelerometer"); + } } private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) { Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); - Timestamp = sensorData.timestamp; + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); X = sensorData.values[0]; Y = sensorData.values[1]; Z = sensorData.values[2]; - DataUpdated?.Invoke(this, new AccelerometerChangedEventArgs(sensorData.values)); + DataUpdated?.Invoke(this, new AccelerometerDataUpdatedEventArgs(sensorData.values)); } } -} \ No newline at end of file +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GravitySensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GravitySensor.cs new file mode 100644 index 0000000..9d73e7a --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GravitySensor.cs @@ -0,0 +1,184 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// GravitySensor Class. Used for registering callbacks for gravity sensor and getting gravity data + /// /// + public class GravitySensor : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the gravity. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the gravity. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the gravity. + /// + public float Z { get; private set; } + + /// + /// Returns true or false based on whether gravity sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the GravitySensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of gravity sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of gravity sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular gravity sensor in case of multiple sensors + /// + public GravitySensor (int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating GravitySensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.GravitySensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in gravity sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.GravitySensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if gravity sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.GravitySensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for gravity"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for gravity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for gravity"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for gravity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for gravity"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for gravity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for gravity"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for gravity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for gravity"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + + DataUpdated?.Invoke(this, new GravitySensorDataUpdatedEventArgs(sensorData.values)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Gyroscope.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Gyroscope.cs new file mode 100644 index 0000000..44dab8b --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Gyroscope.cs @@ -0,0 +1,137 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Gyroscope Sensor Class. Used for registering callbacks for gyroscope and getting gyroscope data + /// /// + public class Gyroscope : Sensor + { + /// + /// Gets the X component of the acceleration. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the acceleration. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the acceleration. + /// + public float Z { get; private set; } + + /// + /// Returns true or false based on whether gyroscope sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the Gyroscope sensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of gyroscope sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of gyroscope sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular gyroscope sensor in case of multiple sensors + /// + public Gyroscope(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating Gyroscope object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.Gyroscope; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in gyroscope sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.Gyroscope, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if gyroscope sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.Gyroscope, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for gyroscope"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for gyroscope sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for gyroscope"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for gyroscope sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for gyroscope"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + + DataUpdated?.Invoke(this, new GyroscopeDataUpdatedEventArgs(sensorData.values)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GyroscopeRotationVectorSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GyroscopeRotationVectorSensor.cs new file mode 100644 index 0000000..cc0a106 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/GyroscopeRotationVectorSensor.cs @@ -0,0 +1,149 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// GyroscopeRotationVectorSensor Class. Used for registering callbacks for gyroscope rotation vector sensor and getting gyroscope rotation vector data + /// /// + public class GyroscopeRotationVectorSensor : Sensor + { + /// + /// Gets the X component of the gyroscope rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the gyroscope rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the gyroscope rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the gyroscope rotation vector. + /// + public float W { get; private set; } + + /// + /// Gets the Accuracy of the gyroscope rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + + /// + /// Returns true or false based on whether gyroscope rotation vector sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the GyroscopeRotationVectorSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of gyroscope rotation vector sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of gyroscope rotation vector sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular gyroscope rotation vector sensor in case of multiple sensors + /// + public GyroscopeRotationVectorSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating GyroscopeRotationVectorSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.GyroscopeRotationVectorSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in gyroscope rotation vector sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.GyroscopeRotationVectorSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if gyroscope rotation vector sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.GyroscopeRotationVectorSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for gyroscope rotation vector"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for gyroscope rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for gyroscope rotation vector"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for gyroscope rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for gyroscope rotation vector"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + Accuracy = sensorData.accuracy; + + DataUpdated?.Invoke(this, new GyroscopeRotationVectorSensorDataUpdatedEventArgs(sensorData.values, sensorData.accuracy)); + } + + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HeartRateMonitor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HeartRateMonitor.cs new file mode 100644 index 0000000..3cb37b1 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HeartRateMonitor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// HeartRateMonitor Class. Used for registering callbacks for heart rate monitor and getting heart rate data + /// /// + public class HeartRateMonitor : Sensor + { + /// + /// Gets the value of the heart rate monitor. + /// + public int HeartRate { get; private set; } + + /// + /// Returns true or false based on whether heart rate monitor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the HeartRateMonitor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of heart rate monitors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of heart rate monitors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular heart rate monitor in case of multiple sensors + /// + public HeartRateMonitor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating HeartRateMonitor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.HeartRateMonitor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in heart rate monitor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.HeartRateMonitor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if heart rate monitor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.HeartRateMonitor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for heart rate"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for heart rate monitor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for heart rate"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for heart rate monitor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for heart rate"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + HeartRate = (int)sensorData.values[0]; + + DataUpdated?.Invoke(this, new HeartRateMonitorDataUpdatedEventArgs((int)sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HumiditySensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HumiditySensor.cs new file mode 100644 index 0000000..cb0dced --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/HumiditySensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// HumiditySensor Class. Used for registering callbacks for humidity sensor and getting humidity data + /// /// + public class HumiditySensor : Sensor + { + /// + /// Gets the value of the humidity sensor. + /// + public float Humidity { get; private set; } + + /// + /// Returns true or false based on whether humidity sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the HumiditySensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of humidity sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of humidity sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular humidity sensor in case of multiple sensors + /// + public HumiditySensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating HumiditySensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.HumiditySensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in humidity sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.HumiditySensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if humidity sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.HumiditySensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for humidity"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for humidity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for humidity"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for humidity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for humidity"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Humidity = sensorData.values[0]; + + DataUpdated?.Invoke(this, new HumiditySensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LightSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LightSensor.cs new file mode 100644 index 0000000..edc401c --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LightSensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// LightSensor Class. Used for registering callbacks for light sensor and getting light data + /// /// + public class LightSensor : Sensor + { + /// + /// Gets the Level of the light. + /// + public float Level { get; private set; } + + /// + /// Returns true or false based on whether light sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the LightSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of light sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of light sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular light sensor in case of multiple sensors + /// + public LightSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating LightSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.LightSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in light sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.LightSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if light sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.LightSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for light"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for light sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for light"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for light sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for light"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Level = sensorData.values[0]; + + DataUpdated?.Invoke(this, new LightSensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LinearAccelerationSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LinearAccelerationSensor.cs new file mode 100644 index 0000000..8a24843 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/LinearAccelerationSensor.cs @@ -0,0 +1,184 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// LinearAccelerationSensor Class. Used for registering callbacks for linear acceleration sensor and getting linear acceleration data + /// /// + public class LinearAccelerationSensor : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the linear acceleration. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the linear acceleration. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the linear acceleration. + /// + public float Z { get; private set; } + + /// + /// Returns true or false based on whether linear acceleration sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the LinearAccelerationSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of linear acceleration sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of linear acceleration sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular linear acceleration sensor in case of multiple sensors + /// + public LinearAccelerationSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating LinearAccelerationSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.LinearAccelerationSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in linear acceleration sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.LinearAccelerationSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if linear acceleration sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.LinearAccelerationSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for linear acceleration sensor"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for linear acceleration sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for linear acceleration sensor"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for linear acceleration sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for linear acceleration"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for linear acceleration sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for linear acceleration sensor"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for linear acceleration sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for linear acceleration sensor"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + + DataUpdated?.Invoke(this, new LinearAccelerationSensorDataUpdatedEventArgs(sensorData.values)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Magnetometer.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Magnetometer.cs new file mode 100644 index 0000000..b2fd4c8 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Magnetometer.cs @@ -0,0 +1,184 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Magnetometer Class. Used for registering callbacks for magnetometer and getting magnetometer data + /// /// + public class Magnetometer : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the magnetometer. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the magnetometer. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the magnetometer. + /// + public float Z { get; private set; } + + /// + /// Returns true or false based on whether magnetometer is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the Magnetometer is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of magnetometers available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of magnetometers"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular magnetometer in case of multiple sensors + /// + public Magnetometer(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating Magnetometer object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.Magnetometer; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in magnetometer data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.Magnetometer, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if magnetometer is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.Magnetometer, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for magnetometer"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for magnetometer"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for magnetometer"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for magnetometer"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for magnetometer"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + + DataUpdated?.Invoke(this, new MagnetometerDataUpdatedEventArgs(sensorData.values)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/MagnetometerRotationVectorSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/MagnetometerRotationVectorSensor.cs new file mode 100644 index 0000000..a1e0df6 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/MagnetometerRotationVectorSensor.cs @@ -0,0 +1,196 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// MagnetometerRotationVectorSensor Class. Used for registering callbacks for magnetometer rotation vector sensor and getting magnetometer rotation vector data + /// /// + public class MagnetometerRotationVectorSensor : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the magnetometer rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the magnetometer rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the magnetometer rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the magnetometer rotation vector. + /// + public float W { get; private set; } + + /// + /// Gets the Accuracy of the magnetometer rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + + /// + /// Returns true or false based on whether magnetometer rotation vector sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the MagnetometerRotationVectorSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of magnetometer rotation vector sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of magnetometer rotation vector sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular magnetometer rotation vector sensor in case of multiple sensors + /// + public MagnetometerRotationVectorSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating MagnetometerRotationVectorSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.MagnetometerRotationVectorSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in magnetometer rotation vector sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.MagnetometerRotationVectorSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if magnetometer rotation vector sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.MagnetometerRotationVectorSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for magnetometer rotation vector"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for magnetometer rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for magnetometer rotation vector"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for magnetometer rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for magnetometer rotation vector"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for magnetometer rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for magnetometer rotation vector"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for magnetometer rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for magnetometer rotation vector"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + Accuracy = sensorData.accuracy; + + DataUpdated?.Invoke(this, new MagnetometerRotationVectorSensorDataUpdatedEventArgs(sensorData.values, sensorData.accuracy)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + Accuracy = accuracy; + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/OrientationSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/OrientationSensor.cs new file mode 100644 index 0000000..6f0d7d3 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/OrientationSensor.cs @@ -0,0 +1,184 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). Pitchou +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// OrientationSensor Class. Used for registering callbacks for orientation sensor and getting orientation data + /// /// + public class OrientationSensor : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the Azimuth component of the orientation. + /// + public float Azimuth { get; private set; } + + /// + /// Gets the Pitch component of the orientation. + /// + public float Pitch { get; private set; } + + /// + /// Gets the Roll component of the orientation. + /// + public float Roll { get; private set; } + + /// + /// Returns true or false based on whether orientation sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the OrientationSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of orientation sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of orientation sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular orientation sensor in case of multiple sensors + /// + public OrientationSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating OrientationSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.OrientationSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in orientation sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.OrientationSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if orientation sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.OrientationSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for orientation"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for orientation sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for orientation"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for orientation sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for orientation"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for orientation sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy accuracy event callback for orientation"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for orientation sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for orientation"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Azimuth = sensorData.values[0]; + Pitch = sensorData.values[1]; + Roll = sensorData.values[2]; + + DataUpdated?.Invoke(this, new OrientationSensorDataUpdatedEventArgs(sensorData.values)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Pedometer.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Pedometer.cs new file mode 100644 index 0000000..3ad8baa --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/Pedometer.cs @@ -0,0 +1,167 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// Pedometer Sensor Class. Used for registering callbacks for pedometer and getting pedometer data + /// /// + public class Pedometer : Sensor + { + /// + /// Gets the step count + /// + public int StepCount { get; private set; } + + /// + /// Gets the walking step count + /// + public int WalkStepCount { get; private set; } + + /// + /// Gets the running step count + /// + public int RunStepCount { get; private set; } + + /// + /// Gets the moving distance + /// + public float MovingDistance { get; private set; } + + /// + /// Gets the calorie burned + /// + public float CalorieBurned { get; private set; } + + /// + /// Gets the last speed + /// + public float LastSpeed { get; private set; } + + /// + /// Gets the last stepping frequency + /// + public float LastSteppingFrequency { get; private set; } + + /// + /// Gets the last step status + /// + public PedometerState LastStepStatus { get; private set; } + + /// + /// Returns true or false based on whether pedometer sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the Pedometer sensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of pedometer sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of pedometer sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular pedometer sensor in case of multiple sensors + /// + public Pedometer(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating Pedometer object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.HumanPedometer; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in pedometer sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.HumanPedometer, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if pedometer sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.HumanPedometer, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for pedometer"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for pedometer sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for pedometer"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for pedometer sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for pedometer"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + StepCount = (int)sensorData.values[0]; + WalkStepCount = (int)sensorData.values[1]; + RunStepCount = (int)sensorData.values[2]; + MovingDistance = sensorData.values[3]; + CalorieBurned = sensorData.values[4]; + LastSpeed = sensorData.values[5]; + LastSteppingFrequency = sensorData.values[6]; + LastStepStatus = (PedometerState)sensorData.values[7]; + + DataUpdated?.Invoke(this, new PedometerDataUpdatedEventArgs(sensorData.values)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/PressureSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/PressureSensor.cs new file mode 100644 index 0000000..aa24f71 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/PressureSensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// PressureSensor Class. Used for registering callbacks for pressure sensor and getting pressure data + /// /// + public class PressureSensor : Sensor + { + /// + /// Gets the value of the pressure sensor. + /// + public float Pressure { get; private set; } + + /// + /// Returns true or false based on whether pressure sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the PressureSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of pressure sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of pressure sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular pressure sensor in case of multiple sensors + /// + public PressureSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating PressureSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.PressureSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in pressure sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.PressureSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if pressure sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.PressureSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for pressure"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for pressure sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for pressure"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for pressure sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for pressure"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Pressure = sensorData.values[0]; + + DataUpdated?.Invoke(this, new PressureSensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/ProximitySensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/ProximitySensor.cs new file mode 100644 index 0000000..55b0a28 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/ProximitySensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// ProximitySensor Class. Used for registering callbacks for proximity sensor and getting proximity data + /// /// + public class ProximitySensor : Sensor + { + /// + /// Gets the proximity state. + /// + public ProximitySensorState Proximity { get; private set; } + + /// + /// Returns true or false based on whether proximity sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the ProximitySensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of proximity sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of proximity sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular proximity sensor in case of multiple sensors + /// + public ProximitySensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating ProximitySensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.ProximitySensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in proximity sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.ProximitySensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if proximity sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.ProximitySensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for proximity"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for proximity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for proximity"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for proximity sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for proximity"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Proximity = (ProximitySensorState) sensorData.values[0]; + + DataUpdated?.Invoke(this, new ProximitySensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/RotationVectorSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/RotationVectorSensor.cs new file mode 100644 index 0000000..71a1ec2 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/RotationVectorSensor.cs @@ -0,0 +1,196 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// RotationVectorSensor Class. Used for registering callbacks for rotation vector sensor and getting rotation vector data + /// /// + public class RotationVectorSensor : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the rotation vector. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the rotation vector. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the rotation vector. + /// + public float Z { get; private set; } + + /// + /// Gets the W component of the rotation vector. + /// + public float W { get; private set; } + + /// + /// Gets the Accuracy of the rotation vector data. + /// + public SensorDataAccuracy Accuracy { get; private set; } + + /// + /// Returns true or false based on whether rotation vector sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the RotationVectorSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of rotation vector sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of rotation vector sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular rotation vector sensor in case of multiple sensors + /// + public RotationVectorSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating RotationVectorSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.RotationVectorSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in rotation vector sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.RotationVectorSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if rotation vector sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.RotationVectorSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for rotation vector"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for rotation vector"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for rotation vector"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for rotation vector"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for rotation vector sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for rotation vector"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + Accuracy = sensorData.accuracy; + + DataUpdated?.Invoke(this, new RotationVectorSensorDataUpdatedEventArgs(sensorData.values, sensorData.accuracy)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + Accuracy = accuracy; + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/SleepMonitor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/SleepMonitor.cs new file mode 100644 index 0000000..f7b6c69 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/SleepMonitor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// SleepMonitor Class. Used for registering callbacks for sleep monitor and getting sleep data + /// /// + public class SleepMonitor : Sensor + { + /// + /// Gets the value of the sleep state. + /// + public SleepMonitorState SleepState { get; private set; } + + /// + /// Returns true or false based on whether sleep monitor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the SleepMonitor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of sleep monitors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of sleep monitors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular sleep monitor in case of multiple sensors + /// + public SleepMonitor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating SleepMonitor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.HumanSleepMonitor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in sleep monitor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.HumanSleepMonitor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if sleep monitor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.HumanSleepMonitor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for sleep"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for sleep monitor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for sleep"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for sleep monitor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for sleep"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + SleepState = (SleepMonitorState)sensorData.values[0]; + + DataUpdated?.Invoke(this, new SleepMonitorDataUpdatedEventArgs((int)sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/TemperatureSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/TemperatureSensor.cs new file mode 100644 index 0000000..3be658c --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/TemperatureSensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// TemperatureSensor Class. Used for registering callbacks for temperature sensor and getting temperature data + /// /// + public class TemperatureSensor : Sensor + { + /// + /// Gets the value of the temperature sensor. + /// + public float Temperature { get; private set; } + + /// + /// Returns true or false based on whether temperature sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the TemperatureSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of temperature sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of temperature sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular temperature sensor in case of multiple sensors + /// + public TemperatureSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating TemperatureSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.TemperatureSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in temperature sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.TemperatureSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if temperature sensor is supported"); + isSupported = false; + } + return isSupported; + } + + 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; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, 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"); + } + } + + protected 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"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + Temperature = sensorData.values[0]; + + DataUpdated?.Invoke(this, new TemperatureSensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UltravioletSensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UltravioletSensor.cs new file mode 100644 index 0000000..40d21cd --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UltravioletSensor.cs @@ -0,0 +1,125 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UltravioletSensor Class. Used for registering callbacks for ultraviolet sensor and getting ultraviolet data + /// /// + public class UltravioletSensor : Sensor + { + /// + /// Gets the value of the ultraviolet sensor. + /// + public float UltravioletIndex { get; private set; } + + /// + /// Returns true or false based on whether ultraviolet sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the UltravioletSensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of ultraviolet sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of ultraviolet sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular ultraviolet sensor in case of multiple sensors + /// + public UltravioletSensor(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating UltravioletSensor object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.UltravioletSensor; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in ultraviolet sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.UltravioletSensor, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if ultraviolet sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.UltravioletSensor, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for ultraviolet"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for ultraviolet sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for ultraviolet"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for ultraviolet sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for ultraviolet"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + UltravioletIndex = sensorData.values[0]; + + DataUpdated?.Invoke(this, new UltravioletSensorDataUpdatedEventArgs(sensorData.values[0])); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedGyroscope.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedGyroscope.cs new file mode 100644 index 0000000..8a092c1 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedGyroscope.cs @@ -0,0 +1,155 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UncalibratedGyroscope Sensor Class. Used for registering callbacks for uncalibrated gyroscope and getting uncalibrated gyroscope data + /// /// + public class UncalibratedGyroscope : Sensor + { + /// + /// Gets the X component of the acceleration. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the acceleration. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the acceleration. + /// + public float Z { get; private set; } + + /// + /// Gets the BiasX component of the uncalibrated gyroscope data. + /// + public float BiasX { get; private set; } + + /// + /// Gets the BiasY component of the uncalibrated gyroscope data. + /// + public float BiasY { get; private set; } + + /// + /// Gets the BiasZ component of the uncalibrated gyroscope data. + /// + public float BiasZ { get; private set; } + + /// + /// Returns true or false based on whether uncalibrated gyroscope sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the UncalibratedGyroscope sensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of uncalibrated gyroscope sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of uncalibrated gyroscope sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular uncalibrated gyroscope sensor in case of multiple sensors + /// + public UncalibratedGyroscope(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating UncalibratedGyroscope object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.UncalibratedGyroscope; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in uncalibrated gyroscope sensor data. + /// + + public event EventHandler DataUpdated; + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.UncalibratedGyroscope, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if uncalibrated gyroscope sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.UncalibratedGyroscope, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for uncalibrated gyroscope"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for uncalibrated gyroscope sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for uncalibrated gyroscope"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for uncalibrated gyroscope sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for uncalibrated gyroscope"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + BiasX = sensorData.values[3]; + BiasY = sensorData.values[4]; + BiasZ = sensorData.values[5]; + + DataUpdated?.Invoke(this, new UncalibratedGyroscopeDataUpdatedEventArgs(sensorData.values)); + } + } +} diff --git a/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedMagnetometer.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedMagnetometer.cs new file mode 100644 index 0000000..bb1bde2 --- /dev/null +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Plugins/UncalibratedMagnetometer.cs @@ -0,0 +1,202 @@ +// Copyright 2016 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using System; + +namespace Tizen.System.Sensor +{ + /// + /// UncalibratedMagnetometer Sensor Class. Used for registering callbacks for uncalibrated magnetometer and getting uncalibrated magnetometer data + /// /// + public class UncalibratedMagnetometer : Sensor + { + private event EventHandler _accuracyChanged; + /// + /// Gets the X component of the acceleration. + /// + public float X { get; private set; } + + /// + /// Gets the Y component of the acceleration. + /// + public float Y { get; private set; } + + /// + /// Gets the Z component of the acceleration. + /// + public float Z { get; private set; } + + /// + /// Gets the BiasX component of the uncalibrated magnetometer data. + /// + public float BiasX { get; private set; } + + /// + /// Gets the BiasY component of the uncalibrated magnetometer data. + /// + public float BiasY { get; private set; } + + /// + /// Gets the BiasZ component of the uncalibrated magnetometer data. + /// + public float BiasZ { get; private set; } + + /// + /// Returns true or false based on whether uncalibrated magnetometer sensor is supported by device. + /// + public static bool IsSupported + { + get + { + Log.Info(Globals.LogTag, "Checking if the UncalibratedMagnetometer sensor is supported"); + return CheckIfSupported(); + } + } + + /// + /// Returns the number of uncalibrated magnetometer sensors available on the device. + /// + public static int Count + { + get + { + Log.Info(Globals.LogTag, "Getting the count of uncalibrated magnetometer sensors"); + return GetCount(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Index. Default value for this is 0. Index refers to a particular uncalibrated magnetometer sensor in case of multiple sensors + /// + public UncalibratedMagnetometer(int index = 0) : base(index) + { + Log.Info(Globals.LogTag, "Creating UncalibratedMagnetometer object"); + } + + internal override SensorType GetSensorType() + { + return SensorType.UncalibratedMagnetometer; + } + + /// + /// Event Handler for storing the callback functions for event corresponding to change in uncalibrated magnetometer sensor data. + /// + + public event EventHandler DataUpdated; + + public event EventHandler AccuracyChanged + { + add + { + if (_accuracyChanged == null) + { + AccuracyListenStart(); + } + _accuracyChanged += value; + } + remove + { + _accuracyChanged -= value; + if (_accuracyChanged == null) + { + AccuracyListenStop(); + } + } + } + + private static bool CheckIfSupported() + { + bool isSupported; + int error = Interop.SensorManager.SensorIsSupported(SensorType.UncalibratedMagnetometer, out isSupported); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error checking if uncalibrated magnetometer sensor is supported"); + isSupported = false; + } + return isSupported; + } + + private static int GetCount() + { + IntPtr list; + int count; + int error = Interop.SensorManager.GetSensorList(SensorType.UncalibratedMagnetometer, out list, out count); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list for uncalibrated magnetometer"); + count = 0; + } + else + Interop.Libc.Free(list); + return count; + } + + protected override void EventListenStart() + { + int error = Interop.SensorListener.SetEventCallback(ListenerHandle, Interval, SensorEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting event callback for uncalibrated magnetometer sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set event callback for uncalibrated magnetometer"); + } + } + + protected override void EventListenStop() + { + int error = Interop.SensorListener.UnsetEventCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting event callback for uncalibrated magnetometer sensor"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset event callback for uncalibrated magnetometer"); + } + } + + private void AccuracyListenStart() + { + int error = Interop.SensorListener.SetAccuracyCallback(ListenerHandle, Interval, AccuracyEventCallback, IntPtr.Zero); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting accuracy event callback for uncalibrated magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to set accuracy event callback for uncalibrated magnetometer"); + } + } + + private void AccuracyListenStop() + { + int error = Interop.SensorListener.UnsetAccuracyCallback(ListenerHandle); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error unsetting accuracy event callback for uncalibrated magnetometer"); + throw SensorErrorFactory.CheckAndThrowException(error, "Unable to unset accuracy event callback for uncalibrated magnetometer"); + } + } + + private void SensorEventCallback(IntPtr sensorHandle, IntPtr sensorPtr, IntPtr data) + { + Interop.SensorEventStruct sensorData = Interop.IntPtrToEventStruct(sensorPtr); + TimeSpan = new TimeSpan((Int64)sensorData.timestamp); + X = sensorData.values[0]; + Y = sensorData.values[1]; + Z = sensorData.values[2]; + BiasX = sensorData.values[3]; + BiasY = sensorData.values[4]; + BiasZ = sensorData.values[5]; + + DataUpdated?.Invoke(this, new UncalibratedMagnetometerDataUpdatedEventArgs(sensorData.values)); + } + + private void AccuracyEventCallback(IntPtr sensorHandle, UInt64 timestamp, SensorDataAccuracy accuracy, IntPtr data) + { + TimeSpan = new TimeSpan((Int64)timestamp); + _accuracyChanged?.Invoke(this, new SensorAccuracyChangedEventArgs(new TimeSpan((Int64)timestamp), accuracy)); + } + } +} diff --git a/Tizen.System.Sensor/Sensor/Sensor.cs b/Tizen.System.Sensor/Tizen.System.Sensor/Sensor.cs similarity index 66% rename from Tizen.System.Sensor/Sensor/Sensor.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/Sensor.cs index af841b9..33bc4a3 100644 --- a/Tizen.System.Sensor/Sensor/Sensor.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/Sensor.cs @@ -8,8 +8,14 @@ using System; + namespace Tizen.System.Sensor { + internal static class Globals + { + internal const string LogTag = "Tizen.System.Sensor"; + } + /// /// Sensor class for storing hardware information about a particular sensor /// @@ -23,16 +29,16 @@ namespace Tizen.System.Sensor private int _minInterval; private int _fifoCount; private int _maxBatchCount; - private bool _sensing = false; + private bool _isSensing = false; private bool _disposed = false; - private UInt64 _timestamp; + private TimeSpan _timeSpan; private uint _interval = 0; private uint _maxBatchLatency = 0; private SensorPausePolicy _pausePolicy = SensorPausePolicy.None; private IntPtr _sensorHandle = IntPtr.Zero; private IntPtr _listenerHandle = IntPtr.Zero; - protected abstract SensorType GetSensorType(); + internal abstract SensorType GetSensorType(); protected abstract void EventListenStart(); protected abstract void EventListenStop(); @@ -59,6 +65,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the sensor name"); return _name; } } @@ -70,6 +77,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the sensor vendor name"); return _vendor; } } @@ -81,6 +89,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the min value of the sensor"); return _minValue; } } @@ -92,6 +101,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the max value of the sensor"); return _maxValue; } } @@ -103,6 +113,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the resolution of the sensor"); return _resolution; } } @@ -114,6 +125,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the min interval for the sensor"); return _minInterval; } } @@ -125,6 +137,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the fifo count of the sensor"); return _fifoCount; } } @@ -136,6 +149,7 @@ namespace Tizen.System.Sensor { get { + Log.Info(Globals.LogTag, "Getting the max batch count of the sensor"); return _maxBatchCount; } } @@ -148,11 +162,13 @@ namespace Tizen.System.Sensor { set { + Log.Info(Globals.LogTag, "Setting the interval of the sensor"); _interval = value; SetInterval(); } get { + Log.Info(Globals.LogTag, "Getting the interval of the sensor"); return _interval; } } @@ -164,11 +180,13 @@ namespace Tizen.System.Sensor { set { + Log.Info(Globals.LogTag, "Setting the max batch latency of the sensor"); _maxBatchLatency = value; SetMaxBatchLatency(); } get { + Log.Info(Globals.LogTag, "Getting the max batch latency of the sensor"); return _maxBatchLatency; } } @@ -181,32 +199,37 @@ namespace Tizen.System.Sensor { set { + Log.Info(Globals.LogTag, "Setting the pause policy of the sensor"); _pausePolicy = value; SetPausePolicy(); } get { + Log.Info(Globals.LogTag, "Getting the pause policy of the sensor"); return _pausePolicy; } } - public UInt64 Timestamp + public TimeSpan TimeSpan { set { - _timestamp = value; + Log.Info(Globals.LogTag, "Setting the timespan of the sensor values"); + _timeSpan = value; } get { - return _timestamp; + Log.Info(Globals.LogTag, "Getting the timespan of the sensor values"); + return _timeSpan; } } - public bool Sensing + public bool IsSensing { get { - return _sensing; + Log.Info(Globals.LogTag, "Checking if the sensor is started"); + return _isSensing; } } @@ -224,13 +247,18 @@ namespace Tizen.System.Sensor /// public void Start() { + Log.Info(Globals.LogTag, "Starting the sensor"); if (CheckListenerHandle()) { int error = Interop.SensorListener.StartListener(_listenerHandle); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error starting sensor"); throw SensorErrorFactory.CheckAndThrowException(error, "Unable to Start Sensor Listener"); + } EventListenStart(); - _sensing = true; + _isSensing = true; + Log.Info(Globals.LogTag, "Sensor started"); } } @@ -240,17 +268,23 @@ namespace Tizen.System.Sensor /// public void Stop() { - if (!_sensing) + Log.Info(Globals.LogTag, "Stopping the sensor"); + if (_isSensing) { int error = Interop.SensorListener.StopListener(_listenerHandle); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error stopping the sensor"); throw SensorErrorFactory.CheckAndThrowException(error, "Unable to Stop Sensor Listener"); + } EventListenStop(); - _sensing = false; + _isSensing = false; + Log.Info(Globals.LogTag, "Sensor stopped"); } else { - throw new InvalidOperationException("Operation Failed: Sensor already stopped"); + Log.Error(Globals.LogTag, "Can't stop sensor as it is already stopped"); + throw new InvalidOperationException("Operation Failed: Sensor is already stopped"); } } @@ -275,8 +309,11 @@ namespace Tizen.System.Sensor IntPtr[] sensorList; int count; int error = Interop.SensorManager.GetSensorList(type, out list, out count); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor list"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.GetSensorList Failed"); + } sensorList = Interop.IntPtrToIntPtrArray(list, count); _sensorHandle = sensorList[index]; Interop.Libc.Free(list); @@ -284,55 +321,88 @@ namespace Tizen.System.Sensor private void GetProperty() { - int error = (int)SensorErrorFactory.SensorError.None; + int error = (int)SensorError.None; error = Interop.Sensor.GetName(_sensorHandle, out _name); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor name"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.Name Failed"); + } error = Interop.Sensor.GetVendor(_sensorHandle, out _vendor); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor vendor name"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.Vendor Failed"); + } error = Interop.Sensor.GetMinRange(_sensorHandle, out _minValue); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor min value"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.MinValue Failed"); + } error = Interop.Sensor.GetMaxRange(_sensorHandle, out _maxValue); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor max value"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.MaxValue Failed"); + } error = Interop.Sensor.GetResolution(_sensorHandle, out _resolution); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor resolution"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.Resolution Failed"); + } error = Interop.Sensor.GetMinInterval(_sensorHandle, out _minInterval); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor min interval"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.MinInterval Failed"); + } error = Interop.Sensor.GetFifoCount(_sensorHandle, out _fifoCount); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor fifo count"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.FifoCount Failed"); + } error = Interop.Sensor.GetMaxBatchCount(_sensorHandle, out _maxBatchCount); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error getting sensor max batch count"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.MaxBatchCount Failed"); + } } private void CreateListener() { int error = Interop.SensorListener.CreateListener(_sensorHandle, out _listenerHandle); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error cerating sensor listener handle"); throw SensorErrorFactory.CheckAndThrowException(error, "Sensor.CreateListener Failed"); + } } private void SetInterval() { if (CheckListenerHandle()) { - int error = Interop.SensorListener.SetInterval(_listenerHandle, _interval); - if (error != 0) - throw SensorErrorFactory.CheckAndThrowException(error, "Setting Sensor.PausePolicy Failed"); + if (_isSensing) + { + int error = Interop.SensorListener.SetInterval(_listenerHandle, _interval); + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting sensor interval"); + throw SensorErrorFactory.CheckAndThrowException(error, "Setting Sensor.SetInterval Failed"); + } + } } } @@ -341,8 +411,11 @@ namespace Tizen.System.Sensor if (CheckListenerHandle()) { int error = Interop.SensorListener.SetMaxBatchLatency(_listenerHandle, _maxBatchLatency); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting max batch latency"); throw SensorErrorFactory.CheckAndThrowException(error, "Setting Sensor.MaxBatchLatency Failed"); + } } } @@ -351,8 +424,11 @@ namespace Tizen.System.Sensor if (CheckListenerHandle()) { int error = Interop.SensorListener.SetAttribute(_listenerHandle, SensorAttribute.PausePolicy, (int)_pausePolicy); - if (error != 0) + if (error != (int)SensorError.None) + { + Log.Error(Globals.LogTag, "Error setting sensor pause policy"); throw SensorErrorFactory.CheckAndThrowException(error, "Setting Sensor.PausePolicy Failed"); + } } } @@ -365,6 +441,7 @@ namespace Tizen.System.Sensor } else { + Log.Error(Globals.LogTag, "Sensor listener handle is null"); throw new ArgumentException("Invalid Parameter: Sensor is null"); } return result; @@ -379,6 +456,7 @@ namespace Tizen.System.Sensor } else { + Log.Error(Globals.LogTag, "Sensor handle is null"); throw new ArgumentException("Invalid Parameter: Sensor is null"); } return result; diff --git a/Tizen.System.Sensor/Sensor/Enumerations.cs b/Tizen.System.Sensor/Tizen.System.Sensor/SensorEnumerations.cs old mode 100755 new mode 100644 similarity index 87% rename from Tizen.System.Sensor/Sensor/Enumerations.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/SensorEnumerations.cs index 9de4515..94f071c --- a/Tizen.System.Sensor/Sensor/Enumerations.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/SensorEnumerations.cs @@ -13,7 +13,7 @@ namespace Tizen.System.Sensor /// /// The SensorType Enum defintion for all sensor types. /// - public enum SensorType + internal enum SensorType { /// /// All sensors. This can be used to retrieve Sensor class object for all available sensors. @@ -90,7 +90,15 @@ namespace Tizen.System.Sensor /// /// Geomagnetic-based rotation vector sensor. /// - MagnetometerRotationVectorSensor = 20 + MagnetometerRotationVectorSensor = 20, + /// + /// Pedometer sensor. + /// + HumanPedometer = 0x300, + /// + /// Sleep monitor sensor. + /// + HumanSleepMonitor = 22 } /// @@ -148,4 +156,25 @@ namespace Tizen.System.Sensor AxisOrientation, PausePolicy } + + public enum PedometerState + { + Unknown, + Stop, + Walk, + Run + } + + public enum SleepMonitorState + { + Unknown, + Wake, + Sleep + } + + public enum ProximitySensorState + { + Near = 0, + Far = 5 + } } diff --git a/Tizen.System.Sensor/Sensor/SensorErrorFactory.cs b/Tizen.System.Sensor/Tizen.System.Sensor/SensorErrorFactory.cs similarity index 80% rename from Tizen.System.Sensor/Sensor/SensorErrorFactory.cs rename to Tizen.System.Sensor/Tizen.System.Sensor/SensorErrorFactory.cs index 620f42d..5627baf 100644 --- a/Tizen.System.Sensor/Sensor/SensorErrorFactory.cs +++ b/Tizen.System.Sensor/Tizen.System.Sensor/SensorErrorFactory.cs @@ -11,20 +11,20 @@ using Tizen.Internals.Errors; namespace Tizen.System.Sensor { - internal static class SensorErrorFactory + internal enum SensorError { - internal enum SensorError - { - None = ErrorCode.None, - IOError = ErrorCode.IoError, - InvalidParameter = ErrorCode.InvalidParameter, - NotSupported = ErrorCode.NotSupported, - PermissionDenied = ErrorCode.PermissionDenied, - OutOfMemory = ErrorCode.OutOfMemory, - NotNeedCalibration = -0x02440000 | 0x03, - OperationFailed = -0x02440000 | 0x06 - } + None = ErrorCode.None, + IOError = ErrorCode.IoError, + InvalidParameter = ErrorCode.InvalidParameter, + NotSupported = ErrorCode.NotSupported, + PermissionDenied = ErrorCode.PermissionDenied, + OutOfMemory = ErrorCode.OutOfMemory, + NotNeedCalibration = -0x02440000 | 0x03, + OperationFailed = -0x02440000 | 0x06 + } + internal static class SensorErrorFactory + { static internal Exception CheckAndThrowException(int error, string msg) { SensorError e = (SensorError)error; diff --git a/Tizen.System.Sensor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Tizen.System.Sensor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index ece10793b247a93ab2315f743d6209e3f42cf981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6013 zcmeHLZBH9V5VpZwFoYD-ln`iAr%hjFop6EhA|W*aoT4@e*%qzDS!8`THXH7Ct=&Dq zMf{fjf~r5UojKcQ-s1LyE%CvJZoJIw&dkou?mjz-WFnFH2Os*S=ivwv?;UrQ)Usym z1Fl2nmrUq!X>Z9OkYaaxCzm|{rMVQF`DJ^N{&Lx^&^MuiO#z`%%+F=_!>Z5SU!Yl* zCm=Sfi%YeY+G;JI_f{6!5*s6vYag-nCgi?H_I8B5| zzB~i(wbl?+{pQZO0YP5rDeS!^MUB@B+=p4036FcsK&K~h^+GN5{eofvoJn=k5tUgL zWsk4P3exv*zR!tSW~vS*9##sg8q6Ll(Jy&jNCn$aV;G8Ep$+=i^{%D(hu)o9>RMf& z@Viw!yT!jcD(mAswYlNuHdo*psW|BAhG&>60aNbrJ~PL9x_*N(*-)~E5u#bmD5!I7 zRI@uEjT19KA)H4=SA%iI%Ipo%J1O`Hs26v$x4CZktVsrM4s0jdLTli@k}ha1)ob*g z8=MoSTzd$3#ZVX?KzqndO|2;Dxllt9YM?-%s)CXMD*b?(9;psD3X3&jjapVBF^Y5~ znM_*vB2A3^IaX?F0|BNdeqYy6!r5;@fa0$GD+cR*{_wCz7hDks%nxCoarOSkxNFHM zF6y~#pk1kaUhS^2|G&gmSJ{fY@+!Z+vy=zDKklikgNQ?=zhS-S>XOM}iVh-+ z;?*<=<@Y?N`n-UK2|9=z8YXDJ4$exFaBzAQ$wWFu%`qYf2NLNANbqNzNSeq5kx3*I z)Jn%$lNKO@VO2EZG+97^GoXy>fyg{ID}8N zQ|HEMM3~xf^)XWoM_dK-g`>QEKsI^@Fnw)v%6KBjzk4E-HeS{%H(?yCBGR znR^WBPssOaB=gtZ>tKCy)5@THn&jEo|Ln3ggWOak|CCyR=Dzh9TNA{ymll`u>*>$% z|HMRwVoI+yOT<3oBJivy*iPA=?^|b`=hFHHSwHnSxq1Me?(vl&923Ry kTWk#CLq$jibw7x{3Yns3^snI#^ItXK;SLkm<|>o_0zk{drT_o{ diff --git a/packaging/csapi-system.sensor.spec b/packaging/csapi-system.sensor.spec index 9c1bb71..5a5f877 100644 --- a/packaging/csapi-system.sensor.spec +++ b/packaging/csapi-system.sensor.spec @@ -1,5 +1,5 @@ %define dllpath %{_libdir}/mono/tizen -%define dllname Tizen.System.Sensor.dll +%define dllname Tizen.System.dll Name: csapi-system.sensor Summary: Tizen Sensor API for C# diff --git a/tct-system-sensor-tizen-tests/Makefile b/tct-system-sensor-tizen-tests/Makefile new file mode 100755 index 0000000..12753bd --- /dev/null +++ b/tct-system-sensor-tizen-tests/Makefile @@ -0,0 +1,48 @@ + +ifndef config + config=debug +endif + +ifndef verbose + SILENT = @ +endif + +PROJECTS := tct-system-sensor-tizen-tests + +CSC = mcs + +.PHONY: all clean help $(PROJECTS) prebuild prelink + +ifeq ($(config),debug) + FLAGS = /debug /noconfig /d:DEBUG +endif + +ifeq ($(config),release) + FLAGS = /optimize /noconfig /d:NDEBUG +endif + +FLAGS += /t:exe + +TARGETDIR = bin +OBJDIR = obj +TARGET = $(TARGETDIR)/$(PROJECTS).exe +SOURCES = $(wildcard src/**/*.cs src/*.cs) +null := +space := $(null) # +comma := , +DLLS = $(wildcard lib/*.dll) +ifneq ("$(DLLS)", "") + REFERENCE = "/reference:$(subst $(space),$(comma),$(DLLS))" +endif + +all: $(TARGETDIR) $(TARGET) + +$(TARGET): $(SOURCES) $(DLLS) + @echo "=== Building $(PROJECTS) ($(config))" + $(SILENT) $(CSC) /nologo /out:$@ $(REFERENCE) $(FLAGS) $(SOURCES) + +$(TARGETDIR): + $(SILENT) mkdir -p $(TARGETDIR) + +clean: + $(SILENT) rm -rf $(TARGETDIR) diff --git a/tct-system-sensor-tizen-tests/Properties/AssemblyInfo.cs b/tct-system-sensor-tizen-tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..397144f --- /dev/null +++ b/tct-system-sensor-tizen-tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("tct-system-sensor-tizen-tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Samsung Electronics")] +[assembly: AssemblyProduct("tct-system-sensor-tizen-tests")] +[assembly: AssemblyCopyright("Copyright © 2016 Samsung Electronics Co., Ltd")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fdaa3944-fcce-4319-b93e-61ff53137edb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tct-system-sensor-tizen-tests/ReadMe.md b/tct-system-sensor-tizen-tests/ReadMe.md new file mode 100755 index 0000000..29816b0 --- /dev/null +++ b/tct-system-sensor-tizen-tests/ReadMe.md @@ -0,0 +1,15 @@ +tct-suite-tizen-tests +├── src - Directory containing main method and test cases. +│ ├── Program.cs - Main method of the application. +│ ├── testcase +│ │ ├── TSApplicationManager.cs - Test case file of ApplicationManager Class. +│ │ └── …… - Other test case files. +│ └── support +│ └── ApplicationCommon.cs - A Support file which supports test cases. +├── bin - Contains executable file which is created by make file. +├── lib - Library files which needs to be packed. +├── res - Resource folder for any resources needed to run test. +├── share +├── Makefile - Script which builds package. +├── TCTCert.p12 - A Certificate file for building package. (pw:test) +└── tizen-manifest.xml - A Tizen Manifest file for declaring privilege and controls. diff --git a/tct-system-sensor-tizen-tests/TCTCert.p12 b/tct-system-sensor-tizen-tests/TCTCert.p12 new file mode 100644 index 0000000000000000000000000000000000000000..26eb3a62e853d10787eb3f102b9580ebd274b353 GIT binary patch literal 2429 zcmV-@34-=8f(dy70Ru3C2|or2Duzgg_YDCD0ic2jFa&}LEHHuzC@_Kp-v$XPhDe6@ z4FLxRpn?O?FoFZj0s#Opf&;|{2`Yw2hW8Bt2LUh~1_~;MNQU<;52DJY$Xxs4y`2?S*(xyc^G)xx0%ano>_lo!b1vJ%I8)a zNz*@0?G`}MWswZ4#mv(iLoDyZ5u<)=>$>D*w-Y8JR?T!5;hZeMWCAsw&p=atAuYjw z1`=Z!Le?%|eO!D8ST+-W8Dk94qj1c@{j4Sxdop^^+cPN=O zZrv+lx}ypLx!&Zu=%%Fn+4XB}F$q(RFD zG04~zqIHfBRqbJ*%n7U%u5!m;9RuYi;Uxb+PPRv|;cG(4`ZK#)A;UfL+TZVX-6`&& z9{k%uDHZ9Bfj|zk}e8Y``WBCH-K#!R!xXmmb9&*hiv~PRo@w~i- zHaOL2go@HGAM@zkj#Wt-6&rn4BZ6{FsyEnQDNyKb%Guo#c3h9NjVfN_KY(=gQ5fcs#o5N)_LyY`NcNXF=6dw#B)dHVnHe)v!q;?8A zOs6uA>FJ#T{2YJJ{dY^!bw{>&888Gx$FhT2g`~n9&szrdXqV6{Pv^islbC;Z#viQ@ z(}cj^nHX*P-o0syv{;Wa%R@rGNBfFN4D!}D1P6Gd4U^-@R|u=*s~%KK5Xx1cLlUIm zY50koebpdflAe=Zw}D4$4C{h-^+Yir*va?X@2gg;`g|aPz0!k(#6lILg>1FcRejMj zZ=b{UP!VF?!~u9X62&LNQUr;8Een(A9{^re_mg2e46k0;d&}KUi(E;b{1Fa()DBI$uIIMZ(tAYP z=?j;{^zw3@OLfMSA8-dRXcTCBABdh&d7$CFI}LZHCB;8-=3YM<`@MYeZ7g>pcb(Zp&#cTZbQ-ujU-`bdBB=N#T%H3u=mCi}V&6%BcS+A#lOr*w< zK=2_vr42MP93_0BC;I*x2WEoP7VA6sSstss;(V_R58Pzez_;l09^gMR!n@d}{L;yw~2FPeR2n)icJx_Ot4sjRKzaBr+N7ebO%s{b8OAZR>FG0E+R^OHwta zp{u?Jr}Aevfo{7;aIa2GH|^`B}tD2jX zw{Mt|F)RBTc;1_P=Y|wfd)W^~y*^H<6&}Hs+hD{jv@RYEFzBq6@T&S)@ZrqTESn0K ze1<0cfChENYN0x-b5egm@tD)-LLS(Dmg2>OiuW4P{5aRHA0HBPcsI{2^s@(3y@u5p z#nXDeJs;c-+XBYR@5Z=O-c3kjDVu`65jbB5-&r?)$tTiL7HuL->(MCJzNUWQdh~9X zvx|geA0?{jEucX{pRm5?7BiEJ&_}BxalVcJWGW+{FgkKOEAA+|| z^`rk#AF2UaWlFP@z%Xw)|71f@Q3rDB!0lBL54l>ew%$OnA0<3lMTSFgev4GS8dANT z_FS7OuBI_1Fe3&DDuzgg_YDCF6)_eB6!5+7s96V-2d5#h?GxwNhtJ{zKrk^dAutIB v1uG5%0vZJX1Qh7|%7jV|w&g{5FjH}hW<_z%6I=uciE7X*!T*4g0s;sC(iM!Q literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/bin/tct-system-sensor-tizen-tests.exe b/tct-system-sensor-tizen-tests/bin/tct-system-sensor-tizen-tests.exe new file mode 100755 index 0000000000000000000000000000000000000000..7a3661f00dea839dce9cc683b0725ae7facc0a98 GIT binary patch literal 48128 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 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/lib/TestFramework.dll b/tct-system-sensor-tizen-tests/lib/TestFramework.dll new file mode 100644 index 0000000000000000000000000000000000000000..7cee03e26931bca94f4cd9786bdcb63f3ee0365b GIT binary patch literal 39936 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 R53AGP&zbA}g#S|x{1?dFMfLyy literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/lib/Tizen.Internals.dll b/tct-system-sensor-tizen-tests/lib/Tizen.Internals.dll new file mode 100755 index 0000000000000000000000000000000000000000..30c421bd9faadc50ddc264d36e76bd6cefbff260 GIT binary patch literal 9216 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 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/lib/Tizen.System.dll b/tct-system-sensor-tizen-tests/lib/Tizen.System.dll new file mode 100644 index 0000000000000000000000000000000000000000..7dc3fcde3ae85f2f2e4c52611ab14b66590b2dfe GIT binary patch literal 87040 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 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/lib/Tizen.dll b/tct-system-sensor-tizen-tests/lib/Tizen.dll new file mode 100755 index 0000000000000000000000000000000000000000..f656769e42f790a36dee6f2f000f6ac7a5d95e77 GIT binary patch literal 7168 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 PP0|xwgZ|(C=Q8j&_*ki< literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/org.test.tizen.system.sensor.tpk b/tct-system-sensor-tizen-tests/org.test.tizen.system.sensor.tpk new file mode 100644 index 0000000000000000000000000000000000000000..ac12ebc44d7f2dfaa38203df0cb3f69b48ca329a GIT binary patch literal 297515 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

RqL}h<9cMf8 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

;ys>obI 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

@NC@~&2CT0$(Z+zb`XFH(VCNy!i+sg}(BD~I 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 + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + + + + + PASS + + + + + + + + + + + + + \ No newline at end of file diff --git a/tct-system-sensor-tizen-tests/res/Result/style/application.js b/tct-system-sensor-tizen-tests/res/Result/style/application.js new file mode 100755 index 0000000..147094f --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/application.js @@ -0,0 +1,194 @@ +function getScrollTop() { + return f_scrollTop(); +} + +function f_scrollTop() { + return f_filterResults($(window) ? $(window).scrollTop() : 0, + document.documentElement ? document.documentElement.scrollTop : 0, + document.body ? document.body.scrollTop : 0); +} +function f_filterResults(n_win, n_docel, n_body) { + var n_result = n_win ? n_win : 0; + if (n_docel && (!n_result || (n_result > n_docel))) + n_result = n_docel; + return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result; +} + +function setScrollTop() { + $(window) ? $(window).scrollTop(0) : 0; + document.documentElement ? document.documentElement.scrollTop = 0 : 0; + document.body ? document.body.scrollTop = 0 : 0; +} + +function goTopEx() { + $node = $('#goTopBtn'); + if (getScrollTop() > 0) { + $node.show(); + } else { + $node.hide(); + } + + $(window).scroll(function() { + if (getScrollTop() > 0) { + $node.show(); + } else { + $node.hide(); + } + }); + + $node.click(function() { + setScrollTop(); + }); +} + +function drawRatio() { + $('.suite_item').each(function(i, node) { + drawSuiteRatio(node) + }); +} + +$(".see_all").click(function(){ + $("#see_all").show(); + $("#see_fail").hide(); + $("#see_block").hide(); + $("#see_na").hide(); + updateToggles(); + return false; +}); + +$(".see_failed").click(function(){ + $("#see_all").hide(); + $("#see_fail").show(); + $("#see_block").hide(); + $("#see_na").hide(); + updateToggles(); + return false; +}); + +$(".see_blocked").click(function(){ + $("#see_all").hide(); + $("#see_fail").hide(); + $("#see_block").show(); + $("#see_na").hide(); + updateToggles(); + return false; +}); + +$(".see_na").click(function(){ + $("#see_all").hide(); + $("#see_fail").hide(); + $("#see_block").hide(); + $("#see_na").show(); + updateToggles(); + return false; +}); + +$("a.test_case_popup").click(function(){ + var $this = $(this); + Popup.show($this.attr('id')); + return false; +}); + +$(".see_capabilities").click(function(){ + if ($('#capability_table').css('display') == 'none') { + $("#capability_table").show(); + }else{ + $("#capability_table").hide(); + } + return false; +}); + +function drawSuiteRatio(node) { + arrTitle = new Array("Passed", "Failed", "Blocked", "Not Executed"); + var $node = $(node); + var $total = $node.find('.total'); + var $pass = $node.find('.pass'); + var $fail = $node.find('.fail'); + var $block = $node.find('.block'); + var $na = $node.find('.na'); + var $div = $node.find('.RatioGraphic'); + + var total_int = parseInt($total.text()); + var pass_int = parseInt($pass.text()); + var fail_int = parseInt($fail.text()); + var block_int = parseInt($block.text()); + var na_int = parseInt($na.text()); + + var pass_rate = pass_int * 100 / total_int; + var fail_rate = fail_int * 100 / total_int; + var block_rate = block_int * 100 / total_int; + var na_rate = na_int * 100 / total_int; + + var areaWidth = 380; + + var pass_width = areaWidth * pass_rate / 100; + var fail_width = areaWidth * fail_rate / 100; + var block_width = areaWidth * block_rate / 100; + var na_width = areaWidth * na_rate / 100; + + pass_rate = pass_rate.toFixed(2); + fail_rate = fail_rate.toFixed(2); + block_rate = block_rate.toFixed(2); + na_rate = na_rate.toFixed(2); + + var pass_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url("./style/blue.jpg");" + var fail_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url("./style/red.jpg");" + var block_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url("./style/orange.jpg");" + var na_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url("./style/gray.jpg");" + + var html = ""; + if (pass_width > 0){ + html += ""; + } + if (fail_width > 0){ + html += ""; + } + if (block_width > 0){ + html += ""; + } + if (na_width > 0){ + html += ""; + } + html += "
"; + if (pass_width > 20){ + html += pass_rate + "%" + } + html += ""; + if (fail_width > 20){ + html += fail_rate + "%" + } + html += ""; + if (block_width > 20){ + html += block_rate + "%" + } + html += ""; + if (na_width > 20){ + html += na_rate + "%" + } + html += "
"; + $div.html(html); +} diff --git a/tct-system-sensor-tizen-tests/res/Result/style/back_top.png b/tct-system-sensor-tizen-tests/res/Result/style/back_top.png new file mode 100755 index 0000000000000000000000000000000000000000..19cbd763108a85a2a7c2954c0172b580a7ccb3b3 GIT binary patch literal 1122 zcmV-o1fBbdP)r0015c0ssI2d=e3600001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1NTWpK~!i%?ODH1 z+dvd{+C)SOk|P+hp$yOgm6jPqnTZ7I)Gcc=!k+>oS=pEnNXbkQnJGvNz!0%z0L2wZ zMoHzq^PTPU`E1|$a1~W&Wgzjp_uhTq`*labaU4TG(~7`{X?0Bdg%Hs6Om!S+dNe&# zjlfhpR}dWy9<9Q;9okCWbT-PlZmxGRYz)9cX@6&K*AzANaPz!$H3sR{X6o*f- z4b*pEk}JU4uwK_a%~5TJF*!IJ;>H6{=Ny#NbHyhHA$=!8ayEz&r+zXFgmpvfhqI?w|FUEqarP39Cc>f-quc3jEdu+U@+o)4zI3^xJNqzVuyjX!~+ej2wH~ z!#?9@^sW!Wb4xOgtua!P|?@BCZTN@<*r+%(Pxu0eDfun^ZQju zN7LD^EJhIPU3jryH{Y7jCsuOOy7#FG2=cVzO?_1 zlUSm)i8WXLUKd>&D<`V6w9Fo>i_18DN0a+_FQn-SR4r6UeIN$n?O7At&)G*bY)h>= zu2H-L&wm;uiKSmp^?}Eaeo3F#ad`p_g zkaTccl`IJj#%&VJotuA|7HL``L^*eEN#;^7^gJj%uZS@*os`d9+Ec76WDhY%&DLh+ zk~gPu{7RB6cX^W=C|O+bb10mksqr3fuC*y~*&4DVsdKGL=1E#fs&zGbAaCd)4J^Z) z7R;>36Esb7Ig3c*^kNl;p$CS#b-#ql94e#c+#y@;{KUk8jLy$r=fXIkvq!3R;o_DW zp;~~4fZ~5Q)UroYk~0FDo}2+zQ?Kb!!!PI6y7%M^u$p?EJ!<&nyjs(fGr(%NP!T_~pF%FN1_9_w2rCUjP6A07*qoM6N<$f@q*1S^xk5 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/Result/style/blue.jpg b/tct-system-sensor-tizen-tests/res/Result/style/blue.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d1db8f724fa76eb1f4efb914d24be05c187109d8 GIT binary patch literal 954 zcmex=eAA-4QK!nlZm zfsvIF3>ct*k%^gwm5rT)lZ%^?ff*tPBq6d$k^&4&jLghTEX=H|EG$4{YJqYLEP|{; ziiVDC!hwnGN`)dujT0AgC_8ODC>nI}gNkudQ4=SZn7D+bl&YG#hNhN@shPQjrIoXb ztDC!rr&n-DXjpheWK?oWYFc_mW>#@YX<2ziWmR)aYg>CqXV;|3Q>IRvK4a#rMT?g# zUABD1%2k^-Z`rzS`;MKv4jn#n^w{weCr@3veC6u3>o;!Rdidz^lc&#~zj*oTTk@SCu%S(U=?B5(qa)L@X*7#m8DOl#UiAmVu=Tcr^qMLDWl0zutf1t zBi|CmOpYi9pn9eTp$4HD$1WIZ_T(D&E;DSK>FjIRYjVusvPR}AiOW61}+8- zMh!;Ip3DVF!4kKUr80XGmjzt*N%l4DF*zlb)n;;8;#Ml}g5=B|uVf*RYM?(BumIgA z)*$QQbO~sVEYxs0nBhm2+=B!b0qtV}TDGM@LtqO7&{>=goIc4J5^Xb%%|f!ps7)#v aXp7m5W0y5@nSs8&EHMS7nw6pc|4jgm*fB5w literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/Result/style/gray.jpg b/tct-system-sensor-tizen-tests/res/Result/style/gray.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f1acfdbe94c05b638ac06a84edf7c7bbb1125f3e GIT binary patch literal 866 zcmex=wkpZ3brsCPqdOf&yk%W)NUwVPR%vXJcmvVGd4iP7V$(4t91fUM?^_0R}-120_L^W=16jCP7AKLB{__7~~lk7+Hbd0r?0D z7@3$^SlNJ1;^GD>*eU>YJ~J~D(6Ov6EI`$@KzRlhK~^C}Lq|5@z(jVXLJ_0Ji3>TD zoi-j64Z8S2#W<;`iIYoATtZSxRZU$(Q_IBE%-q7#%Gt%$&E3P(D>x)HEIcAIDmf)J zEj=SMtGJ}Jth}PKs=1}Lt-YhOYtrN?Q>RUzF>}_U#Y>hhTfSoDs!f}>Y~8kf$Ie}c z4j(ys?D&b3r!HN-a`oEv8#iw~eDwIq(`V0LynOZX)8{W=zkUDl^B2fpj10^WZ^38f2KE_o9%~}YXK;@p{B?_ghnW!=dCY3JE*Eh+R}GQb@{A;m&0YWe@)1OTom7e@d9 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/Result/style/jquery.min.js b/tct-system-sensor-tizen-tests/res/Result/style/jquery.min.js new file mode 100755 index 0000000..198b3ff --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/tct-system-sensor-tizen-tests/res/Result/style/orange.jpg b/tct-system-sensor-tizen-tests/res/Result/style/orange.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ac4c7493f8b541b2d97af3982860fdfce378d658 GIT binary patch literal 934 zcmex=eAA-4QK!nlZm zfsvIF3>ct*k%^gwm5rT)lZ%^?ff*tPBq6d$k^&4&jLghTEX=H|EG$4{YJqYLEP|{; ziiVDC!hwnGN`)dujT0AgC_8ODC>nI}gNkudQ4=SZn7D+bl&YG#hNhN@shPQjrIoXb ztDC!rr&n-DXjpheWK?oWYFc_mW>#@YX<2ziWmR)aYg>CqXV;|3Q>IRvK4a#rMT?g# zUABD1%2k^-Z`rzS`;MKv4jn#n^w{weCr@3veC6u3>o;!Rdidz^lc&#~zj*oTqL?A@(1V@JrB8&TV2R?P3GG}?A^{LuY(jg0VkSov zg9gI_rUsz~p&3UOuq-pwkhqmB?UNK>xaFA1Wr}B8g@Ex zLJT$oT9usHlWW+!ASoDRpTiNL#f+LgUJ%CstzcM?1Tucn1imF64;_Hc1{xpe0W_I^ z0npHgAQm^!hfbG3j^|?VVt_diXl^FN7g9hL$o$JbKrt^ihznR5L>L0t|K9`v=nx~$ literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/Result/style/popup.js b/tct-system-sensor-tizen-tests/res/Result/style/popup.js new file mode 100755 index 0000000..5f994f4 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/popup.js @@ -0,0 +1,1215 @@ +/** + * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com) + * + * Dual licensed under the MIT and GPL licenses. + * This basically means you can use this code however you want for + * free, but don't claim to have written it yourself! + * Donations always accepted: http://www.JavascriptToolbox.com/donate/ + * + * Please do not link to the .js files on javascripttoolbox.com from + * your site. Copy the files locally to your server instead. + * + */ +/* ******************************************************************* */ +/* UTIL FUNCTIONS */ +/* ******************************************************************* */ +var Util = {'$VERSION':1.06}; + +// Util functions - these are GLOBAL so they +// look like built-in functions. + +// Determine if an object is an array +function isArray(o) { + return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0]))); +}; + +// Determine if an object is an Object +function isObject(o) { + return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName)); +}; + +// Determine if a reference is defined +function defined(o) { + return (typeof(o)!="undefined"); +}; + +// Iterate over an array, object, or list of items and run code against each item +// Similar functionality to Perl's map() function +function map(func) { + var i,j,o; + var results = []; + if (typeof(func)=="string") { + func = new Function('$_',func); + } + for (i=1; i>>=4; + } + while(hex.length<6) { hex='0'+hex; } + return "#" + hex; + }; + + // Convert hyphen style names like border-width to camel case like borderWidth + css.hyphen2camel = function(property) { + if (!defined(property) || property==null) { return null; } + if (property.indexOf("-")<0) { return property; } + var str = ""; + var c = null; + var l = property.length; + for (var i=0; i0) { + return bodies[0]; + } + } + return null; + }; + + // Get the amount that the main document has scrolled from top + // -------------------------------------------------------------------- + screen.getScrollTop = function() { + if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) { + return document.documentElement.scrollTop; + } + if (document.body && defined(document.body.scrollTop)) { + return document.body.scrollTop; + } + return null; + }; + + // Get the amount that the main document has scrolled from left + // -------------------------------------------------------------------- + screen.getScrollLeft = function() { + if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) { + return document.documentElement.scrollLeft; + } + if (document.body && defined(document.body.scrollLeft)) { + return document.body.scrollLeft; + } + return null; + }; + + // Util function to default a bad number to 0 + // -------------------------------------------------------------------- + screen.zero = function(n) { + return (!defined(n) || isNaN(n))?0:n; + }; + + // Get the width of the entire document + // -------------------------------------------------------------------- + screen.getDocumentWidth = function() { + var width = 0; + var body = screen.getBody(); + if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) { + var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0; + var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0; + width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth); + } + else { + width = Math.max(body.clientWidth, body.scrollWidth); + } + if (isNaN(width) || width==0) { + width = screen.zero(self.innerWidth); + } + return width; + }; + + // Get the height of the entire document + // -------------------------------------------------------------------- + screen.getDocumentHeight = function() { + var body = screen.getBody(); + var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0; + if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) { + var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0; + var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0; + return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight)); + } + return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight)); + }; + + // Get the width of the viewport (viewable area) in the browser window + // -------------------------------------------------------------------- + screen.getViewportWidth = function() { + if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) { + return document.documentElement.clientWidth; + } + else if (document.compatMode && document.body) { + return document.body.clientWidth; + } + return screen.zero(self.innerWidth); + }; + + // Get the height of the viewport (viewable area) in the browser window + // -------------------------------------------------------------------- + screen.getViewportHeight = function() { + if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) { + return document.documentElement.clientHeight; + } + else if (document.compatMode && !window.opera && document.body) { + return document.body.clientHeight; + } + return screen.zero(self.innerHeight); + }; + + return screen; +})();var Sort = (function(){ + var sort = {}; + sort.AlphaNumeric = function(a,b) { + if (a==b) { return 0; } + if (a0 && document.anchors[0].x) { + for (var i=0; i0) { + top -= el.scrollTop; + } + if (el.scrollLeft && el.scrollLeft>0) { + left -= el.scrollLeft; + } + } + } + // If this node is also the offsetParent, add on the offsets and reset to the new offsetParent + if (el == offsetParent) { + left += o.offsetLeft; + if (el.clientLeft && el.nodeName!="TABLE") { + left += el.clientLeft; + } + top += o.offsetTop; + if (el.clientTop && el.nodeName!="TABLE") { + top += el.clientTop; + } + o = el; + if (o.offsetParent==null) { + if (o.offsetLeft) { + left += o.offsetLeft; + } + if (o.offsetTop) { + top += o.offsetTop; + } + } + offsetParent = o.offsetParent; + } + } + + + if (originalObject.offsetWidth) { + width = originalObject.offsetWidth; + } + if (originalObject.offsetHeight) { + height = originalObject.offsetHeight; + } + + return {'left':left, 'top':top, 'width':width, 'height':height + }; + }; + + // Retrieve the position of an object's center point + // ================================================= + pos.getCenter = function(o) { + var c = this.get(o); + if (c==null) { return null; } + c.left = c.left + (c.width/2); + c.top = c.top + (c.height/2); + return c; + }; + + return pos; +})();// CLASS CONSTRUCTOR +// -------------------------------------------------------------------- +var Popup = function(div, options) { + this.div = defined(div)?div:null; + this.index = Popup.maxIndex++; + this.ref = "Popup.objects["+this.index+"]"; + Popup.objects[this.index] = this; + // Store a reference to the DIV by id, also + if (typeof(this.div)=="string") { + Popup.objectsById[this.div] = this; + } + if (defined(this.div) && this.div!=null && defined(this.div.id)) { + Popup.objectsById[this.div.id] = this.div.id; + } + // Apply passed-in options + if (defined(options) && options!=null && typeof(options)=="object") { + for (var i in options) { + this[i] = options[i]; + } + } + return this; +}; + +// CLASS PROPERTIES +// -------------------------------------------------------------------- +// Index of popup objects, to maintain a global reference if necessary +Popup.maxIndex = 0; +Popup.objects = {}; +Popup.objectsById = {}; + +// The z-index value that popups will start at +Popup.minZIndex = 101; + +// Class names to assign to other objects +Popup.screenClass = "PopupScreen"; +Popup.iframeClass = "PopupIframe"; +Popup.screenIframeClass = "PopupScreenIframe"; + +// CLASS METHODS +// -------------------------------------------------------------------- + +// Hide all currently-visible non-modal dialogs +Popup.hideAll = function() { + for (var i in Popup.objects) { + var p = Popup.objects[i]; + if (!p.modal && p.autoHide) { + p.hide(); + } + } +}; +// Catch global events as a trigger to hide auto-hide popups +Event.add(document, "mouseup", Popup.hideAll, false); + +// A simple class method to show a popup without creating an instance +Popup.show = function(divObject, referenceObject, position, options, modal) { + var popup; + if (defined(divObject)) { + popup = new Popup(divObject); + } + else { + popup = new Popup(); + popup.destroyDivOnHide = true; + } + if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); } + if (defined(position)) { popup.position = position; } + if (defined(options) && options!=null && typeof(options)=="object") { + for (var i in options) { + popup[i] = options[i]; + } + } + if (typeof(modal)=="boolean") { + popup.modal = modal; + } + popup.destroyObjectsOnHide = true; + popup.show(); + return popup; +}; + +// A simple class method to show a modal popup +Popup.showModal = function(divObject, referenceObject, position, options) { + Popup.show(divObject, referenceObject, position, options, true); +}; + +// A method to retrieve a popup object based on a div ID +Popup.get = function(divId) { + if (defined(Popup.objectsById[divId])) { + return Popup.objectsById[divId]; + } + return null; +}; + +// A method to hide a popup based on a div id +Popup.hide = function(divId) { + var popup = Popup.get(divId); + if (popup!=null) { + popup.hide(); + } +}; + +// PROTOTYPE PROPERTIES +// -------------------------------------------------------------------- +Popup.prototype.content = null; +Popup.prototype.className = "PopupDiv"; +Popup.prototype.style = null; // Styles to be applied to the DIV +Popup.prototype.width = null; +Popup.prototype.height = null; +Popup.prototype.top = null; +Popup.prototype.left = null; +Popup.prototype.offsetLeft = 0; +Popup.prototype.offsetTop = 0; +Popup.prototype.constrainToScreen = true; +Popup.prototype.autoHide = true; +Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ +Popup.prototype.iframe = null; +Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right" +Popup.prototype.reference = null; +Popup.prototype.modal = false; +Popup.prototype.destroyDivOnHide = false; +Popup.prototype.destroyObjectsOnHide = false; +Popup.prototype.screen = null; +Popup.prototype.screenIframeShim = null; +Popup.prototype.screenOpacity=.4; +Popup.prototype.screenColor="#cccccc"; + +// INSTANCE METHODS +// -------------------------------------------------------------------- + +// Show the popup +// -------------------------------------------------------------------- +Popup.prototype.show = function(options, modal) { + this.modal = this.modal || (typeof(modal)=="boolean" && modal); + if (defined(options) && options!=null && typeof(options)=="object") { + for (var i in options) { + this[i] = options[i]; + } + } + this.div = DOM.resolve(this.div); + CSS.setStyle(this.div,'position','absolute'); + + // If there is no div pre-defined to use, create one + if (this.div==null) { + this.div = this.createDiv(); + } + if (this.content!=null) { + this.div.innerHTML = this.content; + this.content = null; + } + if (this.className!=null) { + this.div.className = this.className; + } + if (this.style!=null) { + this.applyStyle(); + } + if (this.width!=null) { + this.div.style.width = this.width+"px"; + this.div.style.overflowX="auto"; + } + if (this.height!=null) { + this.div.style.height = this.height+"px"; + this.div.style.overflowY="auto"; + } + + // Do the actual display - this is a separate method so display transitions can be implemented + this.transition(); + + // Make sure clicks on the DIV don't bubble up to the document + this.div.onclick = function(e) { + Event.cancelBubble(Event.resolve(e)); + }; + this.div.onmouseup = this.div.onclick; + + // Focus to the DIV if possible + if (this.modal && this.div.focus) { + this.div.focus(); + } +}; + +// Show the popup but make it modal +// -------------------------------------------------------------------- +Popup.prototype.transition = function() { + if (this.modal) { + this.addScreen(); + } + + // Make the DIV displayed but hidden so its size can be measured + CSS.setStyle(this.div,'visibility','hidden'); + CSS.setStyle(this.div,'display','block'); + + // Position the popup + this.setPosition(); + + // Add the shim if necessary + if (this.useIframeShim) { + this.addIframeShim(); + } + + // Make sure the DIV is higher than the shim + this.div.style.zIndex = Popup.minZIndex++; + + CSS.setStyle(this.div,'display','block'); + CSS.setStyle(this.div,'visibility','visible'); +}; + +// Show the popup but make it modal +// -------------------------------------------------------------------- +Popup.prototype.showModal = function(options) { + this.show(options,true); +}; + +// Apply user styles to the DIV +// -------------------------------------------------------------------- +Popup.prototype.applyStyle = function() { + if (this.div!=null && this.style!=null && typeof(this.style)=="object") { + for (var i in this.style) { + this.div.style[i] = this.style[i]; + } + } +}; + +// Hide the popup +// -------------------------------------------------------------------- +Popup.prototype.hide = function() { + // If this was a temp object creating on-the-fly, then remove objects from the DOM so + // The document doesn't get littered with extra objects + if (this.destroyDivOnHide) { + DOM.removeNode(this.div); + this.div = null; + delete Popup.objects[this.id]; + } + else if (this.div!=null) { + CSS.setStyle(this.div,'display','none'); + } + + if (this.destroyObjectsOnHide) { + DOM.removeNode(this.iframe); + DOM.removeNode(this.screen); + DOM.removeNode(this.screenIframeShim); + } + else { + if (this.iframe!=null) { + this.iframe.style.display = "none"; + } + if (this.screen!=null) { + this.screen.style.display = "none"; + } + if (this.screenIframeShim!=null) { + this.screenIframeShim.style.display = "none"; + } + } +}; + +// Util funcs for position +// -------------------------------------------------------------------- +Popup.prototype.setTop = function(top) { + this.div.style.top = top+"px"; +}; +Popup.prototype.setLeft = function(left) { + this.div.style.left = left+"px"; +}; +Popup.prototype.getTop = function() { + return parseInt(CSS.getStyle(this.div,"top"),10); +}; +Popup.prototype.getLeft = function() { + return parseInt(CSS.getStyle(this.div,"left"),10); +}; + +// All the logic to position the popup based on various criteria +// -------------------------------------------------------------------- +Popup.prototype.setPosition = function() { + if (this.position!=null) { + var m = this.position.match(/^(\S+)\s+(\S+)/); + if (m!=null && m.length==3) { + var v = m[1]; + var h = m[2]; + + var ref = this.reference; + if (ref==null) { ref = Screen.getBody(); } + var p = Position.get(ref); + var refTop = p.top; + var refLeft = p.left; + var refWidth = DOM.getOuterWidth(ref); + var refHeight = DOM.getOuterHeight(ref); + + var width = DOM.getOuterWidth(this.div); + var height = DOM.getOuterHeight(this.div); + + var scrollLeft = Screen.getScrollLeft(); + var scrollTop = Screen.getScrollTop(); + + // Set vertical position relative to reference object + if (v=="above") { this.setTop(refTop-height+this.offsetTop); } + else if (v=="top") { this.setTop(refTop+this.offsetTop); } + else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); } + else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); } + else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); } + + // Set horizontal position relative to reference object + if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); } + else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); } + else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); } + else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); } + else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); } + } + } + else if (this.top==null && this.left==null) { + this.center(); + } + else { + if (this.top==null) { this.top=0; } + if (this.left==null) { this.left=0; } + this.div.style.top = this.top+this.offsetTop+"px"; + this.div.style.left = this.left+this.offsetLeft+"px"; + } + + // Re-position to make sure it stays on the screen + if (this.constrainToScreen) { + this.fitToScreen(); + } +}; + +// Append an object to the body +// -------------------------------------------------------------------- +Popup.prototype.appendToBody = function(o) { + var body = Screen.getBody(); + if (body && body.appendChild) { + body.appendChild(o); + } +}; + +// Create a new DIV object to be used for a popup +// -------------------------------------------------------------------- +Popup.prototype.createDiv = function() { + if (document.createElement) { + var d = document.createElement("DIV"); + d.style.position="absolute"; + d.style.display="block"; + d.style.visibility="hidden"; + this.appendToBody(d); + return d; + } + alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()"); + return null; +}; + +// Create a new IFRAME object to be used behind the popup +// -------------------------------------------------------------------- +Popup.prototype.createIframe = function() { + if (document.createElement) { + var i= document.createElement("IFRAME"); + i.style.position="absolute"; + i.style.display="block"; + i.style.visibility="hidden"; + i.style.background="none"; + this.appendToBody(i); + return i; + } + else { + alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()"); + } +}; + +// Add an IFRAME shim for the DIV +// -------------------------------------------------------------------- +Popup.prototype.addIframeShim = function() { + if (this.iframe==null) { + this.iframe = this.createIframe(); + } + this.iframe.className = Popup.iframeClass; + CSS.setStyle(this.iframe,'top',this.getTop()+"px"); + CSS.setStyle(this.iframe,'left',this.getLeft()+"px"); + CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px"); + CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px"); + CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++); + CSS.setStyle(this.iframe,'opacity',0); + CSS.setStyle(this.iframe,'visibility','visible'); + CSS.setStyle(this.iframe,'display','block'); +}; + +// Create a "screen" to make a popup modal +// -------------------------------------------------------------------- +Popup.prototype.addScreen = function() { + if (this.screen==null) { + this.screen = this.createDiv(); + this.screen.style.top="0px"; + this.screen.style.left="0px"; + this.screen.style.backgroundColor = this.screenColor; + this.screen.className=Popup.screenClass;; + CSS.setStyle(this.screen,"opacity",this.screenOpacity); + this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); } + } + if (this.screenIframeShim==null) { + this.screenIframeShim = this.createIframe(); + this.screenIframeShim.style.top="0px"; + this.screenIframeShim.style.left="0px"; + this.screenIframeShim.className=Popup.screenIframeClass; + CSS.setStyle(this.screenIframeShim,"opacity",0); + } + this.screen.style.width = Screen.getDocumentWidth()+"px"; + this.screen.style.height = Screen.getDocumentHeight()+"px"; + this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px"; + this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px"; + this.screenIframeShim.style.zIndex = Popup.minZIndex++; + this.screenIframeShim.style.visibility="visible"; + this.screenIframeShim.style.display="block"; + this.screen.style.zIndex = Popup.minZIndex++; + this.screen.style.visibility="visible"; + this.screen.style.display="block"; +}; + +// Re-position the DIV so it stays on the screen +// -------------------------------------------------------------------- +Popup.prototype.fitToScreen = function() { + var width = DOM.getOuterWidth(this.div); + var height = DOM.getOuterHeight(this.div); + var top = this.getTop(); + var left = this.getLeft(); + + var clientWidth = Screen.getViewportWidth(); + var clientHeight = Screen.getViewportHeight(); + + var scrollLeft = Screen.getScrollLeft(); + var scrollTop = Screen.getScrollTop(); + + if (top-scrollTop+height>clientHeight) { + top = top - ((top+height) - (scrollTop+clientHeight)); + this.div.style.top = top + "px"; + } + if (left-scrollLeft+width>clientWidth) { + left = left - ((left+width) - (scrollLeft+clientWidth)); + this.div.style.left = left + "px"; + } + if (topeAA-4QK!nlZm zfsvIF3>ct*k%^gwm5rT)lZ%^?ff*tPBq6d$k^&4&jLghTEX=H|EG$4{YJqYLEP|{; ziiVDC!hwnGN`)dujT0AgC_8ODC>nI}gNkudQ4=SZn7D+bl&YG#hNhN@shPQjrIoXb ztDC!rr&n-DXjpheWK?oWYFc_mW>#@YX<2ziWmR)aYg>CqXV;|3Q>IRvK4a#rMT?g# zUABD1%2k^-Z`rzS`;MKv4jn#n^w{weCr@3veC6u3>o;!Rdidz^lc&#~zj*oT6sAHsIig>XiL))b}k321|c8>nspdx@(iG{%BBu(K&!4Y9QI+mEHH&37-Vju zLldT>k$fT&#Q10e(7~!v)3CT7ZvHIBwv~*6t02B`<~5MYY`B#y*2w8_bb+G-D>Ii9 JS3>>&n*dJ776JeO literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/Result/style/summary.xsl b/tct-system-sensor-tizen-tests/res/Result/style/summary.xsl new file mode 100755 index 0000000..0bf44fe --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/summary.xsl @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + \n + + + + +
+ + + +
+ + + +
+
+
diff --git a/tct-system-sensor-tizen-tests/res/Result/style/testresult.xsl b/tct-system-sensor-tizen-tests/res/Result/style/testresult.xsl new file mode 100755 index 0000000..9cfbd84 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/testresult.xsl @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + \n + + + + +
+ + + +
+ + + +
+
+
diff --git a/tct-system-sensor-tizen-tests/res/Result/style/tests.css b/tct-system-sensor-tizen-tests/res/Result/style/tests.css new file mode 100755 index 0000000..487bca0 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/style/tests.css @@ -0,0 +1,195 @@ +@charset "UTF-8"; +/* CSS Document */ +#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td + { + margin: 0; + padding: 0; + border: 0; + font-weight: inherit; + font-style: inherit; + font-size: 0.96em; + font-family: arial; + vertical-align: baseline; +} + +#title td, #btc td{ + margin: 0; + padding: 0; + border: 0; + font-weight: inherit; + font-style: inherit; + font-size: 0.96em; + font-family: arial; + vertical-align: baseline; +} + +td.Ratio { + text-align: left; + font-weight: normal; + padding: 4px 10px 4px 5px; + vertical-align: middle; +} + +th.Ratio { + width: 400px; +} + +#testcasepage p { + text-align: left; +} + +#suite_title { + text-align: left; +} + +#btc { + text-align: right; +} + +#btc table { + position: absolute; + right: 0px; + width: 600px; +} + +#testcasepage table { + border-collapse: separate; + border-spacing: 0; + margin-bottom: 1.4em; + vertical-align: middle; +} + +#testcasepage th,#testcasepage td { + text-align: left; + font-weight: normal; + padding: 4px 10px 4px 5px; + vertical-align: middle; +} + +#cases table { + width: 101%; +} + +#cases td { + border-left: 0px; + font-weight: normal; + border-bottom: 0px; +} + +#suite_summary table { + width: 100%; +} + + +#overview table { + width: 101%; +} + +#overview table, #overview td, #overview tr { + border-left: none; + border-bottom: none; + border-right: none; + vertical-align: top; +} + +#overview td{ + width: 50%; +} + +#capability table { + width: 50%; +} + +#fail_cases table { + width: 101%; +} + +#title table { + width: 101%; +} + +#device table { + width: 100%; +} + +#summary table { + width: 100%; +} + +#testcasepage th { + border-bottom: 1px solid #000; + background-color: #AAAAAA; + border-left: 1px solid #000; + border-top: 1px solid #000; + color: #000; + font-weight: bold; + vertical-align: bottom; +} + +#summary th:last-child,#summary td:last-child, #device th:last-child,#device td:last-child, #suite_summary th:last-child,#suite_summary td:last-child,#cases th:last-child,#cases td:last-child,#capability th:last-child,#capability td:last-child { + border-right: 1px solid #000; +} + +#testcasepage td { + font-weight: normal; +} + +#summary td, #device td, #capability td, #suite_summary td, #cases td{ + border-left: 1px solid; + font-weight: normal; + border-bottom: 1px solid; +} + +#testcasepage td.yellow_rate { + background-color: #ffcc00; +} + +#testcasepage td.green_rate { + background-color: #1E90FF; +} + +#testcasepage td.dgreen_rate { + background-color: #339933; +} + +#testcasepage td.red_rate { + background-color: #FF3333; +} + +#testcasepage td.orange_rate { + background-color: #FFA500; +} + +#testcasepage td.gray_rate { + background-color: #AAAAAA; +} + +#title table,#title tr,#title td { + border-left: none; + border-bottom: none; + text-align: center; +} + +#title td:last-child { + border-right: none; +} + +#testcasepage h1 { + font-size: 2em; + font-family: Arial, sans-serif; + font-weight: bold; + line-height: 1; + color: #000; + margin-bottom: 0.75em; + padding-top: 0.25em; + font-weight: bold; +} + +#goTopBtn { + right: 0px; + bottom: 0px; + position: fixed; + + position: absolute; + top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40 + ); +} diff --git a/tct-system-sensor-tizen-tests/res/Result/summary.xml b/tct-system-sensor-tizen-tests/res/Result/summary.xml new file mode 100644 index 0000000..919391e --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/summary.xml @@ -0,0 +1,21 @@ + + + + + + + + 2016-04-20_18_37_38 + 2016-04-20_18_37_38 + + + 64 + 64 + 100 + 0 + 0 + 0 + 0 + 0 + + \ No newline at end of file diff --git a/tct-system-sensor-tizen-tests/res/install.sh b/tct-system-sensor-tizen-tests/res/install.sh new file mode 100755 index 0000000..1b08974 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/install.sh @@ -0,0 +1,9 @@ +# uninstall sample applications +pkgcmd -u -n org.test.tizen.system.sensor + +#install sample applications +pkgcmd -t tpk -i -p org.test.tizen.system.sensor.tpk -q + +#list installed sample applications +echo "Successful installed the following packages: " +app_launcher -l | grep UIApplication diff --git a/tct-system-sensor-tizen-tests/res/pull.sh b/tct-system-sensor-tizen-tests/res/pull.sh new file mode 100755 index 0000000..49bfbf0 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/pull.sh @@ -0,0 +1,4 @@ +# pull result file +sdb root on +sdb pull /home/owner/share/System/System.xml Result/ +sdb pull /home/owner/share/System/summary.xml Result/ diff --git a/tct-system-sensor-tizen-tests/res/push.sh b/tct-system-sensor-tizen-tests/res/push.sh new file mode 100755 index 0000000..46ef848 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/push.sh @@ -0,0 +1,2 @@ +sdb root on +sdb push ../org.test.tizen.system.sensor.tpk install.sh run.sh /home/owner diff --git a/tct-system-sensor-tizen-tests/res/run.sh b/tct-system-sensor-tizen-tests/res/run.sh new file mode 100755 index 0000000..d891886 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/run.sh @@ -0,0 +1,4 @@ +# install & run TC application +pkgcmd -u -n org.test.tizen.system.sensor +pkgcmd -t tpk -i -p org.test.tizen.system.sensor.tpk -q +app_launcher -s org.test.tizen.system.sensor diff --git a/tct-system-sensor-tizen-tests/src/Program.cs b/tct-system-sensor-tizen-tests/src/Program.cs new file mode 100755 index 0000000..aea223d --- /dev/null +++ b/tct-system-sensor-tizen-tests/src/Program.cs @@ -0,0 +1,29 @@ +using Tizen.Applications; + +namespace TestFramework { + public class MyApplication : UIApplication { + protected override void OnCreate() { + Assert.Init(); + TestManager manager = new TestManager(); + manager.RunTestFromTCList(); + } + + protected override void OnResume() { + LogUtils.write(LogUtils.DEBUG, LogUtils.INFO, "Resumed!"); + } + + protected override void OnPause() { + LogUtils.write(LogUtils.DEBUG, LogUtils.INFO, "Paused!"); + } + + protected override void OnTerminate() { + LogUtils.write(LogUtils.DEBUG, LogUtils.INFO, "Terminated!"); + } + } + class Program { + static void Main(string[] args) { + MyApplication app = new MyApplication(); + app.Run(args); + } + } +} diff --git a/tct-system-sensor-tizen-tests/src/Testcase/TSAccelerometer.cs b/tct-system-sensor-tizen-tests/src/Testcase/TSAccelerometer.cs new file mode 100644 index 0000000..3e7887b --- /dev/null +++ b/tct-system-sensor-tizen-tests/src/Testcase/TSAccelerometer.cs @@ -0,0 +1,400 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Tizen.System.Sensor; +using TestFramework; +using Tizen; + +namespace TizenTest.System.Sensor { + [TestFixture] + [Description("Testing Tizen.System.Sensor.Accelerometer class")] + public static class TSAccelerometer { + public static bool bFlag = false; + public static int count; + private const string LogTag = "TizenTest.System.Sensor.Accelerometer"; + + [SetUp] + public static void Init() { + count = 0; + bFlag = false; + Log.Info(LogTag, "Accelerometer Test Init"); + } + + [TearDown] + public static void Destroy() { + Log.Info(LogTag, "Accelerometer Test Destroy"); + } + + [Test] + [Category("P1")] + [Description("Test Accelerometer class construction")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Accelerometer C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Accelerometer_INIT() + { + /* + * 1. Create an instane of Accelerometer + * */ + Log.Info(LogTag, "Accelerometer Test Constructor starting"); + Accelerometer lacc = null; + lacc = new Accelerometer(); + + Assert.IsNotNull(lacc, "Accelerometer object should not be null after construction"); + Log.Info(LogTag, "Accelerometer Test Constructor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.IsSupported")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.IsSupported A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void IsSupported_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test IsSupported Starting"); + object ret = Accelerometer.IsSupported; + Assert.IsNotNull(ret, "IsSupported value returned is null"); + Assert.True((ret is bool), "IsSupported value returned is not of type bool"); + Log.Info(LogTag, "Accelerometer Test IsSupported finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and value of Accelerometer.Count")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Count A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Count_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test Count starting"); + object ret = Accelerometer.Count; + Assert.IsNotNull(ret, "Count value returned should not be null"); + Assert.True((ret is int), "Count value returned is not of type int"); + Assert.Greater((int) ret, -1, "Count of accelerometer cant be negative"); + Log.Info(LogTag, "Accelerometer Test Count finished"); + } + + public static void EventCallback(object sender, AccelerometerDataUpdatedEventArgs args) { + Log.Info(LogTag, "Accelerometer X : " + args.X); + Log.Info(LogTag, "Accelerometer Y : " + args.Y); + Log.Info(LogTag, "Accelerometer Z : " + args.Z); + bFlag = true; + } + + [Test] + [Category("P1")] + [Description("Accelerometer DataUpdated Callback")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.DataUpdated U")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static async Task DataUpdated_CB() { + Log.Info(LogTag, "Accelerometer Test DataUpdated event starting"); + Accelerometer lacc = new Accelerometer(); + lacc.DataUpdated += EventCallback; + lacc.Start(); + lacc.Interval = 100; + await Task.Delay(3000); + lacc.Stop(); + + /* TEST CODE + * 1 Create an instance of Accelerometer + * 2 Add function EventCallback to event SensorChanged + * 3 Start accelerometer + * 4 Change bFlag to true in EventCallbcak. + * 5 Stop accelerometer + * 6 Check bFlag is true + */ + + Assert.True(bFlag, "SensorEventOccured should have occurred for accelerometer"); + Log.Info(LogTag, "Accelerometer Test DataUpdated event finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.Name")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Name A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Name_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test Name starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.Name; + Assert.IsNotNull(ret, "Name value returned is null"); + Assert.True((ret is string), "Name value returned is not of type string"); + Log.Info(LogTag, "Accelerometer Test Name finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.Vendor")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Vendor A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Vendor_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test Vendor starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.Vendor; + Assert.IsNotNull(ret, "Vendor value returned is null"); + Assert.True((ret is string), "Vendor value returned is not of type string"); + Log.Info(LogTag, "Accelerometer Test Vendor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.MinValue")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MinValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinValue_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test minvalue starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.MinValue; + Assert.IsNotNull(ret, "MinValue returned is null"); + Assert.True((ret is float), "MinValue returned is not of type float"); + Log.Info(LogTag, "Accelerometer Test minvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.MaxValue")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MaxValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxValue_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test maxvalue starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.MaxValue; + Assert.IsNotNull(ret, "MaxValue returned is null"); + Assert.True((ret is float), "MaxValue returned is not of type float"); + Log.Info(LogTag, "Accelerometer Test maxvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.Resolution")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Resolution A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Resolution_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test Resolution starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.Resolution; + Assert.IsNotNull(ret, "Resolution value returned is null"); + Assert.True((ret is float), "Resolution value returned is not of type float"); + Log.Info(LogTag, "Accelerometer Test Resolution finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of Accelerometer.MinInterval")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MinInterval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinInterval_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test MinInterval starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.MinInterval; + Assert.IsNotNull(ret, "MinInterval value returned is null"); + Assert.True((ret is int), "MinInterval value returned is not of type int"); + Assert.Greater((int) ret, -1, "MinInterval cant be negative"); + Log.Info(LogTag, "Accelerometer Test MinInterval finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and value of Accelerometer.MaxBatchCount")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MaxBatchCout A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchCount_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test MaxBatchCount starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.MaxBatchCount; + Assert.IsNotNull(ret, "MaxBatchCount value returned is null"); + Assert.True((ret is int), "MaxBatchCount value returned is not of type int"); + Log.Info(LogTag, "Accelerometer Test MaxBatchCount finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.IsSensing")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.IsSensing A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Sensing_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test IsSensing Starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.IsSensing; + Assert.IsNotNull(ret, "IsSensing value returned is null"); + Assert.True((ret is bool), "IsSensing value returned is not of type bool"); + Log.Info(LogTag, "Accelerometer Test IsSensing finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of Accelerometer.Interval")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Interval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test Interval read starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.Interval; + Assert.IsNotNull(ret, "Interval value returned is null"); + Assert.True((ret is uint), "Interval value returned is not of type uint"); + Log.Info(LogTag, "Accelerometer Test Interval read finished"); + } + + [Test] + [Category("P1")] + [Description("Setting the testing the return value of Accelerometer.Interval")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.Intetrval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_SET_VALUE() + { + Log.Info(LogTag, "Accelerometer Test interval write/read starting"); + Accelerometer lacc = new Accelerometer(); + lacc.DataUpdated += EventCallback; + lacc.Start(); + uint interval = 123; + lacc.Interval = interval; + uint ret = lacc.Interval; + string msg = "Interval is not the same as initially set 123 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + interval = 1; + lacc.Interval = interval; + ret = lacc.Interval; + msg = "Interval is not the same as initially set 1 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + lacc.Stop(); + Log.Info(LogTag, "Accelerometer Test interval write/read finished"); + } +/* + * MaxBatchLatency Not Supported right now. + + [Test] + [Category("P1")] + [Description("Return type of Accelerometer.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_TYPE_RETURN_VALUE() + { + Accelerometer lacc = new Accelerometer(); + object ret = lacc.MaxBatchLatency; + Assert.IsNotNull(ret, "MaxBatchLatency value returned is null"); + Assert.True((ret is uint), "MaxBatchLatency value returned is not of type uint"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing the return value of Accelerometer.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_SET_VALUE() + { + Accelerometer lacc = new Accelerometer(); + lacc.DataUpdated += EventCallback; + lacc.Start(); + uint latency = 123; + + lacc.MaxBatchLatency = latency; + uint ret = lacc.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + + lacc.MaxBatchLatency = 50; + ret = lacc.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + } +*/ + [Test] + [Category("P1")] + [Description("Return type of Acceleorometer.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_RETURN_TYPE() + { + Log.Info(LogTag, "Accelerometer Test pause policy get starting"); + Accelerometer lacc = new Accelerometer(); + object ret = lacc.PausePolicy; + Assert.IsNotNull(ret, "PausePolicy value returned is null"); + Assert.True((ret is SensorPausePolicy), "PausePolicy value returned is not of type SensorPausePolicy"); + Assert.Greater((int) ret, -1, "PausePolicy cant be negative"); + Log.Info(LogTag, "Accelerometer Test pause policy get finished"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing Accelerometer.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.Accelerometer.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_SET_RETURN_VALUE() + { + Log.Info(LogTag, "Accelerometer Test PausePolicy set starting"); + Accelerometer lacc = new Accelerometer(); + SensorPausePolicy ret; + lacc.PausePolicy = SensorPausePolicy.PowerSaveMode; + ret = lacc.PausePolicy; + if (ret != SensorPausePolicy.PowerSaveMode) + Assert.True(false, "Accelerometer.PausePolicy is not same as intially set"); + + lacc.PausePolicy = SensorPausePolicy.DisplayOff; + ret = lacc.PausePolicy; + if (ret != SensorPausePolicy.DisplayOff) + Assert.True(false, "Accelerometer.PausePolicy is not same as intially set"); + + lacc.PausePolicy = SensorPausePolicy.All; + ret = lacc.PausePolicy; + if (ret != SensorPausePolicy.All) + Assert.True(false, "Accelerometer.PausePolicy is not same as intially set"); + + lacc.PausePolicy = SensorPausePolicy.None; + ret = lacc.PausePolicy; + if (ret != SensorPausePolicy.None) + Assert.True(false, "Accelerometer.PausePolicy is not same as intially set"); + + Log.Info(LogTag, "Accelerometer Test PausePolicy set finished"); + + Log.Info(LogTag, "Accelerometer Sensing "+ lacc.IsSensing); + } + } +} + diff --git a/tct-system-sensor-tizen-tests/src/Testcase/TSGravitySensor.cs b/tct-system-sensor-tizen-tests/src/Testcase/TSGravitySensor.cs new file mode 100644 index 0000000..79ef980 --- /dev/null +++ b/tct-system-sensor-tizen-tests/src/Testcase/TSGravitySensor.cs @@ -0,0 +1,398 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Tizen.System.Sensor; +using TestFramework; +using Tizen; + +namespace TizenTest.System.Sensor { + [TestFixture] + [Description("Testing Tizen.System.Sensor.GravitySensor class")] + public static class TSGravitySensor { + public static bool bFlag = false; + public static int count; + private const string LogTag = "TizenTest.System.Sensor.GravitySensor"; + + [SetUp] + public static void Init() { + count = 0; + bFlag = false; + Log.Info(LogTag, "GravitySensor Test Init"); + } + + [TearDown] + public static void Destroy() { + Log.Info(LogTag, "GravitySensor Test Destroy"); + } + + [Test] + [Category("P1")] + [Description("Test GravitySensor class construction")] + [Property("SPEC", "TizenTest.System.Sensor.SenosrTestFixture.GravitySensor.GravitySensor C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void GravitySensor_INIT() + { + /* + * 1. Create an instane of GravitySensor + * */ + Log.Info(LogTag, "GravitySensor Test Constructor starting"); + GravitySensor gravity = null; + gravity = new GravitySensor(); + + Assert.IsNotNull(gravity, "GravitySensor object should not be null after construction"); + Log.Info(LogTag, "GravitySensor Test Constructor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.IsSupported")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.IsSupported A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void IsSupported_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test IsSupported Starting"); + object ret = GravitySensor.IsSupported; + Assert.IsNotNull(ret, "IsSupported value returned is null"); + Assert.True((ret is bool), "IsSupported value returned is not of type bool"); + Log.Info(LogTag, "GravitySensor Test IsSupported finished" + (bool) ret); + } + + [Test] + [Category("P1")] + [Description("Return type and value of GravitySensor.Count")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Count A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Count_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test Count starting"); + object ret = GravitySensor.Count; + Assert.IsNotNull(ret, "Count value returned should not be null"); + Assert.True((ret is int), "Count value returned is not of type int"); + Assert.Greater((int) ret, -1, "Count of GravitySensor cant be negative"); + Log.Info(LogTag, "GravitySensor Test Count finished"); + } + + public static void EventCallbackGravity(object sender, GravitySensorDataUpdatedEventArgs args) { + Log.Info(LogTag, "GravitySensor X : "+args.X); + Log.Info(LogTag, "GravitySensor Y : " + args.Y); + Log.Info(LogTag, "GravitySensor Z : " + args.Z); + bFlag = true; + } + + [Test] + [Category("P1")] + [Description("GravitySensor DataUpdated Callback")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.DataUpdated U")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static async Task DataUpdated_CB() { + Log.Info(LogTag, "GravitySensor Test DataUpdated event starting"); + GravitySensor gravity = new GravitySensor(); + gravity.DataUpdated += EventCallbackGravity; + gravity.Start(); + gravity.Interval = 100; + await Task.Delay(3000); + gravity.Stop(); + + /* TEST CODE + * 1 Create an instance of GravitySensor + * 2 Add function EventCallback to event SensorChanged + * 3 Start GravitySensor + * 4 Change bFlag to true in EventCallbcak. + * 5 Stop GravitySensor + * 6 Check bFlag is true + */ + + Assert.True(bFlag, "SensorEventOccured should have occurred for GravitySensor"); + Log.Info(LogTag, "GravitySensor Test DataUpdated event finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.Name")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Name A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Name_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test Name starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.Name; + Assert.IsNotNull(ret, "Name value returned is null"); + Assert.True((ret is string), "Name value returned is not of type string"); + Log.Info(LogTag, "GravitySensor Test Name finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.Vendor")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Vendor A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Vendor_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test Vendor starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.Vendor; + Assert.IsNotNull(ret, "Vendor value returned is null"); + Assert.True((ret is string), "Vendor value returned is not of type string"); + Log.Info(LogTag, "GravitySensor Test Vendor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.MinValue")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MinValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinValue_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test minvalue starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.MinValue; + Assert.IsNotNull(ret, "MinValue returned is null"); + Assert.True((ret is float), "MinValue returned is not of type float"); + Log.Info(LogTag, "GravitySensor Test minvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.MaxValue")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MaxValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxValue_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test maxvalue starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.MaxValue; + Assert.IsNotNull(ret, "MaxValue returned is null"); + Assert.True((ret is float), "MaxValue returned is not of type float"); + Log.Info(LogTag, "GravitySensor Test maxvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.Resolution")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Resolution A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Resolution_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test Resolution starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.Resolution; + Assert.IsNotNull(ret, "Resolution value returned is null"); + Assert.True((ret is float), "Resolution value returned is not of type float"); + Log.Info(LogTag, "GravitySensor Test Resolution finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of GravitySensor.MinInterval")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MinInterval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinInterval_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test MinInterval starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.MinInterval; + Assert.IsNotNull(ret, "MinInterval value returned is null"); + Assert.True((ret is int), "MinInterval value returned is not of type int"); + Assert.Greater((int) ret, -1, "MinInterval cant be negative"); + Log.Info(LogTag, "GravitySensor Test MinInterval finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and value of GravitySensor.MaxBatchCount")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MaxBatchCout A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchCount_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test MaxBatchCount starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.MaxBatchCount; + Assert.IsNotNull(ret, "MaxBatchCount value returned is null"); + Assert.True((ret is int), "MaxBatchCount value returned is not of type int"); + Log.Info(LogTag, "GravitySensor Test MaxBatchCount finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.IsSensing")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.IsSensing A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Sensing_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test IsSensing Starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.IsSensing; + Assert.IsNotNull(ret, "IsSensing value returned is null"); + Assert.True((ret is bool), "IsSensing value returned is not of type bool"); + Log.Info(LogTag, "GravitySensor Test IsSensing finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of GravitySensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Interval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test Interval read starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.Interval; + Assert.IsNotNull(ret, "Interval value returned is null"); + Assert.True((ret is uint), "Interval value returned is not of type uint"); + Log.Info(LogTag, "GravitySensor Test Interval read finished"); + } + + [Test] + [Category("P1")] + [Description("Setting the testing the return value of GravitySensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.Intetrval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_SET_VALUE() + { + Log.Info(LogTag, "GravitySensor Test interval write/read starting"); + GravitySensor gravity = new GravitySensor(); + gravity.DataUpdated += EventCallbackGravity; + gravity.Start(); + uint interval = 123; + gravity.Interval = interval; + uint ret = gravity.Interval; + string msg = "Interval is not the same as initially set 123 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + interval = 1; + gravity.Interval = interval; + ret = gravity.Interval; + msg = "Interval is not the same as initially set 1 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + gravity.Stop(); + Log.Info(LogTag, "GravitySensor Test interval write/read finished"); + } +/* + * MaxBatchLatency Not Supported right now. + + [Test] + [Category("P1")] + [Description("Return type of GravitySensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_TYPE_RETURN_VALUE() + { + GravitySensor gravity = new GravitySensor(); + object ret = gravity.MaxBatchLatency; + Assert.IsNotNull(ret, "MaxBatchLatency value returned is null"); + Assert.True((ret is uint), "MaxBatchLatency value returned is not of type uint"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing the return value of GravitySensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_SET_VALUE() + { + GravitySensor gravity = new GravitySensor(); + gravity.DataUpdated += EventCallbackGravity; + gravity.Start(); + uint latency = 123; + + gravity.MaxBatchLatency = latency; + uint ret = gravity.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + + gravity.MaxBatchLatency = 50; + ret = gravity.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + } +*/ + [Test] + [Category("P1")] + [Description("Return type of Acceleorometer.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_RETURN_TYPE() + { + Log.Info(LogTag, "GravitySensor Test pause policy get starting"); + GravitySensor gravity = new GravitySensor(); + object ret = gravity.PausePolicy; + Assert.IsNotNull(ret, "PausePolicy value returned is null"); + Assert.True((ret is SensorPausePolicy), "PausePolicy value returned is not of type SensorPausePolicy"); + Assert.Greater((int) ret, -1, "PausePolicy cant be negative"); + Log.Info(LogTag, "GravitySensor Test pause policy get finished"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing GravitySensor.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.GravitySensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_SET_RETURN_VALUE() + { + Log.Info(LogTag, "GravitySensor Test PausePolicy set starting"); + GravitySensor gravity = new GravitySensor(); + SensorPausePolicy ret; + gravity.PausePolicy = SensorPausePolicy.PowerSaveMode; + ret = gravity.PausePolicy; + if (ret != SensorPausePolicy.PowerSaveMode) + Assert.True(false, "GravitySensor.PausePolicy is not same as intially set"); + + gravity.PausePolicy = SensorPausePolicy.DisplayOff; + ret = gravity.PausePolicy; + if (ret != SensorPausePolicy.DisplayOff) + Assert.True(false, "GravitySensor.PausePolicy is not same as intially set"); + + gravity.PausePolicy = SensorPausePolicy.All; + ret = gravity.PausePolicy; + if (ret != SensorPausePolicy.All) + Assert.True(false, "GravitySensor.PausePolicy is not same as intially set"); + + gravity.PausePolicy = SensorPausePolicy.None; + ret = gravity.PausePolicy; + if (ret != SensorPausePolicy.None) + Assert.True(false, "GravitySensor.PausePolicy is not same as intially set"); + + Log.Info(LogTag, "GravitySensor Test PausePolicy set finished"); + } + } +} + diff --git a/tct-system-sensor-tizen-tests/src/Testcase/TSLinearAccelerationSensor.cs b/tct-system-sensor-tizen-tests/src/Testcase/TSLinearAccelerationSensor.cs new file mode 100644 index 0000000..6afe85f --- /dev/null +++ b/tct-system-sensor-tizen-tests/src/Testcase/TSLinearAccelerationSensor.cs @@ -0,0 +1,396 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Tizen.System.Sensor; +using TestFramework; +using Tizen; + +namespace TizenTest.System.Sensor { + [TestFixture] + [Description("Testing Tizen.System.Sensor.LinearAccelerationSensor class")] + public static class TSLinearAccelerationSensor { + public static bool bFlag = false; + public static int count; + private const string LogTag = "TizenTest.System.Sensor.LinearAccelerationSensor"; + + [SetUp] + public static void Init() { + count = 0; + bFlag = false; + Log.Info(LogTag, "LinearAccelerationSensor Test Init"); + } + + [TearDown] + public static void Destroy() { + Log.Info(LogTag, "LinearAccelerationSensor Test Destroy"); + } + + [Test] + [Category("P1")] + [Description("Test LinearAccelerationSensor class construction")] + [Property("SPEC", "TizenTest.System.Sensor.SenosrTestFixture.LinearAccelerationSensor.LinearAccelerationSensor C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void LinearAccelerationSensor_INIT() + { + /* + * 1. Create an instane of LinearAccelerationSensor + * */ + Log.Info(LogTag, "LinearAccelerationSensor Test Constructor starting"); + LinearAccelerationSensor linear = null; + linear = new LinearAccelerationSensor(); + + Assert.IsNotNull(linear, "LinearAccelerationSensor object should not be null after construction"); + Log.Info(LogTag, "LinearAccelerationSensor Test Constructor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.IsSupported")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.IsSupported A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void IsSupported_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test IsSupported Starting"); + object ret = LinearAccelerationSensor.IsSupported; + Assert.IsNotNull(ret, "IsSupported value returned is null"); + Assert.True((ret is bool), "IsSupported value returned is not of type bool"); + Log.Info(LogTag, "LinearAccelerationSensor Test IsSupported finished" + (bool) ret); + } + + [Test] + [Category("P1")] + [Description("Return type and value of LinearAccelerationSensor.Count")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Count A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Count_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test Count starting"); + object ret = LinearAccelerationSensor.Count; + Assert.IsNotNull(ret, "Count value returned should not be null"); + Assert.True((ret is int), "Count value returned is not of type int"); + Assert.Greater((int) ret, -1, "Count of LinearAccelerationSensor cant be negative"); + Log.Info(LogTag, "LinearAccelerationSensor Test Count finished"); + } + + public static void EventCallbackLinear(object sender, LinearAccelerationSensorDataUpdatedEventArgs args) { + Log.Info(LogTag, "Linear X : " + args.X +"Linear Y : " + args.Y+ "Linear Z : " + args.Z); + bFlag = true; + } + + [Test] + [Category("P1")] + [Description("LinearAccelerationSensor DataUpdated Callback")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.DataUpdated U")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static async Task DataUpdated_CB() { + Log.Info(LogTag, "LinearAccelerationSensor Test DataUpdated event starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + linear.DataUpdated += EventCallbackLinear; + linear.Start(); + linear.Interval = 100; + await Task.Delay(3000); + linear.Stop(); + + /* TEST CODE + * 1 Create an instance of LinearAccelerationSensor + * 2 Add function EventCallback to event SensorChanged + * 3 Start LinearAccelerationSensor + * 4 Change bFlag to true in EventCallbcak. + * 5 Stop LinearAccelerationSensor + * 6 Check bFlag is true + */ + + Assert.True(bFlag, "SensorEventOccured should have occurred for LinearAccelerationSensor"); + Log.Info(LogTag, "LinearAccelerationSensor Test DataUpdated event finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.Name")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Name A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Name_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test Name starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.Name; + Assert.IsNotNull(ret, "Name value returned is null"); + Assert.True((ret is string), "Name value returned is not of type string"); + Log.Info(LogTag, "LinearAccelerationSensor Test Name finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.Vendor")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Vendor A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Vendor_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test Vendor starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.Vendor; + Assert.IsNotNull(ret, "Vendor value returned is null"); + Assert.True((ret is string), "Vendor value returned is not of type string"); + Log.Info(LogTag, "LinearAccelerationSensor Test Vendor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.MinValue")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MinValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinValue_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test minvalue starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.MinValue; + Assert.IsNotNull(ret, "MinValue returned is null"); + Assert.True((ret is float), "MinValue returned is not of type float"); + Log.Info(LogTag, "LinearAccelerationSensor Test minvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.MaxValue")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MaxValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxValue_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test maxvalue starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.MaxValue; + Assert.IsNotNull(ret, "MaxValue returned is null"); + Assert.True((ret is float), "MaxValue returned is not of type float"); + Log.Info(LogTag, "LinearAccelerationSensor Test maxvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.Resolution")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Resolution A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Resolution_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test Resolution starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.Resolution; + Assert.IsNotNull(ret, "Resolution value returned is null"); + Assert.True((ret is float), "Resolution value returned is not of type float"); + Log.Info(LogTag, "LinearAccelerationSensor Test Resolution finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of LinearAccelerationSensor.MinInterval")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MinInterval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinInterval_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test MinInterval starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.MinInterval; + Assert.IsNotNull(ret, "MinInterval value returned is null"); + Assert.True((ret is int), "MinInterval value returned is not of type int"); + Assert.Greater((int) ret, -1, "MinInterval cant be negative"); + Log.Info(LogTag, "LinearAccelerationSensor Test MinInterval finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and value of LinearAccelerationSensor.MaxBatchCount")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MaxBatchCout A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchCount_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test MaxBatchCount starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.MaxBatchCount; + Assert.IsNotNull(ret, "MaxBatchCount value returned is null"); + Assert.True((ret is int), "MaxBatchCount value returned is not of type int"); + Log.Info(LogTag, "LinearAccelerationSensor Test MaxBatchCount finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.IsSensing")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.IsSensing A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Sensing_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test IsSensing Starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.IsSensing; + Assert.IsNotNull(ret, "IsSensing value returned is null"); + Assert.True((ret is bool), "IsSensing value returned is not of type bool"); + Log.Info(LogTag, "LinearAccelerationSensor Test IsSensing finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of LinearAccelerationSensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Interval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test Interval read starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.Interval; + Assert.IsNotNull(ret, "Interval value returned is null"); + Assert.True((ret is uint), "Interval value returned is not of type uint"); + Log.Info(LogTag, "LinearAccelerationSensor Test Interval read finished"); + } + + [Test] + [Category("P1")] + [Description("Setting the testing the return value of LinearAccelerationSensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.Intetrval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_SET_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test interval write/read starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + linear.DataUpdated += EventCallbackLinear; + linear.Start(); + uint interval = 123; + linear.Interval = interval; + uint ret = linear.Interval; + string msg = "Interval is not the same as initially set 123 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + interval = 1; + linear.Interval = interval; + ret = linear.Interval; + msg = "Interval is not the same as initially set 1 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + linear.Stop(); + Log.Info(LogTag, "LinearAccelerationSensor Test interval write/read finished"); + } +/* + * MaxBatchLatency Not Supported right now. + + [Test] + [Category("P1")] + [Description("Return type of LinearAccelerationSensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_TYPE_RETURN_VALUE() + { + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.MaxBatchLatency; + Assert.IsNotNull(ret, "MaxBatchLatency value returned is null"); + Assert.True((ret is uint), "MaxBatchLatency value returned is not of type uint"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing the return value of LinearAccelerationSensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_SET_VALUE() + { + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + linear.DataUpdated += EventCallback; + linear.Start(); + uint latency = 123; + + linear.MaxBatchLatency = latency; + uint ret = linear.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + + linear.MaxBatchLatency = 50; + ret = linear.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + } +*/ + [Test] + [Category("P1")] + [Description("Return type of Acceleorometer.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_RETURN_TYPE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test pause policy get starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + object ret = linear.PausePolicy; + Assert.IsNotNull(ret, "PausePolicy value returned is null"); + Assert.True((ret is SensorPausePolicy), "PausePolicy value returned is not of type SensorPausePolicy"); + Assert.Greater((int) ret, -1, "PausePolicy cant be negative"); + Log.Info(LogTag, "LinearAccelerationSensor Test pause policy get finished"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing LinearAccelerationSensor.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.LinearAccelerationSensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_SET_RETURN_VALUE() + { + Log.Info(LogTag, "LinearAccelerationSensor Test PausePolicy set starting"); + LinearAccelerationSensor linear = new LinearAccelerationSensor(); + SensorPausePolicy ret; + linear.PausePolicy = SensorPausePolicy.PowerSaveMode; + ret = linear.PausePolicy; + if (ret != SensorPausePolicy.PowerSaveMode) + Assert.True(false, "LinearAccelerationSensor.PausePolicy is not same as intially set"); + + linear.PausePolicy = SensorPausePolicy.DisplayOff; + ret = linear.PausePolicy; + if (ret != SensorPausePolicy.DisplayOff) + Assert.True(false, "LinearAccelerationSensor.PausePolicy is not same as intially set"); + + linear.PausePolicy = SensorPausePolicy.All; + ret = linear.PausePolicy; + if (ret != SensorPausePolicy.All) + Assert.True(false, "LinearAccelerationSensor.PausePolicy is not same as intially set"); + + linear.PausePolicy = SensorPausePolicy.None; + ret = linear.PausePolicy; + if (ret != SensorPausePolicy.None) + Assert.True(false, "LinearAccelerationSensor.PausePolicy is not same as intially set"); + + Log.Info(LogTag, "LinearAccelerationSensor Test PausePolicy set finished"); + } + } +} + diff --git a/tct-system-sensor-tizen-tests/src/Testcase/TSProximitySensor.cs b/tct-system-sensor-tizen-tests/src/Testcase/TSProximitySensor.cs new file mode 100644 index 0000000..24cce18 --- /dev/null +++ b/tct-system-sensor-tizen-tests/src/Testcase/TSProximitySensor.cs @@ -0,0 +1,396 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Tizen.System.Sensor; +using TestFramework; +using Tizen; + +namespace TizenTest.System.Sensor { + [TestFixture] + [Description("Testing Tizen.System.Sensor.ProximitySensor class")] + public static class TSProximitySensor { + public static bool bFlag = false; + public static int count; + private const string LogTag = "TizenTest.System.Sensor.ProximitySensor"; + + [SetUp] + public static void Init() { + count = 0; + bFlag = false; + Log.Info(LogTag, "ProximitySensor Test Init"); + } + + [TearDown] + public static void Destroy() { + Log.Info(LogTag, "ProximitySensor Test Destroy"); + } + + [Test] + [Category("P1")] + [Description("Test ProximitySensor class construction")] + [Property("SPEC", "TizenTest.System.Sensor.SenosrTestFixture.ProximitySensor.ProximitySensor C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void ProximitySensor_INIT() + { + /* + * 1. Create an instane of ProximitySensor + * */ + Log.Info(LogTag, "ProximitySensor Test Constructor starting"); + ProximitySensor proximity = null; + proximity = new ProximitySensor(); + + Assert.IsNotNull(proximity, "ProximitySensor object should not be null after construction"); + Log.Info(LogTag, "ProximitySensor Test Constructor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.IsSupported")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.IsSupported A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void IsSupported_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test IsSupported Starting"); + object ret = ProximitySensor.IsSupported; + Assert.IsNotNull(ret, "IsSupported value returned is null"); + Assert.True((ret is bool), "IsSupported value returned is not of type bool"); + Log.Info(LogTag, "ProximitySensor Test IsSupported finished" + (bool) ret); + } + + [Test] + [Category("P1")] + [Description("Return type and value of ProximitySensor.Count")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Count A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Count_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test Count starting"); + object ret = ProximitySensor.Count; + Assert.IsNotNull(ret, "Count value returned should not be null"); + Assert.True((ret is int), "Count value returned is not of type int"); + Assert.Greater((int) ret, -1, "Count of ProximitySensor cant be negative"); + Log.Info(LogTag, "ProximitySensor Test Count finished"); + } + + public static void EventCallbackProximity(object sender, ProximitySensorDataUpdatedEventArgs args) { + Log.Info(LogTag, "Proximity : "+args.Proximity); + bFlag = true; + } + + [Test] + [Category("P1")] + [Description("ProximitySensor DataUpdated Callback")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.DataUpdated U")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static async Task DataUpdated_CB() { + ProximitySensor proximity = new ProximitySensor(); + Log.Info(LogTag, "ProximitySensor Test DataUpdated event starting"); + proximity.DataUpdated += EventCallbackProximity; + proximity.Start(); + proximity.Interval = 100; + await Task.Delay(10000); + proximity.Stop(); + + /* TEST CODE + * 1 Create an instance of ProximitySensor + * 2 Add function EventCallback to event SensorChanged + * 3 Start ProximitySensor + * 4 Change bFlag to true in EventCallbcak. + * 5 Stop ProximitySensor + * 6 Check bFlag is true + */ + + Assert.True(bFlag, "SensorEventOccured should have occurred for ProximitySensor"); + Log.Info(LogTag, "ProximitySensor Test DataUpdated event finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.Name")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Name A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Name_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test Name starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.Name; + Assert.IsNotNull(ret, "Name value returned is null"); + Assert.True((ret is string), "Name value returned is not of type string"); + Log.Info(LogTag, "ProximitySensor Test Name finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.Vendor")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Vendor A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Vendor_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test Vendor starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.Vendor; + Assert.IsNotNull(ret, "Vendor value returned is null"); + Assert.True((ret is string), "Vendor value returned is not of type string"); + Log.Info(LogTag, "ProximitySensor Test Vendor finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.MinValue")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MinValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinValue_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test minvalue starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.MinValue; + Assert.IsNotNull(ret, "MinValue returned is null"); + Assert.True((ret is float), "MinValue returned is not of type float"); + Log.Info(LogTag, "ProximitySensor Test minvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.MaxValue")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MaxValue A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxValue_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test maxvalue starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.MaxValue; + Assert.IsNotNull(ret, "MaxValue returned is null"); + Assert.True((ret is float), "MaxValue returned is not of type float"); + Log.Info(LogTag, "ProximitySensor Test maxvalue finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.Resolution")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Resolution A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Resolution_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test Resolution starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.Resolution; + Assert.IsNotNull(ret, "Resolution value returned is null"); + Assert.True((ret is float), "Resolution value returned is not of type float"); + Log.Info(LogTag, "ProximitySensor Test Resolution finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of ProximitySensor.MinInterval")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MinInterval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MinInterval_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test MinInterval starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.MinInterval; + Assert.IsNotNull(ret, "MinInterval value returned is null"); + Assert.True((ret is int), "MinInterval value returned is not of type int"); + Assert.Greater((int) ret, -1, "MinInterval cant be negative"); + Log.Info(LogTag, "ProximitySensor Test MinInterval finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and value of ProximitySensor.MaxBatchCount")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MaxBatchCout A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchCount_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test MaxBatchCount starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.MaxBatchCount; + Assert.IsNotNull(ret, "MaxBatchCount value returned is null"); + Assert.True((ret is int), "MaxBatchCount value returned is not of type int"); + Log.Info(LogTag, "ProximitySensor Test MaxBatchCount finished"); + } + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.IsSensing")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.IsSensing A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Sensing_TYPE_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test IsSensing Starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.IsSensing; + Assert.IsNotNull(ret, "IsSensing value returned is null"); + Assert.True((ret is bool), "IsSensing value returned is not of type bool"); + Log.Info(LogTag, "ProximitySensor Test IsSensing finished"); + } + + [Test] + [Category("P1")] + [Description("Return type and Value of ProximitySensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Interval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test Interval read starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.Interval; + Assert.IsNotNull(ret, "Interval value returned is null"); + Assert.True((ret is uint), "Interval value returned is not of type uint"); + Log.Info(LogTag, "ProximitySensor Test Interval read finished"); + } + + [Test] + [Category("P1")] + [Description("Setting the testing the return value of ProximitySensor.Interval")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.Intetrval A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void Interval_SET_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test interval write/read starting"); + ProximitySensor proximity = new ProximitySensor(); + proximity.DataUpdated += EventCallbackProximity; + proximity.Start(); + uint interval = 123; + proximity.Interval = interval; + uint ret = proximity.Interval; + string msg = "Interval is not the same as initially set 123 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + interval = 1; + proximity.Interval = interval; + ret = proximity.Interval; + msg = "Interval is not the same as initially set 1 - " + ret; + if (ret != interval) + Assert.True(false, msg); + + proximity.Stop(); + Log.Info(LogTag, "ProximitySensor Test interval write/read finished"); + } +/* + * MaxBatchLatency Not Supported right now. + + [Test] + [Category("P1")] + [Description("Return type of ProximitySensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_TYPE_RETURN_VALUE() + { + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.MaxBatchLatency; + Assert.IsNotNull(ret, "MaxBatchLatency value returned is null"); + Assert.True((ret is uint), "MaxBatchLatency value returned is not of type uint"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing the return value of ProximitySensor.MaxBatchLatency")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.MaxBatchLatency A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void MaxBatchLatency_SET_VALUE() + { + ProximitySensor proximity = new ProximitySensor(); + proximity.DataUpdated += EventCallback; + proximity.Start(); + uint latency = 123; + + proximity.MaxBatchLatency = latency; + uint ret = proximity.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + + proximity.MaxBatchLatency = 50; + ret = proximity.MaxBatchLatency; + if (ret != latency) + Assert.True(false, "MaxBatchLatency is not the same as initially set"); + } +*/ + [Test] + [Category("P1")] + [Description("Return type of Acceleorometer.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_RETURN_TYPE() + { + Log.Info(LogTag, "ProximitySensor Test pause policy get starting"); + ProximitySensor proximity = new ProximitySensor(); + object ret = proximity.PausePolicy; + Assert.IsNotNull(ret, "PausePolicy value returned is null"); + Assert.True((ret is SensorPausePolicy), "PausePolicy value returned is not of type SensorPausePolicy"); + Assert.Greater((int) ret, -1, "PausePolicy cant be negative"); + Log.Info(LogTag, "ProximitySensor Test pause policy get finished"); + } + + [Test] + [Category("P1")] + [Description("Setting and testing ProximitySensor.PausePolicy")] + [Property("SPEC", "Tizen.System.Sensor.ProximitySensor.PausePolicy A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Ankur Garg, ankur29.garg@samsung.com")] + public static void PausePolicy_SET_RETURN_VALUE() + { + Log.Info(LogTag, "ProximitySensor Test PausePolicy set starting"); + ProximitySensor proximity = new ProximitySensor(); + SensorPausePolicy ret; + proximity.PausePolicy = SensorPausePolicy.PowerSaveMode; + ret = proximity.PausePolicy; + if (ret != SensorPausePolicy.PowerSaveMode) + Assert.True(false, "ProximitySensor.PausePolicy is not same as intially set"); + + proximity.PausePolicy = SensorPausePolicy.DisplayOff; + ret = proximity.PausePolicy; + if (ret != SensorPausePolicy.DisplayOff) + Assert.True(false, "ProximitySensor.PausePolicy is not same as intially set"); + + proximity.PausePolicy = SensorPausePolicy.All; + ret = proximity.PausePolicy; + if (ret != SensorPausePolicy.All) + Assert.True(false, "ProximitySensor.PausePolicy is not same as intially set"); + + proximity.PausePolicy = SensorPausePolicy.None; + ret = proximity.PausePolicy; + if (ret != SensorPausePolicy.None) + Assert.True(false, "ProximitySensor.PausePolicy is not same as intially set"); + + Log.Info(LogTag, "ProximitySensor Test PausePolicy set finished"); + } + } +} + diff --git a/tct-system-sensor-tizen-tests/tct-system-sensor-tizen-tests.csproj b/tct-system-sensor-tizen-tests/tct-system-sensor-tizen-tests.csproj new file mode 100644 index 0000000..c0e79b0 --- /dev/null +++ b/tct-system-sensor-tizen-tests/tct-system-sensor-tizen-tests.csproj @@ -0,0 +1,104 @@ + + + + Debug + AnyCPU + {FDAA3944-FCCE-4319-B93E-61FF53137EDB} + Library + Properties + tct_system_sensor_tizen_tests + tct-system-sensor-tizen-tests + v4.5.2 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + lib\TestFramework.dll + + + lib\Tizen.dll + + + lib\Tizen.Applications.dll + + + lib\Tizen.Internals.dll + + + lib\Tizen.System.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + + + + + + \ No newline at end of file diff --git a/tct-system-sensor-tizen-tests/tizen-manifest.xml b/tct-system-sensor-tizen-tests/tizen-manifest.xml new file mode 100755 index 0000000..f9633d8 --- /dev/null +++ b/tct-system-sensor-tizen-tests/tizen-manifest.xml @@ -0,0 +1,9 @@ + + + + icon.png + + + + + -- 2.34.1

L;sS>;r8_Pv0xl$>Wo>VS*?as%!@J|caNbu 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Þ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 literal 0 HcmV?d00001 diff --git a/tct-system-sensor-tizen-tests/res/ReadMe.md b/tct-system-sensor-tizen-tests/res/ReadMe.md new file mode 100755 index 0000000..85fa0b5 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/ReadMe.md @@ -0,0 +1,27 @@ +# Naming conventions + +1) "TC application" refers to "org.test.tizen.application". +2) "sample applications" refers to those whose name contains string "Sample". + +# purpose of those scripts + +1) "push.sh" - this script is made for pushing the TC application, the sample applications and "install.sh", "run.sh" scripts to Tizen device. Run it in Ubuntu. + +2) "install.sh" - this script is made for installing the sample applications in Tizen device. This script will be pushed to "/home/owner" directory of Tizen device. Manually run it. + +3) "run.sh" - this script is made for launching & relaunching TC application for Application API. This script will be pushed to "/home/owner" directory of Tizen device. Manually run it. + +# how to install your sample applications using those script + +1) Put your sample applications in the directory of the scripts. + +2) Add your sample application's name to "install.sh" script as below: + pkgcmd -u -n + pkgcmd -t tpk -i -p .tpk -q + app_launcher -l | grep + +3) Add your sample application's name to "run.sh" script as below: + app_launcher -k + +# the end +-- nothing here--- diff --git a/tct-system-sensor-tizen-tests/res/Result/System.xml b/tct-system-sensor-tizen-tests/res/Result/System.xml new file mode 100644 index 0000000..1a43557 --- /dev/null +++ b/tct-system-sensor-tizen-tests/res/Result/System.xml @@ -0,0 +1,1107 @@ + + + + + +