+ tUSBHost *host;
+ tUSBEndpoint *ep;
+ ENTER("pDev iEndpoint iLength pData", Dev, Endpoint, Length, Data);
+
+ ep = &Dev->Endpoints[Endpoint-1];
+ host = Dev->Dev->Host;
+
+ Threads_ClearEvent(THREAD_EVENT_SHORTWAIT);
+ for( size_t ofs = 0; ofs < Length; ofs += ep->MaxPacketSize )
+ {
+ size_t len = MIN(Length - ofs, ep->MaxPacketSize);
+
+ host->HostDef->BulkOUT(
+ host->Ptr, Dev->Dev->Address*16 + Dev->Endpoints[Endpoint-1].EndpointNum,
+ 0, (len == Length - ofs ? USB_WakeCallback : NULL), Proc_GetCurThread(),
+ (char*)Data + ofs, len
+ );
+ }
+ Threads_WaitEvents(THREAD_EVENT_SHORTWAIT);
+
+ LEAVE('-');