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

📄 datatype.h

📁 一个linux下的usb接口源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************
**	Module Name:		DataType.h			    **
**	Author:			Zhangquan				    **
**	Version:		1.0				    **
**	CreateDate:		2001-05-18			    **
**	Description:		Definitions Dataype		    **
**	Remark:							    **
**	Revision History:	2001-05-18			    **
**********************************************************************/


#ifndef __DATATYPE__
#define __DATATYPE__
//#include <linux/interrupt.h>
//#include <linux/kernel.h>
//#include <linux/types.h>
//#include <asm/segment.h>
//#include <linux/tqueue.h>
//#include <linux/sched.h>

typedef unsigned char UCHAR;
typedef char SCHAR;
typedef unsigned short UWORD;
typedef short SWORD;
typedef unsigned long ULONG;
typedef long SLONG;
typedef unsigned int UINT;
typedef int INT;

/*TPBulk*/

// USB Class Request Functions and Public Functions
/* Host Device Disagreement Matrix*/
enum _HOST_DEV_DISAGREE
{
	CASEOK = 0,
	CASE1,
	CASE2,
	CASE3,
	CASE4,
	CASE5,
	CASE6,
	CASE7,
	CASE8,
	CASE9,
	CASE10,
	CASE11,
	CASE12,
	CASE13,
	CASECBW
};

typedef union _D12FLAGS 
{
	struct _D12FSM_FLAGS
	{	
	UCHAR bus_reset		: 1;
	UCHAR suspend		: 1;
	UCHAR At_IRQL1		: 1;
	UCHAR configuration	: 1;
	UCHAR remote_wakeup	: 1;
	UCHAR Reserved00	: 3;
	UCHAR DCP_state		: 3; // Default Control Pipe FSM state
	UCHAR DCP_IOorMEM	: 1; // Access Data via DCP from/to IO data port or Memory
	UCHAR BOT_state		: 4; // Default Bulk Out Pipe FSM state
	UCHAR BOT_IOorMEM	: 1; // Store Data via Bulk Out Pipe to IO port(ATA dev) or Memory
	UCHAR verbose		: 1; // Debug info
	UCHAR timer		: 1;
	UCHAR Reserved20	: 6;
	UCHAR Reserved30;
	} bits;
	ULONG value;
} D12FLAGS;

/*TPBulk*/
/*Protocol*/
#define MAX_CONTROLDATA_SIZE				0x08
typedef struct _device_request
{
	UCHAR bmRequestType;
	UCHAR bRequest;
	UWORD wValue;
	UWORD wIndex;
	UWORD wLength;
} DEVICE_REQUEST;
typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;
	ULONG wLength;	//UWORD to ULONG	Modified by Mike Chan
	ULONG wCount;	//UWORD to ULONG	Modified by Mike Chan
	UCHAR *pData;
	UCHAR dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;

/*Protocol*/

/*PDIUSBD12*/
typedef union _epp_flags
{
	struct _flags
	{
		UCHAR timer               	: 1;
		//UCHAR bus_reset           	: 1;
		//UCHAR suspend             	: 1;
		//UCHAR setup_packet  	  	: 1;
		UCHAR remote_wakeup		   	: 1;
		UCHAR in_isr		      	: 1;
		UCHAR control_state			: 2;
		
		UCHAR configuration			: 1;
		UCHAR verbose				: 1;
		UCHAR do_ep1_rxdone			: 1; //////ep1_rxdone
		UCHAR setup_dma				: 1;
		UCHAR dma_state      		: 2;
		UCHAR dma_disable			: 1;
		UCHAR set_d12				: 1;
	} bits;
	UWORD value;
} EPPFLAGS;
/*PDIUSBD12*/


/*define begin*/
#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
// Endpoint direction bit, stored in address
#define USB_DATA_TRANSMIT_DEVICE_TO_HOST		0x80
// USB defined Feature selectors
#define USB_FEATURE_ENDPOINT_STALL          0x0000
#define USB_FEATURE_REMOTE_WAKEUP           0x0001
// USB defined request codes see chapter 9 of the USB 1.1 specifcation for more information.
// These are the correct values based on the USB 1.1 specification
#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

