STM32 USB复合设备,USB键盘+自定义HID设备_符合hid标准的用户控制设备是什么-程序员宅基地

技术标签: HID  USB复合设备  USB相关  

上面是我的微信和QQ群,欢迎新朋友的加入。

最近研究USB复合设备

主要是把键盘和电脑音量控制两个东西给合并成一个设备

首先要知道的一点的是,不论是键盘、鼠标、或者这个标准的HID用户控制设备,本质都是HID设备

所以对于这个类型的复合设备,只要端点大小足够,其他没什么变动的,无非是修改下报告描述符

因为都是HID设备,也不需要额外的端点

关于报告描述符,我这不多解释,可以参考https://www.cnblogs.com/AlwaysOnLines/p/4552840.htm

目录

1.HID定义的设备类

2.关于报告ID

3.修改端点大小

4.报告描述符

5.查看设备

6.测试


1.HID定义的设备类

上面是HID定义的一些设备功能

2.关于报告ID

 Report ID放在信息包中报表数据之前,设备可以支持多个相同类型的报表,每一个报表包含不同的数据与其特有的ID。
                        在报表描述符中,Report ID项目作用于其后续所有的项目,直到遇到下一个Report ID为止。如果报表描述符中没有Report ID项目,默认的ID值是0,描述符不能定义一个为0的Report ID,输入报表、输出报表与特征报表可以分享同一个Report ID。
                        在Set_Report和Get_Report请求传输中,主机在设置事务的wValue字段的低字节中指定一个Report ID。在中断传输中如果接口支持一个以上的Report ID,Report ID必须是传送报表中的第一个字节。如果接口只支持数值为0的默认Report ID,此Report ID不应该在中断传输中随着报表一起传送。

3.修改端点大小

#define HID_EPIN_ADDR                 0x81
#define HID_EPIN_SIZE                 0x40
#define HID_EPOUT_ADDR                0x01
#define HID_EPOUT_SIZE                0x40

键盘只有8个字节,但是因为是复合设备,传输的时候要考虑报告ID的数据,会多出一个字节

4.报告描述符

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]  __ALIGN_END =
{
0x05, 0x01,// USAGE_PAGE (Generic Desktop)
0x09, 0x06,// USAGE (Keyboard)
0xa1, 0x01,// COLLECTION (Application)
0x85, 0x01, //Report ID (1)  
0x05, 0x07,// USAGE_PAGE (Keyboard)
0x19, 0xe0,// USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7,// USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00,// LOGICAL_MINIMUM (0)
0x25, 0x01,// LOGICAL_MAXIMUM (1)
0x75, 0x01,// REPORT_SIZE (1)
0x95, 0x08,// REPORT_COUNT (8)
0x81, 0x02,// INPUT (Data,Var,Abs)
0x95, 0x01,// REPORT_COUNT (1)
0x75, 0x08,// REPORT_SIZE (8)
0x81, 0x03,// INPUT (Cnst,Var,Abs)
0x95, 0x05,// REPORT_COUNT (5)
0x75, 0x01,// REPORT_SIZE (1)
0x05, 0x08,// USAGE_PAGE (LEDs)
0x19, 0x01,// USAGE_MINIMUM (Num Lock)
0x29, 0x05,// USAGE_MAXIMUM (Kana)
0x91, 0x02,// OUTPUT (Data,Var,Abs)
0x95, 0x01,// REPORT_COUNT (1)
0x75, 0x03,// REPORT_SIZE (3)
0x91, 0x03,// OUTPUT (Cnst,Var,Abs)
0x95, 0x06,// REPORT_COUNT (6)
0x75, 0x08,// REPORT_SIZE (8)
0x15, 0x00,// LOGICAL_MINIMUM (0)
0x25, 0xFF,// LOGICAL_MAXIMUM (255)
0x05, 0x07,// USAGE_PAGE (Keyboard)
0x19, 0x00,// USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65,// USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00,// INPUT (Data,Ary,Abs)
0xc0,

0x05, 0x0c,  
0x09, 0x01,
0xa1, 0x01,  
0x85, 0x03, //Report ID (1)  
0xa1, 0x00, 
0x09, 0xe9, 
0x09, 0xea, 
0x09, 0xe2,   
0x09, 0xcd,
0x35, 0x00,  
0x45, 0x07, 
0x15, 0x00,
0x25, 0x01,
0x75, 0x01,
0x95, 0x04, 
0x81, 0x02, 
0x75, 0x01,
0x95, 0x04, 
0x81, 0x01, 
0xc0, 
0xc0

}; 

如上是修改之后的报告描述符

5.查看设备

可以看到同时存在了两个设备,一个键盘,一个控制设备

6.测试

键盘功能和音量调节都能使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jun626/article/details/92388148

智能推荐

maven 依赖_complile test runtime provided-程序员宅基地

