From 4ba2f4dc6357e85a8dbc98266a14197fb058159c Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Thu, 22 Dec 2016 22:12:44 +0100 Subject: [PATCH] DWR-512: adding wwan support for the dwr-512 3G modem 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 --- package/network/utils/comgt/files/ncm.json | 11 +++++++++ package/network/utils/comgt/files/ncm.sh | 27 ++++++++++++++++++++-- package/network/utils/wwan/files/wwan.sh | 26 ++++++++++----------- target/linux/ramips/image/rt305x.mk | 4 ++-- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/package/network/utils/comgt/files/ncm.json b/package/network/utils/comgt/files/ncm.json index 8f74e173d14e..bbdb30c5eeb4 100644 --- a/package/network/utils/comgt/files/ncm.json +++ b/package/network/utils/comgt/files/ncm.json @@ -63,5 +63,16 @@ }, "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}" } } diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh index 73d1e05e3fcb..60b39655ec7d 100644 --- a/package/network/utils/comgt/files/ncm.sh +++ b/package/network/utils/comgt/files/ncm.sh @@ -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() { diff --git a/package/network/utils/wwan/files/wwan.sh b/package/network/utils/wwan/files/wwan.sh index 6b33600b32c4..2e9d73f1e2c7 100755 --- a/package/network/utils/wwan/files/wwan.sh +++ b/package/network/utils/wwan/files/wwan.sh @@ -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 } diff --git a/target/linux/ramips/image/rt305x.mk b/target/linux/ramips/image/rt305x.mk index 5876dcb986bc..dc09765c7cac 100644 --- a/target/linux/ramips/image/rt305x.mk +++ b/target/linux/ramips/image/rt305x.mk @@ -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 -- 2.30.2