iio: iio add create trigger
[contrib/mraa.git] / src / iio / iio.c
index 299d2f6..16e4915 100644 (file)
@@ -36,6 +36,7 @@
 #define IIO_SLASH_DEV "/dev/" IIO_DEVICE
 #define IIO_SYSFS_DEVICE "/sys/bus/iio/devices/" IIO_DEVICE
 #define IIO_EVENTS "events"
+#define IIO_CONFIGFS_TRIGGER "/sys/kernel/config/iio/triggers/"
 
 mraa_iio_context
 mraa_iio_init(int device)
@@ -536,6 +537,28 @@ mraa_iio_get_mounting_matrix(mraa_iio_context dev, float mm[9])
     return MRAA_ERROR_UNSPECIFIED;
 }
 
+mraa_result_t
+mraa_iio_create_trigger(mraa_iio_context dev, const char* trigger)
+{
+    struct stat configfs_status;
+    struct stat trigger_status;
+    char buf[MAX_SIZE];
+
+    if (stat(IIO_CONFIGFS_TRIGGER, &configfs_status) == 0) {
+        memset(buf, 0, MAX_SIZE);
+        snprintf(buf, MAX_SIZE, IIO_CONFIGFS_TRIGGER "%s", trigger);
+        if (stat(buf, &trigger_status) != 0) {
+            if (mkdir(buf, configfs_status.st_mode) == 0)
+                return MRAA_SUCCESS;
+        } else {
+            // trigger folder already created
+            return MRAA_SUCCESS;
+        }
+    }
+
+    return MRAA_ERROR_UNSPECIFIED;
+}
+
 #if 0
 // does stop make any sense on iio devices?
 mraa_result_t