I have a wonderful OpenWRT on a nice TPLink 842 router, and I want to add band selection for LTE and selective UMTS - 900 and 2100 Mhz.
I have E3276 (not in NCM mode!) and several 3G (E1552,E1762) modems. I had to add the folowing:
and in
To see how gcom sets the mode, add in
And you can monitor by
I have E3276 (not in NCM mode!) and several 3G (E1552,E1762) modems. I had to add the folowing:
/lib/netifd/proto/3g.sh
:
elif echo "$cardinfo" | grep -q "Sierra Wireless"; then
SIERRA=1
elif echo "$cardinfo" | grep -q "MF823"; then
CODE="6"
case "$service" in
umts_only) CODE="5";;
umts900_only) CODE="5";;
umts2100_only) CODE="5";;
gprs_only) CODE="4";;
gprs900_only) CODE="4";;
gprs1800_only) CODE="4";;
lte_only) CODE="7";;
lte_b7_only) CODE="7";;
lte_b20_only) CODE="7";;
esac
export MODE="AT+ZPREFMODE=${CODE}"
elif echo "$cardinfo" | grep -qi "E327"; then
# E327 means both E3276 and E3272 at least; correct for your's 4G model
# 00000100 is EGSM900, 00000200 is primary GSM900
BAND="3FFFFFFF"
LTEBAND="7FFFFFFFFFFFFFFF"
case "$service" in
umts_only) CODE="02";;
umts900_only) CODE="02"
BAND="0002000000000000";;
umts2100_only) CODE="02"
BAND="00400000";;
gprs_only) CODE="01";;
gprs900_only) CODE="01"
BAND="00000100";;
gprs1800_only) CODE="01"
BAND="00000080";;
lte_only) CODE="03";;
lte_b7_only) CODE="03"
LTEBAND="40";;
lte_b20_only) CODE="03"
LTEBAND="80000";;
*) CODE="00";;
esac
export MODE="AT^SYSCFGEX=\"${CODE}\",${BAND},1,4,${LTEBAND},\"\",\"\""
elif echo "$cardinfo" | grep -qi huawei; then
BAND="3FFFFFFF"
case "$service" in
lte_only) CODE="14,2";;
lte_b7_only) CODE="14,2";;
lte_b20_only) CODE="14,2";;
umts_only) CODE="14,2";;
umts900_only) CODE="14,2"
BAND="0002000000000000";;
umts2100_only) CODE="14,2"
BAND="00400000";;
gprs_only) CODE="13,1";;
gprs900_only) CODE="13,1"
BAND="00000100";;
gprs1800_only) CODE="13,1"
BAND="00000080";;
*) CODE="2,2";;
esac
export MODE="AT^SYSCFG=${CODE},${BAND},2,4"
fi
and in
/usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua
service = section:taboption("general", Value, "service", translate("Service Type"))
service:value("", translate("-- Please choose --"))
service:value("umts", "UMTS/GPRS")
service:value("umts_only", translate("UMTS only"))
service:value("umts900_only", translate("UMTS 900 only"))
service:value("umts2100_only", translate("UMTS 2100 only"))
service:value("gprs_only", translate("GPRS only"))
service:value("gprs900_only", translate("GPRS 900 only"))
service:value("gprs1800_only", translate("GPRS 1800 only"))
service:value("lte_only", translate("LTE only"))
service:value("lte_b7_only", translate("LTE Band 7 only"))
service:value("lte_b20_only", translate("LTE Band 20 only"))
service:value("evdo", "CDMA/EV-DO")
To see how gcom sets the mode, add in
/etc/gcom/setmode.gcom
:
:start
print "Trying to set mode ",$env("MODE")," (at /etc/gcom)\n"
And you can monitor by
logread -f
and see something like that:
Sat May 3 16:06:53 2014 daemon.notice netifd: Interface '3g' is setting up now
Sat May 3 16:06:55 2014 daemon.notice netifd: 3g (10250): Trying to set mode AT^SYSCFGEX="03",3FFFFFFF,1,4,7FFFFFFFFFFFFFFF,"","" (at /etc/gcom)
Sat May 3 16:06:57 2014 daemon.notice pppd[10273]: pppd 2.4.5 started by root, uid 0
Sat May 3 16:06:58 2014 local2.info chat[10275]: abort on (BUSY)
UPD 20140627: - Also works with E3272 [Megafon-100?] (change
grep -qi "E3276";
togrep -qi "E327";
to support both modems) - Has a bug in 4G/LTE band selection. Instead of 1st ($CODE) , the 5th (7FFFFFFFFFFFFFFF) parameter should be changed. If I ever test this on real hardware, I'll update the post.
Hi DtZ, this is a good article. I,m an Indonesian. I would like to ask you. Your script is can be add in the old script or the old script must be change? My English bad :D
ReplyDeleteThis should be treat as a patch for the existing script. I always do that by vi editor inside a working OpenWRT box.
DeleteOpen the files I mention and add this strings.
However, if you are new to this (and vi editor), be sure to make a backups of this files first ;-)
Can you help me to edit my script? but, I think is too long if I type the script here.
DeleteLog in into openwrt via ssh.
ReplyDeleteTo backup /usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua file, type
# cp /usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua /usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua.bak
To edit /usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua, type
# vi /usr/lib/lua/luci/model/cbi/admin_network/proto_3g.lua
And, well, you have to learn vi editor. And I'm not ready to teach you ;-)