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;


版权声明:本文为YingbinLi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。