From 7b70d5201c08e37df21de0ac5152d7da6b85d4a9 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 13 Feb 2009 13:17:31 +0100 Subject: v4l2-apps: rename v4l2_sysfs_path to v4l2-sysfs-path From: Hans Verkuil All other tools use - instead of the awkward-to-type underscore, so rename v4l2_sysfs_path to be consistent with the others. Please pay attention to existing nameing conventions the next time someone adds a tool. Priority: normal Signed-off-by: Hans Verkuil --- v4l2-apps/util/Makefile | 6 +- v4l2-apps/util/v4l2-sysfs-path.c | 191 +++++++++++++++++++++++++++++++++++++++ v4l2-apps/util/v4l2_sysfs_path.c | 191 --------------------------------------- 3 files changed, 194 insertions(+), 194 deletions(-) create mode 100644 v4l2-apps/util/v4l2-sysfs-path.c delete mode 100644 v4l2-apps/util/v4l2_sysfs_path.c diff --git a/v4l2-apps/util/Makefile b/v4l2-apps/util/Makefile index 4bfe22aa1..6f9d1071a 100644 --- a/v4l2-apps/util/Makefile +++ b/v4l2-apps/util/Makefile @@ -7,7 +7,7 @@ endif CPPFLAGS += -I../include -D_GNU_SOURCE LDFLAGS += -lm -binaries = v4l2-ctl v4l2-dbg v4l2-compliance ivtv-ctl cx18-ctl v4l2_sysfs_path +binaries = v4l2-ctl v4l2-dbg v4l2-compliance ivtv-ctl cx18-ctl v4l2-sysfs-path ifeq ($(prefix),) prefix = /usr @@ -34,9 +34,9 @@ v4l2-dbg: v4l2-dbg.o v4l2-chipids.o v4l2-dbg.o: v4l2-dbg.h v4l2-dbg-bttv.h v4l2-dbg-em28xx.h v4l2-dbg-saa7134.h -v4l2_sysfs_path.o: v4l2_sysfs_path.c ../libv4l2util/v4l2_driver.h +v4l2-sysfs-path.o: v4l2-sysfs-path.c ../libv4l2util/v4l2_driver.h -v4l2_sysfs_path: v4l2_sysfs_path.o ../libv4l2util/libv4l2util.a +v4l2-sysfs-path: v4l2-sysfs-path.o ../libv4l2util/libv4l2util.a $(CC) $^ -o $@ -lsysfs ../libv4l2util/libv4l2util.a: diff --git a/v4l2-apps/util/v4l2-sysfs-path.c b/v4l2-apps/util/v4l2-sysfs-path.c new file mode 100644 index 000000000..e3f3e63e8 --- /dev/null +++ b/v4l2-apps/util/v4l2-sysfs-path.c @@ -0,0 +1,191 @@ +/* + Copyright (C) 2009 Mauro Carvalho Chehab + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 2 of the License. + + The sysfs logic were adapted from a C++/Boost snippet code sent by + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "../libv4l2util/v4l2_driver.h" +#include +#include +#include +#include +#include +#include + +#define USB_ID "usb-" +#define PCI_ID "PCI:" +#define PCIe_ID "PCIe:" + +char *obtain_bus_sysfs_path(char *bus_info) +{ + struct sysfs_device *pcictl = NULL; + struct sysfs_bus *bus = NULL; + struct sysfs_device *busdev = NULL; + struct dlist *busdevs = NULL; + struct sysfs_device *pdev = NULL; + char *tmp = NULL, *busname, *buspath; + int pci; + + if (!strncmp(bus_info, USB_ID, strlen(USB_ID))) { + bus_info += strlen(USB_ID); + pci = 0; + } else if (!strncmp(bus_info, PCI_ID, strlen(PCI_ID))) { + bus_info += strlen(PCI_ID); + pci = 1; + } else if (!strncmp(bus_info, PCIe_ID, strlen(PCIe_ID))) { + bus_info += strlen(PCIe_ID); + pci = 1; + } else + return NULL; + + busname = strtok(bus_info, "-"); + if (!busname) + return NULL; + + buspath = strtok(NULL, "-"); + if (!buspath && !pci) + return NULL; + + /* open bus host controller */ + pcictl = sysfs_open_device("pci", busname); + if (!pcictl) + goto err; + + /* We have all we need for PCI devices */ + if (pci) { + char *name; + + asprintf(&name, "%s", pcictl->path); + return name; + } + + /* find matching usb bus */ + bus = sysfs_open_bus("usb"); + if (!bus) + goto err; + + busdevs = sysfs_get_bus_devices(bus); + if (!busdevs) + goto err; + + dlist_for_each_data(busdevs, busdev, struct sysfs_device) { + /* compare pathes of bus host controller and + parent of enumerated bus devices */ + + pdev = sysfs_get_device_parent(busdev); + if (!pdev) + continue; + + if (!strcmp(pcictl->path, pdev->path)) + break; + } + + if (!pdev) + goto err; + + sysfs_close_device(pcictl); + pcictl = NULL; + + /* assemble bus device path */ + if (busdev) { + struct sysfs_attribute *busnumattr; + unsigned int busnum; + char *name; + + busnumattr = sysfs_get_device_attr(busdev, "busnum"); + if (!busnumattr) + goto err; + + tmp = malloc(busnumattr->len + 1); + strncpy(tmp, busnumattr->value, busnumattr->len); + tmp[busnumattr->len] = '\0'; + + if (sscanf(tmp, "%u", &busnum) != 1) + goto err; + + asprintf(&name, "%s/%d-%s", busdev->path, + busnum, buspath); + + free(tmp); + sysfs_close_bus(bus); + + return name; + } + +err: + if (tmp) + free(tmp); + if (bus) + sysfs_close_bus(bus); + if (pcictl) + sysfs_close_device(pcictl); + + return NULL; +} + +void get_sysfs(char *fname) +{ + struct v4l2_driver drv; + char *path; + if (v4l2_open(fname, 0, &drv) < 0) { + perror(fname); + return; + } + + printf("device = %s\n", fname); + printf("bus info = %s\n", drv.cap.bus_info); + path = obtain_bus_sysfs_path((char *)drv.cap.bus_info); + if (path) { + printf("sysfs path = %s\n\n", path); + free(path); + } + + v4l2_close(&drv); +} + +void read_dir(char *dirname) +{ + DIR *dir; + struct dirent *entry; + const char *vid = "video"; + const char *rad = "radio"; + char *p, name[512]; + + dir = opendir(dirname); + if (!dir) + return; + + strcpy(name, dirname); + strcat(name, "/"); + p = name + strlen(name); + + entry = readdir(dir); + while (entry) { + if (!strncmp(entry->d_name, vid, strlen(vid)) || + !strncmp(entry->d_name, rad, strlen(rad))) { + strcpy(p, entry->d_name); + + get_sysfs(name); + } + entry = readdir(dir); + } + closedir(dir); +} + +int main(void) +{ + read_dir("/dev"); + return 0; +} diff --git a/v4l2-apps/util/v4l2_sysfs_path.c b/v4l2-apps/util/v4l2_sysfs_path.c deleted file mode 100644 index e3f3e63e8..000000000 --- a/v4l2-apps/util/v4l2_sysfs_path.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - Copyright (C) 2009 Mauro Carvalho Chehab - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation version 2 of the License. - - The sysfs logic were adapted from a C++/Boost snippet code sent by - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "../libv4l2util/v4l2_driver.h" -#include -#include -#include -#include -#include -#include - -#define USB_ID "usb-" -#define PCI_ID "PCI:" -#define PCIe_ID "PCIe:" - -char *obtain_bus_sysfs_path(char *bus_info) -{ - struct sysfs_device *pcictl = NULL; - struct sysfs_bus *bus = NULL; - struct sysfs_device *busdev = NULL; - struct dlist *busdevs = NULL; - struct sysfs_device *pdev = NULL; - char *tmp = NULL, *busname, *buspath; - int pci; - - if (!strncmp(bus_info, USB_ID, strlen(USB_ID))) { - bus_info += strlen(USB_ID); - pci = 0; - } else if (!strncmp(bus_info, PCI_ID, strlen(PCI_ID))) { - bus_info += strlen(PCI_ID); - pci = 1; - } else if (!strncmp(bus_info, PCIe_ID, strlen(PCIe_ID))) { - bus_info += strlen(PCIe_ID); - pci = 1; - } else - return NULL; - - busname = strtok(bus_info, "-"); - if (!busname) - return NULL; - - buspath = strtok(NULL, "-"); - if (!buspath && !pci) - return NULL; - - /* open bus host controller */ - pcictl = sysfs_open_device("pci", busname); - if (!pcictl) - goto err; - - /* We have all we need for PCI devices */ - if (pci) { - char *name; - - asprintf(&name, "%s", pcictl->path); - return name; - } - - /* find matching usb bus */ - bus = sysfs_open_bus("usb"); - if (!bus) - goto err; - - busdevs = sysfs_get_bus_devices(bus); - if (!busdevs) - goto err; - - dlist_for_each_data(busdevs, busdev, struct sysfs_device) { - /* compare pathes of bus host controller and - parent of enumerated bus devices */ - - pdev = sysfs_get_device_parent(busdev); - if (!pdev) - continue; - - if (!strcmp(pcictl->path, pdev->path)) - break; - } - - if (!pdev) - goto err; - - sysfs_close_device(pcictl); - pcictl = NULL; - - /* assemble bus device path */ - if (busdev) { - struct sysfs_attribute *busnumattr; - unsigned int busnum; - char *name; - - busnumattr = sysfs_get_device_attr(busdev, "busnum"); - if (!busnumattr) - goto err; - - tmp = malloc(busnumattr->len + 1); - strncpy(tmp, busnumattr->value, busnumattr->len); - tmp[busnumattr->len] = '\0'; - - if (sscanf(tmp, "%u", &busnum) != 1) - goto err; - - asprintf(&name, "%s/%d-%s", busdev->path, - busnum, buspath); - - free(tmp); - sysfs_close_bus(bus); - - return name; - } - -err: - if (tmp) - free(tmp); - if (bus) - sysfs_close_bus(bus); - if (pcictl) - sysfs_close_device(pcictl); - - return NULL; -} - -void get_sysfs(char *fname) -{ - struct v4l2_driver drv; - char *path; - if (v4l2_open(fname, 0, &drv) < 0) { - perror(fname); - return; - } - - printf("device = %s\n", fname); - printf("bus info = %s\n", drv.cap.bus_info); - path = obtain_bus_sysfs_path((char *)drv.cap.bus_info); - if (path) { - printf("sysfs path = %s\n\n", path); - free(path); - } - - v4l2_close(&drv); -} - -void read_dir(char *dirname) -{ - DIR *dir; - struct dirent *entry; - const char *vid = "video"; - const char *rad = "radio"; - char *p, name[512]; - - dir = opendir(dirname); - if (!dir) - return; - - strcpy(name, dirname); - strcat(name, "/"); - p = name + strlen(name); - - entry = readdir(dir); - while (entry) { - if (!strncmp(entry->d_name, vid, strlen(vid)) || - !strncmp(entry->d_name, rad, strlen(rad))) { - strcpy(p, entry->d_name); - - get_sysfs(name); - } - entry = readdir(dir); - } - closedir(dir); -} - -int main(void) -{ - read_dir("/dev"); - return 0; -} -- cgit v1.2.3