ZTE MF180: различия между версиями
Lazyklimm (обсуждение | вклад) |
AITap (обсуждение | вклад) (Скрипт -> USSD вида #xxx#; раскодирование UCS-2) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 7: | Строка 7: | ||
== Швейцарский нож == | == Швейцарский нож == | ||
Далее, необходимо (вернее, можно обойтись и посылкой AT-команд, но мы же слишком ленивы для этого) использовать небольшой, но очень полезный скрипт | Далее, необходимо (вернее, можно обойтись и посылкой AT-команд, но мы же слишком ленивы для этого) использовать небольшой, но очень полезный скрипт: | ||
{{hider hiding| | |||
|title=Скрипт | |||
|content= | |||
<source lang=perl> | <source lang=perl> | ||
#!/usr/bin/perl -w | #!/usr/bin/perl -w | ||
Строка 16: | Строка 19: | ||
# подробнее параметры коммандной строки: | # подробнее параметры коммандной строки: | ||
# mf100.pl help | # mf100.pl help | ||
# 29-04-2012 | |||
# Отправка USSD-команд вида #102# | |||
# Раскодирование ответа UCS-2 -> UTF-8 | |||
# Ivan Krylov <aitap@jabber.ru> | |||
# Copyright (C) 2010 Mikhail Burshtynskiy (mikhail@m-blog.pp.ua) | # Copyright (C) 2010 Mikhail Burshtynskiy (mikhail@m-blog.pp.ua) | ||
# This program is free software: you can redistribute it and/or modify | # This program is free software: you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||
# the Free Software Foundation, either version 3 of the License, or | # the Free Software Foundation, either version 3 of the License, or | ||
# (at your option) any later version. | # (at your option) any later version. | ||
# This program is distributed in the hope that it will be useful, | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | # GNU General Public License for more details. | ||
# You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
############################################################################################ | ############################################################################################ | ||
# настройка модема на примере Debian lenny версия ядра: 2.6.30-bpo.2-686; Ubuntu 9.10 | # настройка модема на примере Debian lenny версия ядра: 2.6.30-bpo.2-686; Ubuntu 9.10 | ||
Строка 57: | Строка 65: | ||
# вам поможет команда: # rmmod option | # вам поможет команда: # rmmod option | ||
############################################################################################ | ############################################################################################ | ||
use strict; | use strict; | ||
use File::Basename; | use File::Basename; | ||
use POSIX qw(O_RDWR O_NOCTTY); | use POSIX qw(O_RDWR O_NOCTTY); | ||
use Encode qw{encode from_to}; | |||
use Term::ANSIColor qw(:constants); | use Term::ANSIColor qw(:constants); | ||
$Term::ANSIColor::AUTORESET = 1; | $Term::ANSIColor::AUTORESET = 1; | ||
#параметры | #параметры | ||
my $usb_1='/dev/ttyUSB1'; | my $usb_1='/dev/ttyUSB1'; | ||
Строка 69: | Строка 78: | ||
my $timeout=20;# выход по таймауту | my $timeout=20;# выход по таймауту | ||
####################### | ####################### | ||
my $exit_="Время ожидания истекло, выход."; | my $exit_="Время ожидания истекло, выход."; | ||
my $error="ERROR\n"; | my $error="ERROR\n"; | ||
Строка 99: | Строка 108: | ||
my $par=shift @ARGV; | my $par=shift @ARGV; | ||
if($par){ | if($par){ | ||
unless ($par=~m/^ | unless ($par=~m/^[*#][0-9]{3}[*0-9]*#$|^[0-9]$|^on$|^off$|^sig$|^info$|^cdstop$|^cdrun$|^-*help$|^network$|^search$|^storage$|^modem$|^pin$|^sequrity$/i){ | ||
print BOLD, RED, "\nНЕВЕРНАЯ КОМАНДА!",RESET,"\n\n$help"; | print BOLD, RED, "\nНЕВЕРНАЯ КОМАНДА!",RESET,"\n\n$help"; | ||
exit; | exit; | ||
Строка 178: | Строка 187: | ||
exit if $answer eq "0"; | exit if $answer eq "0"; | ||
print RED, BOLD, "введено некорректное значение!\n\n", RESET and redo MARK4 unless $answer=~m/^1$/; | print RED, BOLD, "введено некорректное значение!\n\n", RESET and redo MARK4 unless $answer=~m/^1$/; | ||
print BOLD, "ВНИМАНИЕ! При вводе PIN кода будте предельно внимательны.\nУ вас 3 или менее попыток.\n", RESET; | print BOLD, "ВНИМАНИЕ! При вводе PIN кода будте предельно внимательны.\nУ вас 3 или менее попыток.\n", RESET; | ||
MARK5:{ | MARK5:{ | ||
Строка 228: | Строка 237: | ||
my $producer=info('CGMI', qr/(^.{3,})/); | my $producer=info('CGMI', qr/(^.{3,})/); | ||
print BOLD, "Производитель: ", RESET, "$producer\n" if $producer; | print BOLD, "Производитель: ", RESET, "$producer\n" if $producer; | ||
my $model=info('CGMM', qr/(^.{3,})/); | my $model=info('CGMM', qr/(^.{3,})/); | ||
print BOLD, "Модель: ", RESET, "$model\n" if $model; | print BOLD, "Модель: ", RESET, "$model\n" if $model; | ||
my $prog=info('CGMR', qr/(^.{5,})/); | my $prog=info('CGMR', qr/(^.{5,})/); | ||
print BOLD, "Версия ПО: ", RESET, "$prog\n" if $prog; | print BOLD, "Версия ПО: ", RESET, "$prog\n" if $prog; | ||
my $imei=info('CGSN', qr/(^\d{15,})/); | my $imei=info('CGSN', qr/(^\d{15,})/); | ||
print BOLD, "IMEI: ", RESET, "$imei\n" if $imei; | print BOLD, "IMEI: ", RESET, "$imei\n" if $imei; | ||
my $iems=info('CIMI', qr/(^\d{15,})/); | my $iems=info('CIMI', qr/(^\d{15,})/); | ||
print BOLD, "IEMS: ", RESET, "$iems\n" if $iems; | print BOLD, "IEMS: ", RESET, "$iems\n" if $iems; | ||
my $number=info('CNUM', qr/\+CNUM:\D+,"(\+?\d{10,})",\d+/); | my $number=info('CNUM', qr/\+CNUM:\D+,"(\+?\d{10,})",\d+/); | ||
if($number){ | if($number){ | ||
Строка 246: | Строка 255: | ||
print BOLD, "Ваш номер: ", RESET, "$number\n"; | print BOLD, "Ваш номер: ", RESET, "$number\n"; | ||
} | } | ||
print BOLD, "Сигнал сети: ", RESET, sig(info('CSQ', qr/\+CSQ: (\d+?),\d{2}/))."\n";#уровень сигнала сети | print BOLD, "Сигнал сети: ", RESET, sig(info('CSQ', qr/\+CSQ: (\d+?),\d{2}/))."\n";#уровень сигнала сети | ||
my $operator=operator(); | my $operator=operator(); | ||
Строка 310: | Строка 319: | ||
Нажмите ENTER для продолжения, при этом при неудачной регистрации | Нажмите ENTER для продолжения, при этом при неудачной регистрации | ||
модем "перескочит" на родную сеть | модем "перескочит" на родную сеть | ||
или для подключения в ручном режиме наберите: | или для подключения в ручном режиме наберите: | ||
SAY | SAY | ||
Строка 317: | Строка 326: | ||
в дальнейшем при следующем подключении модема необходимо | в дальнейшем при следующем подключении модема необходимо | ||
будет явно выбрать сеть или изменить режим поиска сети. | будет явно выбрать сеть или изменить режим поиска сети. | ||
или: 0 для выхода | или: 0 для выхода | ||
Строка 376: | Строка 385: | ||
if($st){ | if($st){ | ||
if($st=~/^[0-9A-F]+$/i){ | if($st=~/^[0-9A-F]+$/i){ | ||
$st = pack("H*", $st); | |||
encode("ucs-2",$st); | |||
from_to($st,"ucs-2","utf-8"); | |||
} | } | ||
return $st; | |||
}elsif($@ =~ /Timeout/){ | }elsif($@ =~ /Timeout/){ | ||
return $exit_; | return $exit_; | ||
Строка 486: | Строка 496: | ||
} | } | ||
} | } | ||
sub check_pin{ | sub check_pin{ | ||
my $pin; | my $pin; | ||
Строка 499: | Строка 509: | ||
return $pin; | return $pin; | ||
} | } | ||
</source> | </source> | ||
}} | |||
== Вскрываем == | == Вскрываем == | ||
Строка 543: | Строка 557: | ||
== Ссылки == | == Ссылки == | ||
* [http://m-blog.pp.ua/%D0%B1%D0%B5%D0%B7-%D1%80%D1%83%D0%B1%D1%80%D0%B8%D0%BA%D0%B8/14.html источник вдохновения и скрипта] - там все издевательства производятся над MF100 | * [http://m-blog.pp.ua/%D0%B1%D0%B5%D0%B7-%D1%80%D1%83%D0%B1%D1%80%D0%B8%D0%BA%D0%B8/14.html источник вдохновения и скрипта] - там все издевательства производятся над MF100; домен в данный момент на парковке | ||
[[Category:USB-Модемы]] | [[Category:USB-Модемы]] | ||
[[Category:Руководства]] | [[Category:Руководства]] |
Текущая версия от 09:12, 29 апреля 2012
Сабж
Билайновский модем, куплен в августе 2010 за 700 с чем-то RUR
Заставляем систему видеть
Для корректной работы проще всего поставить ядро с поддержкой драйвера option (чтобы не мучаться с usbserial и udev).
Швейцарский нож
Далее, необходимо (вернее, можно обойтись и посылкой AT-команд, но мы же слишком ленивы для этого) использовать небольшой, но очень полезный скрипт:
Вскрываем
Изначально модем определяется как CD-ROM, на котором есть драйвера только под Windows (несмотря на заявленную поддержку MacOS X). После извлечения оного модем становится виден как 3 tty устройства, с которыми уже можно попробовать поработать, но разве нам нужны эти пляски?
Потому просто берем и отключаем cdrom командой:
./mf100.pl cdstop
Если скрипт ответил "OK", можно переткнуть модем и удостовериться, что больше нас ничто не беспокоит.
Звоним
Многие провайдеры используют коварный флаг, который разрывает соединение каждые 2-3 минуты и коварный билайн в их числе. Недуг лечится опять же, просто:
./mf100.pl modem
Кто как, а я для дозвона с незапамятных времен использую wvdial, ибо для ppp/pppd нужно писать много букав, а в kppp/gnome-ppp - много тыкать мышкой. Лень.
для wvdial используем такой конфиг (пользователь/пароль/точка доступа специфичны для вашего провайдера):
[Dialer beeline-3g]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Phone = *99#
ISDN = 0
Stupid Mode = 1
Auto Reconnect = 0
Idle Seconds = 0
Username = beeline
Password = beeline
Modem Type = USB Modem
Modem = /dev/ttyUSB2
теперь запускаем wvdial и радуемся интернету:
wvdial beeline-3g
Ссылки
- источник вдохновения и скрипта - там все издевательства производятся над MF100; домен в данный момент на парковке