USB描述符完全解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USB设备描述符完全解析
//======================================================= =====================
// 文件名: USBDESC.C
// 用途: USB描述符
// 作者: shenfei5
// 时间: 2007.2.3
// 版本: V1.10
//======================================================= =====================
#include
#include "usb.h" // USB模块
#include "hid.h" // HID设备
#include "usbcfg.h" // 配置USB
#include "usbdesc.h" // USB描述符
//
// HID报文描述符
//
const U8 HID_ReportDescriptor[] = {
HID_UsagePageVendor(0x00), // 报告页版本: 0X06 0X00 0XFF
HID_Usage(0x01), // 用途页: 0X05 0X01
// 如果是MOUSE,KEY,在这里应该有用法索引
HID_Collection(HID_Application), // 用法集合开始: 0XA1 0X01
HID_UsagePage(HID_USAGE_PAGE_BUTTON), // BUTTON用法页
HID_UsageMin(1), // 用法最小值
HID_UsageMax(3), // 用法最小值
HID_LogicalMin(0), // 逻辑最小值
HID_LogicalMax(1), // 逻辑最大值
HID_ReportCount(3), // 报告计数(3)
HID_ReportSize(1), // 报告页大小(1)
HID_Input(HID_Data | HID_Variable | HID_Absolute), // 输入(2)
HID_ReportCount(1), // 报告计数值
HID_ReportSize(5), // 报告大小
HID_Input(HID_Constant), // 输入1
HID_UsagePage(HID_USAGE_PAGE_LED), // LED用法页
HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR), // 用法页
HID_LogicalMin(0), // 用法最小值
HID_LogicalMax(1), // 用法最大值
HID_ReportCount(8), // 报告计数值
HID_ReportSize(1), // 报告大小(1)
HID_Output(HID_Data | HID_Variable | HID_Absolute), // 输出(2)
HID_EndCollection, // 报告结束
};
// HID报告描述符大小
const U16 HID_ReportDescSize = sizeof(HID_ReportDescriptor);
//
// USB 设备描述符
//
const U8 USB_DeviceDescriptor[] = {
USB_DEVICE_DESC_SIZE, // bLength 描述符长度= 12H
USB_DEVICE_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型= 1H
WBVAL(0x0110), // 1.10 // bcdUSB 设备版本号= 你发行的版本的号
0x00, // bDeviceClass 类型代码= 由USB指定
0x00, // bDeviceSubClass 子类型代码= 由USB分配
0x00, // bDeviceProtocol 协议代码= 由USB分配
USB_MAX_PACKET0, // bMaxPacketSize0 端点0的容量= 64(只能是8,16,32,64) WBVAL(0x1977), // idVendor 供应商ID(同USB协会分配,我就自己分配一份)
WBVAL(0X1006), // idProduct 产品ID(由厂商分配)
WBVAL(0x0100), // 1.00 // bcdDevice ( 设备出厂编号)
0x04, // iManufacturer ( 厂商描述字符串索引, 用来在字符串索引中查找字符串)
0x20, // iProduct ( 产品描述字符串索引, 用来在字符串索引中查找字符串)
0x42, // iSerialNumber ( 设备序列号描述字符串索引, 用来在字符串索引中查找字符串)0x01 // bNumConfigurations (配置字符串的个数)
};
//
// USB 描述符集
// 所有描述符(配置描述符, 接口描述符, 端点描述符, USB类描述符, 设备描述符
//
const U8 USB_ConfigDescriptor[] = {
// 配置描述符
USB_CONFIGUARTION_DESC_SIZE, // bLength 描述符长度= 9H
USB_CONFIGURATION_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型= 2H WBVAL( // wTotalLength
USB_CONFIGUARTION_DESC_SIZE + // 返回描述符串集的长度, 配置描述字符长度
USB_INTERFACE_DESC_SIZE + // 接口描述字符长度
HID_DESC_SIZE + // HID描述字符长度
USB_ENDPOINT_DESC_SIZE // 端点描述字符长度