问题点 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_write写report到Android 节点"/dev/uhid"

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

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

最后总结:

BLE的HID操作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 Data和BR/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;

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

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

    BLE 的HIDS服务,可以理解为BR/EDR HID在BLE 上的简化版,因BLE的特殊性,BR/EDR HID的部分feature在HIDS 中被移除. 本文将讨论Android 蓝牙BLE 中H ...

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

    问题点4:Android BLE具体连接flow 并问询DB的API flow 之第一阶段问询: 当前确认原生BT当作为GATT Client 连接上GATT Server时,在连接上后会有自动启动问 ...

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

    问题点6:Android BLE具体连接flow 并问询DB的API flow 之第三.四阶段问询: -->此时开始进行第三阶段: 通过"Read By Type Request&qu ...

  4. Android BLE 蓝牙开发指南(三)外围设备端开发详解

    Android BLE开发指南(一)入门基础 Android BLE开发指南(二)中心设备端程序开发详解 这篇文章将会详细讲解低功耗蓝牙外围设备端程序开发的主要流程.对于Android开发者而言,或许 ...

  5. android手机上的ancs,Android BLE开发之操作IOS ANCS

    前言 之前写过两篇有关于ANCS的文章,最近一段时间老是有人问关于得到ANCS服务的问题,因为IOS ANCS不同于其他的Peripheral一样对周边所有的蓝牙设备广播自己,而是仅有连接上配对并连接 ...

  6. android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser

    android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE.android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新功 ...

  7. Android BLE蓝牙详细解读

    代码地址如下: http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能 ...

  8. 快速接入 Android BLE 开发的基础框架

    代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...

  9. Android BLE(3) ---FastBle解析

    Android BLE开发详解和FastBle源码解析 项目中有用到了蓝牙相关的功能,所以之前也断断续续地针对蓝牙通信尤其是BLE通信进行了一番探索,整理出了一个开源框架FastBle与各位分享经验. ...

最新文章

  1. File类 读取文件
  2. SQL SERVER 数据库邮件配置
  3. C4C销售订单行项目价格维护方法
  4. Business Component(BC)和Business Object(BO)
  5. android 9坚果r1,坚果R1、小米MIX2S、一加6对比评测 骁龙845旗舰怎么选?
  6. Delphi 操作Excel方法大全
  7. r语言入门——颜色转换
  8. c语言程序设计吉林大学康辉目录,[吉林大学康辉] 经典C语言程序设计视频教程 51讲...
  9. MAC 下Sublime text 同时编辑多行内容
  10. Redis设计与实现——数据结构
  11. MySQL将表中的价格全部加五_MySQL浅见(五)修改表
  12. java 奥运五环_[求助]求奥运五环 java代码
  13. 什么是模块化 ? 模块化的好处
  14. 品味人生(TALK ABOUT LIFE)
  15. edge浏览器启动页面修改后依然跳转到其他网页
  16. 数据分层详解ODS、DWD、DWM、DWS、ADS
  17. 怎样更换计算机开机画面,如何给win10电脑更换一个漂亮的开机界面
  18. Android开发常用框架
  19. weblogic中间件漏洞总结
  20. 组合数学-利用挡板法解排列组合题

热门文章

  1. 机器学习从入门到创业手记-初识sklearn
  2. 神马!看电子书,会让记忆力衰退!
  3. 一网统管网格化解决方案 PPT
  4. 常用的十种数据分析方法
  5. 六种黑客入侵手机的常见方式
  6. java 整型数组定义_在Java中定义一个具有10个元素的整型数组a的语句是:___
  7. 数据库原理及应用-李唯唯主编-实验3-2
  8. inventor如何画心_Illustrator | 如何画一个心型图案
  9. 领存!专注为军工业提供计算、存储、加密以及数据安全的系统服务
  10. [Angular] ng-alain的一些实践