ccy*_*cyx 6 linux modem serial-port tty wwan
我正在为linux路由器编写一个小工具,当我将适当的调制解调器插入其USB端口时,它建立了一个wwan(gsm/3g)连接.当插入设备时,几个ttys被注册,我目前维护一个制造商和设备列表,他们注册的ttys是控制/数据端口.
如果可能的话,我想摆脱这个列表并找到一种方法以某种方式直接探测已注册的ttys以检查它们是控制端口还是数据端口.
我检查了wvdial和modem-manager的源代码,看看这些工具如何检测正确的端口但无法找到合适的信息.我还试图在sysfs中查找信息以区分端口,但这也不成功.
您无法通过外部手段检测到这一点。常见的做法是为特定调制解调器制造商和型号设置 udev 规则。或者您可以顺序连接到每个 tty 并通过 AT 命令验证它是什么类型的端口。
对于 udev 规则,您可以遵循以下过程:
1) 检测调制解调器 vid 和 pid 2) 基于 vid/pid 在 /dev/serial/by-id 中创建符号链接
例如,Sierra Wireless MC8795V 调制解调器,vid = 1199 和 pid 683c。我知道端口3始终是AT命令通道。因此,您可以创建一个在末尾添加 -AT 后固定的符号链接。
在通过 AT 命令进行检测的情况下,最好且更常见的方法是执行 AT 命令以查看 tty 是否有响应。如果您将调制解调器配置为不回显,您应该会收到回显或“确定”。
例如:
AT
AT
OK
Run Code Online (Sandbox Code Playgroud)
如果您收到响应,则意味着您找到了 AT 控制端口或 PPP 端口。要检查这一点,只需执行 ATI 命令即可。如果响应包含 APP1、APP2、APP3,则您命中了 PPP 端口。否则你就找到了你的AT控制端口。
以AT控制端口为例:
ATI
Manufacturer: Sierra Wireless, Incorporated
Model: MC8795V
Revision: K2_0_7_46AP C:/WS/FW/K2_0_7_46AP/MSM6290/SRC 2010/10/27 22:15:30
IMEI: XXXXXXXXXXXXXXX
IMEI SV: 20
FSN: D9A2160146410
3GPP Release 6
+GCAP: +CGSM,+DS,+ES
OK
Run Code Online (Sandbox Code Playgroud)
例如 PPP 端口:
ATI
Sierra Wireless, Incorporated
MC8795V
APP1
OK
Run Code Online (Sandbox Code Playgroud)
不过有一句警告。对于 Sierra Wireless 模块,它们清楚地显示哪个端口是哪个端口。对于其他制造商,您需要检查 USB 接口指南,看看是否可以通过 ATI 采取这种方法。
| 归档时间: |
|
| 查看次数: |
3489 次 |
| 最近记录: |