Hi list. I am wondering if someone could shed some light on what I am trying to do.
I have been playing around trying to come up with something that kind of have the verbosity of lsusb but use OpenBSD's #include <dev/usb/usb.h> and avoid all of libusb stuff. I hit a wall when I try to use USB_DEVICE_GET_FDESC : Breakpoint 1, get_usb_device_fdesc (f=7, a=1, u=0x7f7ffffd40d0) at usbdevs.c:219 219 int e = ioctl(f, USB_DEVICE_GET_FDESC, u); (gdb) s 218 u->udf_size=25; (gdb) 219 int e = ioctl(f, USB_DEVICE_GET_FDESC, u); (gdb) __cerror () at /usr/src/lib/libc/arch/amd64/sys/cerror.S:48 48 movq PIC_GOT(_C_LABEL(errno)), %rcx Current language: auto; currently asm (gdb) bt #0 __cerror () at /usr/src/lib/libc/arch/amd64/sys/cerror.S:48 #1 0x0000048cfe7022cc in usbdev (f=7, a=1, rec=Variable "rec" is not available. ) at usbdevs.c:285 #2 0x0000048cfe70235b in usbdump (f=7) at usbdevs.c:308 #3 0x0000048cfe70259b in main (argc=3, argv=0x7f7ffffd4258) at usbdevs.c:419 At the moment, I can get my small program to produce ouput like this: Controller /dev/usb0: Device Information: addr 1: idVendor Intel VendorNo 0x8086 idProduct 0x0000 Product EHCI root hub Release 1.00 ReleaseNo 0x0100 Config 1 Power 0 Self powered Speed 3 (High Speed) iSerialNumber none Device Name[0] uhub2 nPorts 4 port 1 powered port 2 powered port 3 powered port 4 powered Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 0x0200 bDeviceClass 9 (Hub) bDeviceSubClass 0 bDeviceProtocol 1 bMaxPacketSize 64 idVendor 0x8086 bNumConfigurations 1 Configuration Descriptor bLength 9 bDescriptorType 2 wTotalLength 25 bNumInterface 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x40 (Self Powered) bMaxPower (mA) 0 So basically I have the following function that fails. I set udf_size=25 as this is the value I get from wTotalLength shown above as explained in the man. int get_usb_device_fdesc(int f, int a, struct usb_device_fdesc *u) { u->udf_addr = a; u->udf_config_index = USB_CURRENT_CONFIG_INDEX; u->udf_size=25; int e = ioctl(f, USB_DEVICE_GET_FDESC, u); return e; } Clearly I don't seem to use USB_DEVICE_GET_FDESC correctly. Grepping /usr/src only reveals little on USB_DEVICE_GET_FDESC /usr/src: $>find . -name *.c|xargs grep USB_DEVICE_GET_FDESC ./sys/dev/usb/usb.c: case USB_DEVICE_GET_FDESC: ma...@t61.my.domain:18:40:45 /usr/src: $>find . -name *.c|xargs grep -n USB_DEVICE_GET_FDESC ./sys/dev/usb/usb.c:752: case USB_DEVICE_GET_FDESC: Regards Mario St-Gelais