#!/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))`" } get_modem_disabled_features() { . /lib/functions.sh config_load qmodem config_list_foreach $config_section disabled_features _add_disabled_features } get_global_disabled_features() { . /lib/functions.sh config_load qmodem config_list_foreach main disabled_features _add_disabled_features } _add_disabled_features() { json_add_string "" "$1" }