iio: Remove iio structures from mraa_platform_t
[contrib/mraa.git] / src / mraa.c
index 36f7dc6..9dbffd3 100644 (file)
 
 #define MAX_PLATFORM_NAME_LENGTH 128
 mraa_board_t* plat = NULL;
-// static mraa_board_t* current_plat = NULL;
+mraa_iio_info_t* plat_iio = NULL;
 
 static char platform_name[MAX_PLATFORM_NAME_LENGTH];
-mraa_adv_func_t* advance_func;
 
 static int num_i2c_devices = 0;
 static int num_iio_devices = 0;
@@ -115,9 +114,6 @@ mraa_init()
     PyEval_InitThreads();
 #endif
 
-    advance_func = (mraa_adv_func_t*) malloc(sizeof(mraa_adv_func_t));
-    memset(advance_func, 0, sizeof(mraa_adv_func_t));
-
     mraa_platform_t platform_type;
 #if defined(X86PLAT)
     // Use runtime x86 platform detection
@@ -138,7 +134,7 @@ mraa_init()
         plat = (mraa_board_t*) calloc(1, sizeof(mraa_board_t));
         if (plat != NULL) {
             plat->platform_type = MRAA_NULL_PLATFORM;
-            plat->platform_name = "Null platform";
+            plat->platform_name = "Unknown platform";
         }
     }
     // Now detect sub platform
@@ -156,6 +152,7 @@ mraa_init()
     }
 #endif
 
+    plat_iio = (mraa_iio_info_t*) calloc(1, sizeof(mraa_iio_info_t));
     // Now detect IIO devices, linux only
     // find how many i2c buses we have if we haven't already
     if (num_iio_devices == 0) {
@@ -165,20 +162,22 @@ mraa_init()
     }
     char name[64], filepath[64];
     int fd, len, i;
-    plat->iio_device_count = num_iio_devices;
-    plat->iio_devices = calloc(num_iio_devices, sizeof(struct _iio));
+    plat_iio->iio_device_count = num_iio_devices;
+    plat_iio->iio_devices = calloc(num_iio_devices, sizeof(struct _iio));
     struct _iio* device;
     for (i=0; i < num_iio_devices; i++) {
-        device = &plat->iio_devices[i];
+        device = &plat_iio->iio_devices[i];
         device->num = i;
         snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
         fd = open(filepath, O_RDONLY);
-        if (fd != -1) {
+        if (fd > 0) {
             len = read(fd, &name, 64);
             if (len > 1) {
+                // use strndup
                 device->name = malloc((sizeof(char) * len) + sizeof(char));
                 strncpy(device->name, name, len);
             }
+            close(fd);
         }
     }
 
@@ -203,6 +202,9 @@ mraa_deinit()
         free(plat);
 
     }
+    if (plat_iio != NULL) {
+        free(plat_iio);
+    }
     closelog();
 }
 
@@ -766,15 +768,16 @@ mraa_get_sub_platform_index(int pin_or_bus)
 int
 mraa_get_iio_device_count()
 {
-    return plat->iio_device_count;
+    return plat_iio->iio_device_count;
 }
 
 int
 mraa_find_iio_device(const char* devicename)
 {
     int i = 0;
-    for (i; i < plat->iio_device_count; i++) {
+    for (i; i < plat_iio->iio_device_count; i++) {
 #if 0
+        // compare with devices array
         if (!strcmp() {
         }
 #endif