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

一、问题背景:

        AR眼镜通过USB接口连接android设备或者Windous设备。AR眼镜通过HID协议上报imu、按键数据。由于imu数据频率比较高,发现会存在丢帧的问题,特别是按键等事件丢帧就比较严重了。尝试了调整现场的优先级、直接读hid节点、变换超时时间都没有用。使用Android USB标准API也是存在丢帧。

       重点来了,最后通过多缓存的方式才解决了此问题。

二、问题解决

1. 废话不多说,直接上工程源码:

此工程代码可以直接编译运行,主要代码是C++,封装成了HidUsbModule类,很方便使用。

https://download.youkuaiyun.com/download/kai_zone/88946070

2. main调用:
#include "HidUsbModule.h"

int main()
{
    HidUsbModule* mHidUsbModule = HidUsbModule::instance();
    mHidUsbModule->hidInit();
    mHidUsbModule->hidStart();
    while(1){};
    ret
我是使用的libusb获取的触摸点数据,如下: TOUCH_EVENT mPSign; //签名数据容器 QVector<TOUCH_EVENT> vecSignInfo1; //创建一个线程读取坐标数据函数 pthread_t thread; // 全局控制标志 volatile int keep_running = 1; // 接收数据的函数 int readHIDPenData(struct libusb_device_handle *dev_handle, unsigned char *data, int length) { int transferred; int ret; if (libusb_claim_interface(m_devHandle, 0) != LIBUSB_SUCCESS) { return 1; } // 端点 0x81 通常是 IN 端点,负责接收数据(需要根据设备实际情况调整) ret = libusb_interrupt_transfer(dev_handle, 0x81, data, length, &transferred, 5000); // 超时时间 5000ms if (ret != LIBUSB_SUCCESS) { fprintf(stderr, "Failed to receive data: %s\n", libusb_error_name(ret)); return ret; } libusb_release_interface(m_devHandle, 0); return transferred; } // 线程函数 void* readXYP(void* arg) { unsigned char penBuf[10] = {0x00}; int ret; while (keep_running) { if (m_devHandle == NULL) { keep_running = 0; break; } ret = readHIDPenData(m_devHandle, penBuf, 64); if(ret == 10 && penBuf[0] == 0x1c) { TOUCH_EVENT tempEvent; tempEvent.x = penBuf[2] | (penBuf[3] << 8); tempEvent.y = penBuf[4] | (penBuf[5] << 8); tempEvent.p = penBuf[6] | (penBuf[7] << 8); // 坐标转换 if(myVID == 0x206D && myPID == 0x0901) { tempEvent.x = tempEvent.x * 1920 / 37632; tempEvent.y = tempEvent.y * 1080 / 30106; tempEvent.p = tempEvent.p / 2; } vecSignInfo1.append(tempEvent); } } printf("Thread exited.\n"); return NULL; }目前怎么处理这个触摸点数据呢,才能保证低延迟性呢
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kevin@1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值