DWR-512: adding wwan support for the dwr-512 3G modem
authorGiuseppe Lippolis <giu.lippolis@gmail.com>
Thu, 22 Dec 2016 21:12:44 +0000 (22:12 +0100)
committerFelix Fietkau <nbd@nbd.name>
Thu, 25 May 2017 17:01:08 +0000 (19:01 +0200)
This PR allow the 3G modem embedded in the DWR-512 to be managed
by the wwan-ncm scripts. The modem will use the usb-option and
usb-cdc-ether drivers.
The DWR-512 DT is updated accordingly.

Signed-off-by: Giuseppe Lippolis <giu.lippolis@gmail.com>
package/network/utils/comgt/files/ncm.json
package/network/utils/comgt/files/ncm.sh
package/network/utils/wwan/files/wwan.sh
target/linux/ramips/image/rt305x.mk

index 8f74e17..bbdb30c 100644 (file)
                },
                "connect": "AT*ENAP=1,${profile}",
                "disconnect": "AT*ENAP=0"
+       },
+       "mtk1": {
+               "initialize": [
+                       "AT+CFUN=1"
+               ],
+               "configure": [
+                       "AT+CGDCONT=${profile},\\\"${pdptype}\\\",\\\"${apn}\\\",0,0"
+               ],
+               "connect": "AT+CGACT=1,${profile}",
+               "finalize": "AT+CGDATA=\\\"M-MBIM\\\",${profile},1",
+               "disconnect": "AT+CGACT=0,${profile}"
        }
 }
index 73d1e05..60b3965 100644 (file)
@@ -25,7 +25,7 @@ proto_ncm_init_config() {
 proto_ncm_setup() {
        local interface="$1"
 
-       local manufacturer initialize setmode connect ifname devname devpath
+       local manufacturer initialize setmode connect finalize ifname devname devpath
 
        local device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
        json_get_vars device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
@@ -105,9 +105,21 @@ proto_ncm_setup() {
                        return 1
                }
        }
+
+       json_get_values configure configure
+       echo "Configuring modem"
+       for i in $configure; do
+               eval COMMAND="$i" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
+                       echo "Failed to configure modem"
+                       proto_notify_error "$interface" CONFIGURE_FAILED
+                       return 1
+               }
+       done
+
        [ -n "$mode" ] && {
                json_select modes
                json_get_var setmode "$mode"
+               echo "Setting mode"
                eval COMMAND="$setmode" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
                        echo "Failed to set operating mode"
                        proto_notify_error "$interface" SETMODE_FAILED
@@ -118,14 +130,16 @@ proto_ncm_setup() {
 
        echo "Starting network $interface"
        json_get_vars connect
+       echo "Connecting modem"
        eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
                echo "Failed to connect"
                proto_notify_error "$interface" CONNECT_FAILED
                return 1
        }
 
+       json_get_vars finalize
+
        echo "Setting up $ifname"
-       
        proto_init_update "$ifname" 1
        proto_add_data
        json_add_string "manufacturer" "$manufacturer"
@@ -150,6 +164,15 @@ proto_ncm_setup() {
                proto_add_dynamic_defaults
                ubus call network add_dynamic "$(json_dump)"
        }
+
+       [ -n "$finalize" ] && {
+               eval COMMAND="$finalize" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
+                       echo "Failed to configure modem"
+                       proto_notify_error "$interface" FINALIZE_FAILED
+                       return 1
+               }
+       }
+
 }
 
 proto_ncm_teardown() {
index 6b33600..2e9d73f 100755 (executable)
@@ -66,15 +66,15 @@ proto_wwan_setup() {
                }
        }
 
-       [ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep wwan); do
+       [ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep -e wwan -e usb); do
                [ -z "$ctl_device" ] || continue
                driver=$(grep DRIVER /sys/class/net/$net/device/uevent | cut -d= -f2)
                case "$driver" in
                qmi_wwan|cdc_mbim)
                        ctl_device=/dev/$(ls /sys/class/net/$net/device/usbmisc)
                        ;;
-               sierra_net|*cdc_ncm)
-                       ctl_device=/dev/$(cd /sys/class/net/$net/; find ../../../ -name ttyUSB* |xargs basename | head -n1)
+               sierra_net|cdc_ether|*cdc_ncm)
+                       ctl_device=/dev/$(cd /sys/class/net/$net/; find ../../../ -name ttyUSB* |xargs -n1 basename | head -n1)
                        ;;
                *) continue;;
                esac
@@ -93,11 +93,11 @@ proto_wwan_setup() {
        uci_set_state network $interface dat_device "$dat_device"
 
        case $driver in
-       qmi_wwan)       proto_qmi_setup $@ ;;
-       cdc_mbim)       proto_mbim_setup $@ ;;
-       sierra_net)     proto_directip_setup $@ ;;
-       comgt)          proto_3g_setup $@ ;;
-       *cdc_ncm)       proto_ncm_setup $@ ;;
+       qmi_wwan)               proto_qmi_setup $@ ;;
+       cdc_mbim)               proto_mbim_setup $@ ;;
+       sierra_net)             proto_directip_setup $@ ;;
+       comgt)                  proto_3g_setup $@ ;;
+       cdc_ether|*cdc_ncm)     proto_ncm_setup $@ ;;
        esac
 }
 
@@ -108,11 +108,11 @@ proto_wwan_teardown() {
        dat_device=$(uci_get_state network $interface dat_device)
 
        case $driver in
-       qmi_wwan)       proto_qmi_teardown $@ ;;
-       cdc_mbim)       proto_mbim_teardown $@ ;;
-       sierra_net)     proto_mbim_teardown $@ ;;
-       comgt)          proto_3g_teardown $@ ;;
-       *cdc_ncm)       proto_ncm_teardown $@ ;;
+       qmi_wwan)               proto_qmi_teardown $@ ;;
+       cdc_mbim)               proto_mbim_teardown $@ ;;
+       sierra_net)             proto_mbim_teardown $@ ;;
+       comgt)                  proto_3g_teardown $@ ;;
+       cdc_ether|*cdc_ncm)     proto_ncm_teardown $@ ;;
        esac
 }
 
index 5876dcb..dc09765 100644 (file)
@@ -300,8 +300,8 @@ define Device/dwr-512-b
   DTS := DWR-512-B
   IMAGE_SIZE := 7700k
   DEVICE_TITLE := D-Link DWR-512 B
-  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-i2c-core kmod-i2c-ralink kmod-spi-dev \
-                       kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan comgt
+  DEVICE_PACKAGES := kmod-usb2 kmod-spi-dev kmod-usb-serial kmod-usb-serial-option \
+                       kmod-usb-net kmod-usb-net-cdc-ether comgt-ncm
 endef
 TARGET_DEVICES += dwr-512-b