🍉 Sync 2026-05-13 08:40:30

This commit is contained in:
github-actions[bot] committed 2026-05-13 08:40:30 +08:00
1 parent 2206a0ea68
commit 6bb23e315c
7 files changed
+93 -410

No files matched your search

@@ -1,180 +0,0 @@
# qmi addon for luci-app-modeminfo
# require full version libqmi (need build in SDK)
# (c) 2020-2024 written by Konstantine Shevlakov (c) at <shevlakov@132lan.ru>
get_device_info(){
DEVPORT=$(uci -q get modeminfo.@modeminfo[$s].device_qmi)
DEVCTL=$(echo $DEVPORT | awk -F [\/] '{print $NF}')
if [ -x /usr/bin/qmicli ]; then
export QMICTL="qmicli -p -d $DEVPORT"
else
logger -t "luci-app-modeminfo" "qmicli not found!"
exit 1
fi
if [ $DEVPORT ]; then
QPROXY=$(uci -q get modeminfo.@modeminfo[$s].qmi_proxy)
if [ $QPROXY -eq 1 ]; then
export QMICTL="qmicli -p -d $DEVPORT"
else
export QMICTL="qmicli -d $DEVPORT"
fi
else
for qmi in $(ls /dev/cdc-wdm*); do
if [ $qmi ]; then
QMI_DEVICE=$qmi
if [ -n $(which qmicli) ]; then
export QMICTL="qmicli -p -d ${QMI_DEVICE}"
else
logger -t "luci-app-modeminfo" "qmi-utils not found or installed!"
exit 0
fi
else
logger -t "luci-app-modeminfo" "Device is no QMI mode or not found!"
exit 0
fi
done
if [ $qmi ]; then
uci set modeminfo.@modeminfo[0].device_qmi="$qmi"
uci commit modeminfo
break
fi
fi
}
get_hardware_info(){
MANUF=$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../manufacturer)
MODEL="$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../product)"
if [ -n "$(echo "${MODEL}" | grep -Ei "${MANUF}")" ] || [ -n "$(echo "${MANUF}" | grep -Ei QUAL)" ]; then
DEVICE="${MODEL}"
else
DEVICE="${MANUF} ${MODEL}"
fi
IMEI=`$QMICTL --dms-get-ids | awk -F [:] '/IMEI:/{gsub("'\''|\*", ""); print $2}'`
FW=$($QMICTL --dms-get-software-version | awk -F [:] '/version:/{print $2}' )
ICCID=$($QMICTL --dms-uim-get-iccid | awk -F [:] '/ICCID/{gsub("'\''",""); print $2}' )
}
get_lte_bw(){
case $BWDx in
3) BWDL=1 ;;
5) BWDL=2 ;;
10) BWDL=3 ;;
15) BWDL=4 ;;
20) BWDL=5 ;;
esac
}
get_signal_info(){
NETWORK=`$QMICTL --nas-get-home-network | awk -F [:] '/MCC|MNC|Description/{gsub("'\''|^ ", "");print $2}'`
COPS_MCC=$(echo ${NETWORK} |awk '{print $1}')
COPS_MNC_RAW=$(echo ${NETWORK} |awk '{print $2}')
if [ $COPS_MNC_RAW -lt 10 ]; then
COPS_MNC=0${COPS_MNC_RAW}
else
COPS_MNC=$COPS_MNC_RAW
fi
COPS="$(echo "${NETWORK}" |tail -1)"
SIGNAL=$($QMICTL --nas-get-signal-info)
MODE=$(echo "$SIGNAL" | awk 'NR ==2{gsub("\:", ""); print $1}')
STRENGTH=$(echo "$SIGNAL" | awk '/RSSI|RSRQ|RSRP|SNR|ECIO/{gsub("'\''",""); print $2}')
SERVING=$($QMICTL --nas-get-serving-system)
RFBAND=$($QMICTL --nas-get-rf-band-info)
if [ $MODE == "LTE" ]; then
MIMO=$($QMICTL --nas-get-tx-rx-info=lte | grep 'RX Chain' | wc -l)
LACTAC=$(echo "$SERVING" | awk -F [:] '/tracking area code:|3GPP cell ID:/{gsub("'\''",""); print $2}')
LAC_NUM=$(echo $LACTAC | awk '{print $2}')
CID_NUM=$(echo $LACTAC | awk '{print $1}')
CID=$(echo $CID_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
LAC=$(echo $LAC_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CSQ_RSSI=$(echo ${STRENGTH} | awk '{print $1}')
RSRQ=$(echo ${STRENGTH} | awk '{print $2}')
RSRP=$(echo ${STRENGTH} | awk '{print $3}')
SINR=$(echo ${STRENGTH} | awk '{printf "%.0f\n", $4}')
ENBx=$(echo $CID | sed -e 's/..$//')
ENBID=$(printf %d 0x$ENBx)
CELL=$(printf %d 0x${CID: -2})
PCI=$($QMICTL --nas-get-cell-location-info | awk -F [:] '/Serving Cell ID:/{gsub("'\''",""); print $2}')
LTE_O=$($QMICTL --nas-get-lte-cphy-ca-info)
LTE_CA=$(echo "$LTE_O" |grep -i '^secondary cell' | wc -l)
BWDx=$(echo "$LTE_O" | grep -A4 'Primary Cell Info' | awk -F [:] '/DL Bandwidth:/{gsub("'\''| ", ""); print $2}')
get_lte_bw
if [ $LTE_CA -ge 1 ]; then
BWC=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:] '/DL Bandwidth:/{gsub("'\''| ", ""); printf "+"$2}')
BWCA=$(($BWDx$BWC))
BANDCH=$(echo "$LTE_O" | grep -A4 '^Primary Cell' | awk -F [:] '/RX Channel:/{gsub("'\''| ", ""); print $2}')
# Fix qmicli band T77W968 modem
case $DEVICE in
*Dell*|*LN960*) CA=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:-] '/LTE Band:/{gsub("'\''| ", ""); printf " "$NF-1}') ;;
*) CA=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:-] '/LTE Band:/{gsub("'\''| ", ""); print $NF}') ;;
esac
for cc in $CA; do
SCC=$SCC+$cc
done
else
BANDCH=$(echo "$RFBAND" | awk -F [:] '/Active Channel:/{gsub("'\''",""); print $2}' | head -1)
if [ "x" == "x$BWDx" ]; then
BWDx=$(echo "$RFBAND" | awk -F [:] '/Bandwidth:/{gsub("'\''| ",""); print $2}' | tail -1)
get_lte_bw
fi
fi
EARFCN=$BANDCH
else
MIMO=$($QMICTL --nas-get-tx-rx-info=umts | grep 'RX Chain' | wc -l)
case $MIMO in
0) MIMO=$($QMICTL --nas-get-tx-rx-info=gsm | grep 'RX Chain' | wc -l) ;;
esac
LACTAC=$(echo "$SERVING" | awk -F [:] '/3GPP location area code:|3GPP cell ID:/{gsub("'\''",""); print $2}')
LAC_NUM=$(echo $LACTAC | awk '{print $1}')
CID_NUM=$(echo $LACTAC | awk '{print $2}')
LAC=$(echo $LAC_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CID=$(echo $CID_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CSQ_RSSI=$(echo ${STRENGTH} | awk '{print $1}')
if [ $(echo ${STRENGTH} | awk '{print$2}') ]; then
SINR=$(echo ${STRENGTH} | awk '{printf "%.0f\n", $2}')
fi
BANDCH=$(echo "$RFBAND" | awk -F [:] '/Active Channel:/{gsub("'\''| ",""); print $2}')
EARFCN=$(echo $BANDCH | awk '{print $2}')
fi
CSQ_PER=$(echo $CSQ_RSSI |awk '{printf "%d\n", (100*(1-(-50 - $1)/(-50 - -120)))}')
[ $CSQ_RSSI -ge -110 ] && CSQ_COL="black"
[ $CSQ_RSSI -ge -105 ] && CSQ_COL="red"
[ $CSQ_RSSI -ge -95 ] && CSQ_COL="orange"
[ $CSQ_RSSI -ge -75 ] && CSQ_COL="green"
if [ $CSQ_PER -gt 100 ]; then
CSQ_PER=100
elif [ $CSQ_PER -lt 0 ]; then
CSQ_PER=0
fi
EARFCN=$BANDCH
DISTANCE=$($QMICTL --nas-get-cell-location-info | awk '/LTE Timing Advance:/{gsub("\047",""); printf "%.2f\n", (299792458*($4*10^-6)/1000)/2}')
REG=$(echo "$SERVING" | awk -F [:] '/Registration state:/{print $2}' | sed "s/'//g" | awk '{print $1}')
case $REG in
registered)
REGST=1
;;
registration-denied)
REGST=3
;;
esac
DECIMAL=$(uci -q get modeminfo.@general[0].decimail)
if [ "x${DECIMAL}" != "x" ]; then
LAC=$(printf %d 0x$LAC_NUM)
CID=$(printf %d 0x$CID_NUM)
fi
}
#get_device
function get_data_in(){
get_hardware_info >/dev/null 2>&1
get_signal_info >/dev/null 2>&1
}
get_hwinfo(){
continue
}
@@ -1,176 +0,0 @@
#!/bin/sh
get_device_info(){
DEVPORT=$(uci -q get modeminfo.@modeminfo[0].device_qmi)
DEVCTL=$(echo $DEVPORT | awk -F [\/] '{print $NF}')
if ! [ -x /sbin/uqmi ]; then
logger -t "luci-app-modeminfo" "uqmi not found!"
exit 1
fi
if [ $DEVPORT ]; then
QPROXY=$(uci -q get modeminfo.@modeminfo[0].qmi_proxy)
if [ "x${QPROXY}" = "x" ]; then
export MBIM=""
else
export MBIM="-m"
fi
else
for qmi in $(ls /dev/cdc-wdm*); do
if [ $qmi ]; then
QMI_DEVICE=$qmi
if ! [ -n $(which uqmi) ]; then
logger -t "luci-app-modeminfo" "uqmi not found or installed!"
exit 0
fi
else
logger -t "luci-app-modeminfo" "Device is no QMI mode or not found!"
exit 0
fi
done
if [ $qmi ]; then
uci set modeminfo.@modeminfo[0].device_qmi="$qmi"
uci commit modeminfo
break
fi
fi
}
get_data(){
case $1 in
hw)
uqmi ${MBIM} -s -d ${DEVPORT} --get-imei
;;
net)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-serving-system
;;
sig)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-signal-info
;;
lte)
uqmi ${MBIM} -d ${DEVPORT} \
--get-lte-cphy-ca-info
;;
base)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-system-info
;;
mimo)
uqmi ${MBIM} -s -d ${DEVPORT} \
--nas-get-tx-rx-info=$MODE
;;
sta)
uqmi ${MBIM} -d ${DEVPORT} \
--get-cell-location-info
;;
esac
killall -9 uqmi >/dev/null 2>&1
}
get_hardware_info(){
DATA=$(get_data hw)
MANUF=$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../manufacturer)
MODEL="$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../product)"
DEVICE="$MANUF $MODEL"
IMEI=$(echo "$DATA" | tail -1 | tr -d '"')
}
get_signal_info(){
DATA=$(get_data net)
eval $(jsonfilter -s "$DATA" -e "COPS=$['plmn_description']" \
-e "COPS_MCC=$['plmn_mcc']" \
-e "COPS_MNC_RAW=$['plmn_mnc']" \
-e "REG=$['registration']" \
-e "ROAM=$['roaming']" )
DATA=$(get_data sig)
eval $(jsonfilter -s "$DATA" -e "MODE=$['type']" \
-e "CSQ_RSSI=$['rssi']" \
-e "RSRP=$['rsrp']" \
-e "RSRQ=$['rsrq']" \
-e "SINR=$['snr']")
DATA=$(get_data base)
eval $(jsonfilter -s "$DATA" -e "TAC_NUM=$['$MODE']['tracking_area_code']" \
-e "CELL=$['$MODE']['cell_id']" \
-e "ENBID=$['$MODE']['enodeb_id']")
DATA=$(get_data sta)
EARFCN=$(echo "$DATA" | awk '/channel/{gsub(",",""); print $2}' | head -1)
PCI=$(echo "$DATA" | awk '/serving_cell_id/{gsub(",",""); print $2}' | head -1)
case $MODE in
LTE)
DATA=$(get_data lte)
eval $(jsonfilter -s "$DATA" -e "BW=$['primary']['bandwidth']")
CA=$(echo "$DATA" | awk -F [:] '/secondary_/{gsub("\"","");print $1}')
LTE_CA=$(echo "$CA" | wc -l)
if [ $LTE_CA -ge 1 ]; then
BWCA=0
for a in $CA; do
eval $(jsonfilter -s "$DATA" -e "SCx=$['$a']['band']" \
-e "BWC=$['$a']['bandwidth']")
SCC="$SCC+$SCx"
BWCA=$(($BWCA+$BWC))
done
BWCA=$(($BW+$BWCA))
fi
;;
esac
MODE=$(echo $MODE | awk '{print toupper($1)}')
if [ "$COPS_MNC_RAW" -lt "10" ]; then
COPS_MNC=0${COPS_MNC_RAW}
else
COPS_MNC=${COPS_MNC_RAW}
fi
if [ "x${COPS}" = "x" ]; then
COPS="${COPS_MCC} ${COPS_MNC}"
fi
SINR=$(echo $SINR | awk '{printf "%.0f\n", $1}')
LAC=$(echo $TAC_NUM | awk '{printf "%x\n", toupper($1)}')
ENBID_h=$(printf %x $ENBID)
CELL_h=$(printf %x $CELL)
if [ "$CELL" -le 15 ]; then
CELL_h="0${CID_h}"
fi
CID="${ENBID_h}${CELL_h}"
CID_NUM=$(printf %d 0x$CID)
case $REG in
not_registered) REGST=0 ;;
registered)
case $ROAM in
true) REGST=5 ;;
*) REGST=1 ;;
esac
;;
searching) REGST=2 ;;
registering_denied) REGST=3 ;;
unknown) REGST=4 ;;
esac
CSQ_PER=$(echo $CSQ_RSSI |awk '{printf "%d\n", (100*(1-(-50 - $1)/(-50 - -120)))}')
[ $CSQ_RSSI -ge -110 ] && CSQ_COL="black"
[ $CSQ_RSSI -ge -105 ] && CSQ_COL="red"
[ $CSQ_RSSI -ge -95 ] && CSQ_COL="orange"
[ $CSQ_RSSI -ge -75 ] && CSQ_COL="green"
if [ $CSQ_PER -gt 100 ]; then
CSQ_PER=100
elif [ $CSQ_PER -lt 0 ]; then
CSQ_PER=0
fi
DECIMAL=$(uci -q get modeminfo.@modeminfo[0].general)
if [ "x${DECIMAL}" != "x" ]; then
LAC=$LAC_NUM
CID=$CID_NUM
fi
}
function get_data_in(){
get_hardware_info >/dev/null 2>&1
get_signal_info >/dev/null 2>&1
}
get_hwinfo(){
continue
}
+30 -26
View File
@@ -4,7 +4,7 @@ trap 'cleanup >/dev/null 2>&1; exit 0' INT TERM
SECTIONS=$(echo $(uci show modeminfo | awk -F [\]\[\@=] '/=modeminfo/{print $3}'))
get_vars(){
for v in device device_qmi qmi_proxy decimail qmi_mode; do
for v in device device_qmi qmi_trap decimail qmi_mode; do
eval $v=$(uci -q get modeminfo.@modeminfo[${s}].${v} 2>/dev/null)
done
}
@@ -62,17 +62,12 @@ function if_null() {
qmi_device(){
if [ $qmi_mode ]; then
SCRIPT=/usr/share/modeminfo/scripts/modeminfo-qmi
else
SCRIPT=/usr/share/modeminfo/scripts/modeminfo
fi
if [ -r $SCRIPT ]; then
[ -n "$qmi_mode" ] || SCRIPT=/usr/share/modeminfo/scripts/modeminfo
[ -r $SCRIPT ] && {
. $SCRIPT
else
} || {
exit 0
fi
}
}
@@ -86,24 +81,33 @@ echo "{ \"modem\" : ["
for s in $SECTIONS; do
m=$((${s} + 1))
if [ "$s" ]; then
get_vars
qmi_device
get_device_info
get_data_in >/dev/null 2>&1
if_null
json_status
fi
if [ "$ARGSLEN" = "${m}" ]; then
echo " }"
get_vars
if [ $qmi_mode ]; then
if [ "$s" ]; then
/usr/bin/qminfo $device_qmi --json --${qmi_trap}
fi
if [ "$ARGSLEN" != "${m}" ]; then
echo ","
fi
else
echo " },"
if [ "$s" ]; then
qmi_device
get_device_info
get_data_in >/dev/null 2>&1
if_null
json_status
fi
if [ "$ARGSLEN" = "${m}" ]; then
echo " }"
else
echo " },"
fi
# flush modem variables
unset BWCA SCC SC BWDx BWPx BWCx BWDL LTE_CA \
DEVICE COPS MODE CSQ_PER LAC CSQ_RSSI \
SINR RSRP IMEI REGST EARFCN CHIPTEMP FW \
ICCID IMSI RSRQ DISTANCE
fi
# flush modem variables
unset BWCA SCC SC BWDx BWPx BWCx BWDL LTE_CA \
DEVICE COPS MODE CSQ_PER LAC CSQ_RSSI \
SINR RSRP IMEI REGST EARFCN CHIPTEMP FW \
ICCID IMSI RSRQ DISTANCE
done
echo "]}"