diff --git a/luci-app-modem/Makefile b/luci-app-modem/Makefile index 113f298..60d3891 100644 --- a/luci-app-modem/Makefile +++ b/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.1 +PKG_VERSION:=1.4.2 PKG_LICENSE:=GPLv3 PKG_LINCESE_FILES:=LICENSE PKF_MAINTAINER:=siriling diff --git a/luci-app-modem/luasrc/controller/modem.lua b/luci-app-modem/luasrc/controller/modem.lua index ed41a5d..e486cfd 100644 --- a/luci-app-modem/luasrc/controller/modem.lua +++ b/luci-app-modem/luasrc/controller/modem.lua @@ -315,6 +315,12 @@ function getModemInfo() end end end + --添加额外翻译 + translation["Unknown"]=luci.i18n.translate("Unknown") + translation["Excellent"]=luci.i18n.translate("Excellent") + translation["Good"]=luci.i18n.translate("Good") + translation["Fair"]=luci.i18n.translate("Fair") + translation["Bad"]=luci.i18n.translate("Bad") --整合数据 local data={} diff --git a/luci-app-modem/luasrc/model/cbi/modem/dial_config.lua b/luci-app-modem/luasrc/model/cbi/modem/dial_config.lua index 4970b60..95dd044 100644 --- a/luci-app-modem/luasrc/model/cbi/modem/dial_config.lua +++ b/luci-app-modem/luasrc/model/cbi/modem/dial_config.lua @@ -76,12 +76,6 @@ getMobileNetwork() --------advanced-------- --- 配置ID -id = s:taboption("advanced", ListValue, "id", translate("Config ID")) -id.rmempty = false -id:value(arg[1]) --- uci:set('modem',arg[1],'id',arg[1]) - -- 拨号工具 dial_tool = s:taboption("advanced", ListValue, "dial_tool", translate("Dial Tool")) dial_tool.description = translate("After switching the dialing tool, it may be necessary to restart the module or restart the router to recognize the module.") @@ -136,4 +130,13 @@ password:depends("auth", "both") password:depends("auth", "pap") password:depends("auth", "chap") +-- 配置ID +id = s:taboption("advanced", ListValue, "id", translate("Config ID")) +id.rmempty = false +id:value(arg[1]) +-- uci:set('modem',arg[1],'id',arg[1]) + +-- 隐藏配置ID +m:append(Template("modem/hide_dial_config_id")) + return m diff --git a/luci-app-modem/luasrc/model/cbi/modem/dial_overview.lua b/luci-app-modem/luasrc/model/cbi/modem/dial_overview.lua index daaee29..0654b8a 100644 --- a/luci-app-modem/luasrc/model/cbi/modem/dial_overview.lua +++ b/luci-app-modem/luasrc/model/cbi/modem/dial_overview.lua @@ -31,7 +31,9 @@ function s.create(uci, t) end function s.remove(uci, t) uci.map.proceed = true - uci.map:del(t) + -- 设置删除 + uci.map:set(t,"delete","1") + -- uci.map:del(t) luci.http.redirect(d.build_url("admin", "network", "modem","dial_overview")) end diff --git a/luci-app-modem/luasrc/view/modem/hide_dial_config_id.htm b/luci-app-modem/luasrc/view/modem/hide_dial_config_id.htm new file mode 100644 index 0000000..98b4b3a --- /dev/null +++ b/luci-app-modem/luasrc/view/modem/hide_dial_config_id.htm @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/luci-app-modem/luasrc/view/modem/modem_info.htm b/luci-app-modem/luasrc/view/modem/modem_info.htm index d50bb24..fe2d192 100644 --- a/luci-app-modem/luasrc/view/modem/modem_info.htm +++ b/luci-app-modem/luasrc/view/modem/modem_info.htm @@ -148,8 +148,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") { @@ -174,6 +174,232 @@ end network_info_Element.innerHTML=network_info_view; } + // 获取一个范围的百分比 + function get_percent(value, min, max) + { + var percent; + if (value <= min) { + percent=0; + } else if (value >= max) { + percent=100; + } else { + percent=((value - min) / (max - min)) * 100; + } + return percent.toFixed(2); + } + + // 获取参考信号接收功率(RSRP)的信息视图 + function get_rsrp_info_view(network_type,value) + { + value=parseFloat(value); + var rsrp_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); + } + else if (network_type.includes("LTE")) + { + percent=get_percent(value,-140,-44); + } + else if (network_type.includes("WCDMA")) + { + // percent=get_percent(value,-140,-44); + } + + // 获取样式 + var quality="Unknown"; + var color="gray"; + if (value>=-70) + { + quality="Excellent"; + color="limegreen"; + } + else if (value>=-80&&value<-70) + { + quality="Good"; + color="lime"; + } + else if (value>=-90&&value<-80) + { + quality="Fair"; + color="gold"; + } + else if (value<-90) + { + 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; + } + + // 获取参考信号接收质量(RSRQ)的信息视图 + function get_rsrq_info_view(network_type,value) + { + 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); + } + else if (network_type.includes("LTE")) + { + percent=get_percent(value,-19.5,-3); + } + else if (network_type.includes("WCDMA")) + { + // percent=get_percent(value,-19.5,-3); + } + + // 获取样式 + var quality="Unknown"; + var color="gray"; + if (value>=-10) + { + quality="Excellent"; + color="limegreen"; + } + else if (value>=-15&&value<-10) + { + quality="Good"; + color="lime"; + } + else if (value>=-20&&value<-15) + { + quality="Fair"; + color="gold"; + } + else if (value<-20) + { + 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; + } + + // 获取信噪比(SINR)的信息视图 + function get_sinr_info_view(network_type,value) + { + 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); + } + else if (network_type.includes("LTE")) + { + percent=get_percent(value,-20,-30); + } + else if (network_type.includes("WCDMA")) + { + // percent=get_percent(value,-20,-30); + } + + // 获取样式 + var quality="Unknown"; + var color="gray"; + if (value>=25) + { + quality="Excellent"; + color="limegreen"; + } + else if (value>=15&&value<25) + { + quality="Good"; + color="lime"; + } + else if (value>=10&&value<15) + { + quality="Fair"; + color="gold"; + } + else if (value<10) + { + 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; + } + + // 获取接收信号功率(RxLev)的信息视图 + function get_rxlev_info_view(network_type,value) + { + 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); + } + else if (network_type.includes("LTE")) + { + percent=get_percent(value,-140,-44); + } + else if (network_type.includes("WCDMA")) + { + percent=get_percent(value,-120,-25); + } + else if (network_type.includes("GSM")) + { + percent=get_percent(value,-110,-48); + } + + // 获取样式 + var quality="Unknown"; + var color="gray"; + if (value>=-70) + { + quality="Excellent"; + color="limegreen"; + } + else if (value>=-80&&value<-70) + { + quality="Good"; + color="lime"; + } + else if (value>=-90&&value<-80) + { + quality="Fair"; + color="gold"; + } + else if (value<-100) + { + 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; + } + //获取小区信息视图 function get_cell_info_view(network_mode_info,network_type,translation) { @@ -204,28 +430,56 @@ end //添加单位 if (key=="Band") { if (network_type.includes("NR")) { - value="N"+value + value="N"+value; } else if (network_type.includes("LTE")) { - value="B"+value + value="B"+value; } else if (network_type.includes("WCDMA")) { - value="B"+value + value="B"+value; } } else if (key=="UL Bandwidth"||key=="DL Bandwidth") { - value=value+" MHz" + value=value+" MHz"; } else if (key=="RSRP"||key=="TX Power"||key=="RxLev") { - value=value+" dBm" + + if (key=="RSRP") + { + var rsrp_info_view=get_rsrp_info_view(network_type,value); + value='
'; + } + else if (key=="RxLev") + { + var rxlev_info_view=get_rxlev_info_view(network_type,value); + value='
'; + } + else + { + value=value+" dBm"; + } } else if (key=="RSRQ"||key=="SINR"||key=="RSSNR"||key=="Ec/Io") { - value=value+" dB" + + if (key=="RSRQ") + { + var rsrq_info_view=get_rsrq_info_view(network_type,value); + value='
'; + } + else if (key=="SINR") + { + var sinr_info_view=get_sinr_info_view(network_type,value); + value='
'; + } + else + { + value=value+" dB"; + } } else if (key=="SCS") { - value=value+" KHz" + value=value+" KHz"; } - cell_info_view+=''+translation[key]+''+value+''; + cell_info_view+=''+translation[key]+' ('+key+')'+value+''; break; } } diff --git a/luci-app-modem/po/zh-cn/modem.po b/luci-app-modem/po/zh-cn/modem.po index aef3c26..009ace5 100644 --- a/luci-app-modem/po/zh-cn/modem.po +++ b/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 "上传速率" @@ -523,6 +535,18 @@ msgstr "中国电信" msgid "46011" msgstr "中国电信" +msgid "Excellent" +msgstr "非常好" + +msgid "Good" +msgstr "好" + +msgid "Fair" +msgstr "一般" + +msgid "Bad" +msgstr "差" + msgid "Plugin Config" msgstr "插件配置" diff --git a/luci-app-modem/po/zh_Hans/modem.po b/luci-app-modem/po/zh_Hans/modem.po index aef3c26..ac455aa 100644 --- a/luci-app-modem/po/zh_Hans/modem.po +++ b/luci-app-modem/po/zh_Hans/modem.po @@ -523,6 +523,18 @@ msgstr "中国电信" msgid "46011" msgstr "中国电信" +msgid "Excellent" +msgstr "非常好" + +msgid "Good" +msgstr "好" + +msgid "Fair" +msgstr "一般" + +msgid "Bad" +msgstr "差" + msgid "Plugin Config" msgstr "插件配置" diff --git a/luci-app-modem/root/etc/init.d/modem b/luci-app-modem/root/etc/init.d/modem index 3fa5b54..7d227d2 100755 --- a/luci-app-modem/root/etc/init.d/modem +++ b/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" @@ -547,41 +535,52 @@ stop_dial() if [ -f "${MODEM_RUN_CONFIG}" ] && grep -q "${network}" "${MODEM_RUN_CONFIG}"; then #该配置ID在运行,需要删除记录 sed -i "/${id}/d" "${MODEM_RUN_CONFIG}" - else - return 0 - fi - #获取模块序号 - get_modem_no "${network}" + #获取模块序号 + get_modem_no "${network}" - #获取模组的拨号模式 - [ -z "${modem_no}" ] && return 0 - local mode=$(get_mode ${modem_no}) - [ -z "$mode" ] || [ "$mode" = "unknown" ] && return + #获取模组的拨号模式 + [ -z "${modem_no}" ] && return 0 + local mode=$(get_mode ${modem_no}) + [ -z "$mode" ] || [ "$mode" = "unknown" ] && return + + #根据不同的拨号模式停止拨号 + if [ "$mode" = "qmi" ]; then + stop_qmi + elif [ "$mode" = "gobinet" ]; then + stop_gobinet + elif [ "$mode" = "ecm" ]; then + stop_ecm + elif [ "$mode" = "mbim" ]; then + stop_mbim + elif [ "$mode" = "rndis" ]; then + stop_rndis + elif [ "$mode" = "ncm" ]; then + stop_ncm + fi - #根据不同的拨号模式停止拨号 - if [ "$mode" = "qmi" ]; then - stop_qmi - elif [ "$mode" = "gobinet" ]; then - stop_gobinet - elif [ "$mode" = "ecm" ]; then - stop_ecm - elif [ "$mode" = "mbim" ]; then - stop_mbim - elif [ "$mode" = "rndis" ]; then - stop_rndis - elif [ "$mode" = "ncm" ]; then - stop_ncm fi } dial() { - local enable #启用 - local id #ID + local enable #启用 + local id #ID + local delete #删除 config_get enable $1 enable config_get id $1 id + config_get delete $1 delete + + #删除拨号配置 + [ "$delete" = "1" ] && { + stop_dial "$id" + uci -q del modem.${id} + uci commit modem + return 0 + } + + #停止拨号配置 [ "$enable" = "0" ] && { stop_dial "$id" return 0 @@ -621,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/luci-app-modem/root/usr/share/modem/fibocom.sh b/luci-app-modem/root/usr/share/modem/fibocom.sh index ab2671c..3bf2e73 100755 --- a/luci-app-modem/root/usr/share/modem/fibocom.sh +++ b/luci-app-modem/root/usr/share/modem/fibocom.sh @@ -609,6 +609,34 @@ fibocom_get_nr_dl_bandwidth() echo "$nr_dl_bandwidth" } +#获取信噪比 +# $1:网络类型 +# $2:信噪比数字 +fibocom_get_sinr_num() +{ + local sinr + case $1 in + "LTE") sinr=$(awk "BEGIN{ printf \"%.2f\", $2 * 0.5 - 23.5 }" | sed 's/\.*0*$//') ;; + "NR") sinr=$(awk "BEGIN{ printf \"%.2f\", $2 * 0.5 - 23.5 }" | sed 's/\.*0*$//') ;; + esac + echo "$sinr" +} + +#获取接收信号功率 +# $1:网络类型 +# $2:接收信号功率数字 +fibocom_get_rxlev() +{ + local rxlev + case $1 in + "GSM") rxlev=$(($2-110)) ;; + "WCDMA") rxlev=$(($2-121)) ;; + "LTE") rxlev=$(($2-141)) ;; + "NR") rxlev=$(($2-157)) ;; + esac + echo "$rxlev" +} + #获取参考信号接收功率 # $1:网络类型 # $2:参考信号接收功率数字 @@ -644,20 +672,6 @@ fibocom_get_rssnr() echo "$rssnr" } -#获取接收信号功率 -# $1:网络类型 -# $2:接收信号功率数字 -fibocom_get_rxlev() -{ - local rxlev - case $1 in - "WCDMA") rxlev=$(($2-121)) ;; - "LTE") rxlev=$(($2-141)) ;; - "NR") rxlev=$(($2-157)) ;; - esac - echo "$rxlev" -} - #获取Ec/Io # $1:Ec/Io数字 fibocom_get_ecio() @@ -684,111 +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=$(echo "$response" | awk -F',' '{print $11}') - 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=$(echo "$response" | awk -F',' '{print $11}') - 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/luci-app-modem/root/usr/share/modem/modem_info.sh b/luci-app-modem/root/usr/share/modem/modem_info.sh index 4eee5c7..469d84d 100755 --- a/luci-app-modem/root/usr/share/modem/modem_info.sh +++ b/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/luci-app-modem/root/usr/share/modem/modem_network_task.sh b/luci-app-modem/root/usr/share/modem/modem_network_task.sh index 41b172e..ca281de 100755 --- a/luci-app-modem/root/usr/share/modem/modem_network_task.sh +++ b/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/luci-app-modem/root/usr/share/modem/modem_support.json b/luci-app-modem/root/usr/share/modem/modem_support.json index fe78c0b..a902343 100644 --- a/luci-app-modem/root/usr/share/modem/modem_support.json +++ b/luci-app-modem/root/usr/share/modem/modem_support.json @@ -104,6 +104,70 @@ "data_interface":"usb", "define_connect":"1", "modes":["qmi","gobinet","ecm","mbim","rndis","ncm"] + }, + "SRM815":{ + "manufacturer_id":"2dee", + "manufacturer":"meig", + "platform":"qualcomm", + "data_interface":"usb", + "define_connect":"1", + "modes":["qmi","gobinet","ecm","mbim","rndis"] + }, + "SRM825":{ + "manufacturer_id":"2dee", + "manufacturer":"meig", + "platform":"qualcomm", + "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":{ diff --git a/luci-app-modem/root/usr/share/modem/modem_util.sh b/luci-app-modem/root/usr/share/modem/modem_util.sh index 814e30d..8b930fb 100755 --- a/luci-app-modem/root/usr/share/modem/modem_util.sh +++ b/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 } #设置模组硬件配置 diff --git a/luci-app-modem/root/usr/share/modem/quectel.sh b/luci-app-modem/root/usr/share/modem/quectel.sh index 23adaaf..da56758 100755 --- a/luci-app-modem/root/usr/share/modem/quectel.sh +++ b/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')