Gaming rotation vector - Feature merge from devel/tizen branch
[platform/core/system/sensord.git] / test / src / gravity.c
1 /*
2  * sensord
3  *
4  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <time.h>
21 #include <glib.h>
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <sensor_internal.h>
25 #include <stdbool.h>
26 #include <string.h>
27
28 static GMainLoop *mainloop;
29
30 void callback(unsigned int event_type, sensor_event_data_t *event, void *user_data)
31 {
32         sensor_data_t *data = (sensor_data_t *)event->event_data;
33         printf("Gravity [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
34 }
35
36 void printformat()
37 {
38         printf("Usage : ./gravity <event> <interval>(optional)\n\n");
39         printf("event:\n");
40         printf("RAW_DATA_REPORT_ON_TIME\n\n");
41         printf("interval:\n");
42         printf("The time interval should be entered based on the sampling "
43                         "frequencies supported by accelerometer, gyroscope and "
44                         "geomagnetic sensors driver on the device in ms. If no value "
45                         "for gravity sensor is entered, a default value will be used.\n");
46 }
47
48 int main(int argc,char **argv)
49 {
50         int result, handle, start_handle, stop_handle;
51         unsigned int event;
52
53         mainloop = g_main_loop_new(NULL, FALSE);
54         sensor_type_t type = GRAVITY_SENSOR;
55         event_condition_t *event_condition = (event_condition_t*) malloc(sizeof(event_condition_t));
56         event_condition->cond_op = CONDITION_EQUAL;
57         event_condition->cond_value1 = 100;
58
59         if (argc != 2 && argc != 3) {
60                 printformat();
61                 free(event_condition);
62                 return 0;
63         }
64         else {
65                 if (strcmp(argv[1], "RAW_DATA_REPORT_ON_TIME") == 0)
66                         event = GRAVITY_EVENT_RAW_DATA_REPORT_ON_TIME;
67                 else {
68                         printformat();
69                         free(event_condition);
70                         return 0;
71                 }
72
73                 if (argc == 3)
74                         event_condition->cond_value1 = atof(argv[2]);
75         }
76
77         handle = sf_connect(type);
78         result = sf_register_event(handle, event, event_condition, callback, NULL);
79
80         if (result < 0)
81                 printf("Can't register gravity virtual sensor\n");
82
83         start_handle = sf_start(handle, 0);
84
85         if (start_handle < 0) {
86                 printf("Error\n\n\n\n");
87                 sf_unregister_event(handle, event);
88                 sf_disconnect(handle);
89                 free(event_condition);
90                 return -1;
91         }
92
93         g_main_loop_run(mainloop);
94         g_main_loop_unref(mainloop);
95
96         sf_unregister_event(handle, event);
97         stop_handle = sf_stop(handle);
98
99         if (stop_handle < 0) {
100                 printf("Error\n\n");
101                 free(event_condition);
102                 return -1;
103         }
104
105         sf_disconnect(handle);
106         free(event_condition);
107
108         return 0;
109 }