usb-enum: refactor enum

parent ecc9481a
...@@ -17,26 +17,38 @@ struct oua_usb_dev { ...@@ -17,26 +17,38 @@ struct oua_usb_dev {
char busnum[6]; char busnum[6];
char devnum[6]; char devnum[6];
char portnum[6]; char portnum[6];
char busport[16];
char devno[10]; char devno[10];
char serial[256]; char serial[256];
}; };
static struct oua_usb_dev usb_dev[MAX_OUA]; struct oua_devlist {
static struct oua_devlist {
struct oua_usb_dev *devs; struct oua_usb_dev *devs;
int ndevs; int ndevs;
} devlist = { usb_dev, -1, }; };
void oua_display_devlist(struct oua_devlist *ls)
{
int i;
for (i = 0; i < ls->ndevs; i++) {
struct oua_usb_dev *entry = &ls->devs[i];
printf("%d: busdev:%s:%s bus-port:%s devno:%s serial:%s devpath:%s\n",
i, entry->busnum, entry->devnum,
entry->busport, entry->devno, entry->serial, entry->path);
}
}
static int oua_enumerate(char *vendor_id, char *device_id); static struct oua_usb_dev usb_dev[MAX_OUA];
static struct oua_devlist devlist = { usb_dev, -1, };
static int oua_enumerate(char *vendor_id, char *device_id) static struct oua_devlist *oua_enumerate(char *vendor_id, char *device_id)
{ {
struct udev *udev = udev_new(); struct udev *udev = udev_new();
struct udev_enumerate *enumerate = udev_enumerate_new(udev); struct udev_enumerate *enumerate = udev_enumerate_new(udev);
struct udev_list_entry *devs, *ptr, *ptr2; struct udev_list_entry *devs, *ptr, *ptr2;
int found_devs = 0; int found_devs = 0;
//udev_enumerate_add_match_subsystem(enumerate, "tty");
udev_enumerate_add_match_property(enumerate, "ID_VENDOR_ID", vendor_id); udev_enumerate_add_match_property(enumerate, "ID_VENDOR_ID", vendor_id);
udev_enumerate_add_match_property(enumerate, "ID_MODEL_ID", device_id); udev_enumerate_add_match_property(enumerate, "ID_MODEL_ID", device_id);
udev_enumerate_scan_devices(enumerate); udev_enumerate_scan_devices(enumerate);
...@@ -53,30 +65,24 @@ static int oua_enumerate(char *vendor_id, char *device_id) ...@@ -53,30 +65,24 @@ static int oua_enumerate(char *vendor_id, char *device_id)
strcpy(entry->devnum, udev_device_get_sysattr_value(dev, "devnum")); strcpy(entry->devnum, udev_device_get_sysattr_value(dev, "devnum"));
strcpy(entry->devno, udev_device_get_sysattr_value(dev, "dev")); strcpy(entry->devno, udev_device_get_sysattr_value(dev, "dev"));
strcpy(entry->serial, udev_device_get_sysattr_value(dev, "serial")); strcpy(entry->serial, udev_device_get_sysattr_value(dev, "serial"));
strcpy(entry->busport, rindex(entry->path, '/') + 1);
found_devs++; found_devs++;
udev_device_unref(dev); udev_device_unref(dev);
} }
out: out:
udev_enumerate_unref(enumerate); udev_enumerate_unref(enumerate);
return found_devs; devlist.ndevs = found_devs;
return &devlist;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int i, devs; int i, devs;
struct oua_devlist *list;
devs = oua_enumerate(ID_VENDOR_ID, ID_DEVICE_ID); list = oua_enumerate(ID_VENDOR_ID, ID_DEVICE_ID);
for (i = 0; i < devs; i++) { oua_display_devlist(list);
struct oua_usb_dev *entry = &usb_dev[i];
char busport[16];
strcpy(busport, rindex(entry->path, '/') + 1);
printf("bus:dev %03ld:%03ld, bus-port %s, devno: %s, serial: %s, devpath=[%s]\n",
strtoul(entry->busnum, NULL, 0),
strtoul(entry->devnum, NULL, 0),
busport, entry->devno, entry->serial, entry->path);
}
return 0; return 0;
} }
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