luci-app-qmodem: add support for srm821 & nu313

This commit is contained in:
sfwtw 2025-06-05 06:51:01 +00:00
commit 6f5eefe240
6 changed files with 149 additions and 9 deletions

View File

@ -520,6 +520,62 @@
{
"重启模组 > AT+RESET": "AT+RESET"
}
],
"unisoc": [
{
"获取SIM卡卡槽状态 > AT^SIMSLOT?": "AT^SIMSLOT?"
},
{
"设置当前使用的为卡1 > AT^SIMSLOT=1": "AT^SIMSLOT=1"
},
{
"设置当前使用的为卡2 > AT^SIMSLOT=2": "AT^SIMSLOT=2"
},
{
"查询网络信息 > AT^SYSINFOEX": "AT^SYSINFOEX"
},
{
"查询载波聚合小区信息 > AT^CELLINFO=1": "AT^CELLINFO=1"
},
{
"查询当前拨号模式 > AT+SER?": "AT+SER?"
},
{
"ECM拨号模式 > AT+SER=2,1": "AT+SER=2,1"
},
{
"MBIM拨号模式 > AT+SER=3,1": "AT+SER=3,1"
},
{
"RNDIS拨号模式 > AT+SER=3,1": "AT+SER=3,1"
},
{
"NCM拨号模式 > AT+SER=1,1": "AT+SER=1,1"
},
{
"锁4G > AT^SYSCFGEX=\"03\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"03\",all,0,2,all,all,all,all,1"
},
{
"锁5G > AT^SYSCFGEX=\"04\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"04\",all,0,2,all,all,all,all,1"
},
{
"恢复自动搜索网络 > AT^SYSCFGEX=\"00\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"00\",all,0,2,all,all,all,all,1"
},
{
"查询模组IMEI > AT+LCTSN=0,7": "AT+LCTSN=0,7"
},
{
"更改模组IMEI > AT+LCTSN=1,7,\"IMEI\"": "AT+LCTSN=1,7,\"在此设置IMEI\""
},
{
"开启转网口 > AT+MGCFGEX=\"ETH_SWITCH\",1": "AT+MGCFGEX=\"ETH_SWITCH\",1"
},
{
"获取模组温度 > AT+TEMP": "AT+TEMP"
},
{
"重启模组 > AT+RESET": "AT+RESET"
}
]
},
"foxconn": {

View File

@ -258,6 +258,9 @@ check_ip()
"qualcomm")
check_ip_command="AT+CGPADDR=1"
;;
"unisoc")
check_ip_command="AT+CGPADDR=1"
;;
esac
;;
"neoway")
@ -856,6 +859,10 @@ at_dial()
at_command='AT$MYUSBNETACT=0,1'
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
;;
"unisoc")
at_command=""
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
;;
esac
;;
esac

View File

@ -41,6 +41,30 @@
"name": "rg801",
"option_driver": 1
},
"1782:4039": {
"name": "nu313-m2",
"mode": "ecm",
"option_driver": 1,
"include": [
"1.2"
]
},
"1782:4038": {
"name": "nu313-m2",
"mode": "rndis",
"option_driver": 1,
"include": [
"1.2"
]
},
"1782:4040": {
"name": "nu313-m2",
"mode": "ncm",
"option_driver": 1,
"include": [
"1.2"
]
},
"3763:3c93": {
"name": "nari-m601",
"mode": "ecm",
@ -51,4 +75,4 @@
}
}
}
}
}

View File

@ -353,6 +353,9 @@ match_config()
#rg200u-cn
[[ "$name" = *"rg200u-cn"* ]] && name="rg200u-cn"
#nu313-m2
[[ "$name" = *"nu313-m2"* ]] && name="srm821"
#nari-m601
[[ "$name" = *"m601"* ]] && name="n510m"

View File

@ -818,6 +818,18 @@
"mbim",
"rmnet"
]
},
"srm821": {
"manufacturer_id": "1782",
"manufacturer": "meig",
"platform": "unisoc",
"data_interface": "usb",
"define_connect": "1",
"modes": [
"ecm",
"rndis",
"ncm"
]
},
"t99w373": {
"manufacturer_id": "05c6",
@ -1256,13 +1268,17 @@
"meig": {
"unisoc": {
"vendor_id": [
"2dee"
"2dee",
"1782"
],
"product_id": [
"4d50",
"4d51",
"4d52",
"4d53"
"4d53",
"4039",
"4038",
"4040"
]
},
"qualcomm": {

View File

@ -44,7 +44,7 @@ get_mode()
*) mode="${mode_num}" ;;
esac
;;
"unisoc"|"lte12"|"lte")
"lte12"|"lte")
case "$mode_num" in
"2") mode="ecm" ;;
"3") mode="rndis" ;;
@ -52,6 +52,14 @@ get_mode()
*) mode="${mode_num}" ;;
esac
;;
"unisoc")
case "$mode_num" in
"2") mode="ecm" ;;
"3") mode="rndis" ;;
"1") mode="ncm" ;;
*) mode="${mode_num}" ;;
esac
;;
*)
mode="${mode_num}"
;;
@ -73,7 +81,7 @@ set_mode()
{
local mode=$1
case "$platform" in
"qualcomm"|"unisoc"|"lte12"|"lte")
"qualcomm"|"lte12"|"lte")
case "$mode" in
"ecm") mode_num="2" ;;
"rndis") mode_num="3" ;;
@ -81,6 +89,14 @@ set_mode()
*) mode_num="1" ;;
esac
;;
"unisoc")
case "$mode" in
"ecm") mode_num="2" ;;
"rndis") mode_num="3" ;;
"ncm") mode_num="1" ;;
*) mode_num="1" ;;
esac
;;
*)
mode_num="1"
;;
@ -176,12 +192,30 @@ get_voltage()
get_temperature()
{
at_command="AT+TEMP"
local response=$(at ${at_port} ${at_command} | grep 'TEMP: "cpu0-0-usr"' | awk -F'"' '{print $4}')
local response
local temp
if [ -n "$response" ]; then
temp="${response}$(printf "\xc2\xb0")C"
local degree_symbol=$(printf "\xc2\xb0")C
# 根据平台选择不同的AT命令并提取温度值
if [ "$platform" = "unisoc" ]; then
response=$(at ${at_port} ${at_command} | grep 'TEMP: "soc-thmzone"' | awk -F'"' '{print $4}')
else
response=$(at ${at_port} ${at_command} | grep 'TEMP: "cpu0-0-usr"' | awk -F'"' '{print $4}')
fi
# 处理响应值
if [ -n "$response" ]; then
if [ "$platform" = "unisoc" ]; then
# Unisoc平台需要将原始值除以1000并保留两位小数
temp_value=$(echo "scale=2; $response / 1000" | bc)
temp="${temp_value}${degree_symbol}"
else
temp="NaN $(printf "\xc2\xb0")C"
# 其他平台直接使用原始值
temp="${response}${degree_symbol}"
fi
else
# 无响应时显示NaN
temp="NaN ${degree_symbol}"
fi
add_plain_info_entry "temperature" "$temp" "Temperature"
}