文章浏览阅读360次。依赖 dependency除了包含,groupId,artifactId,version等基本元素外,还会包含一些其他的元素。[html] view plain copy dependency> groupId>groupId> artifactId>artifactId> version>ve_complile test runtime provided

表单提交后禁用按钮_按钮点击之后禁用成功提交后再可用-程序员宅基地

文章浏览阅读1.8k次。head>meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>title>表单提交后按钮禁用title>script type="text/javascript">function sub() {document.forms[0].elements[0].disabled =true;//docume_按钮点击之后禁用成功提交后再可用

input输入手机号增加空格_html实现手机号空格的css-程序员宅基地

文章浏览阅读3.5k次。input输入手机号增加空格,点击按钮获取手机号时去掉空格。<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>input输入手机号增加空格</title><meta name="viewp_html实现手机号空格的css

20-springCloud-day01-程序员宅基地

文章浏览阅读241次。一. 初识SpringCloud1.1 初识微服架构微服务架构:"微服务”一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到http://martinfowler.com/articles/microservices.html微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间一般通过 HTTP 的 RESTfuLAPI 进行通信协作。被拆分成的每一个小型服

C语言实现斗地主游戏-程序员宅基地

文章浏览阅读1.6k次。我们先来实现主函数部分:#include <windows.h>#include <stdio.h>#include <conio.h>#include <string.h>#include <dos.h>#include <math.h>#include <time.h>#include <stdlib.h>#define CLS system("cls")#define PUS sy

WIN10 注册表添加启动项_添加的开机启动项列表-程序员宅基地

文章浏览阅读3.2k次。1、打开运行,输入“regedit”,打开注册表。2、在注册表中找到如下位置\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,右键“Run”新建一个字符串类型的键值。3、右键新建的键值,选择“修改”,将数值名称改为 你要启动的程序名称如:XXX.exe,数值数据改为 程序所在位置的路径 如:C:\windows\system32\XXX.exe (直接不能修改名字的,可以先点击重命名,改好名字,再点击修改,修改数值数据_添加的开机启动项列表

随便推点

pcl 加载 .ply文件失败_ply三角化模型读取失败-程序员宅基地

文章浏览阅读735次。直接 make 编译时Segmentation fault (core dumped)cmake 时指定 release 模式,即cmake -DCMAKE_BUILD_TYPE=Release ..出现警告,但还是失败。无奈只能换成.pcd 文件。..._ply三角化模型读取失败

[loj#121][线段树分治][并查集]动态图连通性_动态增减的图 连通性 site:csdn.net-程序员宅基地

文章浏览阅读418次。Description动态加边删边维护图连通性n&lt;=5000,m&lt;=500000允许离线题解wori这种模板都不会写了吗…预处理每条边在什么时候出现什么时候消失根据时间建线段树线段树每个节点开一个vector存在他管理这段时间里一直存在的边把边一开始插入就可以知道这个线段树长什么样了然后开始线段树分治,dfs这棵线段树进去的时候就把边全部插入出来就全部删除..._动态增减的图 连通性 site:csdn.net

如何在 Flink 1.9 中使用 Hive?_flink1.9 kafka写入hive-程序员宅基地

文章浏览阅读154次。Flink on Hive 介绍SQL 是大数据领域中的重要应用场景,为了完善 Flink 的生态,发掘 Flink 在批处理方面的潜力,我们决定增强 FlinkSQL 的功能,从而让用户能够通过 Flink 完成更多的任务。Hive 是大数据领域最早出现的 SQL 引擎,发展至今有着丰富的功能和广泛的用户基础。之后出现的 SQL 引擎,如 Spark SQL、Impala 等,都在一定程..._flink1.9 kafka写入hive

灰狼算法(GWO)优化长短期记忆神经网络的数据回归预测,GWO-LSTM回归预测,多输入单输出模型_matlab实现gwo-lstm灰狼算法优化长短期记忆网络多输入单输出-程序员宅基地

文章浏览阅读241次。灰狼算法(GWO)优化长短期记忆神经网络的数据回归预测,GWO-LSTM回归预测,多输入单输出模型_matlab实现gwo-lstm灰狼算法优化长短期记忆网络多输入单输出

CSS 使用动画—— @keyframes 规则和 animation 规则_设定一个元素按规定的动画执行,你需要运用什么规则?-程序员宅基地

文章浏览阅读1.5w次,点赞27次,收藏90次。目录动画@keyframes规则浏览器支持CSS3动画属性CSS3动画什么是CSS3中的动画实例动画通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。@keyframes规则@keyframes 规则用于创建动画。在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改..._设定一个元素按规定的动画执行,你需要运用什么规则?

『2021最新』Android Studio 个人配置,提高生产率必备篇_android studio settings 2021版本常用配置-程序员宅基地

文章浏览阅读1k次。『2021最新』Android Studio 个人配置,提高生产率必备篇_android studio settings 2021版本常用配置

推荐文章

热门文章

相关标签