Pull to refresh

Настраиваем SkyLink модем на Android-планшете

imageУдивительно, но когда у меня возник вопрос — как подключить SkyLink-модем (AnyData ADU-310A) к китайскому планшету на Android 1.5 (увы), я ничего не смог найти в Интернет.
Но вот — время потрачено, проблема решена и сейчас хочу поделиться каким образом мне удалось это сделать.

Суть метода в кратце

  1. Подключение с помощью pppd
  2. Для этого создается скрипт подключения /system/etc/ppp/peers/cdma и скрипт управления модемом /system/etc/ppp/cdma.chat
  3. Прописывается логин\парол подключения в /system/etc/ppp/pap-secrets (chap-secrets)
  4. Редактируется скрипт установки сетевых параметров /system/etc/ppp/ip-up

Теперь по пунктам и подробно


Нам потребуется Android SDK, в состав него входят необходимые утилиты — ADB и DDMS.
Я предполагаю, что вы знаете что такое Android SDK и как его настроить на компьютере, а планшет у вас рутованый и в настройках подключения на планшете стоит галка «USB Debug», поэтому не буду акцентировать внимание на этих деталях.
Итак, за работу.

1. Подключаем планшет к компьютеру, выполняем команду «adb remount». Этой командой мы переводим системный раздел (он еще называется "/system partition") из режима «read-only» в «read-write». Это нужно, т.к. нам придется править и создавать файлы в системной области.
Если вы видите сообщение «error: device not found», увы, придется разбираться с драйверами и настройкой SDK.

2. Теперь нужно определить, по какому адресу наш модем распознается системой. Для этого подключаем CDMA модем в USB-Host нашего планшета, ждем секунд 10, запускаем «adb shell»и видим линуксовую консоль.
Набираем в консоле команду «dmesg», чтобы посмотреть системные события. Нас интересуют последние строки, они будут примерно такие:

<6>usb 1-1.2: new full speed USB device using pxa27x-ohci and address 3
<3>usb 1-1.2: device v16d5 p6501 is not supported
<6>usb 1-1.2: configuration #1 chosen from 1 choice
<6>option 1-1.2:1.0: GSM modem (1-port) converter detected
<6>usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
<6>option 1-1.2:1.1: GSM modem (1-port) converter detected
<6>usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1

Как видно из примера, наш модем смонтировался по двум адресам — ttyUSB0 и ttyUSB1. Почему так, надеюсь, мне расскажут более знающие читатели. Нам же принципиальны сами эти адреса, вернее даже только один — ttyUSB0.

3. Запускаем ddms.bat, в блоке «devices» должно отображаться ваше устройство, выберите его. Открываем меню Device/File Explorer.
Скачиваем на компьютер файл "/system/build.prop". Теперь открываем его текстовым редактором (файл наверняка будет заблокирован, поэтому нужно в ddms встать на другой каталог, чтобы файл освободился на компьютере) и ищем примерно такие строки:

rild.libpath=/system/lib/libhuawei_ril.so
rild.libargs=-d /dev/ttyUSB5

Первая строка — это путь к драйверу RIL (Radio Interface Layer), который является прослойкой между установленным оборудованием и телефонными функциями Android.
Вторая строка — это параметр драйвера RIL, который определяет по какому адресу общаться с оборудованием.
Поскольку есть мнение, что драйвер RIL полностью перехватывает управление оборудованием, а нам нужно будет обращаться к модему, не мудрствуя лукаво укажем заведомо неправильный адрес устройства (например, ttyUSB5, как у меня).

4. Создаем у себя 2 файла: «cdma» и «cdma.chat» (если хотите по-другому назвать — пожалуйста, это не принципиально).
Содержимое файла «cdma» должно быть таким:

debug
ttyUSB0
115200
modem
noipdefault
defaultroute
ipcp-accept-local
lcp-echo-interval 60
lcp-echo-failure 5
usepeerdns
nopcomp
noauth
noaccomp
nodetach
user "mobile"
connect "chat -s -S -v -f /system/etc/ppp/cdma.chat"


