📄 descriptor.h
字号:
#include "mytype.h"
#include "hiduse.h"
#ifndef _descriptor_h_
#define _descriptor_h_
//定义标准的设备描述符结构
typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
uint8 blength; //设备描述符的字节数大小
uint8 bDescriptorType; //设备描述符类型编号
uint16 bcdUSB; //USB版本号
uint8 bDeviceClass; //USB分配的设备类代码
uint8 bDeviceSubClass; //USB分配的子类代码
uint8 bDeviceProtocol; //USB分配的设备协议代码
uint8 bMaxPacketSize0; //端点0的最大包大小
uint16 idVendor; //厂商编号
uint16 idProduct; //产品编号
uint16 bcdDevice; //设备出厂编号
uint8 iManufacturer; //设备厂商字符串的索引
uint8 iProduct; //描述产品字符串的索引
uint8 iSerialNumber; //描述设备序列号字符串的索引
uint8 bNumConfigurations; //可能的配置数量
}DEVICE_DESCRIPTOR_STRUCT, *pDEVICE_DESCRIPTOR_STRUCT;
//定义标准的配置描述符结构
typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
uint8 bLength; //配置描述符的字节数大小
uint8 bDescriptorType; //配置描述符类型编号
uint16 wTotalLength; //此配置返回的所有数据大小
uint8 bNumInterfaces; //此配置所支持的接口数量
uint8 bConfigurationValue; //Set_Configuration命令所需要的参数值
uint8 iConfiguration; //描述该配置的字符串的索引值
uint8 bmAttributes; //供电模式的选择
uint8 MaxPower; //设备从总线提取的最大电流
}CONFIGURATION_DESCRIPTOR_STRUCT, *pCONFIGURATION_DESCRIPTOR_STRUCT;
//定义标准的接口描述符结构
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
uint8 bLength; //接口描述符的字节数大小
uint8 bDescriptorType; //接口描述符的类型编号
uint8 bInterfaceNumber; //该接口的编号
uint8 bAlternateSetting; //备用的接口描述符编号
uint8 bNumEndpoints; //该接口使用的端点数,不包括端点0
uint8 bInterfaceClass; //接口类型
uint8 bInterfaceSubClass; //接口子类型
uint8 bInterfaceProtocol; //接口遵循的协议
uint8 iInterface; //描述该接口的字符串索引值
}INTERFACE_DESCRIPTOR_STRUCT, *pINTERFACE_DESCRIPTOR_STRUCT;
//定义标准的端点描述符结构
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
uint8 bLength; //端点描述符字节数大小
uint8 bDescriptorType; //端点描述符类型编号
uint8 bEndpointAddress; //端点地址及输入输出属性
uint8 bmAttributes; //端点的传输类型属性
uint16 wMaxPacketSize; //端点收、发的最大包大小
uint8 bInterval; //主机查询端点的时间间隔
}ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;
//HID描述符中的下级描述符号
typedef struct _HID_SUB_DESCRIPTOR_STRUCT
{
uint8 bDescriptorType; //下级描述符的类型编号
uint16 wDescriptorLength; //下级描述符的长度
}HID_SUB_DESCRIPTOR_STRUCT,*pHID_SUB_DESCRIPTOR_STRUCT;
#define NUM_SUB_DESCRIPTORS 1
//定义HID描述符结构
typedef struct _HID_DESCRIPTOR_STRUCT
{
uint8 bLength;
uint8 bDescriptorType;
uint16 bcdHID;
uint8 bCountryCode;
uint8 bNumDescriptors;
HID_SUB_DESCRIPTOR_STRUCT HidSubDescriptors[NUM_SUB_DESCRIPTORS];
}HID_DESCRIPTOR_STRUCT,*pHID_DESCRIPTOR_STRUCT;
//一个字符串描述符结构
typedef struct _STRING_DESCRIPTOR_STRUCT
{
uint8 bLength; //字符串描述符的字节数大小
uint8 bDescriptorType; //字符串描述符类型编号
uint8 StringDesriptor[36]; //UNICODE编码的字符串
}STRING_DESCRIPTOR_STRUCT, *pSTRING_DESCRIPTOR_STRUCT;
#define ENDPOINT_NUMBER 2
//定义配置,接口,端点等描述符结构体
typedef struct _USB_DESCRIPTOR_STRUCT
{
CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
INTERFACE_DESCRIPTOR_STRUCT interface_descriptor;
HID_DESCRIPTOR_STRUCT hid_descriptor;
ENDPOINT_DESCRIPTOR_STRUCT endpoint_descriptor[ENDPOINT_NUMBER];
}USB_DESCRIPTOR_STRUCT, *pUSB_DESCRIPTOR_STRUCT;
//*******************************************************
// USB 设备请求类型掩码 masks
//*******************************************************
//(1) 接收方: D4...D0
#define USB_RECIPIENT 0x1F
#define USB_RECIPIENT_DEVICE 0x00
#define USB_RECIPIENT_INTERFACE 0x01
#define USB_RECIPIENT_ENDPOINT 0x02
//(2) 类型: D6...D5
#define USB_REQUEST_TYPE 0x60
#define USB_STANDARD_REQUEST 0x00
#define USB_CLASS_REQUEST 0x20
#define USB_VENDOR_REQUEST 0x40
//(3) 数据传输方向: D7
#define USB_ENDPOINT_DIRECTION_MASK 0x80
//地址掩码
#define DEVICE_ADDRESS_MASK 0x7F
//(4) USB 请求
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -