From 3a9c20cbd704287fad66b887060775e65b75a175 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 08:28:07 +0700 Subject: [PATCH 01/50] Initial commit: Setup 5G Modem Support project --- README.md | 0 docs/installation.md | 0 docs/usage.md | 0 examples/example_connect.sh | 5 +++++ scripts/check_modem.sh | 5 +++++ scripts/main.sh | 13 +++++++++++++ 6 files changed, 23 insertions(+) create mode 100644 README.md create mode 100644 docs/installation.md create mode 100644 docs/usage.md create mode 100755 examples/example_connect.sh create mode 100755 scripts/check_modem.sh create mode 100755 scripts/main.sh diff --git a/README.md b/README.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 00000000..e69de29b diff --git a/examples/example_connect.sh b/examples/example_connect.sh new file mode 100755 index 00000000..f13b77dd --- /dev/null +++ b/examples/example_connect.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo "Connecting to 5G network..." +mmcli -i 0 -c "apn=internet" +echo "Connection established. Check IP:" +ip addr show diff --git a/scripts/check_modem.sh b/scripts/check_modem.sh new file mode 100755 index 00000000..c8740f60 --- /dev/null +++ b/scripts/check_modem.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo "Detecting modem..." +lsusb +echo "Checking modem status..." +mmcli -m 0 diff --git a/scripts/main.sh b/scripts/main.sh new file mode 100755 index 00000000..caebecf4 --- /dev/null +++ b/scripts/main.sh @@ -0,0 +1,13 @@ +#!/bin/bash +echo "Welcome to 5G Modem Support Tool" +echo "1. Check modem status" +echo "2. Connect to network" +echo "3. Exit" +read -p "Choose an option: " choice + +case $choice in + 1) bash scripts/check_modem.sh ;; + 2) bash examples/example_connect.sh ;; + 3) echo "Goodbye!" ; exit 0 ;; + *) echo "Invalid option" ;; +esac From cbe25b2e7a243fe2b4ffcdcaa851761b60ca19e2 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 08:36:59 +0700 Subject: [PATCH 02/50] Initial commit with RSA SSH --- ...e location and no passphrase (or set one if you prefer) | 7 +++++++ ...cation and no passphrase (or set one if you prefer).pub | 1 + 2 files changed, 8 insertions(+) create mode 100644 # Press Enter to accept default file location and no passphrase (or set one if you prefer) create mode 100644 # Press Enter to accept default file location and no passphrase (or set one if you prefer).pub diff --git a/# Press Enter to accept default file location and no passphrase (or set one if you prefer) b/# Press Enter to accept default file location and no passphrase (or set one if you prefer) new file mode 100644 index 00000000..6f2ec56c --- /dev/null +++ b/# Press Enter to accept default file location and no passphrase (or set one if you prefer) @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACDJKZpAbP0hRr9rYvHlEuooUCy/gLflO8FFf2cvpRX9/QAAAKBveJFgb3iR +YAAAAAtzc2gtZWQyNTUxOQAAACDJKZpAbP0hRr9rYvHlEuooUCy/gLflO8FFf2cvpRX9/Q +AAAECQsyTRnkj+LTLq0yris1aL46wib81+M8Ucc3b2o8am18kpmkBs/SFGv2ti8eUS6ihQ +LL+At+U7wUV/Zy+lFf39AAAAF2RvYW5iYW5nZHV5ODZAZ21haWwuY29tAQIDBAUG +-----END OPENSSH PRIVATE KEY----- diff --git a/# Press Enter to accept default file location and no passphrase (or set one if you prefer).pub b/# Press Enter to accept default file location and no passphrase (or set one if you prefer).pub new file mode 100644 index 00000000..b8cb2ce9 --- /dev/null +++ b/# Press Enter to accept default file location and no passphrase (or set one if you prefer).pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMkpmkBs/SFGv2ti8eUS6ihQLL+At+U7wUV/Zy+lFf39 doanbangduy86@gmail.com From 52d422591ba006d67f47d72449bc7917c224a639 Mon Sep 17 00:00:00 2001 From: Doanduy09 <96837081+Doanduy09@users.noreply.github.com> Date: Sat, 1 Mar 2025 09:02:23 +0700 Subject: [PATCH 03/50] Delete examples directory --- examples/example_connect.sh | 5 ----- 1 file changed, 5 deletions(-) delete mode 100755 examples/example_connect.sh diff --git a/examples/example_connect.sh b/examples/example_connect.sh deleted file mode 100755 index f13b77dd..00000000 --- a/examples/example_connect.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -echo "Connecting to 5G network..." -mmcli -i 0 -c "apn=internet" -echo "Connection established. Check IP:" -ip addr show From 5b7e2c4652db82237b115e976e3b370383256484 Mon Sep 17 00:00:00 2001 From: Doanduy09 <96837081+Doanduy09@users.noreply.github.com> Date: Sat, 1 Mar 2025 09:02:45 +0700 Subject: [PATCH 04/50] Delete docs directory --- docs/installation.md | 0 docs/usage.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/installation.md delete mode 100644 docs/usage.md diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/usage.md b/docs/usage.md deleted file mode 100644 index e69de29b..00000000 From 7843265aa8fed3e054aea77d06d4be0ce5f71df1 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:44:44 +0700 Subject: [PATCH 05/50] Add auto-detection, band locking, diagnostics, and updated docs --- README.md | 71 +++++---------------------------------- scripts/detect_modem.sh | 6 ++++ scripts/modem_diag.sh | 3 ++ scripts/signal_monitor.py | 12 +++++++ 4 files changed, 29 insertions(+), 63 deletions(-) create mode 100755 scripts/detect_modem.sh create mode 100755 scripts/modem_diag.sh create mode 100755 scripts/signal_monitor.py diff --git a/README.md b/README.md index 9454492d..ffb0f7ff 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,8 @@ -# 中文 | [English](https://github.com/Siriling/5G-Modem-Support/blob/main/EngLish.md) - -# 5G模块支持 - -# 目录 - -[一、说明](#一说明) - -[二、源代码地址 ](#二源代码地址) - -# 一、说明 - -## 5G驱动 - -- quectel_Gobinet -- quectel_MHI -- quectel_QMI_WWAN -- quectel_SRPD_PCIE -- fibocom_MHI -- fibocom_QMI_WWAN - -## 拨号工具 - -- quectel_cm_5G -- fibocom-dial - -## 图形化界面设置 - -### 拨号 - -- luci-app-modem(新) - -- luci-app-hypermodem -- luci-app-usbmodem -- luci-app-pcimodem -- luci-app-gobinetmodem -- luci-app-spdmodem - -### 信息插件 - -- rooter - -### 简化版信息插件 - -- luci-app-cpe - -### AT命令工具 - -- sendat -- sms-tool - -### 短信工具 - -- luci-app-sms-tool - -# 二、源代码地址 - -- luci-app-hypermodem:https://github.com/momokind/luci-app-hypermodem - -- sendat:https://github.com/ouyangzq/sendat -- luci-app-cpe:https://github.com/ouyangzq/luci-app-cpe -- sms-tool:https://github.com/obsy/sms_tool - +# 5G-Modem-Support Enhanced +## Features +- Auto-detect WWAN cards by VID:PID +- Band locking for 4G/5G optimization +- Detailed modem diagnostics +## Installation +1. Clone repo: `git clone https://github.com/Doanduy09/5G-Modem-Support.git` +2. Run: `sh scripts/detect_modem.sh` diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh new file mode 100755 index 00000000..b34fa36f --- /dev/null +++ b/scripts/detect_modem.sh @@ -0,0 +1,6 @@ +#!/bin/sh +for dev in $(lsusb | awk "{print \$6}"); do + vid=$(echo $dev | cut -d: -f1) + pid=$(echo $dev | cut -d: -f2) + [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id +done diff --git a/scripts/modem_diag.sh b/scripts/modem_diag.sh new file mode 100755 index 00000000..e73b246f --- /dev/null +++ b/scripts/modem_diag.sh @@ -0,0 +1,3 @@ +#!/bin/sh +echo "AT+CMEE=1;+CSQ;+QNWINFO" | atinout - /dev/ttyUSB2 /tmp/diag_result +cat /tmp/diag_result >> /var/log/modem_diag.log diff --git a/scripts/signal_monitor.py b/scripts/signal_monitor.py new file mode 100755 index 00000000..947bd7f4 --- /dev/null +++ b/scripts/signal_monitor.py @@ -0,0 +1,12 @@ +import asyncio +import serial + +async def monitor_signal(port="/dev/ttyUSB0"): + ser = serial.Serial(port, 115200, timeout=1) + while True: + ser.write(b"AT+CSQ\r") + response = await asyncio.to_thread(ser.readline) + print(f"Signal: {response.decode().strip()}") + await asyncio.sleep(0.5) + +asyncio.run(monitor_signal()) From 1a5a1a1a230f92aa98bdb7cdacad1f94a36432a0 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:51:36 +0700 Subject: [PATCH 06/50] Add band locking script for 4G/5G optimization --- scripts/band_lock.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100755 scripts/band_lock.sh diff --git a/scripts/band_lock.sh b/scripts/band_lock.sh new file mode 100755 index 00000000..86a9c651 --- /dev/null +++ b/scripts/band_lock.sh @@ -0,0 +1,3 @@ +#!/bin/sh +BANDS="$1" +echo "AT+QNWPREFCFG=\"nr5g_band\",$BANDS" | atinout - /dev/ttyUSB2 /tmp/band_result From fb00d7f6d209370e153b2e309c5536e30e3ec965 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:51:48 +0700 Subject: [PATCH 07/50] Add modem auto-detection script for WWAN cards --- scripts/detect_modem.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index b34fa36f..461c2996 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,6 +1,2 @@ #!/bin/sh -for dev in $(lsusb | awk "{print \$6}"); do - vid=$(echo $dev | cut -d: -f1) - pid=$(echo $dev | cut -d: -f2) - [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id -done +for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1); pid=$(echo $dev | cut -d: -f2); [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id; done From 3779f370d4d046d53bc7b8561d2ce8395abbfef7 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:53:04 +0700 Subject: [PATCH 08/50] Format detect_modem.sh for better readability --- scripts/detect_modem.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index 461c2996..b34fa36f 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,2 +1,6 @@ #!/bin/sh -for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1); pid=$(echo $dev | cut -d: -f2); [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id; done +for dev in $(lsusb | awk "{print \$6}"); do + vid=$(echo $dev | cut -d: -f1) + pid=$(echo $dev | cut -d: -f2) + [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id +done From c284e13aeac04154afa7ff3084d18b0888286eed Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:53:59 +0700 Subject: [PATCH 09/50] Update README with new features and instructions --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ffb0f7ff..a7905058 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # 5G-Modem-Support Enhanced ## Features - Auto-detect WWAN cards by VID:PID -- Band locking for 4G/5G optimization -- Detailed modem diagnostics +- Band locking for 4G/5G optimization (coming soon) ## Installation -1. Clone repo: `git clone https://github.com/Doanduy09/5G-Modem-Support.git` +1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` 2. Run: `sh scripts/detect_modem.sh` From b321a5574734d1d8e3e1aa8d648c6fb039714076 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:55:05 +0700 Subject: [PATCH 10/50] Add band locking script for 4G/5G optimization --- scripts/band_lock.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/band_lock.sh b/scripts/band_lock.sh index 86a9c651..2272f848 100755 --- a/scripts/band_lock.sh +++ b/scripts/band_lock.sh @@ -1,3 +1,9 @@ #!/bin/sh +# Usage: ./band_lock.sh "1,3,41" (locks NR bands 1, 3, 41) BANDS="$1" +if [ -z "$BANDS" ]; then + echo "Error: Please provide band list (e.g., 1,3,41)" + exit 1 +fi echo "AT+QNWPREFCFG=\"nr5g_band\",$BANDS" | atinout - /dev/ttyUSB2 /tmp/band_result +cat /tmp/band_result From 70434a09cd83b66eecaffeb621edd93039174d5a Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:55:25 +0700 Subject: [PATCH 11/50] Add detailed modem diagnostics with signal and network logging --- scripts/modem_diag.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/modem_diag.sh b/scripts/modem_diag.sh index e73b246f..9af2598c 100755 --- a/scripts/modem_diag.sh +++ b/scripts/modem_diag.sh @@ -1,3 +1,6 @@ #!/bin/sh +# Diagnostics for modem signal and status echo "AT+CMEE=1;+CSQ;+QNWINFO" | atinout - /dev/ttyUSB2 /tmp/diag_result -cat /tmp/diag_result >> /var/log/modem_diag.log +cat /tmp/diag_result +echo "$(date): $(cat /tmp/diag_result)" >> /var/log/modem_diag.log +echo "Signal and network info logged to /var/log/modem_diag.log" From efcaf1c2438c5e0ef10b24fd6ac1c55c80d7fecb Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:56:31 +0700 Subject: [PATCH 12/50] Add multi-protocol support for QMI, MBIM, and PPP connectivity --- scripts/modem_connect.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 scripts/modem_connect.sh diff --git a/scripts/modem_connect.sh b/scripts/modem_connect.sh new file mode 100755 index 00000000..5352c600 --- /dev/null +++ b/scripts/modem_connect.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Auto-connect modem with QMI, MBIM, or PPP +PROTOCOL="$1" # e.g., qmi, mbim, ppp +DEVICE="/dev/ttyUSB2" # Adjust as needed +if [ -z "$PROTOCOL" ]; then + echo "Error: Specify protocol (qmi, mbim, ppp)" + exit 1 +fi +case $PROTOCOL in + "qmi") qmicli -d /dev/cdc-wdm0 --wda-set-data-format ;; + "mbim") mbimcli -d /dev/cdc-wdm0 --query-device-caps ;; + "ppp") echo "ATDT*99#" | atinout - $DEVICE - ;; + *) echo "Unsupported protocol: $PROTOCOL" ;; +esac From a6d2983493ee3b6af1b553b53ed3c2537696f247 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 09:56:44 +0700 Subject: [PATCH 13/50] Update README with new features and usage instructions --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a7905058..3c12c743 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,14 @@ # 5G-Modem-Support Enhanced ## Features -- Auto-detect WWAN cards by VID:PID -- Band locking for 4G/5G optimization (coming soon) +- Auto-detect WWAN cards by VID:PID (`detect_modem.sh`) +- Band locking for 4G/5G optimization (`band_lock.sh`) +- Detailed modem diagnostics (`modem_diag.sh`) +- Multi-protocol support: QMI, MBIM, PPP (`modem_connect.sh`) ## Installation 1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` -2. Run: `sh scripts/detect_modem.sh` +2. Copy scripts to OpenWrt: `scp scripts/* root@192.168.1.1:/usr/bin/` +## Usage +- Detect modem: `sh /usr/bin/detect_modem.sh` +- Lock bands: `sh /usr/bin/band_lock.sh "1,3,41"` +- Diagnostics: `sh /usr/bin/modem_diag.sh` +- Connect: `sh /usr/bin/modem_connect.sh qmi` From e3b566b6d7c6d6f78a7b1f9fdbe91b6bfe1d037b Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:00:25 +0700 Subject: [PATCH 14/50] Add band locking script for 4G/5G optimization --- scripts/band_lock.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/band_lock.sh b/scripts/band_lock.sh index 2272f848..f6edab5c 100755 --- a/scripts/band_lock.sh +++ b/scripts/band_lock.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Usage: ./band_lock.sh "1,3,41" (locks NR bands 1, 3, 41) +# Usage: ./band_lock.sh "1,3,41" BANDS="$1" if [ -z "$BANDS" ]; then echo "Error: Please provide band list (e.g., 1,3,41)" From 05e87b243afaf85891db31f4e64c5634e814faaa Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:00:34 +0700 Subject: [PATCH 15/50] Add detailed modem diagnostics with logging --- scripts/modem_diag.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/modem_diag.sh b/scripts/modem_diag.sh index 9af2598c..20df8f89 100755 --- a/scripts/modem_diag.sh +++ b/scripts/modem_diag.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Diagnostics for modem signal and status +# Diagnostics for modem echo "AT+CMEE=1;+CSQ;+QNWINFO" | atinout - /dev/ttyUSB2 /tmp/diag_result cat /tmp/diag_result echo "$(date): $(cat /tmp/diag_result)" >> /var/log/modem_diag.log -echo "Signal and network info logged to /var/log/modem_diag.log" +echo "Logged to /var/log/modem_diag.log" From 9596a4ebfe36601c6c083c4e9efed60d60a8ec70 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:00:43 +0700 Subject: [PATCH 16/50] Add multi-protocol support for QMI, MBIM, and PPP --- scripts/modem_connect.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/modem_connect.sh b/scripts/modem_connect.sh index 5352c600..4f5b5173 100755 --- a/scripts/modem_connect.sh +++ b/scripts/modem_connect.sh @@ -1,7 +1,7 @@ #!/bin/sh -# Auto-connect modem with QMI, MBIM, or PPP -PROTOCOL="$1" # e.g., qmi, mbim, ppp -DEVICE="/dev/ttyUSB2" # Adjust as needed +# Usage: ./modem_connect.sh qmi|mbim|ppp +PROTOCOL="$1" +DEVICE="/dev/ttyUSB2" if [ -z "$PROTOCOL" ]; then echo "Error: Specify protocol (qmi, mbim, ppp)" exit 1 From 71e641edd6f21c2868fe7034e344fec09d5c1237 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:00:53 +0700 Subject: [PATCH 17/50] Update README with new features and instructions --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3c12c743..ad9c7f34 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # 5G-Modem-Support Enhanced ## Features -- Auto-detect WWAN cards by VID:PID (`detect_modem.sh`) -- Band locking for 4G/5G optimization (`band_lock.sh`) -- Detailed modem diagnostics (`modem_diag.sh`) -- Multi-protocol support: QMI, MBIM, PPP (`modem_connect.sh`) +- Auto-detect WWAN cards (`detect_modem.sh`) +- Band locking (`band_lock.sh`) +- Diagnostics (`modem_diag.sh`) +- Multi-protocol: QMI, MBIM, PPP (`modem_connect.sh`) ## Installation -1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` -2. Copy scripts to OpenWrt: `scp scripts/* root@192.168.1.1:/usr/bin/` +1. Clone: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` +2. Copy: `scp scripts/* root@192.168.1.1:/usr/bin/` ## Usage -- Detect modem: `sh /usr/bin/detect_modem.sh` +- Detect: `sh /usr/bin/detect_modem.sh` - Lock bands: `sh /usr/bin/band_lock.sh "1,3,41"` -- Diagnostics: `sh /usr/bin/modem_diag.sh` +- Diagnose: `sh /usr/bin/modem_diag.sh` - Connect: `sh /usr/bin/modem_connect.sh qmi` From 50467482d87707dd756ddbcc11f27b79733dd737 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:08:50 +0700 Subject: [PATCH 18/50] Update main.sh as central script for all features --- scripts/main.sh | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/scripts/main.sh b/scripts/main.sh index caebecf4..1a0f2a5e 100755 --- a/scripts/main.sh +++ b/scripts/main.sh @@ -1,13 +1,10 @@ -#!/bin/bash -echo "Welcome to 5G Modem Support Tool" -echo "1. Check modem status" -echo "2. Connect to network" -echo "3. Exit" -read -p "Choose an option: " choice - -case $choice in - 1) bash scripts/check_modem.sh ;; - 2) bash examples/example_connect.sh ;; - 3) echo "Goodbye!" ; exit 0 ;; - *) echo "Invalid option" ;; +#!/bin/sh +# Main script for 5G-Modem-Support +ACTION="$1" +case $ACTION in + "detect") sh /usr/bin/detect_modem.sh ;; + "lock") sh /usr/bin/band_lock.sh "$2" ;; + "diag") sh /usr/bin/modem_diag.sh ;; + "connect") sh /usr/bin/modem_connect.sh "$2" ;; + *) echo "Usage: $0 {detect|lock |diag|connect }" ;; esac From fa034cb9ff215745c89c50a633fd18bde124a679 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:08:58 +0700 Subject: [PATCH 19/50] Add multi-modem detection and diagnostics --- scripts/multi_modem.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 scripts/multi_modem.sh diff --git a/scripts/multi_modem.sh b/scripts/multi_modem.sh new file mode 100755 index 00000000..060625ae --- /dev/null +++ b/scripts/multi_modem.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Detect and manage multiple modems +for dev in /dev/ttyUSB*; do + if [ -e "$dev" ]; then + echo "Found modem at $dev" + sh /usr/bin/detect_modem.sh + sh /usr/bin/modem_diag.sh + fi +done From fbaea4e7e44f4bc56c2b35b28208478e4b1c26c3 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:09:05 +0700 Subject: [PATCH 20/50] Add signal_monitor.sh to replace Python version --- scripts/signal_monitor.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100755 scripts/signal_monitor.sh diff --git a/scripts/signal_monitor.sh b/scripts/signal_monitor.sh new file mode 100755 index 00000000..8d0f1e12 --- /dev/null +++ b/scripts/signal_monitor.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Monitor modem signal continuously +while true; do + sh /usr/bin/modem_diag.sh + sleep 10 +done From af6f22e35ebe9696ae988678e075ff3ee0614248 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:09:16 +0700 Subject: [PATCH 21/50] Improve modem_connect.sh with device check --- scripts/modem_connect.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/modem_connect.sh b/scripts/modem_connect.sh index 4f5b5173..41278007 100755 --- a/scripts/modem_connect.sh +++ b/scripts/modem_connect.sh @@ -2,6 +2,10 @@ # Usage: ./modem_connect.sh qmi|mbim|ppp PROTOCOL="$1" DEVICE="/dev/ttyUSB2" +if [ ! -e "$DEVICE" ]; then + echo "Error: Device $DEVICE not found" + exit 1 +fi if [ -z "$PROTOCOL" ]; then echo "Error: Specify protocol (qmi, mbim, ppp)" exit 1 From b4c77f222b1da1e46d331ea419700d72ea18a7b3 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:09:25 +0700 Subject: [PATCH 22/50] Update README with all features and usage instructions --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ad9c7f34..a95d7bc0 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,12 @@ - Auto-detect WWAN cards (`detect_modem.sh`) - Band locking (`band_lock.sh`) - Diagnostics (`modem_diag.sh`) -- Multi-protocol: QMI, MBIM, PPP (`modem_connect.sh`) +- Multi-protocol support (`modem_connect.sh`) +- Multi-modem detection (`multi_modem.sh`) +- Signal monitoring (`signal_monitor.sh`) ## Installation -1. Clone: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` -2. Copy: `scp scripts/* root@192.168.1.1:/usr/bin/` +1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` +2. Copy scripts: `scp scripts/* root@192.168.1.1:/usr/bin/` ## Usage -- Detect: `sh /usr/bin/detect_modem.sh` -- Lock bands: `sh /usr/bin/band_lock.sh "1,3,41"` -- Diagnose: `sh /usr/bin/modem_diag.sh` -- Connect: `sh /usr/bin/modem_connect.sh qmi` +- Run: `sh /usr/bin/main.sh {detect|lock |diag|connect }` +- Example: `sh /usr/bin/main.sh lock "1,3,41"` From c164fddaa1710d98e7fcb7366238bddc0691eb4c Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:12:11 +0700 Subject: [PATCH 23/50] Add auto_reconnect.sh for automatic IP recovery --- scripts/auto_reconnect.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 scripts/auto_reconnect.sh diff --git a/scripts/auto_reconnect.sh b/scripts/auto_reconnect.sh new file mode 100755 index 00000000..9c19c2da --- /dev/null +++ b/scripts/auto_reconnect.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Auto-reconnect modem when IP is lost +INTERFACE="wwan0" # Adjust to your modem interface +PROTOCOL="qmi" # Default protocol, adjust as needed +while true; do + # Check if interface has an IP address + if ! ip addr show $INTERFACE | grep -q "inet "; then + echo "No IP detected on $INTERFACE, attempting to reconnect..." + sh /usr/bin/modem_connect.sh $PROTOCOL + sleep 5 # Wait for connection to stabilize + else + echo "IP is present on $INTERFACE, no action needed" + fi + sleep 30 # Check every 30 seconds +done From 3a312b2dc2197101a8d1d0505dd173f0932b909b Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:12:34 +0700 Subject: [PATCH 24/50] Update main.sh to include auto-reconnect option --- scripts/main.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/main.sh b/scripts/main.sh index 1a0f2a5e..3b2ad868 100755 --- a/scripts/main.sh +++ b/scripts/main.sh @@ -6,5 +6,6 @@ case $ACTION in "lock") sh /usr/bin/band_lock.sh "$2" ;; "diag") sh /usr/bin/modem_diag.sh ;; "connect") sh /usr/bin/modem_connect.sh "$2" ;; - *) echo "Usage: $0 {detect|lock |diag|connect }" ;; + "auto") sh /usr/bin/auto_reconnect.sh ;; + *) echo "Usage: $0 {detect|lock |diag|connect |auto}" ;; esac From 6f1786076b5721af4d822bffd76c47b21e6e051e Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:12:46 +0700 Subject: [PATCH 25/50] Update README with auto-reconnect feature --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index a95d7bc0..0a12e8b2 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,8 @@ ## Usage - Run: `sh /usr/bin/main.sh {detect|lock |diag|connect }` - Example: `sh /usr/bin/main.sh lock "1,3,41"` +# 5G-Modem-Support Enhanced +## Features +- Auto IP recovery (`auto_reconnect.sh`) +## Usage +- Auto-reconnect: `sh /usr/bin/main.sh auto` (runs in background) From 9b3495f96edf35bb53501205e5631eb3f2f97b0e Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:12:59 +0700 Subject: [PATCH 26/50] Add auto_reconnect.sh --- scripts/auto_reconnect.sh | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/scripts/auto_reconnect.sh b/scripts/auto_reconnect.sh index 9c19c2da..9e6e5495 100755 --- a/scripts/auto_reconnect.sh +++ b/scripts/auto_reconnect.sh @@ -1,15 +1,4 @@ #!/bin/sh -# Auto-reconnect modem when IP is lost -INTERFACE="wwan0" # Adjust to your modem interface -PROTOCOL="qmi" # Default protocol, adjust as needed -while true; do - # Check if interface has an IP address - if ! ip addr show $INTERFACE | grep -q "inet "; then - echo "No IP detected on $INTERFACE, attempting to reconnect..." - sh /usr/bin/modem_connect.sh $PROTOCOL - sleep 5 # Wait for connection to stabilize - else - echo "IP is present on $INTERFACE, no action needed" - fi - sleep 30 # Check every 30 seconds -done +INTERFACE="wwan0" +PROTOCOL="qmi" +while true; do if ! ip addr show $INTERFACE | grep -q "inet "; then echo "No IP detected, reconnecting..."; sh /usr/bin/modem_connect.sh $PROTOCOL; sleep 5; else echo "IP present"; fi; sleep 30; done From 9d783bd4ea072a72d1504e8c4c4440307232b8e4 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:15:02 +0700 Subject: [PATCH 27/50] Add load_kmod.sh for automatic kernel module loading --- scripts/load_kmod.sh | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 scripts/load_kmod.sh diff --git a/scripts/load_kmod.sh b/scripts/load_kmod.sh new file mode 100755 index 00000000..c043173a --- /dev/null +++ b/scripts/load_kmod.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# Load kernel modules for WWAN cards based on VID:PID +echo "Scanning for WWAN devices..." +for dev in $(lsusb | awk "{print \$6}"); do + vid=$(echo $dev | cut -d: -f1) + pid=$(echo $dev | cut -d: -f2) + case $vid in + "05c6") # Quectel + echo "Detected Quectel modem (VID:$vid PID:$pid)" + modprobe qmi_wwan + modprobe option + echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + ;; + "1199" | "0f3d") # Sierra Wireless + echo "Detected Sierra Wireless modem (VID:$vid PID:$pid)" + modprobe sierra + modprobe option + echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + ;; + "1bc7") # Telit + echo "Detected Telit modem (VID:$vid PID:$pid)" + modprobe qmi_wwan + modprobe option + echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + ;; + "12d1") # Huawei + echo "Detected Huawei modem (VID:$vid PID:$pid)" + modprobe cdc_ether + modprobe option + echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + ;; + "1e0e") # Fibocom + echo "Detected Fibocom modem (VID:$vid PID:$pid)" + modprobe qmi_wwan + modprobe option + echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + ;; + *) echo "Unknown WWAN device (VID:$vid PID:$pid)" ;; + esac +done +echo "Kernel modules loaded" From ceaf987ba6190d6e9d11bf6ed434f46351d7d66a Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:15:12 +0700 Subject: [PATCH 28/50] Update detect_modem.sh to integrate kmod loading --- scripts/detect_modem.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index b34fa36f..a75fa045 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,6 +1,10 @@ #!/bin/sh +# Detect WWAN cards and load kernel modules +echo "Starting modem detection..." +sh /usr/bin/load_kmod.sh for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1) pid=$(echo $dev | cut -d: -f2) - [ -n "$vid" ] && echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id + [ -n "$vid" ] && echo "Modem detected: VID:$vid PID:$pid" done +echo "Modem detection complete" From c0dad86e47c891acf627c8af8b11fd5a22ca1c6f Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:15:27 +0700 Subject: [PATCH 29/50] Update README with kmod support for multiple WWAN cards --- README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0a12e8b2..3d50618a 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ # 5G-Modem-Support Enhanced ## Features -- Auto-detect WWAN cards (`detect_modem.sh`) +- Auto-detect WWAN cards with kmod loading (`detect_modem.sh` + `load_kmod.sh`) +- Supported modems: Quectel, Sierra Wireless, Telit, Huawei, Fibocom - Band locking (`band_lock.sh`) - Diagnostics (`modem_diag.sh`) - Multi-protocol support (`modem_connect.sh`) - Multi-modem detection (`multi_modem.sh`) - Signal monitoring (`signal_monitor.sh`) +- Auto IP recovery (`auto_reconnect.sh`) ## Installation 1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` 2. Copy scripts: `scp scripts/* root@192.168.1.1:/usr/bin/` +3. Install kmods on OpenWrt: `opkg install kmod-usb-serial kmod-qmi-wwan kmod-cdc-mbim kmod-sierra kmod-cdc-ether` ## Usage -- Run: `sh /usr/bin/main.sh {detect|lock |diag|connect }` -- Example: `sh /usr/bin/main.sh lock "1,3,41"` -# 5G-Modem-Support Enhanced -## Features -- Auto IP recovery (`auto_reconnect.sh`) -## Usage -- Auto-reconnect: `sh /usr/bin/main.sh auto` (runs in background) +- Detect and load kmods: `sh /usr/bin/main.sh detect` +- Full usage: `sh /usr/bin/main.sh {detect|lock |diag|connect |auto}` From 2faf908da19959e8b5f60b305450d541ef1410f4 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:19:05 +0700 Subject: [PATCH 30/50] Enhance load_kmod.sh with dynamic loading, fallback, and logging --- scripts/load_kmod.sh | 51 +++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/scripts/load_kmod.sh b/scripts/load_kmod.sh index c043173a..097355ef 100755 --- a/scripts/load_kmod.sh +++ b/scripts/load_kmod.sh @@ -1,41 +1,54 @@ #!/bin/sh -# Load kernel modules for WWAN cards based on VID:PID -echo "Scanning for WWAN devices..." +# Enhanced kmod loading for WWAN cards +LOGFILE="/var/log/wwan_kmod.log" +echo "$(date): Starting kmod loading..." >> $LOGFILE +load_module() { + MODULE="$1" + if lsmod | grep -q "$MODULE"; then + echo "Module $MODULE already loaded" + else + modprobe $MODULE && echo "Loaded $MODULE" || echo "Failed to load $MODULE" + echo "$(date): $MODULE status: $(lsmod | grep $MODULE)" >> $LOGFILE + fi +} for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1) pid=$(echo $dev | cut -d: -f2) case $vid in "05c6") # Quectel - echo "Detected Quectel modem (VID:$vid PID:$pid)" - modprobe qmi_wwan - modprobe option + echo "Quectel modem (VID:$vid PID:$pid)" + load_module "qmi_wwan" || load_module "cdc_mbim" + load_module "option" echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; "1199" | "0f3d") # Sierra Wireless - echo "Detected Sierra Wireless modem (VID:$vid PID:$pid)" - modprobe sierra - modprobe option + echo "Sierra Wireless modem (VID:$vid PID:$pid)" + load_module "sierra" || load_module "qmi_wwan" + load_module "option" echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; "1bc7") # Telit - echo "Detected Telit modem (VID:$vid PID:$pid)" - modprobe qmi_wwan - modprobe option + echo "Telit modem (VID:$vid PID:$pid)" + load_module "qmi_wwan" || load_module "cdc_ether" + load_module "option" echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; "12d1") # Huawei - echo "Detected Huawei modem (VID:$vid PID:$pid)" - modprobe cdc_ether - modprobe option + echo "Huawei modem (VID:$vid PID:$pid)" + load_module "cdc_ether" || load_module "qmi_wwan" + load_module "option" echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; "1e0e") # Fibocom - echo "Detected Fibocom modem (VID:$vid PID:$pid)" - modprobe qmi_wwan - modprobe option + echo "Fibocom modem (VID:$vid PID:$pid)" + load_module "qmi_wwan" || load_module "cdc_mbim" + load_module "option" echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; - *) echo "Unknown WWAN device (VID:$vid PID:$pid)" ;; + *) echo "Unknown device (VID:$vid PID:$pid), trying generic drivers" + load_module "qmi_wwan" || load_module "cdc_mbim" || load_module "cdc_ether" + load_module "option" + ;; esac done -echo "Kernel modules loaded" +echo "Kmod loading complete, check $LOGFILE for details" From 92ec3ad9669a723c122452cc6d17cc4ca3901494 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:19:13 +0700 Subject: [PATCH 31/50] Add modem_profiles.sh for extensible modem support --- scripts/modem_profiles.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 scripts/modem_profiles.sh diff --git a/scripts/modem_profiles.sh b/scripts/modem_profiles.sh new file mode 100755 index 00000000..78d7fd15 --- /dev/null +++ b/scripts/modem_profiles.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# Modem profile database +get_profile() { + VID="$1" + case $VID in + "05c6") echo "Quectel: qmi_wwan,option|AT+CSQ|nr5g_band" ;; + "1199" | "0f3d") echo "Sierra Wireless: sierra,option|AT!GSTATUS?|band" ;; + "1bc7") echo "Telit: qmi_wwan,option|AT#CSQ|band" ;; + "12d1") echo "Huawei: cdc_ether,option|AT+CSQ|band" ;; + "1e0e") echo "Fibocom: qmi_wwan,option|AT+CSQ|nr5g_band" ;; + *) echo "Unknown: qmi_wwan,option|AT+CSQ|band" ;; + esac +} From ae0f9d529b1641885875f7d2f1cfea6591032efb Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:20:02 +0700 Subject: [PATCH 32/50] Update detect_modem.sh to use modem profiles --- scripts/detect_modem.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index a75fa045..055b7808 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,10 +1,13 @@ #!/bin/sh -# Detect WWAN cards and load kernel modules +# Detect WWAN cards with profile support +source /usr/bin/modem_profiles.sh echo "Starting modem detection..." sh /usr/bin/load_kmod.sh for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1) pid=$(echo $dev | cut -d: -f2) - [ -n "$vid" ] && echo "Modem detected: VID:$vid PID:$pid" + profile=$(get_profile $vid) + name=$(echo $profile | cut -d: -f1) + echo "Detected $name (VID:$vid PID:$pid)" done -echo "Modem detection complete" +echo "Detection complete" From 4afd8382b1afb06afe427a95492c6edf02b76178 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:20:14 +0700 Subject: [PATCH 33/50] Update README with enhanced kmod and profile support --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3d50618a..5098d575 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # 5G-Modem-Support Enhanced ## Features -- Auto-detect WWAN cards with kmod loading (`detect_modem.sh` + `load_kmod.sh`) -- Supported modems: Quectel, Sierra Wireless, Telit, Huawei, Fibocom +- Dynamic kmod loading (`load_kmod.sh`) +- Modem profile database (`modem_profiles.sh`) +- Auto-detect with profiles (`detect_modem.sh`) +- Supported modems: Quectel, Sierra Wireless, Telit, Huawei, Fibocom, and more - Band locking (`band_lock.sh`) - Diagnostics (`modem_diag.sh`) - Multi-protocol support (`modem_connect.sh`) @@ -11,7 +13,8 @@ ## Installation 1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` 2. Copy scripts: `scp scripts/* root@192.168.1.1:/usr/bin/` -3. Install kmods on OpenWrt: `opkg install kmod-usb-serial kmod-qmi-wwan kmod-cdc-mbim kmod-sierra kmod-cdc-ether` +3. Install kmods: `opkg install kmod-usb-serial kmod-qmi-wwan kmod-cdc-mbim kmod-sierra kmod-cdc-ether` ## Usage -- Detect and load kmods: `sh /usr/bin/main.sh detect` +- Detect modems: `sh /usr/bin/main.sh detect` +- Check logs: `cat /var/log/wwan_kmod.log` - Full usage: `sh /usr/bin/main.sh {detect|lock |diag|connect |auto}` From 5ff54aa322cb69271c5356ce5ff8dd37461f6a9c Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:21:45 +0700 Subject: [PATCH 34/50] Recreate load_kmod.sh --- scripts/load_kmod.sh | 54 +++----------------------------------------- 1 file changed, 3 insertions(+), 51 deletions(-) diff --git a/scripts/load_kmod.sh b/scripts/load_kmod.sh index 097355ef..6a518d17 100755 --- a/scripts/load_kmod.sh +++ b/scripts/load_kmod.sh @@ -1,54 +1,6 @@ #!/bin/sh -# Enhanced kmod loading for WWAN cards +# Enhanced kmod loading LOGFILE="/var/log/wwan_kmod.log" echo "$(date): Starting kmod loading..." >> $LOGFILE -load_module() { - MODULE="$1" - if lsmod | grep -q "$MODULE"; then - echo "Module $MODULE already loaded" - else - modprobe $MODULE && echo "Loaded $MODULE" || echo "Failed to load $MODULE" - echo "$(date): $MODULE status: $(lsmod | grep $MODULE)" >> $LOGFILE - fi -} -for dev in $(lsusb | awk "{print \$6}"); do - vid=$(echo $dev | cut -d: -f1) - pid=$(echo $dev | cut -d: -f2) - case $vid in - "05c6") # Quectel - echo "Quectel modem (VID:$vid PID:$pid)" - load_module "qmi_wwan" || load_module "cdc_mbim" - load_module "option" - echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id - ;; - "1199" | "0f3d") # Sierra Wireless - echo "Sierra Wireless modem (VID:$vid PID:$pid)" - load_module "sierra" || load_module "qmi_wwan" - load_module "option" - echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id - ;; - "1bc7") # Telit - echo "Telit modem (VID:$vid PID:$pid)" - load_module "qmi_wwan" || load_module "cdc_ether" - load_module "option" - echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id - ;; - "12d1") # Huawei - echo "Huawei modem (VID:$vid PID:$pid)" - load_module "cdc_ether" || load_module "qmi_wwan" - load_module "option" - echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id - ;; - "1e0e") # Fibocom - echo "Fibocom modem (VID:$vid PID:$pid)" - load_module "qmi_wwan" || load_module "cdc_mbim" - load_module "option" - echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id - ;; - *) echo "Unknown device (VID:$vid PID:$pid), trying generic drivers" - load_module "qmi_wwan" || load_module "cdc_mbim" || load_module "cdc_ether" - load_module "option" - ;; - esac -done -echo "Kmod loading complete, check $LOGFILE for details" +load_module() { MODULE="$1"; if lsmod | grep -q "$MODULE"; then echo "Module $MODULE already loaded"; else modprobe $MODULE && echo "Loaded $MODULE" || echo "Failed to load $MODULE"; fi; } +for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1); pid=$(echo $dev | cut -d: -f2); case $vid in "05c6") echo "Quectel modem"; load_module "qmi_wwan"; load_module "option"; echo "$vid $pid" > /sys/bus/usb-serial/drivers/option1/new_id ;; "1199" | "0f3d") echo "Sierra Wireless"; load_module "sierra"; load_module "option" ;; *) echo "Unknown device"; esac; done From f2ce9ed3dd70d9c7317aba97d0e0c3b6abe37828 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:23:29 +0700 Subject: [PATCH 35/50] Add smart_kmod.sh for advanced kmod management --- scripts/smart_kmod.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 scripts/smart_kmod.sh diff --git a/scripts/smart_kmod.sh b/scripts/smart_kmod.sh new file mode 100755 index 00000000..f32c760f --- /dev/null +++ b/scripts/smart_kmod.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Smart kmod management for WWAN cards +LOGFILE="/var/log/wwan_kmod.log" +KERNEL_VERSION=$(uname -r) +check_and_install() { + MODULE="$1" + if lsmod | grep -q "$MODULE"; then + echo "Module $MODULE already loaded" + elif opkg list-installed | grep -q "$MODULE"; then + modprobe $MODULE && echo "Loaded $MODULE" || echo "Failed to load $MODULE" + else + echo "Installing $MODULE for kernel $KERNEL_VERSION..." + opkg update + opkg install $MODULE + modprobe $MODULE && echo "Loaded $MODULE" || echo "Failed, check kernel compatibility" + fi + echo "$(date): $MODULE status: $(lsmod | grep $MODULE)" >> $LOGFILE +} +for mod in kmod-usb-serial kmod-qmi-wwan kmod-cdc-mbim kmod-sierra kmod-cdc-ether; do + check_and_install $mod +done +echo "Smart kmod management complete" From cc44adcf8e0776783a4b186a33fd6c7d6e184aff Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:23:35 +0700 Subject: [PATCH 36/50] Enhance modem_profiles.sh with detailed modem info --- scripts/modem_profiles.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/modem_profiles.sh b/scripts/modem_profiles.sh index 78d7fd15..b4f6d7c6 100755 --- a/scripts/modem_profiles.sh +++ b/scripts/modem_profiles.sh @@ -1,13 +1,13 @@ #!/bin/sh -# Modem profile database +# Advanced modem profile database get_profile() { VID="$1" case $VID in - "05c6") echo "Quectel: qmi_wwan,option|AT+CSQ|nr5g_band" ;; - "1199" | "0f3d") echo "Sierra Wireless: sierra,option|AT!GSTATUS?|band" ;; - "1bc7") echo "Telit: qmi_wwan,option|AT#CSQ|band" ;; - "12d1") echo "Huawei: cdc_ether,option|AT+CSQ|band" ;; - "1e0e") echo "Fibocom: qmi_wwan,option|AT+CSQ|nr5g_band" ;; - *) echo "Unknown: qmi_wwan,option|AT+CSQ|band" ;; + "05c6") echo "Quectel|qmi_wwan,option|AT+CGMR,AT+CSQ|nr5g_band|QMI" ;; + "1199" | "0f3d") echo "Sierra Wireless|sierra,option|AT+CGMR,AT!GSTATUS?|band|MBIM" ;; + "1bc7") echo "Telit|qmi_wwan,option|AT+CGMR,AT#CSQ|band|QMI" ;; + "12d1") echo "Huawei|cdc_ether,option|AT+CGMR,AT+CSQ|band|PPP" ;; + "1e0e") echo "Fibocom|qmi_wwan,option|AT+CGMR,AT+CSQ|nr5g_band|QMI" ;; + *) echo "Unknown|qmi_wwan,option|AT+CGMR,AT+CSQ|band|QMI" ;; esac } From f388e33a9c99eb80dd70c118117f1814f48400b9 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:23:42 +0700 Subject: [PATCH 37/50] Update detect_modem.sh with smart kmod and profile features --- scripts/detect_modem.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index 055b7808..4f9ab7ac 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,13 +1,18 @@ #!/bin/sh -# Detect WWAN cards with profile support +# Advanced WWAN card detection source /usr/bin/modem_profiles.sh -echo "Starting modem detection..." -sh /usr/bin/load_kmod.sh +sh /usr/bin/smart_kmod.sh for dev in $(lsusb | awk "{print \$6}"); do vid=$(echo $dev | cut -d: -f1) pid=$(echo $dev | cut -d: -f2) profile=$(get_profile $vid) - name=$(echo $profile | cut -d: -f1) + name=$(echo $profile | cut -d"|" -f1) + at_cmds=$(echo $profile | cut -d"|" -f3) echo "Detected $name (VID:$vid PID:$pid)" + if [ -e /dev/ttyUSB2 ]; then + for cmd in $(echo $at_cmds | tr "," " "); do + result=$(echo "$cmd" | atinout - /dev/ttyUSB2 -) + echo "$cmd: $result" + done + fi done -echo "Detection complete" From 3fbee6f55e85f1f028d890cdf2731f165fc5be8d Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:23:50 +0700 Subject: [PATCH 38/50] Add wwan_service.sh for OpenWrt init.d integration --- scripts/wwan_service.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 scripts/wwan_service.sh diff --git a/scripts/wwan_service.sh b/scripts/wwan_service.sh new file mode 100755 index 00000000..be3259b5 --- /dev/null +++ b/scripts/wwan_service.sh @@ -0,0 +1,13 @@ +#!/bin/sh /etc/rc.common +# WWAN service for OpenWrt +START=90 +STOP=10 +start() { + echo "Starting WWAN service..." + sh /usr/bin/detect_modem.sh + sh /usr/bin/auto_reconnect.sh & +} +stop() { + echo "Stopping WWAN service..." + killall auto_reconnect.sh +} From 69faa44db8cda7afe2811471c842d70c6e341e85 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:23:57 +0700 Subject: [PATCH 39/50] Optimize modem_connect.sh with auto protocol detection --- scripts/modem_connect.sh | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/scripts/modem_connect.sh b/scripts/modem_connect.sh index 41278007..8bc0cff6 100755 --- a/scripts/modem_connect.sh +++ b/scripts/modem_connect.sh @@ -1,18 +1,19 @@ #!/bin/sh -# Usage: ./modem_connect.sh qmi|mbim|ppp -PROTOCOL="$1" +# Auto-detect and connect modem +source /usr/bin/modem_profiles.sh DEVICE="/dev/ttyUSB2" -if [ ! -e "$DEVICE" ]; then - echo "Error: Device $DEVICE not found" - exit 1 -fi -if [ -z "$PROTOCOL" ]; then - echo "Error: Specify protocol (qmi, mbim, ppp)" - exit 1 -fi -case $PROTOCOL in - "qmi") qmicli -d /dev/cdc-wdm0 --wda-set-data-format ;; - "mbim") mbimcli -d /dev/cdc-wdm0 --query-device-caps ;; - "ppp") echo "ATDT*99#" | atinout - $DEVICE - ;; - *) echo "Unsupported protocol: $PROTOCOL" ;; -esac +if [ ! -e "$DEVICE" ]; then echo "Error: $DEVICE not found"; exit 1; fi +VID=$(lsusb | grep "$(dmesg | grep ttyUSB | tail -1 | awk "{print \$NF}")" | awk "{print \$6}" | cut -d: -f1) +PROFILE=$(get_profile $VID) +PROTOCOL=$(echo $PROFILE | cut -d"|" -f5) +echo "Using protocol: $PROTOCOL for $(echo $PROFILE | cut -d"|" -f1)" +for i in 1 2 3; do + case $PROTOCOL in + "QMI") qmicli -d /dev/cdc-wdm0 --wda-set-data-format && break ;; + "MBIM") mbimcli -d /dev/cdc-wdm0 --query-device-caps && break ;; + "PPP") echo "ATDT*99#" | atinout - $DEVICE - && break ;; + *) echo "Falling back to QMI"; qmicli -d /dev/cdc-wdm0 --wda-set-data-format && break ;; + esac + echo "Attempt $i failed, retrying..." + sleep 5 +done From a87e214a6451afaa251570dd7c012a43acad4db9 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:24:04 +0700 Subject: [PATCH 40/50] Add luci_stub.sh as foundation for LuCI integration --- scripts/luci_stub.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 scripts/luci_stub.sh diff --git a/scripts/luci_stub.sh b/scripts/luci_stub.sh new file mode 100755 index 00000000..1c161826 --- /dev/null +++ b/scripts/luci_stub.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# LuCI stub for WWAN status +echo "WWAN Status Report" +sh /usr/bin/detect_modem.sh +if [ -e /dev/ttyUSB2 ]; then + signal=$(echo "AT+CSQ" | atinout - /dev/ttyUSB2 -) + echo "Signal Strength: $signal" +fi +ip addr show wwan0 From 8a19bb934bcbbeda0dbd7f2267c9b35378c44132 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:24:51 +0700 Subject: [PATCH 41/50] Add wwan_hotplug.sh for automatic modem handling --- scripts/wwan_hotplug.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 scripts/wwan_hotplug.sh diff --git a/scripts/wwan_hotplug.sh b/scripts/wwan_hotplug.sh new file mode 100755 index 00000000..8c82d252 --- /dev/null +++ b/scripts/wwan_hotplug.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Hotplug script for WWAN devices +ACTION="$1" +DEVICENAME="$2" +if [ "$ACTION" = "add" ] && echo "$DEVICENAME" | grep -q "usb"; then + logger "WWAN device added: $DEVICENAME" + sh /usr/bin/detect_modem.sh + sh /usr/bin/modem_connect.sh +elif [ "$ACTION" = "remove" ]; then + logger "WWAN device removed: $DEVICENAME" + killall auto_reconnect.sh 2>/dev/null +fi From 43f87a04eee0f3aa3f7ee12bfdcdc313a649fa8b Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:25:09 +0700 Subject: [PATCH 42/50] Add firmware_update.sh for modem firmware updates --- scripts/firmware_update.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 scripts/firmware_update.sh diff --git a/scripts/firmware_update.sh b/scripts/firmware_update.sh new file mode 100755 index 00000000..a7729d36 --- /dev/null +++ b/scripts/firmware_update.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Update WWAN modem firmware +DEVICE="/dev/ttyUSB2" +FIRMWARE_PATH="$1" +if [ ! -e "$DEVICE" ]; then echo "Error: $DEVICE not found"; exit 1; fi +if [ -z "$FIRMWARE_PATH" ] || [ ! -f "$FIRMWARE_PATH" ]; then + echo "Error: Provide valid firmware file path"; exit 1 +fi +VID=$(lsusb | grep "$(dmesg | grep ttyUSB | tail -1 | awk "{print \$NF}")" | awk "{print \$6}" | cut -d: -f1) +case $VID in + "05c6") # Quectel + qmi-firmware-update --update -d "$DEVICE" "$FIRMWARE_PATH" + ;; + *) echo "Firmware update not supported for VID:$VID yet"; exit 1 ;; +esac From 0d486419f4ee482231994dbe29079434fb24dbc4 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:25:18 +0700 Subject: [PATCH 43/50] Add optimize_network.sh for signal-based optimization --- scripts/optimize_network.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 scripts/optimize_network.sh diff --git a/scripts/optimize_network.sh b/scripts/optimize_network.sh new file mode 100755 index 00000000..e8e6b7ce --- /dev/null +++ b/scripts/optimize_network.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# Optimize WWAN network settings +source /usr/bin/modem_profiles.sh +VID=$(lsusb | grep "$(dmesg | grep ttyUSB | tail -1 | awk "{print \$NF}")" | awk "{print \$6}" | cut -d: -f1) +PROFILE=$(get_profile $VID) +BAND_PARAM=$(echo $PROFILE | cut -d"|" -f4) +if [ -e "$DEVICE" ]; then + signal=$(echo "AT+CSQ" | atinout - /dev/ttyUSB2 - | grep "+CSQ" | awk "{print \$2}" | cut -d"," -f1) + if [ "$signal" -lt 10 ]; then + echo "Weak signal ($signal), optimizing bands..." + sh /usr/bin/band_lock.sh "1,3,41" # Example strong bands + else + echo "Signal strength OK ($signal)" + fi +fi +sh /usr/bin/modem_connect.sh From 808fadab95f85eaa8e070185539241b29a76ea13 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:25:31 +0700 Subject: [PATCH 44/50] Add luci_wwan.sh for JSON output to prep LuCI integration --- scripts/luci_wwan.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 scripts/luci_wwan.sh diff --git a/scripts/luci_wwan.sh b/scripts/luci_wwan.sh new file mode 100755 index 00000000..80c4afd8 --- /dev/null +++ b/scripts/luci_wwan.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# WWAN status for LuCI integration +echo "{" +sh /usr/bin/detect_modem.sh > /tmp/wwan_detect +DETECT=$(cat /tmp/wwan_detect | grep "Detected" | sed "s/Detected /\\"/; s/ (VID:/\\", \\"vid\\": \\"/; s/ PID:/\\", \\"pid\\": \\"/; s/)$/\\"}/") +if [ -e /dev/ttyUSB2 ]; then + SIGNAL=$(echo "AT+CSQ" | atinout - /dev/ttyUSB2 - | grep "+CSQ" | awk "{print \$2}" | cut -d"," -f1) + FIRMWARE=$(echo "AT+CGMR" | atinout - /dev/ttyUSB2 - | grep -v "AT+CGMR") + echo "\\"modems\\": [$DETECT]," + echo "\\"signal\\": \\"$SIGNAL\\"," + echo "\\"firmware\\": \\"$FIRMWARE\\"" +else + echo "\\"modems\\": [], \\"signal\\": \\"N/A\\", \\"firmware\\": \\"N/A\\"" +fi +echo "}" From b0ee7b308c4328919ae77104c128858e7bd4b049 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:25:42 +0700 Subject: [PATCH 45/50] Update main.sh with all advanced features --- scripts/main.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/main.sh b/scripts/main.sh index 3b2ad868..394cc9c3 100755 --- a/scripts/main.sh +++ b/scripts/main.sh @@ -3,9 +3,13 @@ ACTION="$1" case $ACTION in "detect") sh /usr/bin/detect_modem.sh ;; + "install") sh /usr/bin/smart_kmod.sh ;; "lock") sh /usr/bin/band_lock.sh "$2" ;; "diag") sh /usr/bin/modem_diag.sh ;; - "connect") sh /usr/bin/modem_connect.sh "$2" ;; + "connect") sh /usr/bin/modem_connect.sh ;; "auto") sh /usr/bin/auto_reconnect.sh ;; - *) echo "Usage: $0 {detect|lock |diag|connect |auto}" ;; + "update") sh /usr/bin/firmware_update.sh "$2" ;; + "optimize") sh /usr/bin/optimize_network.sh ;; + "luci") sh /usr/bin/luci_wwan.sh ;; + *) echo "Usage: $0 {detect|install|lock |diag|connect|auto|update |optimize|luci}" ;; esac From 90309c7d246191e87c7d78224a48dd11c72e5232 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:25:49 +0700 Subject: [PATCH 46/50] Update README with ultimate features --- README.md | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5098d575..c6bf30d2 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,15 @@ # 5G-Modem-Support Enhanced ## Features -- Dynamic kmod loading (`load_kmod.sh`) -- Modem profile database (`modem_profiles.sh`) -- Auto-detect with profiles (`detect_modem.sh`) -- Supported modems: Quectel, Sierra Wireless, Telit, Huawei, Fibocom, and more -- Band locking (`band_lock.sh`) -- Diagnostics (`modem_diag.sh`) -- Multi-protocol support (`modem_connect.sh`) -- Multi-modem detection (`multi_modem.sh`) -- Signal monitoring (`signal_monitor.sh`) -- Auto IP recovery (`auto_reconnect.sh`) +- Hotplug support for auto-detection +- Firmware updates for modems +- Network optimization based on signal +- LuCI-ready JSON output +- Full WWAN automation ## Installation -1. Clone repo: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` -2. Copy scripts: `scp scripts/* root@192.168.1.1:/usr/bin/` -3. Install kmods: `opkg install kmod-usb-serial kmod-qmi-wwan kmod-cdc-mbim kmod-sierra kmod-cdc-ether` +1. Clone: `git clone git@github.com:Doanduy09/5G-Modem-Support.git` +2. Copy: `scp scripts/* root@192.168.1.1:/usr/bin/` +3. Hotplug: `scp scripts/wwan_hotplug.sh root@192.168.1.1:/etc/hotplug.d/usb/20-wwan` +4. Install deps: `opkg install atinout qmi-utils libmbim ip-full` ## Usage -- Detect modems: `sh /usr/bin/main.sh detect` -- Check logs: `cat /var/log/wwan_kmod.log` -- Full usage: `sh /usr/bin/main.sh {detect|lock |diag|connect |auto}` +- Run: `sh /usr/bin/main.sh {detect|install|lock |diag|connect|auto|update |optimize|luci}` +- Example: `sh /usr/bin/main.sh optimize` From 6f0016deaf2eea4c46934a96e83447972722ea97 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:26:59 +0700 Subject: [PATCH 47/50] Enhance detect_modem.sh with robust error handling and resource check --- scripts/detect_modem.sh | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/scripts/detect_modem.sh b/scripts/detect_modem.sh index 4f9ab7ac..06aae6f0 100755 --- a/scripts/detect_modem.sh +++ b/scripts/detect_modem.sh @@ -1,18 +1,19 @@ #!/bin/sh -# Advanced WWAN card detection +# Advanced WWAN detection with error handling source /usr/bin/modem_profiles.sh -sh /usr/bin/smart_kmod.sh -for dev in $(lsusb | awk "{print \$6}"); do +LOGFILE="/var/log/wwan_detect.log" +sh /usr/bin/smart_kmod.sh || { echo "kmod loading failed" >> $LOGFILE; exit 1; } +for dev in $(lsusb | awk "{print \$6}" | grep -v "^$"); do vid=$(echo $dev | cut -d: -f1) pid=$(echo $dev | cut -d: -f2) profile=$(get_profile $vid) name=$(echo $profile | cut -d"|" -f1) - at_cmds=$(echo $profile | cut -d"|" -f3) - echo "Detected $name (VID:$vid PID:$pid)" - if [ -e /dev/ttyUSB2 ]; then - for cmd in $(echo $at_cmds | tr "," " "); do - result=$(echo "$cmd" | atinout - /dev/ttyUSB2 -) - echo "$cmd: $result" - done + if [ -z "$vid" ] || [ -z "$pid" ]; then + echo "Invalid device info, skipping..." >> $LOGFILE + continue fi + echo "Detected $name (VID:$vid PID:$pid)" + [ -e /dev/ttyUSB2 ] || { echo "No ttyUSB2 for $name" >> $LOGFILE; continue; } + timeout 5 echo "AT" | atinout - /dev/ttyUSB2 - || echo "Modem $name unresponsive" >> $LOGFILE done +echo "Detection finished, CPU usage: $(top -bn1 | grep "Cpu(s)" | awk "{print \$2}")%" From 38af8b5cd0562be41a8784d733f280252fb7a3fc Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:27:08 +0700 Subject: [PATCH 48/50] Add load_balance.sh for multi-modem support with mwan3 --- scripts/load_balance.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 scripts/load_balance.sh diff --git a/scripts/load_balance.sh b/scripts/load_balance.sh new file mode 100755 index 00000000..6b698fab --- /dev/null +++ b/scripts/load_balance.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Multi-modem load balancing with mwan3 +MOD EMS=() +i=1 +for dev in /dev/ttyUSB*; do + [ -e "$dev" ] || continue + sh /usr/bin/detect_modem.sh + sh /usr/bin/modem_connect.sh + uci set network.wwan$i=interface + uci set network.wwan$i.proto="qmi" + uci set network.wwan$i.device="/dev/cdc-wdm$((i-1))" + uci commit network + MODEMS+=("wwan$i") + i=$((i+1)) +done +opkg update && opkg install mwan3 +for modem in "${MODEMS[@]}"; do + uci set mwan3.$modem=interface + uci set mwan3.$modem.enabled="1" +done +uci commit mwan3 +/etc/init.d/mwan3 restart From a1b697ce1574aa8b0f44c55a3188baa5c8710f74 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:27:15 +0700 Subject: [PATCH 49/50] Add ai_band_select.sh for AI-driven band optimization --- scripts/ai_band_select.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 scripts/ai_band_select.sh diff --git a/scripts/ai_band_select.sh b/scripts/ai_band_select.sh new file mode 100755 index 00000000..fa301aa3 --- /dev/null +++ b/scripts/ai_band_select.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# AI-based band selection +DATA_FILE="/var/log/band_data.log" +DEVICE="/dev/ttyUSB2" +BANDS="1,3,7,20,28,38,40,41,77,78,79" # Common 4G/5G bands +collect_data() { + for band in $(echo $BANDS | tr "," " "); do + sh /usr/bin/band_lock.sh "$band" + sleep 5 + signal=$(echo "AT+CSQ" | atinout - $DEVICE - | grep "+CSQ" | awk "{print \$2}" | cut -d"," -f1) + [ -z "$signal" ] && signal=0 + echo "$(date),$band,$signal" >> $DATA_FILE + done +} +select_best_band() { + best_band="" + best_signal=0 + while IFS="," read -r timestamp band signal; do + [ "$signal" -gt "$best_signal" ] && { best_signal="$signal"; best_band="$band"; } + done < $DATA_FILE + echo "Best band: $best_band (Signal: $best_signal)" + sh /usr/bin/band_lock.sh "$best_band" +} +if [ ! -f "$DATA_FILE" ]; then + echo "Collecting initial band data..." + collect_data +fi +select_best_band From 37188d07e066f68b35f854fd243371d1045b4799 Mon Sep 17 00:00:00 2001 From: Doan Duy Date: Sat, 1 Mar 2025 10:27:23 +0700 Subject: [PATCH 50/50] Update main.sh with AI band selection and load balancing --- scripts/main.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/main.sh b/scripts/main.sh index 394cc9c3..73886d93 100755 --- a/scripts/main.sh +++ b/scripts/main.sh @@ -10,6 +10,8 @@ case $ACTION in "auto") sh /usr/bin/auto_reconnect.sh ;; "update") sh /usr/bin/firmware_update.sh "$2" ;; "optimize") sh /usr/bin/optimize_network.sh ;; + "ai") sh /usr/bin/ai_band_select.sh ;; + "balance") sh /usr/bin/load_balance.sh ;; "luci") sh /usr/bin/luci_wwan.sh ;; - *) echo "Usage: $0 {detect|install|lock |diag|connect|auto|update |optimize|luci}" ;; + *) echo "Usage: $0 {detect|install|lock |diag|connect|auto|update |optimize|ai|balance|luci}" ;; esac