usb-enum: construct table of attrs

parent 7f57bd45
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
......@@ -9,6 +10,17 @@
#define ID_VENDOR_ID OAU_VENDOR_ID
#define ID_DEVICE_ID OAU_DEVICE_ID
#define MAX_OUA 16
static struct oua_usb_dev {
char path[PATH_MAX];
char busnum[6];
char devnum[6];
char portnum[6];
char devno[10];
char serial[256];
} usb_dev[MAX_OUA];
static int oua_enumerate(char *vendor_id, char *device_id);
int main(int argc, char *argv[])
......@@ -21,8 +33,8 @@ static int oua_enumerate(char *vendor_id, char *device_id)
{
struct udev *udev = udev_new();
struct udev_enumerate *enumerate = udev_enumerate_new(udev);
struct udev_list_entry *devs, *ptr;
int found_ports = 0;
struct udev_list_entry *devs, *ptr, *ptr2;
int found_devs = 0;
//udev_enumerate_add_match_subsystem(enumerate, "tty");
udev_enumerate_add_match_property(enumerate, "ID_VENDOR_ID", vendor_id);
......@@ -31,43 +43,25 @@ static int oua_enumerate(char *vendor_id, char *device_id)
devs = udev_enumerate_get_list_entry(enumerate);
udev_list_entry_foreach(ptr, devs) {
if (found_devs >= MAX_OUA)
goto out;
const char *path = udev_list_entry_get_name(ptr);
struct udev_device *dev = udev_device_new_from_syspath(udev, path);
const char *devnode = udev_device_get_devnode(dev);
const char *busnum = udev_device_get_sysattr_value(dev, "busnum");
const char *devnum = udev_device_get_sysattr_value(dev, "devnum");
const char *devno = udev_device_get_sysattr_value(dev, "dev");
const char *serial = udev_device_get_sysattr_value(dev, "serial");
printf("bus:dev %03lx:%03lx, devno: %s, serial: %s, devpath=[%s]\n",
strtoul(busnum, NULL, 0), strtoul(devnum, NULL, 0),
devno, serial, path);
goto notfound;
struct oua_usb_dev *entry = &usb_dev[found_devs];
strcpy(entry->path, path);
strcpy(entry->busnum, udev_device_get_sysattr_value(dev, "busnum"));
strcpy(entry->devnum, udev_device_get_sysattr_value(dev, "devnum"));
strcpy(entry->devno, udev_device_get_sysattr_value(dev, "dev"));
strcpy(entry->serial, udev_device_get_sysattr_value(dev, "serial"));
if (devnode != NULL) {
struct udev_list_entry *l, *links = udev_device_get_devlinks_list_entry(dev);
//int port;
udev_list_entry_foreach(l, links) {
const char *linkname = udev_list_entry_get_name(l);
int i, len = strlen(linkname);
const char *ports[] = { "0-port0", "1-port0", "2-port0", "3-port0", };
int trim = strlen(ports[0]);
printf("bus:dev %03ld:%03ld, devno: %s, serial: %s, devpath=[%s]\n",
strtoul(entry->busnum, NULL, 0), strtoul(entry->devnum, NULL, 0),
entry->devno, entry->serial, entry->path);
for (i = 0; i < 4; i++)
if (!strcmp(ports[i], &linkname[len-trim])) {
//ports_info[i].port = port = i;
//strcpy(ports_info[i].symlink, path);
//strcpy(ports_info[i].devnode, devnode);
goto found;
}
goto notfound;
}
found:
found_ports++;
}
notfound:
found_devs++;
udev_device_unref(dev);
}
out:
udev_enumerate_unref(enumerate);
return (found_ports == 4) ? 0 : -1;
return found_devs;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment