Fixed RNDISEthernet not working under Linux due to Linux requiring an "optional"...
[pub/USBasp.git] / Demos / Host / MassStorageHost / MassStoreCommands.c
index 0d88acb..95aafca 100644 (file)
@@ -73,9 +73,9 @@ static uint32_t               MassStore_Tag = 1;
  */\r
 static uint8_t MassStore_SendCommand(void)\r
 {\r
-       uint8_t ErrorCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ErrorCode = PIPE_RWSTREAM_NoError;\r
 \r
-       /* Each transmission should have a unique tag value, excluding valued 0 and 0xFFFFFFFF */\r
+       /* Each transmission should have a unique tag value, excluding values 0 and 0xFFFFFFFF */\r
        if (++MassStore_Tag == 0xFFFFFFFF)\r
          MassStore_Tag = 1;\r
 \r
@@ -84,19 +84,18 @@ static uint8_t MassStore_SendCommand(void)
        Pipe_Unfreeze();\r
 \r
        /* Write the CBW command to the OUT pipe */\r
-       if ((ErrorCode = Pipe_Write_Stream_LE(&SCSICommandBlock, sizeof(CommandBlockWrapper_t))) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ErrorCode = Pipe_Write_Stream_LE(&SCSICommandBlock, sizeof(CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError)\r
          return ErrorCode;\r
 \r
        /* Send the data in the OUT pipe to the attached device */\r
-       Pipe_ClearCurrentBank();\r
-\r
-       /* Some buggy devices require a delay here before the pipe freezing or they will lock up */\r
-       USB_Host_WaitMS(1);\r
+       Pipe_ClearOUT();\r
        \r
+       while(!(Pipe_IsOUTReady()));\r
+\r
        /* Freeze pipe after use */\r
        Pipe_Freeze();\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Waits until the attached device is ready to accept data following a CBW, checking\r
@@ -117,7 +116,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
        Pipe_Unfreeze();\r
 \r
        /* Wait until data received in the IN pipe */\r
-       while (!(Pipe_ReadWriteAllowed()))\r
+       while (!(Pipe_IsINReceived()))\r
        {\r
                /* Check to see if a new frame has been issued (1ms elapsed) */\r
                if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
@@ -128,7 +127,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
 \r
                        /* Check to see if the timeout period for the command has elapsed */\r
                        if (!(TimeoutMSRem))\r
-                         return PIPE_RWSTREAM_ERROR_Timeout;\r
+                         return PIPE_RWSTREAM_Timeout;\r
                }\r
        \r
                Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE);\r
@@ -139,7 +138,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
                        /* Clear the stall condition on the OUT pipe */\r
                        MassStore_ClearPipeStall(MASS_STORE_DATA_OUT_PIPE);\r
 \r
-                       return PIPE_RWSTREAM_ERROR_PipeStalled;\r
+                       return PIPE_RWSTREAM_PipeStalled;\r
                }\r
 \r
                Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE);\r
@@ -150,15 +149,15 @@ static uint8_t MassStore_WaitForDataReceived(void)
                        /* Clear the stall condition on the IN pipe */\r
                        MassStore_ClearPipeStall(MASS_STORE_DATA_IN_PIPE);\r
 \r
-                       return PIPE_RWSTREAM_ERROR_PipeStalled;\r
+                       return PIPE_RWSTREAM_PipeStalled;\r
                }\r
                  \r
                /* Check to see if the device was disconnected, if so exit function */\r
                if (!(USB_IsConnected))\r
-                 return PIPE_RWSTREAM_ERROR_DeviceDisconnected;\r
+                 return PIPE_RWSTREAM_DeviceDisconnected;\r
        };\r
 \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Sends or receives the transaction's data stage to or from the attached device, reading or\r
@@ -170,7 +169,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
  */\r
 static uint8_t MassStore_SendReceiveData(void* BufferPtr)\r
 {\r
-       uint8_t  ErrorCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t  ErrorCode = PIPE_RWSTREAM_NoError;\r
        uint16_t BytesRem  = SCSICommandBlock.Header.DataTransferLength;\r
 \r
        /* Check the direction of the SCSI command data stage */\r
@@ -181,8 +180,11 @@ static uint8_t MassStore_SendReceiveData(void* BufferPtr)
                Pipe_Unfreeze();\r
                \r
                /* Read in the block data from the pipe */\r
-               if ((ErrorCode = Pipe_Read_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_ERROR_NoError)\r
+               if ((ErrorCode = Pipe_Read_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_NoError)\r
                  return ErrorCode;\r
+\r
+               /* Acknowledge the packet */\r
+               Pipe_ClearIN();\r
        }\r
        else\r
        {\r
@@ -191,20 +193,19 @@ static uint8_t MassStore_SendReceiveData(void* BufferPtr)
                Pipe_Unfreeze();\r
 \r
                /* Write the block data to the pipe */\r
-               if ((ErrorCode = Pipe_Write_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_ERROR_NoError)\r
+               if ((ErrorCode = Pipe_Write_Stream_LE(BufferPtr, BytesRem)) != PIPE_RWSTREAM_NoError)\r
                  return ErrorCode;\r
-       }\r
-       \r
-       /* Acknowledge the packet */\r
-       Pipe_ClearCurrentBank();\r
 \r
-       /* Some buggy devices require a delay here before the pipe freezing or they will lock up */\r
-       USB_Host_WaitMS(1);\r
+               /* Acknowledge the packet */\r
+               Pipe_ClearOUT();\r
+               \r
+               while (!(Pipe_IsOUTReady()));\r
+       }\r
        \r
        /* Freeze used pipe after use */\r
        Pipe_Freeze();\r
 \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Routine to receive the current CSW from the device.\r
@@ -213,30 +214,27 @@ static uint8_t MassStore_SendReceiveData(void* BufferPtr)
  */\r
 static uint8_t MassStore_GetReturnedStatus(void)\r
 {\r
-       uint8_t ErrorCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ErrorCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* If an error in the command ocurred, abort */\r
-       if (MassStore_WaitForDataReceived() != NoError)\r
-         return;\r
+       if ((ErrorCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError)\r
+         return ErrorCode;\r
 \r
        /* Select the IN data pipe for data reception */\r
        Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE);\r
        Pipe_Unfreeze();\r
        \r
        /* Load in the CSW from the attached device */\r
-       if ((ErrorCode = Pipe_Read_Stream_LE(&SCSICommandStatus, sizeof(CommandStatusWrapper_t))) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ErrorCode = Pipe_Read_Stream_LE(&SCSICommandStatus, sizeof(CommandStatusWrapper_t))) != PIPE_RWSTREAM_NoError)\r
          return ErrorCode;\r
          \r
        /* Clear the data ready for next reception */\r
-       Pipe_ClearCurrentBank();\r
-\r
-       /* Some buggy devices require a delay here before the pipe freezing or they will lock up */\r
-       USB_Host_WaitMS(1);\r
+       Pipe_ClearIN();\r
        \r
        /* Freeze the IN pipe after use */\r
        Pipe_Freeze();\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Clears the stall condition in the attached device on the nominated endpoint number.\r
@@ -247,15 +245,18 @@ static uint8_t MassStore_GetReturnedStatus(void)
  */\r
 uint8_t MassStore_ClearPipeStall(const uint8_t EndpointNum)\r
 {\r
-       USB_HostRequest = (USB_Host_Request_Header_t)\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT),\r
-                       bRequest:      REQ_ClearFeature,\r
-                       wValue:        FEATURE_ENDPOINT_HALT,\r
-                       wIndex:        EndpointNum,\r
-                       wLength:       0,\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT),\r
+                       .bRequest      = REQ_ClearFeature,\r
+                       .wValue        = FEATURE_ENDPOINT_HALT,\r
+                       .wIndex        = EndpointNum,\r
+                       .wLength       = 0,\r
                };\r
        \r
+       /* Select the control pipe for the request transfer */\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
        return USB_Host_SendControlRequest(NULL);\r
 }\r
 \r
@@ -266,15 +267,18 @@ uint8_t MassStore_ClearPipeStall(const uint8_t EndpointNum)
  */\r
 uint8_t MassStore_MassStorageReset(void)\r
 {\r
-       USB_HostRequest = (USB_Host_Request_Header_t)\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
-                       bRequest:      REQ_MassStorageReset,\r
-                       wValue:        0,\r
-                       wIndex:        0,\r
-                       wLength:       0,\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .bRequest      = REQ_MassStorageReset,\r
+                       .wValue        = 0,\r
+                       .wIndex        = 0,\r
+                       .wLength       = 0,\r
                };\r
        \r
+       /* Select the control pipe for the request transfer */\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
        return USB_Host_SendControlRequest(NULL);\r
 }\r
 \r
@@ -289,15 +293,18 @@ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex)
 {\r
        uint8_t ErrorCode;\r
 \r
-       USB_HostRequest = (USB_Host_Request_Header_t)\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
-                       bRequest:      REQ_GetMaxLUN,\r
-                       wValue:        0,\r
-                       wIndex:        0,\r
-                       wLength:       1,\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .bRequest      = REQ_GetMaxLUN,\r
+                       .wValue        = 0,\r
+                       .wIndex        = 0,\r
+                       .wLength       = 1,\r
                };\r
                \r
+       /* Select the control pipe for the request transfer */\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
        if ((ErrorCode = USB_Host_SendControlRequest(MaxLUNIndex)) == HOST_SENDCONTROL_SetupStalled)\r
        {\r
                /* Clear the pipe stall */\r
@@ -320,22 +327,22 @@ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex)
  */\r
 uint8_t MassStore_RequestSense(const uint8_t LUNIndex, const SCSI_Request_Sense_Response_t* const SensePtr)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* Create a CBW with a SCSI command to issue REQUEST SENSE command */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: sizeof(SCSI_Request_Sense_Response_t),\r
-                                       Flags:              COMMAND_DIRECTION_DATA_IN,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  6\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = sizeof(SCSI_Request_Sense_Response_t),\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_IN,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 6\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_REQUEST_SENSE,\r
                                        0x00,                   // Reserved\r
@@ -350,27 +357,27 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, const SCSI_Request_Sense_
        MassStore_SendCommand();\r
 \r
        /* Wait until data received from the device */\r
-       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
 \r
        /* Read the returned sense data into the buffer */\r
-       if ((ReturnCode = MassStore_SendReceiveData((uint8_t*)SensePtr)) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_SendReceiveData((uint8_t*)SensePtr)) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }       \r
        \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Issues a SCSI Device Block Read command to the attached device, to read in one or more data blocks from the\r
@@ -387,22 +394,22 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, const SCSI_Request_Sense_
 uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockAddress,\r
                                   const uint8_t Blocks, const uint16_t BlockSize, void* BufferPtr)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* Create a CBW with a SCSI command to read in the given blocks from the device */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: ((uint32_t)Blocks * BlockSize),\r
-                                       Flags:              COMMAND_DIRECTION_DATA_IN,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  10\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = ((uint32_t)Blocks * BlockSize),\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_IN,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 10\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_READ_10,\r
                                        0x00,                   // Unused (control bits, all off)\r
@@ -421,27 +428,27 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockAd
        MassStore_SendCommand();\r
 \r
        /* Wait until data received from the device */\r
-       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
 \r
        /* Read the returned block data into the buffer */\r
-       if ((ReturnCode = MassStore_SendReceiveData(BufferPtr)) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_SendReceiveData(BufferPtr)) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }       \r
        \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Issues a SCSI Device Block Write command to the attached device, to write one or more data blocks to the\r
@@ -458,22 +465,22 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockAd
 uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockAddress,\r
                                    const uint8_t Blocks, const uint16_t BlockSize, void* BufferPtr)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* Create a CBW with a SCSI command to write the given blocks to the device */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: ((uint32_t)Blocks * BlockSize),\r
-                                       Flags:              COMMAND_DIRECTION_DATA_OUT,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  10\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = ((uint32_t)Blocks * BlockSize),\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_OUT,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 10\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_WRITE_10,\r
                                        0x00,                   // Unused (control bits, all off)\r
@@ -492,20 +499,20 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockA
        MassStore_SendCommand();\r
 \r
        /* Write the data to the device from the buffer */\r
-       if ((ReturnCode = MassStore_SendReceiveData(BufferPtr)) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_SendReceiveData(BufferPtr)) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }       \r
        \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Issues a SCSI Device Test Unit Ready command to the attached device, to determine if the device is ready to accept\r
@@ -517,22 +524,22 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockA
  */\r
 uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;       \r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;     \r
 \r
        /* Create a CBW with a SCSI command to issue TEST UNIT READY command */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: 0,\r
-                                       Flags:              COMMAND_DIRECTION_DATA_IN,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  6\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = 0,\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_IN,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 6\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_TEST_UNIT_READY,\r
                                        0x00,                   // Reserved\r
@@ -547,13 +554,13 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)
        MassStore_SendCommand();\r
 \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Issues a SCSI Device Read Capacity command to the attached device, to determine the capacity of the\r
@@ -566,22 +573,22 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)
  */\r
 uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, SCSI_Capacity_t* const CapacityPtr)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* Create a CBW with a SCSI command to issue READ CAPACITY command */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: 8,\r
-                                       Flags:              COMMAND_DIRECTION_DATA_IN,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  10\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = sizeof(SCSI_Capacity_t),\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_IN,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 10\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_READ_CAPACITY_10,\r
                                        0x00,                   // Reserved\r
@@ -600,14 +607,14 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, SCSI_Capacity_t* const Ca
        MassStore_SendCommand();\r
 \r
        /* Wait until data received from the device */\r
-       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
 \r
        /* Read the returned capacity data into the buffer */\r
-       if ((ReturnCode = MassStore_SendReceiveData(CapacityPtr)) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_SendReceiveData(CapacityPtr)) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
@@ -618,13 +625,13 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, SCSI_Capacity_t* const Ca
        CapacityPtr->BlockSize = SwapEndian_32(CapacityPtr->BlockSize);\r
        \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_NoError)\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r
 \r
 /** Issues a SCSI Device Prevent/Allow Medium Removal command to the attached device, to lock the physical media from\r
@@ -638,22 +645,22 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, SCSI_Capacity_t* const Ca
  */\r
 uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, const bool PreventRemoval)\r
 {\r
-       uint8_t ReturnCode = PIPE_RWSTREAM_ERROR_NoError;\r
+       uint8_t ReturnCode = PIPE_RWSTREAM_NoError;\r
 \r
        /* Create a CBW with a SCSI command to issue PREVENT ALLOW MEDIUM REMOVAL command */\r
        SCSICommandBlock = (CommandBlockWrapper_t)\r
                {\r
-                       Header:\r
+                       .Header =\r
                                {\r
-                                       Signature:          CBW_SIGNATURE,\r
-                                       Tag:                MassStore_Tag,\r
-                                       DataTransferLength: 0,\r
-                                       Flags:              COMMAND_DIRECTION_DATA_OUT,\r
-                                       LUN:                LUNIndex,\r
-                                       SCSICommandLength:  6\r
+                                       .Signature          = CBW_SIGNATURE,\r
+                                       .Tag                = MassStore_Tag,\r
+                                       .DataTransferLength = 0,\r
+                                       .Flags              = COMMAND_DIRECTION_DATA_OUT,\r
+                                       .LUN                = LUNIndex,\r
+                                       .SCSICommandLength  = 6\r
                                },\r
                                        \r
-                       SCSICommandData:\r
+                       .SCSICommandData =\r
                                {\r
                                        SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL,\r
                                        0x00,                   // Reserved\r
@@ -668,11 +675,11 @@ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, const bool P
        MassStore_SendCommand();\r
 \r
        /* Read in the returned CSW from the device */\r
-       if ((ReturnCode = MassStore_GetReturnedStatus()) != PIPE_RWSTREAM_ERROR_NoError)\r
+       if ((ReturnCode = MassStore_GetReturnedStatus()))\r
        {\r
                Pipe_Freeze();\r
                return ReturnCode;\r
        }\r
        \r
-       return PIPE_RWSTREAM_ERROR_NoError;\r
+       return PIPE_RWSTREAM_NoError;\r
 }\r