利用libusb接收数据存在丢帧问题

一、问题背景:

        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方法里,每家协议肯定不一样,你懂的 +_+ !)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
libusb 是一个开源的用户空间USB设备库,它提供了一个编程接口,允许开发者通过USB接口与USB设备进行通信。要使用libusb发送数据,需要按照以下步骤进行操作: 1. 初始化libusb:在使用libusb之前,需要先初始化libusb库。这可以通过调用libusb_init函数来实现。 2. 打开设备:在初始化libusb之后,需要打开要通信的USB设备。这可以通过调用libusb_open_device_with_vid_pid函数,并传入设备的供应商ID(Vendor ID)和产品ID(Product ID)来实现。 3. 规定端点:USB设备通常会有多个端点(endpoint),端点定义了数据传输的方式和方向。需要使用libusb_set_configuration函数设置设备的配置,并使用libusb_claim_interface函数来声明接口,并将其设置为活动状态。 4. 发送数据:一旦设备配置和接口设置完成,就可以使用libusb_bulk_transfer或libusb_interrupt_transfer函数来发送数据到设备。这两个函数分别用于批量传输和中断传输数据。 5. 清理资源:在通信完成后,需要释放已经打开的设备,可以使用libusb_release_interface和libusb_close函数来关闭设备和接口。 需要注意的是,使用libusb进行USB通信需要具备对USB设备的底层了解,包括设备的规格和协议等。同时,由于不同的操作系统对USB设备的支持有所差异,使用libusb时可能需要考虑到操作系统的兼容性和驱动的安装等问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin@1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值