static struct usb_device *usb_cable;
static unsigned long card_type;
-//#define USE_LIBUSB 1
+#define NO_WINDRVR 1
void hexdump(unsigned char *buf, int len);
void diff(unsigned char *buf1, unsigned char *buf2, int len);
fprintf(stderr,"\n");
}
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
struct interrupt *it = (struct interrupt*)(wdheader->data);
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped);
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#else
it->dwCounter = 0;
struct usb_set_interface *usi = (struct usb_set_interface*)(wdheader->data);
fprintf(stderr,"unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n", usi->dwUniqueID, usi->dwInterfaceNum, usi->dwAlternateSetting, usi->dwOptions);
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
}
if (pSize) {
hexdump(ugdd->pBuf, pSize);
}
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#else
if (!ugdd->dwBytes) {
if (usb_cable) {
- ugdd->dwBytes = sizeof(struct usb_device_info) - 8 + (sizeof(WDU_CONFIGURATION)*2) + sizeof(WDU_INTERFACE) * 6;
- /* TODO: Fixme */
- ugdd->dwBytes = 276;
+ int i,j,k;
+ ugdd->dwBytes = sizeof(struct usb_device_info);
+
+ for (i=0; i<usb_cable->descriptor.bNumConfigurations; i++)
+ {
+ struct usb_config_descriptor *conf_desc = &usb_cable->config[i];
+ ugdd->dwBytes+=sizeof(WDU_CONFIGURATION);
+ ugdd->dwBytes+=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;
+ ugdd->dwBytes+=sizeof(WDU_ALTERNATE_SETTING);
+ ugdd->dwBytes+=(sizeof(WDU_ENDPOINT_DESCRIPTOR)+sizeof(WDU_PIPE_INFO))*bNumEndpoints;
+ }
+ }
+ }
+
+
}
} 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,
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) {
}
}
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
case TRANSFER:
fprintf(stderr,"TRANSFER\n");
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
break;
case EVENT_UNREGISTER:
fprintf(stderr,"EVENT_UNREGISTER\n");
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
break;
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped);
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#else
if (usb_cable)
case CARD_UNREGISTER:
fprintf(stderr,"CARD_UNREGISTER\n");
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
break;
for (i = 0; i < e->dwNumMatchTables; i++)
fprintf(stderr,"match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n", e->matchTables[i].VendorId, e->matchTables[i].ProductId, e->matchTables[i].bDeviceClass, e->matchTables[i].bDeviceSubClass, e->matchTables[i].bInterfaceClass, e->matchTables[i].bInterfaceSubClass, e->matchTables[i].bInterfaceProtocol);
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#else
//EVENT_PULL
default:
fprintf(stderr,"!!!Unsupported IOCTL: %x!!!\n", request);
-#ifndef USE_LIBUSB
+#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#endif
break;
va_end(args);
}
- fd = (*func) (pathname, flags, mode);
-
if (!strcmp (pathname, "/dev/windrvr6")) {
fprintf(stderr,"opening windrvr6\n");
- windrvrfd = fd;
+#ifdef NO_WINDRVR
+ windrvrfd = fd = (*func) ("/dev/null", flags, mode);
+#else
+ windrvrfd = fd = (*func) (pathname, flags, mode);
+#endif
if (!busses) {
usb_init();
usb_find_busses();
busses = usb_get_busses();
}
+ } else {
+ fd = (*func) (pathname, flags, mode);
}
return fd;