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

问题点9 关于BR/EDR HID data 写入到Android 节点"/dev/uhid"的flow以及实测;

通过使用Android手机(Android 8)和某款市场主流日本品牌游戏手柄进行实测,得到的log如下:

 可以看到bta_hh_co.cc中的API调用flow

-->先调用API bta_hh_co_open 里面将打开节点"/dev/uhid",并创建用于监测节点的线程;

此线程作用是决定当前节点是否可以写入等状态;

Note:当前原生中的bta_hh_co_open中的入参,其实对节点本身来说,都没啥用;

-->调用API bta_hh_co_send_hid_info 写入之前从SDP中获取的report descriptor;

 

 以上参数中,除第一个,其余参数都会被写入到节点中;

以上截图的蓝圈部分参数,在Android手机中,其是通过DI(UUID: 0x1200) SDP 问询得到的(但如果没有,实测可以直接模拟填充);

以上截图的红圈部分参数:则是在API hidh_search_callback中问询得到的SDP内容中填充;

 实测其内容和长度就是ClassDescriptorData的内容和长度(不包含前面的

ClassDescriptorType),

如当前实测的des_list就是index[0] = 0x05, index[1] = 0x01…;

-->最后调用API bta_hh_co_data,此API只写入中断通道传送来的input data;

而控制通道返回的data,将体现在指令DATA中,但其不通过bta_hh_co_data写入给Android,而是使用API bta_hh_co_get_rpt_rsp写入到Andropid;

Case1:如HID Host执行了GET_REPORT指令后,HID Device 返回DATA指令,此时DATA Playload内容将通过API bta_hh_co_get_rpt_rsp 写入到Android;

 Case2: 当HID Host执行了GET_REPORT指令后,因异常,HID Device 没有返回DATA,而是通过HandShake 返回了Result Code, 此时也需通过bta_hh_co_get_rpt_rsp 告知Android;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值