//============================================================================
// 文件名: USBDESC.C
// 用 途: USB描述符
// 作 者: shenfei5
// 时 间: 2007.2.3
// 版 本: V1.10
//============================================================================

#include <RTL.h>

#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 // 端点描述字符长度
),
0x01, // bNumInterfaces
// 支持接口数 
0x01, // bConfigurationValue 
// 配置值
0x00, // iConfiguration
// 配置字符串描述索相
// 0: 不使用
// 如果使用,必须在字符串描述符中添加相应的字符串. 
USB_CONFIG_BUS_POWERED | // bmAttributes 设置的供电特性
USB_CONFIG_REMOTE_WAKEUP, // 总线供电
// 有唤醒功能
USB_CONFIG_POWER_MA(100), // bMaxPower 设备从供电总线吸取的电流值
//// 当前配置为 100MA 

// 接口类描述符
// 接口 0 ,位置 0 , HID类
// Interface 0, Alternate Setting 0, HID Class 
USB_INTERFACE_DESC_SIZE, // bLength 描述符长度 = 9H 
USB_INTERFACE_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型 = 4H 
0x00, // bInterfaceNumber ( 接口编号 )
0x00, // bAlternateSetting ( 可代替位置 )
0x01, // bNumEndpoints 使用端点(不含端点0)
USB_DEVICE_CLASS_HUMAN_INTERFACE, // bInterfaceClass 
// USB 类
// USB_DEVICE_CLASS_HUMAN_INTERFACE == 3
// HID类 
HID_SUBCLASS_NONE, // bInterfaceSubClass 
// 子类,没有.
HID_PROTOCOL_NONE, // bInterfaceProtocol
// 协议代码 
0x5C, // iInterface
// 字符串描述符索引,要使用该字符串必须在字符串描述符里添加相应的字符串 
// HID类描述符 
// HID_DESC_OFFSET = 0x0012
// HID类描述符的偏移量 
HID_DESC_SIZE, // bLength 描述符长度 = 
HID_HID_DESCRIPTOR_TYPE, // bDescriptorType HID描述符类型 = 21H
WBVAL(0x0100), // 1.00 // bcdHID HID版本号
0x00, // bCountryCode 国家代码
0x01, // bNumDescriptors 支持其它类描述符个数
HID_REPORT_DESCRIPTOR_TYPE, // bDescriptorType 从属类描述类型 = 报告描述符22H
WBVAL(HID_REPORT_DESC_SIZE), // wDescriptorLength 从属类描述的长度
// Endpoint, HID Interrupt In 
// HID 端点描述描,端点1输入
USB_ENDPOINT_DESC_SIZE, // bLength 端点描述符长度
USB_ENDPOINT_DESCRIPTOR_TYPE, // bDescriptorType 端点描述符类型 = 5H
USB_ENDPOINT_IN(1), // bEndpointAddress 逻辑端点号 BIT.7 = DIR
// BIT.0..3 端点号
// 这个值是用来把逻辑端点号换成物理端点号
USB_ENDPOINT_TYPE_INTERRUPT, // bmAttributes 端点属性 = 中断
WBVAL(0x0004), // wMaxPacketSize 端点容量
10, // 10ms // bInterval 
// 传输间隔时间.只对中断端点有效

// Terminator 
0 // bLength 
// 结果码.
};

//
// USB 字符串描述符 (可选) 
// 字符描述符结构:
// {
// 字符串描述符 1 大小
// 描述符类型 = 字符串描述符(0X03)
// 描述符内容.
// ... ...
// 字符串描述符n 1 大小
// 描述符类型n = 字符串描述符(0X03)
// 描述符内容n.
// }
// 
const U8 USB_StringDescriptor[] = {
// 字符串索引: 0x00: 
// 字符串用途: 语言代码

0x04, // 描述符长度 bLength 
USB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符) 
//WBVAL(0x0409), // 使用 English 语言// 描述符内容 wLANGID 
WBVAL(0x0804), // 试一下中文的行不行,改了之后,在硬件属性里看不到,在客户端可以看到,不明原因.
// 字符串索引: 0x04:
// 字符串用途: 生产产商字符描述符 
0x1C, // 描述符长度 bLength 
USB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)
0xc1,0,
0xd6,0,
0xca,0,
0xa4,0,
0xb7,0,
0xe1,0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
// 字符串索引: 0x20
// 字符串用途: 产品名称
0x22, // 描述符长度 bLength 
USB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)
0xc1,0,
0xd6,0,
0xca,0,
0xa4,0,
0xb7,0,
0xe1,0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
' ',0,
'H',0,
'I',0,
'D',0,
// 字符串索引: 0x42
// 字符串用途: 产品系列号
0x1A, // 描述符长度 bLength 
USB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)
'T',0,
'E',0,
'S',0,
'T',0,
'0',0,
'0',0,
'0',0,
'0',0,
'0',0,
'0',0,
'0',0,
'0',0,
// 字符串索引号 0x5C
// 接口 Interface 0, 位置 Alternate Setting 0 
0x08, // 描述符长度 bLength 
USB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)
'H',0,
'I',0,
'D',0,
};

