Реализация тайм-аута чтения USB на MacOS и IOKit - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь реализовать драйвер 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);
}

Понятия не имею, как реализовать тайм-аут чтения для этой функции. Буду очень признателен, если кто-нибудь сможет помочь.

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте функцию ReadPipeTO вместо ReadPipe. Существует также асинхронная версия ReadPipeAsyncTO, которая может представлять интерес.

Возможно, вам потребуется запросить более новую версию IOUSBInterfaceInterface, чем та, которую вы используете в настоящее время, но это не проблема, поскольку большинство из них возвращаются к версиям OS X со времен PPC.

...