Adding test case for rotation_vector sensor 12/33012/1
authorRamasamy <ram.kannan@samsung.com>
Fri, 2 Jan 2015 08:39:39 +0000 (14:09 +0530)
committerRamasamy <ram.kannan@samsung.com>
Fri, 2 Jan 2015 08:39:47 +0000 (14:09 +0530)
- Adding test case for rotation vector sensor
- updated spec and cmake files for new test case

Change-Id: I9fd81a5d05c07f2f3ed0be0b7165f8a11a782ab6

packaging/sensord.spec
test/CMakeLists.txt
test/src/rotation_vector.c [new file with mode: 0644]

index 88d4f71..7fed2e6 100755 (executable)
@@ -148,6 +148,7 @@ systemctl daemon-reload
 /usr/bin/pressure
 /usr/bin/temperature
 /usr/bin/light
+/usr/bin/rotation_vector
 
 %license LICENSE.APLv2
 %{_datadir}/license/test
index 3c103cc..ff215c3 100644 (file)
@@ -37,6 +37,7 @@ add_executable(proxi src/proxi.c)
 add_executable(pressure src/pressure.c)
 add_executable(temperature src/temperature.c)
 add_executable(light src/light.c)
+add_executable(rotation_vector src/rotation_vector.c)
 
 SET_TARGET_PROPERTIES(accelerometer PROPERTIES LINKER_LANGUAGE C)
 SET_TARGET_PROPERTIES(geomagnetic PROPERTIES LINKER_LANGUAGE C)
@@ -48,6 +49,7 @@ SET_TARGET_PROPERTIES(proxi PROPERTIES LINKER_LANGUAGE C)
 SET_TARGET_PROPERTIES(pressure PROPERTIES LINKER_LANGUAGE C)
 SET_TARGET_PROPERTIES(temperature PROPERTIES LINKER_LANGUAGE C)
 SET_TARGET_PROPERTIES(light PROPERTIES LINKER_LANGUAGE C)
+SET_TARGET_PROPERTIES(rotation_vector PROPERTIES LINKER_LANGUAGE C)
 
 target_link_libraries(accelerometer glib-2.0 dlog sensor)
 target_link_libraries(geomagnetic glib-2.0 dlog sensor)
@@ -59,6 +61,7 @@ target_link_libraries(proxi glib-2.0 dlog sensor)
 target_link_libraries(pressure glib-2.0 dlog sensor)
 target_link_libraries(temperature glib-2.0 dlog sensor)
 target_link_libraries(light glib-2.0 dlog sensor)
+target_link_libraries(rotation_vector glib-2.0 dlog sensor)
 
 INSTALL(TARGETS accelerometer DESTINATION /usr/bin/)
 INSTALL(TARGETS geomagnetic DESTINATION /usr/bin/)
@@ -70,4 +73,5 @@ INSTALL(TARGETS proxi DESTINATION /usr/bin/)
 INSTALL(TARGETS pressure DESTINATION /usr/bin/)
 INSTALL(TARGETS temperature DESTINATION /usr/bin/)
 INSTALL(TARGETS light DESTINATION /usr/bin/)
+INSTALL(TARGETS rotation_vector DESTINATION /usr/bin/)
 
diff --git a/test/src/rotation_vector.c b/test/src/rotation_vector.c
new file mode 100644 (file)
index 0000000..093b828
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * sensord
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * 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.
+ *
+ */
+#include <time.h>
+#include <glib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sensor_internal.h>
+#include <stdbool.h>
+#include <sensor_common.h>
+#include <unistd.h>
+
+static GMainLoop *mainloop;
+
+void callback(unsigned int event_type, sensor_event_data_t *event, void *user_data)
+{
+       sensor_data_t *data = (sensor_data_t *)event->event_data;
+       printf("Rotation Vector [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0],
+                       data->values[1], data->values[2]);
+}
+
+void printformat()
+{
+       printf("Usage : ./rotation_vector <mode>(optional) <event> <interval>(optional)\n\n");
+
+       printf("mode:");
+       printf("[-p]\n");
+       printf("p is for polling based,default mode is event driven\n");
+
+       printf("event:");
+       printf("[RAW_DATA_REPORT_ON_TIME]\n");
+
+       printf("interval:\n");
+       printf("The time interval should be entered based on the sampling frequencies supported by "
+                       "accelerometer, gyroscope and geomagnetic sensors driver on the device in ms. If "
+                       "no value for rotation vector sensor is entered, a default value will be used.\n");
+}
+
+int main(int argc,char **argv)
+{
+       int result, handle, start_handle, stop_handle;
+       unsigned int event;
+       mainloop = g_main_loop_new(NULL, FALSE);
+       event = ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME;
+       event_condition_t *event_condition = (event_condition_t*) malloc(sizeof(event_condition_t));
+       event_condition->cond_op = CONDITION_EQUAL;
+
+       sensor_type_t type = ROTATION_VECTOR_SENSOR;
+
+       if (argc != 2 && argc != 3 && argc!=4) {
+               printformat();
+               free(event_condition);
+               return 0;
+       }
+
+       else if (argc>=3 && strcmp(argv[1], "-p") == 0 && strcmp(argv[2], "RAW_DATA_REPORT_ON_TIME") == 0) {
+               printf("Polling based\n");
+               handle = sf_connect(type);
+               result = sf_start(handle, 1);
+
+               if (result < 0) {
+                       printf("Can't start Rotation Vector SENSOR\n");
+                       printf("Error\n\n\n\n");
+                       return -1;
+               }
+
+               sensor_data_t data;
+
+               while(1) {
+                       result = sf_get_data(handle, ACCELEROMETER_BASE_DATA_SET , &data);
+                       printf("Rotation Vector [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+                       usleep(100000);
+               }
+
+               result = sf_disconnect(handle);
+
+               if (result < 0) {
+                       printf("Can't disconnect ROTATION VECTOR sensor\n");
+                       printf("Error\n\n\n\n");
+                       return -1;
+               }
+       }
+
+       else if (strcmp(argv[1], "RAW_DATA_REPORT_ON_TIME") == 0) {
+               printf("Event based\n");
+
+               event_condition->cond_value1 = 100;
+               if (argc == 3)
+                       event_condition->cond_value1 = atof(argv[2]);
+
+               handle = sf_connect(type);
+               result = sf_register_event(handle, event, event_condition, callback, NULL);
+
+               if (result < 0)
+                       printf("Can't register rotation vector event\n");
+
+               start_handle = sf_start(handle,0);
+
+               if (start_handle < 0) {
+                       printf("Error\n\n\n\n");
+                       sf_unregister_event(handle, event);
+                       sf_disconnect(handle);
+                       return -1;
+               }
+
+               g_main_loop_run(mainloop);
+               g_main_loop_unref(mainloop);
+
+               sf_unregister_event(handle, event);
+
+               stop_handle = sf_stop(handle);
+
+               if (stop_handle < 0) {
+                       printf("Error\n\n");
+                       return -1;
+               }
+
+               sf_disconnect(handle);
+               free(event_condition);
+       }
+
+       else {
+               printformat();
+       }
+
+       return 0;
+}
+