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.
This commit is contained in:
parent
8f3bee7d86
commit
b37d77eab3
208 changed files with 589 additions and 2910 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue