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

news2025/1/12 22:56:41

BLE 的HIDS服务,可以理解为BR/EDR HID在BLE 上的简化版,因BLE的特殊性,BR/EDR HID的部分feature在HIDS 中被移除。

本文将讨论Android 蓝牙BLE 中HIDS 服务如何接收 Data 并写入到Android 节点"/dev/uhid"的flow。----关于Android BR/EDR HID data 如何写入Android 节点,请参考之前文档;Android Bluetooth HID Host的理解及Report Data如何写入Android 节点之一_YingbinLi 蓝牙的博客-CSDN博客

本文继续以问答形式展开;

问题点 1原生BT中,GATT Client在连接上后问询Service DB的过程;

(一共4个阶段)

第一阶段:通过使用“Read By Group Type Request +Attribute Type: Primary Service”问询主服务;(后续有详细的API 调用flow)

其第一包问询, Handle值从1开始到最大值(因此时GATT Client并不知晓GATT Server的实际最大Handle值是多少);

 

 这种Read By Group Type Request”形式问询,直到最后问询返回“Attribute Not Found”时才停止;

第一阶段的作用是:

 ---获取到了GATT Server Primary Service数量,且每个服务的Handle值范围;

如当前Sample第二次问询Service中,我们获取到了GATT Server支援HIDS

第二阶段:基于第一阶段获取到的每个服务的Handle值范围,根据具体每个服务(Service)的起止Handle值(分2~3步)

通过“Read By Type Request+ Attribute Type :Include”问询是否支援Include

然后再通过“Read By Type Request+ Attribute Type :Characteristic Declaration”问询是否支援Characteristic;

如果是特定的Service:如Battery HID等,在前两步完成后,可能还有第三步操作:通过“Find Information Request”进行问询Information(后续有详细的API 调用flow)

 第二阶段的作用:获取到每个服务(Service)是否包含Include,以及包含的特征(Chartcteristic)数量及每个特征的Handle起止值;

第三阶段:通过“Read By Type Request+ Attribute Type :PnP ID”问询类似BR/EDR 中的DI信息;

第四阶段具体很强针对性:如当前问询到某款游戏手柄支援Battery和HID,且在第二阶段知晓Battery特征中表示Battery Level的Handle是20;获取到HID中描述HID Information的Handle是24,表示HID 的Report Map的Handle是28;那么在第四阶段中,就针对性的使用“Read Request + Handle值”问询了Battery Level值、HID 的Information以及HID Report Map;

问题点2以上4个阶段的问询,是Java层触发,还是BlueDroid中自动执行的;

是Bluedroid内部在BLE连接后,先检测缓存中是否有Service,如果没有,就启动主动问询;

BLE callback连接上时,触发的API bta_gattc_conn

问题点3以上4个阶段的问询和DB callback APIs是;

BlueDroid中,GATT的接口定义在btif_gatt.cc中的btgattInterface( Andorid 8~11都是此定义);这里是GATT client GATT Server的接口;

而GATT Client的接口是:btgattClientInterface

  GATT Server的接口是:btgattServerInterface

BlueDroid GATT Client接收reponse的入口函数是gatt_client_handle_server_rsp

BlueDroid GATT Server接收request的入口函数是:gatt_server_handle_client_req

BlueDroid中表示BLE 连接上的API 是:btm_ble_connected

在原生中, BLE 相关UUID的定义在gattdefs.h中,

表示主服务UUID的是:GATT_UUID_PRI_SERVICE;

表示Include的UUID是:GATT_UUID_INCLUDE_SERVICE;

原生BT中,代表opcode :

Read By Group Type Request是:GATT_REQ_READ_BY_GRP_TYPE;

Read By Group Type Response是GATT_RSP_READ_BY_GRP_TYPE;

Read By Type Request是:GATT_REQ_READ_BY_TYPE;

Find Information Request是:GATT_REQ_FIND_INFO;

Read Request是:GATT_REQ_READ;

定义在gatt_api.h中;

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

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

相关文章

openpowerlink 01

源码地址: https://sourceforge.net/projects/openpowerlink/ 源码目录 qt 源码目录 qt MN 源码 MN是主站的意思 用cmake 构建 qt cmakelists.txt分析 文件 mnobd.cdc: 此文件用于配置 MN 堆栈。它包括MN和所有CN的所有配置数据,包括网…

云安全解决方案安全保障体系框架

安全需求和挑战 从风险管理 的角度讲,主要就是管理资产、威胁、脆弱性和防护措施及其相关关系,最终保障云计算平台的持续安全,以及 其所支撑的业务的安全。 云计算 平台是在传统 IT技术的基础上,增加了一个虚拟化层,并…

[Spring MVC7] 解决Redis乱码前缀问题

最近在做Redis缓存的时候,遇到了一个棘手的问题,简单来说就是项目使用Spring的RedisTemplate进行Redis数据存取操作,实际应用中发现Redis中key和value会出现“无意义”乱码前缀。如果是普通的java程序是没有这个问题。 本文解决Redis乱码问题…

基于Matlab-gui信号系统设计

目 录 1绪论 - 1 - 2系统分析和开发软件概述 - 6 - 2.1 需求分析 - 6 - 2.2系统开发环境和运行环境 - 6 - 2.3 Matlab图形用户界面(GUI) - 6 - 2.4 系统主要目标及功能 - 7 - 2.4.1 系统目标 - 7 - 2.4.2 系统主要功能 - 8 - 3系统软件平台的设计 10 3.1系统整体框图 10 3.2系统…

