Android Bluetooth HID Host的理解及Report Data如何写入Android 节点之三

问题点8为何原生BT 中的HID Host在收到中断Report Data时不需解析;

从以上flow我们看到,从中断通道(Interrupt Channel)的report data其实并没有解析,而是通过API bta_hh_co_write最后写入到节点"/dev/uhid"中,此过程并没有去解析report内容;

(详看后续分析:不是不需解析,而是真正的解析是在Android 系统内部, 好处是:蓝牙和USB HID 共用同一套report descriptor parser)

Attention:在实测前,我们推测其是通过设置为Boot Protocol Mode来解析固定格式report data来避开需要Parser的问题,但实测后发现和我们想象的完全不一样

/******************************************************************/

以下是Boot Protocol Mode的HID Spec 描述

其中当HID HostHID Device 处于Report Protocol mode时,HID Host必须解析HID Device SDP中的report descriptor来了解HID Device的具体发送格式以及发送内容;

其中当HID HostHID Device 处于Boot Protocol mode时,HID Host并不需要报告描述符解析器(HID report descriptor parser)

 

 /******************************************************************/

我们使用市场上主流的传统蓝牙游戏手柄(非BLE)和Android手机进行实测,此游戏手柄在SDP中表明其不支持Boot Protocol Mode,但此时Android手机还是可以正常响应手柄的按键操作;

 原因分析:既然没有Report Protocol Mode Parser,那为何把Report Data 通过API bta_hh_co_write直接丢给Android 系统,其就能识别?

从目前实际看到的是,在SDP问询后有信息被写入到Android 系统中,通过API

bta_hh_co_send_hid_info

 

所以从SDP接收到的report descriptor , 其实直接传送给Android 系统进行解析;

/*******************************************************************/

延伸问题点:SDP中收到的报告描述符(report descriptor)是如何传送到Android系统的;

从之前tracing了解到,SDP 问询的Callback API 是hidh_search_callback

-->可以看到进行SDP 问询时,调用的API SDP_ServiceSearchRequest,留意其第二个参数;此函数把问询到的数据填充到第二个参数中,问询完成时通过第三个函数callback返回;

-->当SDP问询完成时,函数hidh_search_callback被执行,在此函数内部,可以看到其对获取的数据,针对UUID0x1124的进行部分解析 (但不解析报告描述符部分)

 

 

 /*******************************************************************/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值