Compare commits
83 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
88b90bbea7 | ||
![]() |
f6211575d4 | ||
![]() |
c04684dabe | ||
![]() |
6788934e46 | ||
![]() |
a631b62d53 | ||
![]() |
ef18492ba4 | ||
![]() |
b9ef79b982 | ||
![]() |
d4621e1496 | ||
![]() |
82f401bf05 | ||
![]() |
5dc6b7cdad | ||
![]() |
06ce7101ce | ||
![]() |
8c295e84ab | ||
![]() |
5186c841ec | ||
![]() |
384d2adad9 | ||
![]() |
36bd30bccd | ||
![]() |
fcfcda7321 | ||
![]() |
410bff1d54 | ||
![]() |
2a465bcdfe | ||
![]() |
f1b495eb1a | ||
![]() |
37693b95d7 | ||
![]() |
7fece11557 | ||
![]() |
ac004985f1 | ||
![]() |
6f5eefe240 | ||
![]() |
70d9b97eed | ||
![]() |
0671e79697 | ||
![]() |
4f247ef938 | ||
![]() |
f3966a1009 | ||
![]() |
66db34a221 | ||
![]() |
15fd93ab85 | ||
![]() |
25b038e62a | ||
![]() |
98a728a497 | ||
![]() |
33a2ae011e | ||
![]() |
4a790110a1 | ||
![]() |
baaacc863c | ||
![]() |
999ca5dec5 | ||
![]() |
b211a37339 | ||
![]() |
26f3636a37 | ||
![]() |
f20a921dce | ||
![]() |
da2908b1d1 | ||
![]() |
3760807e2f | ||
![]() |
393dd33334 | ||
![]() |
653a4ae591 | ||
![]() |
07c40ddaed | ||
![]() |
6fe59c1d2b | ||
![]() |
fb90356b81 | ||
![]() |
31665b7153 | ||
![]() |
0384c8faaf | ||
![]() |
68cf55631f | ||
![]() |
558918bec8 | ||
![]() |
5034d81106 | ||
![]() |
2d7acea04d | ||
![]() |
9d650234e5 | ||
![]() |
ecf9e25bc4 | ||
![]() |
530b1e684c | ||
![]() |
3be67546b0 | ||
![]() |
d09fa42c0f | ||
![]() |
ed793f114b | ||
![]() |
b25277eae4 | ||
![]() |
074dbbb117 | ||
![]() |
e0ce8d9be9 | ||
![]() |
4664fe87e5 | ||
![]() |
fc645a616d | ||
![]() |
706c4df157 | ||
![]() |
468f3738b6 | ||
![]() |
b8490111e7 | ||
![]() |
1af23d6068 | ||
![]() |
e376cf5e2a | ||
![]() |
ef55ccb262 | ||
![]() |
d813c0be80 | ||
![]() |
b744a28094 | ||
![]() |
53c2a439c6 | ||
![]() |
b021f6503b | ||
![]() |
644530969e | ||
![]() |
ca6dd29087 | ||
![]() |
3f6eac6826 | ||
![]() |
5c57f59595 | ||
![]() |
c8b803c41d | ||
![]() |
40b3c450fb | ||
![]() |
f21eb3b3e9 | ||
![]() |
ce8cae0f69 | ||
![]() |
3d9bca5f12 | ||
![]() |
7d49e14c13 | ||
![]() |
1645111df8 |
89
.github/ISSUE_TEMPLATE/bug-report.md
vendored
89
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@ -7,10 +7,6 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
以下是问题报告模板,包含中文和英文翻译:
|
||||
|
||||
---
|
||||
|
||||
**描述问题**
|
||||
提供模组型号、路由器平台、路由器系统发行版等信息
|
||||
**Describe the Issue**
|
||||
@ -40,30 +36,75 @@ Describe what the normal behavior should be.
|
||||
---
|
||||
|
||||
**日志信息**
|
||||
请在终端执行以下命令并将结果粘贴到此处
|
||||
请在终端执行以下命令并将结果粘贴到对应的折叠代码块中
|
||||
**Log Information**
|
||||
Please execute the following commands in the terminal and paste the results below:
|
||||
Please execute the following commands in the terminal and paste the results into the corresponding collapsible code blocks below:
|
||||
|
||||
<details>
|
||||
<summary>模组配置 (Module Configuration)</summary>
|
||||
|
||||
```bash
|
||||
uci show qmodem
|
||||
# 显示模组配置
|
||||
# Show module configuration
|
||||
```
|
||||
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>网络配置 (Network Configuration)</summary>
|
||||
|
||||
```bash
|
||||
uci show network
|
||||
# 显示网络配置
|
||||
# Show network configuration
|
||||
```
|
||||
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>系统日志 (System Logs)</summary>
|
||||
|
||||
```bash
|
||||
logread
|
||||
# 查看系统日志
|
||||
# View system logs
|
||||
```
|
||||
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>内核日志 (Kernel Logs)</summary>
|
||||
|
||||
```bash
|
||||
dmesg
|
||||
# 查看内核日志
|
||||
# View kernel logs
|
||||
```
|
||||
|
||||
如果是USB模组相关的问题,执行以下命令:
|
||||
**If the issue is related to USB modules, execute the following command:**
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
如果是USB模组相关的问题,执行以下命令并填写结果:
|
||||
**If the issue is related to USB modules, execute the following command and paste the output:**
|
||||
|
||||
<details>
|
||||
<summary>USB设备信息 (USB Devices)</summary>
|
||||
|
||||
```bash
|
||||
lsusb
|
||||
@ -71,8 +112,17 @@ lsusb
|
||||
# List USB devices
|
||||
```
|
||||
|
||||
如果是PCIe模组相关的问题,执行以下命令:
|
||||
**If the issue is related to PCIe modules, execute the following command:**
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
如果是PCIe模组相关的问题,执行以下命令并填写结果:
|
||||
**If the issue is related to PCIe modules, execute the following command and paste the output:**
|
||||
|
||||
<details>
|
||||
<summary>PCIe设备信息 (PCIe Devices)</summary>
|
||||
|
||||
```bash
|
||||
lspci
|
||||
@ -80,8 +130,17 @@ lspci
|
||||
# List PCIe devices
|
||||
```
|
||||
|
||||
如果模组扫描存在问题,执行以下命令:
|
||||
**If there is an issue with module scanning, execute the following command:**
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
||||
如果模组扫描存在问题,执行以下命令并填写结果:
|
||||
**If there is an issue with module scanning, execute the following command and paste the output:**
|
||||
|
||||
<details>
|
||||
<summary>模组扫描 (Module Scanning)</summary>
|
||||
|
||||
```bash
|
||||
/usr/share/qmodem/modem_scan.sh scan
|
||||
@ -89,4 +148,8 @@ lspci
|
||||
# Scan modules
|
||||
```
|
||||
|
||||
---
|
||||
粘贴结果到此处
|
||||
Paste the output here
|
||||
```
|
||||
```
|
||||
</details>
|
||||
|
2
.github/workflows/arm64_apk.env
vendored
2
.github/workflows/arm64_apk.env
vendored
@ -1,4 +1,4 @@
|
||||
SDK_NAME=openwrt-sdk-mvebu-cortexa53_gcc-13.3.0_musl.Linux-x86_64
|
||||
SDK_NAME=openwrt-sdk-mvebu-cortexa53_gcc-14.3.0_musl.Linux-x86_64
|
||||
SDK_EXT=tar.zst
|
||||
SDK_URL=https://downloads.openwrt.org/snapshots/targets/mvebu/cortexa53/
|
||||
SDK_ARCH=aarch64_cortex-a53
|
||||
|
44
.github/workflows/commit_check_supportlist.yaml
vendored
Normal file
44
.github/workflows/commit_check_supportlist.yaml
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
name: "Update Support List"
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
# only run when "luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json" is changed
|
||||
paths:
|
||||
- 'luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json'
|
||||
|
||||
env:
|
||||
TZ: Asia/Shanghai
|
||||
|
||||
jobs:
|
||||
update_support_list:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
branch_name: ${{ github.ref_name }}
|
||||
with:
|
||||
path: 'qmodem'
|
||||
|
||||
|
||||
- name: Update Modem_support_list
|
||||
id: update_modem_support_list
|
||||
run: |
|
||||
cd qmodem
|
||||
is_json_invalid=0
|
||||
is_diff=0
|
||||
python3 ./scripts/update_support_list.py temp_support_list ./luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json || is_json_invalid=1
|
||||
diff ./temp_support_list.md ./docs/support_list.md -u > /tmp/file_diff.txt || is_diff=1
|
||||
if [ "$is_json_invalid" == "1" ];then
|
||||
exit 1
|
||||
fi
|
||||
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
|
22
.github/workflows/main.yml
vendored
22
.github/workflows/main.yml
vendored
@ -2,10 +2,10 @@ name: "Auto compile with OpenWrt SDK"
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- '*'
|
||||
tags:
|
||||
- 'v*'
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "README.md"
|
||||
@ -32,6 +32,7 @@ jobs:
|
||||
branch_name: ${{ env.branch_name }}
|
||||
tag_name: ${{ env.tag_name }}
|
||||
push_type: ${{ env.push_type }}
|
||||
is_pr: ${{ env.is_pr }}
|
||||
|
||||
steps:
|
||||
- name: Determine push type
|
||||
@ -45,6 +46,8 @@ jobs:
|
||||
echo "branch_name=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||
echo "push_type=branch" >> $GITHUB_ENV
|
||||
fi
|
||||
is_pr=$([[ "${{ github.event_name }}" == "pull_request" ]] && echo 1 || echo 0)
|
||||
echo "is_pr=${is_pr}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout
|
||||
if:
|
||||
@ -52,21 +55,11 @@ jobs:
|
||||
with:
|
||||
path: 'qmodem'
|
||||
|
||||
- name: Update Modem_support_list
|
||||
- name: Generate Release Note
|
||||
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 ./docs/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
|
||||
@ -172,6 +165,7 @@ jobs:
|
||||
name: Release Artifacts
|
||||
needs: [job_build_qmodem, job_prepare]
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ needs.job_prepare.outputs.push_type == 'tag' }}
|
||||
steps:
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
@ -197,7 +191,7 @@ jobs:
|
||||
done
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
uses: softprops/action-gh-release@v2.2.2
|
||||
if: ${{ needs.job_prepare.outputs.push_type == 'tag' }}
|
||||
with:
|
||||
body_path: release_note/release_note.md
|
||||
|
77
.github/workflows/pr_check_supportlist.yaml
vendored
Normal file
77
.github/workflows/pr_check_supportlist.yaml
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
name: "PR Update Support List"
|
||||
on:
|
||||
pull_request:
|
||||
# only run when "luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json" is changed
|
||||
paths:
|
||||
- 'luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json'
|
||||
|
||||
env:
|
||||
TZ: Asia/Shanghai
|
||||
|
||||
jobs:
|
||||
update_support_list:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout PR Branch
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: 'pr_branch'
|
||||
|
||||
- name: Checkout Base Branch
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
path: 'base_branch'
|
||||
|
||||
- name: Update Support List and Check
|
||||
id: update_modem_support_list
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
cd pr_branch
|
||||
is_json_invalid=0
|
||||
python3 ./scripts/update_support_list.py temp_support_list ./luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json || is_json_invalid=1
|
||||
|
||||
if [ "$is_json_invalid" = "1" ]; then
|
||||
echo "pr_close=1" >> $GITHUB_OUTPUT
|
||||
echo "The JSON file is invalid, please check" >> pr_comment.txt
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Compare with base branch support_list.md
|
||||
is_diff=0
|
||||
if ! diff ./temp_support_list.md ../base_branch/docs/support_list.md > /dev/null 2>&1; then
|
||||
is_diff=1
|
||||
fi
|
||||
|
||||
# Generate pr_comment.txt for comment
|
||||
echo '```' > ./pr_comment.txt
|
||||
diff -u ./temp_support_list.md ../base_branch/docs/support_list.md >> ./pr_comment.txt || true
|
||||
echo '```' >> ./pr_comment.txt
|
||||
if [ "$is_diff" = "1" ]; then
|
||||
echo "The support list has been updated, please check the changes" >> ./pr_comment.txt
|
||||
echo "pr_close=0" >> $GITHUB_OUTPUT
|
||||
echo "has_diff=1" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "No changes in the support list" >> ./pr_comment.txt
|
||||
echo "pr_close=0" >> $GITHUB_OUTPUT
|
||||
echo "has_diff=0" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Close PR if JSON Invalid
|
||||
if: steps.update_modem_support_list.outputs.pr_close == '1'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd base_branch
|
||||
gh pr comment ${{ github.event.pull_request.number }} -F ../pr_branch/pr_comment.txt
|
||||
gh pr close ${{ github.event.pull_request.number }}
|
||||
|
||||
- name: Comment on PR if JSON Valid
|
||||
if: steps.update_modem_support_list.outputs.pr_close == '0'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd base_branch
|
||||
gh pr comment ${{ github.event.pull_request.number }} -F ../pr_branch/pr_comment.txt
|
2
.github/workflows/x64_apk.env
vendored
2
.github/workflows/x64_apk.env
vendored
@ -1,4 +1,4 @@
|
||||
SDK_NAME=openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64
|
||||
SDK_NAME=openwrt-sdk-x86-64_gcc-14.3.0_musl.Linux-x86_64
|
||||
SDK_URL=https://downloads.openwrt.org/snapshots/targets/x86/64/
|
||||
SDK_ARCH=x86_64
|
||||
SDK_EXT=tar.zst
|
||||
|
21
README.md
21
README.md
@ -1,3 +1,22 @@
|
||||
# 舔狗计划
|
||||
最近刚追到高中时期的白月光✨,脑子里全是和妹妹聊天的剧本📖。
|
||||
工作基本停摆了,游戏也卸了,连熬夜刷剧都不敢了,怕眼圈太黑影响形象👀。
|
||||
等我谈稳定了👫,再说要不要恢复正常更新!
|
||||
|
||||
为了追🌸白月光🌸,MD,硬生生变成了情感专家、聊天达人、朋友圈文案大师📱!
|
||||
|
||||
无知时尬聊白月光😅🙇♂️
|
||||
成熟时读懂白月光🤔🙇♂️
|
||||
恋爱时融化白月光🥰🙇♂️
|
||||
|
||||
白月光助我!喝咩!👋青春永驻!
|
||||
任何尴尬:终将被绝妙话术化解🧙♂️!
|
||||
|
||||
因此我[FuJr](https://github.com/FUjr)将暂停更新一段时间📵,所有新内容暂时停更,项目进度也会放缓。
|
||||
等我谈稳定了👫,再回来和大家分享我的舔狗成功学📖!
|
||||
感谢理解,祝大家都能追到自己的白月光✨!
|
||||
白月光,启动!
|
||||
|
||||
# QModem
|
||||
[](https://github.com/FUjr/modem_feeds/actions/workflows/main.yml)
|
||||
|
||||
@ -22,7 +41,7 @@
|
||||
|
||||
```shell
|
||||
echo >> feeds.conf.default
|
||||
echo 'src-git modem https://github.com/FUjr/QModem.git;main' >> feeds.conf.default
|
||||
echo 'src-git qmodem https://github.com/FUjr/QModem.git;main' >> feeds.conf.default
|
||||
./scripts/feeds update qmodem
|
||||
./scripts/feeds install -a -p qmodem
|
||||
```
|
||||
|
40
application/ndisc6/Makefile
Normal file
40
application/ndisc6/Makefile
Normal file
@ -0,0 +1,40 @@
|
||||
#
|
||||
# Copyright (C) 2007-2021 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ndisc6
|
||||
PKG_VERSION:=1.0.8
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=ndisc6-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:=https://www.remlab.net/files/ndisc6/
|
||||
PKG_HASH:=1f2fb2dc1172770aa5a09d39738a44d8b753cc5e2e25e306ca78682f9fea0b4f
|
||||
|
||||
PKG_INSTALL:=1
|
||||
PKG_FIXUP:=autoreconf
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/ndisc6
|
||||
URL:=https://www.remlab.net/ndisc6/
|
||||
SECTION:=network
|
||||
CATEGORY:=Network
|
||||
TITLE:=NDisc6
|
||||
endef
|
||||
|
||||
define Package/ndisc6/description
|
||||
NDisc6 is a small collection of useful tools for IPv6 networking
|
||||
endef
|
||||
|
||||
define Package/ndisc6/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ndisc6 $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rdisc6 $(1)/usr/bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ndisc6))
|
@ -314,6 +314,11 @@ typedef struct _QMI_TLV
|
||||
#define QMUX_CTL_FLAG_TYPE_IND 0x04
|
||||
#define QMUX_CTL_FLAG_MASK_COMPOUND 0x01
|
||||
#define QMUX_CTL_FLAG_MASK_TYPE 0x06 // 00-cmd, 01-rsp, 10-ind
|
||||
// Add these definitions to the DMS message types section
|
||||
#define QMIDMS_FOXCONN_SET_FCC_AUTH_REQ 0x555C
|
||||
#define QMIDMS_FOXCONN_SET_FCC_AUTH_RESP 0x555C
|
||||
#define QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ 0x555D
|
||||
#define QMIDMS_FOXCONN_SET_FCC_AUTH_V2_RESP 0x555D
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -399,25 +399,25 @@ typedef struct _QCTLV_PKT_STATISTICS
|
||||
//#ifdef QC_IP_MODE
|
||||
|
||||
/*
|
||||
�Bit 0 �Profile identifier
|
||||
�Bit 1 �Profile name
|
||||
�Bit 2 �PDP type
|
||||
�Bit 3 �APN name
|
||||
�Bit 4 �DNS address
|
||||
�Bit 5 �UMTS/GPRS granted QoS
|
||||
�Bit 6 �Username
|
||||
�Bit 7 �Authentication Protocol
|
||||
�Bit 8 �IP address
|
||||
�Bit 9 �Gateway information (address and subnet mask)
|
||||
�Bit 10 �PCSCF address using a PCO flag
|
||||
�Bit 11 �PCSCF server address list
|
||||
�Bit 12 �PCSCF domain name list
|
||||
�Bit 13 �MTU
|
||||
�Bit 14 �Domain name list
|
||||
�Bit 15 �IP family
|
||||
�Bit 16 �IM_CM flag
|
||||
�Bit 17 �Technology name
|
||||
�Bit 18 �Operator reserved PCO
|
||||
<EFBFBD>?Bit 0 <EFBFBD>?Profile identifier
|
||||
<EFBFBD>?Bit 1 <EFBFBD>?Profile name
|
||||
<EFBFBD>?Bit 2 <EFBFBD>?PDP type
|
||||
<EFBFBD>?Bit 3 <EFBFBD>?APN name
|
||||
<EFBFBD>?Bit 4 <EFBFBD>?DNS address
|
||||
<EFBFBD>?Bit 5 <EFBFBD>?UMTS/GPRS granted QoS
|
||||
<EFBFBD>?Bit 6 <EFBFBD>?Username
|
||||
<EFBFBD>?Bit 7 <EFBFBD>?Authentication Protocol
|
||||
<EFBFBD>?Bit 8 <EFBFBD>?IP address
|
||||
<EFBFBD>?Bit 9 <EFBFBD>?Gateway information (address and subnet mask)
|
||||
<EFBFBD>?Bit 10 <EFBFBD>?PCSCF address using a PCO flag
|
||||
<EFBFBD>?Bit 11 <EFBFBD>?PCSCF server address list
|
||||
<EFBFBD>?Bit 12 <EFBFBD>?PCSCF domain name list
|
||||
<EFBFBD>?Bit 13 <EFBFBD>?MTU
|
||||
<EFBFBD>?Bit 14 <EFBFBD>?Domain name list
|
||||
<EFBFBD>?Bit 15 <EFBFBD>?IP family
|
||||
<EFBFBD>?Bit 16 <EFBFBD>?IM_CM flag
|
||||
<EFBFBD>?Bit 17 <EFBFBD>?Technology name
|
||||
<EFBFBD>?Bit 18 <EFBFBD>?Operator reserved PCO
|
||||
*/
|
||||
#define QMIWDS_GET_RUNTIME_SETTINGS_MASK_IPV4DNS_ADDR (1 << 4)
|
||||
#define QMIWDS_GET_RUNTIME_SETTINGS_MASK_IPV4_ADDR (1 << 8)
|
||||
@ -4067,6 +4067,25 @@ typedef struct _QMIUIM_SET_CARD_SLOT_REQ_MSG
|
||||
#define QMI_COEX_GET_WWAN_STATE_REQ 0x22
|
||||
#define QMI_COEX_GET_WWAN_STATE_RESP 0x22
|
||||
|
||||
// Add these structure definitions after existing message structures
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
typedef struct _QMIDMS_FOXCONN_SET_FCC_AUTH_REQ_MSG
|
||||
{
|
||||
USHORT Type;
|
||||
USHORT Length;
|
||||
UCHAR TLVType;
|
||||
USHORT TLVLength;
|
||||
UCHAR magic_value;
|
||||
} __attribute__ ((packed)) QMIDMS_FOXCONN_SET_FCC_AUTH_REQ_MSG, *PQMIDMS_FOXCONN_SET_FCC_AUTH_REQ_MSG;
|
||||
|
||||
typedef struct _QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ_MSG
|
||||
{
|
||||
USHORT Type;
|
||||
USHORT Length;
|
||||
} __attribute__ ((packed)) QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ_MSG, *PQMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ_MSG;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
|
||||
uint32_t freq;
|
||||
@ -4293,6 +4312,10 @@ typedef struct _QMUX_MSG
|
||||
QMIWDS_ADMIN_SET_DATA_FORMAT_REQ_MSG SetDataFormatReq;
|
||||
QMI_WDA_SET_LOOPBACK_CONFIG_REQ_MSG SetLoopBackReq;
|
||||
QMI_WDA_SET_LOOPBACK_CONFIG_IND_MSG SetLoopBackInd;
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
QMIDMS_FOXCONN_SET_FCC_AUTH_REQ_MSG FoxconnSetFccAuthReq;
|
||||
QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ_MSG FoxconnSetFccAuthV2Req;
|
||||
#endif
|
||||
};
|
||||
} __attribute__ ((packed)) QMUX_MSG, *PQMUX_MSG;
|
||||
|
||||
|
@ -1832,6 +1832,88 @@ static int requestQueryDataCall(UCHAR *pConnectionStatus, int curIpFamily) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Add these implementations after existing function implementations
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Make sure these functions are static to avoid symbol conflicts
|
||||
static USHORT DmsFoxconnSetFccAuthenticationReq(PQMUX_MSG pMUXMsg, void *arg) {
|
||||
UCHAR magic_value = *((UCHAR *)arg);
|
||||
|
||||
pMUXMsg->FoxconnSetFccAuthReq.TLVType = 0x01;
|
||||
pMUXMsg->FoxconnSetFccAuthReq.TLVLength = cpu_to_le16(1);
|
||||
pMUXMsg->FoxconnSetFccAuthReq.magic_value = magic_value;
|
||||
|
||||
return sizeof(QMIDMS_FOXCONN_SET_FCC_AUTH_REQ_MSG);
|
||||
}
|
||||
|
||||
static USHORT DmsFoxconnSetFccAuthenticationV2Req(PQMUX_MSG pMUXMsg, void *arg) {
|
||||
FOXCONN_FCC_AUTH_V2_T *fcc_auth = (FOXCONN_FCC_AUTH_V2_T *)arg;
|
||||
USHORT TLVLength = 0;
|
||||
UCHAR *pTLV;
|
||||
|
||||
pTLV = (UCHAR *)(&pMUXMsg->FoxconnSetFccAuthV2Req + 1);
|
||||
|
||||
// Magic string TLV (0x01)
|
||||
*pTLV++ = 0x01; // TLV Type
|
||||
*(USHORT *)pTLV = cpu_to_le16(strlen(fcc_auth->magic_string));
|
||||
pTLV += 2;
|
||||
memcpy(pTLV, fcc_auth->magic_string, strlen(fcc_auth->magic_string));
|
||||
pTLV += strlen(fcc_auth->magic_string);
|
||||
TLVLength += 3 + strlen(fcc_auth->magic_string);
|
||||
|
||||
// Magic number TLV (0x02)
|
||||
*pTLV++ = 0x02; // TLV Type
|
||||
*(USHORT *)pTLV = cpu_to_le16(1);
|
||||
pTLV += 2;
|
||||
*pTLV++ = fcc_auth->magic_number;
|
||||
TLVLength += 4;
|
||||
|
||||
return sizeof(QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ_MSG) + TLVLength;
|
||||
}
|
||||
|
||||
// These functions should NOT be static since they're used externally
|
||||
int requestFoxconnSetFccAuthentication(UCHAR magic_value) {
|
||||
PQCQMIMSG pRequest;
|
||||
PQCQMIMSG pResponse;
|
||||
PQMUX_MSG pMUXMsg;
|
||||
int err;
|
||||
|
||||
dbg_time("%s(magic_value=0x%02x)", __func__, magic_value);
|
||||
|
||||
pRequest = ComposeQMUXMsg(QMUX_TYPE_DMS, QMIDMS_FOXCONN_SET_FCC_AUTH_REQ, DmsFoxconnSetFccAuthenticationReq, &magic_value);
|
||||
err = QmiThreadSendQMI(pRequest, &pResponse);
|
||||
qmi_rsp_check_and_return();
|
||||
|
||||
free(pResponse);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int requestFoxconnSetFccAuthenticationV2(const char *magic_string, UCHAR magic_number) {
|
||||
PQCQMIMSG pRequest;
|
||||
PQCQMIMSG pResponse;
|
||||
PQMUX_MSG pMUXMsg;
|
||||
int err;
|
||||
FOXCONN_FCC_AUTH_V2_T fcc_auth;
|
||||
|
||||
dbg_time("%s(magic_string='%s', magic_number=0x%02x)", __func__, magic_string, magic_number);
|
||||
|
||||
if (!magic_string || strlen(magic_string) >= sizeof(fcc_auth.magic_string)) {
|
||||
dbg_time("%s: Invalid magic_string", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
strcpy(fcc_auth.magic_string, magic_string);
|
||||
fcc_auth.magic_number = magic_number;
|
||||
|
||||
pRequest = ComposeQMUXMsg(QMUX_TYPE_DMS, QMIDMS_FOXCONN_SET_FCC_AUTH_V2_REQ, DmsFoxconnSetFccAuthenticationV2Req, &fcc_auth);
|
||||
err = QmiThreadSendQMI(pRequest, &pResponse);
|
||||
qmi_rsp_check_and_return();
|
||||
|
||||
free(pResponse);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int requestSetupDataCall(PROFILE_T *profile, int curIpFamily) {
|
||||
PQCQMIMSG pRequest;
|
||||
PQCQMIMSG pResponse;
|
||||
@ -2271,6 +2353,17 @@ static int requestBaseBandVersion(PROFILE_T *profile) {
|
||||
{
|
||||
uchar2char(profile->BaseBandVersion, sizeof(profile->BaseBandVersion), &revId->RevisionID, le16_to_cpu(revId->TLVLength));
|
||||
dbg_time("%s %s", __func__, profile->BaseBandVersion);
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Check if this modem model needs FCC authentication
|
||||
if (strstr(profile->BaseBandVersion, "T99W175")) {
|
||||
profile->needs_fcc_auth = 1;
|
||||
dbg_time("Modem model %s requires FCC authentication", profile->BaseBandVersion);
|
||||
} else {
|
||||
profile->needs_fcc_auth = 0;
|
||||
dbg_time("Modem model %s does not require FCC authentication", profile->BaseBandVersion);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
free(pResponse);
|
||||
@ -2555,6 +2648,10 @@ const struct request_ops qmi_request_ops = {
|
||||
#ifdef CONFIG_COEX_WWAN_STATE
|
||||
.requestGetCoexWWANState = requestGetCoexWWANState,
|
||||
#endif
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
.requestFoxconnSetFccAuthentication = requestFoxconnSetFccAuthentication,
|
||||
.requestFoxconnSetFccAuthenticationV2 = requestFoxconnSetFccAuthenticationV2,
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CELLINFO
|
||||
|
@ -20,6 +20,7 @@
|
||||
//#define CONFIG_REG_QOS_IND
|
||||
//#define CONFIG_GET_QOS_INFO
|
||||
//#define CONFIG_GET_QOS_DATA_RATE
|
||||
#define CONFIG_FOXCONN_FCC_AUTH
|
||||
|
||||
#if (defined(CONFIG_REG_QOS_IND) || defined(CONFIG_GET_QOS_INFO) || defined(CONFIG_GET_QOS_DATA_RATE))
|
||||
#ifndef CONFIG_REG_QOS_IND
|
||||
@ -249,7 +250,9 @@ typedef struct __PROFILE {
|
||||
char old_password[64];
|
||||
int old_auth;
|
||||
int old_iptype;
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
int needs_fcc_auth; // Add this field for FCC authentication flag
|
||||
#endif
|
||||
const struct qmi_device_ops *qmi_ops;
|
||||
const struct request_ops *request_ops;
|
||||
RMNET_INFO rmnet_info;
|
||||
@ -344,7 +347,20 @@ struct request_ops {
|
||||
int (*requestRegisterQos)(PROFILE_T *profile);
|
||||
int (*requestGetQosInfo)(PROFILE_T *profile);
|
||||
int (*requestGetCoexWWANState)(void);
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
int (*requestFoxconnSetFccAuthentication)(UCHAR magic_value);
|
||||
int (*requestFoxconnSetFccAuthenticationV2)(const char *magic_string, UCHAR magic_number);
|
||||
#endif
|
||||
};
|
||||
|
||||
// Add structure for V2 parameters
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
typedef struct {
|
||||
char magic_string[256];
|
||||
UCHAR magic_number;
|
||||
} FOXCONN_FCC_AUTH_V2_T;
|
||||
#endif
|
||||
|
||||
extern const struct request_ops qmi_request_ops;
|
||||
extern const struct request_ops mbim_request_ops;
|
||||
extern const struct request_ops atc_request_ops;
|
||||
|
@ -325,6 +325,38 @@ static int qmi_main(PROFILE_T *profile)
|
||||
if (request_ops->requestSetEthMode)
|
||||
request_ops->requestSetEthMode(profile);
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Only execute FCC authentication if the modem model requires it
|
||||
if (profile->needs_fcc_auth) {
|
||||
dbg_time("Executing FCC authentication for modem model: %s", profile->BaseBandVersion);
|
||||
|
||||
// Check if the fcc auth was successful
|
||||
char fcc_auth_success = 0;
|
||||
if (request_ops->requestFoxconnSetFccAuthentication) {
|
||||
// Use magic value 0x01 as seen in libqmi
|
||||
qmierr = request_ops->requestFoxconnSetFccAuthentication(0x01);
|
||||
if (!qmierr) {
|
||||
dbg_time("Foxconn FCC Authentication successful");
|
||||
fcc_auth_success = 1;
|
||||
}
|
||||
}
|
||||
if(fcc_auth_success != 1) {
|
||||
if (request_ops->requestFoxconnSetFccAuthenticationV2) {
|
||||
// Based on libqmi, use "FOXCONN" as magic string for Foxconn modems
|
||||
const char *magic_string = "FOXCONN"; // Correct magic string for Foxconn
|
||||
UCHAR magic_number = 0x01; // Standard magic number from libqmi
|
||||
|
||||
qmierr = request_ops->requestFoxconnSetFccAuthenticationV2(magic_string, magic_number);
|
||||
if (!qmierr) {
|
||||
dbg_time("Foxconn FCC Authentication V2 successful");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dbg_time("Skipping FCC authentication - not required for this modem model");
|
||||
}
|
||||
#endif
|
||||
if (request_ops->requestSetLoopBackState && profile->loopback_state) {
|
||||
qmierr = request_ops->requestSetLoopBackState(profile->loopback_state, profile->replication_factor);
|
||||
if (qmierr != QMI_ERR_INVALID_QMI_CMD) //X20 return this error
|
||||
|
@ -841,6 +841,8 @@ static pthread_mutex_t mbim_command_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static pthread_cond_t mbim_command_cond = PTHREAD_COND_INITIALIZER;
|
||||
static int mbim_ms_version = 1;
|
||||
static uint8_t qmi_over_mbim_nas = 0;
|
||||
static uint8_t qmi_over_mbim_dms = 0; // Add DMS client ID
|
||||
|
||||
int qmi_over_mbim_qmidev_send(PQCQMIMSG pQMI);
|
||||
|
||||
static const UUID_T * str2uuid(const char *str) {
|
||||
@ -1801,6 +1803,16 @@ static int mbim_device_caps_query(PROFILE_T *profile) {
|
||||
wchar2char((const char *)pInfo + le32toh(pInfo->FirmwareInfoOffset), le32toh(pInfo->FirmwareInfoSize), tmp, sizeof(tmp));
|
||||
strncpy(profile->BaseBandVersion, tmp, sizeof(profile->BaseBandVersion));
|
||||
mbim_debug("FirmwareInfo: %s", tmp);
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Check if this modem model needs FCC authentication
|
||||
if (strstr(profile->BaseBandVersion, "T99W175")) {
|
||||
profile->needs_fcc_auth = 1;
|
||||
mbim_debug("Modem model %s requires FCC authentication", profile->BaseBandVersion);
|
||||
} else {
|
||||
profile->needs_fcc_auth = 0;
|
||||
mbim_debug("Modem model %s does not require FCC authentication", profile->BaseBandVersion);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (le32toh(pInfo->HardwareInfoOffset) && le32toh(pInfo->HardwareInfoSize)) {
|
||||
wchar2char((const char *)pInfo + le32toh(pInfo->HardwareInfoOffset), le32toh(pInfo->HardwareInfoSize), tmp, sizeof(tmp));
|
||||
@ -2186,6 +2198,11 @@ static int mbim_init(PROFILE_T *profile) {
|
||||
qmidev_send = qmi_over_mbim_qmidev_send;
|
||||
#ifdef CONFIG_CELLINFO //by now, only this function need QMI OVER MBIM
|
||||
qmi_over_mbim_nas = qmi_over_mbim_get_client_id(QMUX_TYPE_NAS);
|
||||
#endif
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Get DMS client ID for FCC authentication
|
||||
qmi_over_mbim_dms = qmi_over_mbim_get_client_id(QMUX_TYPE_DMS);
|
||||
mbim_debug("Got DMS client ID: %d for FCC authentication", qmi_over_mbim_dms);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -2201,7 +2218,12 @@ static int mbim_deinit(void) {
|
||||
qmi_over_mbim_release_client_id(QMUX_TYPE_NAS, qmi_over_mbim_nas);
|
||||
qmi_over_mbim_nas = 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
if (qmi_over_mbim_dms) {
|
||||
qmi_over_mbim_release_client_id(QMUX_TYPE_DMS, qmi_over_mbim_dms);
|
||||
qmi_over_mbim_dms = 0;
|
||||
}
|
||||
#endif
|
||||
mbim_close_device();
|
||||
|
||||
if (qmi_over_mbim_sk[0] != -1) {
|
||||
@ -2380,6 +2402,29 @@ static int requestGetCellInfoList(void) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
// Use QMI over MBIM for Foxconn FCC authentication
|
||||
static int requestFoxconnSetFccAuthentication(UCHAR magic_value) {
|
||||
if (qmi_over_mbim_support && qmi_request_ops.requestFoxconnSetFccAuthentication) {
|
||||
mbim_debug("%s(magic_value=0x%02x) via QMI over MBIM", __func__, magic_value);
|
||||
return qmi_request_ops.requestFoxconnSetFccAuthentication(magic_value);
|
||||
}
|
||||
|
||||
mbim_debug("%s: QMI over MBIM not available for FCC auth", __func__);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static int requestFoxconnSetFccAuthenticationV2(const char *magic_string, UCHAR magic_number) {
|
||||
if (qmi_over_mbim_support && qmi_request_ops.requestFoxconnSetFccAuthenticationV2) {
|
||||
mbim_debug("%s(magic_string='%s', magic_number=0x%02x) via QMI over MBIM", __func__, magic_string, magic_number);
|
||||
return qmi_request_ops.requestFoxconnSetFccAuthenticationV2(magic_string, magic_number);
|
||||
}
|
||||
|
||||
mbim_debug("%s: QMI over MBIM not available for FCC auth", __func__);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
#endif
|
||||
|
||||
const struct request_ops mbim_request_ops = {
|
||||
.requestBaseBandVersion = requestBaseBandVersion,
|
||||
.requestGetSIMStatus = requestGetSIMStatus,
|
||||
@ -2391,6 +2436,10 @@ const struct request_ops mbim_request_ops = {
|
||||
#ifdef CONFIG_CELLINFO
|
||||
.requestGetCellInfoList = requestGetCellInfoList,
|
||||
#endif
|
||||
#ifdef CONFIG_FOXCONN_FCC_AUTH
|
||||
.requestFoxconnSetFccAuthentication = requestFoxconnSetFccAuthentication,
|
||||
.requestFoxconnSetFccAuthenticationV2 = requestFoxconnSetFccAuthenticationV2,
|
||||
#endif
|
||||
};
|
||||
|
||||
int qmi_over_mbim_qmidev_send(PQCQMIMSG pQMI) {
|
||||
@ -2402,6 +2451,9 @@ int qmi_over_mbim_qmidev_send(PQCQMIMSG pQMI) {
|
||||
if (pQMI->QMIHdr.QMIType != QMUX_TYPE_CTL) {
|
||||
if (pQMI->QMIHdr.QMIType == QMUX_TYPE_NAS)
|
||||
pQMI->QMIHdr.ClientId = qmi_over_mbim_nas;
|
||||
else if (pQMI->QMIHdr.QMIType == QMUX_TYPE_DMS)
|
||||
pQMI->QMIHdr.ClientId = qmi_over_mbim_dms;
|
||||
|
||||
|
||||
if (pQMI->QMIHdr.ClientId == 0) {
|
||||
dbg_time("QMIType %d has no clientID", pQMI->QMIHdr.QMIType);
|
||||
|
@ -28,15 +28,13 @@ define Build/Prepare
|
||||
$(CP) src/* $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
|
||||
|
||||
define Build/Compile
|
||||
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
$(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS)"
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tom_modem $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
|
@ -1,14 +1,25 @@
|
||||
# huawei
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
s10 | hisilicon |✔ usb(rndis) | ✘
|
||||
mt5700m-cn | hisilicon |✔ usb(ecm,ncm) | ✘
|
||||
mh5000-31 | hisilicon |✔ usb(ecm) | ✘
|
||||
|
||||
# quectel
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
em05 | lte |✔ usb(qmi,ecm,mbim,rndis,ncm) | ✘
|
||||
em120k | lte12 |✔ usb(qmi,ecm,mbim,rndis,ncm) | ✘
|
||||
em05 | lte |✔ usb(qmi,ecm,mbim,rndis) | ✘
|
||||
ep06 | lte |✔ usb(qmi,ecm,mbim,rndis) | ✘
|
||||
em12 | lte |✔ usb(qmi,ecm,mbim,rndis) | ✘
|
||||
em120k | lte12 |✔ usb(qmi,ecm,mbim,rndis) | ✘
|
||||
em160r-gl | lte12 |✔ usb(qmi,ecm,mbim,rndis) | ✘
|
||||
rg200u-cn | unisoc |✔ usb(ecm,mbim,rndis,ncm) | ✘
|
||||
rg801 | hisilicon |✔ usb(ecm,rndis,ncm) | ✘
|
||||
rm500u-cn | unisoc |✔ usb(ecm,mbim,rndis,ncm) | ✘
|
||||
rm500u-ea | unisoc |✔ usb(ecm,mbim,rndis,ncm) | ✘
|
||||
rm500s-ce | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm500q-cn | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm510q-gl | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
rm510q-gl | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm510q-glha | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
rg500q-ea | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm500q-ae | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
@ -19,10 +30,12 @@ rm505q-ae | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
rm520n-cn | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
rm520n-eu | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm520n-gl | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rm551e-gl | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rg501q-eu | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rg520n-eu | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
mh8001-eu | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rg520f-eb | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rg520f-jo | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
rg530f-na | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,gobinet,mbim)
|
||||
ec20f | lte |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
ec25 | lte |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
@ -36,10 +49,11 @@ fm650-cn | unisoc |✔ usb(ecm,mbim,rndis,ncm) | ✘
|
||||
fm350-gl | mediatek |✔ usb(rndis) | ✔ pcie(mbim)
|
||||
fm350-gl-00 | mediatek |✔ usb(rndis) | ✘
|
||||
fm350r-gl | mediatek |✔ usb(rndis) | ✔ pcie(mbim)
|
||||
rw350r-gl | mediatek |✔ usb(rndis) | ✘
|
||||
rw350r-gl | mediatek |✔ usb(rndis) | ✔ pcie(mbim)
|
||||
fm150-ae | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi,mbim)
|
||||
fm160-cn | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
fm160-na | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✘
|
||||
fm190w-gl | qualcomm |✔ usb(qmi,gobinet,ecm,mbim,rndis,ncm) | ✔ pcie(qmi)
|
||||
nl668 | lte |✔ usb(ecm,rndis,ncm) | ✘
|
||||
nl678 | lte |✔ usb(qmi,ecm,rndis,ncm) | ✘
|
||||
|
||||
@ -49,12 +63,18 @@ Model | Platform | USB | PCIe
|
||||
srm815 | qualcomm |✔ usb(ecm,rndis,ncm) | ✘
|
||||
srm825 | qualcomm |✔ usb(ecm,rndis,ncm) | ✘
|
||||
srm825n | qualcomm |✔ usb(ecm,rndis,ncm) | ✘
|
||||
srm821 | unisoc |✔ usb(ecm,rndis,ncm) | ✘
|
||||
|
||||
# sierra
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
em9190 | qualcomm |✔ usb(mbim,rmnet) | ✔ pcie(mbim,rmnet)
|
||||
|
||||
# telit
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
fn990a40 | qualcomm |✔ usb(mbim,rndis,qmi,ecm) | ✔ pcie(mbim,qmi)
|
||||
|
||||
# simcom
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
@ -67,3 +87,9 @@ Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
t99w175 | qualcomm |✔ usb(mbim,rmnet) | ✔ pcie(mbim)
|
||||
t99w373 | qualcomm |✔ usb(mbim,rmnet) | ✔ pcie(mbim)
|
||||
t99w640 | qualcomm |✘ | ✔ pcie(mbim)
|
||||
|
||||
# neoway
|
||||
Model | Platform | USB | PCIe
|
||||
--- | --- | --- | ---
|
||||
n510m | unisoc |✔ usb(ecm) | ✘
|
||||
|
@ -1070,6 +1070,7 @@ static struct pci_device_id mhi_pcie_device_id[] = {
|
||||
{PCI_DEVICE(MHI_PCIE_VENDOR_ID, 0x0308)}, //SDX62
|
||||
{PCI_DEVICE(MHI_PCIE_VENDOR_ID, 0x011a)}, //SDX35
|
||||
{PCI_DEVICE(MHI_PCIE_VENDOR_ID, 0x0309)}, //SDX7X
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f5)}, //FOXCONN SDX6X
|
||||
{PCI_DEVICE(0x1eac, 0x1001)}, //EM120
|
||||
{PCI_DEVICE(0x1eac, 0x1002)}, //EM160
|
||||
{PCI_DEVICE(0x1eac, 0x1004)}, //RM520
|
||||
|
@ -12,6 +12,7 @@
|
||||
#define MHI_SMMU_FORCE_COHERENT BIT(4)
|
||||
|
||||
#define MHI_PCIE_VENDOR_ID (0x17cb)
|
||||
#define PCI_VENDOR_ID_FOXCONN (0x105b)
|
||||
#define MHI_PCIE_DEBUG_ID (0xffff)
|
||||
|
||||
/* runtime suspend timer */
|
||||
|
@ -712,13 +712,20 @@ static struct sk_buff * add_mbim_hdr(struct sk_buff *skb, u8 mux_id) {
|
||||
static struct sk_buff * add_qhdr(struct sk_buff *skb, u8 mux_id) {
|
||||
struct qmap_hdr *qhdr;
|
||||
int pad = 0;
|
||||
struct sk_buff *new_skb = NULL;
|
||||
|
||||
pad = skb->len%4;
|
||||
if (pad) {
|
||||
pad = 4 - pad;
|
||||
if (skb_tailroom(skb) < pad) {
|
||||
printk("skb_tailroom small!\n");
|
||||
pad = 0;
|
||||
new_skb = skb_copy_expand(skb, skb_headroom(skb) + sizeof(struct qmap_hdr),
|
||||
pad, GFP_ATOMIC);
|
||||
if (!new_skb) {
|
||||
printk("Failed to expand skb for padding\n");
|
||||
return NULL;
|
||||
}
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = new_skb;
|
||||
}
|
||||
if (pad)
|
||||
__skb_put(skb, pad);
|
||||
@ -736,14 +743,23 @@ static struct sk_buff * add_qhdr_v5(struct sk_buff *skb, u8 mux_id) {
|
||||
struct rmnet_map_header *map_header;
|
||||
struct rmnet_map_v5_csum_header *ul_header;
|
||||
u32 padding, map_datalen;
|
||||
struct sk_buff *new_skb = NULL;
|
||||
|
||||
map_datalen = skb->len;
|
||||
padding = map_datalen%4;
|
||||
if (padding) {
|
||||
padding = 4 - padding;
|
||||
if (skb_tailroom(skb) < padding) {
|
||||
printk("skb_tailroom small!\n");
|
||||
padding = 0;
|
||||
new_skb = skb_copy_expand(skb, skb_headroom(skb) +
|
||||
sizeof(struct rmnet_map_header) +
|
||||
sizeof(struct rmnet_map_v5_csum_header),
|
||||
padding, GFP_ATOMIC);
|
||||
if (!new_skb) {
|
||||
printk("Failed to expand skb for padding\n");
|
||||
return NULL;
|
||||
}
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = new_skb;
|
||||
}
|
||||
if (padding)
|
||||
__skb_put(skb, padding);
|
||||
@ -1708,7 +1724,7 @@ static struct net_device * rmnet_vnd_register_device(struct mhi_netdev *pQmapDev
|
||||
|
||||
out_free_newdev:
|
||||
free_netdev(qmap_net);
|
||||
return qmap_net;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void rmnet_vnd_unregister_device(struct net_device *qmap_net) {
|
||||
@ -3286,6 +3302,7 @@ static int mhi_netdev_probe(struct mhi_device *mhi_dev,
|
||||
|| (mhi_dev->vendor == 0x17cb && mhi_dev->dev_id == 0x011a)
|
||||
|| (mhi_dev->vendor == 0x1eac && mhi_dev->dev_id == 0x100b)
|
||||
|| (mhi_dev->vendor == 0x17cb && mhi_dev->dev_id == 0x0309)
|
||||
|| (mhi_dev->vendor == 0x105b && mhi_dev->dev_id == 0xe0f5)
|
||||
) {
|
||||
mhi_netdev->qmap_version = 9;
|
||||
}
|
||||
|
@ -6,13 +6,13 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=luci-app-qmodem
|
||||
LUCI_TITLE:=LuCI support for QWRT Modem
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=2.7.0
|
||||
PKG_VERSION:=2.8.1
|
||||
PKG_LICENSE:=GPLv3
|
||||
PKG_LINCESE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Tom <fjrcn@outlook.com>
|
||||
LUCI_DEPENDS:=+luci-compat \
|
||||
+kmod-usb2 +kmod-usb3 \
|
||||
+kmod-usb-serial +kmod-usb-serial-option +kmod-usb-serial-qualcomm \
|
||||
+kmod-usb-serial +kmod-usb-serial-option +kmod-usb-serial-qualcomm \
|
||||
+kmod-usb-net +kmod-usb-acm \
|
||||
+kmod-usb-wdm \
|
||||
+kmod-usb-net-cdc-ether \
|
||||
@ -26,14 +26,16 @@ LUCI_DEPENDS:=+luci-compat \
|
||||
+usbutils \
|
||||
+PACKAGE_luci-app-qmodem_INCLUDE_ADD_PCI_SUPPORT:kmod-pcie_mhi \
|
||||
+PACKAGE_luci-app-qmodem_INCLUDE_ADD_PCI_SUPPORT:pciutils \
|
||||
+PACKAGE_luci-app-qmodem_INCLUDE_ADD_MTK_T7XX_SUPPORT:umbim \
|
||||
+PACKAGE_luci-app-qmodem_INCLUDE_ADD_MTK_T7XX_SUPPORT:kmod-mtk-t7xx \
|
||||
+PACKAGE_luci-app-qmodem_INCLUDE_ADD_QFIREHOSE_SUPPORT:qfirehose \
|
||||
+PACKAGE_luci-app-qmodem_USE_TOM_CUSTOMIZED_QUECTEL_CM:quectel-CM-5G-M \
|
||||
+PACKAGE_luci-app-qmodem_USING_QWRT_QUECTEL_CM_5G:quectel-CM-5G \
|
||||
+PACKAGE_luci-app-qmodem_USING_NORMAL_QUECTEL_CM:quectel-cm \
|
||||
+tom_modem \
|
||||
+tom_modem +terminfo \
|
||||
+jq +bc\
|
||||
+coreutils +coreutils-stat
|
||||
|
||||
+coreutils +coreutils-stat \
|
||||
+ndisc6
|
||||
|
||||
define Package/luci-app-qmodem/conffiles
|
||||
/etc/config/qmodem
|
||||
@ -69,6 +71,10 @@ endchoice
|
||||
bool "Add PCIe Modem SUPPORT"
|
||||
default n
|
||||
|
||||
config PACKAGE_luci-app-qmodem_INCLUDE_ADD_MTK_T7XX_SUPPORT
|
||||
bool "Add MTK-T7XX Modem PCI SUPPORT"
|
||||
default n
|
||||
|
||||
config PACKAGE_luci-app-qmodem_INCLUDE_ADD_QFIREHOSE_SUPPORT
|
||||
bool "Add Qfirehose SUPPORT"
|
||||
default n
|
||||
|
@ -73,6 +73,16 @@ extend_prefix = s:taboption("advanced", Flag, "extend_prefix", translate("Extend
|
||||
extend_prefix.description = translate("Once checking, the prefix will be apply to lan zone")
|
||||
extend_prefix.default = "0"
|
||||
|
||||
-- 软重启
|
||||
soft_reboot = s:taboption("advanced", Flag, "soft_reboot", translate("Soft Reboot"))
|
||||
soft_reboot.description = translate("enable modem soft reboot")
|
||||
soft_reboot.default = "0"
|
||||
|
||||
-- Connect Check
|
||||
connect_check = s:taboption("advanced", Flag, "connect_check", translate("V4/V6 Connect Check"))
|
||||
connect_check.description = translate("Only for AT dial modem.")
|
||||
connect_check.default = "0"
|
||||
|
||||
-- 网络类型
|
||||
pdp_type= s:taboption("advanced", ListValue, "pdp_type", translate("PDP Type"))
|
||||
pdp_type.default = "ipv4v6"
|
||||
@ -87,11 +97,25 @@ apn = s:taboption("advanced", Value, "apn", translate("APN"))
|
||||
apn.default = ""
|
||||
apn.rmempty = true
|
||||
apn:value("", translate("Auto Choose"))
|
||||
apn:value("cmnet", translate("China Mobile"))
|
||||
apn:value("3gnet", translate("China Unicom"))
|
||||
apn:value("ctnet", translate("China Telecom"))
|
||||
apn:value("cbnet", translate("China Broadcast"))
|
||||
apn:value("5gscuiot", translate("Skytone"))
|
||||
apn:value("cmnet", translate("China Mobile (CN)"))
|
||||
apn:value("3gnet", translate("China Unicom (CN)"))
|
||||
apn:value("ctnet", translate("China Telecom (CN)"))
|
||||
apn:value("cbnet", translate("China Broadcast (CN)"))
|
||||
apn:value("5gscuiot", translate("Skytone (CN)"))
|
||||
|
||||
-- Switzerland (CH)
|
||||
apn:value("gprs.swisscom.ch", translate("Swisscom (CH)"))
|
||||
apn:value("internet", "Salt (CH), Sunrise (CH), O2 (DE), 1&1 (DE)")
|
||||
|
||||
-- Germany (DE)
|
||||
apn:value("web.vodafone.de", translate("Vodafone (DE)"))
|
||||
apn:value("internet.telekom", translate("Telekom (DE)"))
|
||||
apn:value("internet.eplus.de", translate("E-Plus (DE)"))
|
||||
|
||||
-- Austria (AT)
|
||||
apn:value("A1.net", translate("A1 (AT)"))
|
||||
apn:value("drei.at", translate("Drei (AT)"))
|
||||
apn:value("internet.t-mobile.at", translate("Magenta (AT)"))
|
||||
|
||||
auth = s:taboption("advanced", ListValue, "auth", translate("Authentication Type"))
|
||||
auth.default = "none"
|
||||
@ -119,39 +143,30 @@ pincode.description = translate("If the PIN code is not set, leave it blank.")
|
||||
|
||||
--卡2
|
||||
apn = s:taboption("advanced", Value, "apn2", translate("APN").." 2")
|
||||
apn.description = translate("If solt 2 config is not set,will use slot 1 config.")
|
||||
apn.description = translate("If slot 2 config is not set,will use slot 1 config.")
|
||||
apn.default = ""
|
||||
apn.rmempty = true
|
||||
apn:value("", translate("Auto Choose"))
|
||||
apn:value("cmnet", translate("China Mobile"))
|
||||
apn:value("3gnet", translate("China Unicom"))
|
||||
apn:value("ctnet", translate("China Telecom"))
|
||||
apn:value("cbnet", translate("China Broadcast"))
|
||||
apn:value("5gscuiot", translate("Skytone"))
|
||||
apn:value("cmnet", translate("China Mobile (CN)"))
|
||||
apn:value("3gnet", translate("China Unicom (CN)"))
|
||||
apn:value("ctnet", translate("China Telecom (CN)"))
|
||||
apn:value("cbnet", translate("China Broadcast (CN)"))
|
||||
apn:value("5gscuiot", translate("Skytone (CN)"))
|
||||
|
||||
auth = s:taboption("advanced", ListValue, "auth2", translate("Authentication Type").. " 2")
|
||||
auth.default = "none"
|
||||
auth.rmempty = false
|
||||
auth:value("none", translate("NONE"))
|
||||
auth:value("both", translate("PAP/CHAP (both)"))
|
||||
auth:value("pap", "PAP")
|
||||
auth:value("chap", "CHAP")
|
||||
-- Switzerland (CH)
|
||||
apn:value("gprs.swisscom.ch", translate("Swisscom (CH)"))
|
||||
apn:value("internet", "Salt (CH), Sunrise (CH), O2 (DE), 1&1 (DE)")
|
||||
|
||||
username = s:taboption("advanced", Value, "username2", translate("PAP/CHAP Username").. " 2")
|
||||
username.rmempty = true
|
||||
username:depends("auth2", "both")
|
||||
username:depends("auth2", "pap")
|
||||
username:depends("auth2", "chap")
|
||||
-- Germany (DE)
|
||||
apn:value("web.vodafone.de", translate("Vodafone (DE)"))
|
||||
apn:value("internet.telekom", translate("Telekom (DE)"))
|
||||
apn:value("internet.eplus.de", translate("E-Plus (DE)"))
|
||||
|
||||
password = s:taboption("advanced", Value, "password2", translate("PAP/CHAP Password").. " 2")
|
||||
password.rmempty = true
|
||||
password.password = true
|
||||
password:depends("auth2", "both")
|
||||
password:depends("auth2", "pap")
|
||||
password:depends("auth2", "chap")
|
||||
-- Austria (AT)
|
||||
apn:value("A1.net", translate("A1 (AT)"))
|
||||
apn:value("drei.at", translate("Drei (AT)"))
|
||||
apn:value("internet.t-mobile.at", translate("Magenta (AT)"))
|
||||
|
||||
pincode = s:taboption("advanced", Value, "pincode2", translate("PIN Code").. " 2")
|
||||
pincode.description = translate("If the PIN code is not set, leave it blank.")
|
||||
|
||||
metric = s:taboption("advanced", Value, "metric", translate("Metric"))
|
||||
metric.description = translate("The metric value is used to determine the priority of the route. The smaller the value, the higher the priority. Cannot duplicate.")
|
||||
|
@ -4,7 +4,10 @@ return {
|
||||
simcom = "Simcom",
|
||||
sierra = "Sierra Wireless",
|
||||
fibocom = "Fibocom",
|
||||
meig = "Meig"
|
||||
meig = "Meig",
|
||||
huawei = "Huawei",
|
||||
neoway = "Neoway",
|
||||
telit = "Telit"
|
||||
},
|
||||
platforms = {
|
||||
lte = "LTE",
|
||||
|
@ -69,6 +69,15 @@ name.cfgvalue = function(t, n)
|
||||
return Value.cfgvalue(t, n) or "-"
|
||||
end
|
||||
|
||||
-- Soft Reboot
|
||||
soft_reboot = s:option(Flag, "soft_reboot", translate("Soft Reboot"))
|
||||
soft_reboot.default = "0"
|
||||
|
||||
-- Connect Check
|
||||
connect_check = s:option(Flag, "connect_check", translate("V4/V6 Connect Check"))
|
||||
connect_check.description = translate("Only for AT dial modem.")
|
||||
connect_check.default = "0"
|
||||
|
||||
-- PDP Context Index
|
||||
define_connect = s:option(Value, "define_connect", translate("PDP Context Index"))
|
||||
define_connect.default = "1"
|
||||
|
@ -751,28 +751,33 @@
|
||||
this.init_nc_table();
|
||||
}
|
||||
|
||||
pause(){
|
||||
if (this.task != null) {
|
||||
clearInterval(this.task);
|
||||
}
|
||||
scan_neighborcell(){
|
||||
this.get_config();
|
||||
}
|
||||
|
||||
update(){
|
||||
this.task = setInterval(() => {
|
||||
this.get_config();
|
||||
},10000);
|
||||
}
|
||||
// pause(){
|
||||
// if (this.task != null) {
|
||||
// clearInterval(this.task);
|
||||
// }
|
||||
// }
|
||||
|
||||
// update(){
|
||||
|
||||
// this.task = setInterval(() => {
|
||||
// this.get_config();
|
||||
// },10000);
|
||||
// }
|
||||
|
||||
nr_options(){
|
||||
if (this.rat_input.selectedIndex == 0) {
|
||||
this.band_tr.style.display = "none";
|
||||
this.scs_tr.style.display = "none";
|
||||
}
|
||||
else{
|
||||
this.band_tr.style.display = "";
|
||||
this.scs_tr.style.display = "";
|
||||
}
|
||||
if (this.rat_input.selectedIndex == 0) {
|
||||
this.band_tr.style.display = "none";
|
||||
this.scs_tr.style.display = "none";
|
||||
}
|
||||
else{
|
||||
this.band_tr.style.display = "";
|
||||
this.scs_tr.style.display = "";
|
||||
}
|
||||
}
|
||||
|
||||
init_nc_table(){
|
||||
var neighborcell_table,setting_table,status_table ;
|
||||
@ -835,7 +840,6 @@
|
||||
scs_tr.appendChild(td);
|
||||
scs_tr.appendChild(td1);
|
||||
|
||||
|
||||
status_th = this.createTH("<%:Status%>");
|
||||
status_trh = this.createTRHeader();
|
||||
status_trh.appendChild(status_th);
|
||||
@ -865,12 +869,18 @@
|
||||
this.set_config(JSON.stringify(config));
|
||||
});
|
||||
|
||||
//add scan button
|
||||
var scan_btn = this.createBTN("<%:Scan%>",() => {
|
||||
this.scan_neighborcell();
|
||||
});
|
||||
|
||||
this.setting_table.appendChild(header);
|
||||
this.setting_table.appendChild(rat_tr);
|
||||
this.setting_table.appendChild(pci_tr);
|
||||
this.setting_table.appendChild(arfcn_tr);
|
||||
this.setting_table.appendChild(band_tr);
|
||||
this.setting_table.appendChild(scs_tr);
|
||||
this.setting_table.appendChild(scan_btn);
|
||||
this.setting_table.appendChild(submit_btn);
|
||||
}
|
||||
|
||||
@ -884,7 +894,7 @@
|
||||
nr = this.config.NR;
|
||||
lte = this.config.LTE;
|
||||
for (let cell_info of nr) {
|
||||
this.create_nc_tr(1,cell_info);
|
||||
this.create_nc_tr(1,cell_info);
|
||||
}
|
||||
for (let cell_info of lte) {
|
||||
this.create_nc_tr(0,cell_info);
|
||||
@ -925,17 +935,18 @@
|
||||
}
|
||||
}
|
||||
let tr_left = this.createTD(text);
|
||||
let tr_right = this.create_copy_btn_td(rat,cell_info.pci,cell_info.arfcn);
|
||||
let tr_right = this.create_copy_btn_td(rat,cell_info);
|
||||
let tr = this.createTR();
|
||||
tr.appendChild(tr_left);
|
||||
tr.appendChild(tr_right);
|
||||
this.neighborcell_table.appendChild(tr);
|
||||
}
|
||||
|
||||
create_copy_btn_td(rat,pci,arfcn){
|
||||
create_copy_btn_td(rat,cell_info){
|
||||
var copy_btn = this.createBTN("<%:Copy%>",() => {
|
||||
this.pci_input.value = pci;
|
||||
this.arfcn_input.value = arfcn;
|
||||
this.pci_input.value = cell_info.pci;
|
||||
this.arfcn_input.value = cell_info.arfcn;
|
||||
this.band_input.value = cell_info.band;
|
||||
this.rat_input.selectedIndex = rat;
|
||||
this.nr_options()
|
||||
});
|
||||
|
@ -54,20 +54,54 @@ msgstr "Тип PDP"
|
||||
msgid "Auto Choose"
|
||||
msgstr "Авто выбор"
|
||||
|
||||
msgid "China Mobile"
|
||||
msgstr "Китайский мобильный"
|
||||
msgid "China Mobile (CN)"
|
||||
msgstr "Китайский мобильный (CN)"
|
||||
|
||||
msgid "China Unicom"
|
||||
msgstr "Китайский Юником"
|
||||
msgid "China Unicom (CN)"
|
||||
msgstr "Китайский Юником (CN)"
|
||||
|
||||
msgid "China Telecom"
|
||||
msgstr "Китайский Телеком"
|
||||
msgid "China Telecom (CN)"
|
||||
msgstr "Китайский Телеком (CN)"
|
||||
|
||||
msgid "China Broadcast"
|
||||
msgstr "Китайское вещание"
|
||||
msgid "China Broadcast (CN)"
|
||||
msgstr "Китайское вещание (CN)"
|
||||
|
||||
msgid "Skytone"
|
||||
msgstr "Скайтон"
|
||||
msgid "Skytone (CN)"
|
||||
msgstr "Скайтон (CN)"
|
||||
|
||||
msgid "Swisscom (CH)"
|
||||
msgstr "Swisscom (CH)"
|
||||
|
||||
msgid "Sunrise (CH)"
|
||||
msgstr "Sunrise (CH)"
|
||||
|
||||
msgid "Salt (CH)"
|
||||
msgstr "Salt (CH)"
|
||||
|
||||
msgid "Vodafone (DE)"
|
||||
msgstr "Vodafone (DE)"
|
||||
|
||||
msgid "Telekom (DE)"
|
||||
msgstr "Telekom (DE)"
|
||||
|
||||
|
||||
msgid "O2 (DE)"
|
||||
msgstr "O2 (DE)"
|
||||
|
||||
msgid "E-Plus (DE)"
|
||||
msgstr "E-Plus (DE)"
|
||||
|
||||
msgid "1&1 (DE)"
|
||||
msgstr "1&1 (DE)"
|
||||
|
||||
msgid "A1 (AT)"
|
||||
msgstr "A1 (AT)"
|
||||
|
||||
msgid "Drei (AT)"
|
||||
msgstr "Drei (AT)"
|
||||
|
||||
msgid "Magenta (AT)"
|
||||
msgstr "Magenta (AT)"
|
||||
|
||||
msgid "Authentication Type"
|
||||
msgstr "Тип аутентификации"
|
||||
|
@ -48,25 +48,65 @@ msgstr ""
|
||||
msgid "Once checking, the prefix will be apply to lan zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "enable modem soft reboot"
|
||||
msgstr ""
|
||||
|
||||
msgid "PDP Type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Choose"
|
||||
msgstr ""
|
||||
|
||||
msgid "China Mobile"
|
||||
msgid "China Mobile (CN)"
|
||||
msgstr ""
|
||||
|
||||
msgid "China Unicom"
|
||||
msgid "China Unicom (CN)"
|
||||
msgstr ""
|
||||
|
||||
msgid "China Telecom"
|
||||
msgid "China Telecom (CN)"
|
||||
msgstr ""
|
||||
|
||||
msgid "China Broadcast"
|
||||
msgid "China Broadcast (CN)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Skytone"
|
||||
msgid "Skytone (CN)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sunrise (CH)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Swisscom (CH)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Salt (CH)"
|
||||
msgstr "Salt (CH)"
|
||||
|
||||
|
||||
msgid "Vodafone (DE)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Telekom (DE)"
|
||||
msgstr ""
|
||||
|
||||
msgid "O2 (DE)"
|
||||
msgstr ""
|
||||
|
||||
msgid "E-Plus (DE)"
|
||||
msgstr ""
|
||||
|
||||
msgid "1&1 (DE)"
|
||||
msgstr ""
|
||||
|
||||
msgid "A1 (AT)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drei (AT)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Magenta (AT)"
|
||||
msgstr ""
|
||||
|
||||
msgid "T-Mobile (AT)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authentication Type"
|
||||
@ -588,9 +628,6 @@ msgstr "制造商"
|
||||
msgid "Quectel"
|
||||
msgstr "移远"
|
||||
|
||||
msgid "Simcom"
|
||||
msgstr "芯讯通(Simcom)"
|
||||
|
||||
msgid "Sierra Wireless"
|
||||
msgstr "Sierra无线"
|
||||
|
||||
@ -600,6 +637,12 @@ msgstr "广和通"
|
||||
msgid "Meig"
|
||||
msgstr "美格"
|
||||
|
||||
msgid "Neoway"
|
||||
msgstr "有方"
|
||||
|
||||
msgid "Telit"
|
||||
msgstr "泰利特"
|
||||
|
||||
msgid "Platform"
|
||||
msgstr "平台"
|
||||
|
||||
|
@ -64,26 +64,63 @@ msgstr "扩展前缀"
|
||||
msgid "Once checking, the prefix will be apply to lan zone"
|
||||
msgstr "启用后,该接口的前缀会被通告至Lan区域"
|
||||
|
||||
msgid "enable modem soft reboot"
|
||||
msgstr "启用模组软重启"
|
||||
|
||||
msgid "PDP Type"
|
||||
msgstr "PDP类型"
|
||||
|
||||
msgid "Auto Choose"
|
||||
msgstr "自动选择"
|
||||
|
||||
msgid "China Mobile"
|
||||
msgstr "中国移动"
|
||||
msgid "China Mobile (CN)"
|
||||
msgstr "中国移动 (CN)"
|
||||
|
||||
msgid "China Unicom"
|
||||
msgstr "中国联通"
|
||||
msgid "China Unicom (CN)"
|
||||
msgstr "中国联通 (CN)"
|
||||
|
||||
msgid "China Telecom"
|
||||
msgstr "中国电信"
|
||||
msgid "China Telecom (CN)"
|
||||
msgstr "中国电信 (CN)"
|
||||
|
||||
msgid "China Broadcast"
|
||||
msgstr "中国广电"
|
||||
msgid "China Broadcast (CN)"
|
||||
msgstr "中国广电 (CN)"
|
||||
|
||||
msgid "Skytone"
|
||||
msgstr "天际通"
|
||||
msgid "Skytone (CN)"
|
||||
msgstr "天际通 (CN)"
|
||||
|
||||
msgid "Sunrise (CH)"
|
||||
msgstr "Sunrise (CH)"
|
||||
|
||||
msgid "Swisscom(CH)"
|
||||
msgstr "Swisscom (CH)"
|
||||
|
||||
msgid "Salt (CH)"
|
||||
msgstr "Salt (CH)"
|
||||
|
||||
|
||||
msgid "Vodafone (DE)"
|
||||
msgstr "Vodafone (DE)"
|
||||
|
||||
msgid "Telekom (DE)"
|
||||
msgstr "Telekom (DE)"
|
||||
|
||||
msgid "O2 (DE)"
|
||||
msgstr "O2 (DE)"
|
||||
|
||||
msgid "E-Plus (DE)"
|
||||
msgstr "E-Plus (DE)"
|
||||
|
||||
msgid "1&1 (DE)"
|
||||
msgstr "1&1 (DE)"
|
||||
|
||||
msgid "A1 (AT)"
|
||||
msgstr "A1 (AT)"
|
||||
|
||||
msgid "Drei (AT)"
|
||||
msgstr "Drei (AT)"
|
||||
|
||||
msgid "Magenta (AT)"
|
||||
msgstr "Magenta (AT)"
|
||||
|
||||
msgid "Authentication Type"
|
||||
msgstr "认证类型"
|
||||
@ -622,6 +659,12 @@ msgstr "广和通"
|
||||
msgid "Meig"
|
||||
msgstr "美格"
|
||||
|
||||
msgid "Neoway"
|
||||
msgstr "有方"
|
||||
|
||||
msgid "Telit"
|
||||
msgstr "泰利特"
|
||||
|
||||
msgid "Platform"
|
||||
msgstr "平台"
|
||||
|
||||
@ -809,5 +852,11 @@ msgstr "拨号前执行的AT命令。"
|
||||
msgid "(still in beta)"
|
||||
msgstr "(仍在测试中)"
|
||||
|
||||
msgid “(beta)"
|
||||
msgid "(beta)"
|
||||
msgstr "(测试)"
|
||||
|
||||
msgid "V4/V6 Connect Check"
|
||||
msgstr "V4/V6 存活检测"
|
||||
|
||||
msgid "Only for AT dial modem."
|
||||
msgstr "只适用于AT拨号模组。"
|
@ -64,26 +64,62 @@ msgstr "扩展前缀"
|
||||
msgid "Once checking, the prefix will be apply to lan zone"
|
||||
msgstr "启用后,该接口的前缀会被通告至Lan区域"
|
||||
|
||||
msgid "enable modem soft reboot"
|
||||
msgstr "启用模组软重启"
|
||||
|
||||
msgid "PDP Type"
|
||||
msgstr "PDP类型"
|
||||
|
||||
msgid "Auto Choose"
|
||||
msgstr "自动选择"
|
||||
|
||||
msgid "China Mobile"
|
||||
msgstr "中国移动"
|
||||
msgid "China Mobile (CN)"
|
||||
msgstr "中国移动 (CN)"
|
||||
|
||||
msgid "China Unicom"
|
||||
msgstr "中国联通"
|
||||
msgid "China Unicom (CN)"
|
||||
msgstr "中国联通 (CN)"
|
||||
|
||||
msgid "China Telecom"
|
||||
msgstr "中国电信"
|
||||
msgid "China Telecom (CN)"
|
||||
msgstr "中国电信 (CN)"
|
||||
|
||||
msgid "China Broadcast"
|
||||
msgstr "中国广电"
|
||||
msgid "China Broadcast (CN)"
|
||||
msgstr "中国广电 (CN)"
|
||||
|
||||
msgid "Skytone"
|
||||
msgstr "天际通"
|
||||
msgid "Skytone (CN)"
|
||||
msgstr "天际通 (CN)"
|
||||
|
||||
msgid "Sunrise (CH)"
|
||||
msgstr "Sunrise (CH)"
|
||||
|
||||
msgid "Swisscom(CH)"
|
||||
msgstr "Swisscom (CH)"
|
||||
|
||||
msgid "Salt (CH)"
|
||||
msgstr "Salt (CH)"
|
||||
|
||||
msgid "Vodafone (DE)"
|
||||
msgstr "Vodafone (DE)"
|
||||
|
||||
msgid "Telekom (DE)"
|
||||
msgstr "Telekom (DE)"
|
||||
|
||||
msgid "O2 (DE)"
|
||||
msgstr "O2 (DE)"
|
||||
|
||||
msgid "E-Plus (DE)"
|
||||
msgstr "E-Plus (DE)"
|
||||
|
||||
msgid "1&1 (DE)"
|
||||
msgstr "1&1 (DE)"
|
||||
|
||||
msgid "A1 (AT)"
|
||||
msgstr "A1 (AT)"
|
||||
|
||||
msgid "Drei (AT)"
|
||||
msgstr "Drei (AT)"
|
||||
|
||||
msgid "Magenta (AT)"
|
||||
msgstr "Magenta (AT)"
|
||||
|
||||
msgid "Authentication Type"
|
||||
msgstr "认证类型"
|
||||
@ -610,9 +646,6 @@ msgstr "制造商"
|
||||
msgid "Quectel"
|
||||
msgstr "移远"
|
||||
|
||||
msgid "Simcom"
|
||||
msgstr "芯讯通(Simcom)"
|
||||
|
||||
msgid "Sierra Wireless"
|
||||
msgstr "Sierra无线"
|
||||
|
||||
@ -622,6 +655,12 @@ msgstr "广和通"
|
||||
msgid "Meig"
|
||||
msgstr "美格"
|
||||
|
||||
msgid "Neoway"
|
||||
msgstr "有方"
|
||||
|
||||
msgid "Telit"
|
||||
msgstr "泰利特"
|
||||
|
||||
msgid "Platform"
|
||||
msgstr "平台"
|
||||
|
||||
@ -809,5 +848,11 @@ msgstr "拨号前执行的AT命令。"
|
||||
msgid "(still in beta)"
|
||||
msgstr "(仍在测试中)"
|
||||
|
||||
msgid “(beta)"
|
||||
msgid "(beta)"
|
||||
msgstr "(测试)"
|
||||
|
||||
msgid "V4/V6 Connect Check"
|
||||
msgstr "V4/V6 存活检测"
|
||||
|
||||
msgid "Only for AT dial modem."
|
||||
msgstr "只适用于AT拨号模组。"
|
@ -6,7 +6,6 @@ USE_PROCD=1
|
||||
. /lib/functions.sh
|
||||
|
||||
start_service() {
|
||||
|
||||
config_load qmodem
|
||||
config_foreach _mk_rundir modem-device
|
||||
config_get block_auto_probe main block_auto_probe 0
|
||||
@ -17,6 +16,9 @@ start_service() {
|
||||
#once enabled, skip all check or scan
|
||||
[ "$block_auto_probe" -eq 1 ] && return
|
||||
|
||||
#auto add option driver for usb device
|
||||
config_foreach _usb_option_driver modem-device
|
||||
|
||||
#enabled by default
|
||||
if [ "$try_preset_pcie" -eq 1 ];then
|
||||
_try_vendor_preset_pcie
|
||||
@ -131,3 +133,22 @@ _try_device()
|
||||
/usr/share/qmodem/modem_scan.sh disable "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
_usb_option_driver()
|
||||
{
|
||||
[ "$(config_get "$1" data_interface)" = "usb" ] && [ "$(config_get "$1" option_driver)" = "1" ] || return
|
||||
|
||||
local path=$(config_get "$1" path)
|
||||
local slot_vid=$(cat "${path}/idVendor" 2>/dev/null)
|
||||
local slot_pid=$(cat "${path}/idProduct" 2>/dev/null)
|
||||
|
||||
if [ -n "$slot_vid" ] && [ -n "$slot_pid" ]; then
|
||||
if echo "$slot_vid $slot_pid" > /sys/bus/usb-serial/drivers/option1/new_id 2>/dev/null; then
|
||||
logger -t modem_init "Set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
|
||||
else
|
||||
logger -t modem_init "Failed to set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
|
||||
fi
|
||||
else
|
||||
logger -t modem_init "Unable to get VID/PID for device $1"
|
||||
fi
|
||||
}
|
50
luci/luci-app-qmodem/root/etc/init.d/qmodem_reboot
Normal file → Executable file
50
luci/luci-app-qmodem/root/etc/init.d/qmodem_reboot
Normal file → Executable file
@ -1,9 +1,7 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006 OpenWrt.org
|
||||
USE_PROCD=1
|
||||
|
||||
START=95
|
||||
STOP=0
|
||||
USE_PROCD=1
|
||||
|
||||
start_service() {
|
||||
:
|
||||
@ -12,28 +10,30 @@ start_service() {
|
||||
stop_service() {
|
||||
procd_set_param timeout 30
|
||||
config_load qmodem
|
||||
config_foreach _reboot_usb modem-device
|
||||
|
||||
config_foreach _soft_reboot modem-device
|
||||
}
|
||||
|
||||
_reboot_usb() {
|
||||
config_get data_interface $1 data_interface
|
||||
if [ "$data_interface" == "usb" ]; then
|
||||
config_get name $1 name
|
||||
if [ "$name" == "fm350-gl" ]; then
|
||||
config_get at_port $1 at_port
|
||||
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
|
||||
retries=3
|
||||
while ! echo "$response" | grep -qi "ok" && [ $retries -gt 0 ]; do
|
||||
sleep 1
|
||||
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
|
||||
retries=$((retries - 1))
|
||||
done
|
||||
max_retries=15
|
||||
while [ -e "/dev/$at_port" ] && [ $max_retries -gt 0 ]; do
|
||||
sleep 1
|
||||
max_retries=$((max_retries - 1))
|
||||
done
|
||||
fi
|
||||
fi
|
||||
_soft_reboot() {
|
||||
config_get soft_reboot $1 soft_reboot
|
||||
[ "$soft_reboot" != "1" ] && return 0
|
||||
|
||||
config_get at_port $1 at_port
|
||||
[ -z "$at_port" ] && return 0
|
||||
|
||||
for i in $(seq 1 3); do
|
||||
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
|
||||
echo "$response" | grep -qi "ok" && break
|
||||
sleep 1
|
||||
done
|
||||
|
||||
for i in $(seq 1 15); do
|
||||
[ ! -e "$at_port" ] && {
|
||||
echo "Device disconnected after $i seconds"
|
||||
return 0
|
||||
}
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Device did not disconnect within timeout period"
|
||||
return 0
|
||||
}
|
@ -1,8 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2024 Tom <fjrcn@outlook.com>
|
||||
|
||||
/etc/init.d/modeminit enable
|
||||
/etc/init.d/modem enable
|
||||
/etc/init.d/qmodem_reboot enable
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@qmodem[-1]
|
||||
|
672
luci/luci-app-qmodem/root/usr/share/qmodem/at_commands_en.json
Normal file
672
luci/luci-app-qmodem/root/usr/share/qmodem/at_commands_en.json
Normal file
@ -0,0 +1,672 @@
|
||||
{
|
||||
"general": [
|
||||
{
|
||||
"Module Information > ATI": "ATI"
|
||||
},
|
||||
{
|
||||
"Query SIM Card Status > AT+CPIN?": "AT+CPIN?"
|
||||
},
|
||||
{
|
||||
"Query Network Signal Quality (4G) > AT+CSQ": "AT+CSQ"
|
||||
},
|
||||
{
|
||||
"Query Network Signal Quality (5G) > AT+CESQ": "AT+CESQ"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT+COPS?": "AT+COPS?"
|
||||
},
|
||||
{
|
||||
"Query PDP Information > AT+CGDCONT?": "AT+CGDCONT?"
|
||||
},
|
||||
{
|
||||
"Query PDP Address > AT+CGPADDR": "AT+CGPADDR"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+CGSN": "AT+CGSN"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+GSN": "AT+GSN"
|
||||
},
|
||||
{
|
||||
"Check Current Voltage > AT+CBC": "AT+CBC"
|
||||
},
|
||||
{
|
||||
"Minimum Function Mode > AT+CFUN=0": "AT+CFUN=0"
|
||||
},
|
||||
{
|
||||
"Full Function Mode > AT+CFUN=1": "AT+CFUN=1"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+CFUN=1,1": "AT+CFUN=1,1"
|
||||
}
|
||||
],
|
||||
"quectel": {
|
||||
"qualcomm": [
|
||||
{
|
||||
"SIM Card Status Report > AT+QSIMSTAT?": "AT+QSIMSTAT?"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+QUIMSLOT=1": "AT+QUIMSLOT=1"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+QUIMSLOT=2": "AT+QUIMSLOT=2"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT+QNWINFO": "AT+QNWINFO"
|
||||
},
|
||||
{
|
||||
"Query Carrier Aggregation Parameters > AT+QCAINFO": "AT+QCAINFO"
|
||||
},
|
||||
{
|
||||
"Query 5G Signal Strength (RSRP) > AT+QRSRP": "AT+QRSRP"
|
||||
},
|
||||
{
|
||||
"Query Current Dial Mode > AT+QCFG=\"usbnet\"": "AT+QCFG=\"usbnet\""
|
||||
},
|
||||
{
|
||||
"QMI/GobiNet Dial Mode > AT+QCFG=\"usbnet\",0": "AT+QCFG=\"usbnet\",0"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+QCFG=\"usbnet\",1": "AT+QCFG=\"usbnet\",1"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+QCFG=\"usbnet\",2": "AT+QCFG=\"usbnet\",2"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+QCFG=\"usbnet\",3": "AT+QCFG=\"usbnet\",3"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+QCFG=\"usbnet\",5": "AT+QCFG=\"usbnet\",5"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+QNWPREFCFG=\"mode_pref\",LTE": "AT+QNWPREFCFG=\"mode_pref\",LTE"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+QNWPREFCFG=\"mode_pref\",NR5G": "AT+QNWPREFCFG=\"mode_pref\",NR5G"
|
||||
},
|
||||
{
|
||||
"Lock to 5G NSA > AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA"
|
||||
},
|
||||
{
|
||||
"Lock to 5G SA > AT+QNWPREFCFG=\"mode_pref\",NR5G-SA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-SA"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+QNWPREFCFG=\"mode_pref\",AUTO": "AT+QNWPREFCFG=\"mode_pref\",AUTO"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+EGMR=0,7": "AT+EGMR=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+EGMR=1,7,\"IMEI\"": "AT+EGMR=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT+QTEMP": "AT+QTEMP"
|
||||
},
|
||||
{
|
||||
"Switch to USB Communication Port > AT+QCFG=\"data_interface\",0,0": "AT+QCFG=\"data_interface\",0,0"
|
||||
},
|
||||
{
|
||||
"Switch to PCIE Communication Port > AT+QCFG=\"data_interface\",1,0": "AT+QCFG=\"data_interface\",1,0"
|
||||
},
|
||||
{
|
||||
"Check Current USB Speed > AT+QCFG=\"usbspeed\"": "AT+QCFG=\"usbspeed\""
|
||||
},
|
||||
{
|
||||
"Switch to USB2.0 > AT+QCFG=\"usbspeed\",\"20\"": "AT+QCFG=\"usbspeed\",\"20\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (5Gbps) > AT+QCFG=\"usbspeed\",\"311\"": "AT+QCFG=\"usbspeed\",\"311\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (10Gbps) > AT+QCFG=\"usbspeed\",\"312\"": "AT+QCFG=\"usbspeed\",\"312\""
|
||||
},
|
||||
{
|
||||
"Reset Module > AT+QCFG=\"ResetFactory\"": "AT+QCFG=\"ResetFactory\""
|
||||
}
|
||||
],
|
||||
"unisoc": [
|
||||
{
|
||||
"SIM Card Status Report > AT+QSIMSTAT?": "AT+QSIMSTAT?"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+QUIMSLOT=1": "AT+QUIMSLOT=1"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+QUIMSLOT=2": "AT+QUIMSLOT=2"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT+QNWINFO": "AT+QNWINFO"
|
||||
},
|
||||
{
|
||||
"Query Carrier Aggregation Parameters > AT+QCAINFO": "AT+QCAINFO"
|
||||
},
|
||||
{
|
||||
"Query Current Dial Mode > AT+QCFG=\"usbnet\"": "AT+QCFG=\"usbnet\""
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+QCFG=\"usbnet\",1": "AT+QCFG=\"usbnet\",1"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+QCFG=\"usbnet\",2": "AT+QCFG=\"usbnet\",2"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+QCFG=\"usbnet\",3": "AT+QCFG=\"usbnet\",3"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+QCFG=\"usbnet\",5": "AT+QCFG=\"usbnet\",5"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+QNWPREFCFG=\"mode_pref\",LTE": "AT+QNWPREFCFG=\"mode_pref\",LTE"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+QNWPREFCFG=\"mode_pref\",NR5G": "AT+QNWPREFCFG=\"mode_pref\",NR5G"
|
||||
},
|
||||
{
|
||||
"Lock to 5G NSA > AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA"
|
||||
},
|
||||
{
|
||||
"Lock to 5G SA > AT+QNWPREFCFG=\"mode_pref\",NR5G-SA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-SA"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+QNWPREFCFG=\"mode_pref\",AUTO": "AT+QNWPREFCFG=\"mode_pref\",AUTO"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+EGMR=0,7": "AT+EGMR=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+EGMR=1,7,\"IMEI\"": "AT+EGMR=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT+QTEMP": "AT+QTEMP"
|
||||
},
|
||||
{
|
||||
"Switch to USB Communication Port > AT+QCFG=\"data_interface\",0,0": "AT+QCFG=\"data_interface\",0,0"
|
||||
},
|
||||
{
|
||||
"Switch to PCIE Communication Port > AT+QCFG=\"data_interface\",1,0": "AT+QCFG=\"data_interface\",1,0"
|
||||
},
|
||||
{
|
||||
"Check Current USB Speed > AT+QCFG=\"usbspeed\"": "AT+QCFG=\"usbspeed\""
|
||||
},
|
||||
{
|
||||
"Switch to USB2.0 > AT+QCFG=\"usbspeed\",\"20\"": "AT+QCFG=\"usbspeed\",\"20\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (5Gbps) > AT+QCFG=\"usbspeed\",\"311\"": "AT+QCFG=\"usbspeed\",\"311\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (10Gbps) > AT+QCFG=\"usbspeed\",\"312\"": "AT+QCFG=\"usbspeed\",\"312\""
|
||||
},
|
||||
{
|
||||
"Reset Module > AT+QCFG=\"ResetFactory\"": "AT+QCFG=\"ResetFactory\""
|
||||
}
|
||||
],
|
||||
"general": [
|
||||
{
|
||||
"SIM Card Status Report > AT+QSIMSTAT?": "AT+QSIMSTAT?"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+QUIMSLOT=1": "AT+QUIMSLOT=1"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+QUIMSLOT=2": "AT+QUIMSLOT=2"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT+QNWINFO": "AT+QNWINFO"
|
||||
},
|
||||
{
|
||||
"Query Carrier Aggregation Parameters > AT+QCAINFO": "AT+QCAINFO"
|
||||
},
|
||||
{
|
||||
"Query Current Dial Mode > AT+QCFG=\"usbnet\"": "AT+QCFG=\"usbnet\""
|
||||
},
|
||||
{
|
||||
"QMI/GobiNet Dial Mode > AT+QCFG=\"usbnet\",0": "AT+QCFG=\"usbnet\",0"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+QCFG=\"usbnet\",1": "AT+QCFG=\"usbnet\",1"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+QCFG=\"usbnet\",2": "AT+QCFG=\"usbnet\",2"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+QCFG=\"usbnet\",3": "AT+QCFG=\"usbnet\",3"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+QCFG=\"usbnet\",5": "AT+QCFG=\"usbnet\",5"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+QNWPREFCFG=\"mode_pref\",LTE": "AT+QNWPREFCFG=\"mode_pref\",LTE"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+QNWPREFCFG=\"mode_pref\",NR5G": "AT+QNWPREFCFG=\"mode_pref\",NR5G"
|
||||
},
|
||||
{
|
||||
"Lock to 5G NSA > AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-NSA"
|
||||
},
|
||||
{
|
||||
"Lock to 5G SA > AT+QNWPREFCFG=\"mode_pref\",NR5G-SA": "AT+QNWPREFCFG=\"mode_pref\",NR5G-SA"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+QNWPREFCFG=\"mode_pref\",AUTO": "AT+QNWPREFCFG=\"mode_pref\",AUTO"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+EGMR=0,7": "AT+EGMR=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+EGMR=1,7,\"IMEI\"": "AT+EGMR=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT+QTEMP": "AT+QTEMP"
|
||||
},
|
||||
{
|
||||
"Switch to USB Communication Port > AT+QCFG=\"data_interface\",0,0": "AT+QCFG=\"data_interface\",0,0"
|
||||
},
|
||||
{
|
||||
"Switch to PCIE Communication Port > AT+QCFG=\"data_interface\",1,0": "AT+QCFG=\"data_interface\",1,0"
|
||||
},
|
||||
{
|
||||
"Check Current USB Speed > AT+QCFG=\"usbspeed\"": "AT+QCFG=\"usbspeed\""
|
||||
},
|
||||
{
|
||||
"Switch to USB2.0 > AT+QCFG=\"usbspeed\",\"20\"": "AT+QCFG=\"usbspeed\",\"20\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (5Gbps) > AT+QCFG=\"usbspeed\",\"311\"": "AT+QCFG=\"usbspeed\",\"311\""
|
||||
},
|
||||
{
|
||||
"Switch to USB3.1 Gen1 (10Gbps) > AT+QCFG=\"usbspeed\",\"312\"": "AT+QCFG=\"usbspeed\",\"312\""
|
||||
},
|
||||
{
|
||||
"Reset Module > AT+QCFG=\"ResetFactory\"": "AT+QCFG=\"ResetFactory\""
|
||||
}
|
||||
]
|
||||
},
|
||||
"fibocom": {
|
||||
"qualcomm": [
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+GTDUALSIM=0": "AT+GTDUALSIM=0"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+GTDUALSIM=1": "AT+GTDUALSIM=1"
|
||||
},
|
||||
{
|
||||
"ECM Manual Dial > AT+GTRNDIS=1,1": "AT+GTRNDIS=1,1"
|
||||
},
|
||||
{
|
||||
"ECM Dial Disconnect > AT+GTRNDIS=0,1": "AT+GTRNDIS=0,1"
|
||||
},
|
||||
{
|
||||
"Query Current Port Mode > AT+GTUSBMODE?": "AT+GTUSBMODE?"
|
||||
},
|
||||
{
|
||||
"QMI/GobiNet Dial Mode > AT+GTUSBMODE=32": "AT+GTUSBMODE=32"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+GTUSBMODE=18": "AT+GTUSBMODE=18"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+GTUSBMODE=30": "AT+GTUSBMODE=30"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+GTUSBMODE=24": "AT+GTUSBMODE=24"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+GTUSBMODE=18": "AT+GTUSBMODE=18"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+GTACT=2": "AT+GTACT=2"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+GTACT=14": "AT+GTACT=14"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+GTACT=20": "AT+GTACT=20"
|
||||
},
|
||||
{
|
||||
"Query Current Connected Network Type > AT+PSRAT?": "AT+PSRAT?"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+GTSN=0,7": "AT+GTSN=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+GTSN=1,7,\"IMEI\"": "AT+GTSN=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Report Current BBIC Temperature > AT+MTSM=1,6": "AT+MTSM=1,6"
|
||||
},
|
||||
{
|
||||
"Report Current RF Temperature > AT+MTSM=1,7": "AT+MTSM=1,7"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+CFUN=15": "AT+CFUN=15"
|
||||
}
|
||||
],
|
||||
"unisoc": [
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+GTDUALSIM=0": "AT+GTDUALSIM=0"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+GTDUALSIM=1": "AT+GTDUALSIM=1"
|
||||
},
|
||||
{
|
||||
"ECM Manual Dial > AT+GTRNDIS=1,1": "AT+GTRNDIS=1,1"
|
||||
},
|
||||
{
|
||||
"ECM Dial Disconnect > AT+GTRNDIS=0,1": "AT+GTRNDIS=0,1"
|
||||
},
|
||||
{
|
||||
"Query Current Port Mode > AT+GTUSBMODE?": "AT+GTUSBMODE?"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+GTUSBMODE=18": "AT+GTUSBMODE=18"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+GTUSBMODE=30": "AT+GTUSBMODE=30"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+GTUSBMODE=24": "AT+GTUSBMODE=24"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+GTUSBMODE=18": "AT+GTUSBMODE=18"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+GTACT=2": "AT+GTACT=2"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+GTACT=14": "AT+GTACT=14"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+GTACT=20": "AT+GTACT=20"
|
||||
},
|
||||
{
|
||||
"Query Current Connected Network Type > AT+PSRAT?": "AT+PSRAT?"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+GTSN=0,7": "AT+GTSN=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+GTSN=1,7,\"IMEI\"": "AT+GTSN=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Report Current BBIC Temperature > AT+MTSM=1,6": "AT+MTSM=1,6"
|
||||
},
|
||||
{
|
||||
"Report Current RF Temperature > AT+MTSM=1,7": "AT+MTSM=1,7"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+CFUN=15": "AT+CFUN=15"
|
||||
}
|
||||
],
|
||||
"mediatek": [
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT+GTDUALSIM=0": "AT+GTDUALSIM=0"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT+GTDUALSIM=1": "AT+GTDUALSIM=1"
|
||||
},
|
||||
{
|
||||
"Manual Set Access Point > AT+CGDCONT=3,\"IPV4V6\",\"APN\"": "AT+CGDCONT=3,\"IPV4V6\",\"Set APN here\""
|
||||
},
|
||||
{
|
||||
"Manual Dial > AT+CGACT=1,3": "AT+CGACT=1,3"
|
||||
},
|
||||
{
|
||||
"Stop Dialing > AT+CGACT=0,3": "AT+CGACT=0,3"
|
||||
},
|
||||
{
|
||||
"Query Current Port Mode > AT+GTUSBMODE?": "AT+GTUSBMODE?"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode (40) > AT+GTUSBMODE=40": "AT+GTUSBMODE=40"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode (41) > AT+GTUSBMODE=41": "AT+GTUSBMODE=41"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT+GTACT=2": "AT+GTACT=2"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT+GTACT=14": "AT+GTACT=14"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT+GTACT=20": "AT+GTACT=20"
|
||||
},
|
||||
{
|
||||
"Query Current Connected Network Type > AT+PSRAT?": "AT+PSRAT?"
|
||||
},
|
||||
{
|
||||
"Query Carrier Aggregation Cell Information > AT+GTCAINFO?": "AT+GTCAINFO?"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+GTSN=0,7": "AT+GTSN=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+GTSN=1,7,\"IMEI\"": "AT+GTSN=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Unlock FCC > AT+GTFCCLOCKMODE=0": "AT+GTFCCLOCKMODE=0"
|
||||
},
|
||||
{
|
||||
"Unlock ESIM > AT+GTESIMCFG=0,0,0": "AT+GTESIMCFG=0,0,0"
|
||||
},
|
||||
{
|
||||
"Disable Thermal Control > AT+GTTHERMAL=0": "AT+GTTHERMAL=0"
|
||||
},
|
||||
{
|
||||
"Get Current Temperature > AT+GTSENRDTEMP=0": "AT+GTSENRDTEMP=0"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+CFUN=15": "AT+CFUN=15"
|
||||
}
|
||||
]
|
||||
},
|
||||
"meig": {
|
||||
"qualcomm": [
|
||||
{
|
||||
"SIM Card Status Report > AT^SIMSLOTURC=1": "AT^SIMSLOTURC=1"
|
||||
},
|
||||
{
|
||||
"Get SIM Card Slot Status > AT^SIMSLOT?": "AT^SIMSLOT?"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT^SIMSLOT=1": "AT^SIMSLOT=1"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT^SIMSLOT=2": "AT^SIMSLOT=2"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT^SYSINFOEX": "AT^SYSINFOEX"
|
||||
},
|
||||
{
|
||||
"Query Carrier Aggregation Cell Information > AT^CELLINFO=1": "AT^CELLINFO=1"
|
||||
},
|
||||
{
|
||||
"Query Current Dial Mode > AT+SER?": "AT+SER?"
|
||||
},
|
||||
{
|
||||
"QMI/GobiNet Dial Mode > AT+SER=1,1": "AT+SER=1,1"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode > AT+SER=2,1": "AT+SER=2,1"
|
||||
},
|
||||
{
|
||||
"MBIM Dial Mode > AT+SER=3,1": "AT+SER=3,1"
|
||||
},
|
||||
{
|
||||
"RNDIS Dial Mode > AT+SER=3,1": "AT+SER=3,1"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode > AT+SER=2,1": "AT+SER=2,1"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT^SYSCFGEX=\"03\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"03\",all,0,2,all,all,all,all,1"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT^SYSCFGEX=\"04\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"04\",all,0,2,all,all,all,all,1"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT^SYSCFGEX=\"00\",all,0,2,all,all,all,all,1": "AT^SYSCFGEX=\"00\",all,0,2,all,all,all,all,1"
|
||||
},
|
||||
{
|
||||
"Query Module IMEI > AT+LCTSN=0,7": "AT+LCTSN=0,7"
|
||||
},
|
||||
{
|
||||
"Change Module IMEI > AT+LCTSN=1,7,\"IMEI\"": "AT+LCTSN=1,7,\"Set IMEI here\""
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT+TEMP": "AT+TEMP"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+RESET": "AT+RESET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"foxconn": {
|
||||
"qualcomm": [
|
||||
{
|
||||
"SIM Card Status Report > AT^SIMSLOTURC=1": "AT^SIMSLOTURC=1"
|
||||
},
|
||||
{
|
||||
"Get SIM Card Slot Status > AT^SWITCH_SLOT?": "AT^SWITCH_SLOT?"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 1 > at^switch_slot=0": "at^switch_slot=0"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to ESIM > at^switch_slot=1": "at^switch_slot=1"
|
||||
},
|
||||
{
|
||||
"Query Network and Carrier Information > AT^DEBUG?": "AT^DEBUG?"
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT^TEMP?": "AT^TEMP?"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT+RESET": "AT+RESET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"huawei": {
|
||||
"hisilicon": [
|
||||
{
|
||||
"Set Current SIM to Slot 1 > AT^SIMSWITCH=1": "AT^SIMSWITCH=1"
|
||||
},
|
||||
{
|
||||
"Set Current SIM to Slot 2 > AT^SIMSWITCH=0": "AT^SIMSWITCH=0"
|
||||
},
|
||||
{
|
||||
"Query Network Information > AT^SYSINFOEX": "AT^SYSINFOEX"
|
||||
},
|
||||
{
|
||||
"Query Current Dial Mode > AT^SETMODE?": "AT^SETMODE?"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode (Linux) > AT^SETMODE=0": "AT^SETMODE=0"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode (Windows) > AT^SETMODE=1": "AT^SETMODE=1"
|
||||
},
|
||||
{
|
||||
"ECM Dial Mode (Linux, Debug) > AT^SETMODE=2": "AT^SETMODE=2"
|
||||
},
|
||||
{
|
||||
"NCM Dial Mode (Windows, Debug) > AT^SETMODE=3": "AT^SETMODE=3"
|
||||
},
|
||||
{
|
||||
"Lock to 4G > AT^SYSCFGEX=\"03\",40000000,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"03\",40000000,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"Lock to 5G > AT^SYSCFGEX=\"08\",40000000,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"08\",40000000,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"Restore Automatic Network Search > AT^SYSCFGEX=\"00\",3FFFFFFF,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"00\",3FFFFFFF,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"Get Module Temperature > AT^CHIPTEMP?": "AT^CHIPTEMP?"
|
||||
},
|
||||
{
|
||||
"Restart Module > AT^RESET": "AT^RESET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"simcom": {
|
||||
"qualcomm": [
|
||||
{
|
||||
"Query Band Lock Mode > ": "AT+CNMP?"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > Automatic": "AT+CNMP=2"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > WCDMA Only": "AT+CNMP=14"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > LTE Only": "AT+CNMP=38"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > NR5G": "AT+CNMP=71"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > WCDMA+LTE Only": "AT+CNMP=54"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > WCDMA+LTE+NR5G": "AT+CNMP=55"
|
||||
},
|
||||
{
|
||||
"Set Band Lock Mode > LTE+NR5G": "AT+CNMP=109"
|
||||
},
|
||||
{
|
||||
"Reset Module > AT+CRESET": "AT+CRESET"
|
||||
},
|
||||
{
|
||||
"Reset Module > AT+CFUN=6": "AT+CFUN=6"
|
||||
},
|
||||
{
|
||||
"Reset Module > ATZ": "ATZ"
|
||||
},
|
||||
{
|
||||
"Enable Uplink/Downlink Display Mode > AT+CNWINFO=1": "AT+CNWINFO=1"
|
||||
},
|
||||
{
|
||||
"Disable Uplink/Downlink Display Mode > AT+CNWINFO=0": "AT+CNWINFO=0"
|
||||
},
|
||||
{
|
||||
"Switch to PCIE Mode > AT+CPCIEMODE=EP": "AT+CPCIEMODE=EP"
|
||||
},
|
||||
{
|
||||
"Switch to USB Mode > AT+CPCIEMODE=HOST": "AT+CPCIEMODE=HOST"
|
||||
},
|
||||
{
|
||||
"Enable SIM Hot Swap > AT+UIMHOTSWAPON=1": "AT+UIMHOTSWAPON=1"
|
||||
},
|
||||
{
|
||||
"Disable SIM Hot Swap > AT+UIMHOTSWAPON=0": "AT+UIMHOTSWAPON=0"
|
||||
},
|
||||
{
|
||||
"Unlock LTE Cell Lock > AT+CCELLCFG=0": "AT+CCELLCFG=0"
|
||||
},
|
||||
{
|
||||
"Unlock 5G Cell Lock > AT+C5GCELLCFG=\"unlock\"": "AT+C5GCELLCFG=\"unlock\""
|
||||
},
|
||||
{
|
||||
"Change IMEI > AT+SIMEI=imei": "AT+SIMEI=imei"
|
||||
},
|
||||
{
|
||||
"Switch SIM Card Slot > Slot 1": "AT+SMSIMCFG=0,1"
|
||||
},
|
||||
{
|
||||
"Switch SIM Card Slot > Slot 2": "AT+SMSIMCFG=0,2"
|
||||
},
|
||||
{
|
||||
"Set Module Function > Minimum Function": "AT+CFUN=0"
|
||||
},
|
||||
{
|
||||
"Set Module Function > Maximum Function": "AT+CFUN=1"
|
||||
},
|
||||
{
|
||||
"Set Module Function > Offline Mode": "AT+CFUN=7"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -57,6 +57,9 @@
|
||||
{
|
||||
"查询载波聚合参数 > AT+QCAINFO": "AT+QCAINFO"
|
||||
},
|
||||
{
|
||||
"查询5G信号强度(RSRP) > AT+QRSRP": "AT+QRSRP"
|
||||
},
|
||||
{
|
||||
"查询当前拨号模式 > AT+QCFG=\"usbnet\"": "AT+QCFG=\"usbnet\""
|
||||
},
|
||||
@ -517,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": {
|
||||
@ -544,6 +603,49 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"huawei": {
|
||||
"hisilicon": [
|
||||
{
|
||||
"设置当前使用的为卡1 > AT^SIMSWITCH=1": "AT^SIMSWITCH=1"
|
||||
},
|
||||
{
|
||||
"设置当前使用的为卡2 > AT^SIMSWITCH=0": "AT^SIMSWITCH=0"
|
||||
},
|
||||
{
|
||||
"查询网络信息 > AT^SYSINFOEX": "AT^SYSINFOEX"
|
||||
},
|
||||
{
|
||||
"查询当前拨号模式 > AT^SETMODE?": "AT^SETMODE?"
|
||||
},
|
||||
{
|
||||
"ECM拨号模式(Linux) > AT^SETMODE=0": "AT^SETMODE=0"
|
||||
},
|
||||
{
|
||||
"NCM拨号模式(Windows) > AT^SETMODE=1": "AT^SETMODE=1"
|
||||
},
|
||||
{
|
||||
"ECM拨号模式(Linux,Debug) > AT^SETMODE=2": "AT^SETMODE=2"
|
||||
},
|
||||
{
|
||||
"NCM拨号模式(Windows,Debug) > AT^SETMODE=3": "AT^SETMODE=3"
|
||||
},
|
||||
{
|
||||
"锁4G > AT^SYSCFGEX=\"03\",40000000,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"03\",40000000,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"锁5G > AT^SYSCFGEX=\"08\",40000000,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"08\",40000000,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"恢复自动搜索网络 > AT^SYSCFGEX=\"00\",3FFFFFFF,1,2,7FFFFFFFFFFFFFFF,,": "AT^SYSCFGEX=\"00\",3FFFFFFF,1,2,7FFFFFFFFFFFFFFF,,"
|
||||
},
|
||||
{
|
||||
"获取模组温度 > AT^CHIPTEMP?": "AT^CHIPTEMP?"
|
||||
},
|
||||
{
|
||||
"重启模组 > AT^RESET": "AT^RESET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"simcom": {
|
||||
"qualcomm": [
|
||||
{
|
||||
@ -597,6 +699,12 @@
|
||||
{
|
||||
"关闭sim热插拔 > AT+UIMHOTSWAPON=0": "AT+UIMHOTSWAPON=0"
|
||||
},
|
||||
{
|
||||
"解除LTE小区锁定 > AT+CCELLCFG=0": "AT+CCELLCFG=0"
|
||||
},
|
||||
{
|
||||
"解除5G小区锁定 > AT+C5GCELLCFG=\"unlock\"": "AT+C5GCELLCFG=\"unlock\""
|
||||
},
|
||||
{
|
||||
"更改imei > AT+SIMEI=imei": "AT+SIMEI=imei"
|
||||
},
|
@ -76,7 +76,7 @@ add_speed_entry()
|
||||
if [ -z "$rate" ]; then
|
||||
return
|
||||
fi
|
||||
rate=`convert_rate $rate`
|
||||
rate=`rate_convert $rate`
|
||||
case $type in
|
||||
"rx")
|
||||
add_plain_info_entry "Rx Rate" "$rate" "Transmit Rate"
|
||||
@ -102,6 +102,52 @@ add_avalible_band_entry()
|
||||
json_close_object
|
||||
}
|
||||
|
||||
get_driver()
|
||||
{
|
||||
for i in $(find $modem_path -name driver);do
|
||||
lsfile=$(ls -l $i)
|
||||
type=${lsfile:0:1}
|
||||
if [ "$type" == "l" ];then
|
||||
link=$(basename $(ls -l $i | awk '{print $11}'))
|
||||
case $link in
|
||||
"mtk_t7xx")
|
||||
mode="mtk_pcie"
|
||||
break
|
||||
;;
|
||||
"qmi_wwan"*)
|
||||
mode="qmi"
|
||||
break
|
||||
;;
|
||||
"cdc_mbim")
|
||||
mode="mbim"
|
||||
break
|
||||
;;
|
||||
"cdc_ncm")
|
||||
mode="ncm"
|
||||
break
|
||||
;;
|
||||
"cdc_ether")
|
||||
mode="ecm"
|
||||
break
|
||||
;;
|
||||
"rndis_host")
|
||||
mode="rndis"
|
||||
break
|
||||
;;
|
||||
"mhi_netdev")
|
||||
mode="mhi"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
if [ -z "$mode" ]; then
|
||||
mode="unknown"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
echo $mode
|
||||
}
|
||||
|
||||
get_dns()
|
||||
{
|
||||
@ -260,32 +306,45 @@ get_rat()
|
||||
#return raw data
|
||||
get_connect_status()
|
||||
{
|
||||
#get active pdp context
|
||||
at_cmd="AT+CGACT?"
|
||||
expect="+CGACT:"
|
||||
result=`at $at_port $at_cmd | grep $expect|tr '\r' '\n'`
|
||||
connect_status="No"
|
||||
for pdp_index in `echo "$result" | tr -d "\r" | awk -F'[,:]' '$3 == 1 {print $2}'`; do
|
||||
at_cmd="AT+CGPADDR=%s"
|
||||
at_cmd=$(printf "$at_cmd" "$pdp_index")
|
||||
expect="+CGPADDR:"
|
||||
result=$(at $at_port $at_cmd | grep $expect)
|
||||
if [ -n "$result" ];then
|
||||
ipv6=$(echo $result | grep -oE "\b([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b")
|
||||
ipv4=$(echo $result | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
|
||||
disallow_ipv4="0.0.0.0"
|
||||
#remove the disallow ip
|
||||
if [ "$ipv4" == "$disallow_ipv4" ];then
|
||||
ipv4=""
|
||||
fi
|
||||
fi
|
||||
if [ -n "$ipv4" ] || [ -n "$ipv6" ];then
|
||||
driver=$(get_driver)
|
||||
if [ "$driver" = "mtk_pcie" ]; then
|
||||
mbim_port=$(echo "$at_port" | sed 's/at/mbim/g')
|
||||
local config=$(umbim -d $mbim_port config)
|
||||
local ipv4=$(echo "$config" | grep "ipv4address:" | awk '{print $2}' | cut -d'/' -f1)
|
||||
local ipv6=$(echo "$config" | grep "ipv6address:" | awk '{print $2}' | cut -d'/' -f1)
|
||||
|
||||
disallow_ipv4="0.0.0.0"
|
||||
if [ -n "$ipv4" ] && [ "$ipv4" != "$disallow_ipv4" ] || [ -n "$ipv6" ] && [ "$ipv6" != "::" ]; then
|
||||
connect_status="Yes"
|
||||
break
|
||||
else
|
||||
connect_status="No"
|
||||
fi
|
||||
done
|
||||
else
|
||||
at_cmd="AT+CGACT?"
|
||||
expect="+CGACT:"
|
||||
result=`at $at_port $at_cmd | grep $expect|tr '\r' '\n'`
|
||||
|
||||
for pdp_index in `echo "$result" | tr -d "\r" | awk -F'[,:]' '$3 == 1 {print $2}'`; do
|
||||
at_cmd="AT+CGPADDR=%s"
|
||||
at_cmd=$(printf "$at_cmd" "$pdp_index")
|
||||
expect="+CGPADDR:"
|
||||
result=$(at $at_port $at_cmd | grep $expect)
|
||||
if [ -n "$result" ];then
|
||||
ipv6=$(echo $result | grep -oE "\b([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b")
|
||||
ipv4=$(echo $result | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
|
||||
disallow_ipv4="0.0.0.0"
|
||||
#remove the disallow ip
|
||||
if [ "$ipv4" == "$disallow_ipv4" ];then
|
||||
ipv4=""
|
||||
fi
|
||||
fi
|
||||
if [ -n "$ipv4" ] || [ -n "$ipv6" ];then
|
||||
connect_status="Yes"
|
||||
break
|
||||
else
|
||||
connect_status="No"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
add_plain_info_entry "connect_status" "$connect_status" "Connect Status"
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@ source /usr/share/libubox/jshn.sh
|
||||
method=$1
|
||||
config_section=$2
|
||||
at_port=$(uci get qmodem.$config_section.at_port)
|
||||
sms_at_port=$(uci get qmodem.$config_section.sms_at_port)
|
||||
uci -q get qmodem.$config_section.sms_at_port >/dev/null && sms_at_port=$(uci get qmodem.$config_section.sms_at_port)
|
||||
vendor=$(uci get qmodem.$config_section.manufacturer)
|
||||
platform=$(uci get qmodem.$config_section.platform)
|
||||
define_connect=$(uci get qmodem.$config_section.define_connect)
|
||||
@ -88,9 +88,24 @@ get_at_cfg(){
|
||||
json_close_array
|
||||
json_add_string using_port $(uci get qmodem.$config_section.at_port)
|
||||
json_add_array cmds
|
||||
general_cmd=$(jq -rc '.general[]|to_entries| .[] | @sh "key=\(.key) value=\(.value)"' /usr/share/qmodem/at_commands.json)
|
||||
platform_cmd=$(jq -rc ".${vendor}.${platform}[]|to_entries| .[] | @sh \"key=\(.key) value=\(.value)\"" /usr/share/qmodem/at_commands.json)
|
||||
[ -z "$platform_cmd" ] && platform_cmd=$(jq -rc ".$vendor.general[]|to_entries| .[] | @sh \"key=\(.key) value=\(.value)\"" /usr/share/qmodem/at_commands.json)
|
||||
|
||||
# Determine language and select appropriate AT commands file
|
||||
lang=$(uci get luci.main.lang 2>/dev/null || echo "en")
|
||||
case "$lang" in
|
||||
zh*|cn|auto)
|
||||
at_commands_file="/usr/share/qmodem/at_commands_zh.json"
|
||||
;;
|
||||
*)
|
||||
at_commands_file="/usr/share/qmodem/at_commands_en.json"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Fallback to default file if language-specific file doesn't exist
|
||||
[ ! -f "$at_commands_file" ] && at_commands_file="/usr/share/qmodem/at_commands.json"
|
||||
|
||||
general_cmd=$(jq -rc '.general[]|to_entries| .[] | @sh "key=\(.key) value=\(.value)"' "$at_commands_file")
|
||||
platform_cmd=$(jq -rc ".${vendor}.${platform}[]|to_entries| .[] | @sh \"key=\(.key) value=\(.value)\"" "$at_commands_file")
|
||||
[ -z "$platform_cmd" ] && platform_cmd=$(jq -rc ".$vendor.general[]|to_entries| .[] | @sh \"key=\(.key) value=\(.value)\"" "$at_commands_file")
|
||||
cmds=$(echo -e "$general_cmd\n$platform_cmd")
|
||||
IFS=$'\n'
|
||||
for cmd in $cmds; do
|
||||
|
@ -71,53 +71,6 @@ EOF
|
||||
esac
|
||||
}
|
||||
|
||||
get_driver()
|
||||
{
|
||||
for i in $(find $modem_path -name driver);do
|
||||
lsfile=$(ls -l $i)
|
||||
type=${lsfile:0:1}
|
||||
if [ "$type" == "l" ];then
|
||||
link=$(basename $(ls -l $i | awk '{print $11}'))
|
||||
case $link in
|
||||
"mtk_t7xx")
|
||||
mode="mtk_pcie"
|
||||
break
|
||||
;;
|
||||
"qmi_wwan"*)
|
||||
mode="qmi"
|
||||
break
|
||||
;;
|
||||
"cdc_mbim")
|
||||
mode="mbim"
|
||||
break
|
||||
;;
|
||||
"cdc_ncm")
|
||||
mode="ncm"
|
||||
break
|
||||
;;
|
||||
"cdc_ether")
|
||||
mode="ecm"
|
||||
break
|
||||
;;
|
||||
"rndis_host")
|
||||
mode="rndis"
|
||||
break
|
||||
;;
|
||||
"mhi_netdev")
|
||||
mode="mhi"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
if [ -z "$mode" ]; then
|
||||
mode="unknown"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
echo $mode
|
||||
}
|
||||
|
||||
unlock_sim()
|
||||
{
|
||||
pin=$1
|
||||
@ -161,6 +114,7 @@ update_config()
|
||||
config_get en_bridge $modem_config en_bridge
|
||||
config_get do_not_add_dns $modem_config do_not_add_dns
|
||||
config_get dns_list $modem_config dns_list
|
||||
config_get connect_check $modem_config connect_check
|
||||
config_get global_dial main enable_dial
|
||||
# config_get ethernet_5g u$modem_config ethernet 转往口获取命令更新,待测试
|
||||
config_foreach get_associate_ethernet_by_path modem-slot
|
||||
@ -170,7 +124,7 @@ update_config()
|
||||
update_sim_slot
|
||||
case $sim_slot in
|
||||
1)
|
||||
config_get apn $modem_config apn
|
||||
config_get apn $modem_config apn "auto"
|
||||
config_get username $modem_config username
|
||||
config_get password $modem_config password
|
||||
config_get auth $modem_config auth
|
||||
@ -182,7 +136,7 @@ update_config()
|
||||
config_get password $modem_config password2
|
||||
config_get auth $modem_config auth2
|
||||
config_get pincode $modem_config pincode2
|
||||
[ -z "$apn" ] && config_get apn $modem_config apn
|
||||
[ -z "$apn" ] && config_get apn $modem_config apn "auto"
|
||||
[ -z "$username" ] && config_get username $modem_config username
|
||||
[ -z "$password" ] && config_get password $modem_config password
|
||||
[ -z "$auth" ] && config_get auth $modem_config auth
|
||||
@ -207,6 +161,15 @@ check_dial_prepare()
|
||||
{
|
||||
cpin=$(at "$at_port" "AT+CPIN?")
|
||||
get_sim_status "$cpin"
|
||||
[ "$manufacturer" = "neoway" ] && {
|
||||
local res
|
||||
res=$(at $at_port 'AT+SIMCROSS=1,1;$MYCCID' | grep -q "ERROR")
|
||||
if [ $? -ne 0 ]; then
|
||||
sim_state_code="1"
|
||||
else
|
||||
sim_state_code="0"
|
||||
fi
|
||||
}
|
||||
case $sim_state_code in
|
||||
"0")
|
||||
m_debug "info sim card is miss"
|
||||
@ -280,7 +243,6 @@ check_ip()
|
||||
;;
|
||||
"mediatek")
|
||||
check_ip_command="AT+CGPADDR=3"
|
||||
stric=1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@ -296,24 +258,37 @@ check_ip()
|
||||
"qualcomm")
|
||||
check_ip_command="AT+CGPADDR=1"
|
||||
;;
|
||||
"unisoc")
|
||||
check_ip_command="AT+CGPADDR=1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"neoway")
|
||||
case $platform in
|
||||
"unisoc")
|
||||
check_ip_command="AT+CGPADDR=1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
check_ip_command="AT+CGPADDR=1"
|
||||
;;
|
||||
esac
|
||||
ipaddr=$(at "$at_port" "$check_ip_command" | grep +CGPADDR:)
|
||||
|
||||
if [ "$driver" = "mtk_pcie" ]; then
|
||||
mbim_port=$(echo "$at_port" | sed 's/at/mbim/g')
|
||||
local config=$(umbim -d $mbim_port config)
|
||||
ipaddr=$(echo "$config" | grep "ipv4address:" | awk '{print $2}' | cut -d'/' -f1)
|
||||
ipaddr="$ipaddr $(echo "$config" | grep "ipv6address:" | awk '{print $2}' | cut -d'/' -f1)"
|
||||
else
|
||||
ipaddr=$(at "$at_port" "$check_ip_command" | grep +CGPADDR:)
|
||||
fi
|
||||
|
||||
if [ -n "$ipaddr" ];then
|
||||
if [ $mtk -eq 1 ] && echo "$ipv4_config" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then
|
||||
if [ "$pdp_type" = "ipv4v6" ];then
|
||||
if ! ping -c 2 -w 5 2400:3200::1 > /dev/null 2>&1; then
|
||||
m_debug "ipv6 is down,try to restart"
|
||||
ifdown "$interface6_name" && sleep 2 && ifup "$interface6_name"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
ipv6=$(echo $ipaddr | grep -oE "\b([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b")
|
||||
ipv4=$(echo $ipaddr | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
|
||||
if [ "$manufacturer" = "simcom" ];then
|
||||
ipv4=$(echo $ipaddr | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep -v "0\.0\.0\.0" | head -n 1)
|
||||
ipaddr=$(echo $ipaddr | sed 's/\./:/g' | sed 's/+CGPADDR: //g' | sed 's/'$ipv4',//g')
|
||||
ipv6=$(echo $ipaddr | grep -oE "\b([0-9a-fA-F]{0,4}.){2,7}[0-9a-fA-F]{0,4}\b")
|
||||
fi
|
||||
disallow_ipv4="0.0.0.0"
|
||||
@ -337,6 +312,30 @@ check_ip()
|
||||
fi
|
||||
}
|
||||
|
||||
check_connection()
|
||||
{
|
||||
[ "$connection_status" = "0" ] || [ "$connection_status" = "-1" ] && return 0
|
||||
if [ -n "$ipv4" ] && [ -n "$modem_netcard" ]; then
|
||||
for i in 1 2; do
|
||||
if ping -I "$modem_netcard" -w 1 1.1.1.1 >/dev/null 2>&1 ||
|
||||
ping -I "$modem_netcard" -w 2 8.8.8.8 >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
if [ $i -eq 2 ]; then
|
||||
m_debug "IPv4 connection test failed, will redial"
|
||||
return 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
local ifup_time=$(ubus call network.interface.$interface6_name status 2>/dev/null | jsonfilter -e '@.uptime' 2>/dev/null || echo 0)
|
||||
if [ "$ifup_time" -gt 5 ] && [ "$pdp_type" = "ipv4v6" ]; then
|
||||
rdisc6 $origin_device &
|
||||
ndisc6 fe80::1 $origin_device &
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
append_to_fw_zone()
|
||||
{
|
||||
local fw_zone=$1
|
||||
@ -628,25 +627,38 @@ wwan_hang()
|
||||
|
||||
ecm_hang()
|
||||
{
|
||||
if [ "$manufacturer" = "quectel" ]; then
|
||||
at_command="AT+QNETDEVCTL=1,2,1"
|
||||
elif [ "$manufacturer" = "fibocom" ]; then
|
||||
#联发科平台(广和通FM350-GL)
|
||||
if [ "$platform" = "mediatek" ]; then
|
||||
at_command="AT+CGACT=0,3"
|
||||
else
|
||||
at_command="AT+GTRNDIS=0,1"
|
||||
fi
|
||||
elif [ "$manufacturer" = "meig" ]; then
|
||||
at_command="AT$QCRMCALL=0,1,1,2,1"
|
||||
else
|
||||
at_command='ATI'
|
||||
fi
|
||||
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
case "$manufacturer" in
|
||||
"quectel")
|
||||
at_command="AT+QNETDEVCTL=1,2,1"
|
||||
;;
|
||||
"fibocom")
|
||||
case "$platform" in
|
||||
"mediatek")
|
||||
at_command="AT+CGACT=0,3"
|
||||
;;
|
||||
*)
|
||||
at_command="AT+GTRNDIS=0,1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"meig")
|
||||
at_command='AT$QCRMCALL=0,0,1,2,1'
|
||||
;;
|
||||
"huawei")
|
||||
at_command="AT^NDISDUP=0,0"
|
||||
;;
|
||||
"neoway")
|
||||
delay=3
|
||||
at_command='AT$MYUSBNETACT=0,0'
|
||||
;;
|
||||
*)
|
||||
at_command="ATI"
|
||||
;;
|
||||
esac
|
||||
fastat "${at_port}" "${at_command}"
|
||||
[ -n "$delay" ] && sleep "$delay"
|
||||
}
|
||||
|
||||
|
||||
hang()
|
||||
{
|
||||
m_debug "hang up $modem_path driver $driver"
|
||||
@ -688,29 +700,29 @@ qmi_dial()
|
||||
{
|
||||
cmd_line="quectel-CM"
|
||||
[ -e "/usr/bin/quectel-CM-M" ] && cmd_line="quectel-CM-M"
|
||||
case $pdp_type in
|
||||
"ip") cmd_line="$cmd_line -4" ;;
|
||||
"ipv6") cmd_line="$cmd_line -6" ;;
|
||||
"ipv4v6") cmd_line="$cmd_line -4 -6" ;;
|
||||
*) cmd_line="$cmd_line -4 -6" ;;
|
||||
esac
|
||||
case $pdp_type in
|
||||
"ip") cmd_line="$cmd_line -4" ;;
|
||||
"ipv6") cmd_line="$cmd_line -6" ;;
|
||||
"ipv4v6") cmd_line="$cmd_line -4 -6" ;;
|
||||
*) cmd_line="$cmd_line -4 -6" ;;
|
||||
esac
|
||||
|
||||
if [ "$network_bridge" = "1" ]; then
|
||||
cmd_line="$cmd_line -b"
|
||||
fi
|
||||
if [ -n "$apn" ]; then
|
||||
cmd_line="$cmd_line -s $apn"
|
||||
fi
|
||||
if [ -n "$username" ]; then
|
||||
cmd_line="$cmd_line $username"
|
||||
fi
|
||||
if [ -n "$password" ]; then
|
||||
cmd_line="$cmd_line $password"
|
||||
fi
|
||||
if [ "$auth" != "none" ]; then
|
||||
cmd_line="$cmd_line $auth"
|
||||
fi
|
||||
if [ -n "$modem_netcard" ]; then
|
||||
if [ "$network_bridge" = "1" ]; then
|
||||
cmd_line="$cmd_line -b"
|
||||
fi
|
||||
if [ -n "$apn" ]; then
|
||||
cmd_line="$cmd_line -s $apn"
|
||||
fi
|
||||
if [ -n "$username" ]; then
|
||||
cmd_line="$cmd_line $username"
|
||||
fi
|
||||
if [ -n "$password" ]; then
|
||||
cmd_line="$cmd_line $password"
|
||||
fi
|
||||
if [ "$auth" != "none" ]; then
|
||||
cmd_line="$cmd_line $auth"
|
||||
fi
|
||||
if [ -n "$modem_netcard" ]; then
|
||||
qmi_if=$modem_netcard
|
||||
#if is wwan* ,use the first part of the name
|
||||
if [[ "$modem_netcard" = "wwan"* ]];then
|
||||
@ -720,8 +732,8 @@ qmi_dial()
|
||||
if [[ "$modem_netcard" = "rmnet"* ]];then
|
||||
qmi_if=$(echo "$modem_netcard" | cut -d. -f1)
|
||||
fi
|
||||
cmd_line="${cmd_line} -i ${qmi_if}"
|
||||
fi
|
||||
cmd_line="${cmd_line} -i ${qmi_if}"
|
||||
fi
|
||||
if [ "$en_bridge" = "1" ];then
|
||||
cmd_line="${cmd_line} -b"
|
||||
fi
|
||||
@ -749,7 +761,7 @@ at_dial()
|
||||
pdp_type="IP"
|
||||
fi
|
||||
local at_command='AT+COPS=0,0'
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
pdp_type=$(echo $pdp_type | tr 'a-z' 'A-Z')
|
||||
case $manufacturer in
|
||||
"quectel")
|
||||
@ -762,6 +774,10 @@ at_dial()
|
||||
at_command="AT+QNETDEVCTL=1,3,1"
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
|
||||
;;
|
||||
"hisilicon")
|
||||
at_command="AT+QNETDEVCTL=1,1,1"
|
||||
cgdcont_command=""
|
||||
;;
|
||||
"lte")
|
||||
if [ "$define_connect" = "3" ];then
|
||||
at_command="AT+QNETDEVCTL=3,3,1"
|
||||
@ -792,7 +808,7 @@ at_dial()
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
|
||||
;;
|
||||
"mediatek")
|
||||
mtk=1
|
||||
delay=3
|
||||
if [ "$apn" = "auto" ];then
|
||||
apn="cbnet"
|
||||
fi
|
||||
@ -801,6 +817,14 @@ at_dial()
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"huawei")
|
||||
case $platform in
|
||||
"hisilicon")
|
||||
at_command="AT^NDISDUP=1,1"
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"simcom")
|
||||
case $platform in
|
||||
"qualcomm")
|
||||
@ -813,7 +837,23 @@ at_dial()
|
||||
"meig")
|
||||
case $platform in
|
||||
"qualcomm")
|
||||
at_command=""
|
||||
at_command='AT$QCRMCALL=1,0,1,2,1'
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"neoway")
|
||||
case $platform in
|
||||
"unisoc")
|
||||
at_command='AT$MYUSBNETACT=0,1'
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"telit")
|
||||
case $platform in
|
||||
"qualcomm")
|
||||
at_command="AT#ICMAUTOCONN=1,1"
|
||||
cgdcont_command="AT+CGDCONT=1,\"$pdp_type\",\"$apn\""
|
||||
;;
|
||||
esac
|
||||
@ -821,50 +861,54 @@ at_dial()
|
||||
esac
|
||||
m_debug "dialing vendor:$manufacturer;platform:$platform; $cgdcont_command ; $at_command"
|
||||
at "${at_port}" "${cgdcont_command}"
|
||||
if [ $mtk -eq 1 ];then
|
||||
sleep 3
|
||||
fi
|
||||
at "$at_port" "$at_command"
|
||||
if [ $mtk -eq 1 ];then
|
||||
sleep 3
|
||||
fastat "$at_port" "$at_command"
|
||||
[ -n "$delay" ] && sleep "$delay"
|
||||
if [ "$driver" = "mtk_pcie" ];then
|
||||
fastat "$at_port" "AT+CGACT=0,3"
|
||||
mbim_port=$(echo "$at_port" | sed 's/at/mbim/g')
|
||||
umbim -d $mbim_port disconnect
|
||||
sleep 1
|
||||
umbim -d $mbim_port connect 0
|
||||
fi
|
||||
}
|
||||
|
||||
ip_change_fm350()
|
||||
{
|
||||
m_debug "ip_change_fm350"
|
||||
at_command="AT+CGPADDR=3"
|
||||
local ipv4_config=$(at ${at_port} ${at_command} | cut -d, -f2 | grep -oE '[0-9]+.[0-9]+.[0-9]+.[0-9]+')
|
||||
local public_dns1_ipv4="223.5.5.5"
|
||||
local public_dns2_ipv4="119.29.29.29"
|
||||
local public_dns1_ipv6="2400:3200::1"
|
||||
local public_dns2_ipv6="2402:4e00::"
|
||||
at_command="AT+GTDNS=3" | grep "+GTDNS: "| grep -E '[0-9]+.[0-9]+.[0-9]+.[0-9]+' | sed -n '1p'
|
||||
local ipv4_dns1=$(echo "${response}" | awk -F'"' '{print $2}' | awk -F',' '{print $1}')
|
||||
[ -z "$ipv4_dns1" ] && {
|
||||
ipv4_dns1="${public_dns1_ipv4}"
|
||||
}
|
||||
local netmask="255.255.255.0"
|
||||
|
||||
local ipv4_dns2=$(echo "${response}" | awk -F'"' '{print $4}' | awk -F',' '{print $1}')
|
||||
[ -z "$ipv4_dns2" ] && {
|
||||
ipv4_dns2="${public_dns2_ipv4}"
|
||||
}
|
||||
if [ "$driver" = "mtk_pcie" ]; then
|
||||
mbim_port=$(echo "$at_port" | sed 's/at/mbim/g')
|
||||
|
||||
local ipv6_dns1=$(echo "${response}" | awk -F'"' '{print $2}' | awk -F',' '{print $2}')
|
||||
[ -z "$ipv6_dns1" ] && {
|
||||
ipv6_dns1="${public_dns1_ipv6}"
|
||||
}
|
||||
local config=$(umbim -d $mbim_port config)
|
||||
ipv4_config=$(echo "$config" | grep "ipv4address:" | awk '{print $2}' | cut -d'/' -f1)
|
||||
gateway=$(echo "$config" | grep "ipv4gateway:" | awk '{print $2}')
|
||||
|
||||
local ipv6_dns2=$(echo "${response}" | awk -F'"' '{print $4}' | awk -F',' '{print $2}')
|
||||
[ -z "$ipv6_dns2" ] && {
|
||||
ipv6_dns2="${public_dns2_ipv6}"
|
||||
}
|
||||
uci_ipv4=$(uci -q get network.$interface_name.ipaddr)
|
||||
ipv4_dns1=$(echo "$config" | grep "ipv4dnsserver:" | head -n 1 | awk '{print $2}')
|
||||
ipv4_dns2=$(echo "$config" | grep "ipv4dnsserver:" | tail -n 1 | awk '{print $2}')
|
||||
[ -z "$ipv4_dns1" ] && ipv4_dns1="$public_dns1_ipv4"
|
||||
[ -z "$ipv4_dns2" ] && ipv4_dns2="$public_dns2_ipv4"
|
||||
# m_debug "umbim config: ipv4=$ipv4_config, gateway=$gateway, netmask=$netmask, dns1=$ipv4_dns1, dns2=$ipv4_dns2"
|
||||
else
|
||||
at_command="AT+CGPADDR=3"
|
||||
response=$(at ${at_port} ${at_command})
|
||||
ipv4_config=$(echo "$response" | grep "+CGPADDR:" | grep -o '"[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"' | head -1 | tr -d '"')
|
||||
gateway="${ipv4_config%.*}.1"
|
||||
|
||||
response=$(at ${at_port} "AT+GTDNS=3")
|
||||
ipv4_dns=$(echo "$response" | grep "+GTDNS:" | head -1)
|
||||
ipv4_dns1=$(echo "$ipv4_dns" | grep -o '"[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"' | head -1 | tr -d '"')
|
||||
ipv4_dns2=$(echo "$ipv4_dns" | grep -o '"[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"' | tail -1 | tr -d '"')
|
||||
[ -z "$ipv4_dns1" ] && ipv4_dns1="$public_dns1_ipv4"
|
||||
[ -z "$ipv4_dns2" ] && ipv4_dns2="$public_dns2_ipv4"
|
||||
uci_ipv4=$(uci -q get network.$interface_name.ipaddr)
|
||||
fi
|
||||
uci set network.${interface_name}.proto='static'
|
||||
uci set network.${interface_name}.ipaddr="${ipv4_config}"
|
||||
uci set network.${interface_name}.netmask='255.255.255.0'
|
||||
uci set network.${interface_name}.gateway="${ipv4_config%.*}.1"
|
||||
uci set network.${interface_name}.netmask="${netmask}"
|
||||
uci set network.${interface_name}.gateway="${gateway}"
|
||||
uci set network.${interface_name}.peerdns='0'
|
||||
uci -q del network.${interface_name}.dns
|
||||
uci add_list network.${interface_name}.dns="${ipv4_dns1}"
|
||||
@ -982,30 +1026,34 @@ check_logfile_line()
|
||||
unexpected_response_count=0
|
||||
at_dial_monitor()
|
||||
{
|
||||
check_ip
|
||||
at_dial
|
||||
ipv4_cache=$ipv4
|
||||
ipv6_cache=$ipv6
|
||||
sleep 5
|
||||
while true; do
|
||||
check_ip
|
||||
if [ $connection_status -eq 0 ];then
|
||||
at_dial
|
||||
sleep 5
|
||||
elif [ $connection_status -eq -1 ];then
|
||||
unexpected_response_count=$((unexpected_response_count+1))
|
||||
if [ $unexpected_response_count -gt 3 ];then
|
||||
case $connection_status in
|
||||
0)
|
||||
at_dial
|
||||
unexpected_response_count=0
|
||||
fi
|
||||
sleep 10
|
||||
else
|
||||
#检测ipv4是否变化
|
||||
sleep 15
|
||||
if [ "$ipv4" != "$ipv4_cache" ];then
|
||||
handle_ip_change
|
||||
ipv6_cache=$ipv6
|
||||
ipv4_cache=$ipv4
|
||||
fi
|
||||
fi
|
||||
sleep 3
|
||||
;;
|
||||
-1)
|
||||
unexpected_response_count=$((unexpected_response_count+1))
|
||||
if [ $unexpected_response_count -gt 3 ]; then
|
||||
at_dial
|
||||
unexpected_response_count=0
|
||||
fi
|
||||
sleep 5
|
||||
;;
|
||||
*)
|
||||
if [ "$ipv4" != "$ipv4_cache" ] || [ "$ipv6" != "$ipv6_cache" ]; then
|
||||
handle_ip_change
|
||||
ipv4_cache=$ipv4
|
||||
ipv6_cache=$ipv6
|
||||
fi
|
||||
[ "$connect_check" -eq 1 ] && { sleep 5; check_connection || { hang && at_dial; }; } || sleep 15
|
||||
;;
|
||||
esac
|
||||
check_logfile_line
|
||||
done
|
||||
}
|
||||
|
@ -0,0 +1,78 @@
|
||||
{
|
||||
"modem_port_rule": {
|
||||
"usb": {
|
||||
"305a:1421": {
|
||||
"name": "gm800",
|
||||
"mode": "qmi",
|
||||
"option_driver": 1,
|
||||
"include": [
|
||||
"1.1"
|
||||
]
|
||||
},
|
||||
"305a:1404": {
|
||||
"name": "gm800",
|
||||
"mode": "rndis",
|
||||
"option_driver": 0,
|
||||
"include": [
|
||||
"1.1"
|
||||
]
|
||||
},
|
||||
"2dee:4d23": {
|
||||
"name": "srm825xeu",
|
||||
"mode": "ecm",
|
||||
"option_driver": 1,
|
||||
"include": [
|
||||
"1.1"
|
||||
]
|
||||
},
|
||||
"2dee:4d38": {
|
||||
"name": "srm825xeu",
|
||||
"mode": "rndis",
|
||||
"option_driver": 1,
|
||||
"include": [
|
||||
"1.3"
|
||||
]
|
||||
},
|
||||
"3466:3301": {
|
||||
"name": "mt5700m-cn",
|
||||
"option_driver": 1
|
||||
},
|
||||
"2c7c:8101": {
|
||||
"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",
|
||||
"option_driver": 1,
|
||||
"include": [
|
||||
"1.1"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -4,12 +4,11 @@ action=$1
|
||||
config=$2
|
||||
slot_type=$3
|
||||
modem_support=$(cat /usr/share/qmodem/modem_support.json)
|
||||
modem_port_rule=$(cat /usr/share/qmodem/modem_port_rule.json)
|
||||
debug_subject="modem_scan"
|
||||
source /lib/functions.sh
|
||||
source /usr/share/qmodem/modem_util.sh
|
||||
|
||||
|
||||
|
||||
exec_post_init()
|
||||
{
|
||||
section_name=$1
|
||||
@ -176,14 +175,14 @@ scan_pcie_slot_interfaces()
|
||||
#mt_t7xx device
|
||||
wwan_path="$slot_path/wwan"
|
||||
if [ -d "$wwan_path" ]; then
|
||||
net_devices=$(ls "$wwan_path" | grep -E "wwan[0-9]")
|
||||
devices_path="$wwan_path/$net_devices"
|
||||
if [ -d "$devices_path" ];then
|
||||
mbim_devices=$(ls "$devices_path" | grep -E "wwan[0-9]mbim[0-9]")
|
||||
dun_devices=$(ls "$devices_path" | grep -E "wwan[0-9]at[0-9]")
|
||||
fi
|
||||
net_devices=$(ls "$wwan_path" | grep -E "wwan[0-9]")
|
||||
devices_path="$wwan_path/$net_devices"
|
||||
if [ -d "$devices_path" ];then
|
||||
mbim_devices=$(ls "$devices_path" | grep -E "wwan[0-9]mbim[0-9]")
|
||||
dun_devices=$(ls "$devices_path" | grep -E "wwan[0-9]at[0-9]")
|
||||
fi
|
||||
fi
|
||||
echo "net_devices: $net_devices dun_devices: $dun_devices"
|
||||
m_debug "net_devices: $net_devices dun_devices: $dun_devices"
|
||||
at_ports="$dun_devices"
|
||||
[ -n "$net_devices" ] && get_associate_usb $slot
|
||||
if [ -n "$associated_usb" ] && [ -d "/sys/bus/usb/devices/$associated_usb" ]; then
|
||||
@ -225,6 +224,34 @@ scan_usb_slot_interfaces()
|
||||
net_devices=""
|
||||
tty_devices=""
|
||||
[ ! -d "$slot_path" ] && return
|
||||
|
||||
slot_vid=$(cat "$slot_path/idVendor" 2>/dev/null || echo "")
|
||||
slot_pid=$(cat "$slot_path/idProduct" 2>/dev/null || echo "")
|
||||
|
||||
# m_debug "($slot_vid:$slot_pid) $slot_path"
|
||||
|
||||
if [ -n "$slot_vid" ] && [ -n "$slot_pid" ]; then
|
||||
modem_port_config=$(echo $modem_port_rule | jq '.modem_port_rule."'$slot_type'"."'$slot_vid:$slot_pid'"')
|
||||
if [ "$modem_port_config" != "null" ] && [ -n "$modem_port_config" ]; then
|
||||
config_modem_name=$(echo $modem_port_config | jq -r '.name' 2>/dev/null || echo "")
|
||||
include_ports=$(echo $modem_port_config | jq -r '.include[]' 2>/dev/null || echo "")
|
||||
option_driver=$(echo $modem_port_config | jq -r '.option_driver' 2>/dev/null || echo "0")
|
||||
|
||||
if [ -n "$include_ports" ]; then
|
||||
include_mode=1
|
||||
m_debug "using special config for $config_modem_name($slot_vid:$slot_pid) with ports: $include_ports"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
m_debug "Unable to read VID/PID from device path: $slot_path"
|
||||
fi
|
||||
|
||||
if [ "$option_driver" = "1" ] && [ -n "$slot_vid" ] && [ -n "$slot_pid" ]; then
|
||||
if ! echo "$slot_vid $slot_pid" > /sys/bus/usb-serial/drivers/option1/new_id 2>/dev/null; then
|
||||
m_debug "failed to set option driver"
|
||||
fi
|
||||
fi
|
||||
|
||||
local slot_interfaces=$(ls $slot_path | grep -E "$slot:[0-9]\.[0-9]+")
|
||||
for interface in $slot_interfaces; do
|
||||
unset device
|
||||
@ -234,6 +261,9 @@ scan_usb_slot_interfaces()
|
||||
[ ! -d "$interface_driver_path" ] && continue
|
||||
interface_driver=$(basename $(readlink $interface_driver_path))
|
||||
[ -z "$interface_driver" ] && continue
|
||||
|
||||
local if_port=$(echo "$interface" | grep -oE "[0-9]+\.[0-9]+$" || echo "")
|
||||
|
||||
case $interface_driver in
|
||||
option|\
|
||||
cdc_acm|\
|
||||
@ -244,11 +274,26 @@ scan_usb_slot_interfaces()
|
||||
[ -z "$ttyUSB_device" ] && [ -z "$ttyACM_device" ] && continue
|
||||
[ -n "$ttyUSB_device" ] && device="$ttyUSB_device"
|
||||
[ -n "$ttyACM_device" ] && device="$ttyACM_device"
|
||||
[ -z "$tty_devices" ] && tty_devices="$device" || tty_devices="$tty_devices $device"
|
||||
|
||||
local should_include=1
|
||||
|
||||
if [ $include_mode -eq 1 ]; then
|
||||
should_include=0
|
||||
for included_port in $include_ports; do
|
||||
if [ -n "$if_port" ] && [ "$included_port" = "$if_port" ]; then
|
||||
should_include=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ $should_include -eq 1 ]; then
|
||||
[ -z "$tty_devices" ] && tty_devices="$device" || tty_devices="$tty_devices $device"
|
||||
fi
|
||||
;;
|
||||
qmi_wwan*|\
|
||||
cdc_mbim|\
|
||||
cdc_ncm|\
|
||||
*cdc_ncm|\
|
||||
cdc_ether|\
|
||||
rndis_host)
|
||||
net_path="$slot_path/$interface/net"
|
||||
@ -271,7 +316,7 @@ validate_at_port()
|
||||
[ ! -e "$dev_path" ] && continue
|
||||
res=$(fastat $dev_path "ATI")
|
||||
[ -z "$res" ] && continue
|
||||
[[ "$res" != *"OK"* ]] && continue
|
||||
!(echo "$res" | grep -qE 'OK') && continue
|
||||
valid_at_port="$at_port"
|
||||
[ -z "$valid_at_ports" ] && valid_at_ports="$valid_at_port" || valid_at_ports="$valid_at_ports $valid_at_port"
|
||||
done
|
||||
@ -283,27 +328,36 @@ match_config()
|
||||
[[ "$name" = *"nl668"* ]] && name="nl668"
|
||||
[[ "$name" = *"nl678"* ]] && name="nl678"
|
||||
|
||||
[[ "$name" = *"em120k"* ]] && name="em120k"
|
||||
[[ "$name" = *"em120k"* ]] && name="em120k"
|
||||
|
||||
#FM350-GL-00 5G Module
|
||||
[[ "$name" = *"fm350-gl"* ]] && name="fm350-gl"
|
||||
#FM350-GL-00 5G Module
|
||||
[[ "$name" = *"fm350-gl"* ]] && name="fm350-gl"
|
||||
|
||||
#RM500U-CNV
|
||||
[[ "$name" = *"rm500u-cn"* ]] && name="rm500u-cn"
|
||||
#FM190W-GL 5G Module
|
||||
[[ "$name" = *"fm190w-gl"* ]] && name="fm190w-gl"
|
||||
|
||||
[[ "$name" = *"rm500u-ea"* ]] && name="rm500u-ea"
|
||||
#t99w175
|
||||
[[ "$name" = *"mv31-w"* ]] && name="t99w175"
|
||||
#RM500U-CNV
|
||||
[[ "$name" = *"rm500u-cn"* ]] && name="rm500u-cn"
|
||||
|
||||
[[ "$name" = *"T99W175"* ]] && name="t99w175"
|
||||
[[ "$name" = *"rm500u-ea"* ]] && name="rm500u-ea"
|
||||
#t99w175
|
||||
[[ "$name" = *"mv31-w"* ]] || [[ "$name" = *"T99W175"* ]] && name="t99w175"
|
||||
|
||||
[[ "$name" = *"T99W373"* ]] && name="t99w373"
|
||||
[[ "$name" = *"T99W373"* ]] && name="t99w373"
|
||||
|
||||
[[ "$name" = *"SIM8380G"* ]] && name="SIM8380G-M2"
|
||||
[[ "$name" = *"dp25-42843-47"* ]] && name="t99w640"
|
||||
|
||||
#rg200u-cn
|
||||
[[ "$name" = *"SIM8380G"* ]] && name="SIM8380G-M2"
|
||||
|
||||
#rg200u-cn
|
||||
[[ "$name" = *"rg200u-cn"* ]] && name="rg200u-cn"
|
||||
|
||||
#nu313-m2
|
||||
[[ "$name" = *"nu313-m2"* ]] && name="srm821"
|
||||
|
||||
#nari-m601
|
||||
[[ "$name" = *"m601"* ]] && name="n510m"
|
||||
|
||||
modem_config=$(echo $modem_support | jq '.modem_support."'$slot_type'"."'$name'"')
|
||||
[ "$modem_config" == "null" ] && return
|
||||
[ -z "$modem_config" ] && return
|
||||
@ -328,13 +382,15 @@ get_modem_model()
|
||||
name_1=$(echo -e "$cgmm" |grep "+CGMM: " | awk -F': ' '{print $2}')
|
||||
name_2=$(echo -e "$cgmm_1" |grep "+CGMM: " | awk -F'"' '{print $2} '| cut -d ' ' -f 1)
|
||||
name_3=$(echo -e "$cgmm" | sed -n '2p')
|
||||
name_4=$(echo -e "$cgmm" |grep "+CGMM: " | awk -F'"' '{print $2} '| cut -d ' ' -f 1)
|
||||
name_4=$(echo -e "$cgmm" | sed -n '3p')
|
||||
name_5=$(echo -e "$cgmm" |grep "+CGMM: " | awk -F'"' '{print $2} '| cut -d ' ' -f 1)
|
||||
modem_name=""
|
||||
|
||||
[ -n "$name_1" ] && match_config "$name_1"
|
||||
[ -n "$name_2" ] && [ -z "$modem_name" ] && match_config "$name_2"
|
||||
[ -n "$name_3" ] && [ -z "$modem_name" ] && match_config "$name_3"
|
||||
[ -n "$name_4" ] && [ -z "$modem_name" ] && match_config "$name_4"
|
||||
[ -n "$name_5" ] && [ -z "$modem_name" ] && match_config "$name_5"
|
||||
[ -z "$modem_name" ] && return 1
|
||||
return 0
|
||||
}
|
||||
@ -414,7 +470,9 @@ add()
|
||||
set qmodem.$section_name.path="$modem_path"
|
||||
set qmodem.$section_name.data_interface="$slot_type"
|
||||
set qmodem.$section_name.enable_dial="1"
|
||||
set qmodem.$section_name.pdp_type="ip"
|
||||
set qmodem.$section_name.soft_reboot="1"
|
||||
set qmodem.$section_name.extend_prefix="1"
|
||||
set qmodem.$section_name.pdp_type="ipv4v6"
|
||||
set qmodem.$section_name.state="enabled"
|
||||
set qmodem.$section_name.metric=$metric
|
||||
EOF
|
||||
@ -442,6 +500,7 @@ EOF
|
||||
for at_port in $at_ports; do
|
||||
uci add_list qmodem.$section_name.ports="/dev/$at_port"
|
||||
done
|
||||
[ "$option_driver" == "1" ] && uci set qmodem.$section_name.option_driver="1"
|
||||
uci commit qmodem
|
||||
mkdir -p /var/run/qmodem/${section_name}_dir
|
||||
lock -u /tmp/lock/modem_add_$slot
|
||||
|
@ -1,6 +1,20 @@
|
||||
{
|
||||
"modem_support": {
|
||||
"usb": {
|
||||
"s10": {
|
||||
"manufacturer_id": "12dc",
|
||||
"manufacturer": "huawei",
|
||||
"platform": "hisilicon",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/4/5/6/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/18/19/20/25/26/28/66/71/38/39/40/41/66/71",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
"modes": [
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"em05": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
@ -8,15 +22,48 @@
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/4/5/6/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/18/19/20/25/26/28/66/71/38/39/40/41",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/18/19/20/25/26/28/66/71/38/39/40/41/66/71",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis",
|
||||
"ncm"
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"ep06": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "lte",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/3/5/8",
|
||||
"lte_band": "1/3/5/7/8/20/28/32/38/40/41",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"em12": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "lte",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/3/4/5/8/9/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/9/12/13/14/17/18/19/20/21/25/26/28/29/30/32/66",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"em120k": {
|
||||
@ -25,7 +72,7 @@
|
||||
"platform": "lte12",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/4/5/6/8/19",
|
||||
"wcdma_band": "1/2/3/4/5/6/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/31/34/38/39/40/41/42/43/46/48/66/71",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
@ -33,10 +80,55 @@
|
||||
"qmi",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis",
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"em160r-gl": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "lte12",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/3/4/5/6/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/43/46/48/66",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "0",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis"
|
||||
]
|
||||
},
|
||||
"mt5700m-cn": {
|
||||
"manufacturer_id": "3466",
|
||||
"manufacturer": "huawei",
|
||||
"platform": "hisilicon",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/8",
|
||||
"lte_band": "1/3/5/8/34/38/39/40/41",
|
||||
"nsa_band": "41/78/79",
|
||||
"sa_band": "1/28/41/78/79",
|
||||
"modes": [
|
||||
"ecm",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"mh5000-31": {
|
||||
"manufacturer_id": "12d1",
|
||||
"manufacturer": "huawei",
|
||||
"platform": "hisilicon",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/8",
|
||||
"lte_band": "1/3/5/8/34/38/39/40/41",
|
||||
"nsa_band": "41/78/79",
|
||||
"sa_band": "1/41/78/79",
|
||||
"modes": [
|
||||
"ecm"
|
||||
]
|
||||
},
|
||||
"rg200u-cn": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
@ -54,6 +146,22 @@
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rg801": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "hisilicon",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/8",
|
||||
"lte_band": "1/3/5/8/34/38/39/40/41",
|
||||
"nsa_band": "41/78/79",
|
||||
"sa_band": "1/28/41/78/79",
|
||||
"modes": [
|
||||
"ecm",
|
||||
"rndis",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rm500u-cn": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
@ -335,6 +443,25 @@
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rm551e-gl": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/4/5/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/43/46/48/66/71",
|
||||
"nsa_band": "1/2/3/5/7/8/12/13/14/18/20/25/26/28/29/30/38/40/41/48/66/70/71/75/76/77/78/79",
|
||||
"sa_band": "1/2/3/5/7/8/12/13/14/18/20/25/26/28/29/30/38/40/41/48/66/70/71/75/76/77/78/79",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rg501q-eu": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
@ -407,6 +534,25 @@
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rg520f-jo": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "0",
|
||||
"lte_band": "0",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "78",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"rg530f-na": {
|
||||
"manufacturer_id": "2c7c",
|
||||
"manufacturer": "quectel",
|
||||
@ -524,6 +670,21 @@
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"fm190w-gl": {
|
||||
"manufacturer_id": "2cb7",
|
||||
"manufacturer": "fibocom",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"ecm",
|
||||
"mbim",
|
||||
"rndis",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"nl668": {
|
||||
"manufacturer_id": "1508",
|
||||
"manufacturer": "fibocom",
|
||||
@ -654,6 +815,19 @@
|
||||
"rmnet"
|
||||
]
|
||||
},
|
||||
"fn990a40": {
|
||||
"manufacturer_id": "1bc7",
|
||||
"manufacturer": "telit",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"mbim",
|
||||
"rndis",
|
||||
"qmi",
|
||||
"ecm"
|
||||
]
|
||||
},
|
||||
"simcom_d8200g": {
|
||||
"manufacturer_id": "1a0e",
|
||||
"manufacturer": "simcom",
|
||||
@ -705,7 +879,19 @@
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"mbim",
|
||||
"rmnet"
|
||||
"rmnet"
|
||||
]
|
||||
},
|
||||
"srm821": {
|
||||
"manufacturer_id": "1782",
|
||||
"manufacturer": "meig",
|
||||
"platform": "unisoc",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"ecm",
|
||||
"rndis",
|
||||
"ncm"
|
||||
]
|
||||
},
|
||||
"t99w373": {
|
||||
@ -718,9 +904,34 @@
|
||||
"mbim",
|
||||
"rmnet"
|
||||
]
|
||||
},
|
||||
"n510m": {
|
||||
"manufacturer_id": "3763",
|
||||
"manufacturer": "neoway",
|
||||
"platform": "unisoc",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"ecm"
|
||||
]
|
||||
}
|
||||
},
|
||||
"pcie": {
|
||||
"rm510q-gl": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/3/4/5/6/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/43/46/48/66/71",
|
||||
"nsa_band": "1/2/3/5/7/8/12/20/25/28/38/40/41/48/66/71/77/78/79/257/258/260/261",
|
||||
"sa_band": "1/2/3/5/7/8/12/20/25/28/38/40/41/48/66/71/77/78/79/257/258/260/261",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rm500s-ce": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
@ -750,6 +961,15 @@
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"t99w640": {
|
||||
"manufacturer": "foxconn",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"simcom_sim8380g-m2": {
|
||||
"manufacturer": "simcom",
|
||||
"platform": "qualcomm",
|
||||
@ -899,6 +1119,21 @@
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rm551e-gl": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "1/2/4/5/8/19",
|
||||
"lte_band": "1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/43/46/48/66/71",
|
||||
"nsa_band": "1/2/3/5/7/8/12/13/14/18/20/25/26/28/29/30/38/40/41/48/66/70/71/75/76/77/78/79",
|
||||
"sa_band": "1/2/3/5/7/8/12/13/14/18/20/25/26/28/29/30/38/40/41/48/66/70/71/75/76/77/78/79",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rg520n-eu": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
@ -940,6 +1175,21 @@
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rg520f-jo": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"wcdma_band": "0",
|
||||
"lte_band": "0",
|
||||
"nsa_band": "0",
|
||||
"sa_band": "78",
|
||||
"modes": [
|
||||
"qmi",
|
||||
"gobinet",
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rg530f-na": {
|
||||
"manufacturer": "quectel",
|
||||
"platform": "qualcomm",
|
||||
@ -973,6 +1223,15 @@
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"rw350r-gl": {
|
||||
"manufacturer": "fibocom",
|
||||
"platform": "mediatek",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"fm150-ae": {
|
||||
"manufacturer": "fibocom",
|
||||
"platform": "qualcomm",
|
||||
@ -983,6 +1242,15 @@
|
||||
"mbim"
|
||||
]
|
||||
},
|
||||
"fm190w-gl": {
|
||||
"manufacturer": "fibocom",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "pcie",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"qmi"
|
||||
]
|
||||
},
|
||||
"em9190": {
|
||||
"manufacturer": "sierra",
|
||||
"platform": "qualcomm",
|
||||
@ -992,6 +1260,16 @@
|
||||
"mbim",
|
||||
"rmnet"
|
||||
]
|
||||
},
|
||||
"fn990a40": {
|
||||
"manufacturer": "telit",
|
||||
"platform": "qualcomm",
|
||||
"data_interface": "usb",
|
||||
"define_connect": "1",
|
||||
"modes": [
|
||||
"mbim",
|
||||
"qmi"
|
||||
]
|
||||
}
|
||||
},
|
||||
"device": {
|
||||
@ -1093,13 +1371,17 @@
|
||||
"meig": {
|
||||
"unisoc": {
|
||||
"vendor_id": [
|
||||
"2dee"
|
||||
"2dee",
|
||||
"1782"
|
||||
],
|
||||
"product_id": [
|
||||
"4d50",
|
||||
"4d51",
|
||||
"4d52",
|
||||
"4d53"
|
||||
"4d53",
|
||||
"4039",
|
||||
"4038",
|
||||
"4040"
|
||||
]
|
||||
},
|
||||
"qualcomm": {
|
||||
@ -1141,12 +1423,12 @@
|
||||
"vendor_id": [
|
||||
"1a0e",
|
||||
"1e0e",
|
||||
"17cb"
|
||||
"17cb"
|
||||
],
|
||||
"product_id": [
|
||||
"9001",
|
||||
"9011",
|
||||
"0308"
|
||||
"0308"
|
||||
]
|
||||
}
|
||||
},
|
||||
@ -1154,15 +1436,35 @@
|
||||
"qualcomm": {
|
||||
"vendor_id": [
|
||||
"17cb",
|
||||
"05c6",
|
||||
"105b"
|
||||
"05c6",
|
||||
"105b"
|
||||
],
|
||||
"product_id": [
|
||||
"0306",
|
||||
"0308",
|
||||
"90d5",
|
||||
"9025",
|
||||
"e0ab"
|
||||
"90d5",
|
||||
"9025",
|
||||
"e0ab"
|
||||
]
|
||||
}
|
||||
},
|
||||
"neoway": {
|
||||
"unisoc": {
|
||||
"vendor_id": [
|
||||
"3763"
|
||||
],
|
||||
"product_id": [
|
||||
"3c93"
|
||||
]
|
||||
}
|
||||
},
|
||||
"telit": {
|
||||
"qualcomm": {
|
||||
"vendor_id": [
|
||||
"1bc7"
|
||||
],
|
||||
"product_id": [
|
||||
"1075"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ at()
|
||||
tom_modem -d $at_port -o a -c "$atcmd"
|
||||
}
|
||||
|
||||
|
||||
fastat()
|
||||
{
|
||||
local at_port=$1
|
||||
@ -146,6 +145,40 @@ at_get_slot()
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"neoway")
|
||||
at_res=$(at $at_port 'AT+SIMCROSS?' | grep "+SIMCROSS:" | awk -F'[ ,]' '{print $2}' | sed 's/\r//g')
|
||||
case $at_res in
|
||||
"1")
|
||||
sim_slot="1"
|
||||
;;
|
||||
"2")
|
||||
sim_slot="2"
|
||||
;;
|
||||
*)
|
||||
sim_slot="1"
|
||||
;;
|
||||
*)
|
||||
sim_slot="1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"telit")
|
||||
at_res=$(at $at_port AT#QSS? | grep "#QSS:" | awk -F',' '{print $3}' | sed 's/\r//g')
|
||||
case $at_res in
|
||||
"0")
|
||||
sim_slot="1"
|
||||
;;
|
||||
"1")
|
||||
sim_slot="2"
|
||||
;;
|
||||
*)
|
||||
sim_slot="1"
|
||||
;;
|
||||
*)
|
||||
sim_slot="1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
at_q_res=$(at $at_port AT+QSIMDET? |grep +QSIMDET: |awk -F: '{print $2}')
|
||||
at_f_res=$(at $at_port AT+GTDUALSIM? |grep +GTDUALSIM: |awk -F: '{print $2}')
|
||||
|
@ -6,5 +6,7 @@
|
||||
"sierra" : "sierra.sh",
|
||||
"simcom" : "simcom.sh",
|
||||
"huawei" : "huawei.sh",
|
||||
"foxconn" : "foxconn.sh"
|
||||
"foxconn" : "foxconn.sh",
|
||||
"neoway" : "neoway.sh",
|
||||
"telit" : "telit.sh"
|
||||
}
|
||||
|
@ -6,7 +6,9 @@ _Author="Siriling Fujr"
|
||||
_Maintainer="Fujr <fjrcn@outlook.com>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
|
||||
|
||||
vendor_get_disabled_features(){
|
||||
json_add_string "" ""
|
||||
}
|
||||
|
||||
debug_subject="fibocom_ctrl"
|
||||
#获取拨号模式
|
||||
@ -58,6 +60,11 @@ get_mode()
|
||||
"41") mode="rndis" ;;
|
||||
*) mode="$mode_num" ;;
|
||||
esac
|
||||
driver=$(get_driver)
|
||||
case "$driver" in
|
||||
"mtk_pcie")
|
||||
mode="mbim" ;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
mode="$mode_num"
|
||||
@ -72,7 +79,7 @@ get_mode()
|
||||
json_add_string "$available_mode" "0"
|
||||
fi
|
||||
done
|
||||
json_close_objectget_imei
|
||||
json_close_object
|
||||
}
|
||||
|
||||
#设置拨号模式
|
||||
@ -214,7 +221,7 @@ set_network_prefer_nr()
|
||||
esac
|
||||
|
||||
#设置模组
|
||||
at_command="AT+GTACT=$network_prefer_num"
|
||||
at_command="AT+GTACT=$network_prefer_num,6,3"
|
||||
res=$(at $at_port "$at_command")
|
||||
json_select_object "result"
|
||||
json_add_string "status" "$res"
|
||||
@ -821,8 +828,8 @@ set_lockband_nr()
|
||||
m_debug "Fibocom set lockband info"
|
||||
get_lockband_config_command="AT+GTACT?"
|
||||
get_lockband_config_res=$(at $at_port $get_lockband_config_command)
|
||||
network_prefer_config=$(echo $get_lockband_config_res |cut -d : -f 2| awk -F"," '{ print $1","$2","$3}' |tr -d ' ')
|
||||
local lock_band="$network_prefer_config,$lock_band"
|
||||
network_prefer_config=$(echo $get_lockband_config_res |cut -d : -f 2| awk -F"," '{print $1}' |tr -d ' ')
|
||||
local lock_band="$network_prefer_config,6,3,$lock_band"
|
||||
local set_lockband_command="AT+GTACT=$lock_band"
|
||||
res=$(at $at_port $set_lockband_command)
|
||||
}
|
||||
@ -1035,7 +1042,7 @@ get_bandwidth()
|
||||
"NR")
|
||||
case $bandwidth_num in
|
||||
"0") bandwidth="5" ;;
|
||||
"10"|"15"|"20"|"25"|"30"|"40"|"50"|"60"|"70"|"80"|"90"|"100"|"200"|"400") bandwidth="$bandwidth_num" ;;
|
||||
*) bandwidth=$(( $bandwidth_num / 5 )) ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
@ -1136,7 +1143,22 @@ cell_info()
|
||||
|
||||
case $rat in
|
||||
"NR")
|
||||
network_mode="NR5G-SA Mode"
|
||||
at_command='AT+GTCAINFO?'
|
||||
ca_response=$(at $at_port $at_command)
|
||||
if echo "$ca_response" | grep -q "SCC"; then
|
||||
has_ca=1
|
||||
scc_info=$(echo "$ca_response" | grep "SCC" | sed 's/\r//g')
|
||||
scc_band_num=$(echo "$scc_info" | awk -F',' '{print $3}')
|
||||
scc_arfcn=$(echo "$scc_info" | awk -F',' '{print $5}')
|
||||
scc_band=$(get_band "NR" ${scc_band_num})
|
||||
nr_scc_dl_bandwidth_num=$(echo "$scc_info" | awk -F',' '{print $6}')
|
||||
nr_scc_dl_bandwidth=$(get_bandwidth "NR" ${nr_scc_dl_bandwidth_num})
|
||||
fi
|
||||
if [ $has_ca -eq 1 ]; then
|
||||
network_mode="NR5G-SA CA Mode"
|
||||
else
|
||||
network_mode="NR5G-SA Mode"
|
||||
fi
|
||||
nr_mcc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
nr_mnc=$(echo "$response" | awk -F',' '{print $4}')
|
||||
nr_tac=$(echo "$response" | awk -F',' '{print $5}')
|
||||
@ -1145,8 +1167,10 @@ cell_info()
|
||||
nr_physical_cell_id=$(echo "$response" | awk -F',' '{print $8}')
|
||||
nr_band_num=$(echo "$response" | awk -F',' '{print $9}')
|
||||
nr_band=$(get_band "NR" ${nr_band_num})
|
||||
nr_dl_bandwidth_num=$(echo "$response" | awk -F',' '{print $10}')
|
||||
nr_dl_bandwidth_num=$(echo "$ca_response" | grep "PCC" | sed 's/\r//g' | awk -F',' '{print $4}')
|
||||
nr_dl_bandwidth=$(get_bandwidth "NR" ${nr_dl_bandwidth_num})
|
||||
nr_ul_bandwidth_num=$(echo "$ca_response" | grep "PCC" | sed 's/\r//g' | awk -F',' '{print $5}')
|
||||
nr_ul_bandwidth=$(get_bandwidth "NR" ${nr_ul_bandwidth_num})
|
||||
nr_sinr_num=$(echo "$response" | awk -F',' '{print $11}')
|
||||
nr_sinr=$(get_sinr "NR" ${nr_sinr_num})
|
||||
nr_rxlev_num=$(echo "$response" | awk -F',' '{print $12}')
|
||||
@ -1254,19 +1278,26 @@ cell_info()
|
||||
class="Cell Information"
|
||||
add_plain_info_entry "network_mode" "$network_mode" "Network Mode"
|
||||
case $network_mode in
|
||||
"NR5G-SA Mode")
|
||||
"NR5G-SA Mode"|"NR5G-SA CA Mode")
|
||||
add_plain_info_entry "MMC" "$nr_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$nr_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Duplex Mode" "$nr_duplex_mode" "Duplex Mode"
|
||||
add_plain_info_entry "Cell ID" "$nr_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$nr_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "TAC" "$nr_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
if [ $has_ca -eq 1 ]; then
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn / $scc_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band / $scc_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "${nr_dl_bandwidth}M / ${nr_scc_dl_bandwidth}M" "DL Bandwidth"
|
||||
else
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "${nr_dl_bandwidth}M" "DL Bandwidth"
|
||||
fi
|
||||
add_plain_info_entry "UL Bandwidth" "${nr_ul_bandwidth}M" "UL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_bar_info_entry "RxLev" "$nr_rxlev" "Received Signal Level" -140 -20 dBm
|
||||
add_plain_info_entry "SCS" "$nr_scs" "SCS"
|
||||
add_plain_info_entry "Srxlev" "$nr_srxlev" "Serving Cell Receive Level"
|
||||
@ -1285,9 +1316,9 @@ cell_info()
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$endc_lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$endc_lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$endc_lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$endc_lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$endc_lte_cql" "Channel Quality Indicator"
|
||||
@ -1300,9 +1331,9 @@ cell_info()
|
||||
add_plain_info_entry "ARFCN" "$endc_nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$endc_nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "SCS" "$endc_nr_scs" "SCS"
|
||||
|
||||
;;
|
||||
@ -1319,9 +1350,9 @@ cell_info()
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
|
@ -1,8 +1,20 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2025 x-shark
|
||||
|
||||
_Vendor="foxconn"
|
||||
_Author="x-shark"
|
||||
_Maintainer="x-shark <unknown>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
debug_subject="quectel_ctrl"
|
||||
debug_subject="foxconn_ctrl"
|
||||
|
||||
name=$(uci -q get qmodem.$config_section.name)
|
||||
case "$name" in
|
||||
"t99w640")
|
||||
at_pre="AT+"
|
||||
;;
|
||||
*)
|
||||
at_pre="AT^"
|
||||
;;
|
||||
esac
|
||||
|
||||
function get_imei(){
|
||||
imei=$(at $at_port "ATI" | awk -F': ' '/^IMEI:/ {print $2}' | xargs)
|
||||
@ -11,21 +23,27 @@ function get_imei(){
|
||||
|
||||
function set_imei(){
|
||||
imei=$1
|
||||
extended="80A$imei" # 添加 80A 前缀
|
||||
formatted=""
|
||||
# 添加 80A 前缀
|
||||
extended="80A${imei}"
|
||||
swapped=""
|
||||
len=${#extended}
|
||||
i=0
|
||||
while [ $i -lt ${#extended} ]; do
|
||||
byte=$(echo "$extended" | cut -c$((i+1))-$((i+2))) # 获取两个字符
|
||||
formatted="$formatted$byte,"
|
||||
while [ $i -lt $len ]; do
|
||||
pair=$(echo "$extended" | cut -c$((i+1))-$((i+2)))
|
||||
if [ ${#pair} -eq 2 ]; then
|
||||
swapped="${swapped}${pair:1:1}${pair:0:1}"
|
||||
elif [ ${#pair} -eq 1 ]; then
|
||||
swapped="${swapped}${pair:0:1}"
|
||||
fi
|
||||
i=$((i+2))
|
||||
done
|
||||
|
||||
# 去除最后的逗号
|
||||
formatted=$(echo ${formatted%,}|xargs)
|
||||
#echo "$formatted"
|
||||
# 两位分组加逗号,并转小写
|
||||
formatted=$(echo "$swapped" | sed 's/../&,/g' | sed 's/,$//' | tr 'A-Z' 'a-z')
|
||||
|
||||
at_command="at^nv=550,9,$formatted"
|
||||
res=$(at $at_port \"$at_command\")
|
||||
at $at_port $at_pre'nv=550,"0"'
|
||||
at_command=$at_pre'nv=550,9,"'$formatted'"'
|
||||
res=$(at $at_port "$at_command")
|
||||
json_select "result"
|
||||
json_add_string "set_imei" "$res"
|
||||
json_close_object
|
||||
@ -35,19 +53,19 @@ function set_imei(){
|
||||
function get_mode(){
|
||||
local mode_num
|
||||
local mode
|
||||
cfg=$(at $at_port "AT^PCIEMODE?")
|
||||
cfg=$(at $at_port $at_pre"PCIEMODE?")
|
||||
config_type=`echo -e "$cfg" | grep -o '[0-9]'`
|
||||
if [ "$config_type" = "1" ]; then
|
||||
mode_num="0"
|
||||
json_add_int disable_mode_btn 1
|
||||
json_add_int disable_mode_btn 1
|
||||
|
||||
else
|
||||
ucfg=$(at $at_port "AT+USBSWITCH?")
|
||||
config_type=$(echo "$ucfg" | grep USBSWITCH: |cut -d':' -f2|xargs)
|
||||
if [ "$config_type" = "9025" ]; then
|
||||
mode_num="1"
|
||||
elif [ "$config_type" = "90D5" ]; then
|
||||
mode_num="0"
|
||||
ucfg=$(at $at_port $at_pre"USBSWITCH?")
|
||||
config_type=$(echo "$ucfg" | grep USBSWITCH: |cut -d':' -f2|xargs)
|
||||
if [ "$config_type" = "9025" ]; then
|
||||
mode_num="1"
|
||||
elif [ "$config_type" = "90D5" ]; then
|
||||
mode_num="0"
|
||||
fi
|
||||
fi
|
||||
case "$platform" in
|
||||
@ -90,7 +108,7 @@ set_mode(){
|
||||
;;
|
||||
esac
|
||||
#设置模组
|
||||
at_command="AT+USBSWITCH=${mode_num}"
|
||||
at_command=$at_pre"USBSWITCH=${mode_num}"
|
||||
res=$(at "${at_port}" "${at_command}")
|
||||
json_select "result"
|
||||
json_add_string "set_mode" "$res"
|
||||
@ -98,7 +116,7 @@ set_mode(){
|
||||
}
|
||||
|
||||
function get_network_prefer(){
|
||||
res=$(at $at_port "AT^SLMODE?"| grep -o '[0-9]\+' | tr -d '\n' | tr -d ' ')
|
||||
res=$(at $at_port $at_pre"SLMODE?"| grep -o '[0-9]\+' | tr -d '\n' | tr -d ' ')
|
||||
# (RAT index):
|
||||
# 0 Automatically
|
||||
# 1 WCDMA Only
|
||||
@ -187,7 +205,7 @@ function set_network_prefer(){
|
||||
code="10"
|
||||
;;
|
||||
esac
|
||||
res=$(at $at_port "AT^SLMODE=$(echo "$code" | awk '{print substr($0,1,1) "," substr($0,2,1)}')")
|
||||
res=$(at $at_port $at_pre"SLMODE=$(echo "$code" | awk '{print substr($0,1,1) "," substr($0,2,1)}')")
|
||||
json_add_string "code" "$code"
|
||||
json_add_string "result" "$res"
|
||||
}
|
||||
@ -211,12 +229,12 @@ function sim_info()
|
||||
#IMEI(国际移动设备识别码)
|
||||
imei=$(at $at_port "ATI" | awk -F': ' '/^IMEI:/ {print $2}' | xargs)
|
||||
|
||||
at_command="at^switch_slot?"
|
||||
at_command=$at_pre"switch_slot?"
|
||||
sim_slot=$(at $at_port $at_command | grep ENABLE|grep -o 'SIM[0-9]*')
|
||||
|
||||
#SIM Status(SIM状态)
|
||||
at_command="AT+CPIN?"
|
||||
sim_status=$(at $at_port $at_command | grep "+CPIN:")
|
||||
sim_status=$(at $at_port $at_command | grep "+CPIN:")
|
||||
sim_status=${sim_status:7:-1}
|
||||
#lowercase
|
||||
sim_status=$(echo $sim_status | tr A-Z a-z)
|
||||
@ -238,15 +256,15 @@ function sim_info()
|
||||
fi
|
||||
|
||||
at_command="AT+CNUM"
|
||||
sim_number=$(at $at_port $at_command | awk -F'"' '{print $2}'|xargs)
|
||||
sim_number=$(at $at_port $at_command | awk -F'"' '{print $2}'|xargs)
|
||||
|
||||
#IMSI(国际移动用户识别码)
|
||||
at_command="AT+CIMI"
|
||||
imsi=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
imsi=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
|
||||
#ICCID(集成电路卡识别码)
|
||||
at_command="AT+ICCID"
|
||||
iccid=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g'|sed 's/[^0-9]*//g')
|
||||
iccid=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g'|sed 's/[^0-9]*//g')
|
||||
case "$sim_status" in
|
||||
"ready")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
@ -299,114 +317,121 @@ function network_info() {
|
||||
local rat_num=$(at ${at_port} ${at_command} | grep "+COPS:" | awk -F',' '{print $4}' | sed 's/\r//g')
|
||||
network_type=$(get_rat ${rat_num})
|
||||
}
|
||||
#at_command='AT^debug?'
|
||||
#at_command='AT+debug?'
|
||||
#response=$(at $at_port $at_command)
|
||||
#lte_sinr=$(echo "$response"|awk -F'lte_snr:' '{print $2}'|awk '{print $1}|xargs)
|
||||
add_plain_info_entry "Network Type" "$network_type" "Network Type"
|
||||
}
|
||||
|
||||
function vendor_get_disabled_features(){
|
||||
json_add_string "" "IMEI"
|
||||
json_add_string "" "NeighborCell"
|
||||
}
|
||||
|
||||
get_lockband_nr()
|
||||
{
|
||||
#local at_port="$1"
|
||||
m_debug "Quectel sdx55 get lockband info"
|
||||
wcdma_avalible_band="1,2,3,4,5,6,7,8,9,19"
|
||||
lte_avalible_band="1,2,3,4,5,7,8,12,13,14,17,18,19,20,25,26,28,29,30,32,34,38,39,40,41,42,66,71"
|
||||
sa_nr_avalible_band="1,2,3,5,7,8,12,20,25,28,38,40,41,48,66,71,77,78,79"
|
||||
bands_command="AT^BAND_PREF?"
|
||||
bands_command=$at_pre"BAND_PREF?"
|
||||
get_lockbans=$(at $at_port $bands_command)
|
||||
gw_band=$(echo "$get_lockbans" | grep "WCDMA,Enable Bands" | cut -d':' -f2 | tr -d ' '|tr ',' ' '|xargs)
|
||||
lte_band=$(echo "$get_lockbans" | grep "LTE,Enable Bands" | cut -d':' -f2 | tr -d ' '|tr ',' ' ')
|
||||
sa_nr_band=$(echo "$get_lockbans" | grep "NR5G,Enable Bands" | cut -d':' -f2 | tr -d ' '|tr ',' ' ')
|
||||
|
||||
# WCDMA
|
||||
wcdma_enable=$(echo "$get_lockbans" | grep "WCDMA,Enable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
wcdma_disable=$(echo "$get_lockbans" | grep "WCDMA,Disable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
wcdma_enable=$(echo "$wcdma_enable" | tr ' ' '\n' | grep -v '^$')
|
||||
wcdma_disable=$(echo "$wcdma_disable" | tr ' ' '\n' | grep -v '^$')
|
||||
wcdma_all=$(echo "$wcdma_enable $wcdma_disable" | tr ' ' '\n' | grep -v '^$' | sort -n | uniq)
|
||||
|
||||
# LTE
|
||||
lte_enable=$(echo "$get_lockbans" | grep "LTE,Enable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
lte_disable=$(echo "$get_lockbans" | grep "LTE,Disable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
lte_enable=$(echo "$lte_enable" | tr ' ' '\n' | grep -v '^$')
|
||||
lte_disable=$(echo "$lte_disable" | tr ' ' '\n' | grep -v '^$')
|
||||
lte_all=$(echo "$lte_enable $lte_disable" | tr ' ' '\n' | grep -v '^$' | sort -n | uniq)
|
||||
|
||||
# NR5G_NSA
|
||||
nr_nsa_enable=$(echo "$get_lockbans" | grep "NR5G_NSA,Enable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
nr_nsa_disable=$(echo "$get_lockbans" | grep "NR5G_NSA,Disable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
nr_nsa_enable=$(echo "$nr_nsa_enable" | tr ' ' '\n' | grep -v '^$')
|
||||
nr_nsa_disable=$(echo "$nr_nsa_disable" | tr ' ' '\n' | grep -v '^$')
|
||||
nr_nsa_all=$(echo "$nr_nsa_enable $nr_nsa_disable" | tr ' ' '\n' | grep -v '^$' | sort -n | uniq)
|
||||
|
||||
# NR5G_SA
|
||||
nr_sa_enable=$(echo "$get_lockbans" | grep "NR5G_SA,Enable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
nr_sa_disable=$(echo "$get_lockbans" | grep "NR5G_SA,Disable Bands" | cut -d':' -f2 | tr -d ' ' | tr ',' ' ')
|
||||
nr_sa_enable=$(echo "$nr_sa_enable" | tr ' ' '\n' | grep -v '^$')
|
||||
nr_sa_disable=$(echo "$nr_sa_disable" | tr ' ' '\n' | grep -v '^$')
|
||||
nr_sa_all=$(echo "$nr_sa_enable $nr_sa_disable" | tr ' ' '\n' | grep -v '^$' | sort -n | uniq)
|
||||
|
||||
# UMTS
|
||||
json_add_object "UMTS"
|
||||
json_add_array "available_band"
|
||||
for i in $wcdma_all; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && add_avalible_band_entry "$i" "UMTS_$i"
|
||||
done
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_object
|
||||
json_close_object
|
||||
json_add_object "LTE"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
json_add_object "NR"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
for i in $wcdma_enable; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && json_add_string "" "$i"
|
||||
done
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
for i in $(echo "$wcdma_avalible_band" | awk -F"," '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "UMTS"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "UMTS_$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
for i in $(echo "$lte_avalible_band" | awk -F"," '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "LTE"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "LTE_B$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
for i in $(echo "$sa_nr_avalible_band" | awk -F"," '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "NR"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "NR_N$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
#+QNWPREFCFG: "nr5g_band",1:3:7:20:28:40:41:71:77:78:79
|
||||
for i in $(echo "$gw_band"); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "UMTS"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
for i in $(echo "$lte_band" | cut -d, -f2|tr -d '\r' | awk -F":" '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "LTE"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
for i in $(echo "$sa_nr_band" | cut -d, -f2|tr -d '\r' | awk -F":" '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "NR"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
# LTE
|
||||
json_add_object "LTE"
|
||||
json_add_array "available_band"
|
||||
for i in $lte_all; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && add_avalible_band_entry "$i" "LTE_B$i"
|
||||
done
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
for i in $lte_enable; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && json_add_string "" "$i"
|
||||
done
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
# NR_NSA
|
||||
json_add_object "NR_NSA"
|
||||
json_add_array "available_band"
|
||||
for i in $nr_nsa_all; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && add_avalible_band_entry "$i" "NR_NSA_N$i"
|
||||
done
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
for i in $nr_nsa_enable; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && json_add_string "" "$i"
|
||||
done
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
# NR_SA
|
||||
json_add_object "NR_SA"
|
||||
json_add_array "available_band"
|
||||
for i in $nr_sa_all; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && add_avalible_band_entry "$i" "NR_SA_N$i"
|
||||
done
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
for i in $nr_sa_enable; do
|
||||
echo "$i" | grep -Eq '^[0-9]+$' && json_add_string "" "$i"
|
||||
done
|
||||
json_close_array
|
||||
json_close_object
|
||||
}
|
||||
|
||||
set_lockband_nr(){
|
||||
#lock_band=$(echo $lock_band | tr ',' ':')
|
||||
case "$band_class" in
|
||||
"UMTS")
|
||||
lock_band=$(echo $lock_band)
|
||||
at_command="AT^BAND_PREF=WCDMA,2,$lock_band"
|
||||
lock_band=$(echo $lock_band)
|
||||
at_command=$at_pre"BAND_PREF=WCDMA,2,$lock_band"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
"LTE")
|
||||
at_command="AT^BAND_PREF=LTE,2,$lock_band"
|
||||
at_command=$at_pre"BAND_PREF=LTE,2,$lock_band"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
"NR")
|
||||
at_command="AT^BAND_PREF=NR5G,2,$lock_band"
|
||||
at_command=$at_pre"BAND_PREF=NR5G,2,$lock_band"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
esac
|
||||
@ -440,7 +465,7 @@ function _get_voltage(){
|
||||
}
|
||||
|
||||
function _get_temperature(){
|
||||
temperature=$(at $at_port "at^temp?" | sed -n 's/.*TSENS: \([0-9]*\)C.*/\1/p' )
|
||||
temperature=$(at $at_port $at_pre"temp?" | sed -n 's/.*TSENS: \([0-9]*\)C.*/\1/p' )
|
||||
[ -n "$temperature" ] && {
|
||||
add_plain_info_entry "temperature" "$temperature C" "Temperature"
|
||||
}
|
||||
@ -504,29 +529,48 @@ function _band_list_to_mask()
|
||||
echo "$low,$high"
|
||||
}
|
||||
|
||||
function process_signal_value() {
|
||||
local value="$1"
|
||||
local numbers=$(echo "$value" | grep -oE '[-+]?[0-9]+(\.[0-9]+)?')
|
||||
local count=0
|
||||
local total=0
|
||||
|
||||
for num in $numbers; do
|
||||
total=$(echo "$total + $num" | bc -l)
|
||||
count=$((count+1))
|
||||
done
|
||||
|
||||
if [ $count -gt 0 ]; then
|
||||
echo "scale=2; $total / $count" | bc -l | sed 's/^\./0./' | sed 's/^-\./-0./'
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
cell_info(){
|
||||
class="Cell Information"
|
||||
at_command='AT^debug?'
|
||||
at_command=$at_pre"debug?"
|
||||
response=$(at $at_port $at_command)
|
||||
network_mode=$(echo "$response"|awk -F'RAT:' '{print $2}'|xargs)
|
||||
#add_plain_info_entry "network_mode" "$network_mode" "Network Mode"
|
||||
|
||||
|
||||
case $network_mode in
|
||||
"LTE")
|
||||
lte_mcc=$(echo "$response"|awk -F'mcc:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
lte_mnc=$(echo "$response"|awk -F'mnc:' '{print $2}'|xargs)
|
||||
lte_earfcn=$(echo "$response"|awk -F'channel:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_physical_cell_id=$(echo "$response"|awk -F'pci:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_cell_id=$(echo "$response"|awk -F'lte_cell_id:' '{print $2}'|xargs)
|
||||
lte_band=$(echo "$response"|awk -F'lte_band:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_freq_band_ind=$(echo "$response"|awk -F'lte_band_width:' '{print $2}'|xargs)
|
||||
lte_sinr=$(echo "$response"|awk -F'lte_snr:' '{print $2}'|awk '{print $1}'|sed -n 's/[^0-9.-]*\([+-]*[0-9]*\.[0-9]*\)[^0-9.-]*/\1/p'|xargs)
|
||||
lte_rsrq=$(echo "$response"|awk -F'rsrq:' '{print $2}'|sed -n 's/[^0-9.-]*\([+-]*[0-9]*\.[0-9]*\)[^0-9.-]*/\1/p'|xargs)
|
||||
lte_rssi=$(echo "$response"|awk -F'lte_rssi:' '{print $2}'|awk -F',' '{print $1}'|sed -n 's/[^0-9.-]*\([+-]*[0-9]*\.[0-9]*\)[^0-9.-]*/\1/p'|xargs)
|
||||
#lte_rssnr=$(echo "$response"|
|
||||
lte_tac=$(echo "$response"|awk -F'lte_tac:' '{print $2}'|xargs)
|
||||
lte_tx_power=$(echo "$response"|awk -F'lte_tx_pwr:' '{print $2}'|xargs)
|
||||
lte_mcc=$(echo "$response"|awk -F'mcc:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
lte_mnc=$(echo "$response"|awk -F'mnc:' '{print $2}'|xargs)
|
||||
lte_earfcn=$(echo "$response"|awk -F'channel:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_physical_cell_id=$(echo "$response"|awk -F'pci:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_cell_id=$(echo "$response"|awk -F'lte_cell_id:' '{print $2}'|xargs)
|
||||
lte_band=$(echo "$response"|awk -F'lte_band:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
lte_freq_band_ind=$(echo "$response"|awk -F'lte_band_width:' '{print $2}'|xargs)
|
||||
lte_sinr=$(echo "$response"|awk -F'lte_snr:' '{print $2}'|awk '{print $1}'|xargs)
|
||||
lte_sinr=$(process_signal_value "$lte_sinr")
|
||||
lte_rsrq=$(echo "$response"|awk -F'rsrq:' '{print $2}'|xargs)
|
||||
lte_rsrq=$(process_signal_value "$lte_rsrq")
|
||||
lte_rssi=$(echo "$response"|awk -F'lte_rssi:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
lte_rssi=$(process_signal_value "$lte_rssi")
|
||||
lte_tac=$(echo "$response"|awk -F'lte_tac:' '{print $2}'|xargs)
|
||||
lte_tx_power=$(echo "$response"|awk -F'lte_tx_pwr:' '{print $2}'|xargs)
|
||||
|
||||
add_plain_info_entry "MCC" "$lte_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$lte_mnc" "Mobile Network Code"
|
||||
@ -539,9 +583,9 @@ cell_info(){
|
||||
#add_plain_info_entry "UL Bandwidth" "$lte_ul_bandwidth" "UL Bandwidth"
|
||||
#add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -44 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
#add_plain_info_entry "RxLev" "$lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
#add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
@ -549,21 +593,41 @@ cell_info(){
|
||||
#add_plain_info_entry "Srxlev" "$lte_srxlev" "Serving Cell Receive Level"
|
||||
;;
|
||||
"NR5G_SA")
|
||||
has_ca=$(echo "$response" | grep -c "nr_scc1:")
|
||||
nr_display_mode="$network_mode"
|
||||
|
||||
nr_mcc=$(echo "$response"|awk -F'mcc:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
nr_mnc=$(echo "$response"|awk -F'mnc:' '{print $2}'|xargs)
|
||||
nr_earfcn=$(echo "$response"|awk -F'channel:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
nr_physical_cell_id=$(echo "$response"|awk -F'pci:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
nr_cell_id=$(echo "$response"|awk -F'nr_cell_id:' '{print $2}'|xargs)
|
||||
nr_band=$(echo "$response"|awk -F'nr_band:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
nr_band_width=$(echo "$response"|awk -F'nr_band_width:' '{print $2}'|awk -F' ' '{print $1}'|xargs)
|
||||
nr_freq_band_ind=$(echo "$response"|awk -F'lte_band_width:' '{print $2}'|xargs)
|
||||
nr_sinr=$(echo "$response"|awk -F'nr_snr:' '{print $2}'|awk '{print $1}'|xargs)
|
||||
nr_sinr=$(process_signal_value "$nr_sinr")
|
||||
nr_rsrq=$(echo "$response"|awk -F'rsrq:' '{print $2}'|xargs)
|
||||
nr_rsrp=$(echo "$response"|awk -F'rsrp:' '{print $2}'|awk '{print $1}'|xargs)
|
||||
lte_rssi=$(echo "$response"|awk -F'nr_rssi:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
#lte_rssnr=$(echo "$response"|
|
||||
nr_rsrq=$(process_signal_value "$nr_rsrq")
|
||||
nr_rsrp=$(echo "$response"|awk -F'rsrp:' '{print $2}'|awk '{print $1}'|xargs)
|
||||
nr_rsrp=$(process_signal_value "$nr_rsrp")
|
||||
nr_rssi=$(echo "$response"|awk -F'nr_rssi:' '{print $2}'|awk -F',' '{print $1}'|xargs)
|
||||
nr_rssi=$(process_signal_value "$nr_rssi")
|
||||
nr_tac=$(echo "$response"|awk -F'nr_tac:' '{print $2}'|xargs)
|
||||
#nr_tx_power=$(echo "$response"|awk -F'lte_tx_pwr:' '{print $2}'|xargs)
|
||||
nr_tx_power=$(echo "$response"|awk -F'nr_tx_pwr:' '{print $2}'|xargs)
|
||||
|
||||
if [ "$has_ca" -gt 0 ]; then
|
||||
nr_display_mode="NR5G_SA-CA"
|
||||
|
||||
scc1_band=$(echo "$response" | awk -F'nr_scc1:' '{print $2}' | awk -F'nr_band:' '{print $2}' | awk -F' ' '{print $1}' | xargs)
|
||||
scc1_band_width=$(echo "$response" | awk -F'nr_scc1:' '{print $2}' | awk -F'nr_band_width:' '{print $2}' | awk -F' ' '{print $1}' | xargs)
|
||||
|
||||
nr_band="$nr_band $scc1_band"
|
||||
nr_band_width="$nr_band_width $scc1_band_width"
|
||||
fi
|
||||
|
||||
add_plain_info_entry "Network Mode" "$nr_display_mode" "Network Mode"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$nr_band_width" "DL Bandwidth"
|
||||
add_plain_info_entry "MCC" "$nr_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$nr_mnc" "Mobile Network Code"
|
||||
#add_plain_info_entry "Duplex Mode" "$lte_duplex_mode" "Duplex Mode"
|
||||
@ -571,22 +635,11 @@ cell_info(){
|
||||
add_plain_info_entry "Physical Cell ID" "$nr_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "EARFCN" "$nr_earfcn" "E-UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "Freq band indicator" "$nr_freq_band_ind" "Freq band indicator"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
#add_plain_info_entry "UL Bandwidth" "$nr_ul_bandwidth" "UL Bandwidth"
|
||||
#add_plain_info_entry "DL Bandwidth" "$nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$nr_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -20 40 dBm
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
#add_bar_info_entry "RSSI" "$nr_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
#add_plain_info_entry "RxLev" "$nr_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$nr_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
#add_plain_info_entry "CQI" "$nr_cql" "Channel Quality Indicator"
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "TX Power" "$nr_tx_power" "TX Power"
|
||||
#add_plain_info_entry "Srxlev" "$nr_srxlev" "Serving Cell Receive Level"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
648
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/huawei.sh
vendored
Executable file
648
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/huawei.sh
vendored
Executable file
@ -0,0 +1,648 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2025 coolsnowwolf <coolsnowwolf@gmail.com>
|
||||
_Vendor="huawei"
|
||||
_Author="Lean"
|
||||
_Maintainer="Lean <coolsnowwolf@gmail.com>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
debug_subject="quectel_ctrl"
|
||||
|
||||
vendor_get_disabled_features(){
|
||||
json_add_string "" "LockBand"
|
||||
}
|
||||
|
||||
function get_imei(){
|
||||
imei=$(at $at_port "AT+CGSN" | grep -o '[0-9]\{15\}')
|
||||
json_add_string imei $imei
|
||||
}
|
||||
|
||||
function set_imei(){
|
||||
imei=$1
|
||||
at $at_port "at^phynum=IMEI,$imei"
|
||||
}
|
||||
|
||||
function get_mode(){
|
||||
cfg=$(at $at_port "AT^SETMODE?")
|
||||
local mode_num=`echo -e "$cfg" | sed -n '2p' | sed 's/\r//g'`
|
||||
|
||||
case "$mode_num" in
|
||||
"0"|"2") mode="ecm" ;;
|
||||
"1"|"3"|"4"|"5") mode="ncm" ;;
|
||||
"6") mode="rndis" ;;
|
||||
"7") mode="mbim" ;;
|
||||
"8") mode="ppp" ;;
|
||||
*) mode="rndis" ;;
|
||||
esac
|
||||
|
||||
available_modes=$(uci -q get qmodem.$config_section.modes)
|
||||
json_add_object "mode"
|
||||
for available_mode in $available_modes; do
|
||||
if [ "$mode" = "$available_mode" ]; then
|
||||
json_add_string "$available_mode" "1"
|
||||
else
|
||||
json_add_string "$available_mode" "0"
|
||||
fi
|
||||
done
|
||||
json_close_object
|
||||
}
|
||||
|
||||
function set_mode(){
|
||||
local mode=$1
|
||||
local mode_num
|
||||
case $mode in
|
||||
"ecm")
|
||||
mode_num="0"
|
||||
;;
|
||||
"ncm")
|
||||
mode_num="4"
|
||||
;;
|
||||
*)
|
||||
mode_num="0"
|
||||
;;
|
||||
esac
|
||||
at $at_port "AT^SETMODE=${mode_num}"
|
||||
}
|
||||
|
||||
function get_scs()
|
||||
{
|
||||
local scs
|
||||
case $1 in
|
||||
"0") scs="15" ;;
|
||||
"1") scs="30" ;;
|
||||
"2") scs="60" ;;
|
||||
"3") scs="120" ;;
|
||||
"4") scs="240" ;;
|
||||
*) scs=$(awk "BEGIN{ print 2^$1 * 15 }") ;;
|
||||
esac
|
||||
echo "$scs"
|
||||
}
|
||||
|
||||
function get_network_prefer(){
|
||||
res=$(at $at_port "AT^SYSCFGEX?"| grep "\^SYSCFGEX:" | sed 's/\^SYSCFGEX://g')
|
||||
# (RAT index):
|
||||
# • 00 – Automatic
|
||||
# • 01 – UMTS 3G only
|
||||
# • 04 – LTE only
|
||||
# • 05 – 5G only
|
||||
# • 0E – UMTS and LTE only
|
||||
# • 0F – LTE and NR5G only
|
||||
# • 10 – WCDMA and NR5G only
|
||||
local network_type_num=$(echo "$res" | awk -F'"' '{print $2}')
|
||||
|
||||
#获取网络类型
|
||||
local network_prefer_3g="0"
|
||||
local network_prefer_4g="0"
|
||||
local network_prefer_5g="0"
|
||||
|
||||
#匹配不同的网络类型
|
||||
local auto=$(echo "${network_type_num}" | grep "00")
|
||||
|
||||
if [ -n "$auto" ]; then
|
||||
network_prefer_2g="1"
|
||||
network_prefer_3g="1"
|
||||
network_prefer_4g="1"
|
||||
network_prefer_5g="1"
|
||||
else
|
||||
local wcdma=$(echo "${network_type_num}" | grep "02")
|
||||
local lte=$(echo "${network_type_num}" | grep "03")
|
||||
local nr=$(echo "${network_type_num}" | grep "08")
|
||||
|
||||
if [ -n "$wcdma" ]; then
|
||||
network_prefer_3g="1"
|
||||
fi
|
||||
if [ -n "$lte" ]; then
|
||||
network_prefer_4g="1"
|
||||
fi
|
||||
if [ -n "$nr" ]; then
|
||||
network_prefer_5g="1"
|
||||
fi
|
||||
fi
|
||||
json_add_object network_prefer
|
||||
json_add_string 3G $network_prefer_3g
|
||||
json_add_string 4G $network_prefer_4g
|
||||
json_add_string 5G $network_prefer_5g
|
||||
json_close_array
|
||||
}
|
||||
|
||||
function set_network_prefer(){
|
||||
local network_prefer_3g=$(echo $1 |jq -r 'contains(["3G"])')
|
||||
local network_prefer_4g=$(echo $1 |jq -r 'contains(["4G"])')
|
||||
local network_prefer_5g=$(echo $1 |jq -r 'contains(["5G"])')
|
||||
count=$(echo $1 | jq -r 'length')
|
||||
case "$count" in
|
||||
"1")
|
||||
if [ "$network_prefer_3g" = "true" ]; then
|
||||
code="02"
|
||||
elif [ "$network_prefer_4g" = "true" ]; then
|
||||
code="03"
|
||||
elif [ "$network_prefer_5g" = "true" ]; then
|
||||
code="08"
|
||||
fi
|
||||
;;
|
||||
"2")
|
||||
if [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_4g" = "true" ]; then
|
||||
code="02"
|
||||
elif [ "$network_prefer_4g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
code="03"
|
||||
elif [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
code="08"
|
||||
fi
|
||||
;;
|
||||
"3")
|
||||
code="080302"
|
||||
;;
|
||||
*)
|
||||
code="00"
|
||||
;;
|
||||
esac
|
||||
|
||||
at_command='AT^SYSCFGEX="'${code}'",40000000,1,2,40000000,,'
|
||||
res=$(at $at_port "${at_command}")
|
||||
json_add_string "code" "$code"
|
||||
json_add_string "result" "$res"
|
||||
}
|
||||
|
||||
function get_lockband(){
|
||||
json_add_object "lockband"
|
||||
case $platform in
|
||||
*)
|
||||
_get_lockband_nr
|
||||
;;
|
||||
esac
|
||||
json_close_object
|
||||
}
|
||||
|
||||
function set_lockband(){
|
||||
config=$1
|
||||
band_class=$(echo $config | jq -r '.band_class')
|
||||
lock_band=$(echo $config | jq -r '.lock_band')
|
||||
case $platform in
|
||||
*)
|
||||
_set_lockband_nr
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function sim_info()
|
||||
{
|
||||
class="SIM Information"
|
||||
|
||||
sim_slot="1"
|
||||
|
||||
#SIM Status(SIM状态)
|
||||
at_command="AT+CPIN?"
|
||||
sim_status=$(at $at_port $at_command | grep "+CPIN:")
|
||||
sim_status=${sim_status:7:-1}
|
||||
#lowercase
|
||||
sim_status=$(echo $sim_status | tr A-Z a-z)
|
||||
|
||||
#SIM Number(SIM卡号码,手机号)
|
||||
at_command="AT+CNUM"
|
||||
sim_number=$(at $at_port $at_command | grep "+CNUM: " | awk -F'"' '{print $2}')
|
||||
[ -z "$sim_number" ] && {
|
||||
sim_number=$(at $at_port $at_command | grep "+CNUM: " | awk -F'"' '{print $4}')
|
||||
}
|
||||
|
||||
#IMSI(国际移动用户识别码)
|
||||
at_command="AT+CIMI"
|
||||
imsi=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
|
||||
#IMEI(国际移动设备识别码)
|
||||
at_command="AT+CGSN"
|
||||
imei=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "SIM Slot" "$sim_slot" "SIM Slot"
|
||||
add_plain_info_entry "SIM Number" "$sim_number" "SIM Number"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
add_plain_info_entry "IMSI" "$imsi" "International Mobile Subscriber Identity"
|
||||
}
|
||||
|
||||
function base_info(){
|
||||
#Name(名称)
|
||||
at_command="AT+CGMM"
|
||||
name=$(at $at_port $at_command | grep -v "OK" | sed -n '2p' | sed 's/\r//g')
|
||||
#Manufacturer(制造商)
|
||||
at_command="AT+CGMI"
|
||||
manufacturer=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
#Revision(固件版本)
|
||||
at_command="ATI"
|
||||
revision=$(at $at_port $at_command | grep "Revision:" | sed 's/Revision: //g' | sed 's/\r//g')
|
||||
# at_command="AT+CGMR"
|
||||
# revision=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
class="Base Information"
|
||||
add_plain_info_entry "manufacturer" "$manufacturer" "Manufacturer"
|
||||
add_plain_info_entry "revision" "$revision" "Revision"
|
||||
add_plain_info_entry "at_port" "$at_port" "AT Port"
|
||||
get_connect_status
|
||||
_get_temperature
|
||||
}
|
||||
|
||||
cell_info()
|
||||
{
|
||||
at_command="AT^MONSC"
|
||||
response=$(at $at_port $at_command | grep "\^MONSC:" | sed 's/\^MONSC: //')
|
||||
|
||||
local rat=$(echo "$response" | awk -F',' '{print $1}')
|
||||
case $rat in
|
||||
"NR"|"NR-5GC")
|
||||
network_mode="NR5G-SA Mode"
|
||||
nr_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
nr_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
nr_arfcn=$(echo "$response" | awk -F',' '{print $4}')
|
||||
nr_scs_num=$(echo "$response" | awk -F',' '{print $5}')
|
||||
nr_scs=$(get_scs ${nr_scs_num})
|
||||
nr_cell_id_hex=$(echo "$response" | awk -F',' '{print $6}')
|
||||
nr_cell_id=$(echo "ibase=16; $nr_cell_id_hex" | bc)
|
||||
nr_physical_cell_id_hex=$(echo "$response" | awk -F',' '{print $7}')
|
||||
nr_physical_cell_id=$(echo "ibase=16; $nr_physical_cell_id_hex" | bc)
|
||||
nr_tac=$(echo "$response" | awk -F',' '{print $8}')
|
||||
nr_rsrp=$(echo "$response" | awk -F',' '{print $9}')
|
||||
nr_rsrq=$(echo "$response" | awk -F',' '{print $10}')
|
||||
nr_sinr=$(echo "$response" | awk -F',' '{print $11}' | sed 's/\r//g')
|
||||
;;
|
||||
"LTE-NR")
|
||||
network_mode="EN-DC Mode"
|
||||
#LTE
|
||||
endc_lte_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
endc_lte_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
endc_lte_earfcn=$(echo "$response" | awk -F',' '{print $4}')
|
||||
endc_lte_cell_id_hex=$(echo "$response" | awk -F',' '{print $5}')
|
||||
endc_lte_cell_id=$(echo "ibase=16; $endc_lte_cell_id_hex" | bc)
|
||||
endc_lte_physical_cell_id_hex=$(echo "$response" | awk -F',' '{print $6}')
|
||||
endc_lte_physical_cell_id=$(echo "ibase=16; $endc_lte_physical_cell_id_hex" | bc)
|
||||
endc_lte_tac=$(echo "$response" | awk -F',' '{print $7}')
|
||||
endc_lte_rsrp=$(echo "$response" | awk -F',' '{print $8}')
|
||||
endc_lte_rsrq=$(echo "$response" | awk -F',' '{print $9}')
|
||||
endc_lte_rxlev=$(echo "$response" | awk -F',' '{print $10}' | sed 's/\r//g')
|
||||
#NR5G-NSA
|
||||
endc_nr_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
endc_nr_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
endc_nr_arfcn=$(echo "$response" | awk -F',' '{print $4}')
|
||||
endc_nr_scs_num=$(echo "$response" | awk -F',' '{print $5}')
|
||||
nr_scs=$(get_scs ${nr_scs_num})
|
||||
endc_nr_cell_id_hex=$(echo "$response" | awk -F',' '{print $6}')
|
||||
endc_nr_cell_id=$(echo "ibase=16; $endc_nr_cell_id_hex" | bc)
|
||||
endc_nr_physical_cell_id_hex=$(echo "$response" | awk -F',' '{print $7}')
|
||||
endc_nr_physical_cell_id=$(echo "ibase=16; $endc_nr_physical_cell_id_hex" | bc)
|
||||
endc_nr_tac=$(echo "$response" | awk -F',' '{print $8}')
|
||||
endc_nr_rsrp=$(echo "$response" | awk -F',' '{print $9}')
|
||||
endc_nr_rsrq=$(echo "$response" | awk -F',' '{print $10}')
|
||||
endc_nr_sinr=$(echo "$response" | awk -F',' '{print $11}' | sed 's/\r//g')
|
||||
;;
|
||||
"LTE"|"eMTC"|"NB-IoT")
|
||||
network_mode="LTE Mode"
|
||||
lte_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
lte_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
lte_earfcn=$(echo "$response" | awk -F',' '{print $4}')
|
||||
lte_cell_id_hex=$(echo "$response" | awk -F',' '{print $5}')
|
||||
lte_cell_id=$(echo "ibase=16; $lte_cell_id_hex" | bc)
|
||||
lte_physical_cell_id_hex=$(echo "$response" | awk -F',' '{print $6}')
|
||||
lte_physical_cell_id=$(echo "ibase=16; $lte_physical_cell_id_hex" | bc)
|
||||
lte_tac=$(echo "$response" | awk -F',' '{print $7}')
|
||||
lte_rsrp=$(echo "$response" | awk -F',' '{print $8}')
|
||||
lte_rsrq=$(echo "$response" | awk -F',' '{print $9}')
|
||||
lte_rxlev=$(echo "$response" | awk -F',' '{print $10}' | sed 's/\r//g')
|
||||
;;
|
||||
"WCDMA"|"TD-SCDMA"|"UMTS")
|
||||
network_mode="WCDMA Mode"
|
||||
wcdma_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
wcdma_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
wcdma_arfcn=$(echo "$response" | awk -F',' '{print $4}')
|
||||
wcdma_psc=$(echo "$response" | awk -F',' '{print $5}')
|
||||
wcdma_cell_id_hex=$(echo "$response" | awk -F',' '{print $6}')
|
||||
wcdma_cell_id=$(echo "ibase=16; $wcdma_cell_id_hex" | bc)
|
||||
wcdma_lac=$(echo "$response" | awk -F',' '{print $7}')
|
||||
wcdma_rscp=$(echo "$response" | awk -F',' '{print $8}')
|
||||
wcdma_rxlev=$(echo "$response" | awk -F',' '{print $9}')
|
||||
wcdma_ecn0=$(echo "$response" | awk -F',' '{print $10}')
|
||||
wcdma_drx=$(echo "$response" | awk -F',' '{print $11}')
|
||||
wcdma_ura=$(echo "$response" | awk -F',' '{print $12}' | sed 's/\r//g')
|
||||
;;
|
||||
"GSM")
|
||||
network_mode="GSM Mode"
|
||||
gsm_mcc=$(echo "$response" | awk -F',' '{print $2}')
|
||||
gsm_mnc=$(echo "$response" | awk -F',' '{print $3}')
|
||||
gsm_band_num=$(echo "$response" | awk -F',' '{print $4}')
|
||||
gsm_band=$(tdtech_get_band "GSM" ${gsm_band_num})
|
||||
gsm_arfcn=$(echo "$response" | awk -F',' '{print $5}')
|
||||
gsm_bsic=$(echo "$response" | awk -F',' '{print $6}')
|
||||
gsm_cell_id_hex=$(echo "$response" | awk -F',' '{print $7}')
|
||||
gsm_cell_id=$(echo "ibase=16; $gsm_cell_id_hex" | bc)
|
||||
gsm_lac=$(echo "$response" | awk -F',' '{print $8}')
|
||||
gsm_rxlev=$(echo "$response" | awk -F',' '{print $9}')
|
||||
gsm_rx_quality=$(echo "$response" | awk -F',' '{print $10}')
|
||||
gsm_ta=$(echo "$response" | awk -F',' '{print $11}' | sed 's/\r//g')
|
||||
;;
|
||||
esac
|
||||
|
||||
class="Cell Information"
|
||||
add_plain_info_entry "network_mode" "$network_mode" "Network Mode"
|
||||
case $network_mode in
|
||||
"NR5G-SA Mode")
|
||||
add_plain_info_entry "MMC" "$nr_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$nr_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Duplex Mode" "$nr_duplex_mode" "Duplex Mode"
|
||||
add_plain_info_entry "Cell ID" "$nr_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$nr_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "TAC" "$nr_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_plain_info_entry "RxLev" "$nr_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "SCS" "$nr_scs" "SCS"
|
||||
add_plain_info_entry "Srxlev" "$nr_srxlev" "Serving Cell Receive Level"
|
||||
;;
|
||||
"EN-DC Mode")
|
||||
add_plain_info_entry "LTE" "LTE" ""
|
||||
add_plain_info_entry "MCC" "$endc_lte_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$endc_lte_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Duplex Mode" "$endc_lte_duplex_mode" "Duplex Mode"
|
||||
add_plain_info_entry "Cell ID" "$endc_lte_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$endc_lte_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "EARFCN" "$endc_lte_earfcn" "E-UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "Freq band indicator" "$endc_lte_freq_band_ind" "Freq band indicator"
|
||||
add_plain_info_entry "Band" "$endc_lte_band" "Band"
|
||||
add_plain_info_entry "UL Bandwidth" "$endc_lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$endc_lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$endc_lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_plain_info_entry "RxLev" "$endc_lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$endc_lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$endc_lte_cql" "Channel Quality Indicator"
|
||||
add_plain_info_entry "TX Power" "$endc_lte_tx_power" "TX Power"
|
||||
add_plain_info_entry "Srxlev" "$endc_lte_srxlev" "Serving Cell Receive Level"
|
||||
add_plain_info_entry NR5G-NSA "NR5G-NSA" ""
|
||||
add_plain_info_entry "MCC" "$endc_nr_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$endc_nr_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Physical Cell ID" "$endc_nr_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "ARFCN" "$endc_nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$endc_nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_plain_info_entry "SCS" "$endc_nr_scs" "SCS"
|
||||
;;
|
||||
"LTE Mode")
|
||||
add_plain_info_entry "MCC" "$lte_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$lte_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Duplex Mode" "$lte_duplex_mode" "Duplex Mode"
|
||||
add_plain_info_entry "Cell ID" "$lte_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$lte_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "EARFCN" "$lte_earfcn" "E-UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "Freq band indicator" "$lte_freq_band_ind" "Freq band indicator"
|
||||
add_plain_info_entry "Band" "$lte_band" "Band"
|
||||
add_plain_info_entry "UL Bandwidth" "$lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_plain_info_entry "RxLev" "$lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
add_plain_info_entry "TX Power" "$lte_tx_power" "TX Power"
|
||||
add_plain_info_entry "Srxlev" "$lte_srxlev" "Serving Cell Receive Level"
|
||||
|
||||
;;
|
||||
"WCDMA Mode")
|
||||
add_plain_info_entry "MCC" "$wcdma_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$wcdma_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "LAC" "$wcdma_lac" "Location Area Code"
|
||||
add_plain_info_entry "Cell ID" "$wcdma_cell_id" "Cell ID"
|
||||
add_plain_info_entry "UARFCN" "$wcdma_uarfcn" "UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "PSC" "$wcdma_psc" "Primary Scrambling Code"
|
||||
add_plain_info_entry "RAC" "$wcdma_rac" "Routing Area Code"
|
||||
add_plain_info_entry "Band" "$wcdma_band" "Band"
|
||||
add_bar_info_entry "RSCP" "$wcdma_rscp" "Received Signal Code Power" -120 -25 dBm
|
||||
add_plain_info_entry "Ec/Io" "$wcdma_ecio" "Ec/Io"
|
||||
add_plain_info_entry "Ec/No" "$wcdma_ecno" "Ec/No"
|
||||
add_plain_info_entry "Physical Channel" "$wcdma_phych" "Physical Channel"
|
||||
add_plain_info_entry "Spreading Factor" "$wcdma_sf" "Spreading Factor"
|
||||
add_plain_info_entry "Slot" "$wcdma_slot" "Slot"
|
||||
add_plain_info_entry "Speech Code" "$wcdma_speech_code" "Speech Code"
|
||||
add_plain_info_entry "Compression Mode" "$wcdma_com_mod" "Compression Mode"
|
||||
add_plain_info_entry "RxLev" "$wcdma_rxlev" "RxLev"
|
||||
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function network_info() {
|
||||
class="Network Information"
|
||||
at_command="AT^SYSINFOEX"
|
||||
res=$(at $at_port $at_command | grep "\^SYSINFOEX:" | awk -F'"' '{print $4}')
|
||||
_parse_gstatus "$res"
|
||||
}
|
||||
|
||||
function _get_lockband_nr(){
|
||||
local bandcfg=$(at $at_port "AT!BAND?")
|
||||
local bandtemplate=$(at $at_port "AT!BAND=?")
|
||||
local start_flag=0
|
||||
IFS=$'\n'
|
||||
for line in $bandtemplate; do
|
||||
if [ "$start_flag" = 0 ];then
|
||||
if [ "${line:0:10}" == "Available:" ];then
|
||||
start_flag=1
|
||||
fi
|
||||
continue
|
||||
else
|
||||
|
||||
if [ "${line:0:2}" == "OK" ];then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
type_line=$(echo $line | grep '[0-9]* - .*:')
|
||||
if [ -n "$type_line" ]; then
|
||||
type=$(echo $line | grep -o '[0-9]* - .*:')
|
||||
type=${type:4:-1}
|
||||
json_add_object $type
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
elif [ -n "$line" ]; then
|
||||
band_name=${line##*-}
|
||||
band_name=$(echo $band_name | xargs)
|
||||
[ -z "$band_name" ] && continue
|
||||
case $type in
|
||||
"GW")
|
||||
band_hex=${line%%-*}
|
||||
band_bin=$(echo "obase=2; ibase=16; $band_hex" | bc)
|
||||
band_id=$(echo $band_bin | wc -c)
|
||||
band_id=$(($band_id - 1))
|
||||
;;
|
||||
*)
|
||||
band_id=$(echo $band_name |grep -o '^[BbNn][0-9]*' | grep -o '[0-9]*')
|
||||
;;
|
||||
esac
|
||||
json_select $type
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry $band_id ${type}_${band_name}
|
||||
json_close_array
|
||||
json_close_object
|
||||
fi
|
||||
|
||||
done
|
||||
for line in $bandcfg; do
|
||||
cfg_line=$(echo $line | grep '[0-9]* - ')
|
||||
if [ -n "$cfg_line" ]; then
|
||||
type=$(echo $cfg_line | cut -d' ' -f3)
|
||||
type=${type:0:-1}
|
||||
low_band=${cfg_line:11:16}
|
||||
high_band=${cfg_line:28:16}
|
||||
json_select $type
|
||||
json_select "lock_band"
|
||||
_mask_to_band _add_lock_band $low_band $high_band
|
||||
json_select ".."
|
||||
json_select ".."
|
||||
fi
|
||||
done
|
||||
|
||||
unset IFS
|
||||
}
|
||||
|
||||
function _set_lockband_nr(){
|
||||
case $band_class in
|
||||
"GW")
|
||||
band_class=0
|
||||
;;
|
||||
"LTE")
|
||||
band_class=1
|
||||
;;
|
||||
"NRNSA")
|
||||
band_class=3
|
||||
;;
|
||||
"NRSA")
|
||||
band_class=4
|
||||
;;
|
||||
esac
|
||||
bandlist=$(_band_list_to_mask $lock_band)
|
||||
[ "$band_class" -eq 0 ] && bandlist=${bandlist:0:16}
|
||||
cmd="AT!BAND=0F,1,\"Custom\",$band_class,${bandlist}"
|
||||
res=$(at $at_port "$cmd" | xargs)
|
||||
if [ "$res" == "OK" ]; then
|
||||
set_lockband="AT!BAND=0F"
|
||||
else
|
||||
set_lockband="AT!BAND=00"
|
||||
fi
|
||||
r=$(at $at_port "$set_lockband")
|
||||
json_add_string "result" "$res"
|
||||
json_add_string "cmd" "$cmd"
|
||||
}
|
||||
|
||||
function _get_temperature(){
|
||||
response=$(at $at_port "AT^CHIPTEMP?" | grep "\^CHIPTEMP" | awk -F',' '{print $6}' | sed 's/\r//g' )
|
||||
|
||||
local temperature
|
||||
[ -n "$response" ] && {
|
||||
response=$(awk "BEGIN{ printf \"%.2f\", $response / 10 }" | sed 's/\.*0*$//')
|
||||
add_plain_info_entry "temperature" "$response $(printf "\xc2\xb0")C" "Temperature"
|
||||
}
|
||||
}
|
||||
|
||||
function _add_avalible_band(){
|
||||
add_avalible_band_entry $1 $1
|
||||
}
|
||||
|
||||
function _add_lock_band(){
|
||||
json_add_string "" $1
|
||||
}
|
||||
|
||||
function _mask_to_band()
|
||||
{
|
||||
func=$1
|
||||
low_band=$2
|
||||
high_band=$3
|
||||
low_band=$(echo "obase=2; ibase=16; $low_band" | bc)
|
||||
low_band=$(printf "%064s" $low_band)
|
||||
for i in $(seq 1 64); do
|
||||
if [ "${low_band: -$i:1}" = "1" ]; then
|
||||
band=$i
|
||||
$func $band
|
||||
fi
|
||||
done
|
||||
[ -z "$high_band" ] && return
|
||||
high_band=$(echo "obase=2; ibase=16; $high_band" | bc)
|
||||
high_band=$(printf "%064s" $high_band)
|
||||
for i in $(seq 1 64); do
|
||||
if [ "${high_band: -$i:1}" = "1" ]; then
|
||||
band=$((64+i))
|
||||
$func $band
|
||||
fi
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
function _band_list_to_mask()
|
||||
{
|
||||
local band_list=$1
|
||||
local low=0
|
||||
local high=0
|
||||
#以逗号分隔
|
||||
IFS=","
|
||||
for band in $band_list;do
|
||||
if [ "$band" -le 64 ]; then
|
||||
#使用bc计算2的band次方
|
||||
res=$(echo "2^($band-1)" | bc)
|
||||
low=$(echo "$low+$res" | bc)
|
||||
|
||||
else
|
||||
tmp_band=$((band-64))
|
||||
res=$(echo "2^($tmp_band-1)" | bc)
|
||||
high=$(echo "$high+$res" | bc)
|
||||
fi
|
||||
done
|
||||
#十六进制输出,padding到16位
|
||||
low=$(printf "%016x" $low)
|
||||
high=$(printf "%016x" $high)
|
||||
echo "$low,$high"
|
||||
}
|
||||
|
||||
function _parse_gstatus(){
|
||||
data=$1
|
||||
IFS=$'\t\r\n'
|
||||
for line in $data;do
|
||||
line=${line//[$'\t\r\n']}
|
||||
key=${line%%:*}
|
||||
value=${line##*:}
|
||||
key=${key}
|
||||
#trim space at value
|
||||
value=$(echo $value | xargs)
|
||||
if [ -z "$value" ] || [ "$value" = "---" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
|
||||
case $key in
|
||||
OK)
|
||||
continue
|
||||
;;
|
||||
*SINR*)
|
||||
add_bar_info_entry "SINR" "$value" "$key" 0 30 dB
|
||||
;;
|
||||
*RSRP*)
|
||||
add_bar_info_entry "RSRP" "$value" "$key" -140 -44 dBm
|
||||
;;
|
||||
*RSRQ*)
|
||||
add_bar_info_entry "RSRQ" "$value" "$key" -19.5 -3 dB
|
||||
;;
|
||||
*RSSI*)
|
||||
add_bar_info_entry "RSSI" "$value" "$key" -120 -20 dBm
|
||||
;;
|
||||
*)
|
||||
add_plain_info_entry $key $value $key
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
unset IFS
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
@ -533,9 +567,9 @@ cell_info()
|
||||
add_plain_info_entry "TAC" "$nr_tac" "Tracking area code"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
add_plain_info_entry "SCS" "$nr_scs" "SCS"
|
||||
;;
|
||||
"EN-DC Mode")
|
||||
@ -550,8 +584,8 @@ cell_info()
|
||||
add_plain_info_entry "UL Bandwidth" "$endc_lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$endc_lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
add_plain_info_entry "TX Power" "$endc_lte_tx_power" "TX Power"
|
||||
if [ -n "$endc_nr_physical_cell_id" ] || [ -n "$endc_nr_band" ]; then
|
||||
add_plain_info_entry "NR5G-NSA" "NR5G-NSA" ""
|
||||
@ -560,9 +594,9 @@ cell_info()
|
||||
[ -n "$endc_nr_physical_cell_id" ] && add_plain_info_entry "Physical Cell ID" "$endc_nr_physical_cell_id" "Physical Cell ID"
|
||||
[ -n "$endc_nr_band" ] && add_plain_info_entry "Band" "$endc_nr_band" "Band"
|
||||
[ -n "$endc_nr_dl_bandwidth" ] && add_plain_info_entry "DL Bandwidth" "$endc_nr_dl_bandwidth" "DL Bandwidth"
|
||||
[ -n "$endc_nr_rsrp" ] && add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
[ -n "$endc_nr_rsrq" ] && add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
[ -n "$endc_nr_sinr" ] && add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio" -23 40 dB
|
||||
[ -n "$endc_nr_rsrp" ] && add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
[ -n "$endc_nr_rsrq" ] && add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
[ -n "$endc_nr_sinr" ] && add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
[ -n "$endc_nr_scs" ] && add_plain_info_entry "SCS" "$endc_nr_scs" "SCS"
|
||||
fi
|
||||
;;
|
||||
@ -577,8 +611,8 @@ cell_info()
|
||||
add_plain_info_entry "UL Bandwidth" "$lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
[ -n "$lte_tx_power" ] && add_plain_info_entry "TX Power" "$lte_tx_power" "TX Power"
|
||||
;;
|
||||
"WCDMA Mode")
|
||||
|
791
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/neoway.sh
vendored
Executable file
791
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/neoway.sh
vendored
Executable file
@ -0,0 +1,791 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2025 sfwtw
|
||||
_Vendor="neoway"
|
||||
_Author="sfwtw"
|
||||
_Maintainer="sfwtw <unknown>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
debug_subject="neoway_ctrl"
|
||||
|
||||
vendor_get_disabled_features(){
|
||||
json_add_string "" "NeighborCell"
|
||||
json_add_string "" "DialMode"
|
||||
}
|
||||
|
||||
get_imei(){
|
||||
at_command="AT+CGSN"
|
||||
imei=$(at $at_port $at_command | grep -o "[0-9]\{15\}")
|
||||
json_add_string "imei" "$imei"
|
||||
}
|
||||
|
||||
set_imei(){
|
||||
local imei="$1"
|
||||
at_command="AT+SPIMEI=0,\"$imei\""
|
||||
res=$(at $at_port $at_command)
|
||||
json_select "result"
|
||||
json_add_string "set_imei" "$res"
|
||||
json_close_object
|
||||
get_imei
|
||||
}
|
||||
|
||||
#获取网络偏好
|
||||
# $1:AT串口
|
||||
get_network_prefer()
|
||||
{
|
||||
at_command='AT$MYSYSINFO'
|
||||
local response=$(at ${at_port} ${at_command} | grep '$MYSYSINFO:' | awk -F',' '{print $1}' | awk '{print $2}' | sed 's/\r//g')
|
||||
|
||||
network_prefer_3g="0";
|
||||
network_prefer_4g="0";
|
||||
network_prefer_5g="0";
|
||||
|
||||
case "$response" in
|
||||
"3")
|
||||
# 3G
|
||||
network_prefer_3g="1"
|
||||
;;
|
||||
"4")
|
||||
# 4G
|
||||
network_prefer_4g="1"
|
||||
;;
|
||||
"5")
|
||||
# 5G
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
"7")
|
||||
# 3G + 4G
|
||||
network_prefer_3g="1"
|
||||
network_prefer_4g="1"
|
||||
;;
|
||||
"9")
|
||||
# 5G
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
"11")
|
||||
# 3G + 5G
|
||||
network_prefer_3g="1"
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
"12")
|
||||
# 4G + 5G
|
||||
network_prefer_4g="1"
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
"14")
|
||||
# 3G + 4G + 5G
|
||||
network_prefer_3g="1"
|
||||
network_prefer_4g="1"
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
"*")
|
||||
# AUTO
|
||||
network_prefer_3g="1"
|
||||
network_prefer_4g="1"
|
||||
network_prefer_5g="1"
|
||||
;;
|
||||
esac
|
||||
json_add_object network_prefer
|
||||
json_add_string 2G "$network_prefer_2g"
|
||||
json_add_string 3G "$network_prefer_3g"
|
||||
json_add_string 4G "$network_prefer_4g"
|
||||
json_add_string 5G "$network_prefer_5g"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
#设置网络偏好
|
||||
# $1:AT串口
|
||||
# $2:网络偏好配置
|
||||
set_network_prefer()
|
||||
{
|
||||
network_prefer_3g=$(echo $1 |jq -r 'contains(["3G"])')
|
||||
network_prefer_4g=$(echo $1 |jq -r 'contains(["4G"])')
|
||||
network_prefer_5g=$(echo $1 |jq -r 'contains(["5G"])')
|
||||
length=$(echo $1 |jq -r 'length')
|
||||
|
||||
local config_mode="1"
|
||||
|
||||
case "$length" in
|
||||
"1")
|
||||
if [ "$network_prefer_3g" = "true" ]; then
|
||||
config_mode="3" # 仅3G
|
||||
elif [ "$network_prefer_4g" = "true" ]; then
|
||||
config_mode="4" # 仅4G
|
||||
elif [ "$network_prefer_5g" = "true" ]; then
|
||||
config_mode="9" # 仅5G
|
||||
fi
|
||||
;;
|
||||
"2")
|
||||
if [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_4g" = "true" ]; then
|
||||
config_mode="7" # 3G + 4G
|
||||
elif [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
config_mode="11" # 3G + 5G
|
||||
elif [ "$network_prefer_4g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
config_mode="12" # 4G + 5G
|
||||
fi
|
||||
;;
|
||||
"3")
|
||||
config_mode="14" # 3G + 4G + 5G
|
||||
;;
|
||||
*)
|
||||
config_mode="1" # AUTO
|
||||
;;
|
||||
esac
|
||||
|
||||
at_command='AT$MYSYSINFO='${config_mode}
|
||||
res=$(at "${at_port}" "${at_command}")
|
||||
|
||||
json_select "result"
|
||||
json_add_string "set_network_prefer" "$res"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
#基本信息
|
||||
base_info()
|
||||
{
|
||||
m_debug "Neoway base info"
|
||||
|
||||
#Name(名称)
|
||||
at_command="AT+CGMM"
|
||||
name=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
#Manufacturer(制造商)
|
||||
at_command="AT+CGMI"
|
||||
manufacturer=$(at $at_port $at_command | grep "+CGMI:" | sed 's/+CGMI: //g' | sed 's/\r//g')
|
||||
#Revision(固件版本)
|
||||
at_command="ATI"
|
||||
revision=$(at $at_port $at_command | sed -n '5p' | sed 's/\r//g')
|
||||
# at_command="AT+CGMR"
|
||||
# revision=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
class="Base Information"
|
||||
add_plain_info_entry "manufacturer" "$manufacturer" "Manufacturer"
|
||||
add_plain_info_entry "revision" "$revision" "Revision"
|
||||
add_plain_info_entry "at_port" "$at_port" "AT Port"
|
||||
get_connect_status
|
||||
}
|
||||
|
||||
#SIM卡信息
|
||||
sim_info()
|
||||
{
|
||||
m_debug "Neoway sim info"
|
||||
|
||||
#SIM Slot(SIM卡卡槽)
|
||||
at_command="AT+SIMCROSS?"
|
||||
sim_slot=$(at $at_port $at_command | grep "+SIMCROSS:" | awk -F'[ ,]' '{print $2}' | sed 's/\r//g')
|
||||
# m_debug "SIM Slot: $sim_slot"
|
||||
#IMEI(国际移动设备识别码)
|
||||
at_command="AT+CGSN"
|
||||
imei=$(at $at_port $at_command | sed -n '3p' | awk -F'"' '{print $2}')
|
||||
|
||||
#SIM Status(SIM状态)
|
||||
at_command="AT+CPIN?"
|
||||
sim_status_flag=$(at $at_port $at_command | sed -n '3p')
|
||||
sim_status=$(get_sim_status "$sim_status_flag")
|
||||
|
||||
[ "$sim_status" != "ready" ] && return
|
||||
|
||||
#ISP(互联网服务提供商)
|
||||
at_command="AT+COPS?"
|
||||
isp=$(at $at_port $at_command | sed -n '2p' | awk -F'"' '{print $2}')
|
||||
# if [ "$isp" = "CHN-CMCC" ] || [ "$isp" = "CMCC" ]|| [ "$isp" = "46000" ]; then
|
||||
# isp="中国移动"
|
||||
# # elif [ "$isp" = "CHN-UNICOM" ] || [ "$isp" = "UNICOM" ] || [ "$isp" = "46001" ]; then
|
||||
# elif [ "$isp" = "CHN-UNICOM" ] || [ "$isp" = "CUCC" ] || [ "$isp" = "46001" ]; then
|
||||
# isp="中国联通"
|
||||
# # elif [ "$isp" = "CHN-CT" ] || [ "$isp" = "CT" ] || [ "$isp" = "46011" ]; then
|
||||
# elif [ "$isp" = "CHN-TELECOM" ] || [ "$isp" = "CTCC" ] || [ "$isp" = "46011" ]; then
|
||||
# isp="中国电信"
|
||||
# fi
|
||||
|
||||
#SIM Number(SIM卡号码,手机号)
|
||||
at_command="AT+CNUM"
|
||||
sim_number=$(at $at_port $at_command | sed -n '3p' | awk -F'"' '{print $4}')
|
||||
|
||||
#IMSI(国际移动用户识别码)
|
||||
at_command="AT+CIMI"
|
||||
imsi=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
|
||||
#ICCID(集成电路卡识别码)
|
||||
iccid=$(at $at_port 'AT$MYCCID' | grep '$MYCCID:' | awk -F' "' '{print $2}' | sed 's/"//g')
|
||||
[ -n "$iccid" ] || return
|
||||
class="SIM Information"
|
||||
case "$sim_status" in
|
||||
"ready")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "ISP" "$isp" "Internet Service Provider"
|
||||
add_plain_info_entry "SIM Slot" "$sim_slot" "SIM Slot"
|
||||
add_plain_info_entry "SIM Number" "$sim_number" "SIM Number"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
add_plain_info_entry "IMSI" "$imsi" "International Mobile Subscriber Identity"
|
||||
add_plain_info_entry "ICCID" "$iccid" "Integrate Circuit Card Identity"
|
||||
;;
|
||||
"miss")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
;;
|
||||
"unknown")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
;;
|
||||
*)
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "SIM Slot" "$sim_slot" "SIM Slot"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
add_plain_info_entry "IMSI" "$imsi" "International Mobile Subscriber Identity"
|
||||
add_plain_info_entry "ICCID" "$iccid" "Integrate Circuit Card Identity"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
rate_convert()
|
||||
{
|
||||
#check if bc is installed
|
||||
is_bc_installed=$(which bc)
|
||||
local rate=$1
|
||||
rate_units="Kbps Mbps Gbps Tbps"
|
||||
if [ -z "$is_bc_installed" ]; then
|
||||
for i in $(seq 0 3); do
|
||||
if [ $rate -lt 1024 ]; then
|
||||
break
|
||||
fi
|
||||
rate=$(($rate / 1024))
|
||||
done
|
||||
else
|
||||
for i in $(seq 0 3); do
|
||||
if [ $(echo "$rate < 1024" | bc) -eq 1 ]; then
|
||||
break
|
||||
fi
|
||||
rate=$(echo "scale=2; $rate / 1024" | bc)
|
||||
done
|
||||
fi
|
||||
echo "$rate `echo $rate_units | cut -d ' ' -f $(($i+1))`"
|
||||
}
|
||||
|
||||
#网络信息
|
||||
network_info()
|
||||
{
|
||||
m_debug "Neoway network info"
|
||||
|
||||
#CSQ(信号强度)
|
||||
at_command="AT+CSQ"
|
||||
response=$(at ${at_port} ${at_command} | grep "+CSQ:" | sed 's/+CSQ: //g' | sed 's/\r//g')
|
||||
|
||||
#最大比特率,信道质量指示
|
||||
at_command='AT+C5GQOSRDP'
|
||||
response=$(at $at_port $at_command | grep "+C5GQOSRDP:")
|
||||
|
||||
if [ -n "$response" ]; then
|
||||
# Parse 5G QoS parameters
|
||||
# Format: +C5GQOSRDP: <cid>,<5QI>[,<DL_GFBR>,<UL_GFBR>[,<DL_MFBR>,<UL_MFBR>[,<DL_SAMBR>,<UL_SAMBR>[,<Averaging_window>]]]]]
|
||||
|
||||
# Extract DL_SAMBR (downlink session AMBR) and UL_SAMBR (uplink session AMBR) in kbit/s
|
||||
ambr_dl=$(echo "$response" | awk -F',' '{print $7}' | sed 's/\r//g')
|
||||
ambr_ul=$(echo "$response" | awk -F',' '{print $8}' | sed 's/\r//g')
|
||||
|
||||
# Convert kbit/s to Mbit/s for display if values exist
|
||||
[ -n "$ambr_dl" ] && ambr_dl=$(rate_convert $ambr_dl)
|
||||
[ -n "$ambr_ul" ] && ambr_ul=$(rate_convert $ambr_ul)
|
||||
fi
|
||||
|
||||
class="Network Information"
|
||||
add_plain_info_entry "AMBR UL" "$ambr_ul" "Access Maximum Bit Rate for Uplink"
|
||||
add_plain_info_entry "AMBR DL" "$ambr_dl" "Access Maximum Bit Rate for Downlink"
|
||||
}
|
||||
|
||||
convert_neoway_band_to_readable() {
|
||||
local act=$1
|
||||
local band_value=$2
|
||||
case "$act" in
|
||||
"2") echo "WB$band_value" ;; # UTRAN
|
||||
"3") echo "B$band_value" ;; # E-UTRAN
|
||||
"6") echo "N$band_value" ;; # NR
|
||||
*) echo "$band_value" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
convert_readable_band_to_neoway() {
|
||||
local band=$1
|
||||
|
||||
local prefix=${band:0:1}
|
||||
local band_value
|
||||
|
||||
case "$prefix" in
|
||||
"W")
|
||||
band_value=${band:2}
|
||||
echo "2 $band_value"
|
||||
;;
|
||||
"B")
|
||||
band_value=${band:1}
|
||||
echo "3 $band_value"
|
||||
;;
|
||||
"N")
|
||||
band_value=${band:1}
|
||||
echo "6 $band_value"
|
||||
;;
|
||||
*)
|
||||
echo "3 $band"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_lockband() {
|
||||
json_add_object "lockband"
|
||||
|
||||
at_command="AT+NWSETBAND?"
|
||||
response=$(at $at_port $at_command)
|
||||
|
||||
local band_num=$(echo "$response" | grep "+NWSETBAND:" | awk '{print $2}' | sed 's/\r//g')
|
||||
m_debug "Band number: $band_num"
|
||||
|
||||
json_add_object "UMTS"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
json_add_object "LTE"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
json_add_object "NR"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
|
||||
at_command="AT+NWSETBAND=?"
|
||||
available_bands=$(at $at_port $at_command | grep "+" | awk -F',' '{for(i=2;i<=NF;i++) print $i}' | sed 's/\r//g')
|
||||
m_debug "Available bands: $available_bands"
|
||||
for band in $available_bands; do
|
||||
if [[ "$band" == WB* ]]; then
|
||||
band_value=${band:2}
|
||||
json_select "UMTS"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$band_value" "$band"
|
||||
json_select ..
|
||||
json_select ..
|
||||
elif [[ "$band" == B* ]]; then
|
||||
band_value=${band:1}
|
||||
json_select "LTE"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$band_value" "$band"
|
||||
json_select ..
|
||||
json_select ..
|
||||
elif [[ "$band" == N* ]]; then
|
||||
band_value=${band:1}
|
||||
json_select "NR"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$band_value" "$band"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$band_num" != "0" ]; then
|
||||
IFS=$'\n'
|
||||
for line in $(echo "$response" | grep -v "+NWSETBAND:" | grep -v "OK"); do
|
||||
set -- $(echo $line | tr ',' ' ')
|
||||
act=$1
|
||||
num=$2
|
||||
shift 2
|
||||
for band_value in "$@"; do
|
||||
if [[ "$band" == WB* ]]; then
|
||||
act="2"
|
||||
elif [[ "$band" == B* ]]; then
|
||||
act="3"
|
||||
elif [[ "$band" == N* ]]; then
|
||||
act="6"
|
||||
fi
|
||||
band_value=$(echo "$band_value" | awk -F' ' '{print $3}' | sed 's/\r//g')
|
||||
m_debug "Processing band: $band_value for act: $act"
|
||||
if [ -n "$band_value" ]; then
|
||||
case "$act" in
|
||||
"2")
|
||||
json_select "UMTS"
|
||||
json_select "lock_band"
|
||||
band_value=${band_value:2}
|
||||
json_add_string "" "$band_value"
|
||||
json_select ..
|
||||
json_select ..
|
||||
;;
|
||||
"3")
|
||||
json_select "LTE"
|
||||
json_select "lock_band"
|
||||
band_value=${band_value:1}
|
||||
json_add_string "" "$band_value"
|
||||
json_select ..
|
||||
json_select ..
|
||||
;;
|
||||
"6")
|
||||
json_select "NR"
|
||||
json_select "lock_band"
|
||||
band_value=${band_value:1}
|
||||
json_add_string "" "$band_value"
|
||||
json_select ..
|
||||
json_select ..
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
|
||||
json_close_object
|
||||
}
|
||||
|
||||
set_lockband() {
|
||||
m_debug "neoway set lockband info"
|
||||
config=$1
|
||||
|
||||
band_class=$(echo $config | jq -r '.band_class')
|
||||
lock_band=$(echo $config | jq -r '.lock_band')
|
||||
|
||||
if [ -z "$lock_band" ] || [ "$lock_band" = "null" ]; then
|
||||
at_command="AT+NWSETBAND=0"
|
||||
res=$(at $at_port $at_command)
|
||||
json_select "result"
|
||||
json_add_string "set_lockband" "$res"
|
||||
json_close_object
|
||||
return
|
||||
fi
|
||||
|
||||
local act
|
||||
case "$band_class" in
|
||||
"UMTS") act=2 ;;
|
||||
"LTE") act=3 ;;
|
||||
"NR") act=6 ;;
|
||||
*) act=3 ;; # 默认LTE
|
||||
esac
|
||||
|
||||
IFS=','; set -- $lock_band
|
||||
band_num=$#
|
||||
at_command="AT+NWSETBAND=$act,$band_num"
|
||||
for band in "$@"; do
|
||||
at_command="$at_command,$band"
|
||||
done
|
||||
unset IFS
|
||||
|
||||
res=$(at $at_port $at_command)
|
||||
|
||||
json_select "result"
|
||||
json_add_string "set_lockband" "$res"
|
||||
json_add_string "config" "$config"
|
||||
json_add_string "band_class" "$band_class"
|
||||
json_add_string "lock_band" "$lock_band"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
#UL_bandwidth
|
||||
# $1:上行带宽数字
|
||||
get_bandwidth()
|
||||
{
|
||||
local network_type="$1"
|
||||
local bandwidth_num="$2"
|
||||
|
||||
local bandwidth
|
||||
case $network_type in
|
||||
"LTE")
|
||||
case $bandwidth_num in
|
||||
"0") bandwidth="1.4" ;;
|
||||
"1") bandwidth="3" ;;
|
||||
"2"|"3"|"4"|"5") bandwidth=$((($bandwidth_num - 1) * 5)) ;;
|
||||
esac
|
||||
;;
|
||||
"NR")
|
||||
case $bandwidth_num in
|
||||
"0"|"1"|"2"|"3"|"4"|"5") bandwidth=$((($bandwidth_num + 1) * 5)) ;;
|
||||
"6"|"7"|"8"|"9"|"10"|"11"|"12") bandwidth=$((($bandwidth_num - 2) * 10)) ;;
|
||||
"13") bandwidth="200" ;;
|
||||
"14") bandwidth="400" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
echo "$bandwidth"
|
||||
}
|
||||
|
||||
#获取NR子载波间隔
|
||||
# $1:NR子载波间隔数字
|
||||
get_scs()
|
||||
{
|
||||
local scs
|
||||
case $1 in
|
||||
"0") scs="15" ;;
|
||||
"1") scs="30" ;;
|
||||
"2") scs="60" ;;
|
||||
"3") scs="120" ;;
|
||||
"4") scs="240" ;;
|
||||
*) scs=$(awk "BEGIN{ print 2^$1 * 15 }") ;;
|
||||
esac
|
||||
echo "$scs"
|
||||
}
|
||||
|
||||
#获取物理信道
|
||||
# $1:物理信道数字
|
||||
get_phych()
|
||||
{
|
||||
local phych
|
||||
case $1 in
|
||||
"0") phych="DPCH" ;;
|
||||
"1") phych="FDPCH" ;;
|
||||
esac
|
||||
echo "$phych"
|
||||
}
|
||||
|
||||
#获取扩频因子
|
||||
# $1:扩频因子数字
|
||||
get_sf()
|
||||
{
|
||||
local sf
|
||||
case $1 in
|
||||
"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7") sf=$(awk "BEGIN{ print 2^$(($1+2)) }") ;;
|
||||
"8") sf="UNKNOWN" ;;
|
||||
esac
|
||||
echo "$sf"
|
||||
}
|
||||
|
||||
#获取插槽格式
|
||||
# $1:插槽格式数字
|
||||
get_slot()
|
||||
{
|
||||
local slot=$1
|
||||
# case $1 in
|
||||
# "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"10"|"11"|"12"|"13"|"14"|"15"|"16") slot=$1 ;;
|
||||
# "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9") slot=$1 ;;
|
||||
# esac
|
||||
echo "$slot"
|
||||
}
|
||||
|
||||
#小区信息
|
||||
cell_info()
|
||||
{
|
||||
m_debug "Neoway cell info"
|
||||
|
||||
at_command='AT+NETDMSGEX'
|
||||
response=$(at $at_port $at_command)
|
||||
|
||||
if [ -n "$(echo "$response" | grep "+NETDMSGEX:")" ]; then
|
||||
|
||||
net_mode=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $1}' | sed 's/+NETDMSGEX: "//g' | sed 's/"//g')
|
||||
network_mode=$(get_network_mode "$net_mode")
|
||||
|
||||
mcc_mnc=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $2}' | sed 's/"//g')
|
||||
mcc=$(echo "$mcc_mnc" | cut -d'+' -f1)
|
||||
mnc=$(echo "$mcc_mnc" | cut -d'+' -f2)
|
||||
|
||||
band=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $3}' | sed 's/"//g')
|
||||
|
||||
arfcn=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $4}' | sed 's/\r//g')
|
||||
|
||||
case "$net_mode" in
|
||||
"NR to 5GCN"|"NR to EPS"|"NR-LTE ENDC"|"NR-LTE NEDC")
|
||||
|
||||
gnbid=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $5}' | sed 's/\r//g')
|
||||
pci=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $6}' | sed 's/\r//g')
|
||||
ss_rsrp=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $7}' | sed 's/\r//g')
|
||||
ss_rsrq=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $8}' | sed 's/\r//g')
|
||||
ss_sinr=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $9}' | sed 's/\r//g')
|
||||
|
||||
[ -n "$ss_rsrp" ] && ss_rsrp_actual=$(printf "%.1f" $(echo "$ss_rsrp / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$ss_rsrq" ] && ss_rsrq_actual=$(printf "%.1f" $(echo "$ss_rsrq / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$ss_sinr" ] && ss_sinr_actual=$(printf "%.1f" $(echo "$ss_sinr / 10" | bc -l 2>/dev/null))
|
||||
|
||||
network_mode="NR5G-SA Mode"
|
||||
nr_mcc="$mcc"
|
||||
nr_mnc="$mnc"
|
||||
nr_cell_id="$gnbid"
|
||||
nr_physical_cell_id="$pci"
|
||||
nr_arfcn="$arfcn"
|
||||
nr_band="$band"
|
||||
nr_rsrp="$ss_rsrp_actual"
|
||||
nr_rsrq="$ss_rsrq_actual"
|
||||
nr_sinr="$ss_sinr_actual"
|
||||
;;
|
||||
|
||||
"TDD LTE"|"FDD LTE")
|
||||
|
||||
tac=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $5}')
|
||||
cell_id=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $6}')
|
||||
pci=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $7}')
|
||||
rx_dbm=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $8}')
|
||||
tx_dbm=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $9}')
|
||||
rsrp=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $10}')
|
||||
rsrq=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $11}')
|
||||
sinr=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $12}')
|
||||
rssi=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $13}')
|
||||
|
||||
if [ "$(echo "$response" | grep -o ',' | wc -l)" -ge 17 ]; then
|
||||
dl_bw_num=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $17}')
|
||||
ul_bw_num=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $18}' | sed 's/\r//g')
|
||||
|
||||
dl_bandwidth=$(get_bandwidth "LTE" "$dl_bw_num")
|
||||
ul_bandwidth=$(get_bandwidth "LTE" "$ul_bw_num")
|
||||
fi
|
||||
|
||||
[ -n "$rsrp" ] && rsrp_actual=$(printf "%.1f" $(echo "$rsrp / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$rsrq" ] && rsrq_actual=$(printf "%.1f" $(echo "$rsrq / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$sinr" ] && sinr_actual=$(printf "%.1f" $(echo "$sinr / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$rssi" ] && rssi_actual=$(printf "%.1f" $(echo "$rssi / 10" | bc -l 2>/dev/null))
|
||||
|
||||
network_mode="LTE Mode"
|
||||
lte_mcc="$mcc"
|
||||
lte_mnc="$mnc"
|
||||
lte_cell_id="$cell_id"
|
||||
lte_physical_cell_id="$pci"
|
||||
lte_earfcn="$arfcn"
|
||||
lte_freq_band_ind="$band"
|
||||
lte_tac="$tac"
|
||||
lte_rsrp="$rsrp_actual"
|
||||
lte_rsrq="$rsrq_actual"
|
||||
lte_sinr="$sinr_actual"
|
||||
lte_rssi="$rssi_actual"
|
||||
lte_cql="$cqi"
|
||||
lte_srxlev="$srxlev"
|
||||
lte_dl_bandwidth="$dl_bandwidth"
|
||||
lte_ul_bandwidth="$ul_bandwidth"
|
||||
lte_tx_power="$tx_dbm"
|
||||
lte_rx_power="$rx_dbm"
|
||||
;;
|
||||
|
||||
"WCDMA"|"HSDPA"|"HSUPA"|"HSDPA and HSUPA"|"HSDPA+"|"HSDPA+ and HSUPA")
|
||||
|
||||
lac=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $5}')
|
||||
cell_id=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $6}')
|
||||
psc=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $7}')
|
||||
rac=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $8}')
|
||||
rx_dbm=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $9}')
|
||||
tx_dbm=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $10}')
|
||||
rscp=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $11}')
|
||||
ecio=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $12}')
|
||||
rssi=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $13}')
|
||||
|
||||
if [ "$(echo "$response" | grep -o ',' | wc -l)" -ge 17 ]; then
|
||||
srxlev=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $14}')
|
||||
squal=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $15}')
|
||||
phych_num=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $16}')
|
||||
sf_num=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $17}')
|
||||
slot_num=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $18}')
|
||||
is_commod=$(echo "$response" | grep "+NETDMSGEX:" | awk -F',' '{print $19}' | sed 's/\r//g')
|
||||
|
||||
phych=$(get_phych "$phych_num")
|
||||
sf=$(get_sf "$sf_num")
|
||||
slot=$(get_slot "$slot_num")
|
||||
fi
|
||||
|
||||
[ -n "$rscp" ] && rscp_actual=$(printf "%.1f" $(echo "$rscp / 10" | bc -l 2>/dev/null))
|
||||
|
||||
[ -n "$ecio" ] && ecio_actual=$(printf "%.1f" $(echo "$ecio / 10" | bc -l 2>/dev/null))
|
||||
|
||||
network_mode="WCDMA Mode"
|
||||
wcdma_mcc="$mcc"
|
||||
wcdma_mnc="$mnc"
|
||||
wcdma_lac="$lac"
|
||||
wcdma_cell_id="$cell_id"
|
||||
wcdma_uarfcn="$arfcn"
|
||||
wcdma_psc="$psc"
|
||||
wcdma_rac="$rac"
|
||||
wcdma_band="$band"
|
||||
wcdma_rscp="$rscp_actual"
|
||||
wcdma_ecio="$ecio_actual"
|
||||
wcdma_phych="$phych"
|
||||
wcdma_sf="$sf"
|
||||
wcdma_slot="$slot"
|
||||
wcdma_com_mod="$is_commod"
|
||||
wcdma_rx_dbm="$rx_dbm"
|
||||
wcdma_tx_dbm="$tx_dbm"
|
||||
;;
|
||||
|
||||
*)
|
||||
network_mode="Unknown Mode"
|
||||
;;
|
||||
esac
|
||||
|
||||
class="Cell Information"
|
||||
add_plain_info_entry "network_mode" "$network_mode" "Network Mode"
|
||||
|
||||
case $network_mode in
|
||||
"NR5G-SA Mode")
|
||||
add_plain_info_entry "MCC" "$mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Cell ID" "$nr_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$nr_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
;;
|
||||
"LTE Mode")
|
||||
add_plain_info_entry "MCC" "$lte_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$lte_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "Cell ID" "$lte_cell_id" "Cell ID"
|
||||
add_plain_info_entry "Physical Cell ID" "$lte_physical_cell_id" "Physical Cell ID"
|
||||
add_plain_info_entry "EARFCN" "$lte_earfcn" "E-UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$lte_freq_band_ind" "Band"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking Area Code"
|
||||
add_plain_info_entry "RX Power" "$lte_rx_power" "RX Power (dBm)"
|
||||
add_plain_info_entry "TX Power" "$lte_tx_power" "TX Power (dBm)"
|
||||
add_bar_info_entry "RSRP" "$lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio" 0 30 dB
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
|
||||
if [ -n "$lte_cql" ]; then
|
||||
add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "UL Bandwidth" "$lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "Srxlev" "$lte_srxlev" "Serving Cell Receive Level"
|
||||
fi
|
||||
;;
|
||||
|
||||
"WCDMA Mode")
|
||||
add_plain_info_entry "MCC" "$wcdma_mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$wcdma_mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "LAC" "$wcdma_lac" "Location Area Code"
|
||||
add_plain_info_entry "Cell ID" "$wcdma_cell_id" "Cell ID"
|
||||
add_plain_info_entry "UARFCN" "$wcdma_uarfcn" "UTRA Absolute Radio Frequency Channel Number"
|
||||
add_plain_info_entry "PSC" "$wcdma_psc" "Primary Scrambling Code"
|
||||
add_plain_info_entry "RAC" "$wcdma_rac" "Routing Area Code"
|
||||
add_plain_info_entry "Band" "$wcdma_band" "Band"
|
||||
add_plain_info_entry "RX Power" "$wcdma_rx_dbm" "RX Power (dBm)"
|
||||
add_plain_info_entry "TX Power" "$wcdma_tx_dbm" "TX Power (dBm)"
|
||||
add_bar_info_entry "RSCP" "$wcdma_rscp" "Received Signal Code Power" -120 -25 dBm
|
||||
add_plain_info_entry "Ec/Io" "$wcdma_ecio" "Ec/Io"
|
||||
|
||||
if [ -n "$wcdma_phych" ]; then
|
||||
add_plain_info_entry "Physical Channel" "$wcdma_phych" "Physical Channel"
|
||||
add_plain_info_entry "Spreading Factor" "$wcdma_sf" "Spreading Factor"
|
||||
add_plain_info_entry "Slot" "$wcdma_slot" "Slot"
|
||||
add_plain_info_entry "Compression Mode" "$wcdma_com_mod" "Compression Mode"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
add_plain_info_entry "Network Type" "$net_mode" "Network Type"
|
||||
add_plain_info_entry "MCC" "$mcc" "Mobile Country Code"
|
||||
add_plain_info_entry "MNC" "$mnc" "Mobile Network Code"
|
||||
add_plain_info_entry "ARFCN" "$arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$band" "Band"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
get_network_mode()
|
||||
{
|
||||
local mode="$1"
|
||||
case "$mode" in
|
||||
"NR to 5GCN"|"NR-LTE ENDC"|"NR-LTE NEDC") echo "NR5G-SA Mode" ;;
|
||||
"NR to EPS") echo "NR5G-SA Mode" ;;
|
||||
"TDD LTE"|"FDD LTE") echo "LTE Mode" ;;
|
||||
"WCDMA"|"HSDPA"|"HSUPA"|"HSDPA and HSUPA"|"HSDPA+"|"HSDPA+ and HSUPA") echo "WCDMA Mode" ;;
|
||||
"GSM"|"GPRS"|"EDGE") echo "GSM Mode" ;;
|
||||
*) echo "$mode Mode" ;;
|
||||
esac
|
||||
}
|
@ -53,6 +53,15 @@ get_mode()
|
||||
*) mode="${mode_num}" ;;
|
||||
esac
|
||||
;;
|
||||
"hisilicon")
|
||||
case "$mode_num" in
|
||||
"1") mode="ecm" ;;
|
||||
"3") mode="rndis" ;;
|
||||
"4") mode="ncm" ;;
|
||||
"5") mode="ncm" ;;
|
||||
*) mode="ncm" ;;
|
||||
esac
|
||||
;;
|
||||
"lte12"|\
|
||||
"lte")
|
||||
case "$mode_num" in
|
||||
@ -145,6 +154,9 @@ get_network_prefer()
|
||||
"unisoc")
|
||||
get_network_prefer_nr
|
||||
;;
|
||||
"hisilicon")
|
||||
get_network_prefer_nr
|
||||
;;
|
||||
"lte")
|
||||
get_network_prefer_lte
|
||||
;;
|
||||
@ -162,6 +174,9 @@ get_network_prefer()
|
||||
"unisoc")
|
||||
json_add_string 5G $network_prefer_5g
|
||||
;;
|
||||
"hisilicon")
|
||||
json_add_string 5G $network_prefer_5g
|
||||
;;
|
||||
esac
|
||||
json_close_array
|
||||
|
||||
@ -1605,9 +1620,9 @@ cell_info()
|
||||
add_plain_info_entry "ARFCN" "$nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$nr_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "SCS" "$nr_scs" "SCS"
|
||||
add_plain_info_entry "Srxlev" "$nr_srxlev" "Serving Cell Receive Level"
|
||||
@ -1627,9 +1642,9 @@ cell_info()
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$endc_lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$endc_lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$endc_lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$endc_lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$endc_lte_cql" "Channel Quality Indicator"
|
||||
@ -1642,9 +1657,9 @@ cell_info()
|
||||
add_plain_info_entry "ARFCN" "$endc_nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$endc_nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "SCS" "$endc_nr_scs" "SCS"
|
||||
;;
|
||||
"LTE Mode")
|
||||
@ -1659,9 +1674,9 @@ cell_info()
|
||||
add_plain_info_entry "UL Bandwidth" "$lte_ul_bandwidth" "UL Bandwidth"
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
|
@ -433,30 +433,16 @@ for line in $data;do
|
||||
continue
|
||||
;;
|
||||
*SINR*)
|
||||
add_bar_info_entry "SINR" "$value" "$key" -23 40 dB
|
||||
add_bar_info_entry "SINR" "$value" "$key" 0 30 dB
|
||||
;;
|
||||
*RSRP*)
|
||||
case $key in
|
||||
*NR5G*)
|
||||
add_bar_info_entry "NR5G RSRP" "$value" "$key" -187 -29 dBm
|
||||
;;
|
||||
*)
|
||||
add_bar_info_entry "RSRP" "$value" "$key" -140 -44 dBm
|
||||
;;
|
||||
esac
|
||||
add_bar_info_entry "RSRP" "$value" "$key" -140 -44 dBm
|
||||
;;
|
||||
*RSRQ*)
|
||||
case $key in
|
||||
*NR5G*)
|
||||
add_bar_info_entry "NR5G RSRQ" "$value" "$key" -43 20 dBm
|
||||
;;
|
||||
*)
|
||||
add_bar_info_entry "RSRQ" "$value" "$key" -20 20 dBm
|
||||
;;
|
||||
esac
|
||||
add_bar_info_entry "RSRQ" "$value" "$key" -19.5 -3 dB
|
||||
;;
|
||||
*RSSI*)
|
||||
add_bar_info_entry "RSSI" "$value" "$key" -140 -44 dBm
|
||||
add_bar_info_entry "RSSI" "$value" "$key" -120 -20 dBm
|
||||
;;
|
||||
*)
|
||||
add_plain_info_entry $key $value $key
|
||||
|
@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2025 sfwtw
|
||||
# Copyright (C) 2025 sfwtw <sfwtw@qq.com>
|
||||
_Vendor="simcom"
|
||||
_Author="sfwtw"
|
||||
_Maintainer="sfwtw <unkown>"
|
||||
_Maintainer="sfwtw <sfwtw@qq.com>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
debug_subject="quectel_ctrl"
|
||||
#return raw data
|
||||
@ -35,7 +35,7 @@ get_mode()
|
||||
pcie_mode=$(echo "$pcie_cfg"|grep +CPCIEMODE: |cut -d':' -f2|xargs)
|
||||
if [ "$pcie_mode" = "EP" ] && [ "$mode_num" = "902B" ]; then
|
||||
mode_num="9001"
|
||||
json_add_int disable_mode_btn 1
|
||||
json_add_int disable_mode_btn 1
|
||||
fi
|
||||
case "$platform" in
|
||||
"qualcomm")
|
||||
@ -198,7 +198,7 @@ set_network_prefer_nr()
|
||||
get_voltage()
|
||||
{
|
||||
at_command="AT+CBC"
|
||||
local voltage=$(at ${at_port} ${at_command} | grep "+CBC:" | sed 's/+CBC: //g' | sed 's/V//g' | sed 's/\r//g')
|
||||
local voltage=$(at ${at_port} ${at_command} | grep "+CBC:" | sed 's/+CBC: //g' | sed 's/V//g' | sed 's/\r//g')
|
||||
[ -n "$voltage" ] && {
|
||||
add_plain_info_entry "voltage" "$voltage V" "Voltage"
|
||||
}
|
||||
@ -214,9 +214,9 @@ get_temperature()
|
||||
local line=1
|
||||
QTEMP=$(at ${at_port} ${at_command} | grep "+CPMUTEMP:")
|
||||
temp=$(echo $QTEMP | awk -F': ' '{print $2}' | sed 's/\r//g')
|
||||
if [ -n "$temp" ]; then
|
||||
temp="${temp}$(printf "\xc2\xb0")C"
|
||||
fi
|
||||
if [ -n "$temp" ]; then
|
||||
temp="${temp}$(printf "\xc2\xb0")C"
|
||||
fi
|
||||
add_plain_info_entry "temperature" "$temp" "Temperature"
|
||||
}
|
||||
|
||||
@ -255,15 +255,15 @@ sim_info()
|
||||
|
||||
#SIM Slot(SIM卡卡槽)
|
||||
at_command="AT+SMSIMCFG?"
|
||||
sim_slot=$(at $at_port $at_command | grep "+SMSIMCFG:" | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
sim_slot=$(at $at_port $at_command | grep "+SMSIMCFG:" | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
|
||||
#IMEI(国际移动设备识别码)
|
||||
at_command="AT+CGSN"
|
||||
imei=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
imei=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
|
||||
#SIM Status(SIM状态)
|
||||
at_command="AT+CPIN?"
|
||||
sim_status_flag=$(at $at_port $at_command | sed -n '2p')
|
||||
sim_status_flag=$(at $at_port $at_command | sed -n '2p')
|
||||
sim_status=$(get_sim_status "$sim_status_flag")
|
||||
|
||||
if [ "$sim_status" != "ready" ]; then
|
||||
@ -285,15 +285,15 @@ sim_info()
|
||||
|
||||
#SIM Number(SIM卡号码,手机号)
|
||||
at_command="AT+CNUM"
|
||||
sim_number=$(at $at_port $at_command | sed -n '2p' | awk -F'"' '{print $4}')
|
||||
sim_number=$(at $at_port $at_command | sed -n '2p' | awk -F'"' '{print $4}')
|
||||
|
||||
#IMSI(国际移动用户识别码)
|
||||
at_command="AT+CIMI"
|
||||
imsi=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
imsi=$(at $at_port $at_command | sed -n '2p' | sed 's/\r//g')
|
||||
|
||||
#ICCID(集成电路卡识别码)
|
||||
at_command="AT+ICCID"
|
||||
iccid=$(at $at_port $at_command | grep -o "+ICCID:[ ]*[-0-9]\+" | grep -o "[-0-9]\{1,4\}")
|
||||
iccid=$(at $at_port $at_command | grep -o "+ICCID:[ ]*[-0-9]\+" | grep -o "[-0-9]\{1,4\}")
|
||||
class="SIM Information"
|
||||
case "$sim_status" in
|
||||
"ready")
|
||||
@ -325,11 +325,8 @@ sim_info()
|
||||
#网络信息
|
||||
network_info()
|
||||
{
|
||||
m_debug "Quectel network info"
|
||||
m_debug "Simcom network info"
|
||||
|
||||
#Connect Status(连接状态)
|
||||
|
||||
#Network Type(网络类型)
|
||||
at_command="AT+CPSI?"
|
||||
network_type=$(at ${at_port} ${at_command} | grep "+CPSI:" | awk -F',' '{print $1}' | sed 's/+CPSI: //g')
|
||||
|
||||
@ -339,29 +336,8 @@ network_info()
|
||||
network_type=$(get_rat ${rat_num})
|
||||
}
|
||||
|
||||
#CSQ(信号强度)
|
||||
at_command="AT+CSQ"
|
||||
response=$(at ${at_port} ${at_command} | grep "+CSQ:" | sed 's/+CSQ: //g' | sed 's/\r//g')
|
||||
|
||||
#RSSI(信号强度指示)
|
||||
# rssi_num=$(echo $response | awk -F',' '{print $1}')
|
||||
# rssi=$(get_rssi $rssi_num)
|
||||
#Ber(信道误码率)
|
||||
# ber=$(echo $response | awk -F',' '{print $2}')
|
||||
|
||||
#PER(信号强度)
|
||||
# if [ -n "$csq" ]; then
|
||||
# per=$((csq * 100/31))"%"
|
||||
# fi
|
||||
|
||||
class="Network Information"
|
||||
add_plain_info_entry "Network Type" "$network_type" "Network Type"
|
||||
add_plain_info_entry "CQI UL" "" "Channel Quality Indicator for Uplink"
|
||||
add_plain_info_entry "CQI DL" "" "Channel Quality Indicator for Downlink"
|
||||
add_plain_info_entry "AMBR UL" "" "Access Maximum Bit Rate for Uplink"
|
||||
add_plain_info_entry "AMBR DL" "" "Access Maximum Bit Rate for Downlink"
|
||||
add_plain_info_entry "Tx Rate" "" "Transmit Rate"
|
||||
add_plain_info_entry "Rx Rate" "" "Receive Rate"
|
||||
}
|
||||
|
||||
#获取频段
|
||||
@ -549,7 +525,7 @@ get_neighborcell_qualcomm(){
|
||||
nr_lock_check="AT+C5GCELLCFG?"
|
||||
lte_lock_check="AT+CCELLCFG?"
|
||||
lte_status=$(at $at_port $lte_lock_check | grep "+CCELLCFG:")
|
||||
if [ "$lte_status" != "+CCELLCFG: 0,0" ]; then
|
||||
if [ ! -z "$lte_status" ]; then
|
||||
lte_lock_status="locked"
|
||||
else
|
||||
lte_lock_status=""
|
||||
@ -557,19 +533,28 @@ get_neighborcell_qualcomm(){
|
||||
lte_lock_freq=$(echo $lte_status | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
lte_lock_pci=$(echo $lte_status | awk -F',' '{print $1}' | sed 's/+CCELLCFG: //g' | sed 's/\r//g')
|
||||
nr_status=$(at $at_port $nr_lock_check | grep "+C5GCELLCFG:")
|
||||
nr_lock_status=$(echo $nr_status | awk -F': ' '{print $2}' | sed 's/\r//g')
|
||||
nr_lock_pci=$(echo $nr_status | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
nr_lock_freq=$(echo $nr_status | awk -F',' '{print $3}' | sed 's/\r//g')
|
||||
nr_lock_scs=$(echo $nr_status | awk -F',' '{print $4}' | sed 's/\r//g')
|
||||
nr_lock_band=$(echo $nr_status | awk -F',' '{print $5}' | sed 's/\r//g')
|
||||
nr_lock_status=$(echo "$nr_status" | awk -F': ' '{print $2}' | xargs)
|
||||
nr_lock_pci=$(echo "$nr_status" | awk -F',' '{print $2}' | xargs)
|
||||
nr_lock_freq=$(echo "$nr_status" | awk -F',' '{print $3}' | xargs)
|
||||
nr_lock_scs=$(echo "$nr_status" | awk -F',' '{print $4}' | xargs)
|
||||
nr_lock_band=$(echo "$nr_status" | awk -F',' '{print $5}' | xargs)
|
||||
if [ "$nr_lock_status" != "0" ]; then
|
||||
nr_lock_status="locked"
|
||||
else
|
||||
nr_lock_status=""
|
||||
fi
|
||||
|
||||
|
||||
at $at_port $at_command > /tmp/neighborcell
|
||||
modem_status=$(at $at_port $at_command)
|
||||
modem_status_net=$(echo "$modem_status"|grep "+CPSI:"|awk -F',' '{print $1}'|awk -F':' '{print $2}'|xargs)
|
||||
modem_status_band=$(echo "$modem_status"|grep "+CPSI:"|awk -F',' '{print $7}'|awk -F'_' '{print $2}'|sed 's/BAND//g'|xargs)
|
||||
if [ $modem_status_net == "NR5G_SA" ];then
|
||||
scans=$(at $at_port "AT+CNWSEARCH=\"nr5g\"")
|
||||
sleep 10
|
||||
at $at_port "AT+CNWSEARCH=\"nr5g\",3" > /tmp/neighborcell
|
||||
elif [ $modem_status_net == "LTE" ];then
|
||||
at $at_port "AT+CNWSEARCH=\"lte\",1" > /tmp/neighborcell
|
||||
sleep 5
|
||||
fi
|
||||
json_add_object "Feature"
|
||||
json_add_string "Unlock" "2"
|
||||
json_add_string "Lock PCI" "1"
|
||||
@ -599,9 +584,9 @@ get_neighborcell_qualcomm(){
|
||||
fi
|
||||
json_close_object
|
||||
while read line; do
|
||||
if [ -n "$(echo $line | grep "+CPSI:")" ]; then
|
||||
if [ -n "$(echo $line | grep "+NR_NGH_CELL:")" ] || [ -n "$(echo $line | grep "+LTE_CELL:")" ]; then
|
||||
# CPSI: NR5G_SA,Online,460-01,0x6F4700,29869309958,95,NR5G_BAND78,627264,-800,-110,14
|
||||
line=$(echo $line | sed 's/+CPSI: //g')
|
||||
|
||||
case $line in
|
||||
*WCDMA*)
|
||||
type="WCDMA"
|
||||
@ -611,37 +596,34 @@ get_neighborcell_qualcomm(){
|
||||
rscp=$(echo $line | awk -F',' '{print $11}')
|
||||
ecno=$(echo $line | awk -F',' '{print $10}')
|
||||
;;
|
||||
*LTE*)
|
||||
*LTE_CELL*)
|
||||
type="LTE"
|
||||
arfcn=$(echo $line | awk -F',' '{print $8}')
|
||||
pci=$(echo $line | awk -F',' '{print $6}')
|
||||
rsrp=$(echo $line | awk -F',' '{print $12}')
|
||||
rsrq=$(echo $line | awk -F',' '{print $11}')
|
||||
arfcn=$(echo $line | awk -F',' '{print $6}')
|
||||
pci=$(echo $line | awk -F',' '{print $7}')
|
||||
rsrp=$(echo $line | awk -F',' '{print $8}')
|
||||
rsrq=$(echo $line | awk -F',' '{print $9}')
|
||||
band=$(echo $line | awk -F',' '{print $5}')
|
||||
mnc=$(echo $line | awk -F',' '{print $2}')
|
||||
;;
|
||||
*NR5G_SA*)
|
||||
type="NR5G_SA"
|
||||
arfcn=$(echo $line | awk -F',' '{print $8}')
|
||||
pci=$(echo $line | awk -F',' '{print $6}')
|
||||
rsrp=$(echo $line | awk -F',' '{print $9}')
|
||||
rsrq=$(echo $line | awk -F',' '{print $10}')
|
||||
;;
|
||||
*NR5G_NSA*)
|
||||
type="NR5G_NSA"
|
||||
arfcn=$(echo $line | awk -F',' '{print $4}')
|
||||
*NR_NGH_CELL*)
|
||||
type="NR"
|
||||
arfcn=$(echo $line | awk -F',' '{print $1}'| awk -F':' '{print $2}'| xargs)
|
||||
pci=$(echo $line | awk -F',' '{print $2}')
|
||||
rsrp=$(echo $line | awk -F',' '{print $5}')
|
||||
rsrq=$(echo $line | awk -F',' '{print $6}')
|
||||
rsrp=$(echo $line | awk -F',' '{print $3}')
|
||||
rsrq=$(echo $line | awk -F',' '{print $4}')
|
||||
band=$modem_status_band
|
||||
;;
|
||||
esac
|
||||
json_select $type
|
||||
json_add_object ""
|
||||
json_add_string "neighbourcell" "neighbourcell"
|
||||
json_add_string "mnc" "$mnc"
|
||||
json_add_string "arfcn" "$arfcn"
|
||||
json_add_string "pci" "$pci"
|
||||
json_add_string "rscp" "$rscp"
|
||||
json_add_string "ecno" "$ecno"
|
||||
json_add_string "rsrp" "$rsrp"
|
||||
json_add_string "rsrq" "$rsrq"
|
||||
json_add_string "band" "$band"
|
||||
json_close_object
|
||||
json_select ".."
|
||||
fi
|
||||
@ -695,8 +677,8 @@ lockcell_qualcomm(){
|
||||
res2=$(at $at_port $unlock4g)
|
||||
res=$res1,$res2
|
||||
else
|
||||
lock4g="AT+CCELLCFG=1,$arfcn,$pci;+CNMP=38"
|
||||
locknr="AT+C5GCELLCFG="pci",$pci,$arfcn,$(get_scs $scs),$band;+CNMP=71"
|
||||
lock4g="AT+CCELLCFG=1,$pci,$arfcn;+CNMP=38"
|
||||
locknr="AT+C5GCELLCFG=\"pci\",$pci,$arfcn,$scs,$band;+CNMP=71"
|
||||
if [ $rat = "1" ]; then
|
||||
res=$(at $at_port $locknr)
|
||||
else
|
||||
@ -721,7 +703,7 @@ get_bandwidth()
|
||||
|
||||
local bandwidth
|
||||
case $network_type in
|
||||
"LTE")
|
||||
"LTE")
|
||||
case $bandwidth_num in
|
||||
"0") bandwidth="1.4" ;;
|
||||
"1") bandwidth="3" ;;
|
||||
@ -736,7 +718,7 @@ get_bandwidth()
|
||||
"14") bandwidth="400" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
echo "$bandwidth"
|
||||
}
|
||||
|
||||
@ -745,14 +727,14 @@ get_bandwidth()
|
||||
get_scs()
|
||||
{
|
||||
local scs
|
||||
case $1 in
|
||||
"0") scs="15" ;;
|
||||
"1") scs="30" ;;
|
||||
case $1 in
|
||||
"0") scs="15" ;;
|
||||
"1") scs="30" ;;
|
||||
"2") scs="60" ;;
|
||||
"3") scs="120" ;;
|
||||
"4") scs="240" ;;
|
||||
*) scs=$(awk "BEGIN{ print 2^$1 * 15 }") ;;
|
||||
esac
|
||||
esac
|
||||
echo "$scs"
|
||||
}
|
||||
|
||||
@ -761,10 +743,10 @@ get_scs()
|
||||
get_phych()
|
||||
{
|
||||
local phych
|
||||
case $1 in
|
||||
"0") phych="DPCH" ;;
|
||||
case $1 in
|
||||
"0") phych="DPCH" ;;
|
||||
"1") phych="FDPCH" ;;
|
||||
esac
|
||||
esac
|
||||
echo "$phych"
|
||||
}
|
||||
|
||||
@ -773,10 +755,10 @@ get_phych()
|
||||
get_sf()
|
||||
{
|
||||
local sf
|
||||
case $1 in
|
||||
"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7") sf=$(awk "BEGIN{ print 2^$(($1+2)) }") ;;
|
||||
case $1 in
|
||||
"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7") sf=$(awk "BEGIN{ print 2^$(($1+2)) }") ;;
|
||||
"8") sf="UNKNOWN" ;;
|
||||
esac
|
||||
esac
|
||||
echo "$sf"
|
||||
}
|
||||
|
||||
@ -785,10 +767,10 @@ get_sf()
|
||||
get_slot()
|
||||
{
|
||||
local slot=$1
|
||||
# case $1 in
|
||||
# "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"10"|"11"|"12"|"13"|"14"|"15"|"16") slot=$1 ;;
|
||||
# case $1 in
|
||||
# "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"10"|"11"|"12"|"13"|"14"|"15"|"16") slot=$1 ;;
|
||||
# "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9") slot=$1 ;;
|
||||
# esac
|
||||
# esac
|
||||
echo "$slot"
|
||||
}
|
||||
|
||||
@ -950,10 +932,10 @@ cell_info()
|
||||
add_plain_info_entry "CQI" "$nr_cql" "Channel Quality Indicator"
|
||||
add_plain_info_entry "TX Power" "$nr_tx_power" "TX Power"
|
||||
add_plain_info_entry "DL/UL MOD" "$nr_dlmod / $nr_ulmod" "DL/UL MOD"
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "RSSI" "$nr_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$nr_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$nr_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "SCS" "$nr_scs" "SCS"
|
||||
add_plain_info_entry "Srxlev" "$nr_srxlev" "Serving Cell Receive Level"
|
||||
@ -972,9 +954,9 @@ cell_info()
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$endc_lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$endc_lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$endc_lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$endc_lte_rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "RxLev" "$endc_lte_rxlev" "Received Signal Level"
|
||||
add_plain_info_entry "RSSNR" "$endc_lte_rssnr" "Radio Signal Strength Noise Ratio"
|
||||
add_plain_info_entry "CQI" "$endc_lte_cql" "Channel Quality Indicator"
|
||||
@ -987,9 +969,9 @@ cell_info()
|
||||
add_plain_info_entry "ARFCN" "$endc_nr_arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Band" "$endc_nr_band" "Band"
|
||||
add_plain_info_entry "DL Bandwidth" "$endc_nr_dl_bandwidth" "DL Bandwidth"
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -187 -29 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -43 20 dBm
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRP" "$endc_nr_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$endc_nr_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "SINR" "$endc_nr_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "SCS" "$endc_nr_scs" "SCS"
|
||||
;;
|
||||
"LTE Mode")
|
||||
@ -1004,9 +986,9 @@ cell_info()
|
||||
add_plain_info_entry "DL Bandwidth" "$lte_dl_bandwidth" "DL Bandwidth"
|
||||
add_plain_info_entry "TAC" "$lte_tac" "Tracking area code of cell served by neighbor Enb"
|
||||
add_bar_info_entry "RSRP" "$lte_rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -20 20 dBm
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -140 -44 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" -23 40 dB
|
||||
add_bar_info_entry "RSRQ" "$lte_rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$lte_rssi" "Received Signal Strength Indicator" -120 -22 dBm
|
||||
add_bar_info_entry "SINR" "$lte_sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
add_plain_info_entry "CQI" "$lte_cql" "Channel Quality Indicator"
|
||||
add_plain_info_entry "TX Power" "$lte_tx_power" "TX Power"
|
||||
add_plain_info_entry "Srxlev" "$lte_srxlev" "Serving Cell Receive Level"
|
||||
|
771
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/telit.sh
vendored
Normal file
771
luci/luci-app-qmodem/root/usr/share/qmodem/vendor/telit.sh
vendored
Normal file
@ -0,0 +1,771 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2025 sfwtw <sfwtw@qq.com>
|
||||
_Vendor="telit"
|
||||
_Author="sfwtw"
|
||||
_Maintainer="sfwtw <sfwtw@qq.com>"
|
||||
source /usr/share/qmodem/generic.sh
|
||||
debug_subject="telit_ctrl"
|
||||
|
||||
vendor_get_disabled_features()
|
||||
{
|
||||
json_add_string "" "IMEI"
|
||||
json_add_string "" "NeighborCell"
|
||||
}
|
||||
|
||||
get_mode()
|
||||
{
|
||||
at_command='AT#USBCFG?'
|
||||
local mode_num=$(at ${at_port} ${at_command} | grep -o "#USBCFG:" | awk -F': ' '{print $2}')
|
||||
case "$mode_num" in
|
||||
"0") mode="rndis" ;;
|
||||
"1") mode="qmi" ;;
|
||||
"2") mode="mbim" ;;
|
||||
"3") mode="ecm" ;;
|
||||
*) mode="${mode_num}" ;;
|
||||
esac
|
||||
available_modes=$(uci -q get qmodem.$config_section.modes)
|
||||
json_add_object "mode"
|
||||
for available_mode in $available_modes; do
|
||||
if [ "$mode" = "$available_mode" ]; then
|
||||
json_add_string "$available_mode" "1"
|
||||
else
|
||||
json_add_string "$available_mode" "0"
|
||||
fi
|
||||
done
|
||||
json_close_object
|
||||
}
|
||||
|
||||
set_mode()
|
||||
{
|
||||
local mode=$1
|
||||
case $mode in
|
||||
"rndis") mode="0" ;;
|
||||
"qmi") mode="1" ;;
|
||||
"mbim") mode="2" ;;
|
||||
"ecm") mode="3" ;;
|
||||
*) echo "Invalid mode" && return 1;;
|
||||
esac
|
||||
at_command='AT#USBCFG='${mode}
|
||||
res=$(at "${at_port}" "${at_command}")
|
||||
json_select "result"
|
||||
json_add_string "set_mode" "$res"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
get_network_prefer()
|
||||
{
|
||||
at_command='AT+WS46?'
|
||||
local response=$(at ${at_port} ${at_command} | grep "+WS46:" | awk -F': ' '{print $2}' | sed 's/\r//g')
|
||||
|
||||
network_prefer_3g="0";
|
||||
network_prefer_4g="0";
|
||||
network_prefer_5g="0";
|
||||
|
||||
#匹配不同的网络类型
|
||||
local auto=$(echo "${response}" | grep "38")
|
||||
if [ -n "$auto" ]; then
|
||||
network_prefer_3g="1"
|
||||
network_prefer_4g="1"
|
||||
network_prefer_5g="1"
|
||||
else
|
||||
local wcdma=$(echo "${response}" | grep "22" || echo "${response}" | grep "31" || echo "${response}" | grep "38" || echo "${response}" | grep "40")
|
||||
local lte=$(echo "${response}" | grep "28" || echo "${response}" | grep "31" || echo "${response}" | grep "37" || echo "${response}" | grep "38")
|
||||
local nr=$(echo "${response}" | grep "36" || echo "${response}" | grep "37" || echo "${response}" | grep "38" || echo "${response}" | grep "40")
|
||||
if [ -n "$wcdma" ]; then
|
||||
network_prefer_3g="1"
|
||||
fi
|
||||
if [ -n "$lte" ]; then
|
||||
network_prefer_4g="1"
|
||||
fi
|
||||
if [ -n "$nr" ]; then
|
||||
network_prefer_5g="1"
|
||||
fi
|
||||
fi
|
||||
json_add_object network_prefer
|
||||
json_add_string 3G $network_prefer_3g
|
||||
json_add_string 4G $network_prefer_4g
|
||||
json_add_string 5G $network_prefer_5g
|
||||
json_close_object
|
||||
}
|
||||
|
||||
set_network_prefer()
|
||||
{
|
||||
network_prefer_3g=$(echo $1 |jq -r 'contains(["3G"])')
|
||||
network_prefer_4g=$(echo $1 |jq -r 'contains(["4G"])')
|
||||
network_prefer_5g=$(echo $1 |jq -r 'contains(["5G"])')
|
||||
length=$(echo $1 |jq -r 'length')
|
||||
|
||||
case "$length" in
|
||||
"1")
|
||||
if [ "$network_prefer_3g" = "true" ]; then
|
||||
network_prefer_config="22"
|
||||
elif [ "$network_prefer_4g" = "true" ]; then
|
||||
network_prefer_config="28"
|
||||
elif [ "$network_prefer_5g" = "true" ]; then
|
||||
network_prefer_config="36"
|
||||
fi
|
||||
;;
|
||||
"2")
|
||||
if [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_4g" = "true" ]; then
|
||||
network_prefer_config="31"
|
||||
elif [ "$network_prefer_3g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
network_prefer_config="40"
|
||||
elif [ "$network_prefer_4g" = "true" ] && [ "$network_prefer_5g" = "true" ]; then
|
||||
network_prefer_config="37"
|
||||
fi
|
||||
;;
|
||||
"3") network_prefer_config="38" ;;
|
||||
*) network_prefer_config="38" ;;
|
||||
esac
|
||||
|
||||
at_command='AT+WS46='${network_prefer_config}
|
||||
at "${at_port}" "${at_command}"
|
||||
}
|
||||
|
||||
get_voltage()
|
||||
{
|
||||
at_command="AT#CBC"
|
||||
local voltage=$(at ${at_port} ${at_command} | grep "#CBC:" | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
[ -n "$voltage" ] && {
|
||||
voltage=$(awk "BEGIN {printf \"%.2f\", $voltage / 100}")
|
||||
add_plain_info_entry "voltage" "$voltage V" "Voltage"
|
||||
}
|
||||
}
|
||||
|
||||
get_temperature()
|
||||
{
|
||||
at_command="AT#TEMPSENS=2"
|
||||
local temp
|
||||
QTEMP=$(at ${at_port} ${at_command} | grep "#TEMPSENS: TSENS,")
|
||||
temp=$(echo $QTEMP | awk -F',' '{print $2}' | sed 's/\r//g')
|
||||
if [ -n "$temp" ]; then
|
||||
temp="${temp}$(printf "\xc2\xb0")C"
|
||||
fi
|
||||
add_plain_info_entry "temperature" "$temp" "Temperature"
|
||||
}
|
||||
|
||||
base_info()
|
||||
{
|
||||
m_debug "Telit base info"
|
||||
|
||||
#Name(名称)
|
||||
at_command="AT+CGMM"
|
||||
name=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
#Manufacturer(制造商)
|
||||
at_command="AT+CGMI"
|
||||
manufacturer=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
#Revision(固件版本)
|
||||
at_command="AT+CGMR"
|
||||
revision=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
class="Base Information"
|
||||
add_plain_info_entry "manufacturer" "$manufacturer" "Manufacturer"
|
||||
add_plain_info_entry "revision" "$revision" "Revision"
|
||||
add_plain_info_entry "at_port" "$at_port" "AT Port"
|
||||
get_temperature
|
||||
get_voltage
|
||||
get_connect_status
|
||||
}
|
||||
|
||||
sim_info()
|
||||
{
|
||||
m_debug "Telit sim info"
|
||||
|
||||
#SIM Slot(SIM卡卡槽)
|
||||
at_command="AT#QSS?"
|
||||
sim_slot=$(at $at_port $at_command | grep "#QSS:" | awk -F',' '{print $3}' | sed 's/\r//g')
|
||||
if [ "$sim_slot" = "0" ]; then
|
||||
sim_slot="1"
|
||||
elif [ "$sim_slot" = "1" ]; then
|
||||
sim_slot="2"
|
||||
fi
|
||||
#IMEI(国际移动设备识别码)
|
||||
at_command="AT+CGSN"
|
||||
imei=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
|
||||
#SIM Status(SIM状态)
|
||||
at_command="AT+CPIN?"
|
||||
sim_status_flag=$(at $at_port $at_command | sed -n '3p')
|
||||
sim_status=$(get_sim_status "$sim_status_flag")
|
||||
|
||||
if [ "$sim_status" != "ready" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
#ISP(互联网服务提供商)
|
||||
at_command="AT+COPS?"
|
||||
isp=$(at $at_port $at_command | sed -n '3p' | awk -F'"' '{print $2}')
|
||||
# if [ "$isp" = "CHN-CMCC" ] || [ "$isp" = "CMCC" ]|| [ "$isp" = "46000" ]; then
|
||||
# isp="中国移动"
|
||||
# # elif [ "$isp" = "CHN-UNICOM" ] || [ "$isp" = "UNICOM" ] || [ "$isp" = "46001" ]; then
|
||||
# elif [ "$isp" = "CHN-UNICOM" ] || [ "$isp" = "CUCC" ] || [ "$isp" = "46001" ]; then
|
||||
# isp="中国联通"
|
||||
# # elif [ "$isp" = "CHN-CT" ] || [ "$isp" = "CT" ] || [ "$isp" = "46011" ]; then
|
||||
# elif [ "$isp" = "CHN-TELECOM" ] || [ "$isp" = "CTCC" ] || [ "$isp" = "46011" ]; then
|
||||
# isp="中国电信"
|
||||
# fi
|
||||
|
||||
#IMSI(国际移动用户识别码)
|
||||
at_command="AT+CIMI"
|
||||
imsi=$(at $at_port $at_command | sed -n '3p' | sed 's/\r//g')
|
||||
|
||||
#ICCID(集成电路卡识别码)
|
||||
at_command="AT+ICCID"
|
||||
iccid=$(at $at_port $at_command | grep -o "+ICCID:[ ]*[-0-9]\+" | grep -o "[-0-9]\{1,4\}")
|
||||
class="SIM Information"
|
||||
case "$sim_status" in
|
||||
"ready")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "ISP" "$isp" "Internet Service Provider"
|
||||
add_plain_info_entry "SIM Slot" "$sim_slot" "SIM Slot"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
add_plain_info_entry "IMSI" "$imsi" "International Mobile Subscriber Identity"
|
||||
add_plain_info_entry "ICCID" "$iccid" "Integrate Circuit Card Identity"
|
||||
;;
|
||||
"miss")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
;;
|
||||
"unknown")
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
;;
|
||||
*)
|
||||
add_plain_info_entry "SIM Status" "$sim_status" "SIM Status"
|
||||
add_plain_info_entry "SIM Slot" "$sim_slot" "SIM Slot"
|
||||
add_plain_info_entry "IMEI" "$imei" "International Mobile Equipment Identity"
|
||||
add_plain_info_entry "IMSI" "$imsi" "International Mobile Subscriber Identity"
|
||||
add_plain_info_entry "ICCID" "$iccid" "Integrate Circuit Card Identity"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
network_info()
|
||||
{
|
||||
m_debug "Telit network info"
|
||||
|
||||
at_command="AT#CAMETRICS=1;#CAMETRICS?"
|
||||
network_type=$(at ${at_port} ${at_command} | grep "#CAMETRICS:" | awk -F',' '{print $3}')
|
||||
|
||||
at_command="AT#CQI"
|
||||
response=$(at ${at_port} ${at_command} | grep "#CQI:" | sed 's/#CQI: //g' | sed 's/\r//g')
|
||||
|
||||
if [ -n "$response" ]; then
|
||||
cqi=$(echo "$response" | cut -d',' -f1)
|
||||
second_value=$(echo "$response" | cut -d',' -f2)
|
||||
[ "$cqi" = "31" ] && cqi="$second_value"
|
||||
fi
|
||||
|
||||
class="Network Information"
|
||||
add_plain_info_entry "Network Type" "$network_type" "Network Type"
|
||||
add_plain_info_entry "CQI DL" "$cqi" "Channel Quality Indicator for Downlink"
|
||||
}
|
||||
|
||||
lte_hex_to_bands() {
|
||||
local hex_value="$1"
|
||||
local result=""
|
||||
hex_value=$(echo "$hex_value" | tr 'a-z' 'A-Z')
|
||||
local decimal=$(echo "ibase=16; $hex_value" | bc)
|
||||
local i=1
|
||||
while [ "$decimal" != "0" ]; do
|
||||
local bit=$(echo "$decimal % 2" | bc)
|
||||
if [ "$bit" -eq 1 ]; then
|
||||
result="$result B$i"
|
||||
fi
|
||||
decimal=$(echo "$decimal / 2" | bc)
|
||||
i=$(expr $i + 1)
|
||||
done
|
||||
result=$(echo "$result" | tr -s ' ' | sed -e 's/^ *//' -e 's/ *$//')
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
lte_bands_to_hex() {
|
||||
local bands="$1"
|
||||
local decimal_value=0
|
||||
for band in $bands; do
|
||||
local band_num=$(echo "$band" | sed 's/^B//')
|
||||
local bit_value=$(echo "2^($band_num-1)" | bc)
|
||||
decimal_value=$(echo "$decimal_value + $bit_value" | bc)
|
||||
done
|
||||
local hex_value=$(echo "obase=16; $decimal_value" | bc)
|
||||
echo "$hex_value"
|
||||
}
|
||||
|
||||
nr_hex_to_bands() {
|
||||
local hex_value="$1"
|
||||
local result=""
|
||||
hex_value=$(echo "$hex_value" | tr 'a-z' 'A-Z')
|
||||
local decimal=$(echo "ibase=16; $hex_value" | bc)
|
||||
local j=1
|
||||
[ "$2" = "65_128" ] && j=65
|
||||
while [ "$decimal" != "0" ]; do
|
||||
local bit=$(echo "$decimal % 2" | bc)
|
||||
if [ "$bit" -eq 1 ]; then
|
||||
result="$result N$j"
|
||||
fi
|
||||
decimal=$(echo "$decimal / 2" | bc)
|
||||
j=$(expr $j + 1)
|
||||
done
|
||||
result=$(echo "$result" | tr -s ' ' | sed -e 's/^ *//' -e 's/ *$//')
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
nr_bands_to_hex() {
|
||||
local bands="$1"
|
||||
local decimal_value=0
|
||||
local decimal_value_ext=0
|
||||
for band in $bands; do
|
||||
local band_num=$(echo "$band" | sed 's/^N//')
|
||||
if expr "$band_num" : '[0-9][0-9]*$' >/dev/null; then
|
||||
if [ $band_num -lt 65 ]; then
|
||||
local bit_value=$(echo "2^($band_num-1)" | bc)
|
||||
decimal_value=$(echo "$decimal_value + $bit_value" | bc)
|
||||
else
|
||||
local bit_value=$(echo "2^($band_num-65)" | bc)
|
||||
decimal_value_ext=$(echo "$decimal_value_ext + $bit_value" | bc)
|
||||
fi
|
||||
fi
|
||||
done
|
||||
local hex_value=$(echo "obase=16; $decimal_value" | bc)
|
||||
if [ "$decimal_value_ext" != "0" ]; then
|
||||
local hex_value_ext=$(echo "obase=16; $decimal_value_ext" | bc)
|
||||
echo "${hex_value_ext}"
|
||||
else
|
||||
echo "$hex_value"
|
||||
fi
|
||||
}
|
||||
|
||||
get_lockband()
|
||||
{
|
||||
json_add_object "lockband"
|
||||
m_debug "Telit get lockband info"
|
||||
get_lockband_config_command="AT#BND?"
|
||||
get_available_band_command="AT#BND=?"
|
||||
get_lockband_config_res=$(at $at_port $get_lockband_config_command)
|
||||
get_available_band_res=$(at $at_port $get_available_band_command)
|
||||
json_add_object "LTE"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
json_add_object "NR_NSA"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
json_add_object "NR"
|
||||
json_add_array "available_band"
|
||||
json_close_array
|
||||
json_add_array "lock_band"
|
||||
json_close_array
|
||||
json_close_object
|
||||
lte_avalible_band=$(echo $get_available_band_res | grep -o "#BND: ([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*)" | sed 's/#BND: (\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\))/\3/')
|
||||
lte_avalible_band=$(lte_hex_to_bands "$lte_avalible_band")
|
||||
nsa_nr_avalible_band_1_64=$(echo $get_available_band_res | grep -o "#BND: ([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*)" | sed 's/#BND: (\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\))/\5/')
|
||||
nsa_nr_avalible_band_65_128=$(echo $get_available_band_res | grep -o "#BND: ([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*)" | sed 's/#BND: (\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\))/\6/')
|
||||
nsa_nr_avalible_band="$(nr_hex_to_bands "$nsa_nr_avalible_band_1_64" "1_64") $(nr_hex_to_bands "$nsa_nr_avalible_band_65_128" "65_128")"
|
||||
sa_nr_avalible_band_1_64=$(echo $get_available_band_res | grep -o "#BND: ([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*)" | sed 's/#BND: (\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\))/\7/')
|
||||
sa_nr_avalible_band_65_128=$(echo $get_available_band_res | grep -o "#BND: ([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*),([^)]*)" | sed 's/#BND: (\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\)),(\([^)]*\))/\8/')
|
||||
sa_nr_avalible_band="$(nr_hex_to_bands "$sa_nr_avalible_band_1_64" "1_64") $(nr_hex_to_bands "$sa_nr_avalible_band_65_128" "65_128")"
|
||||
for i in $(echo "$lte_avalible_band" | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "LTE"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
for i in $(echo "$nsa_nr_avalible_band" | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "NR_NSA"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
for i in $(echo "$sa_nr_avalible_band" | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
json_select "NR"
|
||||
json_select "available_band"
|
||||
add_avalible_band_entry "$i" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
done
|
||||
|
||||
lte_band=$(echo $get_lockband_config_res | awk -F "," '{print $3}')
|
||||
lte_band=$(lte_hex_to_bands "$lte_band")
|
||||
nsa_nr_band_1_64=$(echo $get_lockband_config_res | awk -F "," '{print $5}')
|
||||
nsa_nr_band_65_128=$(echo $get_lockband_config_res | awk -F "," '{print $6}')
|
||||
nsa_nr_band="$(nr_hex_to_bands "$nsa_nr_band_1_64" "1_64") $(nr_hex_to_bands "$nsa_nr_band_65_128" "65_128")"
|
||||
sa_nr_band_1_64=$(echo $get_lockband_config_res | awk -F "," '{print $7}')
|
||||
sa_nr_band_65_128=$(echo $get_lockband_config_res | awk -F "," '{print $8}' | sed 's/\r//g' | sed 's/ OK//g')
|
||||
sa_nr_band="$(nr_hex_to_bands "$sa_nr_band_1_64" "1_64") $(nr_hex_to_bands "$sa_nr_band_65_128" "65_128")"
|
||||
for i in $(echo "$lte_band" | cut -d, -f2|tr -d '\r' | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "LTE"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
for i in $(echo "$nsa_nr_band" | cut -d, -f2|tr -d '\r' | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "NR_NSA"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
for i in $(echo "$sa_nr_band" | cut -d, -f2|tr -d '\r' | awk -F" " '{for(j=1; j<=NF; j++) print $j}'); do
|
||||
if [ -n "$i" ]; then
|
||||
json_select "NR"
|
||||
json_select "lock_band"
|
||||
json_add_string "" "$i"
|
||||
json_select ..
|
||||
json_select ..
|
||||
fi
|
||||
done
|
||||
json_close_array
|
||||
json_close_object
|
||||
}
|
||||
|
||||
set_lockband()
|
||||
{
|
||||
m_debug "telit set lockband info"
|
||||
config=$1
|
||||
#{"band_class":"NR","lock_band":"41,78,79"}
|
||||
band_class=$(echo $config | jq -r '.band_class')
|
||||
lock_band=$(echo $config | jq -r '.lock_band')
|
||||
lock_band=$(echo $lock_band | tr ',' ' ')
|
||||
case "$band_class" in
|
||||
"LTE")
|
||||
lock_band=$(lte_bands_to_hex "$lock_band")
|
||||
at_command="AT#BND=0,22,$lock_band"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
"NR_NSA")
|
||||
orig=$(at $at_port "AT#BND?")
|
||||
orig_lte=$(echo $orig | awk -F "," '{print $3}')
|
||||
orig_lte_ext=$(echo $orig | awk -F "," '{print $4}')
|
||||
|
||||
nr_bands_1_64=""
|
||||
nr_bands_65_128=""
|
||||
for band in $lock_band; do
|
||||
band_num=$(echo "$band" | sed 's/^N//')
|
||||
if [ "$band_num" -lt 65 ]; then
|
||||
nr_bands_1_64="$nr_bands_1_64 N$band_num"
|
||||
else
|
||||
nr_bands_65_128="$nr_bands_65_128 N$band_num"
|
||||
fi
|
||||
done
|
||||
|
||||
nsa_nr_1_64=$(nr_bands_to_hex "$nr_bands_1_64" | cut -d',' -f1)
|
||||
nsa_nr_65_128=$(nr_bands_to_hex "$nr_bands_65_128" | cut -d',' -f2)
|
||||
|
||||
[ -z "$nsa_nr_1_64" ] && nsa_nr_1_64=$orig_nsa_nr_1_64
|
||||
[ -z "$nsa_nr_65_128" ] && nsa_nr_65_128=$orig_nsa_nr_65_128
|
||||
|
||||
at_command="AT#BND=0,22,$orig_lte,$orig_lte_ext,$nsa_nr_1_64,$nsa_nr_65_128"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
"NR")
|
||||
orig=$(at $at_port "AT#BND?")
|
||||
orig_lte=$(echo $orig | awk -F "," '{print $3}')
|
||||
orig_lte_ext=$(echo $orig | awk -F "," '{print $4}')
|
||||
orig_nsa_nr_1_64=$(echo $orig | awk -F "," '{print $5}')
|
||||
orig_nsa_nr_65_128=$(echo $orig | awk -F "," '{print $6}')
|
||||
orig_sa_nr_1_64=$(echo $orig | awk -F "," '{print $7}')
|
||||
orig_sa_nr_65_128=$(echo $orig | awk -F "," '{print $8}' | sed 's/\r//g' | sed 's/ OK//g')
|
||||
nr_bands_1_64=""
|
||||
nr_bands_65_128=""
|
||||
for band in $lock_band; do
|
||||
band_num=$(echo "$band" | sed 's/^N//')
|
||||
if [ "$band_num" -lt 65 ]; then
|
||||
nr_bands_1_64="$nr_bands_1_64 N$band_num"
|
||||
else
|
||||
nr_bands_65_128="$nr_bands_65_128 N$band_num"
|
||||
fi
|
||||
done
|
||||
|
||||
nr_1_64=$(nr_bands_to_hex "$nr_bands_1_64")
|
||||
nr_65_128=$(nr_bands_to_hex "$nr_bands_65_128")
|
||||
|
||||
[ -z "$nr_1_64" ] && nr_1_64=$orig_sa_nr_1_64
|
||||
[ -z "$nr_65_128" ] && nr_65_128=$orig_sa_nr_65_128
|
||||
at_command="AT#BND=0,22,$orig_lte,$orig_lte_ext,$orig_nsa_nr_1_64,$orig_nsa_nr_65_128,$nr_1_64,$nr_65_128"
|
||||
res=$(at $at_port $at_command)
|
||||
;;
|
||||
esac
|
||||
json_select "result"
|
||||
json_add_string "set_lockband" "$res"
|
||||
json_add_string "config" "$config"
|
||||
json_add_string "band_class" "$band_class"
|
||||
json_add_string "lock_band" "$lock_band"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
calc_average() {
|
||||
local values="$1"
|
||||
local sum=0
|
||||
local count=0
|
||||
|
||||
for val in $values; do
|
||||
if [ -n "$val" ] && [ "$val" != "NA" ]; then
|
||||
sum=$(echo "$sum + $val" | bc -l)
|
||||
count=$((count + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $count -gt 0 ]; then
|
||||
printf "%.1f" $(echo "$sum / $count" | bc -l)
|
||||
else
|
||||
echo "NA"
|
||||
fi
|
||||
}
|
||||
|
||||
convert_band_number() {
|
||||
local band_num=$1
|
||||
case "$band_num" in
|
||||
120) echo "B1" ;;
|
||||
121) echo "B2" ;;
|
||||
122) echo "B3" ;;
|
||||
123) echo "B4" ;;
|
||||
124) echo "B5" ;;
|
||||
125) echo "B6" ;;
|
||||
126) echo "B7" ;;
|
||||
127) echo "B8" ;;
|
||||
128) echo "B9" ;;
|
||||
129) echo "B10" ;;
|
||||
130) echo "B11" ;;
|
||||
131) echo "B12" ;;
|
||||
132) echo "B13" ;;
|
||||
133) echo "B14" ;;
|
||||
134) echo "B17" ;;
|
||||
135) echo "B33" ;;
|
||||
136) echo "B34" ;;
|
||||
137) echo "B35" ;;
|
||||
138) echo "B36" ;;
|
||||
139) echo "B37" ;;
|
||||
140) echo "B38" ;;
|
||||
141) echo "B39" ;;
|
||||
142) echo "B40" ;;
|
||||
143) echo "B18" ;;
|
||||
144) echo "B19" ;;
|
||||
145) echo "B20" ;;
|
||||
146) echo "B21" ;;
|
||||
147) echo "B24" ;;
|
||||
148) echo "B25" ;;
|
||||
149) echo "B41" ;;
|
||||
150) echo "B42" ;;
|
||||
151) echo "B43" ;;
|
||||
152) echo "B23" ;;
|
||||
153) echo "B26" ;;
|
||||
154) echo "B32" ;;
|
||||
155) echo "B125" ;;
|
||||
156) echo "B126" ;;
|
||||
157) echo "B127" ;;
|
||||
158) echo "B28" ;;
|
||||
159) echo "B29" ;;
|
||||
160) echo "B30" ;;
|
||||
161) echo "B66" ;;
|
||||
162) echo "B250" ;;
|
||||
163) echo "B46" ;;
|
||||
166) echo "B71" ;;
|
||||
167) echo "B47" ;;
|
||||
168) echo "B48" ;;
|
||||
250) echo "N1" ;;
|
||||
251) echo "N2" ;;
|
||||
252) echo "N3" ;;
|
||||
253) echo "N5" ;;
|
||||
254) echo "N7" ;;
|
||||
255) echo "N8" ;;
|
||||
256) echo "N20" ;;
|
||||
257) echo "N28" ;;
|
||||
258) echo "N38" ;;
|
||||
259) echo "N41" ;;
|
||||
260) echo "N50" ;;
|
||||
261) echo "N51" ;;
|
||||
262) echo "N66" ;;
|
||||
263) echo "N70" ;;
|
||||
264) echo "N71" ;;
|
||||
265) echo "N74" ;;
|
||||
266) echo "N75" ;;
|
||||
267) echo "N76" ;;
|
||||
268) echo "N77" ;;
|
||||
269) echo "N78" ;;
|
||||
270) echo "N79" ;;
|
||||
271) echo "N80" ;;
|
||||
272) echo "N81" ;;
|
||||
273) echo "N82" ;;
|
||||
274) echo "N83" ;;
|
||||
275) echo "N84" ;;
|
||||
276) echo "N85" ;;
|
||||
277) echo "N257" ;;
|
||||
278) echo "N258" ;;
|
||||
279) echo "N259" ;;
|
||||
280) echo "N260" ;;
|
||||
281) echo "N261" ;;
|
||||
282) echo "N12" ;;
|
||||
283) echo "N25" ;;
|
||||
284) echo "N34" ;;
|
||||
285) echo "N39" ;;
|
||||
286) echo "N40" ;;
|
||||
287) echo "N65" ;;
|
||||
288) echo "N86" ;;
|
||||
289) echo "N48" ;;
|
||||
290) echo "N14" ;;
|
||||
291) echo "N13" ;;
|
||||
292) echo "N18" ;;
|
||||
293) echo "N26" ;;
|
||||
294) echo "N30" ;;
|
||||
295) echo "N29" ;;
|
||||
296) echo "N53" ;;
|
||||
*) echo "$band_num" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
cell_info()
|
||||
{
|
||||
m_debug "Telit cell info"
|
||||
|
||||
at_command="AT#CAINFOEXT?"
|
||||
ca_response=$(at ${at_port} ${at_command})
|
||||
|
||||
info_line=$(echo "$ca_response" | grep -o "#CAINFOEXT: [^$]*" | head -1)
|
||||
ca_count=$(echo "$info_line" | awk -F',' '{print $1}' | awk -F': ' '{print $2}')
|
||||
network_type_raw=$(echo "$info_line" | awk -F',' '{print $2}')
|
||||
network_mode=$(echo "$network_type_raw" | tr -d ' ')
|
||||
|
||||
[ "$ca_count" -gt 1 ] && network_mode="$network_mode with $ca_count CA"
|
||||
pcc_line=$(echo "$ca_response" | grep "PCC-")
|
||||
band_number=$(echo "$pcc_line" | grep -o "BandClass: [^,]*" | awk -F': ' '{print $2}')
|
||||
band=$(convert_band_number "$band_number")
|
||||
bw=$(echo "$pcc_line" | grep -o "BW: [^,]*" | awk -F': ' '{print $2}')
|
||||
if [ -z "$bw" ]; then
|
||||
dl_bw_raw=$(echo "$pcc_line" | grep -o "DL_BW: [^,]*" | awk -F': ' '{print $2}')
|
||||
case "$dl_bw_raw" in
|
||||
"0") bw="1.4 MHz" ;;
|
||||
"1") bw="3 MHz" ;;
|
||||
"2") bw="5 MHz" ;;
|
||||
"3") bw="10 MHz" ;;
|
||||
"4") bw="15 MHz" ;;
|
||||
"5") bw="20 MHz" ;;
|
||||
*) bw="$dl_bw_raw" ;;
|
||||
esac
|
||||
fi
|
||||
arfcn=$(echo "$pcc_line" | grep -o "CH: [^,]*" | awk -F': ' '{print $2}')
|
||||
[ -z "$arfcn" ] && arfcn=$(echo "$pcc_line" | grep -o "RX_CH: [^,]*" | awk -F': ' '{print $2}')
|
||||
pci=$(echo "$pcc_line" | grep -o "PCI: [^,]*" | awk -F': ' '{print $2}')
|
||||
rsrp=$(echo "$pcc_line" | grep -o "RSRP: [^,]*" | awk -F': ' '{print $2}')
|
||||
rsrq=$(echo "$pcc_line" | grep -o "RSRQ: [^,]*" | awk -F': ' '{print $2}')
|
||||
rssi=$(echo "$pcc_line" | grep -o "RSSI: [^,]*" | awk -F': ' '{print $2}')
|
||||
sinr_raw=$(echo "$pcc_line" | grep -o "SINR: [^,]*" | awk -F': ' '{print $2}')
|
||||
sinr=$(printf "%.1f" $(echo "-20 + ($sinr_raw * 0.2)" | bc -l))
|
||||
tac=$(echo "$pcc_line" | grep -o "TAC: [^,]*" | awk -F': ' '{print $2}')
|
||||
tx_power=$(echo "$pcc_line" | grep -o "TX_PWR: [^,]*" | awk -F': ' '{print $2}')
|
||||
[ -n "$tx_power" ] && tx_power=$(printf "%.1f" $(echo "$tx_power / 10" | bc -l))
|
||||
[ -z "$tx_power" ] && tx_power="0"
|
||||
ul_mod=$(echo "$pcc_line" | grep -o "UL_MOD: [^,]*" | awk -F': ' '{print $2}')
|
||||
dl_mod=$(echo "$pcc_line" | grep -o "DL_MOD: [^,]*" | awk -F': ' '{print $2}' | sed 's/[^0-9]//g')
|
||||
case "$ul_mod" in
|
||||
"0") ul_mod="BPSK" ;;
|
||||
"1") ul_mod="QPSK" ;;
|
||||
"2") ul_mod="16QAM" ;;
|
||||
"3") ul_mod="64QAM" ;;
|
||||
"4") ul_mod="256QAM" ;;
|
||||
*) ul_mod="$ul_mod" ;;
|
||||
esac
|
||||
|
||||
case "$dl_mod" in
|
||||
"0") dl_mod="BPSK" ;;
|
||||
"1") dl_mod="QPSK" ;;
|
||||
"2") dl_mod="16QAM" ;;
|
||||
"3") dl_mod="64QAM" ;;
|
||||
"4") dl_mod="256QAM" ;;
|
||||
*) dl_mod="$dl_mod" ;;
|
||||
esac
|
||||
|
||||
if [ "$ca_count" -gt 1 ]; then
|
||||
scc_band=""
|
||||
scc_bw=""
|
||||
scc_arfcn=""
|
||||
scc_pci=""
|
||||
scc_rsrp=""
|
||||
scc_rssi=""
|
||||
scc_rsrq=""
|
||||
scc_sinr=""
|
||||
for i in $(seq 0 $((ca_count-2))); do
|
||||
scc_line=$(echo "$ca_response" | grep -A 1 "SCC$i-" | tr '\r\n' ' ')
|
||||
if [ -n "$scc_line" ]; then
|
||||
scc_band_number=$(echo "$scc_line" | grep -o "BandClass: [^,]*" | awk -F': ' '{print $2}')
|
||||
scc_band_new=$(convert_band_number "$scc_band_number")
|
||||
if [ -z "$scc_band" ]; then
|
||||
scc_band="$scc_band_new"
|
||||
else
|
||||
scc_band="$scc_band / $scc_band_new"
|
||||
fi
|
||||
scc_bw_new=$(echo "$scc_line" | grep -o "BW: [^,]*" | awk -F': ' '{print $2}')
|
||||
if [ -z "$scc_bw_new" ]; then
|
||||
scc_dl_bw=$(echo "$scc_line" | grep -o "DL_BW: [^,]*" | awk -F': ' '{print $2}')
|
||||
case "$scc_dl_bw" in
|
||||
"0") scc_bw_new="1.4 MHz" ;;
|
||||
"1") scc_bw_new="3 MHz" ;;
|
||||
"2") scc_bw_new="5 MHz" ;;
|
||||
"3") scc_bw_new="10 MHz" ;;
|
||||
"4") scc_bw_new="15 MHz" ;;
|
||||
"5") scc_bw_new="20 MHz" ;;
|
||||
*) scc_bw_new="$scc_dl_bw" ;;
|
||||
esac
|
||||
fi
|
||||
if [ -z "$scc_bw" ]; then
|
||||
scc_bw="$scc_bw_new"
|
||||
else
|
||||
scc_bw="$scc_bw / $scc_bw_new"
|
||||
fi
|
||||
scc_arfcn_new=$(echo "$scc_line" | grep -o "CH: [^,]*" | awk -F': ' '{print $2}')
|
||||
[ -z "$scc_arfcn_new" ] && scc_arfcn_new=$(echo "$scc_line" | grep -o "RX_CH: [^,]*" | awk -F': ' '{print $2}')
|
||||
if [ -z "$scc_arfcn" ]; then
|
||||
scc_arfcn="$scc_arfcn_new"
|
||||
else
|
||||
scc_arfcn="$scc_arfcn / $scc_arfcn_new"
|
||||
fi
|
||||
scc_pci_new=$(echo "$scc_line" | grep -o "PCI: [^,]*" | awk -F': ' '{print $2}')
|
||||
if [ -z "$scc_pci" ]; then
|
||||
scc_pci="$scc_pci_new"
|
||||
else
|
||||
scc_pci="$scc_pci / $scc_pci_new"
|
||||
fi
|
||||
scc_rsrp_new=$(echo "$scc_line" | grep -o "RSRP: [^,]*" | awk -F': ' '{print $2}')
|
||||
scc_rsrp="$scc_rsrp $scc_rsrp_new"
|
||||
scc_rssi_new=$(echo "$scc_line" | grep -o "RSSI: [^,]*" | awk -F': ' '{print $2}')
|
||||
scc_rssi="$scc_rssi $scc_rssi_new"
|
||||
scc_rsrq_new=$(echo "$scc_line" | grep -o "RSRQ: [^,]*" | awk -F': ' '{print $2}')
|
||||
scc_rsrq="$scc_rsrq $scc_rsrq_new"
|
||||
scc_sinr_raw=$(echo "$scc_line" | grep -o "SINR: [^,]*" | awk -F': ' '{print $2}')
|
||||
scc_sinr_new=$(printf "%.1f" $(echo "-20 + ($scc_sinr_raw * 0.2)" | bc -l))
|
||||
scc_sinr="$scc_sinr $scc_sinr_new"
|
||||
fi
|
||||
done
|
||||
arfcn="$arfcn / $scc_arfcn"
|
||||
band="$band / $scc_band"
|
||||
bw="$bw / $scc_bw"
|
||||
pci="$pci / $scc_pci"
|
||||
# rsrp=$(calc_average "$rsrp $scc_rsrp")
|
||||
# rssi=$(calc_average "$rssi $scc_rssi")
|
||||
# rsrq=$(calc_average "$rsrq $scc_rsrq")
|
||||
# sinr=$(calc_average "$sinr $scc_sinr")
|
||||
fi
|
||||
|
||||
class="Cell Information"
|
||||
add_plain_info_entry "network_mode" "$network_mode" "Network Mode"
|
||||
add_plain_info_entry "Band" "$band" "Band"
|
||||
add_plain_info_entry "Bandwidth" "$bw" "Bandwidth"
|
||||
add_plain_info_entry "ARFCN" "$arfcn" "Absolute Radio-Frequency Channel Number"
|
||||
add_plain_info_entry "Physical Cell ID" "$pci" "Physical Cell ID"
|
||||
add_plain_info_entry "TAC" "$tac" "Tracking Area Code"
|
||||
add_plain_info_entry "DL/UL MOD" "$dl_mod / $ul_mod" "DL/UL MOD"
|
||||
add_plain_info_entry "TX Power" "$tx_power" "TX Power"
|
||||
add_bar_info_entry "RSRP" "$rsrp" "Reference Signal Received Power" -140 -44 dBm
|
||||
add_bar_info_entry "RSRQ" "$rsrq" "Reference Signal Received Quality" -19.5 -3 dB
|
||||
add_bar_info_entry "RSSI" "$rssi" "Received Signal Strength Indicator" -120 -20 dBm
|
||||
add_bar_info_entry "SINR" "$sinr" "Signal to Interference plus Noise Ratio Bandwidth" 0 30 dB
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user