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

📄 usbmain.h

📁 记录仪
💻 H
字号:
#define MAX_ENDPOINTS      (unsigned char)0x3
#define EP0_PACKET_SIZE    16
#define EP1_PACKET_SIZE    16
#define EP2_PACKET_SIZE    64


#define USB_IDLE           0
#define USB_TRANSMIT       1
#define USB_RECEIVE        2

#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc
#define USB_SUBCLASS_CODE_TEST_CLASS_D12                    0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12                    0xB0


#define DISABLE		EX1=0
#define ENABLE		EX1=1


#define D12_SETUPPACKET			0x20

#define D12_BUFFER0FULL			0x20
#define D12_BUFFER1FULL			0x40

#define D12_FULLEMPTY			0x01

#define D12_STALL			0x02


#define D12_COMMAND  0x8101
#define D12_DATA  0x8100
/*
   //*************************************************************************
   // masks
   //*************************************************************************
*/

#define USB_RECIPIENT            (unsigned char)0x1F
#define USB_RECIPIENT_DEVICE     (unsigned char)0x00
#define USB_RECIPIENT_INTERFACE  (unsigned char)0x01
#define USB_RECIPIENT_ENDPOINT   (unsigned char)0x02

#define USB_REQUEST_TYPE_MASK    (unsigned char)0x60
#define USB_STANDARD_REQUEST     (unsigned char)0x00
//#define USB_CLASS_REQUEST        (unsigned char)0x20
#define USB_VENDOR_REQUEST       (unsigned char)0x40

#define USB_REQUEST_MASK         (unsigned char)0x0F

#define DEVICE_ADDRESS_MASK      0x7F

/*
   //*************************************************************************
   // macros
   //*************************************************************************
*/
#define SWAP(x)   ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))

#define MSB(x)    (((x) >> 8) & 0xFF)
#define LSB(x)    ((x) & 0xFF)

//#define FALSE   0
//#define TRUE    (!FALSE)

/*
   //*************************************************************************
   // basic typedefs
   //*************************************************************************
*/
typedef unsigned char   UCHAR;
typedef unsigned short  USHORT;
typedef unsigned long   ULONG;
typedef unsigned char   BOOL;

//void control_handler();
/*
   //*************************************************************************
   // structure and union definitions
   //*************************************************************************
*/

typedef union _epp_flags
{
	struct _flags
	{
		unsigned char timer               	: 1;
		unsigned char bus_reset           	: 1;
		unsigned char suspend             	: 1;
		unsigned char setup_packet  	  	: 1;
		unsigned char remote_wakeup		   	: 1;
		unsigned char in_isr		      	: 1;
		unsigned char control_state			: 1;

		unsigned char configuration			: 1;
		unsigned char verbose				: 2;
		unsigned char ep1_rxdone			: 1;
                unsigned char ep2_rxdone                        : 1;
                unsigned char ep2_txdone                        : 1;
		unsigned char dma_state      		: 2;
		unsigned char power_down			: 1; // Smart Board
	} bits;
	unsigned short value;
} EPPFLAGS;
typedef struct _device_request
{
	unsigned char bmRequestType ;
	unsigned char bRequest;
	unsigned short wValue;
	unsigned short wIndex;
	unsigned short wLength;
} DEVICE_REQUEST;




#define MAX_CONTROLDATA_SIZE	8

typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;
	unsigned short wLength;
	unsigned short wCount;
	unsigned char * pData;
	unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;

/*
typedef struct _IO_REQUEST {
	unsigned short	uAddressL;
	unsigned char	bAddressH;
	unsigned short	uSize;
	unsigned char	bCommand;
} IO_REQUEST, *PIO_REQUEST;
*/

/*
   //*************************************************************************
   // USB utility functions
   //*************************************************************************
*/
/*
extern void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv);
extern void D12_SetDMA(unsigned char bMode);
extern unsigned char D12_GetDMA(void);
extern unsigned char D12_ReadEndpointStatus(unsigned char bEndp);
extern void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled);
extern void single_transmit(unsigned char * pData, unsigned char len);
extern void stall_ep0(void);
void D12_SendResume(void);
*/
//#define IN_TOKEN_DMA 	1
//#define OUT_TOKEN_DMA 	0

#define DMA_BUFFER_SIZE		256

#define DMA_IDLE	0
#define DMA_RUNNING	1
#define DMA_PENDING	2

#define SETUP_DMA_REQUEST 		0x0471
#define GET_FIRMWARE_VERSION    0x0472
//#define GET_SET_TWAIN_REQUEST   0x0473
#define GET_BUFFER_SIZE		    0x0474


//*********************************************************************
//				D12
//*********************************************************************
void outportcmd(unsigned char value);
void outportdata(unsigned char value);
unsigned char inportb(unsigned int Addr);
void D12_SetEndpointEnable(unsigned char bEnable);

void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable);
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv);
void D12_SetDMA(unsigned char bMode);
unsigned char D12_GetDMA(void);
unsigned int D12_ReadInterruptRegister(void);
unsigned char D12_SelectEndpoint(unsigned char bEndp);
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp);
unsigned char D12_ReadEndpointStatus(unsigned char bEndp);
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled);
void D12_SendResume(void);

unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);
unsigned char D12_WriteEndpoint(unsigned char  endp, unsigned char  len, unsigned char * buf) ;
//unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);
void D12_AcknowledgeEndpoint(unsigned char endp);
//unsigned short D12_ReadChipID(void);


unsigned char D12_WriteEndpoint5(unsigned char len);

//*********************************************************************88
//					CHAP9
//*************************************************************************8


void get_status(void);
void clear_feature(void);
void set_feature(void);
void set_address(void);
void get_descriptor(void);
void get_configuration(void);
void set_configuration(void);
void get_interface(void);
void set_interface(void);
void reserved(void);
void read_write_register(void);

 void single_transmit(unsigned char * buf, unsigned char len);
 void code_transmit(unsigned char code * pRomData, unsigned short len);
 void stall_ep0(void);
 void init_unconfig(void);
 void init_config(void);

#define NUM_ENDPOINTS	4

#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))


//*********************************************************************88
//				ISR
//*************************************************************************8

void fn_usb_isr();
extern void bus_reset(void);

extern void ep0_txdone(void);
extern void ep0_rxdone(void);

extern void ep1_txdone(void);
extern void ep1_rxdone(void);

extern void main_txdone(void);
extern void main_rxdone(void);

//extern void dma_eot(void);

//unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
//unsigned char idata EpBuf[EP2_PACKET_SIZE];
//IO_REQUEST idata ioRequest;
//unsigned char ioSize, ioCount;

//unsigned long ClockTicks = 0;
//unsigned char xdata MainEpBuf[256] _at_ 0x0200;
//unsigned char xdata MainEpBuf2[256] _at_ 0x0300;

// unsigned char xdata MainEpBuf5[256] _at_ 0x0600;
// unsigned char xdata MainEpBuf6[256] _at_ 0x0700;
// unsigned char xdata MainEpBuf7[256] _at_ 0x0800;


 //data control
void unpack(void);
void check_pack(void);


void trsusb_num_rate(unsigned int xiaoshi);
void trsusb_rate(unsigned int xiaoshi);
void trsusb_rate_beg(void);

void trsusb_ydshj(void);
//void trsusb_2daylich(void);
//void trsusb_2dayrate(void);
void trsusb_2dayover(void);
void trsusb_down_time(void);


//计时标记
unsigned long int xdata usbclk_cnt=0;


//error flag






⌨️ 快捷键说明

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