ZTE MF626 под OpenBSD

This entry is part 1 of 2 in the series umsm

В misc@ был задан вопрос о поддержке модема ZTE MF626 в OpenBSD. Так как у меня давно на столе лежит подобный агрегат от пчелайна, решил проверить, работает ли. Вставил туда давно заблокированную пчелайновску симку, купленную несколько лет назад в Киргизии и подключил к компу. Естественно ничего полезного не увидел:
umsm0 at uhub0 port 3 configuration 1 interface 0 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
С “голым” umsm каши не сваришь. Попробовал по стандартному пути: подключил к винде, поставил драйвера с псевдо-КДПЗУ. Определились два последовательных порта: ZTE DIagnostic Interface и ZTE NMEA Device. Второй, через PuTTY ответил на AT комманду “OK”. Я нашёл список АТ комманд для этого модема и послал ему AT+ZCDRUN=8, получив в ответ “Close autorun state result (0:FAIL 1^:SUCCESS):1” и ОК. После этого модем пропал как накопитель из “моего компьютера”, а в OpenBSD благополучно определился как последовательный порт:
umsm0 at uhub0 port 3 configuration 1 interface 0 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
umsm0: missing endpoint
umsm1 at uhub0 port 3 configuration 1 interface 1 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
umsm1: missing endpoint
umass0 at uhub0 port 3 configuration 1 interface 2 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
umass0: using SCSI over Bulk-Only
scsibus5 at umass0: 2 targets, initiator 0
sd3 at scsibus5 targ 1 lun 0: SCSI2 0/direct removable serial.19d20031567890ABCDEF
umsm2 at uhub0 port 3 configuration 1 interface 3 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
ucom0 at umsm2

Который отвечает на АТ команды:
kirby@barton:ttyp2 % cu -l /dev/cuaU0 -s 9600
Connected
AT
OK

+ZUSIMR:2

+ZUSIMR:2
~
[EOT]
Дальше проверить не могу, т.к. симка давно мертва, а других пчелайновских симок не имею, ибо не пользуюсь услугами данной компании :)

P.S. для отката изменений и возвращения модема к “товарному виду” надо заслать в порт AT+ZCDRUN=9.

P.P.S. Под OpenBSD модем прекрасно заработал с симкой от мелафона. Настройки элементарны – скопировать /etc/ppp/ppp.conf.sample в /etc/ppp/ppp.conf, отредактировать значение set device и allow user исходя из реалий. На моём ноутбуке я прописал /dev/cuaU0 и kirby соответственно.
Подключение к интеренету командой ppp -ddial mobile.

Share

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

This entry is part 1 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