HID类的报表描述符中的USAGE MAX,USAGE MIN使用注意

news2024/12/27 13:14:15

发现问题由来

准备自己做一个自定义键盘,先小测试一下经典键盘的26字母,设置了从A到H。在实际传输给电脑数据中,把传送数据第一个按钮是0x04,以为输出A,谁知道居然输出D .
下面一段简单的HID报表描述符共对电脑发送4个字节,含义就是,把第一个字节做为为输出A到H字符的数值(同一时刻只能发送其中一个字符对应的数据)。剩余的三个字节数据暂时没用。

    0x05, 0x01,                    // USAGE_PAGE (Consumer Devices)
    0x09, 0x06,                    // USAGE (Consumer Control)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x19, 0x00,                    //   USAGE_MINIMUM (Keyboard a and A)
    0x29, 0x0b,                    //   USAGE_MAXIMUM (Keyboard h and H)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x03,                    //   REPORT_COUNT (3)
    0x81, 0x11,                    //   INPUT (Cnst,Ary,Abs,NLin)
    0xc0                           // END_COLLECTION 

在这里插入图片描述

分析原因

usage min和max设置了该usage page下的功能按键的范围,上面是04~0B,所以发送给电脑的第一字节是表示4到12的字符,但按照上面的意思,把04做为范围最小值对应01,但若把范围定为00最小,那么给电脑发送04就是A,这么说起来好像很难说清楚。还是看下图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《深入浅出多模态》(八)多模态经典模型:MiniGPT4

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

CATIA CAA 二次开发 -- 获取当前会话编辑的CATIPLMComponent

1、先获取当前激活的编辑器 CATFrmEditor* pEditor CATFrmEditor::GetCurrentEditor();if (pEditor nullptr)return S_FALSE; 关于方法【GetCurrentEditor】的解释如下图所示。 2、通过【CATPLMComponentInterfacesServices】去获取当前编辑器的根。 CATPLMComponentInterf…

UE 开发---- Ios ipa 安装包安装到IPhone手机上

由于最近 我在使用ue 开发手机软件 打包成为 Ios ipa 安装包时 安装到手机上遇到的问题 准备: 1、一部 Ios 手机 2、首先下载爱思助手爱思助手官网_苹果助手_苹果刷机助手_苹果越狱助手 (i4.cn) 我下载的Windows端 电脑连接上Ios手机时 是这样的 我们打开工…

【Qt】Qt窗口 | QDialog 对话框

文章目录 一. 对话框二. 对话框的分类1. 非模态对话框2. 模态对话框3. 混合属性对话框 三. 自定义对话框1. 代码实现2. ui文件实现 四. 内置对话框1. QMessageBox 消息对话框2. QColorDialog 颜色对话框3. QFileDialog 文件对话框4. QFontDialog 字体对话框5. QInputDialog 输入…

配置 昇腾 Ascend C/C++ 开发环境

配置 昇腾 Ascend C/C 开发环境 flyfish 这里以Orange Pi Ai Pro 为例 先说如何配置MindStudio,然后再说如何查看Orange Pi Ai Pro的一些信息 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板,其搭载了昇腾 AI 处理器。Linux 桌面…

100行代码实现自己的RAG知识库

背景 由于日常工作需要对接各种第三方合作方,对接过程中的文档繁多、沟通不及时、问题排查繁琐以及工作具有重复性等问题愈发明显。合作方遇到对接问题需要提工单经门户网站–>产品部门接口人–>开发人员问题排查/修复–>产品部门接口人–>合作方收到回…

公链大变局:ETH老态龙钟,SOL势如破竹

今年年初,比特币现货ETF的通过引发了大量资金涌入加密市场,比特币价格一度突破前高,市场一片繁荣。然而,这一波行情却并未如预期般延续到以太坊。相反,在8月初,以太坊(ETH)价格近乎腰…

C语言基础⑨——指针

一、指针的引入 int —— 4位;float —— 4位;double —— 8位;short —— 2位;long —— 8位; 为函数修改实参提供支撑;为动态内存管理提供支持;为动态数据结构提供支持;为内存访问…

MT6761 快充同步

