comgt: add ncm proto support
This will not work for all board/dongle combinations until we hit 3.17. Signed-off-by: Matti Laakso <malaakso@elisanet.fi> SVN-Revision: 42866
This commit is contained in:
parent
d83efbadee
commit
51a5ff0947
@ -40,6 +40,12 @@ $(call Package/comgt/Default)
|
|||||||
DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-sierrawireless +kmod-usb-net +kmod-usb-net-sierrawireless
|
DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-sierrawireless +kmod-usb-net +kmod-usb-net-sierrawireless
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/comgt-ncm
|
||||||
|
$(call Package/comgt/Default)
|
||||||
|
TITLE+=NCM 3G/4G Support
|
||||||
|
DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-option +kmod-usb-net +kmod-usb-net-cdc-ncm +kmod-usb-net-huawei-cdc-ncm
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/comgt/description
|
define Package/comgt/description
|
||||||
comgt is a scripting language interpreter useful for establishing
|
comgt is a scripting language interpreter useful for establishing
|
||||||
communications on serial lines and through PCMCIA modems as well as GPRS
|
communications on serial lines and through PCMCIA modems as well as GPRS
|
||||||
@ -86,5 +92,14 @@ define Package/comgt-directip/install
|
|||||||
$(INSTALL_BIN) ./files/directip.sh $(1)/lib/netifd/proto/directip.sh
|
$(INSTALL_BIN) ./files/directip.sh $(1)/lib/netifd/proto/directip.sh
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/comgt-ncm/install
|
||||||
|
$(INSTALL_DIR) $(1)/etc/gcom
|
||||||
|
$(INSTALL_DATA) ./files/ncm.json $(1)/etc/gcom/ncm.json
|
||||||
|
$(INSTALL_DATA) ./files/runcommand.gcom $(1)/etc/gcom/runcommand.gcom
|
||||||
|
$(INSTALL_DIR) $(1)/lib/netifd/proto
|
||||||
|
$(INSTALL_BIN) ./files/ncm.sh $(1)/lib/netifd/proto/ncm.sh
|
||||||
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,comgt))
|
$(eval $(call BuildPackage,comgt))
|
||||||
$(eval $(call BuildPackage,comgt-directip))
|
$(eval $(call BuildPackage,comgt-directip))
|
||||||
|
$(eval $(call BuildPackage,comgt-ncm))
|
||||||
|
@ -8,7 +8,7 @@ find_3g_iface() {
|
|||||||
|
|
||||||
local proto
|
local proto
|
||||||
config_get proto "$cfg" proto
|
config_get proto "$cfg" proto
|
||||||
[ "$proto" = 3g ] || return 0
|
[ "$proto" = 3g ] || [ "$proto" = ncm ] || return 0
|
||||||
|
|
||||||
# bypass state vars here because 00-netstate could clobber .device
|
# bypass state vars here because 00-netstate could clobber .device
|
||||||
local dev=$(uci_get network "$cfg" device)
|
local dev=$(uci_get network "$cfg" device)
|
||||||
|
49
package/network/utils/comgt/files/ncm.json
Normal file
49
package/network/utils/comgt/files/ncm.json
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"huawei": {
|
||||||
|
"initialize": [
|
||||||
|
"AT",
|
||||||
|
"ATZ",
|
||||||
|
"ATQ0",
|
||||||
|
"ATV1",
|
||||||
|
"ATE1",
|
||||||
|
"ATS0=0"
|
||||||
|
],
|
||||||
|
"modes": {
|
||||||
|
"preferlte": "AT^SYSCFGEX=\\\"030201\\\",3fffffff,2,4,7fffffffffffffff,,",
|
||||||
|
"preferumts": "AT^SYSCFGEX=\\\"0201\\\",3fffffff,2,4,7fffffffffffffff,,",
|
||||||
|
"lte": "AT^SYSCFGEX=\\\"03\\\",3fffffff,2,4,7fffffffffffffff,,",
|
||||||
|
"umts": "AT^SYSCFGEX=\\\"02\\\",3fffffff,2,4,7fffffffffffffff,,",
|
||||||
|
"gsm": "AT^SYSCFGEX=\\\"01\\\",3fffffff,2,4,7fffffffffffffff,,",
|
||||||
|
"auto": "AT^SYSCFGEX=\\\"00\\\",3fffffff,2,4,7fffffffffffffff,,"
|
||||||
|
},
|
||||||
|
"connect": "AT^NDISDUP=1,1,\\\"${apn}\\\"${username:+,\\\"$username\\\"}${password:+,\\\"$password\\\"}${auth:+,$auth}",
|
||||||
|
"disconnect": "AT^NDISDUP=1,0"
|
||||||
|
},
|
||||||
|
"SAMSUNG": {
|
||||||
|
"initialize": [
|
||||||
|
"AT",
|
||||||
|
"AT+CGREG=2",
|
||||||
|
"AT+CFUN=5",
|
||||||
|
"AT+MODESELECT=3",
|
||||||
|
"AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\""
|
||||||
|
],
|
||||||
|
"modes": {
|
||||||
|
"umts": "AT+CHANGEALLPATH=1"
|
||||||
|
},
|
||||||
|
"connect": "AT+CGATT=1",
|
||||||
|
"disconnect": "AT+CGATT=0"
|
||||||
|
},
|
||||||
|
"Sony": {
|
||||||
|
"initialize": [
|
||||||
|
"AT+CFUN=1",
|
||||||
|
"AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\"",
|
||||||
|
"AT*EIAAUW=1,1,\\\"${username}\\\",\\\"${password}\\\",${auth:-00111}"
|
||||||
|
],
|
||||||
|
"modes": {
|
||||||
|
"umts": "AT+CFUN=6",
|
||||||
|
"gsm": "AT+CFUN=5"
|
||||||
|
},
|
||||||
|
"connect": "AT*ENAP=1,1",
|
||||||
|
"disconnect": "AT*ENAP=0"
|
||||||
|
}
|
||||||
|
}
|
156
package/network/utils/comgt/files/ncm.sh
Normal file
156
package/network/utils/comgt/files/ncm.sh
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /lib/functions.sh
|
||||||
|
. ../netifd-proto.sh
|
||||||
|
init_proto "$@"
|
||||||
|
|
||||||
|
proto_ncm_init_config() {
|
||||||
|
no_device=1
|
||||||
|
available=1
|
||||||
|
proto_config_add_string "device:device"
|
||||||
|
proto_config_add_string apn
|
||||||
|
proto_config_add_string auth
|
||||||
|
proto_config_add_string username
|
||||||
|
proto_config_add_string password
|
||||||
|
proto_config_add_string pincode
|
||||||
|
proto_config_add_string delay
|
||||||
|
proto_config_add_string mode
|
||||||
|
}
|
||||||
|
|
||||||
|
proto_ncm_setup() {
|
||||||
|
local interface="$1"
|
||||||
|
|
||||||
|
local manufacturer initialize setmode connect
|
||||||
|
|
||||||
|
local device apn auth username password pincode delay mode
|
||||||
|
json_get_vars device apn auth username password pincode delay mode
|
||||||
|
|
||||||
|
[ -n "$device" ] || {
|
||||||
|
echo "ncm[$$]" "No control device specified"
|
||||||
|
proto_notify_error "$interface" NO_DEVICE
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
[ -e "$device" ] || {
|
||||||
|
echo "ncm[$$]" "Control device not valid"
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
[ -n "$apn" ] || {
|
||||||
|
echo "ncm[$$]" "No APN specified"
|
||||||
|
proto_notify_error "$interface" NO_APN
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -n "$delay" ] && sleep "$delay"
|
||||||
|
|
||||||
|
manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'`
|
||||||
|
[ $? -ne 0 ] && {
|
||||||
|
echo "ncm[$$]" "Failed to get modem information"
|
||||||
|
proto_notify_error "$interface" GETINFO_FAILED
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
json_load "$(cat /etc/gcom/ncm.json)"
|
||||||
|
json_select "$manufacturer"
|
||||||
|
[ $? -ne 0 ] && {
|
||||||
|
echo "ncm[$$]" "Unsupported modem"
|
||||||
|
proto_notify_error "$interface" UNSUPPORTED_MODEM
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
json_get_values initialize initialize
|
||||||
|
for i in $initialize; do
|
||||||
|
eval COMMAND="$i" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
|
||||||
|
echo "ncm[$$]" "Failed to initialize modem"
|
||||||
|
proto_notify_error "$interface" INITIALIZE_FAILED
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -n "$pincode" ] && {
|
||||||
|
PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
|
||||||
|
echo "ncm[$$]" "Unable to verify PIN"
|
||||||
|
proto_notify_error "$interface" PIN_FAILED
|
||||||
|
proto_block_restart "$interface"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[ -n "$mode" ] && {
|
||||||
|
json_select modes
|
||||||
|
json_get_var setmode "$mode"
|
||||||
|
COMMAND="$setmode" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
|
||||||
|
echo "ncm[$$]" "Failed to set operating mode"
|
||||||
|
proto_notify_error "$interface" SETMODE_FAILED
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
json_get_var connect connect
|
||||||
|
eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
|
||||||
|
echo "ncm[$$]" "Failed to connect"
|
||||||
|
proto_notify_error "$interface" CONNECT_FAILED
|
||||||
|
proto_set_available "$interface" 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "ncm[$$]" "Connected, starting DHCP"
|
||||||
|
proto_init_update "*" 1
|
||||||
|
proto_send_update "$interface"
|
||||||
|
|
||||||
|
json_init
|
||||||
|
json_add_string name "${interface}_dhcp"
|
||||||
|
json_add_string ifname "@$interface"
|
||||||
|
json_add_string proto "dhcp"
|
||||||
|
json_close_object
|
||||||
|
ubus call network add_dynamic "$(json_dump)"
|
||||||
|
|
||||||
|
json_init
|
||||||
|
json_add_string name "${interface}_dhcpv6"
|
||||||
|
json_add_string ifname "@$interface"
|
||||||
|
json_add_string proto "dhcpv6"
|
||||||
|
json_close_object
|
||||||
|
ubus call network add_dynamic "$(json_dump)"
|
||||||
|
}
|
||||||
|
|
||||||
|
proto_ncm_teardown() {
|
||||||
|
local interface="$1"
|
||||||
|
|
||||||
|
proto_init_update "*" 0
|
||||||
|
proto_send_update "$interface"
|
||||||
|
|
||||||
|
local manufacturer disconnect
|
||||||
|
|
||||||
|
local device
|
||||||
|
json_get_vars device
|
||||||
|
|
||||||
|
echo "ncm[$$]" "Stopping network"
|
||||||
|
|
||||||
|
manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'`
|
||||||
|
[ $? -ne 0 ] && {
|
||||||
|
echo "ncm[$$]" "Failed to get modem information"
|
||||||
|
proto_notify_error "$interface" GETINFO_FAILED
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
json_load "$(cat /etc/gcom/ncm.json)"
|
||||||
|
json_select "$manufacturer" || {
|
||||||
|
echo "ncm[$$]" "Unsupported modem"
|
||||||
|
proto_notify_error "$interface" UNSUPPORTED_MODEM
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
json_get_var disconnect disconnect
|
||||||
|
COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
|
||||||
|
echo "ncm[$$]" "Failed to disconnect"
|
||||||
|
proto_notify_error "$interface" DISCONNECT_FAILED
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_protocol ncm
|
26
package/network/utils/comgt/files/runcommand.gcom
Normal file
26
package/network/utils/comgt/files/runcommand.gcom
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# run AT-command from environment
|
||||||
|
opengt
|
||||||
|
set com 115200n81
|
||||||
|
set senddelay 0.02
|
||||||
|
waitquiet 1 0.2
|
||||||
|
flash 0.1
|
||||||
|
|
||||||
|
:start
|
||||||
|
send "sending -> "
|
||||||
|
send $env("COMMAND")
|
||||||
|
send "^n"
|
||||||
|
|
||||||
|
waitfor 15 "OK","ERR","ERROR"
|
||||||
|
if % = 0 goto continue
|
||||||
|
if % = 1 goto error
|
||||||
|
if % = 2 goto error
|
||||||
|
|
||||||
|
print "Timeout running AT-command\n"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
:error
|
||||||
|
print "Error running AT-command\n"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
:continue
|
||||||
|
exit 0
|
Loading…
x
Reference in New Issue
Block a user