博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32 USB HID报告描述符分析
阅读量:4087 次
发布时间:2019-05-25

本文共 2491 字,大约阅读时间需要 8 分钟。

USB HID报告描述符分析

芯片:STM32F407VE

编译器:KEIL5

作者:SY

日期:2017-7-21 15:19:46

简介

报告描述符是HID设备使用的描述符,主机通过解析从机上传的报告描述符,才能知道从机上传的报告代表什么含义。从机主要上传2份数据,一个是报告描述符,一个是报告。

解析单个数据

  • 一般使用键值对的方式表示:Usage(Usage Page:Usage ID)

  • 使用HID Descriptor Tool我们可以快速制作HID报告描述符,

    举个例子:0x05, 0x01, // USAGE_PAGE (Generic Desktop)

    分两部分解析:

    • 第一部分0x05,主要使用手册Device Class Definition for Human Interface Devices (HID)

    翻到p24 5.3 Generic Item Format ,将一个字节分为三部分:

    7-4bTag,参考p45

    3-2pType,参考p36

含义
0 Main
1 Global
2 Local
3 Reserved

1-0bSize

含义
0 0 bytes
1 1 bytes
2 2 bytes
3 4 bytes

那么05h == 0000 0101就表示Usage Page Global 1Bytes数据,1Bytes表示后面跟着的数据部分为1个字节。

  • 第二部分为0x01,参考Universal Serial Bus HID Usage Table.pdfp14,表示General Desktop Control
  • 其他数据皆可按照这种方法分析。

解析整个报告

使用HID Descriptor Tool产生如下鼠标报告:

char ReportDescriptor[52] = {    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)    0x09, 0x02,                    // USAGE (Mouse)    0xa1, 0x01,                    // COLLECTION (Application)    0x09, 0x01,                    //   USAGE (Pointer)    0xa1, 0x00,                    //   COLLECTION (Physical)    0x05, 0x09,                    //     USAGE_PAGE (Button)    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)    0x95, 0x03,                    //     REPORT_COUNT (3)    0x75, 0x01,                    //     REPORT_SIZE (1)    0x81, 0x02,                    //     INPUT (Data,Var,Abs)    0x95, 0x01,                    //     REPORT_COUNT (1)    0x75, 0x05,                    //     REPORT_SIZE (5)    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)    0x09, 0x30,                    //     USAGE (X)    0x09, 0x31,                    //     USAGE (Y)    0x09, 0x38,                    //     USAGE (Wheel)    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)    0x75, 0x08,                    //     REPORT_SIZE (8)    0x95, 0x03,                    //     REPORT_COUNT (3)    0x81, 0x06,                    //     INPUT (Data,Var,Rel)    0xc0,                          //     END_COLLECTION    0xc0                           // END_COLLECTION};

含义很明确:

​ 先定义鼠标的3个按键,解释他的数值范围。再定义鼠标的移动坐标和滚轮。这样,主机拿到这个报告一一解析出来就知道报告的含义了。

参考

[HID Descriptor Tool]( Descriptor Tool)

转载地址:http://lnzii.baihongyu.com/

你可能感兴趣的文章
Flutter 全局监听路由堆栈变化
查看>>
Android 混合Flutter之产物集成方式
查看>>
Flutter混合开发二-FlutterBoost使用介绍
查看>>
Flutter 混合开发框架模式探索
查看>>
Flutter 核心原理与混合开发模式
查看>>
Flutter Boost的router管理
查看>>
Android Flutter混合编译
查看>>
微信小程序 Audio API
查看>>
[React Native]react-native-scrollable-tab-view(进阶篇)
查看>>
Vue全家桶+Mint-Ui打造高仿QQMusic,搭配详细说明
查看>>
React Native for Android 发布独立的安装包
查看>>
React Native应用部署/热更新-CodePush最新集成总结(新)
查看>>
react-native-wechat
查看>>
基于云信的react-native聊天系统
查看>>
网易云音乐移动客户端Vue.js
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
JavaScript专题之数组去重
查看>>