Hi, some comments inline
On 22/02/2015 10:19, Cezary Jackiewicz wrote: > Add HSO support to comgt. This is work of Kyklas (see > https://dev.openwrt.org/ticket/6995), tested with Option GTM382. > > Signed-off-by: Cezary Jackiewicz <cezary.jackiew...@gmail.com> > --- > > diff --git a/package/network/utils/comgt/Makefile > b/package/network/utils/comgt/Makefile > index 8fcf54e..1e12b68 100644 > --- a/package/network/utils/comgt/Makefile > +++ b/package/network/utils/comgt/Makefile > @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk > > PKG_NAME:=comgt > PKG_VERSION:=0.32 > -PKG_RELEASE:=25 > +PKG_RELEASE:=26 > > PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz > PKG_SOURCE_URL:=@SF/comgt > @@ -47,6 +47,12 @@ $(call Package/comgt/Default) > DEPENDS:=+comgt > endef > > +define Package/comgt-hso > +$(call Package/comgt/Default) > + TITLE+=HSO Support > + DEPENDS:=+comgt +kmod-usb-net +kmod-usb-net-hso > +endef > + > define Package/comgt/description > comgt is a scripting language interpreter useful for establishing > communications on serial lines and through PCMCIA modems as well as GPRS > @@ -101,6 +107,17 @@ define Package/comgt-ncm/install > $(INSTALL_BIN) ./files/ncm.sh $(1)/lib/netifd/proto/ncm.sh > endef > > +define Package/comgt-hso/install > + $(INSTALL_DIR) $(1)/etc/chatscripts > + $(INSTALL_DATA) ./files/hso.chat $(1)/etc/chatscripts/hso.chat > + $(INSTALL_DATA) ./files/hsohup.chat $(1)/etc/chatscripts/hsohup.chat > + $(INSTALL_DIR) $(1)/etc/gcom > + $(INSTALL_DATA) ./files/setuser.gcom $(1)/etc/gcom/setuser.gcom > + $(INSTALL_DIR) $(1)/lib/netifd/proto > + $(INSTALL_BIN) ./files/hso.sh $(1)/lib/netifd/proto/hso.sh > +endef > + > $(eval $(call BuildPackage,comgt)) > $(eval $(call BuildPackage,comgt-directip)) > $(eval $(call BuildPackage,comgt-ncm)) > +$(eval $(call BuildPackage,comgt-hso)) > diff --git a/package/network/utils/comgt/files/hso.chat > b/package/network/utils/comgt/files/hso.chat > new file mode 100644 > index 0000000..cb87d5a > --- /dev/null > +++ b/package/network/utils/comgt/files/hso.chat > @@ -0,0 +1,13 @@ > +ABORT BUSY > +ABORT 'NO CARRIER' > +ABORT ERROR > +REPORT CONNECT > +TIMEOUT 10 > +"" "ATZ" > +OK 'AT+CGDCONT=2,"IP","$USE_APN"' > +SAY "Service Mode $MODE" > +TIMEOUT 30 > +OK "AT_OPSYS=$MODE,2" > +OK "AT_OWANCALL=2,1,0" > +OK "\d\d\d\d\d\dAT_OWANDATA=2" > +OK "" > diff --git a/package/network/utils/comgt/files/hso.sh > b/package/network/utils/comgt/files/hso.sh > new file mode 100644 > index 0000000..5f10420 > --- /dev/null > +++ b/package/network/utils/comgt/files/hso.sh > @@ -0,0 +1,135 @@ > +#!/bin/sh > +INCLUDE_ONLY=1 > + > +. ../netifd-proto.sh > +init_proto "$@" > + > +proto_hso_init_config() { > + > + no_device=1 > + available=1 > + > + proto_config_add_string "device" > + proto_config_add_string "maxwait" > + proto_config_add_string "apn" > + proto_config_add_string "pincode" > + proto_config_add_int "mtu" > + proto_config_add_string "username" > + proto_config_add_string "password" > + proto_config_add_string "ifname" > +} > + > + > +proto_hso_setup() { > + > + local iface="$1" > + local chat="/etc/chatscripts/hso.chat" > + > + json_get_var device device > + json_get_var maxwait maxwait > + maxwait=${maxwait:-20} > + while [ ! -e "$device" -a $maxwait -gt 0 ];do # wait for driver loading > to catch up > + maxwait=$(($maxwait - 1)) This bit is correct with the maxwait logic, but below ... > + sleep 1 > + done > + > + json_get_var apn apn > + json_get_var pincode pincode > + json_get_var mtu mtu > + json_get_var service service > + json_get_var username username > + json_get_var password password > + json_get_type ifnametype ifname > + > + if [ "$ifnametype" = "array" ] > + then > + json_select ifname > + json_get_var ifname 1 > + json_select ".." > + fi > + > + if [ "$ifnametype" = "string" ] > + then > + json_get_var ifname ifname > + fi > + > + # set pin if configured > + if [ ! -z "$pincode" ] > + then > + PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom > || { > + echo "$iface (hso): Failed to set the PIN code." > + proto_notify_error "$iface" PIN_FAILED > + return 1 > + } > + fi > + > + # set username and password if configured > + if [ -n "$username" -a -n "$password" ] > + then > + USER="$username" PASS="$password" gcom -d "$device" -s > /etc/gcom/setuser.gcom || { > + echo "$iface (hso): Failed to set username and > password." > + proto_notify_error "$iface" AUTH_FAILED > + return 1 > + } > + fi > + > + case "$service" in > + umts_only) service_mode=1;; > + gprs_only) service_mode=0;; > + *) service_mode=3;; > + esac > + > + local pip counter > + local outputfile="/tmp/hsoout.$$" > + while [ -z "$pip" -a "$counter" != "---------------" ] > + do there is a weird way to solve the problem. > + sleep 2 > + rm -f $outputfile > + ( USE_APN=$apn MODE=$service_mode /usr/sbin/chat -E -v -V -f > $chat <$device > $device ) 2> $outputfile > + iserror=`grep '^ERROR' $outputfile` > + if [ -z "$iserror" ] > + then > + pip="`grep '^_OWANDATA' $outputfile | cut -d, -f2`" > + gw="`grep '^_OWANDATA' $outputfile | cut -d, -f3`" > + ns1="`grep '^_OWANDATA' $outputfile | cut -d, -f4`" > + ns2="`grep '^_OWANDATA' $outputfile | cut -d, -f5`" > + fi > + > + counter="${counter}-" > + done > + > + rm -f $outputfile > + > + if [ -z $pip ] > + then > + echo "$iface (hso): Failed to connect and obtain IP address." missing a proto_notify_error here > + return 1 > + fi > + > + proto_init_update $ifname 1 > + proto_set_keep 1 > + proto_add_ipv4_address "$pip" 32 > + proto_add_dns_server "$ns1" > + proto_add_dns_server "$ns2" > + proto_add_ipv4_route "0.0.0.0" 0 $gw > + proto_add_data > + json_add_string "ppp-type" "hso" > + proto_close_data > + proto_send_update "$iface" > + > + touch /var/run/$ifname.pid > +} > + > + > +proto_hso_teardown() { > + > + local config="$1" > + local chat="/etc/chatscripts/hsohup.chat" > + > + json_get_var device device > + /usr/sbin/chat -v -f $chat <$device > $device > + > + killall gcom >/dev/null 2>/dev/null we should really track the pid and killt hat instead of all gcoms. although this is not critical, have a look at how other gcom scripts do it John > +} > + > +add_protocol hso > diff --git a/package/network/utils/comgt/files/hsohup.chat > b/package/network/utils/comgt/files/hsohup.chat > new file mode 100644 > index 0000000..9e82183 > --- /dev/null > +++ b/package/network/utils/comgt/files/hsohup.chat > @@ -0,0 +1,8 @@ > +ABORT BUSY > +ABORT 'NO CARRIER' > +ABORT ERROR > +REPORT CONNECT > +SAY "Hanging up..." > +TIMEOUT 30 > +"" "AT_OWANCALL=2,0" > +OK "" > diff --git a/package/network/utils/comgt/files/setuser.gcom > b/package/network/utils/comgt/files/setuser.gcom > new file mode 100644 > index 0000000..511d90b > --- /dev/null > +++ b/package/network/utils/comgt/files/setuser.gcom > @@ -0,0 +1,29 @@ > +# set username and password > +opengt > + set com 115200n81 > + set senddelay 0.02 > + waitquiet 1 0.2 > + flash 0.1 > + > +:start > + print "Trying to set username and password\n" > + send "AT$QCPDPP=1,1," > + send $env("USER") > + send "," > + send $env("PASS") > + send "^m" > + > + waitfor 15 "OK","ERR","ERROR" > + if % = 0 goto continue > + if % = 1 goto modeerror > + if % = 2 goto modeerror > + > + print "Timeout setting username and password!\n" > + exit 1 > + > +:modeerror > + print "Error setting username and password!\n" > + exit 1 > + > +:continue > + exit 0 > > _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel