aboutsummaryrefslogtreecommitdiffstats
path: root/Demos/Host/LowLevel/MassStorageHost/Lib
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-10-24 22:53:57 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-10-24 22:53:57 +0000
commitb37d77eab32d171ad7b28157a924a4026e2aebd1 (patch)
tree0644f7ed8f76db5e0849195e09892b159df9f475 /Demos/Host/LowLevel/MassStorageHost/Lib
parent8f3bee7d8661c92ce69fdf7cc131fbee1acaa4ae (diff)
downloadlufa-b37d77eab32d171ad7b28157a924a4026e2aebd1.tar.gz
lufa-b37d77eab32d171ad7b28157a924a4026e2aebd1.tar.bz2
lufa-b37d77eab32d171ad7b28157a924a4026e2aebd1.zip
All USB class drivers are now automatically included when LUFA/Drivers/USB.h is included, and no longer need to be seperately included.
All LowLevel demos changed to use the constants and types defined in the USB class drivers.
Diffstat (limited to 'Demos/Host/LowLevel/MassStorageHost/Lib')
-rw-r--r--Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c44
-rw-r--r--Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h133
-rw-r--r--Demos/Host/LowLevel/MassStorageHost/Lib/SCSI_Codes.h87
3 files changed, 25 insertions, 239 deletions
diff --git a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c
index 712589660..1ab70077e 100644
--- a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c
+++ b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c
@@ -63,7 +63,7 @@ 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;
@@ -80,7 +80,7 @@ static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlo
Pipe_Unfreeze();
/* Write the CBW command to the OUT pipe */
- if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError)
+ if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(MS_CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError)
return ErrorCode;
/* Send the data in the OUT pipe to the attached device */
@@ -182,7 +182,7 @@ 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;
@@ -238,7 +238,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,7 +251,7 @@ 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)
+ if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(MS_CommandStatusWrapper_t))) != PIPE_RWSTREAM_NoError)
return ErrorCode;
/* Clear the data ready for next reception */
@@ -261,7 +261,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 +277,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 +307,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,7 +345,7 @@ 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,
.DataTransferLength = sizeof(SCSI_Inquiry_Response_t),
@@ -363,7 +363,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,7 +396,7 @@ 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,
.DataTransferLength = sizeof(SCSI_Request_Sense_Response_t),
@@ -414,7 +414,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,7 +453,7 @@ 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,
.DataTransferLength = ((uint32_t)Blocks * BlockSize),
@@ -475,7 +475,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,7 +514,7 @@ 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,
.DataTransferLength = ((uint32_t)Blocks * BlockSize),
@@ -536,7 +536,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,7 +567,7 @@ 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,
.DataTransferLength = 0,
@@ -585,7 +585,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,7 +618,7 @@ 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,
.DataTransferLength = sizeof(SCSI_Capacity_t),
@@ -640,7 +640,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,7 +678,7 @@ 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,
.DataTransferLength = 0,
@@ -696,7 +696,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)
diff --git a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h
index 8fcffe424..0fed5e06f 100644
--- a/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h
+++ b/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h
@@ -40,151 +40,24 @@
#include <avr/io.h>
#include "MassStorageHost.h"
- #include "SCSI_Codes.h"
#include <LUFA/Drivers/USB/USB.h>
/* Macros: */
- /** Class specific request to reset the Mass Storage interface of the attached device. */
- #define REQ_MassStorageReset 0xFF
-
- /** Class specific request to retrieve the maximum Logical Unit Number (LUN) index of the attached device. */
- #define REQ_GetMaxLUN 0xFE
-
- /** Command Block Wrapper signature byte, for verification of valid CBW blocks. */
- #define CBW_SIGNATURE 0x43425355UL
-
- /** Command Static Wrapper signature byte, for verification of valid CSW blocks. */
- #define CSW_SIGNATURE 0x53425355UL
-
- /** Data direction mask for the Flags field of a CBW, indicating Host-to-Device transfer direction. */
- #define COMMAND_DIRECTION_DATA_OUT (0 << 7)
-
- /** Data direction mask for the Flags field of a CBW, indicating Device-to-Host transfer direction. */
- #define COMMAND_DIRECTION_DATA_IN (1 << 7)
-
/** Timeout period between the issuing of a CBW to a device, and the reception of the first packet. */
#define COMMAND_DATA_TIMEOUT_MS 10000
/** Additional error code for Mass Storage functions when a device returns a logical command failure. */
#define MASS_STORE_SCSI_COMMAND_FAILED 0xC0
- /* Type Defines: */
- /** Type define for a Mass Storage class Command Block Wrapper, used to wrap SCSI
- * commands for transport over the USB bulk endpoints to the device.
- */
- typedef struct
- {
- uint32_t Signature; /**< Command block signature, always equal to CBW_SIGNATURE */
- uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW (filled automatically) */
- uint32_t DataTransferLength; /**< Length of data to transfer, following the CBW */
- uint8_t Flags; /**< Block flags, equal to one of the COMMAND_DIRECTION_DATA_* macros */
- uint8_t LUN; /**< Logical Unit Number the CBW is addressed to in the device */
- uint8_t SCSICommandLength; /**< Length of the SCSI command in the CBW */
- uint8_t SCSICommandData[16]; /**< SCSI command to issue to the device */
- } CommandBlockWrapper_t;
-
- /** Type define for a Mass Storage class Command Status Wrapper, used to wrap SCSI
- * responses for transport over the USB bulk endpoints from the device.
- */
- typedef struct
- {
- uint32_t Signature; /**< Command status signature, always equal to CSW_SIGNATURE */
- uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW */
- uint32_t DataTransferResidue; /**< Length of data not transferred */
- uint8_t Status; /**< Command status, a value from the MassStorageHost_CommandStatusCodes_t enum */
- } CommandStatusWrapper_t;
-
- /** Type define for a SCSI Sense structure. Structures of this type are filled out by the
- * device via the \ref MassStore_RequestSense() function, indicating the current sense data of the
- * device (giving explicit error codes for the last issued command). For details of the
- * structure contents, refer to the SCSI specifications.
- */
- typedef struct
- {
- uint8_t ResponseCode;
-
- uint8_t SegmentNumber;
-
- unsigned char SenseKey : 4;
- unsigned char Reserved : 1;
- unsigned char ILI : 1;
- unsigned char EOM : 1;
- unsigned char FileMark : 1;
-
- uint8_t Information[4];
- uint8_t AdditionalLength;
- uint8_t CmdSpecificInformation[4];
- uint8_t AdditionalSenseCode;
- uint8_t AdditionalSenseQualifier;
- uint8_t FieldReplaceableUnitCode;
- uint8_t SenseKeySpecific[3];
- } SCSI_Request_Sense_Response_t;
-
- /** Type define for a SCSI Inquiry structure. Structures of this type are filled out by the
- * device via the \ref MassStore_Inquiry() function, retrieving the attached device's information.
- * For details of the structure contents, refer to the SCSI specifications.
- */
- typedef struct
- {
- unsigned char DeviceType : 5;
- unsigned char PeripheralQualifier : 3;
-
- unsigned char Reserved : 7;
- unsigned char Removable : 1;
-
- uint8_t Version;
-
- unsigned char ResponseDataFormat : 4;
- unsigned char Reserved2 : 1;
- unsigned char NormACA : 1;
- unsigned char TrmTsk : 1;
- unsigned char AERC : 1;
-
- uint8_t AdditionalLength;
- uint8_t Reserved3[2];
-
- unsigned char SoftReset : 1;
- unsigned char CmdQue : 1;
- unsigned char Reserved4 : 1;
- unsigned char Linked : 1;
- unsigned char Sync : 1;
- unsigned char WideBus16Bit : 1;
- unsigned char WideBus32Bit : 1;
- unsigned char RelAddr : 1;
-
- uint8_t VendorID[8];
- uint8_t ProductID[16];
- uint8_t RevisionID[4];
- } SCSI_Inquiry_Response_t;
-
- /** SCSI capacity structure, to hold the total capacity of the device in both the number
- * of blocks in the current LUN, and the size of each block. This structure is filled by
- * the device when the \ref MassStore_ReadCapacity() function is called.
- */
- typedef struct
- {
- uint32_t Blocks; /**< Number of blocks in the addressed LUN of the device */
- uint32_t BlockSize; /**< Number of bytes in each block in the addressed LUN */
- } SCSI_Capacity_t;
-
- /* Enums: */
- /** CSW status return codes, indicating the overall status of the issued CBW. */
- enum MassStorageHost_CommandStatusCodes_t
- {
- Command_Pass = 0, /**< Command completed successfully */
- Command_Fail = 1, /**< Command failed to complete successfully */
- Phase_Error = 2 /**< Phase error while processing the issued command */
- };
-
/* Function Prototypes: */
#if defined(INCLUDE_FROM_MASSSTORE_COMMANDS_C)
- static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlock,
+ static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock,
void* BufferPtr);
static uint8_t MassStore_WaitForDataReceived(void);
- static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSICommandBlock,
+ static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock,
void* BufferPtr) ATTR_NON_NULL_PTR_ARG(1);
- static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICommandStatus) ATTR_NON_NULL_PTR_ARG(1);
+ static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus) ATTR_NON_NULL_PTR_ARG(1);
#endif
uint8_t MassStore_MassStorageReset(void);
diff --git a/Demos/Host/LowLevel/MassStorageHost/Lib/SCSI_Codes.h b/Demos/Host/LowLevel/MassStorageHost/Lib/SCSI_Codes.h
deleted file mode 100644
index 6bcd5780f..000000000
--- a/Demos/Host/LowLevel/MassStorageHost/Lib/SCSI_Codes.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2010.
-
- dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
-*/
-
-/*
- Copyright 2010 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
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header containing macros for possible SCSI commands and SENSE data. Refer to
- * the SCSI standard documentation for more information on each SCSI command and
- * the SENSE data.
- */
-
-#ifndef _SCSI_CODES_H_
-#define _SCSI_CODES_H_
-
- /* Macros: */
- #define SCSI_CMD_INQUIRY 0x12
- #define SCSI_CMD_REQUEST_SENSE 0x03
- #define SCSI_CMD_TEST_UNIT_READY 0x00
- #define SCSI_CMD_READ_CAPACITY_10 0x25
- #define SCSI_CMD_SEND_DIAGNOSTIC 0x1D
- #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
- #define SCSI_CMD_WRITE_10 0x2A
- #define SCSI_CMD_READ_10 0x28
- #define SCSI_CMD_WRITE_6 0x0A
- #define SCSI_CMD_READ_6 0x08
- #define SCSI_CMD_VERIFY_10 0x2F
- #define SCSI_CMD_MODE_SENSE_6 0x1A
- #define SCSI_CMD_MODE_SENSE_10 0x5A
-
- #define SCSI_SENSE_KEY_GOOD 0x00
- #define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01
- #define SCSI_SENSE_KEY_NOT_READY 0x02
- #define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03
- #define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04
- #define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05
- #define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06
- #define SCSI_SENSE_KEY_DATA_PROTECT 0x07
- #define SCSI_SENSE_KEY_BLANK_CHECK 0x08
- #define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09
- #define SCSI_SENSE_KEY_COPY_ABORTED 0x0A
- #define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B
- #define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D
- #define SCSI_SENSE_KEY_MISCOMPARE 0x0E
-
- #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00
- #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04
- #define SCSI_ASENSE_INVALID_COMMAND 0x20
- #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21
- #define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24
- #define SCSI_ASENSE_WRITE_PROTECTED 0x27
- #define SCSI_ASENSE_NOT_READY_TO_READY_CHANGE 0x28
- #define SCSI_ASENSE_FORMAT_ERROR 0x31
- #define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A
-
- #define SCSI_ASENSEQ_NO_QUALIFIER 0x00
- #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01
- #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED 0x02
- #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07
-
-#endif
-