» F.A.Q.

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

Подключение официально неподдерживаемых 3G-модемов к Android-девайсам Часть 3 MINI

В заключительной статье из цикла о подключении 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.

Igor Kovtoniuk
2014-04-22 02:16:24
Эти методы работают когда в системе присутствуют ttyUSB создание только 3G модемом, но стоит добавить еще один например USB to COM-port который создаст свой /dev/ttyUSB№ девайс, как вся "хрупкость" алгоритмов "привязанных" к ppp порту и AT порту в конфигурационных файлах конкретно к указанным номерам этих ttyUSB"№" нашего модема после перезагрузки, или пере присоединения этих устройств к сожалению часто теряют свою работоспособность.