2010-06-03

Хайвей и все-все-все

Дали тут 3g-модемчик потестировать-настроить :)
Местного Мегафона-Центр который.

ubuntu 10.04
На корпусе нацарапано
Модель: E1550
HSDPA USB Stick
HUAWEI TECHNOLOGIES CO., LTD.

Статей про него много :)
lspci писал про него что он 12d1:1446 и CDROM с "дровами" да microSD картридер виделись.
Вот что dmesg писал:
[ 5296.452028] usb 3-1: new full speed USB device using ohci_hcd and address 2
[ 5296.679200] usb 3-1: configuration #1 chosen from 1 choice
[ 5296.688975] scsi9 : SCSI emulation for USB Mass Storage devices
[ 5296.689247] usb-storage: device found at 2
[ 5296.689249] usb-storage: waiting for device to settle before scanning
[ 5296.689433] scsi10 : SCSI emulation for USB Mass Storage devices
[ 5296.689595] usb-storage: device found at 2
[ 5296.689597] usb-storage: waiting for device to settle before scanning
[ 5301.690339] usb-storage: device scan complete
[ 5301.692309] usb-storage: device scan complete
[ 5301.696945] scsi 9:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
[ 5301.702443] scsi 10:0:0:0: Direct-Access HUAWEI MMC Storage 2.31 PQ: 0 ANSI: 2
[ 5301.751308] sr0: scsi-1 drive
[ 5301.751315] Uniform CD-ROM driver Revision: 3.20
[ 5301.751482] sr 9:0:0:0: Attached scsi CD-ROM sr0
[ 5301.751580] sr 9:0:0:0: Attached scsi generic sg6 type 5
[ 5301.751957] sd 10:0:0:0: Attached scsi generic sg7 type 0
[ 5301.800325] sd 10:0:0:0: [sdg] Attached SCSI removable disk
[ 5314.054935] ISO 9660 Extensions: Microsoft Joliet Level 1
[ 5314.101926] ISOFS: changing to secondary root

Ладно. Нам цэ-дэ не нужен. Надо его из ЦэДэ в модем превратить (что с цэ-дэ сотворить - потом думать буду).

"Лучший способ" пока - прописать
sudoedit /etc/udev/rules.d/15-huawei-155x.rules
SUBSYSTEM=="usb",
ATTRS{idProduct}=="1446",
ATTRS{idVendor}=="12d1",
RUN+="/lib/udev/modem-modeswitch --vendor 0x$attr{idVendor} --product 0x$attr{idProduct} --type option-zerocd"

Хм. Странно. Циферки не совпали. Перетыкаем донгл - получаем через несколько секунд вот такой девайс:
12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
tty не появились (кажется).
sudo modprobe usbserial vendor=0x12d1 product=0x1003
И вот у нас по dmesg появились консольные устройства:

[ 8865.063521] usbserial_generic 3-1:1.0: generic converter detected
[ 8865.063680] usb 3-1: generic converter now attached to ttyUSB0
[ 8865.067561] usbserial_generic 3-1:1.1: generic converter detected
[ 8865.067742] usb 3-1: generic converter now attached to ttyUSB1

Странно что два порта :)
ttyUSB0 - отвечает на AT команды.
и ttyUSB1 тоже отвечает на AT команды - только тут регулярно валятся всякие непонятные сообщения. Вроде:
^RSSI:20
^BOOT:37205608,0,0,0,87
^RSSI:20
^RSSI:20
^RSSI:20
^RSSI:22
^RSSI:18
^BOOT:37205608,0,0,0,87
^RSSI:18
^RSSI:18
^RSSI:18

Ужас. Разбираться лень :)

пишем конфиг /etc/wvdial.conf У меня заработал такой (Рязанский Мегафон):
[Dialer defaults]
Modem = /dev/ttyUSB0

[Dialer mc]
Modem = /dev/ttyUSB0
Baud = 115200
Init2 = AT+CGDCONT=1,"IP","internet"
Phone = *99***1#
Username = *
Password = *
Stupid Mode = 1
New PPPD = yes
Auto DNS = 1

[Dialer pin]
Modem = /dev/ttyUSB0
Baud = 115200
Init1 = AT+CPIN=1234

Пин-код вроде не нужен :)
ну да ладно - пригггадитттсся.
Попытки коннектиться на ttyUSB1 не увенчались успехом :)
CARRIER LOST и всё тут :)
wvdial -n mc
и понеслось :) Ну роутинг там прописать и т.п. - думаю справитесь.
Ага. Попутно появились всякие статейки как слать и принимать USSD :) Занятненько..
Взял отсюда программульку.. http://linux007.livejournal.com/82330.html
./ussd '*100#'
мусор всякий пишеть.. Ладно. Но пишеть же? Значит что-то тут не так :)
выводим в отладку то что у нас ушло в порт и что вернулось.
ушло: AT+CUSD=1,AA180C3602,15
вернулось:00320035002E00340032044004430431002E0421043C043E04420440043800200032003500200422041200
2D043A0430043D0430043B043E0432002C002004420440043004440438043A0020043104350441043F043B002E0021002004170432043E043D04380020002A0035003000360023002000380440002F04340435043D044C
Эти 04ХХ ничего не напоминают? Сообщения то пишутся на русском. а это галимый utf-16 из винды. То есть utf-16be если что (или UCS2 некоторые называют). А никак не utf-7..
проверяем нашу догадку..
В конце файлика комментарим перекодировку и делаем свою:

#$decoded_ussd_reply = Device::Gsm::Pdu::decode_text7('00'.$ussd_reply);
use Encode;
$decoded_ussd_reply = pack "H*",$ussd_reply;
Encode::from_to($decoded_ussd_reply,'UTF-16BE','UTF-8');
(консолька то у нас линуксовая - и utf8 понимает только :)

Вуаля! Вот и наш ответ со спамом:
USSD REPLY: 25.42руб.Смотри 25 ТВ-каналов, трафик беспл.! Звони *506# 8р/день
Пока всё.. будем пилить дальше..

2 комментария:

sarbash.s комментирует...

Вот спасибо, очень помог! Действительно, сообщения приходят на русском.Ещё заметил, что баланс можно проверить только когда инет не подключен. По крайней мере на моём huawei e150 от краснояйцых. А иначе на ожидании ответа просто виснет скрипт и всё.

Gimly комментирует...

http://lpby.bn.by/node/12
вот более простой скрипт.
Только добавить поддержку UTF-16..

когда интернет подключен - читать и писать только в коммандный tty - ttyUSB1 или ttyUSB3 - что в наличии..

Ну и с правами разобраться - например через sudo