17042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen/* Industrialio event test code. 27042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * 37042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * Copyright (c) 2011-2012 Lars-Peter Clausen <lars@metafoo.de> 47042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * 57042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * This program is free software; you can redistribute it and/or modify it 67042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * under the terms of the GNU General Public License version 2 as published by 77042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * the Free Software Foundation. 87042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * 97042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * This program is primarily intended as an example application. 107042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * Reads the current buffer setup from sysfs and starts a short capture 117042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * from the specified device, pretty printing the result after appropriate 127042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * conversion. 137042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * 147042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * Usage: 157042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * iio_event_monitor <device_name> 167042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen * 177042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen */ 187042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 197042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#define _GNU_SOURCE 207042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 217042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <unistd.h> 227042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <stdbool.h> 237042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <stdio.h> 247042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <errno.h> 257042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <string.h> 267042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <poll.h> 277042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <fcntl.h> 287042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include <sys/ioctl.h> 297042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen#include "iio_utils.h" 3006458e277eac2b8761b0a04d3c808d57be281a2eJonathan Cameron#include <linux/iio/events.h> 317042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 327042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic const char * const iio_chan_type_name_spec[] = { 337042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_VOLTAGE] = "voltage", 347042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_CURRENT] = "current", 357042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_POWER] = "power", 367042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_ACCEL] = "accel", 377042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_ANGL_VEL] = "anglvel", 387042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MAGN] = "magn", 397042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_LIGHT] = "illuminance", 407042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_INTENSITY] = "intensity", 417042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_PROXIMITY] = "proximity", 427042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_TEMP] = "temp", 437042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_INCLI] = "incli", 447042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_ROT] = "rot", 457042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_ANGL] = "angl", 467042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_TIMESTAMP] = "timestamp", 477042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_CAPACITANCE] = "capacitance", 48a21601463d0e542d20635b835b6c97294571b0a5Peter Meerwald [IIO_ALTVOLTAGE] = "altvoltage", 490378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald [IIO_CCT] = "cct", 500378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald [IIO_PRESSURE] = "pressure", 510378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald [IIO_HUMIDITYRELATIVE] = "humidityrelative", 527042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen}; 537042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 547042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic const char * const iio_ev_type_text[] = { 557042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_TYPE_THRESH] = "thresh", 567042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_TYPE_MAG] = "mag", 577042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_TYPE_ROC] = "roc", 587042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_TYPE_THRESH_ADAPTIVE] = "thresh_adaptive", 597042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_TYPE_MAG_ADAPTIVE] = "mag_adaptive", 607042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen}; 617042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 627042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic const char * const iio_ev_dir_text[] = { 637042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_DIR_EITHER] = "either", 647042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_DIR_RISING] = "rising", 657042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_EV_DIR_FALLING] = "falling" 667042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen}; 677042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 687042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic const char * const iio_modifier_names[] = { 697042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MOD_X] = "x", 707042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MOD_Y] = "y", 717042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MOD_Z] = "z", 727042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MOD_LIGHT_BOTH] = "both", 737042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen [IIO_MOD_LIGHT_IR] = "ir", 74da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_ROOT_SUM_SQUARED_X_Y] = "sqrt(x^2+y^2)", 75da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_SUM_SQUARED_X_Y_Z] = "x^2+y^2+z^2", 760378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald [IIO_MOD_LIGHT_BOTH] = "both", 770378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald [IIO_MOD_LIGHT_IR] = "ir", 78da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_LIGHT_CLEAR] = "clear", 79da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_LIGHT_RED] = "red", 80da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_LIGHT_GREEN] = "green", 81da4db94080f0c54929a031f37e550001d0068930Peter Meerwald [IIO_MOD_LIGHT_BLUE] = "blue", 827042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen}; 837042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 847042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic bool event_is_known(struct iio_event_data *event) 857042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen{ 867042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_chan_type type = IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(event->id); 877042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_modifier mod = IIO_EVENT_CODE_EXTRACT_MODIFIER(event->id); 887042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_event_type ev_type = IIO_EVENT_CODE_EXTRACT_TYPE(event->id); 897042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_event_direction dir = IIO_EVENT_CODE_EXTRACT_DIR(event->id); 907042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 917042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen switch (type) { 927042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_VOLTAGE: 937042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_CURRENT: 947042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_POWER: 957042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_ACCEL: 967042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_ANGL_VEL: 977042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MAGN: 987042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_LIGHT: 997042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_INTENSITY: 1007042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_PROXIMITY: 1017042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_TEMP: 1027042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_INCLI: 1037042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_ROT: 1047042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_ANGL: 1057042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_TIMESTAMP: 1067042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_CAPACITANCE: 107a21601463d0e542d20635b835b6c97294571b0a5Peter Meerwald case IIO_ALTVOLTAGE: 1080378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald case IIO_CCT: 1090378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald case IIO_PRESSURE: 1100378250b52ca3afb83257868448ef9d1efcbf607Peter Meerwald case IIO_HUMIDITYRELATIVE: 1117042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen break; 1127042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen default: 1137042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return false; 1147042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1157042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1167042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen switch (mod) { 1177042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_NO_MOD: 1187042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MOD_X: 1197042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MOD_Y: 1207042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MOD_Z: 1217042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MOD_LIGHT_BOTH: 1227042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_MOD_LIGHT_IR: 123da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_ROOT_SUM_SQUARED_X_Y: 124da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_SUM_SQUARED_X_Y_Z: 125da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_LIGHT_CLEAR: 126da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_LIGHT_RED: 127da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_LIGHT_GREEN: 128da4db94080f0c54929a031f37e550001d0068930Peter Meerwald case IIO_MOD_LIGHT_BLUE: 1297042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen break; 1307042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen default: 1317042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return false; 1327042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1337042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1347042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen switch (ev_type) { 1357042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_TYPE_THRESH: 1367042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_TYPE_MAG: 1377042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_TYPE_ROC: 1387042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_TYPE_THRESH_ADAPTIVE: 1397042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_TYPE_MAG_ADAPTIVE: 1407042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen break; 1417042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen default: 1427042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return false; 1437042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1447042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1457042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen switch (dir) { 1467042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_DIR_EITHER: 1477042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_DIR_RISING: 1487042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen case IIO_EV_DIR_FALLING: 1497042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen break; 1507042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen default: 1517042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return false; 1527042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1537042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1547042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return true; 1557042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen} 1567042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1577042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenstatic void print_event(struct iio_event_data *event) 1587042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen{ 1597042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_chan_type type = IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(event->id); 1607042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_modifier mod = IIO_EVENT_CODE_EXTRACT_MODIFIER(event->id); 1617042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_event_type ev_type = IIO_EVENT_CODE_EXTRACT_TYPE(event->id); 1627042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen enum iio_event_direction dir = IIO_EVENT_CODE_EXTRACT_DIR(event->id); 1637042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen int chan = IIO_EVENT_CODE_EXTRACT_CHAN(event->id); 1647042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen int chan2 = IIO_EVENT_CODE_EXTRACT_CHAN2(event->id); 1657042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen bool diff = IIO_EVENT_CODE_EXTRACT_DIFF(event->id); 1667042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1677042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (!event_is_known(event)) { 1687042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("Unknown event: time: %lld, id: %llx\n", 1697042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen event->timestamp, event->id); 1707042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return; 1717042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1727042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1737042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("Event: time: %lld, ", event->timestamp); 1747042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1757042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (mod != IIO_NO_MOD) { 1767042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("type: %s(%s), ", 1777042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen iio_chan_type_name_spec[type], 1787042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen iio_modifier_names[mod]); 1797042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } else { 1807042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("type: %s, ", 1817042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen iio_chan_type_name_spec[type]); 1827042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 1837042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1847042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (diff && chan >= 0 && chan2 >= 0) 1857042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("channel: %d-%d, ", chan, chan2); 1867042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen else if (chan >= 0) 1877042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("channel: %d, ", chan); 1887042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1897042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("evtype: %s, direction: %s\n", 1907042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen iio_ev_type_text[ev_type], 1917042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen iio_ev_dir_text[dir]); 1927042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen} 1937042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 1947042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenint main(int argc, char **argv) 1957042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen{ 1967042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen struct iio_event_data event; 1977042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen const char *device_name; 1987042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen char *chrdev_name; 1997042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen int ret; 2007042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen int dev_num; 2017042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen int fd, event_fd; 2027042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2037042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (argc <= 1) { 2047042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("Usage: %s <device_name>\n", argv[0]); 2057042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return -1; 2067042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2077042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2087042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen device_name = argv[1]; 2097042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2107042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen dev_num = find_type_by_name(device_name, "iio:device"); 2117042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (dev_num >= 0) { 2127042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("Found IIO device with name %s with device number %d\n", 2137042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen device_name, dev_num); 2147042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = asprintf(&chrdev_name, "/dev/iio:device%d", dev_num); 2157042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (ret < 0) { 2167042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = -ENOMEM; 2177042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen goto error_ret; 2187042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2197042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } else { 2207042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen /* If we can't find a IIO device by name assume device_name is a 2217042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen IIO chrdev */ 2227042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen chrdev_name = strdup(device_name); 2237042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2247042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2257042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen fd = open(chrdev_name, 0); 2267042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (fd == -1) { 2277042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen fprintf(stdout, "Failed to open %s\n", chrdev_name); 2287042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = -errno; 2297042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen goto error_free_chrdev_name; 2307042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2317042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2327042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = ioctl(fd, IIO_GET_EVENT_FD_IOCTL, &event_fd); 2337042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2347042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen close(fd); 2357042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2367042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (ret == -1 || event_fd == -1) { 2377042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen fprintf(stdout, "Failed to retrieve event fd\n"); 2387042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = -errno; 2397042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen goto error_free_chrdev_name; 2407042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2417042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2427042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen while (true) { 2437042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = read(event_fd, &event, sizeof(event)); 2447042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (ret == -1) { 2457042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen if (errno == EAGAIN) { 2467042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen printf("nothing available\n"); 2477042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen continue; 2487042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } else { 2497042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen perror("Failed to read event from device"); 2507042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen ret = -errno; 2517042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen break; 2527042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2537042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2547042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2557042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen print_event(&event); 2567042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen } 2577042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen 2587042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen close(event_fd); 2597042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenerror_free_chrdev_name: 2607042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen free(chrdev_name); 2617042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausenerror_ret: 2627042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen return ret; 2637042122fe5532fa07b370447755423cd834b57eaLars-Peter Clausen} 264