impact loops now...
This commit is contained in:
parent
792bf5f262
commit
3664a3e3ec
49
usb-driver.c
49
usb-driver.c
@ -36,8 +36,8 @@ void diff(unsigned char *buf1, unsigned char *buf2, int len);
|
|||||||
//Vendor: 3fd
|
//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
|
//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
|
//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
|
//03 00 00 00 00 00 00 00 38 45 21 08 38 45 21 08 03 00 00 00 00 00 00 00 38 45 21 08 38 45 21 08
|
||||||
//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
|
//4c 45 21 08 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
|
||||||
@ -45,9 +45,9 @@ void diff(unsigned char *buf1, unsigned char *buf2, int len);
|
|||||||
//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
|
//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
|
//8c 00 00 00 01 00 00 00 4c 45 21 08 58 45 21 08 8c 00 00 00 01 00 00 00 4c 45 21 08 58 45 21 08
|
||||||
//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
|
//01 00 00 00 58 45 21 08 09 04 00 00 02 ff 00 00 01 00 00 00 58 45 21 08 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 00 00 00 6c 45 21 08 7c 45 21 08 07 05 02 02 00 00 00 00 6c 45 21 08 7c 45 21 08 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 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
|
//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
|
//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
|
||||||
@ -55,6 +55,8 @@ void diff(unsigned char *buf1, unsigned char *buf2, int len);
|
|||||||
int usb_deviceinfo(unsigned char *buf) {
|
int usb_deviceinfo(unsigned char *buf) {
|
||||||
int i,j,k,l;
|
int i,j,k,l;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
WDU_CONFIGURATION **pConfigs, **pActiveConfig;
|
||||||
|
WDU_INTERFACE **pActiveInterface;
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
struct usb_device_info *udi = (struct usb_device_info*)(buf+len);
|
struct usb_device_info *udi = (struct usb_device_info*)(buf+len);
|
||||||
@ -80,6 +82,10 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
udi->Pipe0.type = 0;
|
udi->Pipe0.type = 0;
|
||||||
udi->Pipe0.direction = 3;
|
udi->Pipe0.direction = 3;
|
||||||
udi->Pipe0.dwInterval = 0;
|
udi->Pipe0.dwInterval = 0;
|
||||||
|
|
||||||
|
pConfigs = &(udi->pConfigs);
|
||||||
|
pActiveConfig = &(udi->pActiveConfig);
|
||||||
|
pActiveInterface = &(udi->pActiveInterface[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
len = sizeof(struct usb_device_info);
|
len = sizeof(struct usb_device_info);
|
||||||
@ -87,9 +93,16 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
for (i=0; i<usb_cable->descriptor.bNumConfigurations; i++)
|
for (i=0; i<usb_cable->descriptor.bNumConfigurations; i++)
|
||||||
{
|
{
|
||||||
struct usb_config_descriptor *conf_desc = &usb_cable->config[i];
|
struct usb_config_descriptor *conf_desc = &usb_cable->config[i];
|
||||||
|
WDU_INTERFACE **pInterfaces;
|
||||||
|
WDU_ALTERNATE_SETTING **pAlternateSettings[conf_desc->bNumInterfaces];
|
||||||
|
WDU_ALTERNATE_SETTING **pActiveAltSetting[conf_desc->bNumInterfaces];
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
WDU_CONFIGURATION *cfg = (WDU_CONFIGURATION*)(buf+len);
|
WDU_CONFIGURATION *cfg = (WDU_CONFIGURATION*)(buf+len);
|
||||||
|
|
||||||
|
*pConfigs = cfg;
|
||||||
|
*pActiveConfig = cfg;
|
||||||
|
|
||||||
cfg->Descriptor.bLength = conf_desc->bLength;
|
cfg->Descriptor.bLength = conf_desc->bLength;
|
||||||
cfg->Descriptor.bDescriptorType = conf_desc->bDescriptorType;
|
cfg->Descriptor.bDescriptorType = conf_desc->bDescriptorType;
|
||||||
cfg->Descriptor.wTotalLength = conf_desc->wTotalLength;
|
cfg->Descriptor.wTotalLength = conf_desc->wTotalLength;
|
||||||
@ -100,12 +113,21 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
cfg->Descriptor.MaxPower = conf_desc->MaxPower;
|
cfg->Descriptor.MaxPower = conf_desc->MaxPower;
|
||||||
|
|
||||||
cfg->dwNumInterfaces = conf_desc->bNumInterfaces;
|
cfg->dwNumInterfaces = conf_desc->bNumInterfaces;
|
||||||
|
|
||||||
|
pInterfaces = &(cfg->pInterfaces);
|
||||||
}
|
}
|
||||||
len += sizeof(WDU_CONFIGURATION);
|
len += sizeof(WDU_CONFIGURATION);
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
*pInterfaces = (WDU_INTERFACE*)(buf+len);
|
||||||
for (j=0; j<conf_desc->bNumInterfaces; j++) {
|
for (j=0; j<conf_desc->bNumInterfaces; j++) {
|
||||||
WDU_INTERFACE *iface = (WDU_INTERFACE*)(buf+len);
|
WDU_INTERFACE *iface = (WDU_INTERFACE*)(buf+len);
|
||||||
|
|
||||||
|
pActiveInterface[j] = iface;
|
||||||
|
|
||||||
|
pAlternateSettings[j] = &(iface->pAlternateSettings);
|
||||||
iface->dwNumAltSettings = usb_cable->config[i].interface[j].num_altsetting;
|
iface->dwNumAltSettings = usb_cable->config[i].interface[j].num_altsetting;
|
||||||
|
pActiveAltSetting[j] = &(iface->pActiveAltSetting);
|
||||||
|
|
||||||
len += sizeof(WDU_INTERFACE);
|
len += sizeof(WDU_INTERFACE);
|
||||||
}
|
}
|
||||||
@ -116,10 +138,19 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
for (j=0; j<conf_desc->bNumInterfaces; j++)
|
for (j=0; j<conf_desc->bNumInterfaces; j++)
|
||||||
{
|
{
|
||||||
struct usb_interface *interface = &usb_cable->config[i].interface[j];
|
struct usb_interface *interface = &usb_cable->config[i].interface[j];
|
||||||
|
|
||||||
|
if (buf) {
|
||||||
|
*pAlternateSettings[j] = (WDU_ALTERNATE_SETTING*)(buf+len);
|
||||||
|
/* FIXME: */
|
||||||
|
*pActiveAltSetting[j] = (WDU_ALTERNATE_SETTING*)(buf+len);
|
||||||
|
}
|
||||||
|
|
||||||
for(k=0; k<interface->num_altsetting; k++)
|
for(k=0; k<interface->num_altsetting; k++)
|
||||||
{
|
{
|
||||||
unsigned char bNumEndpoints;
|
unsigned char bNumEndpoints = interface->altsetting[k].bNumEndpoints;
|
||||||
bNumEndpoints = interface->altsetting[k].bNumEndpoints;
|
WDU_ENDPOINT_DESCRIPTOR **pEndpointDescriptors;
|
||||||
|
WDU_PIPE_INFO **pPipes;
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
WDU_ALTERNATE_SETTING *altset = (WDU_ALTERNATE_SETTING*)(buf+len);
|
WDU_ALTERNATE_SETTING *altset = (WDU_ALTERNATE_SETTING*)(buf+len);
|
||||||
|
|
||||||
@ -132,11 +163,14 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
altset->Descriptor.bInterfaceSubClass = interface->altsetting[k].bInterfaceSubClass;
|
altset->Descriptor.bInterfaceSubClass = interface->altsetting[k].bInterfaceSubClass;
|
||||||
altset->Descriptor.bInterfaceProtocol = interface->altsetting[k].bInterfaceProtocol;
|
altset->Descriptor.bInterfaceProtocol = interface->altsetting[k].bInterfaceProtocol;
|
||||||
altset->Descriptor.iInterface = interface->altsetting[k].iInterface;
|
altset->Descriptor.iInterface = interface->altsetting[k].iInterface;
|
||||||
|
pEndpointDescriptors = &(altset->pEndpointDescriptors);
|
||||||
|
pPipes = &(altset->pPipes);
|
||||||
|
|
||||||
}
|
}
|
||||||
len +=sizeof(WDU_ALTERNATE_SETTING);
|
len +=sizeof(WDU_ALTERNATE_SETTING);
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
*pEndpointDescriptors = (WDU_ENDPOINT_DESCRIPTOR*)(buf+len);
|
||||||
for (l = 0; l < bNumEndpoints; l++) {
|
for (l = 0; l < bNumEndpoints; l++) {
|
||||||
WDU_ENDPOINT_DESCRIPTOR *ed = (WDU_ENDPOINT_DESCRIPTOR*)(buf+len);
|
WDU_ENDPOINT_DESCRIPTOR *ed = (WDU_ENDPOINT_DESCRIPTOR*)(buf+len);
|
||||||
|
|
||||||
@ -150,6 +184,7 @@ int usb_deviceinfo(unsigned char *buf) {
|
|||||||
len += sizeof(WDU_ENDPOINT_DESCRIPTOR);
|
len += sizeof(WDU_ENDPOINT_DESCRIPTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*pPipes = (WDU_PIPE_INFO*)(buf+len);
|
||||||
for (l = 0; l < bNumEndpoints; l++) {
|
for (l = 0; l < bNumEndpoints; l++) {
|
||||||
WDU_PIPE_INFO *pi = (WDU_PIPE_INFO*)(buf+len);
|
WDU_PIPE_INFO *pi = (WDU_PIPE_INFO*)(buf+len);
|
||||||
|
|
||||||
|
@ -353,14 +353,6 @@ struct usb_device_info {
|
|||||||
WDU_INTERFACE *pActiveInterface[WD_USB_MAX_INTERFACES];
|
WDU_INTERFACE *pActiveInterface[WD_USB_MAX_INTERFACES];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct usb_device_info_get {
|
|
||||||
WDU_DEVICE_DESCRIPTOR Descriptor;
|
|
||||||
WDU_PIPE_INFO Pipe0;
|
|
||||||
unsigned char dummy[128];
|
|
||||||
WDU_CONFIGURATION cfg;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
WDU_DIR_IN = 1,
|
WDU_DIR_IN = 1,
|
||||||
WDU_DIR_OUT = 2,
|
WDU_DIR_OUT = 2,
|
||||||
|
Reference in New Issue
Block a user