Я хочу использовать 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");
}
}
Я ожидал, что функции выбора / опроса вернутся, когда я открою свое приложение, и конечная точка будет записана хостом.