From 549f5466ca7bf5ef7b4b82005d0744c7e21677bc Mon Sep 17 00:00:00 2001 From: Cristina Ciocan Date: Tue, 10 Feb 2015 18:32:31 +0200 Subject: [PATCH] [Activity HAL] Separation of common code Separated in common-enumeration source file functions that participate both in activity HAL discovery and in the sensor HAL discovery of event mode sensors. Change-Id: I7578e2a5708b870269166f43ab9341a6f983b5a9 Signed-off-by: Cristina Ciocan Reviewed-on: https://android.intel.com:443/331748 --- Android.mk | 1 + common.h | 9 +++++ discovery.c | 81 +++++++++++++++++++++++++++++++++++++++++++ enumeration.c | 109 +++++++++++----------------------------------------------- 4 files changed, 111 insertions(+), 89 deletions(-) create mode 100644 discovery.c diff --git a/Android.mk b/Android.mk index 7502a4c..5021cdb 100644 --- a/Android.mk +++ b/Android.mk @@ -21,6 +21,7 @@ src_files := $(src_path)/entry.c \ $(src_path)/matrix-ops.c \ $(src_path)/gyro-calibration.c \ $(src_path)/filtering.c \ + $(src_path)/discovery.c \ LOCAL_C_INCLUDES += $(LOCAL_PATH) vendor/intel/hardware/iio-sensors ifeq ($(HAL_AUTODETECT),true) diff --git a/common.h b/common.h index c35b88b..9fcb914 100644 --- a/common.h +++ b/common.h @@ -284,5 +284,14 @@ extern int sensor_count; extern struct sensor_t sensor_desc[MAX_SENSORS]; extern sensor_info_t sensor[MAX_SENSORS]; extern sensor_catalog_entry_t sensor_catalog[]; +extern unsigned int catalog_size; + +/* Needed both in sensors and activity HALs */ +void check_trig_sensors (int i, char *sysfs_file, char map[catalog_size]); +void check_poll_sensors (int i, char *sysfs_file, char map[catalog_size]); +void check_event_sensors (int i, char *sysfs_file, char map[catalog_size]); +void discover_sensors(int dev_num, char *sysfs_base_path, char map[catalog_size], + void (*discover_sensor)(int, char*, char*)); + #endif diff --git a/discovery.c b/discovery.c new file mode 100644 index 0000000..640c3f9 --- /dev/null +++ b/discovery.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2014-2015 Intel Corporation. + */ +#include +#include +#include +#include +#include +#include + +#include "common.h" + +void discover_sensors(int dev_num, char *sysfs_base_path, char map[catalog_size], + void (*discover_sensor)(int, char*, char*)) +{ + char sysfs_dir[PATH_MAX]; + DIR *dir; + struct dirent *d; + unsigned int i; + + memset(map, 0, catalog_size); + + snprintf(sysfs_dir, sizeof(sysfs_dir), sysfs_base_path, dev_num); + + dir = opendir(sysfs_dir); + if (!dir) { + return; + } + + /* Enumerate entries in this iio device's base folder */ + + while ((d = readdir(dir))) { + if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) + continue; + + /* If the name matches a catalog entry, flag it */ + for (i = 0; i < catalog_size; i++) { + + /* No discovery for virtual sensors */ + if (sensor_catalog[i].is_virtual) + continue; + discover_sensor(i, d->d_name, map); + } + } + + closedir(dir); +} + +void check_event_sensors(int i, char *sysfs_file, char map[catalog_size]) +{ + int j, k; + + for (j = 0; j < sensor_catalog[i].num_channels; j++) + for (k = 0; k < sensor_catalog[i].channel[j].num_events; k++) { + if (!strcmp(sysfs_file, sensor_catalog[i].channel[j].event[k].ev_en_path)) { + map[i] = 1; + return; + } + } +} + +void check_poll_sensors (int i, char *sysfs_file, char map[catalog_size]) +{ + int c; + + 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; + } +} + +void check_trig_sensors (int i, char *sysfs_file, char map[catalog_size]) +{ + + if (!strcmp(sysfs_file, sensor_catalog[i].channel[0].en_path)) { + map[i] = 1; + return; + } +} diff --git a/enumeration.c b/enumeration.c index f3e6752..e151e53 100644 --- a/enumeration.c +++ b/enumeration.c @@ -167,7 +167,7 @@ sensor_catalog_entry_t sensor_catalog[] = { }, }; -#define CATALOG_SIZE ARRAY_SIZE(sensor_catalog) +unsigned int catalog_size = ARRAY_SIZE(sensor_catalog); /* ACPI PLD (physical location of device) definitions, as used with sensors */ @@ -626,75 +626,6 @@ static void add_sensor (int dev_num, int catalog_index, int mode) sensor_count++; } - -static void discover_sensors (int dev_num, char *sysfs_base_path, char map[CATALOG_SIZE], - void (*discover_sensor)(int, char*, char*)) -{ - char sysfs_dir[PATH_MAX]; - DIR *dir; - struct dirent *d; - unsigned int i; - - memset(map, 0, CATALOG_SIZE); - - snprintf(sysfs_dir, sizeof(sysfs_dir), sysfs_base_path, dev_num); - - dir = opendir(sysfs_dir); - if (!dir) { - return; - } - - /* Enumerate entries in this iio device's base folder */ - - while ((d = readdir(dir))) { - if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) - continue; - - /* If the name matches a catalog entry, flag it */ - for (i = 0; i < CATALOG_SIZE; i++) { - - /* No discovery for virtual sensors */ - if (sensor_catalog[i].is_virtual) - continue; - discover_sensor(i, d->d_name, map); - } - } - - closedir(dir); -} - -static void check_poll_sensors (int i, char *sysfs_file, char map[CATALOG_SIZE]) -{ - int c; - - 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]) -{ - - if (!strcmp(sysfs_file, sensor_catalog[i].channel[0].en_path)) { - map[i] = 1; - return; - } -} - -static void check_event_sensors(int i, char *sysfs_file, char map[CATALOG_SIZE]) -{ - int j, k; - - for (j = 0; j < sensor_catalog[i].num_channels; j++) - for (k = 0; k < sensor_catalog[i].channel[j].num_events; k++) - if (!strcmp(sysfs_file, sensor_catalog[i].channel[j].event[k].ev_en_path)) { - map[i] = 1; - return ; - } -} - static void virtual_sensors_check (void) { int i; @@ -703,9 +634,9 @@ static void virtual_sensors_check (void) int has_mag = 0; int has_rot = 0; int has_ori = 0; - int catalog_size = CATALOG_SIZE; int gyro_cal_idx = 0; int magn_cal_idx = 0; + unsigned int j; for (i=0; i