Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "Warm" смена дескрипторов (композитного) девайса существует?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
GetSmart
В стандарте и конечно же в PC-ОСях такое реаизовано? Нужно чтобы одно из соединений композита продолжало работать без запинок/переинициализаций, а другие могли подключиться или отключиться. Вариант с полным отключением девайса не годится. Пока что-то похожее видится через имитацию хаба и независимые друг от друга дескрипторы, но это сложный вариант по сравнению с просто сменой дескрипторов и внутренней логики обработчиков эндпоинтов.
alexunder
Интересный вопрос. Однако, имитация хаба в данном случае самое лучшее, имхо, ведь для прочтения нового набора дескрипторов нужна ренумерация, т.е. переподключение устройства.
aaarrr
Не вполне понимаю, что именно нужно ТС, но есть подозрение, что решением является использование Alternate Setting для интерфейсов.
GetSmart
Цитата(aaarrr)
Не вполне понимаю, что именно нужно ТС, но есть подозрение, что решением является использование Alternate Setting для интерфейсов.

Есть один микроконтроллер, один комп и один кабель между ними. Нужно чтобы микроконтроллер/девайс в любой момент работы компа без перетыканий кабеля или электрической имитации переподключения мог менять кол-во своих интерфейсов. Все интерфейсы стандартных классов со встроенными в ось драйверами. Допустим MSC, CDC, HID в любом количестве (на что хватит железа проца). Исходя из этого Alternate Setting не подходит, т.к.
Цитата
Единственный интерфейс может иметь альтернативные варианты установок. Каждый вариант установок имеет свой собственный описатель интерфейса с одним и тем же значением в поле "bInterfaceNumber" и уникальным значением в поле "bAlternateSetting". Каждый вариант установок имеет свои собственные описатели оконечных точек. В каждый момент времени активным может быть только один из вариантов. Сразу по завершении процесса обнаружения устройства хостом и выбора конфигурации активизируется вариант установок по умолчанию (значение поля "bAlternateSetting" равно 0x00) и только его обычно поддерживают драйверы накопителей операционных систем.


Отключать часть интерфейсов нужно обязательно, т.к. обмен данными будет недоступен. И любое ПО компа должно это видеть. Вариант с постоянным присутствием всех интерфейсов поэтому не годится.
aaarrr
Теперь понятно. Насколько мне известно, такого механизма нет.
GetSmart
Цитата(aaarrr @ Feb 17 2015, 13:11) *
Теперь понятно. Насколько мне известно, такого механизма нет.

Не заложено или не реализовано?
Цитата
9.4.3 Get Descriptor
This request returns the specified descriptor if the descriptor exists.

Default state: This is a valid request when the device is in the Default state.
Address state: This is a valid request when the device is in the Address state.
Configured state: This is a valid request when the device is in the Configured state.


Композит похож на хаб наличием разнородных интерфейсов, очевидно независимых друг от друга на стороне хоста. Нормально было бы применять к нему похожую логику работы ПО хоста. Если не реализовали, то жаль конечно. Если сделать хост на другом микроконтроллере, то горячее изменение кол-ва интерфейсов вероятно можно реализовать. Но если этот хост потом воткнуть девайсом в комп, то возникнет проблема из абзаца ниже. То есть её решить можно только принципом гоячих изменений конфигурации/дескрипторов.

При отключении части интерфейсов даже имена дисков и ком-портов корректно сохранялись бы и у активых и у вновь появившихся благодаря полю bInterfaceNumber. А у (имитации) хаба такой возможности нет. Хотя, если ОС при обнаружении подключения к хабу видит физический номер его порта, а не оперирует только назначенным адресом, то это даст возможность корректно сохранять идентификаторы интерфейсов и в имитации хаба.

Оптимальнее было бы заложить в атрибуты дескриптора устройства (не интерфейса) флаг динамической/горячей конфигурации чтобы не тратить ресурсы на опрос девайсов с жёсткой конфигурацией. Мечты, мечты...
GetSmart
Неужели хабом "прикинуться" из вариантов NXP можно только на линейках LPC18xx & LPC43xx, которые единственные в режиме USB-device умеют принимать данные для любых адресов (функций) ? У других линеек либо конкретный адрес, либо 0 & EP=0.
jcxz
Цитата(GetSmart @ Aug 23 2015, 16:27) *
У других линеек либо конкретный адрес, либо 0 & EP=0.

С чего Вы взяли?
LPC в режиме device нормально проходят фазу установки адреса. Иначе это был бы не USB-device.
GetSmart
Цитата(jcxz @ Aug 27 2015, 11:05) *
LPC в режиме device нормально проходят фазу установки адреса. Иначе это был бы не USB-device.

Через какой адрес и эндпоинт?

ЗЫ
"либо конкретный адрес" понимать нужно как адрес после энумерации (фазы установки адреса). То есть пакеты к одому единственному адресу процессором принимаются, а остальные улетают "мимо" процессора.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.