Adding polling based support for testing gyroscope sensor 68/32368/4
authorVibhor Gaur <vibhor.gaur@samsung.com>
Mon, 22 Dec 2014 12:09:15 +0000 (17:39 +0530)
committerVibhor Gaur <vibhor.gaur@samsung.com>
Mon, 22 Dec 2014 12:09:40 +0000 (17:39 +0530)
Change-Id: Ibff596783a3d5c69f8fedc284df2f46cea144315

test/src/gyro.c

index ae34d95..b74d98d 100644 (file)
  * limitations under the License.
  *
  */
-
 #include <time.h>
 #include <glib.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <sensor_internal.h>
 #include <stdbool.h>
-#include <string.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("Gyroscope [%lld] [%6.6f] [%6.6f] [%6.6f] \n\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
+       printf("Gyroscope [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
 }
 
 void printformat()
 {
-       printf("Usage : ./gyro <event> <interval>(optional)\n\n");
-       printf("event:\n");
-       printf("RAW_DATA_REPORT_ON_TIME\n");
+       printf("Usage : ./gyro <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 frequency supported by gyroscope driver on the device in ms.If no value for sensor is entered default value by the driver will be used.\n");
 }
@@ -46,61 +52,89 @@ int main(int argc,char **argv)
 {
        int result, handle, start_handle, stop_handle;
        unsigned int event;
-
        mainloop = g_main_loop_new(NULL, FALSE);
-       sensor_type_t type = GYROSCOPE_SENSOR;
+       event = GYROSCOPE_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;
-       event_condition->cond_value1 = 10.52;
 
-       if (argc != 2 && argc != 3) {
+       sensor_type_t type = GYROSCOPE_SENSOR;
+
+       if (argc != 2 && argc != 3 && argc!=4) {
                printformat();
                free(event_condition);
                return 0;
        }
-       else {
-                if (strcmp(argv[1], "RAW_DATA_REPORT_ON_TIME") == 0)
-                       event = GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME;
 
-                else {
-                       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 gyroscope SENSOR\n");
+                       printf("Error\n\n\n\n");
+                       return -1;
                }
 
-               if(argc == 3)
-                       event_condition->cond_value1 = atof(argv[2]);
+               sensor_data_t data;
+
+               while(1) {
+                       result = sf_get_data(handle, GYRO_BASE_DATA_SET , &data);
+                       printf("Gyroscope [%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 gyroscope sensor\n");
+                       printf("Error\n\n\n\n");
+                       return -1;
+               }
        }
 
-       handle = sf_connect(type);
-       result = sf_register_event(handle, event, event_condition, callback, NULL);
+       else if (strcmp(argv[1], "RAW_DATA_REPORT_ON_TIME") == 0) {
+               printf("Event based\n");
+
+               event_condition->cond_value1 = 10.52;
+               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 gyroscope\n");
+               if (result < 0)
+                       printf("Can't register gyroscope\n");
 
-       start_handle = sf_start(handle, 0);
+               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);
 
-       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);
+               stop_handle = sf_stop(handle);
 
-       sf_unregister_event(handle, event);
-       stop_handle = sf_stop(handle);
+               if (stop_handle < 0) {
+                       printf("Error\n\n");
+                       return -1;
+               }
 
-       if (stop_handle < 0) {
-               printf("Error\n\n");
-               return -1;
+               sf_disconnect(handle);
+               free(event_condition);
        }
 
-       sf_disconnect(handle);
-
-       free(event_condition);
+       else {
+               printformat();
+       }
 
        return 0;
 }