Re: [OpenWrt-Devel] [PATCH] comgt: add hso support
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 000..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 000..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
[OpenWrt-Devel] [PATCH] comgt: add hso support
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 000..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' +SAYService 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 000..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)) + 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 + sleep 2 + rm -f $outputfile + ( USE_APN=$apn MODE=$service_mode /usr/sbin/chat -E -v -V -f $chat $device $device ) 2 $outputfile +