diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 7890560..392b855 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -6,6 +6,10 @@ on:
- 'v*'
branches:
- main
+ paths-ignore:
+ - "docs/**"
+ - "README.md"
+ - ".github/**"
env:
TZ: Asia/Shanghai
@@ -18,6 +22,7 @@ jobs:
tag_name: ${{ env.tag_name }}
push_type: ${{ env.push_type }}
tag_message: ${{ env.tag_message }}
+ release_note_body: ${{ env.release_note_body }}
steps:
- name: Determine push type
@@ -45,6 +50,29 @@ jobs:
TAG_MESSAGE=$(git tag -l --format='%(contents)' "${{ env.tag_name }}")
echo "tag_message=${TAG_MESSAGE}" >> $GITHUB_ENV
+ - name: Update Modem_support_list
+ id: update_modem_support_list
+ run: |
+ cd qmodem
+ python3 ./scripts/update_support_list.py temp_support_list ./luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json
+ is_diff=$(diff ./temp_support_list.md ./support_list.md > /dev/null 2>&1 && echo 0 || echo 1)
+ echo "is_diff=${is_diff}" >> $GITHUB_ENV
+ if [[ ${is_diff} == 1 ]]; then
+ mv temp_support_list.md ./docs/support_list.md
+ git config --global user.name "GitHub Action"
+ git config --global user.email "github-action@users.noreply.github.com"
+ git add ./docs/support_list.md
+ git commit -m "Update support list"
+ git push origin ${{ env.branch_name }}
+ fi
+ mv temp_support_list_release_notes.md ./release_note.md
+
+ - name: Upload Release Note
+ id: upload_release_note
+ uses: actions/upload-artifact@v4
+ with:
+ name: Release Note
+ path: ./release_note.md
job_build_qmodem:
name: Build QModem
@@ -164,7 +192,7 @@ jobs:
uses: softprops/action-gh-release@v2
if: ${{ needs.job_prepare.outputs.push_type == 'tag' }}
with:
- body: ${{ needs.job_prepare.outputs.tag_message }}
+ body_path: releases/release_note.md
tag_name: ${{ needs.job_prepare.outputs.tag_name }}
prerelease: ${{ contains(needs.job_prepare.outputs.tag_name, '-beta') || contains(needs.job_prepare.outputs.tag_name, '-rc') }}
files: releases/*
diff --git a/README.md b/README.md
index c0aee5b..e54c424 100644
--- a/README.md
+++ b/README.md
@@ -9,9 +9,9 @@
(使用 js luci 时请添加 luci-compat 软件包)
-[TOC]
-
+[支持模组列表](support_list.md)
+[toc]
# 快速开始
@@ -26,7 +26,7 @@ echo 'src-git modem https://github.com/FUjr/modem_feeds.git;main' >> feeds.conf.
./scripts/feeds install -a -p modem
```
-强制更新库驱动 (使用本库驱动):
+强制更新库驱动 (使用本库驱动):
```shell
./scripts/feeds install -a -f -p modem
@@ -43,18 +43,20 @@ make menuconfig
## 选择和安装软件包
在配置菜单中,您可以选择以下软件包:(均在 Luci/Application 下)
-| 软件包名 | 功能 |
-| -------------------------------------------- | :------------------: |
-| **luci-app-qmodem**| 有模组信息、拨号设置、高级设置三大功能块。由于主程序在这里,因此其他功能依赖该程序(原谅我将后端程序也放在了这里)。|
-| **Add Lua Luci Homepage**| 添加 Lua Luci 首页。luci2(Js Luci)首页默认已添加,若使用luci2时勾选了这个,会有两个首页|
-| **QMI Driver Selection**| 可选择 Generic QMI driver(通用QMI驱动)或 Vendor QMI driver(厂商QMI驱动)|
-| **Quectel Connect Manager Selection**| 可选择以下三种之一:
- Tom customized Quectel CM:使用本仓库定制的Quectel CM,支持屏蔽添加默认路由、屏蔽修改resolv.conf等功能
- QWRT Quectel-CM-5G:使用 QWRT 仓库的 quectel-CM-5G
- NORMAL Quectel-CM:使用普通的 quectel-cm|
-| **Add PCIe Modem SUPPORT**| 勾选 PCIe 驱动,需要feeds里有kmod_mhi|
-| **Add Qfirehose SUPPORT**| 添加 Qfirehose 支持,用于高通芯片模组固件升级|
-| **luci-app-qmodem-hc**| 支持 hc-g80 SIM 卡切换,该插件为设备专属插件|
-| **luci-app-qmodem-mwan**| 支持多 WAN 设置。|
-| **luci-app-qmodem-sms**| 短信首发功能|
-| **luci-app-qmodem-ttl**| TTL 重写功能|
+
+
+| 软件包名 | 功能 |
+| ------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| **luci-app-qmodem** | 有模组信息、拨号设置、高级设置三大功能块。由于主程序在这里,因此其他功能依赖该程序(原谅我将后端程序也放在了这里)。 |
+| **Add Lua Luci Homepage** | 添加 Lua Luci 首页。luci2(Js Luci)首页默认已添加,若使用luci2时勾选了这个,会有两个首页 |
+| **QMI Driver Selection** | 可选择 Generic QMI driver(通用QMI驱动)或 Vendor QMI driver(厂商QMI驱动) |
+| **Quectel Connect Manager Selection** | 可选择以下三种之一:
- Tom customized Quectel CM:使用本仓库定制的Quectel CM,支持屏蔽添加默认路由、屏蔽修改resolv.conf等功能
- QWRT Quectel-CM-5G:使用 QWRT 仓库的 quectel-CM-5G
- NORMAL Quectel-CM:使用普通的 quectel-cm |
+| **Add PCIe Modem SUPPORT** | 勾选 PCIe 驱动,需要feeds里有kmod_mhi |
+| **Add Qfirehose SUPPORT** | 添加 Qfirehose 支持,用于高通芯片模组固件升级 |
+| **luci-app-qmodem-hc** | 支持 hc-g80 SIM 卡切换,该插件为设备专属插件 |
+| **luci-app-qmodem-mwan** | 支持多 WAN 设置。 |
+| **luci-app-qmodem-sms** | 短信首发功能 |
+| **luci-app-qmodem-ttl** | TTL 重写功能 |
# 项目介绍
@@ -70,7 +72,6 @@ make menuconfig
- **优化的quectel-CM**:原版quectel-CM会覆盖resolv.conf 覆盖默认路由,本仓库提供改进版,增加了对应的开关选项
- **[全新实现的AT工具](docs/tom_modem.cn.md)**:尽管 sendat、sms_tool 和 gl_modem_at 这三个工具在大多数情况下表现出色,能够满足大部分需求,但它们在超时机制、mhi_DUN 和短信支持方面各自存在一些小问题。如果想要同时使用所有功能,就必须内置这三个 AT 工具,这显然不够优雅,因此我参考这三个工具,实现了一个包含所有功能的at工具。
-
## 模组信息
@@ -106,44 +107,44 @@ make menuconfig

-
## Mwan配置
该页面是 **MWAN 配置** 界面,帮助用户管理多 WAN 连接,通过监控特定 IP 来确保网络的稳定性和可靠性。用户可以根据需求自定义连接的优先级和接口,从而实现负载均衡或故障转移
-| 功能 | 描述 |
-|------------------|----------------------------------------------------------------------|
-| **启用 MWAN** | |
-| 相同源地址 | 选中此框后,路由器将在一定时间内使用相同的 WAN 端口处理来自同一源的流量。 |
-| **IPv4 配置** | |
-| 接口 | 选择要添加的 WAN 接口(如 `wan`、`usb0` 等),以便于配置不同的网络连接。 |
-| 跟踪IP | 输入特定的 IP 地址或域名。 |
-| 优先级 | 设置连接的优先级,范围为 1 到 255,数值越低优先级越高。优先级一致会根据权重负载均衡,只有优先级高的故障才会启用低优先级的接口 |
+| 功能 | 描述 |
+| ------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| **启用 MWAN** | |
+| 相同源地址 | 选中此框后,路由器将在一定时间内使用相同的 WAN 端口处理来自同一源的流量。 |
+| **IPv4 配置** | |
+| 接口 | 选择要添加的 WAN 接口(如`wan`、`usb0` 等),以便于配置不同的网络连接。 |
+| 跟踪IP | 输入特定的 IP 地址或域名。 |
+| 优先级 | 设置连接的优先级,范围为 1 到 255,数值越低优先级越高。优先级一致会根据权重负载均衡,只有优先级高的故障才会启用低优先级的接口 |
## QModem 设置
-| 配置项 | 描述 |
-|-----------------------------|----------------------------------------------------------------------------------------|
-| **禁用自动加载/移除模组** | 关闭以下所有功能。 |
-| **启用 PCIe 模块扫描** | 选中后,系统会在开机时扫描 PCIe 接口。(耗时较长) |
-| **启用 USB 模块扫描** | 选中后,系统会在开机时扫描 USB 接口。(耗时较长) |
-| **监控设置的 USB 接口** | 系统会在开机时扫描插槽配置里的 USB 端口,同时监控 USB 的热插拔事件。 |
-| **监控设置的 PCIe 接口** | 系统会在开机时扫描插槽配置里的 PCIe 端口。 |
+
+| 配置项 | 描述 |
+| ------------------------- | -------------------------------------------------------------------- |
+| **禁用自动加载/移除模组** | 关闭以下所有功能。 |
+| **启用 PCIe 模块扫描** | 选中后,系统会在开机时扫描 PCIe 接口。(耗时较长) |
+| **启用 USB 模块扫描** | 选中后,系统会在开机时扫描 USB 接口。(耗时较长) |
+| **监控设置的 USB 接口** | 系统会在开机时扫描插槽配置里的 USB 端口,同时监控 USB 的热插拔事件。 |
+| **监控设置的 PCIe 接口** | 系统会在开机时扫描插槽配置里的 PCIe 端口。 |
### 插槽配置
该页面允许用户对每个插槽进行一些设置
-| 配置项 | 描述 |
-|----------------------|------------------------------------------------------------------------------------------------|
-| **插槽类型** | 选择插槽的类型(PCIe/USB),用于识别设备。 |
-| **插槽 ID** | 输入设备的唯一标识符(如 `0001:11:00.0[pcie]`),用于设备识别。 |
-| **SIM 卡指示灯** | 绑定插槽与相应的指示灯,以显示 SIM 卡的状态。 |
-| **网络指示灯** | 绑定插槽的网络状态指示灯,以便监控网络连接的状态。 |
-| **启用 5G 转网络口** | 启用后,支持的模组通过网络接口与主机通信,以提高性能。 |
-| **关联的 USB** | 配置该项可将 USB 端口与 PCIe 端口关联,使用兼容性更好的 USB serial 驱动进行 AT 通信。 |
+| 配置项 | 描述 |
+| -------------------- | ------------------------------------------------------------------------------------- |
+| **插槽类型** | 选择插槽的类型(PCIe/USB),用于识别设备。 |
+| **插槽 ID** | 输入设备的唯一标识符(如`0001:11:00.0[pcie]`),用于设备识别。 |
+| **SIM 卡指示灯** | 绑定插槽与相应的指示灯,以显示 SIM 卡的状态。 |
+| **网络指示灯** | 绑定插槽的网络状态指示灯,以便监控网络连接的状态。 |
+| **启用 5G 转网络口** | 启用后,支持的模组通过网络接口与主机通信,以提高性能。 |
+| **关联的 USB** | 配置该项可将 USB 端口与 PCIe 端口关联,使用兼容性更好的 USB serial 驱动进行 AT 通信。 |
### 模组配置
@@ -153,10 +154,10 @@ make menuconfig
## 开发计划
-| 计划 | 进度 |
-| ------------------------------------------------- | ------------------ |
-| 将后端程序与luci-app完全分离 | 0 |
-| 切换js luci | 5% |
+| 计划 | 进度 |
+| ---------------------------- | ---- |
+| 将后端程序与luci-app完全分离 | 0 |
+| 切换js luci | 5% |
# 鸣谢
diff --git a/scripts/update_support_list.py b/scripts/update_support_list.py
new file mode 100644
index 0000000..76754d3
--- /dev/null
+++ b/scripts/update_support_list.py
@@ -0,0 +1,58 @@
+import json
+import sys
+
+
+
+
+def generate_markdown(result):
+# 生成 Markdown 格式
+ markdown_output = []
+ for vendor, models in result.items():
+ markdown_output.append(f"# {vendor}")
+ markdown_output.append("型号 | USB 支持 | PCIe 支持")
+ markdown_output.append("--- | --- | ---")
+ for model, support in models.items():
+ markdown_output.append(f"{model} | {support['usb']} | {support['pcie']}")
+ markdown_output.append("") # 空行分隔
+ return markdown_output
+
+def generate_github_release_notes(result):
+ # 生成 GitHub 发布说明格式
+ release_notes = []
+ for vendor, models in result.items():
+ release_notes.append(f"## {vendor}")
+ for model, support in models.items():
+ release_notes.append(f"- {model}: USB 支持 - {support['usb']}, PCIe 支持 - {support['pcie']}")
+ release_notes.append("")
+ return release_notes
+
+
+if __name__ == "__main__":
+ prefix = sys.argv[1] if len(sys.argv) > 1 else 'support_list'
+ file_name = sys.argv[2] if len(sys.argv) > 2 else 'luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json'
+ # 加载 JSON 数据
+ with open(file_name, 'r') as file:
+ data = json.load(file)
+
+ # 初始化结果字典
+ result = {}
+
+ # 遍历 USB 和 PCIe 数据
+ for interface_type in ['usb', 'pcie']:
+ for model, details in data['modem_support'][interface_type].items():
+ vendor = details.get('manufacturer', 'unknown').lower()
+ modes = ','.join(details.get('modes', []))
+ support = f"✔ {interface_type}({modes})"
+
+ if vendor not in result:
+ result[vendor] = {}
+ if model not in result[vendor]:
+ result[vendor][model] = {'usb': '✘', 'pcie': '✘'}
+
+ result[vendor][model][interface_type] = support
+ markdown_output = generate_markdown(result)
+ release_notes = generate_github_release_notes(result)
+ with open(f"{prefix}.md", 'w') as f:
+ f.write("\n".join(markdown_output))
+ with open(f"{prefix}_release_notes.md", 'w') as f:
+ f.write("\n".join(release_notes))