X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FUSB%2FCore%2Fusb.c;h=52968e309b9ea39261fe97015de83bb09289c149;hb=9faf301f7a2b963fd58d289652cbf25b3c52bf9a;hp=b43aae4d3418365e3469231e6a7e0c1843a1f19c;hpb=b77a57935b392d5b056b83f0e2dd03ab894bc0ce;p=tpg%2Facess2.git diff --git a/Modules/USB/Core/usb.c b/Modules/USB/Core/usb.c index b43aae4d..52968e30 100644 --- a/Modules/USB/Core/usb.c +++ b/Modules/USB/Core/usb.c @@ -138,9 +138,10 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) for( int i = 0; i < 1; i ++ ) { struct sDescriptor_Configuration desc; -// void *full_buf; + void *full_buf; + char *cur_ptr; - USB_int_ReadDescriptor(dev, 0, 2, 0, sizeof(desc), &desc); + USB_int_ReadDescriptor(dev, 0, 2, i, sizeof(desc), &desc); LOG("Configuration Descriptor %i = {", i); LOG(" .Length = %i", desc.Length); LOG(" .Type = %i", desc.Type); @@ -156,8 +157,46 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) LOG("ConfigurationStr = '%s'", tmp); free(tmp); } - + + cur_ptr = full_buf = malloc( LittleEndian16(desc.TotalLength) ); + USB_int_ReadDescriptor(dev, 0, 2, i, desc.TotalLength, full_buf); + + cur_ptr += desc.Length; + // TODO: Interfaces + for( int j = 0; j < desc.NumInterfaces; j ++ ) + { + struct sDescriptor_Interface *iface; + iface = (void*)cur_ptr; + // TODO: Sanity check with remaining space + cur_ptr += sizeof(*iface); + + LOG("Interface %i/%i = {"); + LOG(" .InterfaceNum = %i", iface->InterfaceNum); + LOG(" .NumEndpoints = %i", iface->NumEndpoints); + LOG(" .InterfaceClass = 0x%x", iface->InterfaceClass); + LOG(" .InterfaceSubClass = 0x%x", iface->InterfaceSubClass); + LOG(" .InterfaceProcol = 0x%x", iface->InterfaceProtocol); + + if( iface->InterfaceStr ) { + char *tmp = USB_int_GetDeviceString(dev, 0, iface->InterfaceStr); + LOG(" .InterfaceStr = %i '%s'", iface->InterfaceStr, tmp); + free(tmp); + } + LOG("}"); + + for( int k = 0; k < iface->NumEndpoints; k ++ ) + { + struct sDescriptor_Endpoint *endpt; + endpt = (void*)cur_ptr; + // TODO: Sanity check with remaining space + cur_ptr += sizeof(*endpt); + + + } + } + + free(full_buf); } // Done.