GADGETFS_CLEAR_HALT зависает моя программа устройства USB гаджетфсLinux

Ответить
Гость
 GADGETFS_CLEAR_HALT зависает моя программа устройства USB гаджетфс

Сообщение Гость »


Я следую этому руководству по реализации устройства GadgetFS в Linux: https://blog.soutade.fr/post/2016/07/cr ... getfs.html
Мне нужно было расширить конфигурацию, добавив вторую альтернативную настройку, в которой есть все мои конечные точки. Итак, мой код определил один интерфейс с альтернативным значением 0, без конечных точек, и другой интерфейс с альтернативным значением 1, с двумя конечными точками. В остальном код такой же, как в примере выше.
Устройство, похоже, распознается хостом правильно, однако во время инициализации оно достигает следующих строк кода:

Код: Выделить всё

case USB_REQ_SET_INTERFACE:
printf("SET_INTERFACE\n");
ioctl (thread_args.fd_in, GADGETFS_CLEAR_HALT);
ioctl (thread_args.fd_out, GADGETFS_CLEAR_HALT);
// ACK
status = read (fd, &status, 0);
And from there it stops responding to any messages from the host. I guess it blocks at read() and never returns?
I figured out that if I simply comment out the ioctl() calls, then it seems to work fine. However, I am cautious of doing this because I don't really know what those lines do, they must be there for a reason. The API's comments merely say "resets endpoint halt+toggle; used to implement set_interface.", and I don't really find any other info anywhere else online either.
If I simply have one interface, like the original example, the problem does not occur either.
So my question is, what do these GADGETFS_CLEAR_HALT operations do? Why are they breaking my program if I specify more than one USB interface?


Источник: https://stackoverflow.com/questions/781 ... ce-program
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»