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
相关产品推荐
相关产品推荐

