📄 usbh_storage_if.h
字号:
/*
* description: USBH Mass Storage Class Interface Definition(global)
* Maker : Shuichi Yanagihara
* Copyright : (C)2005,SEIKO EPSON Corp. All Rights Reserved.
*/
#ifndef USBH_STRG_IF_H
#define USBH_STRG_IF_H
#ifdef __cplusplus
extern "C" {
#endif /* cplusplus */
#include "OSCall.h"
#include "drvacs.h"
#include "usbh_usbd_api.h"
/*****************************************
* Constants define
*****************************************/
/* Mass Storage Class Code */
#define VENDOR_CLASS_IF_CODE 0xFF /* Vendor Class Interface Code */
#define STRG_CLASS_IF_CODE 0x08 /* Mass Storage Class Interface Code */
#define HID_CLASS_IF_CODE 0x03 /* HID Class Interface Code */
#define AUDIO_CLASS_IF_CODE 0x01 /* Audio Class Code */
#define STRG_CLASS_CODE STRG_CLASS_IF_CODE /* Mass Storage Class Code */
#define AUDIO_CLASS_CODE AUDIO_CLASS_IF_CODE /* Audio Class Code(CC_AUDIO) */
#define HID_CLASS_CODE HID_CLASS_IF_CODE /* HID Class Code */
#define STRG_CLASS_IF_PROT_CODE 0x50 /* Bulk Only Transport Protocol Code */
#define SUBCLASS_RBC 0x01 /* Reduced Block Command */
#define SUBCLASS_SFF8020I 0x02 /* SFF8020i or MMC-2 */
#define SUBCLASS_QIC157 0x03 /* QIC-157 */
#define SUBCLASS_UFI 0x04 /* UFI */
#define SUBCLASS_SFF8070I 0x05 /* SFF8070i */
#define SUBCLASS_SCSI 0x06 /* SCSI Primary Command-2 */
/* SCSI/ATAPI OP Code */
#define TEST_UNIT_READY 0x00
#define REQUEST_SENSE 0x03
#define FORMAT_UNIT 0x04
#define INQUIRY 0x12
#define READ_FORMAT_CAPACITY 0x23
#define READ_CAPACITY 0x25
#define READ10 0x28
#define WRITE10 0x2A
/* RequestSense SenseKey Code */
#define NO_SENSE 0x00
#define RECOVERED_ERROR 0x01
#define NOT_READY 0x02
#define MEDIUM_ERROR 0x03
#define HARDWARE_ERROR 0x04
#define ILLEGAL_REQEEST 0x05
#define UNIT_ATTENTION 0x06
#define DATA_PROTECT 0x07
#define BLANK_CHECK 0x08
#define COPY_ABORTED 0x0A
#define ABORTED_COMMAND 0x0B
#define EQUAL 0x0C
#define VOLUME_OVERFLOW 0x0D
#define MISCOMPARE 0x0E
/* Inquiry/Identify DeviceType Code */
#define DIRECT_DEV 0x00 /* Direct Access Device */
#define WRONCE_DEV 0x04 /* Write Once Device */
#define CDROM_DEV 0x05 /* CD-ROM Device */
#define OPTICAL_DEV 0x07 /* Optical Memory Device */
/* SCSI/ATAPI Command Mode */
#define SCSI 0x00
#define ATAPI 0x01
/* SCSI/ATAPI Command Parameter */
#define REQSENSE_LENGTH 18 /* RequestSense Data Length 18Byte */
#define INQUIRY_LENGTH 36 /* Inquiry Data Length 36Byte(product Rev . ) */
#define IDENTIFY_LENGTH 512 /* Identify Data Length 512Byte */
#define RDFORMCAPA_LENGTH 252 /* Read Format Capacity Allocation Length 252Byte */
/* CBW/CSW Fixed Value */
#ifdef LITTLE_ENDIAN_C
#define CBW_SIGNATURE 0x43425355 /* CBW Signature */
#else /* #ifdef LITTLE_ENDIAN_C */
#define CBW_SIGNATURE 0x55534243 /* CBW Signature */
#endif /* #ifdef LITTLE_ENDIAN_C */
#define CBW_OUT 0x00 /* CBW Flag : Data Out */
#define CBW_IN 0x80 /* CBW Flag : Data In */
#define CBW_LENGTH 0x1F /* CBW Length 31byte */
#define CSW_LENGTH 0x0D /* CSW Length 13byte */
/* CSW Status */
#define CSW_OK 0x00 /* CSW Status OK */
#define CSW_ERR 0x01 /* CSW Status Error */
#define CSW_PHASE_ERR 0x02 /* CSW Status Phase Error */
/* Mass Storage Class Request Type */
#define MASS_STORAGE_RESET 0x21 /* BulkOnly Mass Storage Reset Request */
#define GET_MAX_LUN 0xA1 /* Get Max LUN Request */
/* Standard Device Request Type */
#define CLEAR_FEATURE_EP 0x02 /* Clear Feature EP Request */
/* Callback Flag */
#define EVENT_NONE 0x0000 /* Callback event none */
#define EVENT_USBD_INIT 0x0001 /* USBD initialization end event */
#define EVENT_DEVICE 0x0002 /* Device connection and disconnectting Callback event */
#define EVENT_SETCONFIG 0x0004 /* SetConfiguration end Callback event */
#define EVENT_RESET 0x0008 /* USB Reset end Callback event */
#define EVENT_CBW_COMP 0x0010 /* CBW transport forwarding end Callback event */
#define EVENT_DATA_COMP 0x0020 /* DATA transport forwarding end Callback event */
#define EVENT_CSW_COMP 0x0040 /* CSW transport forwarding end Callback event */
#define EVENT_CTL_COMP 0x0080 /* Control forwarding end Callback event */
#define EVENT_RESET_RECOVERY 0x0100 /* ResetRecovery event */
#define EVENT_SUBMIT_URB 0x0200 /* SubmitURB registration end event */
#define EVENT_UNLINK_URB 0x0400 /* UnlinkURB end event */
#define EVENT_ENTRY_CLASS 0x0800 /* EntryClass end event */
#define EVENT_RETURN_VALUE 0x1000 /* ReturnValue acquisition event */
/*****************************************
* Callback functions declaration
*****************************************/
/*****************************************
* Enumeration type declaration
*****************************************/
/*****************************************
* structures declaration
*****************************************/
typedef struct tagUSBH_STRG_DEVICE_PARA{
UCHAR reqSenseData[18]; /* Last Execution RequestSense Data */
UCHAR identifyData[512]; /* Device Identify Data */
UCHAR devAdr; /* Device Address */
USHORT interface; /* Device Configuration Interface */
UCHAR subClass; /* Mass Storage Interface Sub Class Code */
UCHAR lun; /* LUN */
UCHAR commandStatus; /* Command Status */
UCHAR commandMode; /* Command Mode (SCSI or ATAPI) */
UCHAR deviceStatus; /* Device Status */
UCHAR bulkInEP; /* Device Bulk IN Endpoint */
UCHAR bulkOutEP; /* Device Bulk OUT Endpoint */
#ifdef AUDIO_TST
UCHAR InbInterval;
UCHAR OutbInterval;
#endif
}USBH_STRG_DEVICE_PARA;
/* Parameter passed from CallBack routine to cycle handler */
typedef struct tagUSBH_STRG_CALLBACK_PARA{
USHORT flag; /* CallBack flag */
ULONG event; /* Message(USBH_STRG_DeviceCallback, USBH_STRG_ResetCallback) */
ULONG param1; /* Connected device USB address(USBH_STRG_DeviceCallback) */
void *pParam; /* Pointer to connected device descriptor(USBH_STRG_DeviceCallback) */
USBH_USBD_URB *pUrb; /* Pointer to executed URB(USBH_STRG_CBWCompCallback, USBH_STRG_DATACompCallback */
/* USBH_STRG_CSWCompCallback, USBH_STRG_CtlCompCallback) */
}USBH_STRG_CALLBACK_PARA;
/* Handler internal state preservation parameter of cycle */
typedef struct tagUSBH_STRG_CYCHDR_PARA{
#ifdef AUDIO_TST
UCHAR IsoDeviceNo; /* DeviceNo executing Control forwarding(for Isochronous device) */
#endif
UCHAR deviceNo; /* DeviceNo executing Control forwarding */
USHORT ctlPass; /* Passing that forwards Control */
UCHAR resetRecovPass ; /* Passing ResetRecovery's operating */
USBH_USBD_DEVCTL *pDeviceCtl; /* Device Descriptor of connected device */
UCHAR tranData; /* Pointer of Control transfer data */
}USBH_STRG_CYCHDR_PARA;
/*****************************************
* Function prototype declaration
*****************************************/
extern LONG USBH_STRG_IFReset( void );
extern LONG USBH_STRG_IFDeviceReset( USHORT deviceNo );
extern LONG USBH_STRG_IFGetDeviceList( UCHAR *pList );
extern LONG USBH_STRG_IFGetDeviceParameter( USHORT deviceNo, UCHAR *pDataPtr);
extern LONG USBH_STRG_IFCommandOut( USHORT deviceNo, UCHAR transferMode, DRIVEACCESS_FUNCCMDPARA *pCmdBlock, CALLBACK_PROC pfnNotifyIntrqComp );
extern LONG USBH_STRG_IFCommandStop( USHORT deviceNo);
extern LONG USBH_STRG_IFDMAStartA( USHORT deviceNo, UCHAR transferMode, DRIVEACCESS_FUNCTRANPARA *pTranPara, CALLBACK_PROC pfnNotifyDMAComp );
extern LONG USBH_STRG_IFDMAStop( USHORT deviceNo );
extern LONG USBH_STRG_IFGetStatus( USHORT deviceNo, ULONG *pStatus, ULONG *pTransferSize, UCHAR *pSenseData );
extern LONG USBH_STRG_IFSyncCommand( USHORT deviceNo, UCHAR transferMode, DRIVEACCESS_FUNCCMDPARA *pCmdBlock, DRIVEACCESS_FUNCTRANPARA *pTranPara, ULONG *pStatus, UCHAR *pSenseData );
extern LONG USBH_STRG_IFRegisterCBRDMAComp( USHORT deviceNo, CALLBACK_PROC pfnNotifyDMAComp );
extern LONG USBH_STRG_IFUnregisterCBRDMAComp( USHORT deviceNo, CALLBACK_PROC pfnNotifyDMAComp );
extern LONG USBH_STRG_IFRegisterCBRIntrqComp( USHORT deviceNo, CALLBACK_PROC pfnNotifyIntrqComp );
extern LONG USBH_STRG_IFUnregisterCBRIntrqComp( USHORT deviceNo, CALLBACK_PROC pfnNotifyIntrqComp );
extern void USBH_STRG_tmrhdr( VP_INT exinf );
extern void USBH_STRGEventTask( VP_INT exinf );
#ifdef __cplusplus
}
#endif /* cplusplus */
#endif /* USBH_STRG_IF_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -