Files
op-packages/modeminfo/root/usr/share/modeminfo/scripts/FIBOCOM
T

94 lines
3.6 KiB
Plaintext

# Fibocom modems NL668/NL678/NL952/FM150/FM190
function modem_data(){
generic_data
OIFS="$IFS"; IFS="|" # Get hw and sim info
# FIX regstate
REGST=$(echo "$O" | awk -F',' '/(\+CREG|\+CGREG|\+CEREG)/ {if (NF >= 5 && $NF ~ /^[0-9]$|^1[0-3]$/) {print $2; exit}}')
set -- $(echo "$O" | awk -F'[:,]' '
/\+CGMI/ {gsub("\"",""); manuf=$2}
/\+CGMM/ {gsub("\"",""); model=$2}
/\+CGMR/ {gsub("\"",""); fw=$2}
/\+CIMI/ {gsub("\"",""); imsi=$2}
/\+CGSN/ {gsub("\"",""); imei=$2}
/ICCID:/ {gsub("\r",""); iccid=$2}
/\+MTSM/ {temp = sprintf("%0.f\n", $2)}
END { print manuf "|" model "|" fw "|" imsi "|" imei "|" iccid "|" temp }')
DEVICE="${1} ${2}"; MANUF="${1}"; MODEL="${2}"; FW="${3}"; IMSI="${4}"; IMEI="${5}"; ICCID="${6}" CHIPTEMP=${7}
IFS="$OIFS"; unset OIFS
OIFS="$IFS"; IFS="|" # Get Signal info
set -- $(echo "$O" | awk -v model=$MODEL -v mode=$MODE '
BEGIN { map[15]=1; map[25]=2; map[50]=3; map[75]=4; map[100]=5 }
mode ~ /LTE/ { # LTE mode
if (/^\PCC:/ && model~/952|FM/) {split($0, ca, ","); pch = ca[3]; pcica = ca[2] }
if (/^\SCC\d/ && model~/952|FM/) {lte_ca++}
if (/^\+GTCAINFO: 1/) { lte_ca++; split($0, ca, ","); pch = ca[5]; pcica = ca[4] }
if (/\+GTCCINFO:/) { getline; getline; split($0, f, ",")
lac = (model~/952|FM/) ? sprintf("%d","0x"f[5]) : f[5]
cid = (model~/952|FM/) ? sprintf("%d","0x"f[6]) : f[6]
earfcn = (model~/952|FM/) ? sprintf("%d","0x"f[7]) : f[7]
pci = (model~/952|FM/) ? sprintf("%d","0x"f[8]) : f[8]
rsrq = sprintf("%.0f", -20 + (f[14]/2)); rsrp = sprintf("%.0f", f[13] - 140)
sinr = sprintf("%.0f", f[11]/4 + 5); bwc = f[10]; bw=map[bwc]}
}
mode !~ /LTE/ { # 3G mode
if (/CNTI/) { split($0, f, ",")
tech = f[2] }
if (/\+GTCCINFO:/) { getline; getline; split($0, f, ",")
lac = (model~/952|FM/) ? sprintf("%d","0x"f[5]) : f[5]
cid = (model~/952|FM/) ? sprintf("%d","0x"f[6]) : f[6]
earfcn = (model~/952|FM/) ? sprintf("%d","0x"f[7]) : f[7]
sinr = (model~/952|FM/) ? sprintf("%.0f", -24+(f[12]*24/255)) : sprintf("%.0f", -24+(f[14]*24/255))}
}
END { print earfcn "|" lac "|" cid "|" tech "|" rsrq "|" rsrp "|" sinr "|" pci "|" bwc "|" bw "|" lte_ca "|" pcica "|" pch }
')
# Define variables
EARFCN=${1}; LAC=${2}; CID=${3}; SINR=${7}
IFS="$OIFS"; unset OIFS
if [ "$MODE" = "LTE" ]; then
RSRQ=${5}; RSRP=${6}; PCI=${8}; BWDx=${9}; BWDL=${10}; PCICA=${12}; PCH=${13}; LTE_CA=${11}
ENBx=$(echo $CID | sed -e 's/..$//')
CELL=$(printf %d 0x${CID: -2})
ENBID=$(printf %d 0x$ENBx)
if [ "$EARFCN" = "$PCH" ] && [ "$PCI" = "$PCICA" ]; then
OIFS="$IFS"; IFS="|" # Get LTE-A bandwith and CA bands
set -- $(echo "$O" | awk -F'[,]' -v model="$MODEL" -v mode="$MODE" -v bwp="${BWDx:-0}" '
BEGIN { scc = ""; sum = 0; bwp_num = (bwp == 15 ? 1.3 : bwp/5) }
function earfcn_to_band(channel) {
if (channel <= 1) return ""
cmd = "/usr/share/modeminfo/scripts/ch_to_band " mode " " channel
cmd | getline band
close(cmd)
return band
}
{
if (model ~ /FM|952/ && /^SCC[0-9]+:/) {
chan_field = 5; bw_field = 6
} else if (/\+GTCAINFO: 2/) {
chan_field = 4; bw_field = NF
} else {
next
}
if ($chan_field > 1) {
band = earfcn_to_band($chan_field)
if (band != "") scc = scc "+" band
sum += $bw_field/5; bwca = sum + bwp_num
}
} END { print scc "|" bwca }
')
SCC=${1}; BWCA=${2}
IFS="$OIFS"; unset OIFS
fi
else
TECH=${4}
[ "x$TECH" != "x" ] && MODE="$TECH"
fi
if [ $(uci -q get modeminfo.@general[0].decimail) = "1" ]; then
LAC=$(printf %d 0x$LAC); CID=$(printf %d 0x$CID)
fi
}