Разработка

Мдя… Печальная тенденция – разработчики открытого ПО начали шевелиться и портировать свой софт на Windows 8 Metro. Нет бы задушить игнором…

Share

Поддержка USB модемов

This entry is part [part not set] of 2 in the series umsm

В общем мой ответ в misc@ о том как завести ZTE MF626, вылился в активную закулисную переписку о поддержке модемов вообще.
Вся сложность с этими модемаи в том, что они имеют на борту несколько устройств: cdrom, serial порт, card reader. Обычно всех интересует последовательный порт, который позволяет, посредстваом АТ команд, использовать сей девайс по назначению. А так как эти модемы предназначены в первую очередь для использования под_самой_распространённой_ос, то и все “удобства” заточены под ту самую ОС. А в этой ОС удобно следующее – воткнул модем, появился виртуальный КДПЗУ с софтом. Всё это дело автозапускается, софт ставится. Сам софт скрытно подтягивает драйвера и инициализирует устройство. Винда и так вечно ставит драйвера на одно и то же устройство, если его к разным портам подключать, а тут ещё и дополнительная иницализация. В общем суть этой софтины в том, чтобы:

  • сделать хорошо
  • предоставить интерфейс для SMS
  • позволить использовать USSD
  • предоставить большую кнопку “включить интернет”
  • И эта большая кнопка прекрасно работает, потому что софтина инициализировала модем и он стал не дефолтным устройством CDROM, а уже двумя – CDROM+modem.
    По умолчанию почти все модемы “прикидываются” накопителями. Задача userland или драйвера инициализировать режим модема.
    В винде понятно. В линуксе народ решает проблему при помощи софтины usb_modeswitch, которая, руководствуясь некоторыми правилами, отправляет ту или иную команду инициализации. Правило из себя представляет следующее:
    DefaultVendor= 0x05c6
    DefaultProduct= 0x1000

    TargetVendor= 0x0af0
    TargetProduct= 0x6901

    MessageContent="55534243123456780000000000000601000000000000000000000000000000"
    Default VendorID и ProductID – то, как устройство определяется изначально, т.е. ID накопителя. Target – то, чем устройство станет после отправки на него команды с содержанием MessageContent. На самом деле подобная свистопляска нужна не только для модемов. Есть подобные милые принтеры, Wi-Max адаптеры, мобильные телефоны.
    В OpenBSD все эти манипуляции выполняются драйверами, а не userland. В случае с модемами речь идёт о umsm(4). Драйвер отсылает команды инициализации устройству руководствуясь теми же принципами, что и usb_modeswitch в Linux. Да вот одна незадача. Ковыряясь с MF626 выяснилось, что производители пошли дальше для упрощения себе жизни. Они выпускают разные модели модемов, но с одинаковыми PID. Это пол беды. Для разных модемов с одинаковым PID нужны разные команды инициализации. А вот тут и наступает опа.
    В общем sthen@ и jsg@ задумались, как это разруливать.

    Share