在 MacOS 和 IOKit 上实现 USB 读取超时
Implementing USB read timeout on MacOS and IOKit
我正在尝试为我的应用程序实现 USB 驱动程序。看起来所有的主要功能,如初始化、冷读写,都可以使用 IOKit 轻松实现。但我遇到的问题是读取超时,更确切地说是缺少该功能。
实际上,我使用 this 教程来创建我的 USB 驱动程序。
例如,我的阅读代码如下所示:
QByteArray Read(UInt32 size)
{
IOReturn result;
char buffer[size];
result = (*m_interface)->ReadPipe(m_interface, m_pipeIn, buffer, &size);
if(result != kIOReturnSuccess)
{
SetError("Error reading from pipe", IErrorrable::ErrorTypes::Error, result);
return QByteArray();
}
return QByteArray(buffer, size);
}
我不知道如何为这个函数实现读取超时。如果有人能提供帮助,我将不胜感激。
使用 ReadPipeTO
函数代替 ReadPipe
。还有一个异步版本,ReadPipeAsyncTO
,您可能会感兴趣。
您可能需要请求比您当前使用的版本更新的 IOUSBInterfaceInterface
版本,但这不是问题,因为它们中的大多数都从 PPC 返回到 OS X 版本天。
我正在尝试为我的应用程序实现 USB 驱动程序。看起来所有的主要功能,如初始化、冷读写,都可以使用 IOKit 轻松实现。但我遇到的问题是读取超时,更确切地说是缺少该功能。
实际上,我使用 this 教程来创建我的 USB 驱动程序。
例如,我的阅读代码如下所示:
QByteArray Read(UInt32 size)
{
IOReturn result;
char buffer[size];
result = (*m_interface)->ReadPipe(m_interface, m_pipeIn, buffer, &size);
if(result != kIOReturnSuccess)
{
SetError("Error reading from pipe", IErrorrable::ErrorTypes::Error, result);
return QByteArray();
}
return QByteArray(buffer, size);
}
我不知道如何为这个函数实现读取超时。如果有人能提供帮助,我将不胜感激。
使用 ReadPipeTO
函数代替 ReadPipe
。还有一个异步版本,ReadPipeAsyncTO
,您可能会感兴趣。
您可能需要请求比您当前使用的版本更新的 IOUSBInterfaceInterface
版本,但这不是问题,因为它们中的大多数都从 PPC 返回到 OS X 版本天。