Обратите внимание на вторую строку — ttyUSB0 — это тот адрес, который мы определили на 2 шаге.

Содержимое файла «cdma.chat»:
'' ATZ OK ATE0X1V1&C0 OK AT+IPR=230400 OK AT$QCDMR=115200 OK AT+CRM=1 OK AT+CTA=20 OK AT+CQD=255 OK AT+CSQ? OK AT+CSS? OK ATDT#777 CONNECT

Все в одну строку. Первые два символа — две одинарные (а не двойные!) кавычки.

5. Теперь укажем под какими пользователями нужно авторизовываться. Для этого из каталога "/system/etc/ppp/" скачаем два файла: «chap-secrets» и «pap-secrets». (вообще говоря, как я понимаю, достаточно пользователей указать только pap-secrets).
В оба файла добавляем последней строкой следующий текст:

mobile * internet *

6. Теперь сделаем так, чтобы автоматически заполнялись параметры подключения (DNSы, там и пр.). Скачаем же файл "/system/etc/ppp/ip-up" (кстати, этот файл выполняется каждый раз после успешного установления соединения) и поправим его таким образом:

#!/system/bin/sh
#это что было до редактирования (строки закомментировал):
#/system/bin/setprop "net.interfaces.defaultroute" "gprs"
#/system/bin/setprop "net.gprs.dns1" "$DNS1"
#/system/bin/setprop "net.gprs.dns2" "$DNS2"
#/system/bin/setprop "net.gprs.local-ip" "$IPLOCAL"
#/system/bin/setprop "net.gprs.remote-ip" "$IPREMOTE"
#это добавленные строки:
/system/bin/setprop "net.interfaces.defaultroute" "ppp0"
/system/bin/setprop "net.ppp0.dns1" "$DNS1"
/system/bin/setprop "net.ppp0.dns2" "$DNS2"
/system/bin/setprop "net.ppp0.local-ip" "$IPLOCAL"
/system/bin/setprop "net.ppp0.remote-ip" "$IPREMOTE"
/system/bin/setprop "net.dns1" "$DNS1"
/system/bin/setprop "net.dns2" "$DNS2"
exit 0


7. Все измененные файлы загрузим обратно в планшет:
/system/build.prop
/system/etc/ppp/ip-up
/system/etc/ppp/cdma.chat
/system/etc/ppp/pap-secrets
/system/etc/ppp/chap-secrets
/system/etc/ppp/peers/cdma

Кстати, проверьте, что у файла ip-up есть права на выполнение.

8. Теперь открываем консоль (adb shell), подключаем модем и выполняем команду «pppd call cdma». Если вы видите ответ типа:
send (AT+CSS?^M)
expect (OK)
^M
^M
?, 0^M
^M
OK
-- got it

send (ATDT#777^M)
expect (CONNECT^M)
^M
^M
CONNECT^M
-- got it

А на модеме зажегся синенький светодиод и любимый Хабр стал открываться в Opera Mini при выключенном WiFi соединении — значит, у вас все получилось.

Что дальше?


Успешное подключение к сети через CDMA-модем — это лишь первый шаг, потому что дальше нужно решать следующие задачи:
1. Удобный запуск скрипта подключения. Тут могу поделиться опытом — нужно поставить Gscript Lite, создать там скрипт подключения и вынести ярлык на рабочий стол.
2. Правильное отключение. Hint: использовать автоматически выполняемый при разрыве соединения скрипт ip-down.
3. Автоматическая переустановка соединения при разрыве. Нужно разбираться, как это сделать. Принципиально — можно.
4. Отображение уровня сигнала и прочие прелести, свойственные интерфейсу Android. Как это сделать — я не знаю. Вероятно, нужно где-то найти или написать собственный RIL-драйвер для AnyData-модема. Найти пока не удалось.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.