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

📄 descriptor.h

📁 vC++读写HID_USB设备,包含hid_usb的固件程序和上位机程序
💻 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 + -