-void hexdump(unsigned char *buf, int len);
-void diff(unsigned char *buf1, unsigned char *buf2, int len);
-
-int usb_deviceinfo(unsigned char *buf) {
- int i,j,k,l;
- int len = 0;
-
- if (buf) {
- struct usb_device_info *udi = (struct usb_device_info*)(buf+len);
-
- udi->Descriptor.bLength = sizeof(WDU_DEVICE_DESCRIPTOR);
- udi->Descriptor.bDescriptorType = usb_cable->descriptor.bDescriptorType;
- udi->Descriptor.bcdUSB = usb_cable->descriptor.bcdUSB;
- udi->Descriptor.bDeviceClass = usb_cable->descriptor.bDeviceClass;
- udi->Descriptor.bDeviceSubClass = usb_cable->descriptor.bDeviceSubClass;
- udi->Descriptor.bDeviceProtocol = usb_cable->descriptor.bDeviceProtocol;
- udi->Descriptor.bMaxPacketSize0 = usb_cable->descriptor.bMaxPacketSize0;
- udi->Descriptor.idVendor = usb_cable->descriptor.idVendor;
- udi->Descriptor.idProduct = usb_cable->descriptor.idProduct;
- udi->Descriptor.bcdDevice = usb_cable->descriptor.bcdDevice;
- udi->Descriptor.iManufacturer = usb_cable->descriptor.iManufacturer;
- udi->Descriptor.iProduct = usb_cable->descriptor.iProduct;
- udi->Descriptor.iSerialNumber = usb_cable->descriptor.iSerialNumber;
- udi->Descriptor.bNumConfigurations = usb_cable->descriptor.bNumConfigurations;
-
- /* TODO: Fix Pipe0! */
- udi->Pipe0.dwNumber = 0x00;
- udi->Pipe0.dwMaximumPacketSize = usb_cable->descriptor.bMaxPacketSize0;
- udi->Pipe0.type = 0;
- udi->Pipe0.direction = 3;
- udi->Pipe0.dwInterval = 0;
- }
-
- len = sizeof(struct usb_device_info);
-
- for (i=0; i<usb_cable->descriptor.bNumConfigurations; i++)
- {
- struct usb_config_descriptor *conf_desc = &usb_cable->config[i];
- if (buf) {
- WDU_CONFIGURATION *cfg = (WDU_CONFIGURATION*)(buf+len);
-
- cfg->Descriptor.bLength = conf_desc->bLength;
- cfg->Descriptor.bDescriptorType = conf_desc->bDescriptorType;
- cfg->Descriptor.wTotalLength = conf_desc->wTotalLength;
- cfg->Descriptor.bNumInterfaces = conf_desc->bNumInterfaces;
- cfg->Descriptor.bConfigurationValue = conf_desc->bConfigurationValue;
- cfg->Descriptor.iConfiguration = conf_desc->iConfiguration;
- cfg->Descriptor.bmAttributes = conf_desc->bmAttributes;
- cfg->Descriptor.MaxPower = conf_desc->MaxPower;
-
- cfg->dwNumInterfaces = conf_desc->bNumInterfaces;
- }
- len += sizeof(WDU_CONFIGURATION);
- if (buf) {
- for (j=0; j<conf_desc->bNumInterfaces; j++) {
- WDU_INTERFACE *iface = (WDU_INTERFACE*)(buf+len);
- iface->dwNumAltSettings = usb_cable->config[i].interface[j].num_altsetting;
-
- len += sizeof(WDU_INTERFACE);
- }
- } else {
- len += sizeof(WDU_INTERFACE) * conf_desc->bNumInterfaces;
- }