» F.A.Q.
Подключение официально неподдерживаемых 3G-модемов к Android-девайсам. Часть 3: Конфигурация, процесс подключения, особенности

В заключительной статье из цикла о подключении USB 3G-модемов мы поговорим об окончательной настройке подключения, об использовании сторонних средств для подключения к интернету и других тонкостях.
В предыдущей статье мы остановились на том, как переключить режим модему с ZeroCD, то есть виртуального CD-ROM, на, собственно, модем. Теперь поговорим о добавлении записей в файл 3g_dongle.cfg, который располагается по пути /system/etc/3g_dobgle.cfg. Данный файл конфигурации имеет следующую структуру:
[MF100]
dongle_name=MF100
production_name=MF100
vendor_name=zte
network_type=GSM_MODE
pid_vid_origin=0x19d22000
bcdDevice_origin=0x0
pid_vid_now=0x19d20031
bcdDevice_now=0x0
at_port=1
ppp_port=2
Давайте определим значение каждого параметра. Будьте внимательны, значения должны быть без пробелов, табуляции и «#» (этот символ сделает строку комментарием, то есть устройство не будет её считывать вовсе).
Итак, параметр production_name можно узнать, отправив через терминал AT команду AT+CGMM. О том, как отправлять AT-команды, мы разбирались ранее. Заголовок файла конфигурации, который указан в квадратных скобках, а также параметр dongle_name можно продублировать с параметра production_name.
Параметр vendor_name – это название компании-производителя модема, одним словом (например ZTE, huawei, ASB и так далее).
Параметр network_type сотовых сетей GSM и 3G указываем GSM_MODE. Возможны также следующие варианты: CDMA_MODE, TD_MODE.
pid_vid_now – это параметр, который равен написанным слитно VID и PID в режиме подключения «только модем», с приставкой перед ними «0х».
bcdDevice_origin и bcdDevice_now – можно оставить значение данных параметров, равное «0x0». Примечание: значение параметра bcdDevice соответствует версии USB, по которой подключается 3G-модем, то есть для USB 2.0 bcdDevice равен 0x0200, для USB 1.1 он равен 0x0110.
Параметры at_port и ppp_port – это порты, через которые работает модем. Данные порты мы ранее определили. Экспериментально можно подобрать, какой из портов, отозвавшихся на введенную в терминале АТ-команду, соответствует at_port, а какой – ppp_port. После перезагрузки делаем попытку подключения к Интернету. Примечание. В некоторых модемах (например, в ZTE MF100) только один из портов (ttyUSB2) ответил на отправленную в терминал АТ-команду. Этот порт соответствует значению ppp_port=2. Тогда значение для параметра at_port приходиться подбирать из оставшихся номеров портов 1 и 0 (то есть, ttyUSB1 и ttyUSB0). Если удалось подключиться к Интернету сторонними средствами (о чем мы поговорим немного ниже) .то значение параметра ppp_port равно номеру интерфейса ttyUSB, указанному в файле conf-pppd.
Не забываем проверить раздел [DIAL_NUMBER] в файле 3g_dongle.cfg. Для большинства GSM и 3G-модемов должна быть указана строка: wcdma=ATDT*99#
Для некоторых провайдеров мобильного интернета требуется другой номер дозвона (редко) или следующая строка:
wcdma=ATDT*99***1
После внесения изменений в файл 3g_dongle.cfg обязательно нужно перезагрузить устройство для корректной работы.
Теперь поговорим о подключении к сети Интернет при помощи сторонних средств. Для этого будем использовать демон протокола PPP /system/bin/pppd и программу, которая будет взаимодействовать с самим модемом /system/bin/chat. Создадим такие файлы:
/etc/ppp/peers/conf-pppd
/etc/ppp/peers/conf-chat
/sdcard/gscript/inet-ON.sh
/sdcard/gscript/inet-OFF.sh
Необходимые файлы скачиваем в следующем архиве:
http://narod.ru/disk/61422477001.27e29a725b1e5ad8e776ab29dbf0c2f6/modem_Scripts.7z.html
Параметры демона pppd (содержимое conf-pppd):
ttyUSB2
460800
defaultroute
noauth
noipdefault
user «user«
password «pass»
connect «/system/bin/chat -f /etc/ppp/peers/conf-chat»
Значение ttyUSB мы уже определили ранее, когда узнали номер порта в Android, через который модем взаимодействует с нашим устройством. Можно экспериментальным путем подобрать подходящий параметр. Параметры user и password – это имя пользователя и пароль (для примера, у оператора МТС оба параметра – «mts», у Билайн – «beeline»). Данный файл помещаем в директорию /etc/ppp/peers. Папки peers может не существовать – тогда создаем её. Важно – в целом, данных параметров бывает достаточно для установки постоянного стабильного соединения, но могут быть нюансы. Потому разберемся с файлом conf-chat. Это строки сценария chat. Содержимое файла имеет следующий вид:
TIMEOUT 3
ABORT `BUSY`
ABORT `ERROR`
ABORT `+CME ERROR:`
TIMEOUT 3
« `AT`
OK `ATZ`
OK `AT+CGDCONT=1,»IP»,»internet.beeline.ru»`
OK `ATDT*99#`
CONNECT «
В данном скрипте «internet.beeline.ru» соответствует оператору Билайн. Для МТС этот параметр будет равен «internet.mts.ru», а для Мегафон, соответственно, просто «internet». Как мы уже говорили, для некоторых операторов или отдельных моделей модемов может отличаться номер дозвона и, соответственно, команда ATDT.
inet-ON.sh – срипт запуска Интернет-соединения, имеет следующее содержание:
#!/system/bin/sh
pppd call conf-pppd
sleep 5
setprop net.dns1 8.8.8.8
setprop net.dns2 8.8.4.4
Если при вызове pppd используется такой параметр, как usepeerdns, то можно убрать строки с «setprop net.dns1» и «setprop net.dns2». Запускать подключение данным скриптом лучше, когда модем уже успешно зарегистрировался в сети, то есть индикатор горит зеленым или синим, в зависимости от модели.
Можно также подойти творчески к созданию скрипта подключения, и вписать туда, например, следующее:
#!/system/bin/sh
echo «Waiting ttyUSB0«
for i in 1 2 3 4 5 6 7 8 9 10; do
if [ -c /dev/ttyUSB0 ]; then
echo «Starting pppd»
pppd call conf-pppd
echo «Connecting…»
for i in 1 2 3 4 5 6 7 8 9 10; do
if ifconfig ppp0 2>/dev/null; then
setprop net.dns1 8.8.8.8
setprop net.dns2 8.8.4.4
echo «DNS servers: 8.8.8.8, 8.8.4.4»
break 2
else
sleep 3
fi
done
break
else
sleep 3
fi
done
sleep 5
ping -c 2 google.com && exit 0 || exit 1
Соответственно, ttyUSB0 можно поменять на любой другой порт, который стабильно создается системой, а «ifconfig ppp0» можно, в свою очередь, заменить на «ip a s ppp0». Строку с «ping», при желании, можно убрать вовсе.
Скрипт inet-OFF.sh, как нетрудно догадаться, отвечает за разрыв соединения. Он имеет следующий вид:
#!/system/bin/sh
busybox killall pppd
Команда, естественно, зависит от выполняющихся в системе команд, то есть может быть просто «killall pppd», а может быть «pkill pppd» и другие. Более радикальное решение, чем выполнение данного скрипта – банальное выдергивание модема из USB-разъема.
Для запуска скриптов по включению и отключению соединения можно использовать приложение GScript, тогда помещаем файлы со скриптами в директорию /sdcard/gscript. После установки и запуска программы, добавляем скрипты в меню, не забываем ставить галку возле «Needs SU?». После можно добавить ярлык на рабочий стол Android для быстрого запуска.
В разных системах, на разных устройствах и с разными модемами обычно используются одни и те же программы и скрипты. Однако, они могут быть расположены в разных местах.
Например, может быть ситуация, когда при подключении предусмотрено использование системой только файлов устройств /dev/ttyUSB. А для вашего модема создаются не /dev/ttyUSB, а /dev/ttyACM (такая ситуация складывается, например, с 3G-модемом ZTE MF192). Тогда выходом является создание символьных ссылок. Добавляем в начало скрипта запуска подключения такие строки (номера портов правим на нужные):
ln -s /dev/ttyACM0 /dev/ttyUSB0
ln -s /dev/ttyACM1 /dev/ttyUSB1
Иногда могут не создаваться файлы устройств /dev/ttyUSB. Тогда вводим в эмуляторе терминала такие команды:
su
echo «19d2 2000» > /sys/bus/usb-serial/drivers/option1/new_id
Здесь 19d2 меняем на, соответственно, значение VID подключенного модема, а 2000 — на значение PID.
Данные команды для корректной работы придется вводить после каждой перезагрузки устройства. Чтобы автоматизировать процесс, можно, например, добавить эту строку в конец тела скрипта /system/bin/preinstall.sh. Или же ищем в системе /system/etc/init.d/ и создаем там файл со следующим содержанием:
#!/system/bin/sh
echo «12d1 1506» > /sys/bus/usb-serial/drivers/option1/new_id
Опять же, вместо «12d1 1506» VID и PID подключенного модема.
С каким именем нужно сохранять файл зависит от подключенного модема и самого Android-девайса. Это может быть просто «11modem» или же другое название.
В том случае, если скрипты автоматически не переключают режим модема посредством usb_modeswitch, то нужно использовать команды:
su
usb_modeswitch -W -I -c /etc/usb_modeswitch.d/19d2_2000
Где 19d2_2000 – это значения VID и PID подключенного модема.
Или же:
su
usb_modeswitch –v 12d1 –p 14fe –V 12d1 –P 1506
Где параметры «-v» и «-V» отвечают за значение VID модема до и после переключения режима с ZeroCD на «Только модем», а «-p» и «-P», соответственно, определяют значение PID.
В модемах, выпущенных компанией, Huawei можно изменить порядок портов (ttyUSB), используя АТ-команду «AT^SETPORT».
Текущее состояние портов проверяется командой «AT^SETPORT»
Зачастую необходимо использовать следующую команду:
AT^SETPORT=»A1,A2;1,2,3,16,A1,A2″.
Или, иногда, такую:
AT^SETPORT=»A1,A2;3,2,1,16,A1,A2″.
После изменения порядка портов можно переподключить 3G-модем и снова проверить состояния при помощи команды «AT^SETPORT?».
Вот, в общем-то, и всё. Надеемся, данный цикл статей помог вам подключить ваш 3G-модем к планшету или любому другому Android-девайсу, и вы уже радуетесь Интернетом в любом месте, без привязки к свободным и бесплатным точкам доступа Wi-Fi.