📄 mass_protocol.h
字号:
#ifndef __USBSTOR_H__
#define __USBSTOR_H__
#include "scsi.h"
#include "GENLIB.H"
/* */
#define FALSE 0
#define TRUE 1
#define NON_MASS_VID 0x0419
#define NON_MASS_PID 0xa001
//#define NON_MASS_VID 0x04E8
//#define NON_MASS_PID 0x1003
#define MASS_VID 0x0419
#define MASS_PID 0xa002
#define STR_INDEX_LANGUAGE 0x00
#define STR_INDEX_MANUFACTURER 0x01
#define STR_INDEX_PRODUCT 0x02
#define STR_INDEX_SERIALNUMBER 0x03
#define STR_INDEX_CONFIGURATION 0x04
#define STR_INDEX_INTERFACE 0x05
#pragma packed on
typedef struct _tag_usb_DEVICE_DESCRIPTOR
{
unsigned char bLength; // Descriptor size
unsigned char bDescriptorType; // Descriptor Type
unsigned int bcdUSB;
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
unsigned char bMaxPacketSize0;
unsigned int idVendor;
unsigned int idProduct;
unsigned int bcdDevice;
unsigned char iManufacturer;
unsigned char iProduct;
unsigned char iSerialNumber;
unsigned char bNumConfigurations;
} USB_DEVICE_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_CONFIGURATION_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned int wTotalLength;
unsigned char bNumInterfaces;
unsigned char bConfigurationValue;
unsigned char iConfiguration;
unsigned char bmAttributes;
unsigned char MaxPower;
} USB_CONFIGURATION_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_INTERFACE_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bInterfaceNumber;
unsigned char bAlternateSetting;
unsigned char bNumEndpoints;
unsigned char bInterfaceClass;
unsigned char bInterfaceSubClass;
unsigned char bInterfaceProtocol;
unsigned char iInterface;
} USB_INTERFACE_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_ENDPOINT_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bEndpointAddress;
unsigned char bmAttributes;
unsigned int wMaxPacketSize;
unsigned char bInterval;
} USB_ENDPOINT_DESCRIPTOR;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////
#pragma packed on
typedef struct _tag_usb_STRING_LANGUAGE_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short int ulanguageID[2];
} USB_STRING_LANGUAGE_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_STRING_INTERFACE_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char Interface[22];
} USB_STRING_INTERFACE_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_STRING_CONFIGURATION_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char Configuration[16];
} USB_STRING_CONFIGURATION_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_STRING_SERIALNUMBER_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char SerialNum[24];
} USB_STRING_SERIALNUMBER_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_STRING_PRODUCT_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char Product[36];
} USB_STRING_PRODUCT_DESCRIPTOR;
#pragma packed off
#pragma packed on
typedef struct _tag_usb_STRING_MANUFACTURER_DESCRIPTOR
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char Manufacturer[26];
} USB_STRING_MANUFACTURER_DESCRIPTOR;
#pragma packed off
/////////////////////////////////////////////////////////////////////////////
#pragma packed on
typedef struct _tag_DEVIDE_REQUEST
{
unsigned char bmReqType;
unsigned char bReqItem;
unsigned char wValue[2];
unsigned char wIndex[2];
unsigned char wLength[2];
} USB_DEVICE_REQUEST;
#pragma packed off
/* bmRequestType */
#define USB_RECIPIENT_MASK 0x1f
#define USB_RECIPIENT_DEVICE 0x00
#define USB_RECIPIENT_INTERFACE 0x01
#define USB_RECIPIENT_ENDPOINT 0x02
#define USB_REQUEST_TYPE_MASK 0x60
#define USB_STANDARD_REQUEST 0x00
#define USB_CLASS_REQUEST 0x20
#define USB_VENDOR_REQUEST 0x40
/* standard */
#define USB_REQUEST_GET_STATUS 0x00
#define USB_REQUEST_CLEAR_FEATURE 0x01
#define USB_REQUEST_SET_FEATURE 0x03
#define USB_REQUEST_SET_ADDRESS 0x05
#define USB_REQUEST_GET_DESCRIPTOR 0x06
#define USB_REQUEST_SET_DESCRIPTOR 0x07
#define USB_REQUEST_GET_CONFIGURATION 0x08
#define USB_REQUEST_SET_CONFIGURATION 0x09
#define USB_REQUEST_GET_INTERFACE 0x0a
#define USB_REQUEST_SET_INTERFACE 0x0b
#define USB_REQUEST_SYNC_FRAME 0x0c
/* class request */
#define USB_REQUEST_RESET_ATA 0xff
#define USB_REQUEST_GET_MAXLUN 0xfe
#define USB_DIRECTION_MASK 0x80
#define USB_HOST_TO_DEVICE 0x00
#define USB_DEVICE_TO_HOST 0x80
/* wValueLo */
#define STR_INDEX_LANGUAGE 0x00
#define STR_INDEX_MANUFACTURER 0x01
#define STR_INDEX_PRODUCT 0x02
#define STR_INDEX_SERIALNUMBER 0x03
#define STR_INDEX_CONFIGURATION 0x04
#define STR_INDEX_INTERFACE 0x05
/****************/
#define USB_STANDARD_DESCRIPTOR_TYPE 0x00
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
#define USB_STRING_DESCRIPTOR_TYPE 0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
#define USB_POWER_DESCRIPTOR_TYPE 0x06
#define USB_CLASS_DESCRIPTOR_TYPE 0x20
#define USB_HID_DESCRIPTOR_TYPE 0x21
#define USB_REPORT_DESCRIPTOR_TYPE 0x22
#define USB_PHYSICAL_DESCRIPTOR_TYPE 0x23
#define USB_ENDPOINT_TYPE_MASK 0x03
#define USB_ENDPOINT_TYPE_CONTROL 0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
#define USB_ENDPOINT_TYPE_BULK 0x02
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
#define USB_CLASS_CODE_MASSSTORAGE_CLASS_DEVICE 0x08
#define USB_SUBCLASS_CODE_RBC 0x01
#define USB_SUBCLASS_CODE_SFF8020I 0x02
#define USB_SUBCLASS_CODE_QIC157 0x03
#define USB_SUBCLASS_CODE_UFI 0x04
#define USB_SUBCLASS_CODE_SFF8070I 0x05
#define USB_SUBCLASS_CODE_SCSI 0x06
#define USB_PROTOCOL_CODE_CBI0 0x00
#define USB_PROTOCOL_CODE_CBI1 0x01
#define USB_PROTOCOL_CODE_BULK 0x50
////////////////////////////////////////////////////////////////////
#define CBW_SIGNATURE 0x55534243L // "USBC"
#define CSW_SIGNATURE 0x55534253L // "USBS"
#define CSW_STATUS_PASSED 0x00
#define CSW_STATUS_FAILED 0x01
#define CSW_STATUS_PHASE_ERROR 0x02
// CBW
#pragma packed on
typedef struct _tag_usb_COMMAND_BLOCK_WRAPPER
{
unsigned long dwCBWSignature;
unsigned long dwCBWTag;
unsigned long dwCBWDataTransferLength;
unsigned char bmCBWFlags;
unsigned char bCBWLun;
unsigned char bCBWLength;
unsigned char CBWCB[16];
} USB_COMMAND_BLOCK_WRAPPER;
#pragma packed off
// CSW
#pragma packed on
typedef struct _tag_usb_COMMAND_STATUS_WRAPPER
{
unsigned long dwCSWSignature;
unsigned long dwCSWTag;
unsigned long dwCSWDataResidue;
unsigned char bCSWStatus;
} USB_COMMAND_STATUS_WRAPPER;
#pragma packed off
#ifndef UMSC_BOOL_DEFINED
#define UMSC_BOOL_DEFINED
typedef int UMSC_BOOL;
#endif
extern code unsigned char g_NON_MASS_DeviceDescriptor[];
extern CONST_OR_CODE USB_DEVICE_DESCRIPTOR g_MASS_DeviceDescriptor;
extern CONST_OR_CODE USB_STRING_LANGUAGE_DESCRIPTOR g_strLanguage;
extern CONST_OR_CODE USB_STRING_MANUFACTURER_DESCRIPTOR g_strManufacturer;
extern CONST_OR_CODE USB_STRING_PRODUCT_DESCRIPTOR g_strProduct;
extern CONST_OR_CODE USB_STRING_SERIALNUMBER_DESCRIPTOR g_strSerialNum;
#if defined(__cplusplus)
extern "C" {
#endif
/* usbmass.c */
void TCC730_USBMASS_Init ( void );
void TCC730_USBMASS_Handler ( void );
UMSC_BOOL TCC730_USBMASS_CheckCommand ( void );
/* mmcscsi.c */
void TCC730_MMCSCSI_SetCommProc ( TCC730_MMCSCSI_RECVPROC lpRecvProc, TCC730_MMCSCSI_SENDPROC lpSendProc );
void TCC730_MMCSCSI_InitCache ( void );
void TCC730_MMCSCSI_Idle ( unsigned int lun );
UMSC_BOOL TCC730_MMCSCSI_ReloadMedia ( unsigned int lun );
UMSC_BOOL TCC730_MMCSCSI_FlushCache ( void );
void TCC730_MMCSCSI_SetSenseKey ( unsigned int lun, int nSenseKey, unsigned int wASC );
void TCC730_MMCSCSI_GetSenseKey ( unsigned int lun, int* lpnSenseKey, unsigned int* lpwASC );
UMSC_BOOL TCC730_MMCSCSI_ParseCommand ( unsigned int lun, CONST_FAKE void* lpCmd, unsigned long dwLen, unsigned long* lpdwTransfered );
#if defined(__cplusplus)
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -