mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-11 02:44:57 +08:00
94 lines
3.6 KiB
Plaintext
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
|
|
}
|