X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/5a4def747897c1c6ffbe465506d846c7c686d3e9..77a9df36a77d2523dd2bc24fa17f9f04c6c175c5:/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c diff --git a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c index 712589660..48d603569 100644 --- a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c +++ b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. + Copyright (C) Dean Camera, 2011. dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -63,25 +63,28 @@ static uint32_t MassStore_Tag = 1; * * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum */ -static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlock, +static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock, void* BufferPtr) { uint8_t ErrorCode = PIPE_RWSTREAM_NoError; - /* Each transmission should have a unique tag value, increment before use */ - SCSICommandBlock->Tag = ++MassStore_Tag; - /* Wrap Tag value when invalid - MS class defines tag values of 0 and 0xFFFFFFFF to be invalid */ - if (MassStore_Tag == 0xFFFFFFFF) + if (++MassStore_Tag == 0xFFFFFFFF) MassStore_Tag = 1; + /* Each transmission should have a unique tag value, increment before use */ + SCSICommandBlock->Tag = MassStore_Tag; + /* Select the OUT data pipe for CBW transmission */ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); Pipe_Unfreeze(); /* Write the CBW command to the OUT pipe */ - if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError) - return ErrorCode; + if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(MS_CommandBlockWrapper_t), NULL)) != + PIPE_RWSTREAM_NoError) + { + return ErrorCode; + } /* Send the data in the OUT pipe to the attached device */ Pipe_ClearOUT(); @@ -92,7 +95,7 @@ static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlo /* Freeze pipe after use */ Pipe_Freeze(); - /* Send data if any */ + /* Send data if any has been given */ if ((BufferPtr != NULL) && ((ErrorCode = MassStore_SendReceiveData(SCSICommandBlock, BufferPtr)) != PIPE_READYWAIT_NoError)) { @@ -182,14 +185,14 @@ static uint8_t MassStore_WaitForDataReceived(void) * * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum */ -static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSICommandBlock, +static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock, void* BufferPtr) { uint8_t ErrorCode = PIPE_RWSTREAM_NoError; uint16_t BytesRem = SCSICommandBlock->DataTransferLength; /* Check the direction of the SCSI command data stage */ - if (SCSICommandBlock->Flags & COMMAND_DIRECTION_DATA_IN) + if (SCSICommandBlock->Flags & MS_COMMAND_DIR_DATA_IN) { /* Wait until the device has replied with some data */ if ((ErrorCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError) @@ -200,7 +203,7 @@ static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSIComman Pipe_Unfreeze(); /* Read in the block data from the pipe */ - if ((ErrorCode = Pipe_Read_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_NoError) + if ((ErrorCode = Pipe_Read_Stream_LE(BufferPtr, BytesRem, NULL)) != PIPE_RWSTREAM_NoError) return ErrorCode; /* Acknowledge the packet */ @@ -213,7 +216,7 @@ static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSIComman Pipe_Unfreeze(); /* Write the block data to the pipe */ - if ((ErrorCode = Pipe_Write_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_NoError) + if ((ErrorCode = Pipe_Write_Stream_LE(BufferPtr, BytesRem, NULL)) != PIPE_RWSTREAM_NoError) return ErrorCode; /* Acknowledge the packet */ @@ -238,7 +241,7 @@ static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSIComman * * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails */ -static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICommandStatus) +static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus) { uint8_t ErrorCode = PIPE_RWSTREAM_NoError; @@ -251,9 +254,12 @@ static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICom Pipe_Unfreeze(); /* Load in the CSW from the attached device */ - if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(CommandStatusWrapper_t))) != PIPE_RWSTREAM_NoError) - return ErrorCode; - + if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(MS_CommandStatusWrapper_t), NULL)) != + PIPE_RWSTREAM_NoError) + { + return ErrorCode; + } + /* Clear the data ready for next reception */ Pipe_ClearIN(); @@ -261,7 +267,7 @@ static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICom Pipe_Freeze(); /* Check to see if command failed */ - if (SCSICommandStatus->Status != Command_Pass) + if (SCSICommandStatus->Status != MS_SCSI_COMMAND_Pass) ErrorCode = MASS_STORE_SCSI_COMMAND_FAILED; return ErrorCode; @@ -277,7 +283,7 @@ uint8_t MassStore_MassStorageReset(void) USB_ControlRequest = (USB_Request_Header_t) { .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), - .bRequest = REQ_MassStorageReset, + .bRequest = MS_REQ_MassStorageReset, .wValue = 0, .wIndex = 0, .wLength = 0, @@ -307,7 +313,7 @@ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex) USB_ControlRequest = (USB_Request_Header_t) { .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), - .bRequest = REQ_GetMaxLUN, + .bRequest = MS_REQ_GetMaxLUN, .wValue = 0, .wIndex = 0, .wLength = 1, @@ -345,11 +351,11 @@ uint8_t MassStore_Inquiry(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to issue INQUIRY command */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = sizeof(SCSI_Inquiry_Response_t), - .Flags = COMMAND_DIRECTION_DATA_IN, + .Flags = MS_COMMAND_DIR_DATA_IN, .LUN = LUNIndex, .SCSICommandLength = 6, .SCSICommandData = @@ -363,7 +369,7 @@ uint8_t MassStore_Inquiry(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, InquiryPtr)) != PIPE_RWSTREAM_NoError) @@ -396,11 +402,11 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to issue REQUEST SENSE command */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = sizeof(SCSI_Request_Sense_Response_t), - .Flags = COMMAND_DIRECTION_DATA_IN, + .Flags = MS_COMMAND_DIR_DATA_IN, .LUN = LUNIndex, .SCSICommandLength = 6, .SCSICommandData = @@ -414,7 +420,7 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, SensePtr)) != PIPE_RWSTREAM_NoError) @@ -453,11 +459,11 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to read in the given blocks from the device */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = ((uint32_t)Blocks * BlockSize), - .Flags = COMMAND_DIRECTION_DATA_IN, + .Flags = MS_COMMAND_DIR_DATA_IN, .LUN = LUNIndex, .SCSICommandLength = 10, .SCSICommandData = @@ -475,7 +481,7 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, BufferPtr)) != PIPE_RWSTREAM_NoError) @@ -514,11 +520,11 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to write the given blocks to the device */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = ((uint32_t)Blocks * BlockSize), - .Flags = COMMAND_DIRECTION_DATA_OUT, + .Flags = MS_COMMAND_DIR_DATA_OUT, .LUN = LUNIndex, .SCSICommandLength = 10, .SCSICommandData = @@ -536,7 +542,7 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, BufferPtr)) != PIPE_RWSTREAM_NoError) @@ -567,11 +573,11 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex) uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to issue TEST UNIT READY command */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = 0, - .Flags = COMMAND_DIRECTION_DATA_IN, + .Flags = MS_COMMAND_DIR_DATA_IN, .LUN = LUNIndex, .SCSICommandLength = 6, .SCSICommandData = @@ -585,7 +591,7 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex) } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, NULL)) != PIPE_RWSTREAM_NoError) @@ -618,11 +624,11 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to issue READ CAPACITY command */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = sizeof(SCSI_Capacity_t), - .Flags = COMMAND_DIRECTION_DATA_IN, + .Flags = MS_COMMAND_DIR_DATA_IN, .LUN = LUNIndex, .SCSICommandLength = 10, .SCSICommandData = @@ -640,7 +646,7 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, CapacityPtr)) != PIPE_RWSTREAM_NoError) @@ -678,11 +684,11 @@ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, uint8_t ErrorCode = PIPE_RWSTREAM_NoError; /* Create a CBW with a SCSI command to issue PREVENT ALLOW MEDIUM REMOVAL command */ - CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t) + MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) { - .Signature = CBW_SIGNATURE, + .Signature = MS_CBW_SIGNATURE, .DataTransferLength = 0, - .Flags = COMMAND_DIRECTION_DATA_OUT, + .Flags = MS_COMMAND_DIR_DATA_OUT, .LUN = LUNIndex, .SCSICommandLength = 6, .SCSICommandData = @@ -696,7 +702,7 @@ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, } }; - CommandStatusWrapper_t SCSICommandStatus; + MS_CommandStatusWrapper_t SCSICommandStatus; /* Send the command and any data to the attached device */ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, NULL)) != PIPE_RWSTREAM_NoError)