From a2e3b8ad134b7170dbd0ae585b331d87aa694cb6 Mon Sep 17 00:00:00 2001 From: Amitesh Singh Date: Tue, 6 Sep 2016 20:42:26 +0530 Subject: [PATCH] eeze: add support of GPIO sysfs detection and watch. This adds support for detection and watch of GPIO pins in /sys/class/gpio/* This detects both gpiochip & gpio. @feature --- src/bin/eeze/eeze_disk_ls.c | 13 +++++++++++++ src/lib/eeze/Eeze.h | 6 +++++- src/lib/eeze/eeze_udev_find.c | 3 +++ src/lib/eeze/eeze_udev_watch.c | 8 ++++++++ src/tests/eeze/eeze_test_udev.c | 1 + 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/bin/eeze/eeze_disk_ls.c b/src/bin/eeze/eeze_disk_ls.c index 1c1e6a2b04..7499bf098e 100644 --- a/src/bin/eeze/eeze_disk_ls.c +++ b/src/bin/eeze/eeze_disk_ls.c @@ -54,5 +54,18 @@ main(void) eeze_disk_free(disk); eina_stringshare_del(syspath); } + + disks = eeze_udev_find_by_type(EEZE_UDEV_TYPE_GPIO, NULL); + printf("Found the following GPIO(s):\n"); + EINA_LIST_FREE(disks, syspath) + { + Eeze_Disk *disk; + + disk = eeze_disk_new(syspath); + printf("\t%s - %s:%s\n", syspath, eeze_disk_devpath_get(disk), eeze_disk_mount_point_get(disk)); + eeze_disk_free(disk); + eina_stringshare_del(syspath); + } + return 0; } diff --git a/src/lib/eeze/Eeze.h b/src/lib/eeze/Eeze.h index b44a1d0504..f5dab4230d 100644 --- a/src/lib/eeze/Eeze.h +++ b/src/lib/eeze/Eeze.h @@ -278,7 +278,11 @@ typedef enum /** - Graphics * @since 1.18 */ - EEZE_UDEV_TYPE_GRAPHICS + EEZE_UDEV_TYPE_GRAPHICS, + /** - GPIOS (includes gpioN and gpiochipN) + * @since 1.19 + */ + EEZE_UDEV_TYPE_GPIO } Eeze_Udev_Type; /**@}*/ diff --git a/src/lib/eeze/eeze_udev_find.c b/src/lib/eeze/eeze_udev_find.c index 8850882938..8551d48bf2 100644 --- a/src/lib/eeze/eeze_udev_find.c +++ b/src/lib/eeze/eeze_udev_find.c @@ -249,6 +249,9 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype, case EEZE_UDEV_TYPE_GRAPHICS: udev_enumerate_add_match_subsystem(en, "graphics"); break; + case EEZE_UDEV_TYPE_GPIO: + udev_enumerate_add_match_subsystem(en, "gpio"); + break; default: break; diff --git a/src/lib/eeze/eeze_udev_watch.c b/src/lib/eeze/eeze_udev_watch.c index bc00618473..eccd61c3d1 100644 --- a/src/lib/eeze/eeze_udev_watch.c +++ b/src/lib/eeze/eeze_udev_watch.c @@ -262,6 +262,11 @@ _get_syspath_from_watch(void *data, || (strcmp(test, "graphics"))) goto error; break; + case EEZE_UDEV_TYPE_GPIO: + if ((!(test = udev_device_get_subsystem(device))) + || (strcmp(test, "gpio"))) + goto error; + break; default: break; @@ -350,6 +355,9 @@ eeze_udev_watch_add(Eeze_Udev_Type type, case EEZE_UDEV_TYPE_GRAPHICS: udev_monitor_filter_add_match_subsystem_devtype(mon, "graphics", NULL); break; + case EEZE_UDEV_TYPE_GPIO: + udev_monitor_filter_add_match_subsystem_devtype(mon, "gpio", NULL); + break; default: break; diff --git a/src/tests/eeze/eeze_test_udev.c b/src/tests/eeze/eeze_test_udev.c index 1e8b3c821a..74e2301f19 100644 --- a/src/tests/eeze/eeze_test_udev.c +++ b/src/tests/eeze/eeze_test_udev.c @@ -74,6 +74,7 @@ START_TEST(eeze_test_udev_watch) watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_IS_IT_HOT_OR_IS_IT_COLD_SENSOR, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE), catch_events, NULL); watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_V4L, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE), catch_events, NULL); watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_BLUETOOTH, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE), catch_events, NULL); + watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_GPIO, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE), catch_events, NULL); watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_NONE, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE), catch_events, NULL); eeze_udev_watch_del(watch);