Как установить альтернативные настройки для USB-устройства с помощью libusb

Я пытаюсь установить альтернативную настройку для устройства USB HUB с 5 интерфейсами.
Ниже приведены конфигурации для каждого интерфейса.

 1. Ifs= 5 Cfg#= 1 Atr=c0 MxPwr=  2mA A:  FirstIf#= 0 IfCount= 1
Cls=08(stor.) Sub=06 Prot=50 A:  FirstIf#= 1 IfCount= 1 Cls=03(HID
) Sub=00 Prot=00 A:  FirstIf#= 2 IfCount= 2 Cls=01(audio) Sub=00
Prot=00 A:  FirstIf#= 4 IfCount= 1 Cls=fe(app. ) Sub=01 Prot=012. I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50
Driver=usb-storage E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E:
Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

3.   I:* If#= 1 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid E:     Ad=82(I)   Atr=03(Int.) MxPS=  64 Ivl=128ms E:  Ad=02(O) Atr=03(Int.) MxPS=  64 Ivl=128ms4. I:* If#= 2 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=snd-usb-audio**5. I: If#= 3 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=(none)
I:  If#= 3 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=00 Driver=(none)
E:  Ad=83(I) Atr=01(Isoc) MxPS= 320 Ivl=1ms**6: I:* If#= 4 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

Если вы видите, интерфейс 3 поддерживает 2 альтернативные настройки.
0 альтернативная настройка не имеет конечных точек.
1 альтернативная настройка имеет 1 конечную точку.

Когда я не использую устройство, я установлю альтернативную настройку на 0, чтобы не использовать конечные точки, в противном случае я установлю альтернативную настройку на 1.

Мой вопрос
Я использую libusb, чтобы установить альтернативные настройки. Моя последовательность вызовов libusb будет.

  to get the required device.
1. libusb_init
2. libusb_get_devicelist
3. search the device using device discriptor
4. libusb_opento set the alternate setting.
1) Detach the driver if attached libusb_detachdriver.
2) claim the interface libusb_claiminterface(3)
3) set alternate setting libusb_setalternatesetting(0/1)
4) release the claimed interface libusb_releaseinterface(3)
5) reattach the driver libusb_attachderiver

Я выполняю второй набор последовательности вызовов каждый раз, когда устройство используется / не используется.

Но когда я освобождаю заявленный интерфейс (libusb_releaseinterface) после установки альтернативной настройки на 1 (libusb_alternatesetting (1)), интерфейс сбрасывается на альтернативную настройку 0, даже когда устройство используется.

Я запутался, какую последовательность вызовов libusb мне нужно использовать. Если я не освобождаю заявленный интерфейс немедленно, состояние драйвера будет отключено, пока я не отпущу интерфейс и не присоединю драйвер.

7

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector