目前使用的方法是按照USB HID,也就是修改了hidReportMap,在里面新增了report id。不过没有用,只能按照BLE keyborad用。
该问题已经解决,现在有一个新的问题,蓝牙会不定期的断连。
Disconnected.. Reason:8
对于这个reason是否有文档可以说明具体原因。
8是超时断开,这个是主从机连续几个包交互失败导致的,大概率是程序阻塞,导致蓝牙任务无法按时执行。或者由于干扰或者硬件本身导致通讯失败。错误代码在ble标准协议文档里面有的,网上可以找到。
目前根据现象来看,应该和程序阻塞有关。我的代码逻辑如下:
if (events & USB_LOOP_EVENT){
? ? ? ? usbhandle();
? ? ? ? tmos_start_task(USBTaskID, USB_LOOP_EVENT, 15);
? ? ? ? return (events ^ USB_LOOP_EVENT);
}
usbhandle()函数中会去读取USB收到的数据,数据直接通过调用HidDev_Report函数通过蓝牙传输出去。我现在有几个问题需要请教一下:
1,在这个15ms中之内如果有大量的USB数据,是否会导致USB的buffer装满,使得程序阻塞。
2,USB中实际上收到的是鼠标HID数据,也就是一次会有4byte的数据。假设在15ms之内有多次鼠标数据,那么这个数据是一次性从USB buffer中读出来,还是每次只读4byte,分多次读取?
3,如果15ms内有多次鼠标操作,那么是不是会多次调用蓝牙发送函数造成程序阻塞。
4,又或者直接把蓝牙的buffer用满了,造成程序阻塞。
问题比较多,希望得到解答,谢谢。