OSDN Git Service

enumeration: Refactor discover sensors code
authorDaniel Baluta <daniel.baluta@intel.com>
Tue, 27 Jan 2015 16:23:57 +0000 (18:23 +0200)
committerGerrit Code Review <gerrit2@irsgerrit001.ir.intel.com>
Fri, 6 Feb 2015 10:14:44 +0000 (10:14 +0000)
The functions for discovering poll sensors (discover_poll_sensors)
and trigger sensors (discover_trig_sensors) contain duplicate
code. If more sensor types need to be discovered (e.g. event sensors),
this would add even more duplicate code.

Refactor these two functions to minimize code duplication.

Change-Id: I92ac6f8c6a54afbce5a3ffb45d4b011204e8c754
Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Signed-off-by: Daniel Baluta <daniel.baluta@intel.com>
enumeration.c

index d1372ea..77f837d 100644 (file)
@@ -474,19 +474,19 @@ static void add_sensor (int dev_num, int catalog_index, int use_polling)
 }
 
 
-static void discover_poll_sensors (int dev_num, char map[CATALOG_SIZE])
+static void discover_sensors (int dev_num, char *sysfs_base_path, char map[CATALOG_SIZE],
+                             void (*discover_sensor)(int, char*, char*))
 {
-       char base_dir[PATH_MAX];
+       char sysfs_dir[PATH_MAX];
        DIR *dir;
        struct dirent *d;
        unsigned int i;
-        int c;
 
        memset(map, 0, CATALOG_SIZE);
 
-       snprintf(base_dir, sizeof(base_dir), BASE_PATH, dev_num);
+       snprintf(sysfs_dir, sizeof(sysfs_dir), sysfs_base_path, dev_num);
 
-       dir = opendir(base_dir);
+       dir = opendir(sysfs_dir);
        if (!dir) {
                return;
        }
@@ -503,60 +503,33 @@ static void discover_poll_sensors (int dev_num, char map[CATALOG_SIZE])
                        /* No discovery for virtual sensors */
                        if (sensor_catalog[i].is_virtual)
                                continue;
-
-                       for (c=0; c<sensor_catalog[i].num_channels; c++)
-                               if (!strcmp(d->d_name,sensor_catalog[i].channel[c].raw_path) || !strcmp(d->d_name, sensor_catalog[i].channel[c].input_path)) {
-                                       map[i] = 1;
-                                       break;
-                       }
+                       discover_sensor(i, d->d_name, map);
                }
        }
 
        closedir(dir);
 }
 
-
-static void discover_trig_sensors (int dev_num, char map[CATALOG_SIZE])
+static void check_poll_sensors (int i, char *sysfs_file, char map[CATALOG_SIZE])
 {
-       char scan_elem_dir[PATH_MAX];
-       DIR *dir;
-       struct dirent *d;
-       unsigned int i;
-
-       memset(map, 0, CATALOG_SIZE);
-
-       /* Enumerate entries in this iio device's scan_elements folder */
+        int c;
 
-       snprintf(scan_elem_dir, sizeof(scan_elem_dir), CHANNEL_PATH, dev_num);
+       for (c = 0; c < sensor_catalog[i].num_channels; c++)
+               if (!strcmp(sysfs_file, sensor_catalog[i].channel[c].raw_path) ||
+                   !strcmp(sysfs_file, sensor_catalog[i].channel[c].input_path)) {
+                       map[i] = 1;
+                       break;
+               }
+}
+static void check_trig_sensors (int i, char *sysfs_file, char map[CATALOG_SIZE])
+{
 
-       dir = opendir(scan_elem_dir);
-       if (!dir) {
+       if (!strcmp(sysfs_file, sensor_catalog[i].channel[0].en_path)) {
+               map[i] = 1;
                return;
        }
-
-       while ((d = readdir(dir))) {
-               if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
-                       continue;
-
-               /* Compare en entry to known ones and create matching sensors */
-
-               for (i = 0; i<CATALOG_SIZE; i++) {
-
-                       /* No discovery for virtual sensors */
-                       if (sensor_catalog[i].is_virtual)
-                               continue;
-
-                       if (!strcmp(d->d_name, sensor_catalog[i].channel[0].en_path)) {
-                                       map[i] = 1;
-                                       break;
-                       }
-               }
-       }
-
-       closedir(dir);
 }
 
-
 static void virtual_sensors_check (void)
 {
        int i;
@@ -763,8 +736,8 @@ void enumerate_sensors (void)
        for (dev_num=0; dev_num<MAX_DEVICES; dev_num++) {
                trig_found = 0;
 
-               discover_poll_sensors(dev_num, poll_sensors);
-               discover_trig_sensors(dev_num, trig_sensors);
+               discover_sensors(dev_num, BASE_PATH, poll_sensors, check_poll_sensors);
+               discover_sensors(dev_num, CHANNEL_PATH, trig_sensors, check_trig_sensors);
 
                for (i=0; i<CATALOG_SIZE; i++)
                        if (trig_sensors[i]) {