Dlaczego modemy nie chcą działać na tabletach?
(opis na podstawie zwykłych modemów Huawei, nie HiLink)
Jest kilka etapów po podłączeniu, które muszą zadziałać:
Przełączenie modemu w tryb modemu (RAS) przez usb_modeswitch.
W skrócie: nasz modem (np. E3131s-2 i E353s-2) przedstawia się np. przy pomocy VID_PID: 12d1_14fe i usb_modeswitch przełącza go na 12d1_1506 i to już musimy traktować jak inne urządzenie.
Właściwe pliki dla usb_modeswitch muszą być tylko dla pierwszego vid_pid, przed przełączeniem np. w lokalizacji:
/etc/usb_modeswitch.d/12d1_14fe
o zawartości odpowiedniej dla modemu, w tym wypadku na A73 jest już właściwy:
########################################################
# T-Mobile NL (Huawei E352)
DefaultVendor= 0x12d1
DefaultProduct=0x14fe
TargetVendor= 0x12d1
TargetProduct= 0x1506
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
CheckSuccess=20
Rozpoznanie urządzenia przez sterownik.
Sterownik w tablecie nie rozpoznaje urządzenia po przełączeniu (na przykładzie E3131s-2 i E353s-2) tj. 12d1_1506 więc należy je dodać komendą (np. przy użyciu aplikacji Terminal Emulator lub Better Terminal):
echo "12d1 1506" > /sys/bus/usb-serial/drivers/option1/new_id
(można ją dodac do autostartu na końcu pliku /system/bin/preinstall.sh i potem uruchomić ponownie tablet)
W tym momencie powinna być możliwość dodania i wybrania Punktu Dostępowego (APN) oraz pola MCC i MNC powinny być uzupełnione automatycznie (260 i drugi to numer sieci). Oznacza to, że modem został właściwie rozpoznany przez tablet.
Ważny numer portu(kolejność) dla modemu oraz interfejsu PCUI.
Otóż modem po podłączeniu przedstawia kilka urządzeń na określonych portach. Możemy to sprawdzić komendą AT wysłaną do modemu np. podłączonego do komputera:
AT^GETPORTMODE
na przykładowej odpowiedzi widzimy, że modem jest na porcie ttyUSB0 a PCUI na ttyUSB3:
^GETPORTMODE: TYPE: WCDMA: huawei,MDM:0,NDIS:1,DIAG:2,PCUI:3,CDROM:4,SD:5
Następnie mamy dwie możliwości, albo ustawić tablet żeby łączył się na właściwych portach lub przestawić kolejność w modemie tak aby zgadzało się z tymi portami, na których tablet chce się łączyć.
Jak sprawdzić na jakich portach tablet chce się łączyć?
Można sprawdzić w pliku /etc/3g_dongle.cfg w konfiguracjach modemów producenta naszego modemu (mamy modem ZTE to patrzymy na te konfiguracje, Huawei to patrzymy na huawei).
w tym wypadku modem musi być na porcie 2 (MDM) a interfejs dla komend AT na porcie 1 (PC UI Interface). W ten sposób możemy odczytać kolejność portów dla modemów ZTE (pozostaje też zgadywać), dla
Huawei istnieje odpowiednia komenda. Tworząc własną konfigurację możemy wykorzystać te porty.
Najpierw usuń wszystkie logi z:
/data/local/logcat/
uruchom ponownie tablet, podłacz modem, wybierz APN i czekaj parę minut. Teraz możesz zajrzeć lub skopiować logi. Szukaj PPPD, powinno się łączyć na numerze portu, który odpowiada modemowi więc w tym przypadku:
I/pppd ( 783): PORT: /dev/ttyUSB0 115200
Jest prawidłowe bo modem znajduje się na pierwszej pozycji (liczymy od zera po średniku).
Jeżeli jednak byłoby np.:
I/pppd ( 1005): PORT: /dev/ttyUSB2 115200
To nalezy zmienić kolejność portów w tablecie (zalecane) lub bezpośrednio w modemie.
Jak zmienić kolejność portów w tablecie? (zalecane)
W GoClever A73 jest plik /etc/3g_dongle.cfg a w nim odpowiednia konfiguracja. Od razu dodam, że niektóre modemy ignorują ustawienia z tego pliku i trzeba bezpośrednio w modemie zmienić kolejność (dla przykładu E353s-2 ignoruje).
Dla przykładu wpis dla E3131 wygląda tak:
[E3131]
dongle_name=E3131
production_name=E3131
vendor_name=huawei
network_type=GSM_MODE
pid_vid_origin=0x12d114fe
bcdDevice_origin=0x0
pid_vid_now=0x12d11506
bcdDevice_now=0x0
at_port=3
ppp_port=0
Gdzie pid_vid_origin to przed przełączeniem a pid_vid_now po przełączeniu przez usb_modeswitch.
at_port to port dla PCUI a ppp_port to port dla modemu (MDM). Dla E3131 to koniec konfiguracji, bo już będzie działał ale E353 zignoruje te ustawienia i trzeba zmienić porty w modemie.
Jak zmienić kolejność portów w modemie?
Na początku powiem, że z moich obserwacji logów wynika, że tablet GoClever A73 chce się łączyć z modemem E353s-2: modem na ttyUSB2 a interfejs AT czyli PCUI na porcie ttyUSB0. O ile port dla modemu jesteśmy w stanie odczytać z logów (pppd) to z interfejsem AT(pcui) musimy kombinować.
Aktualną kolejność da się odczytać przy pomocy komendy AT:
AT^SETPORT?
odpowiedź:
^SETPORT:A1,A2;1,16,3,2,A1,A2
(porty liczymy od zera czyli ttyUSB0 po średniku, to co przed średnikiem zostawiamy w spokoju)
Więc zróbmy tak aby modem był na porcie numer 2 a pcui na porcie numer 0. Ważne! niczego nie ujmujemy anie nie dodajemy, przestawiamy tylko kolejność!
AT^SETPORT="A1,A2;2,16,1,3,A1,A2"
wydajemy tę komendę modemowi na porcie COM odpowiadającym interfejsowi pcui zgodnie ze screenem:
legenda oznaczeń:
^SETPORT:A1: CDROM
^SETPORT:A2: SD
^SETPORT:A: BLUE TOOTH
^SETPORT:B: FINGER PRINT
^SETPORT:D: MMS
^SETPORT:E: PC VOICE
^SETPORT:1: MODEM
^SETPORT:2: PCUI
^SETPORT:3: DIAG
^SETPORT:4: PCSC
^SETPORT:5: GPS
^SETPORT:6: GPS CONTROL
^SETPORT:16: NCM