op-packages/3ginfo/files-text/usr/bin/3ginfo
github-actions[bot] 32600acc60 🌴 Sync 2026-03-05 23:51:42
2026-03-05 23:51:42 +08:00

139 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
#
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
#
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
FORMAT=1
[ "x$1" = "xjson" ] && FORMAT=2
ECM=""
RES="/usr/share/modemdata"
format_conn_time() {
CT=$1
D=$(expr $CT / 60 / 60 / 24)
H=$(expr $CT / 60 / 60 % 24)
M=$(expr $CT / 60 % 60)
S=$(expr $CT % 60)
printf "%dd, %02d:%02d:%02d" $D $H $M $S
}
SEPARATOR=""
parse_section() {
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
local section="$1"
config_get device "$section" device ""
config_get network "$section" network ""
config_get force_plmn "$section" force_plmn "0"
if echo "x$device" | grep -q "192.168."; then
ECM="$RES/addon/ecm/huawei.sh $device"
else
ECM=""
if [ ! -e /var/state/3ginfo-detected ]; then
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
[ -z "$network" ] && network=$(/usr/share/3ginfo/detectsection.sh "$section")
fi
config_get pincode "$section" pincode ""
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
fi
fi
if [ "$FORMAT" = "1" ]; then
SEPARATOR="---"
json_init
if [ -n "$ECM" ]; then
json_load "$($ECM product)"
else
json_load "$($RES/product.sh "$device")"
fi
json_get_vars vendor product revision imei iccid imsi
echo "Device: ${vendor} ${product}"
echo "Revision: ${revision}"
echo "IMEI: ${imei}"
echo "ICCID: ${iccid}"
echo "IMSI: ${imsi}"
echo ""
json_init
json_load "$($RES/network.sh "$network")"
json_get_vars conn_time_sec rx tx
echo "Connected time: "$(format_conn_time ${conn_time_sec})
echo "TX: ${tx}"
echo "RX: ${rx}"
echo ""
json_init
if [ -n "$ECM" ]; then
json_load "$($ECM params)"
else
json_load "$($RES/params.sh "$device" "$force_plmn")"
fi
json_get_vars signal operator_name operator_mcc operator_mnc country mode registration lac_dec lac_hex cid_dec cid_hex
echo "Signal: ${signal} %"
echo "Mode: ${mode}"
echo "Operator: ${operator_name} (${operator_mcc} ${operator_mnc})"
[ -n "$country" ] && echo "Country: ${country}"
case $registration in
0) REG="not registered";;
1) REG="registered, home network";;
2) REG="not registered, searching";;
3) REG="registration denied";;
5) REG="registered, roaming";;
6) REG="registered for SMS only, home network";;
7) REG="registered for SMS only, roaming";;
*) REG="$registration";;
esac
echo "Registration: ${REG}"
echo ""
T="21;CellID: ${cid_dec} (${cid_hex})"
T="${T}\n22;LAC: ${lac_dec} (${lac_hex})"
if json_is_a addon array; then
json_get_keys addon addon
json_select addon
for i in $addon; do
json_select "$i"
json_get_vars idx key value
json_select ..
if [ "$idx" = "10" ]; then
T="${T}\n${idx};${key}: ${value/&deg;/°}"
else
T="${T}\n${idx};${key}: ${value}"
fi
done
fi
echo -e "$T" | sort | awk -F[\;] '{print $2}'
else
SEPARATOR=","
echo "["
if [ -n "$ECM" ]; then
$ECM product
echo ","
$RES/network.sh "$network"
echo ","
$ECM params
else
$RES/product.sh "$device"
echo ","
$RES/network.sh "$network"
echo ","
$RES/params.sh "$device" "$force_plmn"
fi
echo "]"
fi
}
config_load 3ginfo
[ "$FORMAT" = "2" ] && echo '{"res":['
config_foreach parse_section 3ginfo
[ "$FORMAT" = "2" ] && echo ']}'
touch /var/state/3ginfo-detected
touch /var/state/3ginfo-pincode
exit 0