一、问题背景:
AR眼镜通过USB接口连接android设备或者Windous设备。AR眼镜通过HID协议上报imu、按键数据。由于imu数据频率比较高,发现会存在丢帧的问题,特别是按键等事件丢帧就比较严重了。尝试了调整现场的优先级、直接读hid节点、变换超时时间都没有用。使用Android USB标准API也是存在丢帧。
重点来了,最后通过多缓存的方式才解决了此问题。
二、问题解决
1. 废话不多说,直接上工程源码:
此工程代码可以直接编译运行,主要代码是C++,封装成了HidUsbModule类,很方便使用。
https://download.csdn.net/download/kai_zone/88946070
2. main调用:
#include "HidUsbModule.h"
int main()
{
HidUsbModule* mHidUsbModule = HidUsbModule::instance();
mHidUsbModule->hidInit();
mHidUsbModule->hidStart();
while(1){};
return 0;
}
3. 使用说明:
a. 主要代码如下:
其他代码都是libusb开源库
b. 编译(android):
在如下目录执行$NDK/ndk-build.cmd
D:\code\Libusb_Sample\android\jni
c.编译成功后会生成libusb1.0.so跟HidUsbModuleTest
生成文件路径:
d. 运行
adb root
adb remount
adb push libusb1.0.so /system/lib64/
adb push HidUsbModuleTest /system/bin/
然后运行HidUsbModuleTest
如下图为按键事件的上报打印:
三、注意:
如果在自己项目上使用此工程需要修改的点:
1. VID、PID (这个肯定得改)
2. 上报的字节数大小 (我用的时每次上报48个字节,你的呢)
3. 数据解析(在parseData方法里,每家协议肯定不一样,你懂的 +_+ !)