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

📄 usb.h

📁 用keilC写的鼠标驱动程序
💻 H
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途
      我的邮箱:computer-lov@tom.com
        欢迎访问我的blog:  http://computer00.21ic.org

USB.H  file

作者:Computer-lov
建立日期: 2007.03.20
修改日期: 2007.03.22
版本:V1.1
版权所有,盗版必究。
Copyright(C) Computer-lov 2007-2017
All rights reserved            
*******************************************************************/

#ifndef __USB_H__
#define __USB_H__

#include "my_type.h"
#include "usbmidi.h"

// 定义标准的描述符类型,也就是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  //中断传输



//定义标准的设备描述符结构

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;


//定义Class-specific AC Interface Descriptor
typedef struct _CS_INTERFACE_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //接口描述符的字节数大小
 uint8 bDescriptorType;                       //接口描述符的类型编号
 uint8 bDescriptorSubtype;                    //该接口的子类
 uint16 bcdADC;                                //CS协议的版本号
 uint16 wTotalLength;                         //CS描述符的总长度
 uint8 bInCollection;                         //流接口数目
 uint8 baInterfaceNr[NUMBER_OF_MIDI_INTERFACE];   //属于该音频接口的MIDI流接口
}
CS_INTERFACE_DESCRIPTOR_STRUCT, * pCS_INTERFACE_DESCRIPTOR_STRUCT;


//Class-specific MS Interface Descriptor
typedef struct _CS_MS_INTERFACE_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //接口描述符的字节数大小
 uint8 bDescriptorType;                       //接口描述符的类型编号
 uint8 bDescriptorSubtype;                    //该接口的子类
 uint16 bcdADC;                                //CS协议的版本号
 uint16 wTotalLength;                         //CS描述符的总长度
}
CS_MS_INTERFACE_DESCRIPTOR_STRUCT, * pCS_MS_INTERFACE_DESCRIPTOR_STRUCT;

//MIDI IN Jack Descriptor
typedef struct _MIDI_IN_JACK_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //MIDI输入插口描述符的字节数大小
 uint8 bDescriptorType;                       //插口描述符的类型编号
 uint8 bDescriptorSubtype;                    //该插口的子类
 uint8 bJackType;                             //插口类型
 uint8 bJackID;                               //插口的ID
 uint8 iJack;                                 //
}
MIDI_IN_JACK_DESCRIPTOR_STRUCT, * pMIDI_IN_JACK_DESCRIPTOR_STRUCT;

//MIDI OUT Jack Descriptor
typedef struct _MIDI_OUT_JACK_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //MIDI输出插口描述符的字节数大小
 uint8 bDescriptorType;                       //插口描述符的类型编号
 uint8 bDescriptorSubtype;                    //该插口的子类
 uint8 bJackType;                             //插口类型
 uint8 bJackID;                               //插口的ID
 uint8 bNrInputPins;                          //该插口输入引脚的数目
 uint8 BaSourceID[NUMBER_OF_ENTITY];          //该引脚连接到的实体ID号
 uint8 BaSourcePin[NUMBER_OF_ENTITY];         //该输入引脚所连接到的实体的编号
 uint8 iJack;                                 //
}
MIDI_OUT_JACK_DESCRIPTOR_STRUCT, * pMIDI_OUT_JACK_DESCRIPTOR_STRUCT;

//定义标准的端点描述符结构

typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
 uint8 bLength;                                //端点描述符字节数大小
 uint8 bDescriptorType;                       //端点描述符类型编号
 uint8 bEndpointAddress;                      //端点地址及输入输出属性
 uint8 bmAttributes;                          //端点的传输类型属性
 uint16 wMaxPacketSize;                        //端点收、发的最大包大小
 uint8 bInterval;                             //主机查询端点的时间间隔
 uint8 bRefresh;
 uint8 bSynchAddress;
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;

//定义类特殊标准的端点描述符结构

typedef struct _CS_ENDPOINT_DESCRIPTOR_STRUCT
{
 uint8 bLength;                                //端点描述符字节数大小
 uint8 bDescriptorType;                       //端点描述符类型编号
 uint8 bDescriptorSubtype;                    //子类
 uint8 bNumEmbMIDIJack;                       //MIDI Enbedded插口数 
 uint8 BaAssocJackID[NUMBER_OF_JACK];                       //Embedded MIDI 插口的ID
}
CS_ENDPOINT_DESCRIPTOR_STRUCT, * pCS_ENDPOINT_DESCRIPTOR_STRUCT;


//一个字符串描述符结构

typedef struct _STRING_DESCRIPTOR_STRUCT
{
 uint8 bLength;                                //字符串描述符的字节数大小
 uint8 bDescriptorType;                        //字符串描述符类型编号
 uint8 SomeDesriptor[36];                      //UNICODE编码的字符串
}
STRING_DESCRIPTOR_STRUCT, * pSTRING_DESCRIPTOR_STRUCT;


//标准设备请求命令结构

typedef struct _REQUESTCMD
{
 uint8 bmRequestType;                         //请求命令类型
 uint8 bRequest;                              //请求命令代码
 uint16 wValue;                                //命令信息
 uint16 wIndex;                                //索引信息
 uint16 wLength;                               //传输数据大小
}
REQUESTCMD, * pREQUESTCMD;
   

//setup_packet缓冲区

#define MAX_CONTROL_DATA_SIZE 16

typedef struct _control_data_buff
{
 REQUESTCMD DeviceRequest;                    //USB设备请求
 uint16 wLength;
 uint16 wCount;
 uint8 * pData;
 uint8 dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_DATA_BUFF;
 

#endif

⌨️ 快捷键说明

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