]> git.zerfleddert.de Git - usb-driver/blobdiff - usb-driver.c
config descriptor
[usb-driver] / usb-driver.c
index ae483982eda985e97f0e04f4328393e3c4fe4a0d..db5993f2564b9936217b3527077ec74bcee64474 100644 (file)
@@ -27,7 +27,7 @@ static struct usb_bus *busses = NULL;
 static struct usb_device *usb_cable;
 static unsigned long card_type;
 
-//#define USE_LIBUSB 1
+#define USE_LIBUSB 1
 
 void hexdump(unsigned char *buf, int len);
 void diff(unsigned char *buf1, unsigned char *buf2, int len);
@@ -153,7 +153,8 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
                                                ugdd->dwBytes = 276;
                                        }
                                } else {
-                                       struct usb_device_info *udi = (struct usb_device_info*)ugdd->pBuf;
+                                       struct usb_device_info_get *udi = (struct usb_device_info_get*)ugdd->pBuf;
+                                       struct usb_endpoint_descriptor *ep;
 unsigned char dings[] = {0x12, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0xfd, 0x03, 0x08, 0x00, 0x00, 0x00, 0x01, 0x02,
 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x45, 0x21, 0x08, 0x38, 0x45, 0x21, 0x08,
@@ -210,6 +211,25 @@ unsigned char dings[] = {0x12, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0xfd, 0
                                        udi->Descriptor.iProduct = usb_cable->descriptor.iProduct;
                                        udi->Descriptor.iSerialNumber = usb_cable->descriptor.iSerialNumber;
                                        udi->Descriptor.bNumConfigurations = usb_cable->descriptor.bNumConfigurations;
+
+                                       ep = usb_cable->config->interface->altsetting[0].endpoint;
+
+                                       udi->Pipe0.dwNumber = 0x00;
+                                       udi->Pipe0.dwMaximumPacketSize = usb_cable->descriptor.bMaxPacketSize0;
+                                       udi->Pipe0.type = 0;
+                                       udi->Pipe0.direction = 3;
+                                       udi->Pipe0.dwInterval = 0;
+
+                                       udi->cfg.Descriptor.bLength = usb_cable->config->bLength;
+                                       udi->cfg.Descriptor.bDescriptorType = usb_cable->config->bDescriptorType;
+                                       udi->cfg.Descriptor.wTotalLength = usb_cable->config->wTotalLength;
+                                       udi->cfg.Descriptor.bNumInterfaces = usb_cable->config->bNumInterfaces;
+                                       udi->cfg.Descriptor.bConfigurationValue = usb_cable->config->bConfigurationValue;
+                                       udi->cfg.Descriptor.iConfiguration = usb_cable->config->iConfiguration;
+                                       udi->cfg.Descriptor.bmAttributes = usb_cable->config->bmAttributes;
+                                       udi->cfg.Descriptor.MaxPower = usb_cable->config->MaxPower;
+
+                                       // ab offset 168 config desc
                                }
 #endif
                                if (pSize) {
@@ -382,11 +402,13 @@ int open (const char *pathname, int flags, ...)
                va_end(args);
        }
 
-       fd = (*func) (pathname, flags, mode);
-
        if (!strcmp (pathname, "/dev/windrvr6")) {
                fprintf(stderr,"opening windrvr6\n");
-               windrvrfd = fd;
+#ifdef USE_LIBUSB
+               windrvrfd = fd = (*func) ("/dev/null", flags, mode);
+#else
+               windrvrfd = fd = (*func) (pathname, flags, mode);
+#endif
                if (!busses) {
                        usb_init();
                        usb_find_busses();
@@ -394,6 +416,8 @@ int open (const char *pathname, int flags, ...)
 
                        busses = usb_get_busses();
                }
+       } else {
+               fd = (*func) (pathname, flags, mode);
        }
 
        return fd;
Impressum, Datenschutz