-void hexdump(unsigned char *buf, int len);
-void diff(unsigned char *buf1, unsigned char *buf2, int len);
-
-//unique: 94, bytes: 276, options: 0
-//Vendor: 3fd
-//12 01 00 02 00 00 00 40 fd 03 08 00 00 00 01 02 12 01 00 02 00 00 00 40 fd 03 08 00 00 00 01 02
-//00 01 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 40 00 00 00 00 00 00 00
-//03 00 00 00 00 00 00 00 38 45 21 08 38 45 21 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//4c 45 21 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-//00 00 00 00 00 00 00 00 09 02 20 00 01 02 00 80 00 00 00 00 00 00 00 00 09 02 20 00 01 02 00 80
-//8c 00 00 00 01 00 00 00 4c 45 21 08 58 45 21 08 8c 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
-//01 00 00 00 58 45 21 08 09 04 00 00 02 ff 00 00 01 00 00 00 00 00 00 00 09 04 00 00 02 ff 00 00
-//00 00 00 00 6c 45 21 08 7c 45 21 08 07 05 02 02 00 00 00 00 00 00 00 00 00 00 00 00 07 05 02 02
-//00 02 00 00 07 05 86 02 00 02 00 00 02 00 00 00 00 02 00 00 07 05 86 02 00 02 00 00 02 00 00 00
-//00 02 00 00 02 00 00 00 02 00 00 00 00 00 00 00 00 02 00 00 02 00 00 00 02 00 00 00 00 00 00 00
-//86 00 00 00 00 02 00 00 02 00 00 00 01 00 00 00 86 00 00 00 00 02 00 00 02 00 00 00 01 00 00 00
-//00 00 00 00 00 00 00 00
-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;
- }
-
- for (j=0; j<conf_desc->bNumInterfaces; j++)
- {
- struct usb_interface *interface = &usb_cable->config[i].interface[j];
- for(k=0; k<interface->num_altsetting; k++)
- {
- unsigned char bNumEndpoints;
- bNumEndpoints = interface->altsetting[k].bNumEndpoints;
- if (buf) {
- WDU_ALTERNATE_SETTING *altset = (WDU_ALTERNATE_SETTING*)(buf+len);
-
- altset->Descriptor.bLength = interface->altsetting[k].bLength;
- altset->Descriptor.bDescriptorType = interface->altsetting[k].bDescriptorType;
- altset->Descriptor.bInterfaceNumber = interface->altsetting[k].bInterfaceNumber;
- altset->Descriptor.bAlternateSetting = interface->altsetting[k].bAlternateSetting;
- altset->Descriptor.bNumEndpoints = interface->altsetting[k].bNumEndpoints;
- altset->Descriptor.bInterfaceClass = interface->altsetting[k].bInterfaceClass;
- altset->Descriptor.bInterfaceSubClass = interface->altsetting[k].bInterfaceSubClass;
- altset->Descriptor.bInterfaceProtocol = interface->altsetting[k].bInterfaceProtocol;
- altset->Descriptor.iInterface = interface->altsetting[k].iInterface;