2024-12-19 15:50:28 +08:00

374 lines
9.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
SCRIPT_DIR="/usr/share/qmodem"
source /usr/share/libubox/jshn.sh
source "${SCRIPT_DIR}/modem_util.sh"
add_plain_info_entry()
{
key=$1
value=$2
key_full_name=$3
class_overwrite=$4
if [ -n "$class_overwrite" ]; then
class="$class_overwrite"
fi
json_add_object ""
json_add_string key "$key"
json_add_string value "$value"
json_add_string "full_name" "$key_full_name"
json_add_string "type" "plain_text"
if [ -n "$class" ]; then
json_add_string "class" "$class"
json_add_string "class_origin" "$class"
fi
json_close_object
}
add_warning_message_entry()
{
key=$1
value=$2
key_full_name=$3
class_overwrite=$4
if [ -n "$class_overwrite" ]; then
class="$class_overwrite"
fi
json_add_object ""
json_add_string key "$key"
json_add_string value "$value"
json_add_string "full_name" "$key_full_name"
json_add_string "type" "warning_message"
json_add_string "class" "warning"
json_add_string "class_origin" "warning"
json_close_object
}
add_bar_info_entry()
{
key=$1
value=$2
key_full_name=$3
min_value=$4
max_value=$5
unit=$6
class_overwrite=$7
if [ -n "$class_overwrite" ]; then
class="$class_overwrite"
fi
json_add_object ""
json_add_string key "$key"
json_add_string value "$value"
json_add_string min_value "$min_value"
json_add_string max_value "$max_value"
json_add_string "full_name" "$key_full_name"
json_add_string "unit" "$unit"
json_add_string "type" "progress_bar"
if [ -n "$class" ]; then
json_add_string "class" "$class"
json_add_string "class_origin" "$class"
fi
json_close_object
}
add_avalible_band_entry()
{
band_id=$1
band_name=$2
json_add_object ""
json_add_string band_id "$band_id"
json_add_string band_name "$band_name"
json_add_string "type" "avalible_band"
json_close_object
}
get_dns()
{
[ -z "$define_connect" ] && {
define_connect="1"
}
local public_dns1_ipv4="223.5.5.5"
local public_dns2_ipv4="119.29.29.29"
local public_dns1_ipv6="2400:3200::1" #下一代互联网北京研究中心240C::6666阿里2400:3200::1腾讯2402:4e00::
local public_dns2_ipv6="2402:4e00::"
#获取DNS地址
at_command="AT+GTDNS=${define_connect}"
local response=$(at ${at_port} ${at_command} | grep "+GTDNS: ")
local ipv4_dns1=$(echo "${response}" | awk -F'"' '{print $2}' | awk -F',' '{print $1}')
[ -z "$ipv4_dns1" ] && {
ipv4_dns1="${public_dns1_ipv4}"
}
local ipv4_dns2=$(echo "${response}" | awk -F'"' '{print $4}' | awk -F',' '{print $1}')
[ -z "$ipv4_dns2" ] && {
ipv4_dns2="${public_dns2_ipv4}"
}
local ipv6_dns1=$(echo "${response}" | awk -F'"' '{print $2}' | awk -F',' '{print $2}')
[ -z "$ipv6_dns1" ] && {
ipv6_dns1="${public_dns1_ipv6}"
}
local ipv6_dns2=$(echo "${response}" | awk -F'"' '{print $4}' | awk -F',' '{print $2}')
[ -z "$ipv6_dns2" ] && {
ipv6_dns2="${public_dns2_ipv6}"
}
json_add_object "dns"
json_add_string "ipv4_dns1" "$ipv4_dns1"
json_add_string "ipv4_dns2" "$ipv4_dns2"
json_add_string "ipv6_dns1" "$ipv6_dns1"
json_add_string "ipv6_dns2" "$ipv6_dns2"
json_close_object
}
get_sim_status()
{
local sim_status
case $1 in
"")
sim_status="miss"
sim_state_code=0
;;
*"ERROR"*)
sim_status="miss"
sim_state_code=0
;;
*"READY"*)
sim_status="ready"
sim_state_code=1
;;
*"SIM PIN"*)
sim_status="MT is waiting SIM PIN to be given"
sim_state_code=2
;;
*"SIM PUK"*)
sim_status="MT is waiting SIM PUK to be given"
sim_state_code=3
;;
*"PH-FSIM PIN"*)
sim_status="MT is waiting phone-to-SIM card password to be given"
sim_state_code=4
;;
*"PH-FSIM PIN"*)
sim_status="MT is waiting phone-to-very first SIM card password to be given"
sim_state_code=5
;;
*"PH-FSIM PUK"*)
sim_status="MT is waiting phone-to-very first SIM card unblocking password to be given"
sim_state_code=6
;;
*"SIM PIN2"*)
sim_status="MT is waiting SIM PIN2 to be given"
sim_state_code=7
;;
*"SIM PUK2"*)
sim_status="MT is waiting SIM PUK2 to be given"
sim_state_code=8
;;
*"PH-NET PIN"*)
sim_status="MT is waiting network personalization password to be given"
sim_state_code=9
;;
*"PH-NET PUK"*)
sim_status="MT is waiting network personalization unblocking password to be given"
sim_state_code=10
;;
*"PH-NETSUB PIN"*)
sim_status="MT is waiting network subset personalization password to be given"
sim_state_code=11
;;
*"PH-NETSUB PUK"*)
sim_status="MT is waiting network subset personalization unblocking password to be given"
sim_state_code=12
;;
*"PH-SP PIN"*)
sim_status="MT is waiting service provider personalization password to be given"
sim_state_code=13
;;
*"PH-SP PUK"*)
sim_status="MT is waiting service provider personalization unblocking password to be given"
sim_state_code=14
;;
*"PH-CORP PIN"*)
sim_status="MT is waiting corporate personalization password to be given"
sim_state_code=16
;;
*"PH-CORP PUK"*)
sim_status="MT is waiting corporate personalization unblocking password to be given"
sim_state_code=17
;;
*)
sim_status="unknown"
sim_state_code=99
;;
esac
echo "$sim_status"
}
#获取信号强度指示
# $1:信号强度指示数字
get_rssi()
{
local rssi
case $1 in
"99") rssi="unknown" ;;
* ) rssi=$((2 * $1 - 113)) ;;
esac
echo "$rssi"
}
#获取网络类型
# $1:网络类型数字
get_rat()
{
local rat
case $1 in
"0"|"1"|"3"|"8") rat="GSM" ;;
"2"|"4"|"5"|"6"|"9"|"10") rat="WCDMA" ;;
"7") rat="LTE" ;;
"11"|"12") rat="NR" ;;
esac
echo "${rat}"
}
#获取连接状态
#return raw data
get_connect_status()
{
#get active pdp context
at_cmd="AT+CGACT?"
expect="+CGACT:"
result=`at $at_port $at_cmd | grep $expect|tr '\r' '\n'`
connect_status="No"
for pdp_index in `echo "$result" | tr -d "\r" | awk -F'[,:]' '$3 == 1 {print $2}'`; do
at_cmd="AT+CGPADDR=%s"
at_cmd=$(printf "$at_cmd" "$pdp_index")
expect="+CGPADDR:"
result=$(at $at_port $at_cmd | grep $expect)
if [ -n "$result" ];then
ipv6=$(echo $result | grep -oE "\b([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b")
ipv4=$(echo $result | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
disallow_ipv4="0.0.0.0"
#remove the disallow ip
if [ "$ipv4" == "$disallow_ipv4" ];then
ipv4=""
fi
fi
if [ -n "$ipv4" ] || [ -n "$ipv6" ];then
connect_status="Yes"
break
else
connect_status="No"
fi
done
add_plain_info_entry "connect_status" "$connect_status" "Connect Status"
}
#获取移远模组信息
# $1:AT串口
# $2:平台
# $3:连接定义
get_info()
{
#基本信息
base_info
#SIM卡信息
sim_info
if [ "$sim_status" != "ready" ]; then
add_warning_message_entry "sim_status" "$sim_status" "SIM Error,Error code:" "warning"
return
fi
#网络信息
network_info
if [ "$connect_status" != "Yes" ]; then
return
fi
#小区信息
cell_info
return
}
soft_reboot()
{
at_command="AT+CFUN=1,1"
at $at_port $at_command
}
hard_reboot()
{
#get power_gpio_pin
source /lib/functions.sh
config_load qmodem
config_foreach get_gpio_by_slot modem-slot
gpio="/sys/class/gpio/$gpio/value"
[ ! -f "$gpio" ] || [ -z "$gpio_up" ] || [ -z "$gpio_down" ] && {
soft_reboot
m_debug "gpio not found, failback to soft reboot"
return
}
echo $gpio_down > $gpio
sleep 1
echo $gpio_up > $gpio
}
get_gpio_by_slot()
{
local cfg="$1"
config_get slot "$cfg" slot
if [ "$modem_slot" = "$slot" ];then
config_get gpio "$cfg" gpio
config_get gpio_up "$cfg" gpio_up
config_get gpio_down "$cfg" gpio_down
fi
}
get_reboot_caps()
{
source /lib/functions.sh
config_load qmodem
config_foreach get_gpio_by_slot modem-slot
json_init
json_add_object "reboot_caps"
json_add_int "soft_reboot_caps" "1"
if [ -n "$gpio" ] && [ -n "$gpio_up" ] && [ -n "$gpio_down" ];then
json_add_int "hard_reboot_caps" "1"
else
json_add_int "hard_reboot_caps" "0"
fi
json_close_object
json_dump
}
rate_convert()
{
#check if bc is installed
is_bc_installed=$(which bc)
local rate=$1
rate_units="bps Kbps Mbps Gbps"
if [ -z "$is_bc_installed" ]; then
for i in $(seq 0 3); do
if [ $rate -lt 1024 ]; then
break
fi
rate=$(($rate / 1024))
done
else
for i in $(seq 0 3); do
if [ $(echo "$rate < 1024" | bc) -eq 1 ]; then
break
fi
rate=$(echo "scale=2; $rate / 1024" | bc)
done
fi
echo "$rate `echo $rate_units | cut -d ' ' -f $(($i+1))`"
}