/* See LICENSE file for copyright and license details. */ #include #include #include #include "util.h" static void lsusb(const char *file); static void usage(void) { eprintf("usage: %s\n", argv0); } int main(int argc, char *argv[]) { ARGBEGIN { default: usage(); } ARGEND; recurse("/sys/bus/usb/devices", lsusb); return EXIT_SUCCESS; } static void lsusb(const char *file) { FILE *fp; char *cwd; char path[PATH_MAX]; char buf[BUFSIZ]; int busnum, devnum, pid, vid; int i = 0; cwd = agetcwd(); snprintf(path, sizeof(path), "%s/%s/uevent", cwd, file); free(cwd); if (!(fp = fopen(path, "r"))) return; while (fgets(buf, sizeof(buf), fp)) { if (sscanf(buf, "BUSNUM=%u\n", &busnum) || sscanf(buf, "DEVNUM=%u\n", &devnum) || sscanf(buf, "PRODUCT=%x/%x/", &pid, &vid)) i++; if (i == 3) { printf("Bus %03d Device %03d: ID %04x:%04x\n", busnum, devnum, pid, vid); break; } } if (ferror(fp)) eprintf("%s: read error:", path); fclose(fp); }