2016-02-02 12 views
0

Я знаю, что есть некоторые режимы для конечной точки USB (Control, Bulk, Interrupt и isochronous), и они могут использоваться для каждой цели, но я не знаю, как мы можем изменить конечную точку USB в эти режимы в гаджете? Я уже прочитал USB2.0 спецификации, то я могу получить дескриптор передачи USB с помощью ниже настроек:Как изменить тип конечной точки гаджета USB?

ctrl.bRequestType = USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT; 
ctrl.bRequest = USB_REQ_GET_DESCRIPTOR; 
ctrl.wIndex = 0;   
ctrl.wLength = sizeof(buff);   
ctrl.data = buff; 
ctrl.wValue = (USB_DT_CONFIG << 8) | 0;               
result = ioctl(fd, USBDEVFS_CONTROL, &ctrl); 

Но я до сих пор не знаю, что я должен сделать, чтобы изменить режим передачи данных USB?

+0

Какой API вы говорите? Вы реализуете гаджет или используете libusb? –

+0

Да, я реализую гаджет, который может переключаться между режимами передачи USB, я прочитал спецификацию USB2.0 и я запутался, что могу сделать это с помощью команды USB_REQ_SET_DESCRIPTOR? – Tiktac

+0

Поместите эту информацию в вопрос. –

ответ

1

Конечные точки описаны в дескрипторах устройства.

Невозможно изменить дескрипторы без (практически) отсоединения и повторного перечисления устройства.

Чтобы разрешить изменение конечных точек одного интерфейса, вы можете использовать альтернативные настройки.
Чтобы разрешить изменение свойств устройства, вы можете использовать несколько конфигураций.

Чтобы реализовать это, вам нужно указать все альтернативные настройки/конфигурации в дескрипторах и реализовать заданные запросы интерфейса/конфигурации.

+0

Вы хотите сказать, что мне нужно переконфигурировать уровень интерфейса? – Tiktac

+0

Альтернативные настройки работают на уровне интерфейса. Конфигурации работают на уровне устройства. –