Jelajahi Sumber

add support for hso umts modems

if you like to use an usb umts modem with hso chipset,
this is the support for it.
use following in /etc/network/interfaces:
auto hso0
iface hso0 inet manual
        pin xxxx
        apn foo.bar

credentials go to freewrt 1.0 supporters...
Waldemar Brodkorb 14 tahun lalu
induk
melakukan
3c70077f30

+ 4 - 0
mk/modules.mk

@@ -1176,6 +1176,10 @@ $(eval $(call KMOD_template,USB_PEGASUS,usb-pegasus,\
 	$(MODULES_DIR)/kernel/drivers/net/usb/pegasus \
 ,75))
 
+$(eval $(call KMOD_template,USB_HSO,usb-hso,\
+	$(MODULES_DIR)/kernel/drivers/net/usb/hso \
+,75))
+
 $(eval $(call KMOD_template,SND_USB_AUDIO,snd-usb-audio,\
 	$(MODULES_DIR)/kernel/sound/usb/snd-usb-lib \
 	$(MODULES_DIR)/kernel/sound/usb/snd-usb-audio \

+ 2 - 3
package/comgt/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		comgt
 PKG_VERSION:=		0.32
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		db2452680c3d953631299e331daf49ef
 PKG_DESCR:=		3G/GPRS datacard control tool
 PKG_SECTION:=		console
@@ -21,12 +21,11 @@ $(eval $(call PKG_template,COMGT,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG
 
 CONFIG_STYLE:=		manual
 INSTALL_STYLE:=		manual
-
 ALL_TARGET=		comgt
 
 do-install:
 	${INSTALL_DIR} ${IDIR_COMGT}/usr/bin ${IDIR_COMGT}/etc/comgt
 	${INSTALL_BIN} ${WRKBUILD}/comgt ${IDIR_COMGT}/usr/bin/comgt
-	${INSTALL_DATA} ./files/dial.comgt ${IDIR_COMGT}/etc/comgt/dial.comgt
+	${INSTALL_DATA} ./files/*.comgt ${IDIR_COMGT}/etc/comgt/
 
 include ${TOPDIR}/mk/pkg-bottom.mk

+ 34 - 0
package/comgt/files/hsoauth.comgt

@@ -0,0 +1,34 @@
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+
+:start
+ flash 0.1
+
+:getuser
+ let $u=$env("USER")
+ let a=len($u)
+ if a=0 goto continue
+
+:getpass
+ let $p=$env("PASS")
+
+:auth
+ print "User: ",$u,"\n"
+ print "Pass: ",$p,"\n"
+ send "AT$QCPDPP=1,1,\""
+ send $p
+ send "\",\""
+ send $u
+ send "\"^m"
+ waitfor 2 "OK"
+ if % = -1 goto error
+ if % = 0 goto continue
+
+:error
+ exit 1
+
+:continue
+ exit 0
+

+ 19 - 0
package/comgt/files/hsoconnect.comgt

@@ -0,0 +1,19 @@
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+ flash 0.1
+
+:start
+ send "AT_OWANCALL=1,1,0^m"
+ waitfor 2 "OK"
+ if % = -1 goto error
+ if % = 0 goto continue
+
+ 
+:error
+ exit 1
+
+:continue
+ exit 0
+

+ 27 - 0
package/comgt/files/hsodata.comgt

@@ -0,0 +1,27 @@
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+ flash 0.1
+
+ let c=1
+:start
+ send "AT_OWANDATA=1^m"
+ waitfor 2 "ERROR"
+ if % = 0 goto repeat
+ send "AT_OWANDATA=1^m"
+ get 2 "^m" $s
+ get 2 "^m" $s
+ print $s
+ print "\n"
+ exit 0
+
+:repeat
+ sleep 3
+ inc c
+ if c > 15 goto error
+ goto start
+
+:error
+ exit 1
+

+ 19 - 0
package/comgt/files/hsodisconnect.comgt

@@ -0,0 +1,19 @@
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+ flash 0.1
+
+:start
+ send "AT_OWANCALL=1,0,0^m"
+ waitfor 2 "OK"
+ if % = -1 goto error
+ if % = 0 goto continue
+
+ 
+:error
+ exit 1
+
+:continue
+ exit 0
+

+ 14 - 0
package/comgt/files/hsostatus.comgt

@@ -0,0 +1,14 @@
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+ flash 0.1
+
+:start
+ send "AT_OWANCALL?^m"
+ get 2 "^m" $s
+ get 2 "^m" $s
+ print $s
+ print "\n"
+ exit 0
+

+ 34 - 0
package/comgt/files/waitready.comgt

@@ -0,0 +1,34 @@
+# wait till the sim is ready
+opengt
+ set com 115200n81
+ set senddelay 0.02
+ waitquiet 1 0.2
+ flash 0.1
+:start
+ print "Waiting for SIM..."
+ let c=0
+:waitready
+ send "AT+CPIN?^m"
+ waitfor 2 "SIM PUK","SIM PIN","READY","ERROR","ERR"
+ if % = -1 goto tryagain
+ if % = 0 goto simready
+ if % = 1 goto simready
+ if % = 2 goto simready
+ if % = 3 goto tryagain
+ if % = 4 goto tryagain
+
+:tryagain
+ if c > 120 goto waittimeout
+ let c=c+2
+ print "."
+ goto waitready
+
+:waittimeout
+ print " Timeout
+"
+ exit 1
+
+:simready
+ print " OK
+"
+ exit 0

+ 1 - 1
package/pkgmaker

@@ -12,7 +12,7 @@ GMAKE="$GMAKE --no-print-directory"
 typeset -L$x_cols pbar
 
 # check for trailing whitespace
-grep -H "[[:space:]]$" */Makefile && print "Found trailing whitespace, please fix"
+grep -H '[[:space:]]$' */Makefile && print "Found trailing whitespace, please fix"
 
 # build a cache of “ipkg package name” → “package conf option” for
 # use with dependency resolution

+ 9 - 7
package/ppp/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		ppp
 PKG_VERSION:=		2.4.5
-PKG_RELEASE:=		3
+PKG_RELEASE:=		4
 PKG_MD5SUM:=		4621bc56167b6953ec4071043fe0ec57
 PKG_DESCR:=		Point-to-Point Protocol software
 PKG_SECTION:=		net
@@ -14,6 +14,7 @@ PKG_DEPENDS:=		kmod-ppp
 PKG_URL:=		http://ppp.samba.org
 PKG_SITES:=		ftp://ftp.samba.org/pub/ppp/
 PKG_DEPENDS_PPPOE:=	kmod-pppoe
+PKG_DEPENDS_UMTS:=	comgt
 
 include ${TOPDIR}/mk/package.mk
 
@@ -24,7 +25,7 @@ $(eval $(call PKG_template,PPP_MOD_RADIUS,ppp-mod-radius,${PKG_VERSION}-${PKG_RE
 $(eval $(call PKG_template,PPP_MOD_CHAT,ppp-mod-chat,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,PPP_MOD_PPPDUMP,ppp-mod-pppdump,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,PPP_MOD_PPPSTATS,ppp-mod-pppstats,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
-$(eval $(call PKG_template,PPP_MOD_PPPUMTS,ppp-mod-pppumts,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+$(eval $(call PKG_template,PPP_MOD_PPPUMTS,ppp-mod-pppumts,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS_UMTS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIGURE_ENV+=		UNAME_S="Linux"
 XAKE_FLAGS+=		CC="${TARGET_CC}" \
@@ -104,12 +105,13 @@ mod-pppstats-install:
 
 mod-pppumts-install:
 	${INSTALL_DIR} ${IDIR_PPP_MOD_PPPUMTS}/etc/ppp/templates
-	${INSTALL_DIR} ${IDIR_PPP_MOD_PPPUMTS}/etc/ppp/ip-{down,up}.d
 	${INSTALL_DATA} ./files/etc/ppp/templates/umts \
 		${IDIR_PPP_MOD_PPPUMTS}/etc/ppp/templates/
-	${INSTALL_BIN} ./files/etc/ppp/ip-up.d/umts \
-		${IDIR_PPP_MOD_PPPUMTS}/etc/ppp/ip-up.d/
-	${INSTALL_BIN} ./files/etc/ppp/ip-down.d/umts \
-		${IDIR_PPP_MOD_PPPUMTS}/etc/ppp/ip-down.d/
+	$(INSTALL_DIR) ${IDIR_PPP_MOD_PPPUMTS}/etc/network/if-pre-up.d
+	$(INSTALL_DIR) ${IDIR_PPP_MOD_PPPUMTS}/etc/network/if-post-down.d
+	$(INSTALL_BIN) ./files/hso.if-up \
+		${IDIR_PPP_MOD_PPPUMTS}/etc/network/if-pre-up.d/06-hso
+	$(INSTALL_BIN) ./files/hso.if-down \
+		${IDIR_PPP_MOD_PPPUMTS}/etc/network/if-post-down.d/06-hso
 
 include ${TOPDIR}/mk/pkg-bottom.mk

+ 12 - 0
package/ppp/files/hso.if-down

@@ -0,0 +1,12 @@
+#!/bin/sh
+
+[ "$IFACE" == "hso0" ] || exit 0
+
+[ -f /tmp/hso-connect ] || exit 0
+
+PID=$(cat /tmp/hso-connect)
+ps | grep "$PID" | grep -q hso-connect.sh && kill "$PID"
+comgt -s -d /dev/ttyHS0 /etc/comgt/hsodisconnect.comgt
+rm -f /tmp/hso-connect
+ip address flush hso0
+ip link set hso0 down

+ 66 - 0
package/ppp/files/hso.if-up

@@ -0,0 +1,66 @@
+#!/bin/sh
+
+[ "$IFACE" == "hso0" ] || exit 0
+
+TTY=${IF_HSO_DEVICE:-/dev/ttyHS0}
+# wait for card to initialize
+COUNT=0
+while [ $((COUNT++)) -lt 20 ]; do
+	[ -c "$TTY" ] && break
+	[ $COUNT -eq 20 ] && {
+		logger "$0: '$TTY' not found"
+		exit 1
+	}
+	sleep 1
+done
+
+if [ "$IF_PIN" ]; then
+	COMGTPIN="$IF_PIN" comgt -d "$TTY" PIN
+fi
+
+if [ "$IF_APN" ]; then
+	COMGTAPN="$IF_APN" comgt -d "$TTY" APN
+fi
+
+# only run once!
+[ -f /tmp/hso-connect ] && exit 0
+
+while :
+do
+        # get connection status
+        STATUS=$(comgt -s -d "$TTY" /etc/comgt/hsostatus.comgt |
+                 tr -d " " |
+                 grep -v ^$ |
+                 cut -d , -f 2)
+        # dial if connection status is disabled
+        if [ "$STATUS" -eq "0" ] ; then
+                comgt -s -d "$TTY" /etc/comgt/hsoconnect.comgt
+                DATA=$(comgt -s -d "$TTY" /etc/comgt/hsodata.comgt)
+		if [ "$?" -ne 0 ] ; then
+			continue
+		fi
+                DATA=$(echo $DATA |
+                       tr -d " " |
+                       grep -v ^$)
+                IP=$(echo $DATA | cut -d , -f 2)
+                NS1=$(echo $DATA | cut -d , -f 4)
+                NS2=$(echo $DATA | cut -d , -f 5)
+                ip address flush dev hso0 2> /dev/null
+                ip address add "$IP/32" dev hso0
+                ip link set hso0 up
+		def=$(ip route show |grep default | wc -l)
+		[ $def -eq 1 ] && ip route del default
+                ip route add default dev hso0
+                echo "nameserver $NS1" >  /etc/resolv.conf
+                echo "nameserver $NS2" >> /etc/resolv.conf
+		. /etc/rc.conf
+		# get time via ntpclient if available
+		[ -x /usr/sbin/ntpclient ] && ntpclient -s -h pool.ntp.org
+		# get time via rdate if available
+		[ -x /usr/sbin/rdate ] && rdate -nv pool.ntp.org
+		# restart ntpd when enabled
+		test x"${ntpd:-NO}" = x"NO" || /etc/init.d/ntpd restart
+        fi
+        sleep 10
+done &
+echo $! > /tmp/hso-connect

+ 6 - 6
package/ppp/files/ppp.pre-up

@@ -93,21 +93,21 @@ umts)
 	comgt -s /etc/comgt/waitready.comgt -d $IF_PPP_DEVICE || exit 1
 
 	# set pincode
-	if [ "$IF_UMTS_PINCODE" ]; then
-		COMGTPIN="$IF_UMTS_PINCODE" comgt PIN -d $IF_PPP_DEVICE || ERROR=1
+	if [ "$IF_PIN" ]; then
+		COMGTPIN="$IF_PIN" comgt PIN -d $IF_PPP_DEVICE || exit 1
 	fi
 
 	# set APN
-	COMGTAPN="$IF_UMTS_APN" comgt APN -d $IF_PPP_DEVICE || ERROR=1
+	COMGTAPN="$IF_APN" comgt APN -d $IF_PPP_DEVICE || exit 1
 
 	# set umts/gprs mode if available (Option cards only)
-	case "$IF_UMTS_MODE" in
+	case "$IF_MODE" in
 		gprs_only)	comgt 2G -d $IF_PPP_DEVICE ;;
 		umts_only)	comgt 3G -d $IF_PPP_DEVICE ;;
 		umts_first)	comgt 3G2G -d $IF_PPP_DEVICE ;;
 		"")		;;
-		*)		echo "unknown umts-mode, exiting"
-				ERROR=1
+		*)		echo "unknown mode, exiting"
+				exit 1
 				;;
 	esac
 	;;

+ 4 - 0
target/linux/config/Config.in.misc

@@ -4,6 +4,10 @@ config ADK_LINUX_INITRAMFS_BUILTIN
 	boolean
 	default n
 
+config ADK_KERNEL_RFKILL
+	boolean
+	default n
+
 menu "Miscellaneous devices support"
 
 config ADK_KERNEL_WATCHDOG

+ 8 - 0
target/linux/config/Config.in.usb

@@ -169,6 +169,14 @@ config ADK_KPACKAGE_KMOD_USB_PEGASUS
 	default n
 	depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
 
+config ADK_KPACKAGE_KMOD_USB_HSO
+	prompt "kmod-usb-hso...................... Support for USB HSO devices"
+	tristate
+	select ADK_KERNEL_RFKILL
+	select ADK_KPACKAGE_KMOD_USB_STORAGE
+	default n
+	depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
+
 config ADK_KPACKAGE_KMOD_USB_PRINTER
 	prompt "kmod-usb-printer.................. Support for USB printers"
 	tristate