X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FCore%2Fusb_devinit.c;h=7eb55f9d2fee79441dd45b14d49b86a0f3b1c1b1;hb=bce1f445f4d3836e12d07591d00537981e75439a;hp=fb44bb04387ecdb5667baf72a19ca684342a54f9;hpb=88547c29ae10d9bd709b7382a4bf78d94f0b2be4;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/Core/usb_devinit.c b/KernelLand/Modules/USB/Core/usb_devinit.c index fb44bb04..7eb55f9d 100644 --- a/KernelLand/Modules/USB/Core/usb_devinit.c +++ b/KernelLand/Modules/USB/Core/usb_devinit.c @@ -13,7 +13,7 @@ #include "usb_proto.h" #include "usb_lowlevel.h" -#define DUMP_DESCRIPTORS 0 +#define DUMP_DESCRIPTORS 1 // === PROTOTYPES === void USB_DeviceConnected(tUSBHub *Hub, int Port); @@ -102,6 +102,8 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) } #endif #endif + + memcpy(&dev->DevDesc, &desc, sizeof(desc)); } // TODO: Support alternate configurations @@ -150,10 +152,10 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) total_length = LittleEndian16(desc.TotalLength); full_buf = malloc( total_length ); USB_int_ReadDescriptor(dev, 0, 2, i, total_length, full_buf); - ptr_ofs += desc.Length; - // TODO: Interfaces + + // Interfaces! for( int j = 0; ptr_ofs < total_length && j < desc.NumInterfaces; j ++ ) { struct sDescriptor_Interface *iface; @@ -193,11 +195,15 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) LOG("}"); #endif - dev_if = malloc(sizeof(tUSBInterface) + iface->NumEndpoints*sizeof(dev_if->Endpoints[0])); + dev_if = malloc( + sizeof(tUSBInterface) + + iface->NumEndpoints*sizeof(dev_if->Endpoints[0]) + ); dev_if->Dev = dev; dev_if->Driver = NULL; dev_if->Data = NULL; dev_if->nEndpoints = iface->NumEndpoints; + memcpy(&dev_if->IfaceDesc, iface, sizeof(*iface)); dev->Interfaces[j] = dev_if; // Copy interface data