1

Temat: Wsparcia dla modemów GSM w OpenWrt

Witam,

Bardzo cieszę się, że projekt prężnie się rozwija i pojawia się wsparcie dla coraz większej liczby modemów.
Jako że miałem okazję używać kilku modeli opisywanych w projekcie chciałbym dodać kilka uwag.

1. Novatel MC990D może być przełączony w tryb modemu za pomocą usb_modeswitch. Wystarczy tylko zmodyfikować plik konfiguracyjny 1410_5020:

DefaultVendor= 0x1410
DefaultProduct=0x5020
MessageContent="5553424312345678000000000000061b000000020000000000000000000000"

2. Porty modemów Option pracujących pod kontrolą HSO mogą być rozpoznane i automatycznie ustawione. Skrypt ze źródeł (ports.sh):

#!/bin/sh

#################################################################################################
#    Script: Ports.sh 
#    Purpose: Shows application or all ports for the hso driver
#    This script checks the sys folder (for newer driver versions) and the proc folder (for older driver versions)
#    Parameter all Shows all ports 
#    Parameter app Shows application port 
#    Author: J. Bellavia, D. Barow 
#################################################################################################

# checking for root
USERID=`id -u`
if [ "$USERID" != "0" ]
then
    echo "Need root permissions to run this script"
    exit
fi

#################################################################################################
#    METHOD:    application
#    PURPOSE:shows application interface
#################################################################################################
application()
{
    ###########################################################
    #searching for application port in the sys filesystem
    ###########################################################
    echo searching the application port in sys filesystem
    TTYS=`find /sys/class/tty -name "ttyHS*"`
    APP_PORT=""
    for i in $TTYS; do
        if [ `grep Application $i/hsotype` ]
        then    
        APP_PORT=$i
        found=1
        break
        #else
        #    echo The application port is not $i.
        fi
    done
    ####################
    #Found the app port?
    ####################
    if [ -z "$APP_PORT" ]
    then
        echo Did not find the the app port in sys
    else
        DEVICE=/dev/`echo $APP_PORT | cut -d/ -f5`
        echo The application port is $DEVICE.
    fi    

    ###########################################################
    #searching for application port in the proc filesystem
    ###########################################################
    if [ -z "$found" ]
    then
        echo searching in proc filesystem 
        TTYS=`find /proc/hso/devices -name "ttyHS*"`
        APP_PORT=""
        for i in $TTYS; do
            if [ `grep Application $i/hsotype` ]
            then
            APP_PORT=$i
            found=1
            break
            #else
            #    echo The application port is not $i.
            fi
        done
        ####################
        #Found the app port?
        ####################        
        if [ -z "$APP_PORT" ]
        then
            echo Did not find the the app port in proc
        else
            DEVICE=/dev/`echo $APP_PORT | cut -d/ -f5`
            echo The application port is $DEVICE.
        fi
    fi
    ###############################################################################
    #it can be that hso driver is not installed or that the device is not inserted 
    ###############################################################################
    if [ -z "$found" ]
    then
        echo Please check whether your device is installed and connected to the PC
    fi

}

#################################################################################################
#    METHOD:    all
#    PURPOSE:Shows portname for all ports
#################################################################################################
all()
{
    ###########################################################
    #searching for ports in the sys filesystem first
    ##########################################################
    echo searching in sys filesystem
    TTYS=`find /sys/class/tty -name "ttyHS*"`
    PORT=""
    for i in $TTYS; do
        CatType=`cat $i/hsotype`
        #echo Catype is $CatType
        PORT=$i
        DEVICE=/dev/`echo $PORT | cut -d/ -f5`
        if [ -n "$CatType" ]
        then
            echo The Device $DEVICE is the $CatType port.
            found=1        
        #else            
        fi
    done
    #####################################################################
    #searching for ports in the proc filesystem when device is not found
    #####################################################################
    if [ -z "$found" ]
    then
        echo searching in proc filesystem
        TTYS=`find /proc/hso/devices/ -name "ttyHS*"`
        PORT=""
        for i in $TTYS; do
            CatType=`cat $i/hsotype`
            #echo Catype is $CatType
            PORT=$i
            DEVICE=/dev/`echo $PORT | cut -d/ -f5`
            if [ -n "$CatType" ]
            then
                echo The Device $DEVICE is the $CatType port.
                found=1        
            #else        
            fi
        done
    fi    
    ###############################################################################
    #it can be that hso driver is not installed or that the device is not inserted 
    ###############################################################################

    if [ -z "$found" ]
    then
        echo Please check whether your device is installed and connected to the PC
    fi
}
#################################################################################################
#    METHOD:    usage
#    PURPOSE:
#################################################################################################
usage()
{
    echo Usage: $0 \(app\|all\)
}

