X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FCore%2Fusb_devinit.c;h=fb44bb04387ecdb5667baf72a19ca684342a54f9;hb=53c786d33db4627ae764299a62b1769eaed137c5;hp=32076690faf5c937b3fff5996fdd234eb0291dc6;hpb=45c91b880402af13c4b8f934c53780d7cba24aac;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/Core/usb_devinit.c b/KernelLand/Modules/USB/Core/usb_devinit.c index 32076690..fb44bb04 100644 --- a/KernelLand/Modules/USB/Core/usb_devinit.c +++ b/KernelLand/Modules/USB/Core/usb_devinit.c @@ -6,7 +6,6 @@ * - USB Device Initialisation */ #define DEBUG 1 - #include #include #include @@ -14,6 +13,8 @@ #include "usb_proto.h" #include "usb_lowlevel.h" +#define DUMP_DESCRIPTORS 0 + // === PROTOTYPES === void USB_DeviceConnected(tUSBHub *Hub, int Port); void USB_DeviceDisconnected(tUSBHub *Hub, int Port); @@ -55,7 +56,8 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) LOG("Getting device descriptor"); // Endpoint 0, Desc Type 1, Index 0 USB_int_ReadDescriptor(dev, 0, 1, 0, sizeof(desc), &desc); - + + #if DUMP_DESCRIPTORS LOG("Device Descriptor = {"); LOG(" .Length = %i", desc.Length); LOG(" .Type = %i", desc.Type); @@ -99,6 +101,7 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) } } #endif + #endif } // TODO: Support alternate configurations @@ -112,6 +115,8 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) size_t total_length; USB_int_ReadDescriptor(dev, 0, 2, i, sizeof(desc), &desc); + // TODO: Check return length? (Do we get a length?) + #if DUMP_DESCRIPTORS LOG("Configuration Descriptor %i = {", i); LOG(" .Length = %i", desc.Length); LOG(" .Type = %i", desc.Type); @@ -127,6 +132,12 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) LOG("ConfigurationStr = '%s'", tmp); free(tmp); } + #endif + + if( desc.NumInterfaces == 0 ) { + Log_Notice("USB", "Device does not have any interfaces"); + continue ; + } // TODO: Split here and allow some method of selection @@ -167,20 +178,20 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) continue ; } + #if DUMP_DESCRIPTORS LOG("Interface %i/%i = {", i, j); 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 DEBUG if( iface->InterfaceStr ) { char *tmp = USB_int_GetDeviceString(dev, 0, iface->InterfaceStr); LOG(" .InterfaceStr = %i '%s'", iface->InterfaceStr, tmp); free(tmp); } - #endif LOG("}"); + #endif dev_if = malloc(sizeof(tUSBInterface) + iface->NumEndpoints*sizeof(dev_if->Endpoints[0])); dev_if->Dev = dev; @@ -239,11 +250,11 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) ); } else { + LOG("Driver '%s' in use", dev_if->Driver->Name); dev_if->Driver->Connected( dev_if, full_buf + iface_base_ofs, ptr_ofs - iface_base_ofs ); - // dev_if->Driver->Connected( dev_if ); } }