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

📄 pdiusbd12.h

📁 HID 设备测试程序
💻 H
字号:
/*===============================================================================//
//== 文 件 名:PDIUSBD12.h
//== author	 :gnsusn
//== 说    明:USB 描述符,控制命令等信息
//== 修改日志:2008.8.13 创建文件
//== 
//===============================================================================*/

#ifndef __PDIUSBD12_H__
#define __PDIUSBD12_H__


//== PDIUSBD12.h
//== PDIUSBD12的命令和数据定义

//=================================================
//== 端点号定义
#define CONTROL_POINT_OUT			0x00
#define CONTROL_POINT_IN			0x80
#define POINT_1_OUT					0x01
#define POINT_1_IN					0x81
#define MAIN_POINT_OUT				0x02
#define MAIN_POINT_IN				0x82
//=================================================


//=================================================
//== 初始化命令
#define Set_Address					0xD0	//== 设置地址/使能,此命令单片机向D12写入一字节
#define Set_Endpoint_Enable			0xD8	//== 设置端点使能,此命令单片机向D12写入一字节,使能端点0
#define Set_Mode					0xF3	//== 设置模式,此命令单片机向D12写入两字节
#define Set_DMA						0xFB	//== 设置DMA,写/读一字节
//=================================================


//=================================================
//== 数据流命令
#define Read_Interrupt_Register		0xF4	//== 读中断状态寄存器,读2字节
#define Select_EndPoint				0x00	//== 选择端点,读一字节(可选)
#define Select_Endpoint_C_OUT		0x00	//== 选择,控制输出端点(端点号:0;端点索引:0)
#define Select_Endpoint_C_IN		0x01	//== 选择,控制输入端点(端点号:0;端点索引:1)
#define Select_Endpoint_1_OUT		0x02	//== 选择,端点号1的输出端点,端点索引号:2
#define Select_Endpoint_1_IN		0x03	//== 选择,端点号1的输入端点,端点索引号:3
#define Select_Endpoint_2_OUT		0x04	//== 选择,端点号2的输出端点,端点索引号:4
#define Select_Endpoint_2_IN		0x05	//== 选择,端点号2的输入端点,端点索引号:5
#define Read_Last_Status			0x40	//== 读最后处理状态,读一字节
#define Read_Last_Status_C_OUT		0x40	//== 读控制输出端点(端点号:0;端点索引:0)的状态
#define Read_Last_Status_C_IN		0x41	//== 读控制输入端点(端点号:0;端点索引:1)的状态
#define Read_Last_Status_1_OUT		0x42	//== 读端点号1的输出端点,端点索引号:2 的状态
#define Read_Last_Status_1_IN		0x43	//== 读端点号1的输入端点,端点索引号:3 的状态
#define Read_Last_Status_2_OUT		0x44	//== 读端点号2的输出端点,端点索引号:4 的状态
#define Read_Last_Status_2_IN		0x45	//== 读端点号2的输入端点,端点索引号:5 的状态
#define Read_Buffer					0xF0	//== 读选择的端点的缓冲区,读出n个字节
#define Write_Buffer				0xF0	//== 写选择的端点的缓冲区,写入n个字节
#define Set_Endpoint_Status_C_OUT	0x40	//== 设置控制输出端点(端点号:0;端点索引:0)状态
#define Set_Endpoint_Status_C_IN	0x41	//== 设置控制输入端点(端点号:0;端点索引:1)状态
#define Set_Endpoint_Status_1_OUT	0x42	//== 设置端点号1的输出端点,端点索引号:2 状态
#define Set_Endpoint_Status_1_IN	0x43	//== 设置端点号1的输入端点,端点索引号:3 状态
#define Set_Endpoint_Status_2_OUT	0x44	//== 设置端点号2的输出端点,端点索引号:4 状态
#define Set_Endpoint_Status_2_IN	0x45	//== 设置端点号2的输入端点,端点索引号:5 状态
#define Ack_Setup					0xF1	//== 应答设置,命令接受者是选择的端点, 没有操作数据(应答setup)
#define Clear_Buffer				0xF2	//== 缓冲区清零,命令接受者是选择的端点, 没有操作数据
#define Validate_Buffer				0xFA	//== 使缓冲区有效,命令接受者是选择的端点, 没有操作数据
#define Read_ChipID					0xFD	//== 读取芯片版本号
//=================================================

//=================================================
//==普通命令
#define Send_Resume					0xF6	//== 发送恢复
#define Read_Current_Frame_Number	0xF5	//== 读当前帧数目,读出1或2个字节
//=================================================

//=================================================
//== 一些数据的定义
#define Endpoint_Enable				0x01
#define Endpoint_Disenable			0x00
#define Address_Enable				0x80

#define Mode0_and_no_connect		0x04
#define Mode1_and_no_connect		0x44
#define Mode2_and_no_connect		0x84
#define Mode3_and_no_connect		0xC4
#define Mode0_and_connect			0x14
#define Mode1_and_connect			0x54
#define Mode2_and_connect			0x94
#define Mode3_and_connect			0xD4
#define Mode_Set_secend_byte		0x8B

#define NO_LazyClock				0x02
#define Run_Clock					0x04
#define Interrupt_Model				0x08
#define Soft_Connect				0x10
#define Non_ISO_Mode				0x00 		//== 非同步
#define ISO_OUT_Mode				0x40		//== 同步输出模式
#define ISO_IN_Mode					0x80		//== 同步输入模式
#define ISO_IO_Mode					0xc0		//== 同步输入/输出模式
		
#define ENDPOINT_NUMBER				0x04		
#define D12_STALL					0x02		//== 端点停止
//=================================================

//=================================================
#define MAX_ENDPOINTS				0x03		//== 最大逻辑端点号

#define EP0_TX_FIFO_SIZE			16
#define EP0_RX_FIFO_SIZE			16
#define EP0_PACKET_SIZE				16			//== 端点0的最大包大小

#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_CLASS_CODE_TEST_CLASS_DEVICE                    0xDC
#define USB_SUBCLASS_CODE_TEST_CLASS_D12                    0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12                    0xB0

//=================================================
typedef union _D12_Interrupt_Register		//== 中断寄存器
{
	unsigned char Register[2];
	unsigned short int_Register;
	struct 
	{
		unsigned char control_out_port  :1;
		unsigned char control_in_port   :1;
		unsigned char port_out_1        :1;
		unsigned char port_in_1         :1;
		unsigned char main_out_port     :1;
		unsigned char main_in_port      :1;
		unsigned char bus_reset         :1;
		unsigned char suspend_change    :1;
		unsigned char DMA_EOT           :1;
		unsigned char not_use           :7;
	}Interrupt;
}D12_INTERRUPT_REGISTER;
//=================================================

//=================================================
typedef union _D12_Last_Status					//== 端点最后处理状态
{
	unsigned char Register;
	struct
	{
		unsigned char successful          :1;
		unsigned char error_code          :4;
		unsigned char setup_packet        :1;
		unsigned char data_1              :1;
		unsigned char prestatus_not_read  :1;
	}Status;
}D12_LAST_STATUS;


#endif

⌨️ 快捷键说明

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