X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f1199200e167a737a4676378da184387e543830c..31d8ebebc0796873f7c70db80a04acdcbb307ed8:/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c diff --git a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c index f2f666bd1..970df4f87 100644 --- a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c +++ b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c @@ -80,20 +80,24 @@ void SImage_SendBlockHeader(void) } /** Function to receive a PIMA event container from the attached still image device. */ -void SImage_RecieveEventHeader(void) +uint8_t SImage_RecieveEventHeader(void) { + uint8_t ErrorCode; + /* Unfreeze the events pipe */ Pipe_SelectPipe(SIMAGE_EVENTS_PIPE); Pipe_Unfreeze(); /* Read in the event data into the global structure */ - Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock)); + ErrorCode = Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock)); /* Clear the pipe after read complete to prepare for next event */ Pipe_ClearIN(); /* Freeze the event pipe again after use */ Pipe_Freeze(); + + return ErrorCode; } /** Function to receive a PIMA response container from the attached still image device. */ @@ -109,10 +113,10 @@ uint8_t SImage_RecieveBlockHeader(void) while (!(Pipe_IsReadWriteAllowed())) { /* Check to see if a new frame has been issued (1ms elapsed) */ - if (FrameElapsed) + if (USB_INT_HasOccurred(USB_INT_HSOFI)) { /* Clear the flag and decrement the timeout period counter */ - FrameElapsed = false; + USB_INT_Clear(USB_INT_HSOFI); TimeoutMSRem--; /* Check to see if the timeout period for the command has elapsed */ @@ -129,7 +133,7 @@ uint8_t SImage_RecieveBlockHeader(void) if (Pipe_IsStalled()) { /* Clear the stall condition on the OUT pipe */ - SImage_ClearPipeStall(SIMAGE_DATA_OUT_PIPE); + USB_Host_ClearPipeStall(SIMAGE_DATA_OUT_PIPE); /* Return error code and break out of the loop */ return PIPE_RWSTREAM_PipeStalled; @@ -141,19 +145,16 @@ uint8_t SImage_RecieveBlockHeader(void) if (Pipe_IsStalled()) { /* Clear the stall condition on the IN pipe */ - SImage_ClearPipeStall(SIMAGE_DATA_IN_PIPE); + USB_Host_ClearPipeStall(SIMAGE_DATA_IN_PIPE); /* Return error code */ return PIPE_RWSTREAM_PipeStalled; } /* Check to see if the device was disconnected, if so exit function */ - if (!(USB_IsConnected)) - { - /* Return error code */ - return PIPE_RWSTREAM_DeviceDisconnected; - } - }; + if (USB_HostState == HOST_STATE_Unattached) + return PIPE_RWSTREAM_DeviceDisconnected; + } /* Freeze OUT pipe after use */ Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE); @@ -190,29 +191,33 @@ uint8_t SImage_RecieveBlockHeader(void) /** Function to send the given data to the device, after a command block has been issued. * - * \param Buffer Source data buffer to send to the device - * \param Bytes Number of bytes to send + * \param[in] Buffer Source data buffer to send to the device + * \param[in] Bytes Number of bytes to send */ -void SImage_SendData(void* Buffer, uint16_t Bytes) +uint8_t SImage_SendData(void* Buffer, uint16_t Bytes) { + uint8_t ErrorCode; + /* Unfreeze the data OUT pipe */ Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE); Pipe_Unfreeze(); /* Write the data contents to the pipe */ - Pipe_Write_Stream_LE(Buffer, Bytes); + ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes); /* Send the last packet to the attached device */ Pipe_ClearOUT(); /* Freeze the pipe again after use */ Pipe_Freeze(); + + return ErrorCode; } /** Function to receive the given data to the device, after a response block has been received. * - * \param Buffer Destination data buffer to put read bytes from the device - * \param Bytes Number of bytes to receive + * \param[out] Buffer Destination data buffer to put read bytes from the device + * \param[in] Bytes Number of bytes to receive * * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum */ @@ -254,26 +259,3 @@ bool SImage_IsEventReceived(void) return IsEventReceived; } - -/** Clears the stall condition in the attached device on the nominated endpoint number. - * - * \param EndpointNum Endpoint number in the attached device whose stall condition is to be cleared - * - * \return A value from the USB_Host_SendControlErrorCodes_t enum - */ -uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum) -{ - USB_ControlRequest = (USB_Request_Header_t) - { - .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT), - .bRequest = REQ_ClearFeature, - .wValue = FEATURE_ENDPOINT_HALT, - .wIndex = EndpointNum, - .wLength = 0, - }; - - /* Select the control pipe for the request transfer */ - Pipe_SelectPipe(PIPE_CONTROLPIPE); - - return USB_Host_SendControlRequest(NULL); -}