MT6761 是反激式电源的高性能60V同步整流器。MT6761兼容各种反激转换器类型。支持 DCM、CCM 和准谐振模式。MT6761集成了一个60V功率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。V SW <V TH-ON 时&#xff0c;MT6761内部 MOSFET 导通。V SW >V TH-OFF …

【AI 绘画】模型转换与快速生图(基于diffusers)

AI 绘画- 模型转换与快速生图&#xff08;基于diffusers&#xff09; 1. 本章介绍 本次主要展示一下不同框架内文生图模型转换&#xff0c;以及快速生成图片的方法。 SDXL文生图 2. sdxl_lightning基本原理 模型基本原理介绍如下 利用蒸馏方法获取小参数模型。首先&#x…

三、前后端分离通用权限系统(3)

&#x1f33b;&#x1f33b;目录 一、角色管理1.1、测试 controller 层1.2、整合 Swagger21.2.1、Swagger 介绍1.2.2、集成 knife4j1.2.2.1 添加依赖1.2.2.2 添加 knife4j 配置类1.2.2.3 Controller 层添加注解1.2.2.4、测试 1.3、定义统一返回结果对象1.3.1、定义统一返回结果…

备战秋招60天算法挑战,Day21

题目链接&#xff1a; https://leetcode.cn/problems/number-of-1-bits/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1ir421M7XU/ LeetCode 191.位1的个数 题目描述 编写一个函数&#xff0c;输入是一个无符号整数 &#xff08;以二进制串的形式&#xff09;&am…

C语言 ——— 学习并使用calloc和realloc函数

目录 calloc函数的功能 学习并使用calloc函数​编辑 realloc函数的功能 学习并使用realloc函数​编辑 calloc函数的功能 calloc函数的功能和malloc函数的功能类似&#xff0c;于malloc函数的区别只在于calloc函数会再返回地址之前把申请的空间的每个字节初始化为全0 C语言…

tweens运动详解

linear 线性匀速运动效果Sine.easeIn 正弦曲线的缓动(sin(t))/ 从0开始加速的缓动,也就是先慢后快Sine.easeOut 正弦曲线的缓动(sin(t))/ 减速到0的缓动,也就是先快后慢Sine.easeInOut 正弦曲线的缓动(sin(t))/ 前半段从0开始加速,后半段减速到0的缓动Quad.easeIn 二次…

c语言基础-------指针变量和变量指针

在 C 语言中,“变量指针”和“指针变量”这两个术语虽然经常交替使用,但它们的侧重点有所不同。 指针变量 “指针变量”是指其值为内存地址的变量。指针变量的类型定义了它所指向的数据类型,例如 int * 是一个指向整型数据的指针变量。 以下是一个指针变量的例子: int v…

数据埋点系列 16| 数据可视化高级技巧:从洞察到视觉故事

数据可视化是将复杂数据转化为直观、易懂的视觉表现的艺术和科学。本文将探讨一些高级的数据可视化技巧&#xff0c;帮助您创建更具吸引力和洞察力的数据展示。 目录 1. 高级图表类型1.1 桑基图&#xff08;Sankey Diagram&#xff09;1.2 树状图&#xff08;Treemap&#xf…

3、目标定位(视觉测距)

目标定位的目的&#xff1a;获取物品相对于视觉模块的三维坐标&#xff0c;并将其转换为物品相对于机械臂坐标原点的三维坐标。 要获取物品三维坐标&#xff0c;则首先要测量物品距离摄像头的距离&#xff0c;又因为摄像头安装在机械臂末端上方&#xff0c;所以获取物品相对于摄…

基于springboot的高校学生服务平台的设计与实现--附源码91686

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

目录 一、LeetCode 235. 二叉搜索树的最近公共祖先思路&#xff1a;C代码 二、LeetCode 701.二叉搜索树中的插入操作思路C代码 三、LeetCode 450.删除二叉搜索树中的节点思路C代码 总结 一、LeetCode 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;LeetCode 235. 二叉搜…

C语言:for、while、do-while循环语句

目录 前言 一、while循环 1.1 while语句的执行流程 1.2 while循环的实践 1.3 while循环中的break和continue 1.3.1 break 1.3.2 continue 二、for循环 2.1 语法形式 2.2 for循环的执行流程 2.3 for循环的实践 2.4 for循环中的break和continue 2.4.1 break 2.4.2 …