You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac Catalyst下C++复合HID设备开关接口优化及报错排查

复合HID设备通信程序的接口打开限制问题与优化需求

我在Xcode中基于Mac Catalyst用C++开发一款与复合HID设备通信的程序,为测试功能编写了如下无限循环逻辑:

  • 打开复合HID设备的HID接口
  • 若打开成功,发送Get_FeatureReport获取设备数据并打印结果
  • 若数据获取成功,关闭接口并释放相关资源
  • 进入下一次循环

循环初期能正常获取正确数据,但在第1020次迭代时,调用kr = IOServiceOpen(usbInterface, mach_task_self(), pipRef, &connect);出现初始化失败,IOReturn码为-536870201(0xE00002C7)。此后除非热插拔设备或重启循环,否则始终无法打开HID接口。故障期间系统内存与CPU状态正常,怀疑问题与未释放资源或系统限制有关。虽该场景非用户常规操作,但仍希望优化代码结构并彻底解决此问题。

我已尝试释放io_iterator_t、usbInterface等所有可见资源,但问题仍在第1020次及之后的循环中出现,故障发生在IOReturn FindUSBInterface(IOUSBDeviceInterface245 **dev)函数内,相关代码如下:

if (interfaceClass == kUSBHIDClass)
{
    io_connect_t connect;

    UInt8       direction;
    UInt8       number;
    UInt8       transferType;
    UInt8       interval;
    
    if(count==1020)
        printf("1 0 2 0");
    kr = IOServiceOpen(usbInterface, mach_task_self(), pipRef, &connect);
    if (kr == kIOReturnSuccess)
    {
        kr = (*interface)->GetPipeProperties(interface, pipRef, &direction, &number, &transferType, &maxPacketSize, &interval);
        if (kr != kIOReturnSuccess || transferType != kUSBControl)
        {
            (void) (*interface)->USBInterfaceClose(interface);
            (void) (*interface)->Release(interface);
            interface = NULL;
            IOConnectRelease(connect);
            continue;
        }
            
        usbDeviceInterface = interface;
        IOObjectRelease(iterator);
        return kIOReturnSuccess;
    }
    else
    {
        IOConnectRelease(connect);
        IOObjectRelease(iterator);
        (void) (*interface)->USBInterfaceClose(interface);
        (void) (*interface)->Release(interface);
        interface = NULL;
        continue;
    }
}
else
{
    (void) (*interface)->USBInterfaceClose(interface);
    (void) (*interface)->Release(interface);
    interface = NULL;
    continue;
}

现寻求优化复合HID设备开关接口功能及解决该报错的方法。

内容的提问来源于stack exchange,提问作者Su Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:03:20