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

📄 d12.h

📁 一个是混合鼠标键盘功能的HID设备使用d12
💻 H
字号:
#ifndef	_D12_H_
#define _D12_H_


//全局标志


typedef union _event_flags
{
	struct _flags
	{
		unsigned bus_reset      :1; //总线复位
		unsigned bus_suspend    :1; //总结挂起改变
		unsigned setup_packet   :1; //收到setup包
		unsigned remote_wakeup  :1; //远程唤醒标志位(未使用)
		unsigned usb_isr        :1; //USB中断标志位
	
		unsigned control_state  :2; //控制端点状态
		
		unsigned configuration  :1; //配置
		unsigned command        :1; //
		unsigned ep1_rxdone     :1; //端点1收到数据标志位
		unsigned ep2_rxdone     :1; //端点2收到数据标志位
		unsigned ep2_full       :1; //端点2输出双缓冲区满标志位
		
	}bits;
	
	uint16 value;
	
}EVENT_FLAGS;
//标准设备请求
typedef struct _device_request
{
	uint8  bmRequestType;//请求类型
	uint8  bRequest;     //USB请求
	uint16 wValue;       //USB数值
	uint16 wIndex;       //USB请求索引
	uint16 wLength;      //长度
}DEVICE_REQUEST;

//带数据的厂商标准请求
#define MAX_CONTROL_DATA_SIZE 16
typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;
	uint16  wLength;
	uint16  wCount;
	uint8   * pData;
	uint8   dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_XFER;



#define RSTUSB  0x00000400   //P0.10
#define SUSP    0x00002000   //P0.13

//*****************************************************************************
void D12_init(void);
unsigned short D12_read_interrupt_reg(void);
unsigned char D12_read_last_status_reg(unsigned char bEndpoint);

void control_handler(void);
uint16 D12_write_Endpoint(uint8 bEndpoint,uint8 bLenth,const uint8 *buf);
void main_rxdone(void);

void DISABLE(void);
void ENABLE(void);
//*****************************************************************************
#define USB_IDLE       0x00
#define USB_TRANSMIT   0x01
#define USB_RECEIVE    0x02
/*
*********************************************************************************************
*                  	 通用 描述符结构体成员取值宏定义
*********************************************************************************************
*/
//*******************************************************
// USB 设备请求类型掩码 masks 
//*******************************************************
//(1) 接收方: D4...D0 
#define USB_RECIPIENT            (uint8)0x1F
#define USB_RECIPIENT_DEVICE     (uint8)0x00
#define USB_RECIPIENT_INTERFACE  (uint8)0x01
#define USB_RECIPIENT_ENDPOINT   (uint8)0x02

//(2) 类型: D6...D5
#define USB_REQUEST_TYPE_MASK    (uint8)0x60
#define USB_STANDARD_REQUEST     (uint8)0x00
#define USB_CLASS_REQUEST        (uint8)0x20
#define USB_VENDOR_REQUEST       (uint8)0x40

//(3) 数据传输方向: D7
#define DEVICE_ADDRESS_MASK      0x7F

//(4) USB 请求
#define USB_REQUEST_MASK         (uint8)0x1F

//(5) USB端点方向掩码
#define USB_ENDPOINT_DIRECTION_MASK               0x80
#define USB_ENDPOINT_DIRECTION_OUT(addr)          (!((addr) & USB_ENDPOINT_DIRECTION_MASK))
#define USB_ENDPOINT_DIRECTION_IN(addr)           ((addr) & USB_ENDPOINT_DIRECTION_MASK)

//*******************************************************
// USB 设备请求类型
//*******************************************************
#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

//*******************************************************
// 下面为基于USB 1.0规范的正确值
//*******************************************************
#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

/*******************************************************
** USB 特性选择符
********************************************************/
#define USB_FEATURE_ENDPOINT_STALL          0x0000
#define USB_FEATURE_REMOTE_WAKEUP           0x0001
#define USB_FEATURE_POWER_D0                0x0002
#define USB_FEATURE_POWER_D1                0x0003
#define USB_FEATURE_POWER_D2                0x0004
#define USB_FEATURE_POWER_D3                0x0005

#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((uint16)((uint16)d<<8 | i))

/*******************************************************
** USB 配置描述符
********************************************************/
#define USB_CONFIG_POWERED_MASK                   0xc0

