* hub.c
* - Basic hub driver
*/
-#define DEBUG 1
+#define DEBUG 0
#include <usb_hub.h>
+#include <timers.h>
#define MAX_PORTS 32 // Not actually a max, but used for DeviceRemovable
};
// === PROTOTYPES ===
-void Hub_Connected(tUSBInterface *Dev);
+void Hub_Connected(tUSBInterface *Dev, void *Descriptors, size_t Length);
void Hub_Disconnected(tUSBInterface *Dev);
void Hub_PortStatusChange(tUSBInterface *Dev, int Endpoint, int Length, void *Data);
void Hub_int_HandleChange(tUSBInterface *Dev, int Port);
}
#endif
-void Hub_Connected(tUSBInterface *Dev)
+void Hub_Connected(tUSBInterface *Dev, void *Descriptors, size_t Length)
{
struct sHubDescriptor hub_desc;
struct sHubInfo *info;
- // Read hub descriptor (Class descriptor 0x29)
- USB_ReadDescriptor(Dev, 0x129, 0, sizeof(hub_desc), &hub_desc);
+ // Read hub descriptor (Class descriptor 0x9, destined for device)
+ USB_ReadDescriptor(Dev, 0x0129, 0, sizeof(hub_desc), &hub_desc);
LOG("%i Ports", hub_desc.NbrPorts);
LOG("Takes %i ms for power to stabilise", hub_desc.PwrOn2PwrGood*2);
for( i = 0; i < info->nPorts; i += 8, status ++ )
{
if( i/8 >= Length ) break;
- if( *status == 0 ) continue;
-
+ LOG("status[%i] = %x", i/8, *status);
+ if( *status == 0 ) continue;
+
for( int j = 0; j < 8; j ++ )
if( *status & (1 << j) )
Hub_int_HandleChange(Dev, i+j);