8913c04831
This gives a functioning, independent MSC device.
194 lines
6.1 KiB
C
194 lines
6.1 KiB
C
/**
|
|
******************************************************************************
|
|
* @file usbd_msc_scsi.h
|
|
* @author MCD Application Team
|
|
* @version V2.0.0
|
|
* @date 18-February-2014
|
|
* @brief header for the usbd_msc_scsi.c file
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© COPYRIGHT 2014 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;
|
|
} USBD_SCSI_SenseTypeDef;
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup USBD_SCSI_Exported_Macros
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup USBD_SCSI_Exported_Variables
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
/** @defgroup USBD_SCSI_Exported_FunctionsPrototype
|
|
* @{
|
|
*/
|
|
int8_t SCSI_ProcessCmd(USBD_HandleTypeDef *pdev,
|
|
uint8_t lun,
|
|
uint8_t *cmd);
|
|
|
|
void SCSI_SenseCode(USBD_HandleTypeDef *pdev,
|
|
uint8_t lun,
|
|
uint8_t sKey,
|
|
uint8_t ASC);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* __USBD_MSC_SCSI_H */
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
|