我正在为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中创建符号链接
例如,具有vid = 1199和pid 683c的Sierra Wireless MC8795V调制解调器.我知道端口3始终是AT命令通道.因此,您可以在末尾创建一个使用-AT后固定的符号链接.
在通过AT命令检测的情况下,最好和更常见的方法是执行AT命令以查看tty是否响应.如果您的调制解调器配置为不回显,则应该回显或回复.
例如:
AT
AT
OK
如果您收到回复,则表示您找到了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
例如PPP端口:
ATI
Sierra Wireless,Incorporated
MC8795V
APP1
OK
但是有一个警告的话.在Sierra Wireless模块的情况下,他们清楚地显示哪个端口是哪个.对于其他制造商,您需要检查USB接口指南,看看是否可以通过ATI采用这种方法.