196 lines
6.2 KiB
C
196 lines
6.2 KiB
C
|
/**
|
||
|
******************************************************************************
|
||
|
* @file usbd_msc_scsi.h
|
||
|
* @author MCD Application Team
|
||
|
* @version V1.1.0
|
||
|
* @date 19-March-2012
|
||
|
* @brief header for the usbd_msc_scsi.c file
|
||
|
******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||
|
*
|
||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||
|
* You may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at:
|
||
|
*
|
||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
|
#ifndef __USBD_MSC_SCSI_H
|
||
|
#define __USBD_MSC_SCSI_H
|
||
|
|
||
|
/* Includes ------------------------------------------------------------------*/
|
||
|
#include "usbd_def.h"
|
||
|
|
||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USBD_SCSI
|
||
|
* @brief header file for the storage disk file
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USBD_SCSI_Exported_Defines
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#define SENSE_LIST_DEEPTH 4
|
||
|
|
||
|
/* SCSI Commands */
|
||
|
#define SCSI_FORMAT_UNIT 0x04
|
||
|
#define SCSI_INQUIRY 0x12
|
||
|
#define SCSI_MODE_SELECT6 0x15
|
||
|
#define SCSI_MODE_SELECT10 0x55
|
||
|
#define SCSI_MODE_SENSE6 0x1A
|
||
|
#define SCSI_MODE_SENSE10 0x5A
|
||
|
#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1E
|
||
|
#define SCSI_READ6 0x08
|
||
|
#define SCSI_READ10 0x28
|
||
|
#define SCSI_READ12 0xA8
|
||
|
#define SCSI_READ16 0x88
|
||
|
|
||
|
#define SCSI_READ_CAPACITY10 0x25
|
||
|
#define SCSI_READ_CAPACITY16 0x9E
|
||
|
|
||
|
#define SCSI_REQUEST_SENSE 0x03
|
||
|
#define SCSI_START_STOP_UNIT 0x1B
|
||
|
#define SCSI_TEST_UNIT_READY 0x00
|
||
|
#define SCSI_WRITE6 0x0A
|
||
|
#define SCSI_WRITE10 0x2A
|
||
|
#define SCSI_WRITE12 0xAA
|
||
|
#define SCSI_WRITE16 0x8A
|
||
|
|
||
|
#define SCSI_VERIFY10 0x2F
|
||
|
#define SCSI_VERIFY12 0xAF
|
||
|
#define SCSI_VERIFY16 0x8F
|
||
|
|
||
|
#define SCSI_SEND_DIAGNOSTIC 0x1D
|
||
|
#define SCSI_READ_FORMAT_CAPACITIES 0x23
|
||
|
|
||
|
#define NO_SENSE 0
|
||
|
#define RECOVERED_ERROR 1
|
||
|
#define NOT_READY 2
|
||
|
#define MEDIUM_ERROR 3
|
||
|
#define HARDWARE_ERROR 4
|
||
|
#define ILLEGAL_REQUEST 5
|
||
|
#define UNIT_ATTENTION 6
|
||
|
#define DATA_PROTECT 7
|
||
|
#define BLANK_CHECK 8
|
||
|
#define VENDOR_SPECIFIC 9
|
||
|
#define COPY_ABORTED 10
|
||
|
#define ABORTED_COMMAND 11
|
||
|
#define VOLUME_OVERFLOW 13
|
||
|
#define MISCOMPARE 14
|
||
|
|
||
|
|
||
|
#define INVALID_CDB 0x20
|
||
|
#define INVALID_FIELED_IN_COMMAND 0x24
|
||
|
#define PARAMETER_LIST_LENGTH_ERROR 0x1A
|
||
|
#define INVALID_FIELD_IN_PARAMETER_LIST 0x26
|
||
|
#define ADDRESS_OUT_OF_RANGE 0x21
|
||
|
#define MEDIUM_NOT_PRESENT 0x3A
|
||
|
#define MEDIUM_HAVE_CHANGED 0x28
|
||
|
#define WRITE_PROTECTED 0x27
|
||
|
#define UNRECOVERED_READ_ERROR 0x11
|
||
|
#define WRITE_FAULT 0x03
|
||
|
|
||
|
#define READ_FORMAT_CAPACITY_DATA_LEN 0x0C
|
||
|
#define READ_CAPACITY10_DATA_LEN 0x08
|
||
|
#define MODE_SENSE10_DATA_LEN 0x08
|
||
|
#define MODE_SENSE6_DATA_LEN 0x04
|
||
|
#define REQUEST_SENSE_DATA_LEN 0x12
|
||
|
#define STANDARD_INQUIRY_DATA_LEN 0x24
|
||
|
#define BLKVFY 0x04
|
||
|
|
||
|
extern uint8_t Page00_Inquiry_Data[];
|
||
|
extern uint8_t Standard_Inquiry_Data[];
|
||
|
extern uint8_t Standard_Inquiry_Data2[];
|
||
|
extern uint8_t Mode_Sense6_data[];
|
||
|
extern uint8_t Mode_Sense10_data[];
|
||
|
extern uint8_t Scsi_Sense_Data[];
|
||
|
extern uint8_t ReadCapacity10_Data[];
|
||
|
extern uint8_t ReadFormatCapacity_Data [];
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
|
||
|
/** @defgroup USBD_SCSI_Exported_TypesDefinitions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
typedef struct _SENSE_ITEM {
|
||
|
char Skey;
|
||
|
union {
|
||
|
struct _ASCs {
|
||
|
char ASC;
|
||
|
char ASCQ;
|
||
|
}b;
|
||
|
unsigned int ASC;
|
||
|
char *pData;
|
||
|
} w;
|
||
|
} SCSI_Sense_TypeDef;
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USBD_SCSI_Exported_Macros
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USBD_SCSI_Exported_Variables
|
||
|
* @{
|
||
|
*/
|
||
|
extern SCSI_Sense_TypeDef SCSI_Sense [SENSE_LIST_DEEPTH];
|
||
|
extern uint8_t SCSI_Sense_Head;
|
||
|
extern uint8_t SCSI_Sense_Tail;
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
/** @defgroup USBD_SCSI_Exported_FunctionsPrototype
|
||
|
* @{
|
||
|
*/
|
||
|
int8_t SCSI_ProcessCmd(USB_OTG_CORE_HANDLE *pdev,
|
||
|
uint8_t lun,
|
||
|
uint8_t *cmd);
|
||
|
|
||
|
void SCSI_SenseCode(uint8_t lun,
|
||
|
uint8_t sKey,
|
||
|
uint8_t ASC);
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#endif /* __USBD_MSC_SCSI_H */
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||
|
|