⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mass_protocol.h

📁 TELECHIPS MP3解决方案UMS实现源代码
💻 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 + -