MBR (mbr) wrote,
MBR
mbr

Category:

Нетрадиционная ориентация разработчиков Microsoft

Начинается наша история с того, что появляются первые USB устройства - мышки, клавиатуры, позже - флешки.

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

Потом появляются USB модемы, USB-RS232 конверторы. Не знаю зачем, но USB-IF вместо того, чтобы использовать один интерфейс (как у mass-storage, скажем) использует несколько. Один контрольный и несколько интерфейсов данных. По факту, я не припомню ни одного устройства которое бы использовало "несколько" интерфейсов данных - везде один master, другой slave. Microsoft пилит драйвер и все пока работает...

Но, внезапно, устройства становятся сложнее. Появляются композитные all-in-one. Microsoft делает первый костыль - промежуточный драйвер, который, если определяет несколько интерфейсов раскидывает их как отдельные устройства.

В итоге виртуальный ком-порт раскидывается на два разных устройства. Microsoft выпускает к костылю подпорку - если коммуникационный класс устройства, то оно не рассыпается.

А что же делать если в композитном устройстве, скажем, ком-порт и HID для моргания светодиодами? А ничего, такое устройство работать не будет в windows. Костыль теперь делает уже USB-IF (я не удивлюсь, если наши голубые друзья постарались). Костыль называется ЙАД - interface association descriptor. Суть его связать группы интерфейсов в сущности. По факту - только для того, чтобы ком-порт работал и только для windows - в linux все определялось без костылей по функциональным CDC дескрипторами.

Все вроде как хорошо. Но растут скорости. Уже есть идеи сделать сетевые и wi-fi карты как usb донглы. USB-IF ваят аж три стандарта: ECM, EEM, NCM. Но ни один из них не прижился массово до сих пор. А почему? А потому что Microsoft посылает USB-IF и пишет свой стандарт - RNDIS.

В качестве базы берется абстрактный модем, для которого в windows всегда был драйвер, но который именно поэтому всегда требовал дополнительного .inf файла и никогда не определялся. В дескриптор вкостыливается условие - если у модема протокол FF - vendor defined, значит это не модем, а сетевая карта.

Какой там треш и угар внутри стоит отдельного изложения. Пакеты заворачиваются в отдельные обертки. Склеиваются, режутся. Даже в стандартизированном контрольном интерфейсе Microsoft сделала свой уровень абстракции, в три раза увеличив количество необходимых пакетов и задействовав interrupt endpoint. Открытого и полного описания стандарта нет - фирменный стиль. Они даже не смогли сделать нормальное версионирование, не то что описание - везде версия 1.0, отличающаяся только датами. От 2002 по 2015.

Думаете это все? Нет, это было только начало. Наступил 2015 год. Вышла windows 10. Microsoft, наконец, научилась определять виртуальные ком-порты из коробки. Все хорошо? Ага. Только теперь все сетевые карты превратились в... ком порты. Вставляешь usb-ethernet и оппа - ком порт. Потому что Microsoft перестала поддерживать свой же костыль с vendor-defined protocol.

А чтобы это хоть как-то работало, эти пидорасы (думаю, после всего вышеописанного их нельзя называть иначе) придумали "Microsoft USB IF extension standart" и "Microsoft OS descriptors". Поздравляю господа эмбеддеры, привалило геморроя.

https://msdn.microsoft.com/ru-ru/windows/hardware/gg463179.aspx

Да, старые железки от "Independent Hardware Vendors" без перепрошивки можно заставить работать лишь явно выбирая нужный драйвер.
Tags: embed, it
Subscribe

  • Победил битрикс

    Раньше рассказывал, как мы пытаемся битрикс внедрить. Сначала просто дал задачу вебщику подергать странички и собрать отчет по линкам. Ад. Там…

  • Советский инженер - это звучит гордо

    Порадовался с последнего стеба vladimir_akinin над программистами. Однако в комменты выползло какое-то количество старых пердунов,…

  • В поддержку FSF

    Как многие знают, сейчас в отношении Ричарда Столлмана развернулась травля относительно, якобы, имевших место некорректных его личных высказываний.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments