Jump to content

    

"Warm" смена дескрипторов (композитного) девайса существует?

В стандарте и конечно же в PC-ОСях такое реаизовано? Нужно чтобы одно из соединений композита продолжало работать без запинок/переинициализаций, а другие могли подключиться или отключиться. Вариант с полным отключением девайса не годится. Пока что-то похожее видится через имитацию хаба и независимые друг от друга дескрипторы, но это сложный вариант по сравнению с просто сменой дескрипторов и внутренней логики обработчиков эндпоинтов.

Share this post


Link to post
Share on other sites

Интересный вопрос. Однако, имитация хаба в данном случае самое лучшее, имхо, ведь для прочтения нового набора дескрипторов нужна ренумерация, т.е. переподключение устройства.

Share this post


Link to post
Share on other sites

Не вполне понимаю, что именно нужно ТС, но есть подозрение, что решением является использование Alternate Setting для интерфейсов.

Share this post


Link to post
Share on other sites
Не вполне понимаю, что именно нужно ТС, но есть подозрение, что решением является использование Alternate Setting для интерфейсов.

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

Единственный интерфейс может иметь альтернативные варианты установок. Каждый вариант установок имеет свой собственный описатель интерфейса с одним и тем же значением в поле "bInterfaceNumber" и уникальным значением в поле "bAlternateSetting". Каждый вариант установок имеет свои собственные описатели оконечных точек. В каждый момент времени активным может быть только один из вариантов. Сразу по завершении процесса обнаружения устройства хостом и выбора конфигурации активизируется вариант установок по умолчанию (значение поля "bAlternateSetting" равно 0x00) и только его обычно поддерживают драйверы накопителей операционных систем.

 

Отключать часть интерфейсов нужно обязательно, т.к. обмен данными будет недоступен. И любое ПО компа должно это видеть. Вариант с постоянным присутствием всех интерфейсов поэтому не годится.

Share this post


Link to post
Share on other sites

Теперь понятно. Насколько мне известно, такого механизма нет.

Share this post


Link to post
Share on other sites
Теперь понятно. Насколько мне известно, такого механизма нет.

Не заложено или не реализовано?

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. А у (имитации) хаба такой возможности нет. Хотя, если ОС при обнаружении подключения к хабу видит физический номер его порта, а не оперирует только назначенным адресом, то это даст возможность корректно сохранять идентификаторы интерфейсов и в имитации хаба.

 

Оптимальнее было бы заложить в атрибуты дескриптора устройства (не интерфейса) флаг динамической/горячей конфигурации чтобы не тратить ресурсы на опрос девайсов с жёсткой конфигурацией. Мечты, мечты...

Edited by GetSmart

Share this post


Link to post
Share on other sites

Неужели хабом "прикинуться" из вариантов NXP можно только на линейках LPC18xx & LPC43xx, которые единственные в режиме USB-device умеют принимать данные для любых адресов (функций) ? У других линеек либо конкретный адрес, либо 0 & EP=0.

Share this post


Link to post
Share on other sites
У других линеек либо конкретный адрес, либо 0 & EP=0.

С чего Вы взяли?

LPC в режиме device нормально проходят фазу установки адреса. Иначе это был бы не USB-device.

Share this post


Link to post
Share on other sites
LPC в режиме device нормально проходят фазу установки адреса. Иначе это был бы не USB-device.

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

 

ЗЫ

"либо конкретный адрес" понимать нужно как адрес после энумерации (фазы установки адреса). То есть пакеты к одому единственному адресу процессором принимаются, а остальные улетают "мимо" процессора.

Edited by GetSmart

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this