OSDN Git Service

Move module path to vendor
[android-x86/hardware-intel-libsensors.git] / discovery.c
1 /*
2  * Copyright (C) 2014-2015 Intel Corporation.
3  */
4 #include <stdlib.h>
5 #include <utils/Log.h>
6 #include <stdint.h>
7 #include <dirent.h>
8 #include <sys/types.h>
9 #include <hardware/sensors.h>
10
11 #include "common.h"
12
13 void discover_sensors(int dev_num, char *sysfs_base_path, char map[catalog_size],
14                       void (*discover_sensor)(int, char*, char*))
15 {
16         char sysfs_dir[PATH_MAX];
17         DIR *dir;
18         struct dirent *d;
19         unsigned int i;
20
21         memset(map, 0, catalog_size);
22
23         snprintf(sysfs_dir, sizeof(sysfs_dir), sysfs_base_path, dev_num);
24
25         dir = opendir(sysfs_dir);
26         if (!dir) {
27                 return;
28         }
29
30         /* Enumerate entries in this iio device's base folder */
31
32         while ((d = readdir(dir))) {
33                 if (!strncmp(d->d_name, ".", sizeof(".")) || !strncmp(d->d_name, "..", sizeof("..")))
34                         continue;
35
36                 /* If the name matches a catalog entry, flag it */
37                 for (i = 0; i < catalog_size; i++) {
38
39                         /* No discovery for virtual sensors */
40                         if (sensor_catalog[i].is_virtual)
41                                 continue;
42                         discover_sensor(i, d->d_name, map);
43                 }
44         }
45
46         closedir(dir);
47 }
48
49 void check_event_sensors(int i, char *sysfs_file, char map[catalog_size])
50 {
51         int j, k;
52
53         for (j = 0; j < sensor_catalog[i].num_channels; j++)
54                 for (k = 0; k < sensor_catalog[i].channel[j].num_events; k++) {
55                         if (!strcmp(sysfs_file, sensor_catalog[i].channel[j].event[k].ev_en_path)) {
56                                 map[i] = 1;
57                                 return;
58                         }
59                 }
60 }
61
62 void check_poll_sensors (int i, char *sysfs_file, char map[catalog_size])
63 {
64         int c;
65
66         for (c = 0; c < sensor_catalog[i].num_channels; c++)
67                 if (!strcmp(sysfs_file, sensor_catalog[i].channel[c].raw_path) ||
68                     !strcmp(sysfs_file, sensor_catalog[i].channel[c].input_path)) {
69                         map[i] = 1;
70                         break;
71                 }
72 }
73
74 void check_trig_sensors (int i, char *sysfs_file, char map[catalog_size])
75 {
76
77         if (!strcmp(sysfs_file, sensor_catalog[i].channel[0].en_path)) {
78                 map[i] = 1;
79                 return;
80         }
81 }