#define USB_CONFIG_BUS_POWERED                    0x80
#define USB_CONFIG_SELF_POWERED                   0x40
#define USB_CONFIG_REMOTE_WAKEUP                  0x20

#define BUS_POWERED                           0x80
#define SELF_POWERED                          0x40
#define REMOTE_WAKEUP                         0x20

/*******************************************************
** USB 端点描述符结构体: 端点属性
********************************************************/
#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

/*******************************************************
** USB  设备类
********************************************************/
#define USB_DEVICE_CLASS_RESERVED           0x00
#define USB_DEVICE_CLASS_AUDIO              0x01
#define USB_DEVICE_CLASS_COMMUNICATIONS     0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE    0x03
#define USB_DEVICE_CLASS_MONITOR            0x04
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
#define USB_DEVICE_CLASS_POWER              0x06
#define USB_DEVICE_CLASS_PRINTER            0x07
#define USB_DEVICE_CLASS_STORAGE            0x08
#define USB_DEVICE_CLASS_HUB                0x09
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC    0xFF
//
#define D12_SETUP_PACKET                    0x20


#define MAX_ENDPOINTS				 (uint8)0x03
#define D12_STALL                           0x02

#define CONFIG_DESCRIPTOR_LENGTH            0x29
#define EP0_PACKET_SIZE                		16
//*****************************************************************************

// 定义标准的描述符类型,也就是USB分配的各种描述符的编号,即bDescriptorType 字段的值

#define DEVICE_DESCRIPTOR               0x01  //设备描述符
#define CONFIGURATION_DESCRIPTOR        0x02  //配置描述符
#define STRING_DESCRIPTOR               0x03  //字符串描述符
#define INTERFACE_DESCRIPTOR            0x04  //接口描述符
#define ENDPOINT_DESCRIPTOR             0x05  //端点描述符
#define HID_DESCRIPTOR                  0x21  //HID描述符
#define REPORT_DESCRIPTOR               0x22  //报告描述符
#define PHYSICAL_DESCRIPTOR             0x23  //物理描述符

//定义标准的USB请求命令,即USB分配的各种请求的编号,即bRequest字段的值

#define GET_STATUS                      0x00  //获取状态请求
#define CLEAR_FEATURE                   0x01  //清除特性请求
#define SET_FEATURE                     0x03  //设置特性请求
#define SET_ADDRESS                     0x05  //设置地址请求
#define GET_DESCRIPTOR                  0x06  //获取描述符请求
#define SET_DESCRIPTOR                  0x07  //设置描述符请求
#define GET_CONFIGURATION               0x08  //获取配置请求
#define SET_CONFIGURATION               0x09  //设置配置请求
#define GET_INTERFACE                   0x0A  //获取接口请求
#define SET_INTERFACE                   0x0B  //设置接口请求
#define SYNCH_FRAME                     0x0C  //同步帧请求

//定义USB HID特定命令请求
#define GET_REPORT                      0x01  //获取报告
#define GET_IDLE                        0x02  //获取空闲状态
#define GET_PROTOCOL                    0x03  //获取协议
#define SET_REPORT                      0x09  //设置报告
#define SET_IDLE                        0x0A  //设置空闲
#define SET_PROTOCOL                    0x0B  //设置协议

//定义特性选择器

#define ENDPOINT_HALT                   0x00  //端点的禁止特性
#define DEVICE_REMOTE_WAKEUP            0x01  //设备的远程唤醒特性


//使用的端点数

//#define Number_Endpoint               0x05  //端点数量为5


//定义的端点类型
#define ENDPOINT_TYPE_CONTROL           0x00  //控制传输
#define ENDPOINT_TYPE_ISOCHRONOUS       0x01  //同步传输
#define ENDPOINT_TYPE_BULK              0x02  //批量传输
#define ENDPOINT_TYPE_INTERRUPT         0x03  //中断传输


#define D12_INT_ENDP0OUT		0x01
#define D12_INT_ENDP0IN			0x02
#define D12_INT_ENDP1OUT		0x04
#define D12_INT_ENDP1IN			0x08
#define D12_INT_ENDP2OUT		0x10
#define D12_INT_ENDP2IN			0x20
#define D12_INT_BUSRESET		0x40
#define D12_INT_SUSPENDCHANGE	0x80
#define D12_INT_EOT				0x0100
#endif

⌨️ 快捷键说明

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