op->Length = Length;
op->Data = ep->InputData;
+ LOG("op %p, endpoint %p (0x%x)", op, ep,
+ ep->Interface->Dev->Address * 16 + ep->EndpointNum);
+
Workqueue_AddWork(&gUSB_AsyncQueue, op);
}
endpt = &Iface->Endpoints[Endpoint-1];
LOG("endpt(%p)->PollingPeriod = %i", endpt, endpt->PollingPeriod);
if(endpt->PollingPeriod > 256 || endpt->PollingPeriod <= 0) {
+ LOG("Invalid polling period");
LEAVE('-');
return ;
}
// TODO: Check that this endpoint isn't already on the queue
endpt->InputData = malloc(endpt->MaxPacketSize);
-
- Iface->Dev->Host->HostDef->InterruptIN(
- Iface->Dev->Host->Ptr,
- Iface->Dev->Address * 16 + endpt->EndpointNum,
- endpt->PollingPeriod,
+ LOG("Polling 0x%x at %i ms", Iface->Dev->Address * 16 + endpt->EndpointNum, endpt->PollingPeriod);
+ Iface->Dev->Host->HostDef->InitInterrupt(
+ Iface->Dev->Host->Ptr, Iface->Dev->Address * 16 + endpt->EndpointNum,
+ 0, endpt->PollingPeriod,
USB_int_PollCallback, endpt,
endpt->InputData, endpt->MaxPacketSize
);
// Check hosts
for( tUSBHost *host = gUSB_Hosts; host; host = host->Next )
{
- host->HostDef->CheckPorts(host->Ptr);
+ if( host->HostDef->CheckPorts )
+ host->HostDef->CheckPorts(host->Ptr);
}
- Time_Delay(100);
+ // 2s delay - fuck those with UHCI only :)
+ Time_Delay(2000);
}
}