Linux USB-гаджет с функцией: чтение конечной точки 1 не удалось - PullRequest
0 голосов
/ 25 июня 2019

Я хочу использовать iMX7-SOM в качестве устройства (гаджета) конкретного производителя на ПК с Windows10 с драйвером WINUSB. Я использую изображение, созданное в Yocto на основе Angstrom, с Kernel v4.9.166.

Я настроил гаджет с помощью libusbgx, смонтировал функцию ffs в / ffs и записал расшифровщики в / ffs / ep0. Устройство перечисляется, как и ожидалось, и я получаю команды в конечной точке 0 (например, «BIND», «ENABLE», «DISABLE» и т. Д.).

Так долго, так хорошо ...

При получении «ENABLE» в конечной точке 0 я хочу открыть / ffs / ep1 и использовать poll () для чтения входящих данных. Но poll () возвращается немедленно, а read () никогда не возвращается (только когда я отключаю устройство). На стороне хоста приложение не запущено.

Вместо этого я использовал select (), но результат был точно таким же.

Когда я использую ioctl (fd_of_ep_1, FUNCTIONFS_FIFO_STATUS), я получаю сообщение об ошибке «Операция не поддерживается».

int fd = open("/ffs/ep1", O_RDWR);

fd_set read_set;
FD_ZERO(&read_set);
FD_SET(fd, &read_set);

int ret = select(fd + 1, &read_set, NULL, NULL, NULL);
if (ret < 0)
{
    perror("select");
}
else if (FD_ISSET(fd, &read_set))
{
    int foo = ioctl(fd, FUNCTIONFS_FIFO_STATUS);
    if (foo < 0)    perror("ioctl");
    else            fprintf(stdout, "%i\n", foo);

    char buffer[1024];
    if (read(fd, buffer, sizeof(buffer)) < 0)
    {
        perror("ep read");
    }
}

Я ожидал, что функции выбора / опроса вернутся, когда я открою свое приложение, и конечная точка будет записана хостом.

1 Ответ

0 голосов
/ 02 июля 2019

Я нашел ответ сам:

Кажется, что только конечная точка 0 (ep0) поддерживает функцию опроса.

Когда вы смотрите на поддерживаемые операции ep0 ( link)) вы можете обнаружить, что в опросе есть обработчик.Напротив, другие конечные точки (epX) не имеют аналогичной функции ( link ).

Поэтому poll () для epX устанавливает флаг POLLIN и возвращает немедленно ( link *)1012 *).

...