diff --git a/applications/luci-app-modem/Makefile b/applications/luci-app-modem/Makefile index df8f944..eecbe32 100644 --- a/applications/luci-app-modem/Makefile +++ b/applications/luci-app-modem/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-modem LUCI_TITLE:=LuCI support for Modem LUCI_PKGARCH:=all -PKG_VERSION:=1.4.2 +PKG_VERSION:=1.4.3 PKG_LICENSE:=GPLv3 PKG_LINCESE_FILES:=LICENSE PKF_MAINTAINER:=siriling @@ -15,7 +15,7 @@ LUCI_DEPENDS:=+luci-compat \ +pciutils \ +quectel-CM-5G \ +sms-tool \ - +jq +grep\ + +jq \ define Package/luci-app-modem/conffiles /etc/config/modem diff --git a/applications/luci-app-modem/luasrc/view/modem/modem_info.htm b/applications/luci-app-modem/luasrc/view/modem/modem_info.htm index 900b85f..8013692 100644 --- a/applications/luci-app-modem/luasrc/view/modem/modem_info.htm +++ b/applications/luci-app-modem/luasrc/view/modem/modem_info.htm @@ -22,6 +22,65 @@ end } } */ + .signal-view { + position: relative; + min-width: 11rem; + height: 1.5rem; + margin: 0 0; + border: thin solid #999; + background: #eee; + border-radius: 4px; + overflow: hidden; + } + + .signal-percent { + width: 0; + height: 100%; + /* transition: width .25s ease-in; */ + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + /* border-top-right-radius: 4px; + border-bottom-right-radius: 4px; */ + } + + .signal-context{ + font-family: monospace; + /* font-size: 1em; */ + font-weight: bold; + font-size-adjust: .38; + line-height: 1.5rem; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + content: attr(title); + text-align: center; + white-space: pre; + text-overflow: ellipsis; + /* color:#000000; */ + } + + .signal-context small{ + font-family: monospace; + /* font-size: 1em; */ + font-weight: bold; + font-size-adjust: .38; + line-height: 1.5rem; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + content: attr(title); + text-align: center; + white-space: pre; + text-overflow: ellipsis; + /* color:#000000; */ + } + table { width: 100%; border-spacing: 10px; @@ -61,7 +120,6 @@ end var rate_view; if (mb>=1) { - console.log(mb); rate_view=mb.toFixed(2)+" MB/s"; } else if (kb>=1) { @@ -148,8 +206,8 @@ end if (value!="-"&&value!="") { //添加单位 - if (key=="RSSI") { - value=value+" dBm"; + if (key=="AMBR UL"||key=="AMBR DL") { + value=value+" Mbps"; } else if (key=="Tx Rate"||key=="Rx Rate") { @@ -188,216 +246,207 @@ end return percent.toFixed(2); } - // 获取参考信号接收功率(RSRP)的信息视图 - function get_rsrp_info_view(network_type,value) - { + // 获取参考信号的信息视图 + function get_signal_info_view(network_type,key,value) { value=parseFloat(value); - var rsrp_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"}; + var signal_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"}; + // 获取参考信号接收功率(RSRP)的信息视图' + if (key=="RSRP") { + set_rsrp_info_view(network_type,value,signal_info_view); + } + else if (key=="RSRQ") { + set_rsrq_info_view(network_type,value,signal_info_view); + } + else if (key=="SINR") { + set_sinr_info_view(network_type,value,signal_info_view); + } + else if (key=="RxLev") { + set_rxlev_info_view(network_type,value,signal_info_view); + } + + //添加100%时候的样式 + if (signal_info_view.percent==100) { + signal_info_view.style+="border-top-right-radius: 4px;border-bottom-right-radius: 4px;"; + } + + return signal_info_view; + } + + // 获取参考信号接收功率(RSRP)的信息视图 + function set_rsrp_info_view(network_type,value,signal_info_view) + { // 获取百分比 - var percent=100; if (network_type.includes("NR")) { - percent=get_percent(value,-153,31); + signal_info_view.percent=get_percent(value,-153,31); } else if (network_type.includes("LTE")) { - percent=get_percent(value,-140,-44); + signal_info_view.percent=get_percent(value,-140,-44); } else if (network_type.includes("WCDMA")) { - // percent=get_percent(value,-140,-44); + // signal_info_view.percent=get_percent(value,-140,-44); } // 获取样式 - var quality="Unknown"; var color="gray"; if (value>=-70) { - quality="Excellent"; + signal_info_view.quality="Excellent"; color="limegreen"; } else if (value>=-80&&value<-70) { - quality="Good"; + signal_info_view.quality="Good"; color="lime"; } else if (value>=-90&&value<-80) { - quality="Fair"; + signal_info_view.quality="Fair"; color="gold"; } else if (value<-90) { - quality="Bad"; + signal_info_view.quality="Bad"; color="red"; } - rsrp_info_view.percent=percent; - rsrp_info_view.quality=quality; - rsrp_info_view.style='width:'+rsrp_info_view.percent+'%;background-color: '+color+';'; - - return rsrp_info_view; + signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';'; } // 获取参考信号接收质量(RSRQ)的信息视图 - function get_rsrq_info_view(network_type,value) + function set_rsrq_info_view(network_type,value,signal_info_view) { - value=parseFloat(value); - var rsrq_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"}; - // 获取百分比 - var percent=100; if (network_type.includes("NR")) { - percent=get_percent(value,-43,20); + signal_info_view.percent=get_percent(value,-43,20); } else if (network_type.includes("LTE")) { - percent=get_percent(value,-19.5,-3); + signal_info_view.percent=get_percent(value,-19.5,-3); } else if (network_type.includes("WCDMA")) { - // percent=get_percent(value,-19.5,-3); + // signal_info_view.percent=get_percent(value,-19.5,-3); } // 获取样式 - var quality="Unknown"; var color="gray"; if (value>=-10) { - quality="Excellent"; + signal_info_view.quality="Excellent"; color="limegreen"; } else if (value>=-15&&value<-10) { - quality="Good"; + signal_info_view.quality="Good"; color="lime"; } else if (value>=-20&&value<-15) { - quality="Fair"; + signal_info_view.quality="Fair"; color="gold"; } else if (value<-20) { - quality="Bad"; + signal_info_view.quality="Bad"; color="red"; } - rsrq_info_view.percent=percent; - rsrq_info_view.quality=quality; - rsrq_info_view.style='width:'+rsrq_info_view.percent+'%;background-color: '+color+';'; - - return rsrq_info_view; + signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';'; } // 获取信噪比(SINR)的信息视图 - function get_sinr_info_view(network_type,value) + function set_sinr_info_view(network_type,value,signal_info_view) { - value=parseFloat(value); - var sinr_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"}; - // 获取百分比 - var percent=100; if (network_type.includes("NR")) { - percent=get_percent(value,-23,40); + signal_info_view.percent=get_percent(value,-23,40); } else if (network_type.includes("LTE")) { - percent=get_percent(value,-20,-30); + signal_info_view.percent=get_percent(value,-20,-30); } else if (network_type.includes("WCDMA")) { - // percent=get_percent(value,-20,-30); + // signal_info_view.percent=get_percent(value,-20,-30); } // 获取样式 - var quality="Unknown"; var color="gray"; if (value>=25) { - quality="Excellent"; + signal_info_view.quality="Excellent"; color="limegreen"; } else if (value>=15&&value<25) { - quality="Good"; + signal_info_view.quality="Good"; color="lime"; } - else if (value>=-10&&value<15) + else if (value>=10&&value<15) { - quality="Fair"; + signal_info_view.quality="Fair"; color="gold"; } else if (value<10) { - quality="Bad"; + signal_info_view.quality="Bad"; color="red"; } - sinr_info_view.percent=percent; - sinr_info_view.quality=quality; - sinr_info_view.style='width:'+sinr_info_view.percent+'%;background-color: '+color+';'; - - return sinr_info_view; + signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';'; } // 获取接收信号功率(RxLev)的信息视图 - function get_rxlev_info_view(network_type,value) + function set_rxlev_info_view(network_type,value,signal_info_view) { - value=parseFloat(value); - var sinr_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"}; - // 获取百分比 - var percent=100; if (network_type.includes("NR")) { - percent=get_percent(value,-153,31); + signal_info_view.percent=get_percent(value,-153,31); } else if (network_type.includes("LTE")) { - percent=get_percent(value,-140,-44); + signal_info_view.percent=get_percent(value,-140,-44); } else if (network_type.includes("WCDMA")) { - percent=get_percent(value,-120,-25); + signal_info_view.percent=get_percent(value,-120,-25); } else if (network_type.includes("GSM")) { - percent=get_percent(value,-110,-48); + signal_info_view.percent=get_percent(value,-110,-48); } // 获取样式 - var quality="Unknown"; var color="gray"; if (value>=-70) { - quality="Excellent"; + signal_info_view.quality="Excellent"; color="limegreen"; } else if (value>=-80&&value<-70) { - quality="Good"; + signal_info_view.quality="Good"; color="lime"; } else if (value>=-90&&value<-80) { - quality="Fair"; + signal_info_view.quality="Fair"; color="gold"; } - else if (value<-100) + else if (value<-90) { - quality="Bad"; + signal_info_view.quality="Bad"; color="red"; } - sinr_info_view.percent=percent; - sinr_info_view.quality=quality; - sinr_info_view.style='width:'+sinr_info_view.percent+'%;background-color: '+color+';'; - - return sinr_info_view; + signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';'; } //获取小区信息视图 @@ -446,13 +495,16 @@ end if (key=="RSRP") { - var rsrp_info_view=get_rsrp_info_view(network_type,value); - value='
'; + var unit="dBm"; + var signal_info_view=get_signal_info_view(network_type,"RSRP",value); + // value='
'; + value='
'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)
'; } else if (key=="RxLev") { - var rxlev_info_view=get_rxlev_info_view(network_type,value); - value='
'; + var unit="dBm"; + var signal_info_view=get_signal_info_view(network_type,"RxLev",value); + value='
'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)
'; } else { @@ -463,13 +515,15 @@ end if (key=="RSRQ") { - var rsrq_info_view=get_rsrq_info_view(network_type,value); - value='
'; + var unit="dB"; + var signal_info_view=get_signal_info_view(network_type,"RSRQ",value); + value='
'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)
'; } else if (key=="SINR") { - var sinr_info_view=get_sinr_info_view(network_type,value); - value='
'; + var unit="dB"; + var signal_info_view=get_signal_info_view(network_type,"SINR",value); + value='
'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)
'; } else { @@ -479,7 +533,7 @@ end else if (key=="SCS") { value=value+" KHz"; } - cell_info_view+=''+translation[key]+''+value+''; + cell_info_view+=''+translation[key]+' ('+key+')'+value+''; break; } } diff --git a/applications/luci-app-modem/po/zh-cn/modem.po b/applications/luci-app-modem/po/zh-cn/modem.po index ac455aa..009ace5 100644 --- a/applications/luci-app-modem/po/zh-cn/modem.po +++ b/applications/luci-app-modem/po/zh-cn/modem.po @@ -352,6 +352,18 @@ msgstr "网络信息" msgid "Network Type" msgstr "网络类型" +msgid "CQI UL" +msgstr "上行信道质量指示" + +msgid "CQI DL" +msgstr "下行信道质量指示" + +msgid "AMBR UL" +msgstr "上行访问最大比特率" + +msgid "AMBR DL" +msgstr "下行访问最大比特率" + msgid "Tx Rate" msgstr "上传速率" diff --git a/applications/luci-app-modem/root/etc/init.d/modem b/applications/luci-app-modem/root/etc/init.d/modem index 14c1493..7d227d2 100755 --- a/applications/luci-app-modem/root/etc/init.d/modem +++ b/applications/luci-app-modem/root/etc/init.d/modem @@ -121,6 +121,13 @@ set_ipv4_interface() local interface_name="$1" local network_interface="$2" + #删除原网络配置 + uci -q del network.${interface_name}.ipaddr + uci -q del network.${interface_name}.netmask + uci -q del network.${interface_name}.gateway + uci -q del network.${interface_name}.peerdns + uci -q del network.${interface_name}.dns + #添加或修改网络配置 uci set network.${interface_name}='interface' uci set network.${interface_name}.proto='dhcp' @@ -287,10 +294,6 @@ modemmanager() qmi() { - #设置网络接口 - local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) - set_interface "${modem_no}" "$network_interface" - #选择拨号工具 case $dial_tool in "quectel-CM") quectel_cm ;; @@ -302,11 +305,6 @@ qmi() gobinet() { - #获取网络接口 - local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) - #设置网络接口 - set_interface "${modem_no}" "$network_interface" - #拨号 procd_open_instance procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "gobinet" @@ -316,11 +314,6 @@ gobinet() ecm() { - #获取网络接口 - local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) - #设置网络接口 - set_interface "${modem_no}" "$network_interface" - #拨号 procd_open_instance procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "ecm" @@ -335,11 +328,6 @@ mbim() rndis() { - #获取网络接口 - local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) - #设置网络接口 - set_interface "${modem_no}" "$network_interface" - #拨号 procd_open_instance procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "rndis" @@ -632,20 +620,22 @@ dial() #查看移动网络是否已经有配置在运行 mkdir -m 0755 -p "${MODEM_RUNDIR}" - if [ -f "${MODEM_RUN_CONFIG}" ]; then #文件存在 - if grep -q "${network}" "${MODEM_RUN_CONFIG}"; then #是否记录该移动网络 - local config_id=$(awk -v network="${network}" -F',' '!/^#/ && $0 ~ network { print $2 }' "${MODEM_RUN_CONFIG}") - #该移动网络已存在,且已有其他配置运行 - if [ "$id" != "$config_id" ]; then - uci set modem.$1.enable=0 - uci commit modem - return 0 - fi - else - echo "${network},${id}" >> "${MODEM_RUN_CONFIG}" - fi - else + if [ ! -f "${MODEM_RUN_CONFIG}" ] || ! grep -q "${network}" "${MODEM_RUN_CONFIG}"; then + #文件不存在或者未记录该移动网络 echo "${network},${id}" >> "${MODEM_RUN_CONFIG}" + + #获取网络接口 + local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) + #设置网络接口 + set_interface "${modem_no}" "$network_interface" + else + local config_id=$(awk -v network="${network}" -F',' '!/^#/ && $0 ~ network { print $2 }' "${MODEM_RUN_CONFIG}") + #该移动网络已存在,且已有其他配置运行 + if [ "$id" != "$config_id" ]; then + uci set modem.$1.enable=0 + uci commit modem + return 0 + fi fi #设置网络预设 diff --git a/applications/luci-app-modem/root/usr/share/modem/fibocom.sh b/applications/luci-app-modem/root/usr/share/modem/fibocom.sh index 08c442d..3bf2e73 100755 --- a/applications/luci-app-modem/root/usr/share/modem/fibocom.sh +++ b/applications/luci-app-modem/root/usr/share/modem/fibocom.sh @@ -698,113 +698,126 @@ fibocom_cell_info() rat=$(fibocom_get_rat ${rat_num}) } - response=$(echo "$response" | sed -n '4p') - - case $rat in - "NR") - network_mode="NR5G-SA Mode" - nr_mcc=$(echo "$response" | awk -F',' '{print $3}') - nr_mnc=$(echo "$response" | awk -F',' '{print $4}') - nr_tac=$(echo "$response" | awk -F',' '{print $5}') - nr_cell_id=$(echo "$response" | awk -F',' '{print $6}') - nr_arfcn=$(echo "$response" | awk -F',' '{print $7}') - nr_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') - nr_band_num=$(echo "$response" | awk -F',' '{print $9}') - nr_band=$(fibocom_get_band "NR" ${nr_band_num}) - nr_dl_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') - nr_dl_bandwidth=$(fibocom_get_nr_dl_bandwidth ${nr_dl_bandwidth_num}) - nr_sinr_num=$(echo "$response" | awk -F',' '{print $11}') - nr_sinr=$(fibocom_get_sinr_num "NR" ${nr_sinr_num}) - nr_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') - nr_rxlev=$(fibocom_get_rxlev "NR" ${nr_rxlev_num}) - nr_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') - nr_rsrp=$(fibocom_get_rsrp "NR" ${nr_rsrp_num}) - nr_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') - nr_rsrq=$(fibocom_get_rsrq "NR" ${nr_rsrq_num}) - ;; - "LTE-NR") - network_mode="EN-DC Mode" - #LTE - endc_lte_mcc=$(echo "$response" | awk -F',' '{print $3}') - endc_lte_mnc=$(echo "$response" | awk -F',' '{print $4}') - endc_lte_tac=$(echo "$response" | awk -F',' '{print $5}') - endc_lte_cell_id=$(echo "$response" | awk -F',' '{print $6}') - endc_lte_earfcn=$(echo "$response" | awk -F',' '{print $7}') - endc_lte_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') - endc_lte_band_num=$(echo "$response" | awk -F',' '{print $9}') - endc_lte_band=$(fibocom_get_band "LTE" ${endc_lte_band_num}) - ul_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') - endc_lte_ul_bandwidth=$(fibocom_get_ul_bandwidth ${ul_bandwidth_num}) - endc_lte_dl_bandwidth="$endc_lte_ul_bandwidth" - endc_lte_rssnr_num=$(echo "$response" | awk -F',' '{print $11}') - endc_lte_rssnr=$(fibocom_get_rssnr ${endc_lte_rssnr_num}) - endc_lte_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') - endc_lte_rxlev=$(fibocom_get_rxlev "LTE" ${endc_lte_rxlev_num}) - endc_lte_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') - endc_lte_rsrp=$(fibocom_get_rsrp "LTE" ${endc_lte_rsrp_num}) - endc_lte_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') - endc_lte_rsrq=$(fibocom_get_rsrq "LTE" ${endc_lte_rsrq_num}) - #NR5G-NSA - endc_nr_mcc=$(echo "$response" | awk -F',' '{print $3}') - endc_nr_mnc=$(echo "$response" | awk -F',' '{print $4}') - endc_nr_tac=$(echo "$response" | awk -F',' '{print $5}') - endc_nr_cell_id=$(echo "$response" | awk -F',' '{print $6}') - endc_nr_arfcn=$(echo "$response" | awk -F',' '{print $7}') - endc_nr_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') - endc_nr_band_num=$(echo "$response" | awk -F',' '{print $9}') - endc_nr_band=$(fibocom_get_band "NR" ${endc_nr_band_num}) - nr_dl_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') - endc_nr_dl_bandwidth=$(fibocom_get_nr_dl_bandwidth ${nr_dl_bandwidth_num}) - endc_nr_sinr_num=$(echo "$response" | awk -F',' '{print $11}') - endc_nr_sinr=$(fibocom_get_sinr_num "NR" ${endc_nr_sinr_num}) - endc_nr_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') - endc_nr_rxlev=$(fibocom_get_rxlev "NR" ${endc_nr_rxlev_num}) - endc_nr_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') - endc_nr_rsrp=$(fibocom_get_rsrp "NR" ${endc_nr_rsrp_num}) - endc_nr_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') - endc_nr_rsrq=$(fibocom_get_rsrq "NR" ${endc_nr_rsrq_num}) - ;; - "LTE"|"eMTC"|"NB-IoT") - network_mode="LTE Mode" - lte_mcc=$(echo "$response" | awk -F',' '{print $3}') - lte_mnc=$(echo "$response" | awk -F',' '{print $4}') - lte_tac=$(echo "$response" | awk -F',' '{print $5}') - lte_cell_id=$(echo "$response" | awk -F',' '{print $6}') - lte_earfcn=$(echo "$response" | awk -F',' '{print $7}') - lte_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') - lte_band_num=$(echo "$response" | awk -F',' '{print $9}') - lte_band=$(fibocom_get_band "LTE" ${lte_band_num}) - ul_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') - lte_ul_bandwidth=$(fibocom_get_ul_bandwidth ${ul_bandwidth_num}) - lte_dl_bandwidth="$lte_ul_bandwidth" - lte_rssnr=$(echo "$response" | awk -F',' '{print $11}') - lte_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') - lte_rxlev=$(fibocom_get_rxlev "LTE" ${lte_rxlev_num}) - lte_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') - lte_rsrp=$(fibocom_get_rsrp "LTE" ${lte_rsrp_num}) - lte_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') - lte_rsrq=$(fibocom_get_rsrq "LTE" ${lte_rsrq_num}) - ;; - "WCDMA"|"UMTS") - network_mode="WCDMA Mode" - wcdma_mcc=$(echo "$response" | awk -F',' '{print $3}') - wcdma_mnc=$(echo "$response" | awk -F',' '{print $4}') - wcdma_lac=$(echo "$response" | awk -F',' '{print $5}') - wcdma_cell_id=$(echo "$response" | awk -F',' '{print $6}') - wcdma_uarfcn=$(echo "$response" | awk -F',' '{print $7}') - wcdma_psc=$(echo "$response" | awk -F',' '{print $8}') - wcdma_band_num=$(echo "$response" | awk -F',' '{print $9}') - wcdma_band=$(fibocom_get_band "WCDMA" ${wcdma_band_num}) - wcdma_ecno=$(echo "$response" | awk -F',' '{print $10}') - wcdma_rscp=$(echo "$response" | awk -F',' '{print $11}') - wcdma_rac=$(echo "$response" | awk -F',' '{print $12}') - wcdma_rxlev_num=$(echo "$response" | awk -F',' '{print $13}') - wcdma_rxlev=$(fibocom_get_rxlev "WCDMA" ${wcdma_rxlev_num}) - wcdma_reserved=$(echo "$response" | awk -F',' '{print $14}') - wcdma_ecio_num=$(echo "$response" | awk -F',' '{print $15}' | sed 's/\r//g') - wcdma_ecio=$(fibocom_get_ecio ${wcdma_ecio_num}) - ;; - esac + for response in $response; do + #排除+GTCCINFO:、NR service cell:还有空行 + [ -n "$response" ] && [[ "$response" = *","* ]] && { + + case $rat in + "NR") + network_mode="NR5G-SA Mode" + nr_mcc=$(echo "$response" | awk -F',' '{print $3}') + nr_mnc=$(echo "$response" | awk -F',' '{print $4}') + nr_tac=$(echo "$response" | awk -F',' '{print $5}') + nr_cell_id=$(echo "$response" | awk -F',' '{print $6}') + nr_arfcn=$(echo "$response" | awk -F',' '{print $7}') + nr_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') + nr_band_num=$(echo "$response" | awk -F',' '{print $9}') + nr_band=$(fibocom_get_band "NR" ${nr_band_num}) + nr_dl_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') + nr_dl_bandwidth=$(fibocom_get_nr_dl_bandwidth ${nr_dl_bandwidth_num}) + nr_sinr_num=$(echo "$response" | awk -F',' '{print $11}') + nr_sinr=$(fibocom_get_sinr_num "NR" ${nr_sinr_num}) + nr_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') + nr_rxlev=$(fibocom_get_rxlev "NR" ${nr_rxlev_num}) + nr_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') + nr_rsrp=$(fibocom_get_rsrp "NR" ${nr_rsrp_num}) + nr_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') + nr_rsrq=$(fibocom_get_rsrq "NR" ${nr_rsrq_num}) + ;; + "LTE-NR") + network_mode="EN-DC Mode" + #LTE + endc_lte_mcc=$(echo "$response" | awk -F',' '{print $3}') + endc_lte_mnc=$(echo "$response" | awk -F',' '{print $4}') + endc_lte_tac=$(echo "$response" | awk -F',' '{print $5}') + endc_lte_cell_id=$(echo "$response" | awk -F',' '{print $6}') + endc_lte_earfcn=$(echo "$response" | awk -F',' '{print $7}') + endc_lte_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') + endc_lte_band_num=$(echo "$response" | awk -F',' '{print $9}') + endc_lte_band=$(fibocom_get_band "LTE" ${endc_lte_band_num}) + ul_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') + endc_lte_ul_bandwidth=$(fibocom_get_ul_bandwidth ${ul_bandwidth_num}) + endc_lte_dl_bandwidth="$endc_lte_ul_bandwidth" + endc_lte_rssnr_num=$(echo "$response" | awk -F',' '{print $11}') + endc_lte_rssnr=$(fibocom_get_rssnr ${endc_lte_rssnr_num}) + endc_lte_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') + endc_lte_rxlev=$(fibocom_get_rxlev "LTE" ${endc_lte_rxlev_num}) + endc_lte_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') + endc_lte_rsrp=$(fibocom_get_rsrp "LTE" ${endc_lte_rsrp_num}) + endc_lte_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') + endc_lte_rsrq=$(fibocom_get_rsrq "LTE" ${endc_lte_rsrq_num}) + #NR5G-NSA + endc_nr_mcc=$(echo "$response" | awk -F',' '{print $3}') + endc_nr_mnc=$(echo "$response" | awk -F',' '{print $4}') + endc_nr_tac=$(echo "$response" | awk -F',' '{print $5}') + endc_nr_cell_id=$(echo "$response" | awk -F',' '{print $6}') + endc_nr_arfcn=$(echo "$response" | awk -F',' '{print $7}') + endc_nr_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') + endc_nr_band_num=$(echo "$response" | awk -F',' '{print $9}') + endc_nr_band=$(fibocom_get_band "NR" ${endc_nr_band_num}) + nr_dl_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') + endc_nr_dl_bandwidth=$(fibocom_get_nr_dl_bandwidth ${nr_dl_bandwidth_num}) + endc_nr_sinr_num=$(echo "$response" | awk -F',' '{print $11}') + endc_nr_sinr=$(fibocom_get_sinr_num "NR" ${endc_nr_sinr_num}) + endc_nr_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') + endc_nr_rxlev=$(fibocom_get_rxlev "NR" ${endc_nr_rxlev_num}) + endc_nr_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') + endc_nr_rsrp=$(fibocom_get_rsrp "NR" ${endc_nr_rsrp_num}) + endc_nr_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') + endc_nr_rsrq=$(fibocom_get_rsrq "NR" ${endc_nr_rsrq_num}) + ;; + "LTE"|"eMTC"|"NB-IoT") + network_mode="LTE Mode" + lte_mcc=$(echo "$response" | awk -F',' '{print $3}') + lte_mnc=$(echo "$response" | awk -F',' '{print $4}') + lte_tac=$(echo "$response" | awk -F',' '{print $5}') + lte_cell_id=$(echo "$response" | awk -F',' '{print $6}') + lte_earfcn=$(echo "$response" | awk -F',' '{print $7}') + lte_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}') + lte_band_num=$(echo "$response" | awk -F',' '{print $9}') + lte_band=$(fibocom_get_band "LTE" ${lte_band_num}) + ul_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}') + lte_ul_bandwidth=$(fibocom_get_ul_bandwidth ${ul_bandwidth_num}) + lte_dl_bandwidth="$lte_ul_bandwidth" + lte_rssnr=$(echo "$response" | awk -F',' '{print $11}') + lte_rxlev_num=$(echo "$response" | awk -F',' '{print $12}') + lte_rxlev=$(fibocom_get_rxlev "LTE" ${lte_rxlev_num}) + lte_rsrp_num=$(echo "$response" | awk -F',' '{print $13}') + lte_rsrp=$(fibocom_get_rsrp "LTE" ${lte_rsrp_num}) + lte_rsrq_num=$(echo "$response" | awk -F',' '{print $14}' | sed 's/\r//g') + lte_rsrq=$(fibocom_get_rsrq "LTE" ${lte_rsrq_num}) + ;; + "WCDMA"|"UMTS") + network_mode="WCDMA Mode" + wcdma_mcc=$(echo "$response" | awk -F',' '{print $3}') + wcdma_mnc=$(echo "$response" | awk -F',' '{print $4}') + wcdma_lac=$(echo "$response" | awk -F',' '{print $5}') + wcdma_cell_id=$(echo "$response" | awk -F',' '{print $6}') + wcdma_uarfcn=$(echo "$response" | awk -F',' '{print $7}') + wcdma_psc=$(echo "$response" | awk -F',' '{print $8}') + wcdma_band_num=$(echo "$response" | awk -F',' '{print $9}') + wcdma_band=$(fibocom_get_band "WCDMA" ${wcdma_band_num}) + wcdma_ecno=$(echo "$response" | awk -F',' '{print $10}') + wcdma_rscp=$(echo "$response" | awk -F',' '{print $11}') + wcdma_rac=$(echo "$response" | awk -F',' '{print $12}') + wcdma_rxlev_num=$(echo "$response" | awk -F',' '{print $13}') + wcdma_rxlev=$(fibocom_get_rxlev "WCDMA" ${wcdma_rxlev_num}) + wcdma_reserved=$(echo "$response" | awk -F',' '{print $14}') + wcdma_ecio_num=$(echo "$response" | awk -F',' '{print $15}' | sed 's/\r//g') + wcdma_ecio=$(fibocom_get_ecio ${wcdma_ecio_num}) + ;; + esac + + #联发科平台特殊处理(FM350-GL) + [[ "$name" = "FM350-GL" ]] && { + nr_sinr="${nr_sinr_num}" + endc_nr_sinr="${endc_nr_sinr_num}" + } + + #只选择第一个,然后退出 + break + } + done } diff --git a/applications/luci-app-modem/root/usr/share/modem/modem_info.sh b/applications/luci-app-modem/root/usr/share/modem/modem_info.sh index 4eee5c7..469d84d 100755 --- a/applications/luci-app-modem/root/usr/share/modem/modem_info.sh +++ b/applications/luci-app-modem/root/usr/share/modem/modem_info.sh @@ -18,7 +18,7 @@ init_modem_info() at_port='-' #AT串口 mode='unknown' #拨号模式 temperature="NaN $(printf "\xc2\xb0")C" #温度 - update_time='-' #更新时间 + update_time='-' #更新时间 #SIM卡信息 sim_status="unknown" #SIM卡状态 @@ -31,9 +31,13 @@ init_modem_info() #网络信息 connect_status="disconnect" #SIM卡状态 - network_type="-" #蜂窝网络类型 - tx_rate="-" #上传速率 - rx_rate="-" #下载速率 + network_type="-" #蜂窝网络类型 + cqi_ul="-" #上行信道质量指示 + cqi_dl="-" #下行信道质量指示 + ambr_ul="-" #上行签约速率 + ambr_dl="-" #下行签约速率 + tx_rate="-" #上传速率 + rx_rate="-" #下载速率 #小区信息 network_mode="-" #网络模式 @@ -167,6 +171,10 @@ set_network_info() { network_info="\"network_info\":[ {\"Network Type\":\"$network_type\", \"full_name\":\"Network Type\"}, + {\"CQI UL\":\"$cqi_ul\", \"full_name\":\"Channel Quality Indicator for Uplink\"}, + {\"CQI DL\":\"$cqi_dl\", \"full_name\":\"Channel Quality Indicator for Downlink\"}, + {\"AMBR UL\":\"$ambr_ul\", \"full_name\":\"Access Maximum Bit Rate for Uplink\"}, + {\"AMBR DL\":\"$ambr_dl\", \"full_name\":\"Access Maximum Bit Rate for Downlink\"}, {\"Tx Rate\":\"$tx_rate\", \"full_name\":\"Transmit Rate\"}, {\"Rx Rate\":\"$rx_rate\", \"full_name\":\"Receive Rate\"} ]," diff --git a/applications/luci-app-modem/root/usr/share/modem/modem_network_task.sh b/applications/luci-app-modem/root/usr/share/modem/modem_network_task.sh index 41b172e..ca281de 100755 --- a/applications/luci-app-modem/root/usr/share/modem/modem_network_task.sh +++ b/applications/luci-app-modem/root/usr/share/modem/modem_network_task.sh @@ -191,8 +191,8 @@ modem_network_task() #获取AT串口,制造商,平台,连接定义,接口名称 local at_port=$(uci -q get modem.modem${modem_no}.at_port) - local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer) - local platform=$(uci -q get modem.modem${modem_no}.platform) + local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer) + local platform=$(uci -q get modem.modem${modem_no}.platform) local define_connect=$(uci -q get modem.modem${modem_no}.define_connect) local interface_name="wwan_5g_${modem_no}" local interface_name_ipv6="wwan6_5g_${modem_no}" @@ -281,6 +281,7 @@ modem_network_task() #重新设置网络接口(广和通FM350-GL) if [ "$manufacturer" = "fibocom" ] && [ "$platform" = "mediatek" ]; then reset_network_interface "${at_port}" "${define_connect}" "${modem_no}" + sleep 3s fi [ "$mode" != "modemmanager" ] && { diff --git a/applications/luci-app-modem/root/usr/share/modem/modem_support.json b/applications/luci-app-modem/root/usr/share/modem/modem_support.json index a902343..542d920 100644 --- a/applications/luci-app-modem/root/usr/share/modem/modem_support.json +++ b/applications/luci-app-modem/root/usr/share/modem/modem_support.json @@ -120,54 +120,6 @@ "data_interface":"usb", "define_connect":"1", "modes":["qmi","gobinet","ecm","mbim","rndis"] - }, - "device":{ - "quectel":{ - "unisoc":{ - "vendor_id":["2c7c"], - "product_id":["6001","6002","6004","6005","6006","6007","0900","0901","0902","0903","0904"] - }, - "qualcomm":{ - "vendor_id":["2c7c"], - "product_id":["0121","0125","0191","0195","0296","0306","030b","0435","0452","0455","0512","0620","0800","0801"] - }, - "mediatek":{ - "vendor_id":["2c7c"], - "product_id":["0700","7001","7003"] - } - }, - "fibocom":{ - "unisoc":{ - "vendor_id":["2cb7","3c93","3763"], - "product_id":["0a04","0a05","0a06","0a07","3c93","ffff"] - }, - "qualcomm":{ - "vendor_id":["2cb7"], - "product_id":["0104","0105","0106","0107","0108","0109","010A","010B","010F","0110","0111"] - }, - "mediatek":{ - "vendor_id":["0e8d"], - "product_id":["7126","7127"] - } - }, - "meig":{ - "unisoc":{ - "vendor_id":["2dee"], - "product_id":["4d50","4d51","4d52","4d53"] - }, - "qualcomm":{ - "vendor_id":["2dee","05c6"], - "product_id":["4d22","4d23","4d38","4d45","f601"] - }, - "hisilicon":{ - "vendor_id":["2dee","4d20"], - "product_id":["7126","7127"] - }, - "asrmicro":{ - "vendor_id":["2dee"], - "product_id":["4d57","4d58","4d59"] - } - } } }, "pcie":{ @@ -199,6 +151,54 @@ "define_connect":"1", "modes":["qmi","mbim"] } + }, + "device":{ + "quectel":{ + "unisoc":{ + "vendor_id":["2c7c"], + "product_id":["6001","6002","6004","6005","6006","6007","0900","0901","0902","0903","0904"] + }, + "qualcomm":{ + "vendor_id":["2c7c"], + "product_id":["0121","0125","0191","0195","0296","0306","030b","0435","0452","0455","0512","0620","0800","0801"] + }, + "mediatek":{ + "vendor_id":["2c7c"], + "product_id":["0700","7001","7003"] + } + }, + "fibocom":{ + "unisoc":{ + "vendor_id":["2cb7","3c93","3763"], + "product_id":["0a04","0a05","0a06","0a07","3c93","ffff"] + }, + "qualcomm":{ + "vendor_id":["2cb7"], + "product_id":["0104","0105","0106","0107","0108","0109","010A","010B","010F","0110","0111"] + }, + "mediatek":{ + "vendor_id":["0e8d"], + "product_id":["7126","7127"] + } + }, + "meig":{ + "unisoc":{ + "vendor_id":["2dee"], + "product_id":["4d50","4d51","4d52","4d53"] + }, + "qualcomm":{ + "vendor_id":["2dee","05c6"], + "product_id":["4d22","4d23","4d38","4d45","f601"] + }, + "hisilicon":{ + "vendor_id":["2dee","4d20"], + "product_id":["7126","7127"] + }, + "asrmicro":{ + "vendor_id":["2dee"], + "product_id":["4d57","4d58","4d59"] + } + } } } } diff --git a/applications/luci-app-modem/root/usr/share/modem/modem_util.sh b/applications/luci-app-modem/root/usr/share/modem/modem_util.sh index 814e30d..48867e5 100755 --- a/applications/luci-app-modem/root/usr/share/modem/modem_util.sh +++ b/applications/luci-app-modem/root/usr/share/modem/modem_util.sh @@ -213,8 +213,15 @@ m_add_usb_id() #如果已经添加则返回 grep -q "${manufacturer_id} ${product_id}" "${new_id_path}" && return - #添加ID - echo "${manufacturer_id} ${product_id}" >> "${new_id_path}" + + while true; do + if [ -f "$new_id_path" ]; then + #添加ID + echo "${manufacturer_id} ${product_id}" >> "${new_id_path}" + break + fi + sleep 5s + done } #设置模组硬件配置 @@ -329,6 +336,20 @@ m_set_usb_device() fi } +#处理特殊的模组名称 +# $1:模组名称 +handle_special_modem_name() +{ + local modem_name="$1" + + #FM350-GL-00 5G Module + [[ "$modem_name" = *"fm350-gl"* ]] && { + modem_name="fm350-gl" + } + + echo "$modem_name" +} + #重新尝试设置模组 # $1:模组序号 # $2:AT串口 @@ -351,21 +372,22 @@ retry_set_modem_config() local at_command="AT+CGMM?" local modem_name=$(at ${at_port} ${at_command} | grep "+CGMM: " | awk -F'"' '{print $2}' | tr 'A-Z' 'a-z') + #再一次获取模组名称 [ -z "$modem_name" ] && { at_command="AT+CGMM" modem_name=$(at ${at_port} ${at_command} | sed -n '2p' | sed 's/\r//g' | tr 'A-Z' 'a-z') } + #处理特殊的模组名称 [ -n "$modem_name" ] && { + modem_name="$(handle_special_modem_name ${modem_name})" + } - #特殊处理FM350-GL-00 5G Module - [[ "$modem_name" = *"fm350-gl"* ]] && { - modem_name="fm350-gl" - } - - #获取模组信息 - local data_interface=$(uci -q get modem.modem${modem_no}.data_interface) - local modem_info=$(echo ${modem_support} | jq '.modem_support.'$data_interface'."'$modem_name'"') + #获取模组信息 + local data_interface=$(uci -q get modem.modem${modem_no}.data_interface) + local modem_info=$(echo ${modem_support} | jq '.modem_support.'$data_interface'."'$modem_name'"') + + [ -n "$modem_name" ] && [ "$modem_info" != "null" ] && { #获取制造商 local manufacturer=$(echo ${modem_info} | jq -r '.manufacturer') diff --git a/applications/luci-app-modem/root/usr/share/modem/quectel.sh b/applications/luci-app-modem/root/usr/share/modem/quectel.sh index 23adaaf..da56758 100755 --- a/applications/luci-app-modem/root/usr/share/modem/quectel.sh +++ b/applications/luci-app-modem/root/usr/share/modem/quectel.sh @@ -491,6 +491,24 @@ quectel_network_info() # per=$((csq * 100/31))"%" # fi + #最大比特率,信道质量指示 + at_command='AT+QNWCFG="nr5g_ambr"' + response=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $at_command | grep "+QNWCFG:") + for context in $response; do + local apn=$(echo "$context" | awk -F'"' '{print $4}' | tr 'a-z' 'A-Z') + if [ -n "$apn" ] && [ "$apn" != "IMS" ]; then + #CQL UL(上行信道质量指示) + cqi_ul=$(echo "$context" | awk -F',' '{print $5}') + #CQI DL(下行信道质量指示) + cqi_dl=$(echo "$context" | awk -F',' '{print $3}') + #AMBR UL(上行签约速率,单位,Mbps) + ambr_ul=$(echo "$context" | awk -F',' '{print $6}' | sed 's/\r//g') + #AMBR DL(下行签约速率,单位,Mbps) + ambr_dl=$(echo "$context" | awk -F',' '{print $4}') + break + fi + done + #速率统计 at_command='AT+QNWCFG="up/down"' response=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $at_command | grep "+QNWCFG:" | sed 's/+QNWCFG: "up\/down",//g' | sed 's/\r//g')