#################################################################################################
# Choose your action
#################################################################################################
case "$1" in
    app)
        application
        ;;
    all)
        all
        ;;
    *)
        usage
        ;;
esac

3. Podłączając modemy Sierry poprzez moduł DirectIP żaden z interfejsów nie jest zajęty i może być wykorzystany do odczytywania informacji o modemie/połączeniu.

4. Problem z pojawieniem się modemu Vodafone K3760 można rozwiązać dodając sleep'a do skryptu /etc/hotplug.d/usb/20-modeswitch:

...
                # If a candidate is remaining, start usb-modeswitch
                [ -n "$configs" ] && {
                        sleep 1
                        log "$DEVICENAME: Selecting ${configs%% *} for mode switching"
                        $modeswitch -c "${configs%% *}"
                }
        }
fi

5. Moduły usb-storage oraz usb-serial mają ten sam "priorytet" podczas ładowania (60) i jeśli ładujemy moduł usb-serial z parametrami vendor, product to interfejs storage jest niepoprawnie załadowany poprzez moduł usb-serial. W takim przypadku moduł usb-storage powinien być załadowany wcześniej niż usb-serial (lub usb-serial załadowany później niż usb-storage).

6. Nie wiem czy to kogoś zainteresuje ale istnieje możliwość wgrania dowolnej zawartości na wirtualny napęd modemu (nie dla wszystkich modemów: http://www.bez-kabli.pl/viewtopic.php?t=25692). Można by to wykorzystać w przypadku routerów z małą pamięcią jeśli bazowy obraz miałby wsparcie dla usb oraz systemu plików na wirtualnym napędzie.

frutis

2

Odp: Wsparcia dla modemów GSM w OpenWrt

Tak w ogóle to mógłbym chyba zrobić automatyczne rozpoznawanie portu na którym można pogadać z modemem. Przez proste odpytanie wszystkich interfejsów po kolei, tak po prostu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Wsparcia dla modemów GSM w OpenWrt

Może to być trochę problematyczne ponieważ niektóre interfejsy działają tak jak interfejs diagnostyczny tylko używany jest inny protokół (QMI lub DM - http://blogs.gnome.org/dcbw/2010/04/15/ … protocols/). W przypadku gtcom powoduje to czasami zawieszenie aplikacji.

4

Odp: Wsparcia dla modemów GSM w OpenWrt

Wiem. I dlatego też od samego początku projektu użytkownik musi samodzielnie ustawić port. Tym bardziej że niekoniecznie musi być tylko jeden modem (np. ja używam 2 jednocześnie smile)

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Wsparcia dla modemów GSM w OpenWrt

Najlepszym rozwiązaniem byłaby modyfikacja modułów usb-serial/option tak żeby załadowane interfejsy posiadały dodatkową informację o typie (tak jak jest w przypadku HSO). Ale na to chyba nie ma co liczyć smile

6

Odp: Wsparcia dla modemów GSM w OpenWrt

Można by też wykorzystać fakt, że interfejs - modem ma zawsze 2 wejścia i jedno wyjście (tak to się chyba nazywa):

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1464 Rev= 0.00
S:  Manufacturer=Vodafone Group (Huawei)
S:  Product=Vodafone Mobile Broadband (Huawei)
C:* #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbserial_generic
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbserial_generic
E:  Ad=83(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbserial_generic
E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbserial_generic
E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

Ale jak widać nie jest to regułą ponieważ w przypadku mojego modemu K4505 są dwa takie interfejsy: ttyUSB0 i ttyUSB1. Ale mogło by to zawęzić krąg poszukiwań w tym przypadku smile

7

Odp: Wsparcia dla modemów GSM w OpenWrt

Różnie bywa. W E170 też są tylko dwa. Na razie nie sprawia problemu przejechanie wszystkich i sprawdzenie gdzie odpowiada na polecenia.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8 (edytowany przez frutis 2010-11-25 21:27:16)

Odp: Wsparcia dla modemów GSM w OpenWrt

Modem odpowiada na komendy AT na interfejsie modemu i diagnostycznym. Połączyć można się tylko na interfejsie modemu. W ten sposób można to odróżnić (dla modemu K3760 interfejs modemu to ttyUSB9 - jeśli modem jest obsługiwany przez usb-serial).

9

Odp: Wsparcia dla modemów GSM w OpenWrt

usb_wwan to nowa wersja usb-serial?

10

Odp: Wsparcia dla modemów GSM w OpenWrt

Generalnie tak. Ale zanim openwrt dojdzie to nowszych wersji kernela to kilka lat minie smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.