Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之五

news2025/4/18 15:51:42

问题点 7 关于BLE HIDS data 写入到Android 节点"/dev/uhid"的flow

关于BLE中的HIDS,首先我们需要理解好角色的定义:

GATT Server 作为HID Service 提供者,对应HID Device角色;

GATT Client 作为BLE的主动连接发起方,对应HID Host角色;

Android BT中的BlueDroid 部分,关于HID Host Le的处理和BR/EDR HID Host 同一个文件夹下,为bta_hh_le.cc

 需注意的是:HIDS 中的Report Descriptor是通过BLE ”Read Request”指令获取到;

如游戏手柄的按键信息,是通过Notification 形式发送到GATT Client(手机端)

当收到Notification时,最终通过bta_hh_co_writereportAndroid

-->当收到Notification时,触发API bta_hh_le_input_rpt_notify,内部直接调用

bta_hh_co_data,最终通过bta_hh_co_writereport到Android 节点"/dev/uhid"

比较特别的是:其在收到的Report Len中,自行附上了一个Report ID值;

附上Report ID值后,基本和BR/EDR HID一样的数据格式“Report ID + Data”

最后总结:

BLEHID操作Android 节点"/dev/uhid"实现,相比BR/EDR HID其没有GET_REPORT等指令操作,只需Open后,通过API bta_hh_co_send_hid_info 把Report Map 写入到Android 节点,然后再把 UUID 为0x2A4D 所对应的Value Handle 接收到的Notification 通过 API bta_hh_co_data写入,但这里写Report DataBR/EDR HID的最大差异是:Notification中的Report Data 是不带Report ID的,需要我们在收到HID Report 的Notification后,自行组合为“Report ID + Report Data”形式再调用API bta_hh_co_data;

而Report ID的识别是在Report Map中解析得到,我们目前使用“Report ID +Data长度”形式进行识别,例如:加入当前我们识别到两个Report ID 分别对应不同的长度,那么在收到Notification时通过匹配Data长度来决定使用哪一个Report ID(如果Report Map中不同Report ID 所对应的Data 长度一致,将无法识别,但这里没有其他办法进行识别);

Note:如果Report MAP 中没有Report ID,此时需默认Report ID 0

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

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

相关文章

maven大全(概述、安装配置、使用步骤)

一、概述 1.什么是maven? 答: 全称是Apache Maven。专门用于管理和构建项目的工具 2.maven有什么作用? (1)提供了一套标准化的项目结构 官方: 就是使用的idea,eclipse编译器的项目结构不统…

基于Matlab的高压直流输电系统仿真研究

目录 摘要 I Abstract II 第1章 绪论 1 1.1 高压直流输电系统 1 1.2 高压直流输电系统的历史 1 1.3 高压直流输电系统的特点 1 1.4 我国高压直流输电系统的现状 2 1.5 高压直流输电技术的发展前景 5 第2章 高压直流输电控制基本原理 6 2.1 高压直流输电控制系统分层结构 6 2.2 …

领夹直播麦克风常规的使用方法及方案说明

麦克风多对我们来说并不陌生,但领夹式麦克风我们日常可能会用的比较少,像做自媒体、采访等会用到的比较多,它能收到人说话的声音,避开外界嘈杂的声音。接下来我们一起来了解一下领夹式麦克风的相关知识吧! 一、领夹式麦…

Win11系统启动文件夹是空的怎么解决?

Win11系统启动文件夹是空的怎么解决?有用户发现自己系统的启动文件夹里面没有任何的文件,这样可能会导致我们的电脑出现问题,导致无法正常的启动桌面程序。那么如何去解决这个问题,一起看看具体的解决方法分享吧。 解决方法&#…

从I/O的视角看DPU

计算的流动性 随手翻开一个公有云,都会发现有不同的计算实例,搭配不同的CPU、内存、网络和存储来应对不同业务的需求. 当云原生和大量的新技术出现后,作为公有云考虑的最重要的一件事情就是提供这些丰富服务的成本: 青云、Ucloud也都在A股上…

[Redis] Spring Boot 使用Redis---RedisTemplate泛型约束乱码问题

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

牛客网-《刷C语言百题》第五期

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:《C语言入门必刷百题》 &#x…

计算机毕业设计ssm+vue+elementUI高校志愿者服务招募网站

项目介绍 随着我国教育制度的改革和社会的进步,越来越多的人希望加入志愿者这个行列从而贡献自己的一份爱。加入志愿者不仅能够更好的锻炼自己,也可以帮助那些需要帮助的人,从而让社会变的更加温暖和美好,尤其是对比较发达的地区…

基于matlab创建基于物理统计的雷达模型(附源码)

目录 一、前言 二、、定义场景 三、定义用于检测生成的雷达 四、生成统计雷达检测 五、定义用于 IQ 信号生成和处理的雷达 六、IQ 信号和处理仿真 七、总结 八、程序 一、前言 此示例演示如何以编程方式从统计雷达模型创建基于物理的雷达模型。 雷达是一种感知系统&…

Zookeeper的功能简介

1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终&#xff…

超神之路 数据结构 2 —— Queue队列实现和循环队列和普通队列的性能比较

接上一篇继续往下挖,在上一篇,我们实现了一个属于自己的动态数组。利用这个动态数组,我们来实现一个基于动态数组,一个属于自己的普通队列Queue。 Queue 是一种它许我们从表的一段进行删除,表的另一端进行插入的线性表…

Docker—苹果Mac安装Docker的两种方式

文章目录Docker简介方式一:官网dmg安装方式二:homebrew安装前置条件brew安装docker关注微信公众号:CodingTechWork,一起学习进步。Docker简介 &emsp docker就是集镜像、容器和仓库三个概念于一身的集装箱,应用于…

GPO:组策略与系统配置

1、所有的服务器不需要按ctrl+alt+del交互式登录; 2、关闭所有机器的睡眠功能 3、所有计算机都不允许登录Microsoft账户; 4、允许IT组进行系统时间修改 5、设定所有职务为managers的用户为本地管理员,除了域控制器 GPO:组策略与系统配置 所有的服务器不需要按ctrl+alt+del;…

基于ELK搭建的本地社工库

简介 ELK原本是一个开源实时日志分析平台。 ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana 。目前又新增了一个Beats,是一个轻量级的日志收集处理工具,Beats占用资源少,适合于在各个服务器上…

Greenplum GPKafka【实践 01】使用GPKafka实现Kafka数据导入Greenplum数据库踩坑问题记录(不断更新ing)

1.说明 Kafka 是分布式消息订阅系统,有非常好的横向扩展性,可实时存储海量数据,是很常用的流数据处理中间件。物联网设备采集的数据很多时候就是通过 Kafka 进行处理的。当 Kafka 数据要入库分布式数据库 Greenplum 时,我们就需要…

二、IAR新建一个工程

之前录制了无线传感网综合项目实战课程,这个课程非常适合应届毕业生和想转行Linux的朋友,用来增加项目经验。 其中一部分内容是关于CC2530zigbee的知识,后面会更新几篇关于cc2530的文章,敬请关注! 下面是该系列文章链…

gcc 好玩的 builtin 函数

gcc 好玩的 builtin 函数 前言 在本篇文章当中主要想给大家介绍一些在 gcc 编译器当中给我们提供的一些好玩的内嵌函数 (builtin function)🤣🤣🤣 。 __builtin_frame_address 使用内嵌函数实现 __builtin_frame_address(x) // 其中 x 一…

【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解近似值(MPI方法)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

无线蓝牙运动耳机推荐,目前实用性不错的运动耳机推荐

对于运动人士来说,运动耳机是日常出门标配,一款实用性好的运动耳机能给我们带来很大的动力,在运动时戴着听音乐,能够释放压力的同时让运动过程变得更加心情愉快。但是运动耳机实在是太多了,琳琅满目,各种各…

c++11特性(3)

1.lambda表达式 a.出现由来: 以sort为例,我们可以传入一个仿函数对自定义类型进行排序。但是,对每一种比较方式我们都要显示传一个仿函数太麻烦。要是乱命名更加要命,那就除了写这段代码的人没人看得懂了! b.lambda…