阿里的三个「价值支点」

历史总是轮回的。 2015年5月,身处低谷的阿里换了掌舵人,张勇由COO升任CEO,随后进行了一轮组织架构调整,并通过新零售、淘宝直播、阿里云等业态为阿里安上未来发展引擎。 当时的阿里市值涨至2000亿美元左右,华尔街投资…

终端天线—11.NFC线圈仿真

NFC线圈单体仿真 NFC线圈主要根据终端设备预留的空间大小,去设计走线宽度和圈数以及面积,NFC单体主要关注其13.56MHz处的电感量大小,以及阻抗的虚部和实部,可以根据ST和NXP芯片的要求去设计。 一、Original model 1.Simulation …

C语言文件操作【详解】

本期介绍🍖 主要介绍:为什么使用文件,什么是文件,文件的打开和关闭的操作方法,文件的顺序读写于随机读写,文件读取结束的判定👀。 文章目录一、为什么使用文件🍖二、什么是文件&…

React 入门:使用脚手架写一个Hello组件

文章目录本文目标开发前的准备编写主页面 index.html编写外壳组件 App.js编写入口文件 index.js代码组件化开发 Hello 组件开发 Welcome 组件引用组件组件化实现效果样式的模块化提升编码效率本文目标 通过使用脚手架确实让我们很方便的创建一个 React 项目基础代码结构&#…

力扣(LeetCode)11. 盛最多水的容器(C++)

双指针贪心 盛水的面积 长度 \times 左右柱子最低高度 area(r−l)min(height[l],height[r])area (r-l)\times min(height[l],height[r])area(r−l)min(height[l],height[r]) 初始时,我们不知道每个柱子的高度,但是我们可以选取最左侧柱子和最右侧柱子…

期望E与高斯分布的期望

目录 1. 期望定义 2. 期望性质 2.1 用期望定义方差 / 标准差 方差定义 标准差定义 方差的表示——离散型: 方差的表示——连续型: 方差的性质 3. (一元)高斯分布定义 4. (一元)高斯分布的性质 5. 二维随机向量的数学期望E与方差σ 参考 1. …

PyCharm安装部署(一) 百篇文章学PyQT

本文章是百篇文章学PyQT的第一篇,本文讲述如何安装PyCharm IDEA工具,其它工具也可以但是PyCharm 相对来说用的人多大家都认可(方案成熟),pycharm是一款功能强大的python编辑器,具有跨平台性,本文介绍一下pycharm在wind…

SSM 医院在线挂号系统

SSM 医院在线挂号系统 SSM 医院在线挂号系统 功能介绍 首页 登录注册 图片轮播展示 系统简介 系统公告 医院介绍 医生展示 医院资讯 预约挂号 收藏 评论 在线留言 查看留言 后台管理 登录 管理员管理 修改密码 医院信息管理 医生信息管理 用户权限管理 科室信息管理 预约挂号…

微信小程序如何转云开发

微信小程序云开发,为前端全栈开发提供了很大的便利。本文主要介绍普通的微信小程序如何让转为云开发。 一、建cloudfunction文件夹 cloudfunction文件夹建立在小程序的根目录下。 二、修改 project.config.json配置 在 project.config.json文件中,添加&…

ip子网的划分方法

目录 1 子网划分的定义: 2 掩码介绍 3、子网划分要解决的问题: 4 子网划分步骤 5 范例1根据ip和掩码求子网和网络广播地址: 6 范例2根据ip和掩码求同网段地址 7 合并子网的例子根据ip范围合并,并添加回程路由: …

还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦

前言 如果不了解 整形提升 的小伙伴可就要注意了,c偷偷将你的数据类型改变了你都不知道.快点和牛牛一起学习一下c语言中 整形提升的知识吧 ! 一、整形提升是什么,又是怎样提升的? 不知道小伙伴们有没有听过整形提升这个词? 整形提升是什么呢? C语言中,在进行…

[附源码]java毕业设计石林县石漠化信息查询分析系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【GlobalMapper精品教程】020:Lidar点云数据分类(自动分类、手动分类)案例详解

航测点云通常跟DSM一致,即包含植被、房屋等信息,必须进行点云分类、过滤,才能生成准确的高程点、等高线和DEM等地形数据。本文以案例的形式详细讲解globalmapper23中点云工具及使用方法。 文章目录 1. 点云分类2. 创建地面高程格网3. 地形绘制4. 格网转点云5. 点云抽稀6. 点…

面试:java中的各种锁

共享锁 共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等 ReadWriteLock,顾名思义,是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。“读取锁…

java计算机毕业设计ssm建设路小学芙童币和芙童印章管理系统

项目介绍 随着移动互联网技术的迅速发展,时代对人们的知识水平和综合素质要求也越来越高了,各种教育管理系统层出不穷。其中以建设路小学吉祥物“芙童”为卡通原型设计的芙童印章、芙童币深受学生和老师们的喜爱。这是学校结合德育教学、少先队活动和社会实践活动为他们量身定…

Mybatis源码解析(六):一级缓存和二级缓存的优先级

Mybatis源码系列文章 手写源码(了解源码整体流程及重要组件) Mybatis源码解析(一):环境搭建 Mybatis源码解析(二):全局配置文件的解析 Mybatis源码解析(三):映射配置文件的解析 Mybatis源码解析(四):s…