From afa692034ff1f8e58acf538ff2d966e3dc883682 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 15 Jul 2011 17:28:13 +0000 Subject: [PATCH] eeze: add v4l device discovery. SVN revision: 61410 --- legacy/eeze/src/bin/eeze_udev_test.c | 19 +++++++++++++++++++ legacy/eeze/src/lib/Eeze.h | 4 +++- legacy/eeze/src/lib/eeze_udev_find.c | 3 +++ legacy/eeze/src/lib/eeze_udev_watch.c | 12 ++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/legacy/eeze/src/bin/eeze_udev_test.c b/legacy/eeze/src/bin/eeze_udev_test.c index 609325f121..130771a3c4 100644 --- a/legacy/eeze/src/bin/eeze_udev_test.c +++ b/legacy/eeze/src/bin/eeze_udev_test.c @@ -204,6 +204,25 @@ main() eina_stringshare_del(name); } + printf("\nGot any v4l device ?\n"); + /* find all V4L device, may be a webcam or anything that can get a video + * stream from the real worl in a numerical form */ + type = eeze_udev_find_by_type(EEZE_UDEV_TYPE_V4L, NULL); + type = eeze_udev_find_unlisted_similar(type); + EINA_LIST_FREE(type, name) /* get a device name using the device's syspath */ + { + if ((check = eeze_udev_syspath_get_property(name, "DEVNAME"))) + { + if ((check2 = eeze_udev_syspath_get_sysattr(name, "name"))) + { + printf("%s: '%s' [%s]\n", name, check2, check); + eina_stringshare_del(check2); + } + eina_stringshare_del(check); + } + eina_stringshare_del(name); + } + /* set a udev watch, grab all events because no EEZE_UDEV_TYPE filter is specified, * set the events to be sent to callback function catch_events(), and attach * kbdmouse to the watch as associated data diff --git a/legacy/eeze/src/lib/Eeze.h b/legacy/eeze/src/lib/Eeze.h index 80582011d6..19fc7c0a31 100644 --- a/legacy/eeze/src/lib/Eeze.h +++ b/legacy/eeze/src/lib/Eeze.h @@ -214,7 +214,9 @@ typedef enum /** - Temperature sensor */ EEZE_UDEV_TYPE_IS_IT_HOT_OR_IS_IT_COLD_SENSOR, /** - Network devices */ - EEZE_UDEV_TYPE_NET + EEZE_UDEV_TYPE_NET, + /** - WebCam */ + EEZE_UDEV_TYPE_V4L } Eeze_Udev_Type; /**@}*/ diff --git a/legacy/eeze/src/lib/eeze_udev_find.c b/legacy/eeze/src/lib/eeze_udev_find.c index 9af9364195..33a8563cd7 100644 --- a/legacy/eeze/src/lib/eeze_udev_find.c +++ b/legacy/eeze/src/lib/eeze_udev_find.c @@ -233,6 +233,9 @@ eeze_udev_find_by_type(Eeze_Udev_Type etype, udev_enumerate_add_match_property(en, "ID_MODEL", "Android_*"); break; */ + case EEZE_UDEV_TYPE_V4L: + udev_enumerate_add_match_subsystem(en, "video4linux"); + break; default: break; } diff --git a/legacy/eeze/src/lib/eeze_udev_watch.c b/legacy/eeze/src/lib/eeze_udev_watch.c index abed70adc9..a071f2a246 100644 --- a/legacy/eeze/src/lib/eeze_udev_watch.c +++ b/legacy/eeze/src/lib/eeze_udev_watch.c @@ -267,6 +267,13 @@ _get_syspath_from_watch(void *data, break; + case EEZE_UDEV_TYPE_V4L: + if ((!(test = udev_device_get_subsystem(device))) + || (strcmp(test, "video4linux"))) + goto error; + + break; + default: break; } @@ -343,6 +350,11 @@ eeze_udev_watch_add(Eeze_Udev_Type type, udev_monitor_filter_add_match_subsystem_devtype(mon, "input", "usb_interface"); break; */ + + case EEZE_UDEV_TYPE_V4L: + udev_monitor_filter_add_match_subsystem_devtype(mon, "video4linux", + NULL); + break; default: break; }