Signed-off-by: Filip Moc <l...@moc6.cz>
---

Notes:
    This moves enablemodem from ramips to new package adb-enablemodem.
    New adb-enablemodem uses modem's id rather than main board's name so it 
could
    possibly work even on different boards without need to change anything.
    
    Fixes:
     - Problem when modem is not responding causing adb to wait indefinitely and
       blocking boot process.
     - Asterisk path expansion.
     - Possible race condition when there are more devices attached.
    
    New features:
     - Logging
     - Stopping httpd
    
    v2->v3:
     - Less insane code for closing filedescriptors
    
    v3->v4:
     - Rebased for new code

 package/network/utils/adb-enablemodem/Makefile     | 26 +++++++++
 .../utils/adb-enablemodem/files/adb-enablemodem    | 64 ++++++++++++++++++++++
 target/linux/ar71xx/image/tp-link.mk               |  2 +-
 .../linux/ramips/base-files/etc/init.d/enablemodem | 17 ------
 target/linux/ramips/image/mt7620.mk                |  2 +-
 5 files changed, 92 insertions(+), 19 deletions(-)
 create mode 100644 package/network/utils/adb-enablemodem/Makefile
 create mode 100644 package/network/utils/adb-enablemodem/files/adb-enablemodem
 delete mode 100755 target/linux/ramips/base-files/etc/init.d/enablemodem

diff --git a/package/network/utils/adb-enablemodem/Makefile 
b/package/network/utils/adb-enablemodem/Makefile
new file mode 100644
index 0000000..3ffc64a
--- /dev/null
+++ b/package/network/utils/adb-enablemodem/Makefile
@@ -0,0 +1,26 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=adb-enablemodem
+PKG_VERSION:=2017-03-05
+PKG_RELEASE:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/adb-enablemodem
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=WWAN
+  TITLE:=Enable modem via adb
+  DEPENDS:=+adb
+endef
+
+define Build/Compile
+        true
+endef
+
+define Package/adb-enablemodem/install
+       $(INSTALL_DIR)  $(1)/etc/init.d
+       $(INSTALL_BIN)  ./files/adb-enablemodem $(1)/etc/init.d/adb-enablemodem
+endef
+
+$(eval $(call BuildPackage,adb-enablemodem))
diff --git a/package/network/utils/adb-enablemodem/files/adb-enablemodem 
b/package/network/utils/adb-enablemodem/files/adb-enablemodem
new file mode 100644
index 0000000..ddfc681
--- /dev/null
+++ b/package/network/utils/adb-enablemodem/files/adb-enablemodem
@@ -0,0 +1,64 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+
+adb_exec() {
+       adb -s "$serial" shell "( $1 ) >/dev/null 2>&1"'; printf "\nEXIT_CODE: 
%i\n" $?' | head -c 64 | grep -qx 'EXIT_CODE: 0\r\?'
+}
+
+enablemodem_do() {
+       logger -t adb-enablemodem 'INFO: waiting for device'
+       adb wait-for-device
+       serial="$(adb get-serialno)"
+
+       vendor_id="$(adb -s "$serial" shell 'uci get product.usb.vid' | head -c 
16 | tr -d '\r\n')"
+       product_id="$(adb -s "$serial" shell 'uci get product.usb.pid' | head 
-c 16 | tr -d '\r\n')"
+
+       case "$vendor_id:$product_id" in
+       "0x2357:0x000D") # TP-LINK LTE MODULE
+               case "$1" in
+               start)
+                       if adb_exec '
+                               chmod +x /WEBSERVER/www/cgi-bin/*
+                               fds="$(ls /proc/$$/fd | grep -v "^[012]$")"
+                               for fd in $fds; do
+                                       eval "exec $fd>&-"
+                               done
+                               start-stop-daemon -x httpd -S -- -h 
/WEBSERVER/www/
+                       '; then
+                               logger -t adb-enablemodem 'INFO: httpd on modem 
started'
+                       else
+                               logger -t adb-enablemodem 'ERROR: failed to 
start httpd on modem'
+                       fi
+                       
option_newid='/sys/bus/usb-serial/drivers/option1/new_id'
+                       if [ -e "$option_newid" ]; then
+                               printf '%s %s' "$vendor_id" "$product_id" > 
"$option_newid"
+                       fi
+                       ;;
+               stop)
+                       if adb_exec 'start-stop-daemon -x httpd -K'; then
+                               logger -t adb-enablemodem 'INFO: httpd on modem 
stopped'
+                       else
+                               logger -t adb-enablemodem 'ERROR: failed to 
stop httpd on modem'
+                       fi
+                       ;;
+               esac
+               ;;
+       *)
+               logger -t adb-enablemodem "ERROR: unknown device 
$vendor_id:$product_id"
+               ;;
+       esac
+}
+
+start() {
+       ( enablemodem_do start ) &
+}
+
+stop() {
+       ( enablemodem_do stop ) &
+}
+
+restart() {
+       ( enablemodem_do stop; enablemodem_do start ) &
+}
+
diff --git a/target/linux/ar71xx/image/tp-link.mk 
b/target/linux/ar71xx/image/tp-link.mk
index f27ceec..95bde34 100644
--- a/target/linux/ar71xx/image/tp-link.mk
+++ b/target/linux/ar71xx/image/tp-link.mk
@@ -455,7 +455,7 @@ TARGET_DEVICES += tl-mr3020-v1 tl-mr3040-v1 tl-mr3040-v2 
tl-mr3220-v1 tl-mr3220-
 define Device/tl-mr6400-v1
   $(Device/tplink-8mlzma)
   DEVICE_TITLE := TP-LINK TL-MR6400 v1
-  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-net kmod-usb-net-rndis 
kmod-usb-serial kmod-usb-serial-option adb
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-net kmod-usb-net-rndis 
kmod-usb-serial kmod-usb-serial-option adb-enablemodem
   BOARDNAME := TL-MR6400
   DEVICE_PROFILE := TLMR6400
   TPLINK_HWID := 0x64000001
diff --git a/target/linux/ramips/base-files/etc/init.d/enablemodem 
b/target/linux/ramips/base-files/etc/init.d/enablemodem
deleted file mode 100755
index ba54cc4..0000000
--- a/target/linux/ramips/base-files/etc/init.d/enablemodem
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=99
-
-start() {
-       . /lib/ramips.sh
-
-       local board=$(ramips_board_name)
-       if [ $board = "mr200" ]; then
-               adb wait-for-device
-               adb shell chmod +x /WEBSERVER/www/cgi-bin/*
-               adb shell httpd -h /WEBSERVER/www/ &
-               echo "2357 000d" > /sys/bus/usb-serial/drivers/option1/new_id
-               sleep 2
-               adb kill-server
-       fi
-}
diff --git a/target/linux/ramips/image/mt7620.mk 
b/target/linux/ramips/image/mt7620.mk
index 73f91cf..e0f563e 100644
--- a/target/linux/ramips/image/mt7620.mk
+++ b/target/linux/ramips/image/mt7620.mk
@@ -58,7 +58,7 @@ define Device/ArcherMR200
   KERNEL := $(KERNEL_DTB)
   KERNEL_INITRAMFS := $(KERNEL_DTB) | tplink-header ArcherMR200 -c
   IMAGE/sysupgrade.bin := append-kernel | tplink-header ArcherMR200 -j -s | 
append-metadata
-  DEVICE_PACKAGES := kmod-usb2 kmod-usb-net kmod-usb-net-rndis kmod-usb-serial 
kmod-usb-serial-option adb
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-net kmod-usb-net-rndis kmod-usb-serial 
kmod-usb-serial-option adb-enablemodem
   DEVICE_TITLE := TP-Link ArcherMR200
 endef
 TARGET_DEVICES += ArcherMR200
-- 
2.1.4


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to