问题点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;