USB描述符(转)的更多相关文章

  1. USB描述符概述

    在USB总线接口协议中,规定了一些标准的USB描述符,如表所示. 对于USB设备来说,有些USB描述符是必需的,例如: 设备描述符 配置描述符 字符串描述符 接口描述符 端点描述符 其余一些描述符并非 ...

  2. USB 描述符

    标准的USB设备有5种USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符,端点描述符. // Standard Device Descriptor typedef struct { u8 ...

  3. USB描述符解析-->枚举.

    枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H ...

  4. usb描述符简述(二)

    title: usb描述符简述 tags: linux date: 2018/12/18/ 18:25:23 toc: true --- usb描述符简述 转载自cnblog 具体描述符 https: ...

  5. USB学习笔记连载(十二):USB描述符

    USB设备是端口,接口,配置的集合,USB协议是以各种USB描述符来表征USB设备的功能.计算机通过这些描述符来获得USB设备的功能. USB描述符包括: USB标准设备描述符,USB集线器描述符.H ...

  6. 2.6 USB摄像头驱动之USB描述符

    学习目标:分析USB摄像头驱动的描述符: 一.USB设备描述符 在usb设备驱动分析那一节,也用到了usb描述符. usb描述符可分为: USB设备描述符(usb_device_descriptor) ...

  7. USB描述符【整理】

    USB描述符 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送GetDescriptor请求,USB设备在收到这个请求之后,会将USB描述符信息返回给USB主机,USB主 ...

  8. 自己总结的USB数据结构及其描述符

    背景: USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结. 正文: 1. USB通信的最基本单位是“包”.如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数.每类 ...

  9. usb驱动开发7之接口描述符

    前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h ...

随机推荐

  1. CPA-计划

    平时周一到周五上班晚上8点到12点,周末6-8个小时,然后没有节假日,一次差不多可以3.4科 审计 看150页  3小时,看完,做题 2天时间,5门课程,12小时考试,没想到能完整地挺过来.感觉税法战 ...

  2. TPO5-2 The Origin of Pacific Island People

    Contrary to the arguments of some (that much of the pacific was settled by Polynesians accidentally ...

  3. ios 获取app版本号

    let infoDictionary = Bundle.main.infoDictionary!let appversion = infoDictionary["CFBundleShortV ...

  4. java.lang.IllegalArgumentException: Cannot format given Object as a Date

    在进行日期转换的时候遇到了这个问题, 非常的恼火 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ...

  5. Educational Codeforces Round 68 差G

    Educational Codeforces Round 68 E 题意:有 n 个线段,每个都是平行 x 或者 y 轴,只有互相垂直的两线段才会相交.问形成了多少个矩形. \(n \le 5000, ...

  6. 八、linux-mysql的mysql主从复制原理和实战

    1.mysql主从复制介绍 mysql支持单向.双向.链式级联.实时.异步复制,在复制过程中,一台服务器充当主服务器(Master),而一个或多个其它服务器充当从服务器(Slave). 复制:单向同步 ...

  7. TCP与UDP 笔记

    本文整理自:<图解TCP/IP 第5版>作者:[日] 竹下隆史,[日] 村山公保,[日] 荒井透,[日] 苅田幸雄 著译者:乌尼日其其格出版时间:2013-07 TCP提供可靠的通信传输, ...

  8. [LC] 234. Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  9. python-django项目基础-haystack&whoosh&jieba_20191124

    全文检索框架和搜索引擎的安装和配置: 安装全文检索框架,pip install django-haystack, 安装搜索引擎,pip install whoosh settings里面配置 1,注册 ...

  10. Javascript面试题&知识点汇总

    问题&答案 什么时候 a ==1 && a== 2 && a==3 为 true? var a = { i: 1, toString: function () ...