Я пытаюсь реализовать драйвер USB для моего приложения. Похоже, что все основные функции, такие как инициализация, чтение и запись, могут быть легко реализованы с помощью IOKit. Но проблема, с которой я столкнулся, заключается в чтении тайм-аута, более точного отсутствия этой функциональности.
На самом деле, я использую этот учебник для создания моего драйвера 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
чем то, что вы используете в настоящее время, но это не проблема, так как большинство из них возвращаются к версиям OS X со времен PPC.
Других решений пока нет …