#define FALSE							0x00
#define TRUE							(!FALSE)
#define CSW_GOOD					0x00
#define CSW_FAIL						0x01
#define CSW_PHASE_ERROR			0x02
#define CBW_SIGNATURE				0x43425355
#define CSW_SIGNATURE				0x55534253//53425355
#define CBW_FLAG_IN					0x80
#define MAX_CDBLEN					0x10
// Normal FSM for Set Command
//  IDLE -> SETUP[IRQL-1] -> DataOut[IRQL_1] -> RequestProc[IRQL_0] -> Status Stage
// Normal FSM for Get Command
//  IDLE -> SETUP[IRQL-1] -> RequestProc[IRQL_0] -> DataIn[IRQL-1]-> Status Stage
#define USBFSM_IDLE					0x00
#define USBFSM_XMIT					0x01
#define USBFSM_RCV					0x02
#define USBFSM_INPROCESS			0x03
#define USBFSM_STATUS				0x04
#define USBFSM_ABORT				0x05
#define USBFSM_INPROCESS2			0x06
#define USBFSM_STALL				0x07
// FSM for Default Control Pipe
#define USBFSM4DCP_IDLE             USBFSM_IDLE
#define USBFSM4DCP_DATAIN           USBFSM_XMIT
#define USBFSM4DCP_DATAOUT          USBFSM_RCV
#define USBFSM4DCP_REQUESTPROC      USBFSM_INPROCESS2
#define USBFSM4DCP_STALL            USBFSM_STALL
#define USBFSM4DCP_HANDSHAKE        USBFSM_STATUS
#define USBFSM4DCP_SETUPPROC        USBFSM_INPROCESS
// FSM for Bulk-Only Transfer
#define USBFSM4BOT_STALL            USBFSM_STALL
#define USBFSM4BOT_IDLE             USBFSM_IDLE
#define USBFSM4BOT_DATAIN           USBFSM_XMIT
#define USBFSM4BOT_DATAOUT          USBFSM_RCV
#define USBFSM4BOT_CBWPROC          USBFSM_INPROCESS
//#define USBFSM4BOT_CSWPROC          USBFSM_INPROCESS2
#define USBFSM4BOT_CSW              USBFSM_STATUS
#define USBFSM4BOT_CBW              USBFSM_ABORT
#define USBFSM4BOT_DATAOVER              0x08
//added ?????? 0x10X
#define USB_CLASS_REQUEST_USBSTOR_RESET			0xff
#define USB_CLASS_REQUEST_USBSTOR_GETMAXLUN		0xfe

#define ATAPI_FORMATUNIT                 0x04
#define ATAPI_READFORMATCAPA             0x23
#define ATAPI_RAEDCAPACITY                0x25
#define ATAPI_INQUIRE                   0x12
#define ATAPI_REQUESTSENSE                0x03
//************************************************************************
#define ATAPI_MODESELECT15      	          0x15
#define ATAPI_MODESELECT55	          0x55
#define ATAPI_MODESENSE1A                 0x1a
#define ATAPI_MODESELECT5A      	          0x5A
#define ATAPI_TESTUNIT      	          0x00
#define ATAPI_REZEROUNITPACKET                 0x01
#define ATAPI_SEEKPACKET0B      		          0x0B
#define ATAPI_SEEKPACKET2B                  0x2B
#define ATAPI_SENDDIAGPACKET                 0x1D
#define ATAPI_STARTSTOPUNIT      		          0x1B
#define ATAPI_READ                 	0x08
#define ATAPI_READ10                 	0x28
#define ATAPI_WRITE10                 	0x2A
#define ATAPI_WRITE             	0x0A
#define	ATAPI_MODESENSE5A	0x5A
#define ATAPI_TESTUNIT		0x00
#define ATAPI_NONSENSE		0x06	//Command 0x06:Non-sense

#define MAX_ENDPOINTS						0x03
#define EP0_TX_FIFO_SIZE					16
#define EP0_RX_FIFO_SIZE					16
#define EP0_PACKET_SIZE						16
#define EP1_TX_FIFO_SIZE					16
#define EP1_RX_FIFO_SIZE					16
#define EP1_PACKET_SIZE						16
#define EP2_TX_FIFO_SIZE					64
#define EP2_RX_FIFO_SIZE					64
#define EP2_PACKET_SIZE						64
#define USB_IDLE							0
#define USB_TRANSMIT						1
#define USB_RECEIVE							2
// Mask
#define USB_RECIPIENT						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
#define USB_REQUEST_MASK					0x0f
#define DEVICE_ADDRESS_MASK					0x7f
#define NUM_ENDPOINTS						0x02
#define CONFIG_DESCRIPTOR_LENGTH			sizeof(USB_CONFIGURATION_DESCRIPTOR) + sizeof(USB_INTERFACE_DESCRIPTOR) + (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
#define SWAP(x)		((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))

// PDIUSBD12 Command
// 		Initialization Commands
#define D12_CMD_SET_ADDRESS_ENABLE		0xd0
#define D12_CMD_SET_ENDPOINT_ENABLE		0xd8
#define D12_CMD_SET_MODE				0xf3
#define D12_CMD_SET_DMA					0xfb
//		Data Flow Commands
#define D12_CMD_READ_INTERRUPT_REGISTER	0xf4
#define D12_CMD_SELECT_ENDPOINT			0x00
#define D12_CMD_READ_STATUS				0x40
#define D12_CMD_READ_BUFFER				0xf0
#define D12_CMD_WRITE_BUFFER			0xf0
#define D12_CMD_SET_STATUS				0x40
#define D12_CMD_ACKNOWLEDGE_SETUP		0xf1
#define D12_CMD_CLEAR_BUFFER			0xf2
#define D12_CMD_VALIDATE_BUFFER			0xfa
//		General Commands
#define D12_CMD_SEND_RESUME				0xf6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -