uint8_t USB_Host_SendControlRequest(const uint8_t corenum, void* const BufferPtr) { uint8_t* DataStream = (uint8_t*)BufferPtr; uint16_t DataLen = USB_ControlRequest.wLength; uint8_t ret; if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_HOSTTODEVICE) { Pipe_Write_Stream_LE(corenum, BufferPtr, DataLen, NULL); } ret = (uint8_t)HcdControlTransfer(PipeInfo[corenum][pipeselected[corenum]].PipeHandle, &USB_ControlRequest, PipeInfo[corenum][pipeselected[corenum]].Buffer); if(ret == (uint8_t)HOST_SENDCONTROL_Successful) { if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST) { PipeInfo[corenum][pipeselected[corenum]].ByteTransfered = USB_ControlRequest.wLength; while(DataLen) { *(DataStream++) = Pipe_Read_8(corenum); DataLen--; } /* Pipe_Read_Stream_LE(BufferPtr, DataLen, NULL); cannot use read stream as it call HcdDataTransfer*/ } PipeInfo[corenum][pipeselected[corenum]].StartIdx = PipeInfo[corenum][pipeselected[corenum]].ByteTransfered = 0; /* Clear Control Pipe */ return HOST_SENDCONTROL_Successful; } else { return HOST_SENDCONTROL_PipeError; } }
uint8_t USB_Host_SendControlRequest(void* const BufferPtr) { uint8_t* DataStream = (uint8_t*)BufferPtr; uint16_t DataLen = USB_ControlRequest.wLength; if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_HOSTTODEVICE) { Pipe_Write_Stream_LE(BufferPtr, DataLen, NULL); } HcdControlTransfer(PipeInfo[pipeselected].PipeHandle, &USB_ControlRequest, PipeInfo[pipeselected].Buffer); /* TODO Control Transfer Status */ if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST) { PipeInfo[pipeselected].ByteTransfered = USB_ControlRequest.wLength; // FIXME assume no errors while(DataLen) { *(DataStream++) = Pipe_Read_8(); DataLen--; } /* Pipe_Read_Stream_LE(BufferPtr, DataLen, NULL); cannot use read stream as it call HcdDataTransfer*/ } PipeInfo[pipeselected].StartIdx = PipeInfo[pipeselected].ByteTransfered = 0; /* Clear Control Pipe */ return HOST_SENDCONTROL_Successful; }