static GMainLoop *mainloop;
-int get_event_driven(sensor_type_t sensor_type, char str[])
+void printpollinglogs(sensor_type_t type,sensor_data_t data)
+{
+ switch(type) {
+ case(ACCELEROMETER_SENSOR):
+ printf("Accelerometer [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(GYROSCOPE_SENSOR):
+ printf("Gyroscope [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(PRESSURE_SENSOR):
+ printf("Pressure [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(GEOMAGNETIC_SENSOR):
+ printf("Geomagnetic [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(LIGHT_SENSOR):
+ printf("Light [%lld] [%6.6f]\n\n", data.timestamp, data.values[0]);
+ break;
+ case(TEMPERATURE_SENSOR):
+ printf("Temperature [%lld] [%6.6f]\n\n", data.timestamp, data.values[0]);
+ break;
+ case(PROXIMITY_SENSOR):
+ printf("Proximity [%lld] [%6.6f]\n\n", data.timestamp, data.values[0]);
+ break;
+ case(ORIENTATION_SENSOR):
+ printf("Orientation [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(GRAVITY_SENSOR):
+ printf("Gravity [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(LINEAR_ACCEL_SENSOR):
+ printf("Linear Acceleration [%lld] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
+ break;
+ case(ROTATION_VECTOR_SENSOR):
+ printf("Rotation Vector [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2], data.values[3]);
+ break;
+ case(GEOMAGNETIC_RV_SENSOR):
+ printf("Geomagnetic Rv [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2], data.values[3]);
+ break;
+ case(GAMING_RV_SENSOR):
+ printf("Gaming Rv [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data.timestamp, data.values[0], data.values[1], data.values[2], data.values[3]);
+ break;
+ default:
+ return;
+ }
+}
+
+int get_event(sensor_type_t sensor_type, char str[])
{
switch (sensor_type) {
case ACCELEROMETER_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return ACCELEROMETER_RAW_DATA_EVENT;
break;
case GYROSCOPE_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return GYROSCOPE_RAW_DATA_EVENT;
break;
case PRESSURE_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return PRESSURE_RAW_DATA_EVENT;
break;
case GEOMAGNETIC_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return GEOMAGNETIC_RAW_DATA_EVENT;
break;
case LIGHT_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return LIGHT_LUX_DATA_EVENT;
break;
case TEMPERATURE_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return TEMPERATURE_RAW_DATA_EVENT;
break;
case PROXIMITY_SENSOR:
- if (strcmp(str, "EVENT_CHANGE_STATE") == 0)
+ if (strcmp(str, "CHANGE_STATE_EVENT") == 0)
return PROXIMITY_CHANGE_STATE_EVENT;
break;
case ORIENTATION_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return ORIENTATION_RAW_DATA_EVENT;
break;
case GRAVITY_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return GRAVITY_RAW_DATA_EVENT;
break;
case LINEAR_ACCEL_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return LINEAR_ACCEL_RAW_DATA_EVENT;
break;
case ROTATION_VECTOR_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return ROTATION_VECTOR_RAW_DATA_EVENT;
break;
case GEOMAGNETIC_RV_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return GEOMAGNETIC_RV_RAW_DATA_EVENT;
break;
case GAMING_RV_SENSOR:
- if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0)
+ if (strcmp(str, "RAW_DATA_EVENT") == 0)
return GAMING_RV_RAW_DATA_EVENT;
break;
}
-
return -1;
}
return 0;
}
+
+int polling_sensor(sensor_type_t sensor_type, unsigned int event)
+{
+ int result, handle;
+ printf("Polling based\n");
+
+ handle = sf_connect(sensor_type);
+ result = sf_start(handle, 1);
+
+ if (result < 0) {
+ printf("Can't start the sensor\n");
+ printf("Error\n\n\n\n");
+ return -1;
+ }
+
+ sensor_data_t data;
+
+ while(1) {
+ result = sf_get_data(handle, event , &data);
+ printpollinglogs(sensor_type, data);
+ usleep(100000);
+ }
+
+ result = sf_disconnect(handle);
+
+ if (result < 0) {
+ printf("Can't disconnect sensor\n");
+ printf("Error\n\n\n\n");
+ return -1;
+ }
+
+ return 0;
+}
void usage()
{
- printf("Usage : ./sensor-test <Sensor_type> <event>(optional) <interval>(optional)\n\n");
+ printf("Usage : ./sensor-test <Sensor_type> -p(optional) <event>(optional) <interval>(optional)\n\n");
printf("Sensor_type: ");
printf("[accelerometer] ");
printf("[gaming_rv] ");
printf("[light]\n");
printf("event:");
- printf("[RAW_DATA_REPORT_ON_TIME]\n");
-
+ printf("[RAW_DATA_EVENT]\n");
+ printf("-p: [polling]\n");
printf("Sensor_type: ");
printf("[proximity]\n");
printf("event:");
- printf("[EVENT_CHANGE_STATE]\n");
-
+ printf("[CHANGE_STATE_EVENT]\n");
+ printf("-p: [polling]\n");
printf("interval:\n");
printf("The time interval should be entered based on the sampling frequency supported by accelerometer driver on the device in ms.If no value for sensor is entered default value by the driver will be used.\n");
}
int interval;
unsigned int event;
sensor_type_t sensor_type;
+ bool is_polling;
char *end1;
- if (argc < 2 || argc > 4) {
+ if (argc < 2 || argc > 5) {
printf("Wrong number of arguments\n");
usage();
return 0;
interval = DEFAULT_EVENT_INTERVAL;
- if (argc == 3) {
- int temp_event = get_event_driven(sensor_type, argv[2]);
+ is_polling = FALSE;
- if (temp_event == -1) {
- interval = atoi(argv[2]);
- if (interval == 0){
- usage();
- return -1;
+ if(argc >= 3 && strcmp(argv[2], "-p") == 0) {
+ is_polling = TRUE;
+ }
+
+ if (is_polling) {
+ if (argc == 4) {
+ int temp_event = get_event(sensor_type, argv[3]);
+ if (temp_event == -1) {
+ interval = atoi(argv[3]);
+ if (interval == 0){
+ usage();
+ return -1;
+ }
+ }
+ else {
+ event = temp_event;
}
}
- else {
- event = temp_event;
+ else if (argc == 5) {
+ event = get_event(sensor_type, argv[3]);
+ interval = strtol(argv[4], &end1, 10);
+
+ if (*end1) {
+ printf("Conversion error, non-convertible part: %s\n", end1);
+ return -1;
+ }
}
+ return polling_sensor(sensor_type, event);
}
- else if (argc == 4) {
- event = get_event_driven(sensor_type, argv[2]);
- interval = strtol(argv[3], &end1, 10);
+ else {
+ if (argc == 3) {
+ int temp_event = get_event(sensor_type, argv[2]);
- if (*end1) {
- printf("Conversion error, non-convertible part: %s\n", end1);
- return -1;
+ if (temp_event == -1) {
+ interval = atoi(argv[2]);
+ if (interval == 0){
+ usage();
+ return -1;
+ }
+ }
+ else {
+ event = temp_event;
+ }
}
- }
+ else if (argc == 4) {
+ event = get_event(sensor_type, argv[2]);
+ interval = strtol(argv[3], &end1, 10);
- return check_sensor(sensor_type, event, interval);
+ if (*end1) {
+ printf("Conversion error, non-convertible part: %s\n", end1);
+ return -1;
+ }
+ }
+ return check_sensor(sensor_type, event, interval);
+ }
}