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<N> & gpio<N>.

@feature
This commit is contained in:
Amitesh Singh 2016-09-06 20:42:26 +05:30
parent e14a11d9fa
commit a2e3b8ad13
5 changed files with 30 additions and 1 deletions

View File

@ -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;
}

View File

@ -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;
/**@}*/

View File

@ -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;

View File

@ -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;

View File

@ -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);