AT调制解调器接听电话,偶尔电话不断响起,“检测到数字线路”

时间:2019-09-16 14:22:39

标签: java serial-port at-command modem

我在树莓派上连接了一个at-modem,并且有一个与调制解调器通信的应用程序充当呼叫管理器。我的应用程序具有两个主要功能:

  • 根据来电显示信息阻止通话
  • 使用抑制的号码接听电话,播放音频文件,然后记录消息。

大多数时候,它都可以正常工作。但是我有多个问题:

  • 使用ATE1(启用命令重复),有时会丢失第一个字符(“ AT + VCID = 1”变为“ T + VCID = 1”)。在极少数情况下,第一个字符将被复制(“ AT + VCID = 1”变为“ AAT + VCID = 1”)。到目前为止,这些命令执行得很好,我的应用程序当前必须愚蠢地考虑这些缺失的字符和重复项。
  • 我的主要问题:我接受的电话大约有十分之一,调制解调器用CONNECT答复并发送和接收数据(应如此),但是电话仍然响起(我座机上的电话响起,以及我用来拨打固定电话的手机)。当调制解调器发送和接收音频数据时,调制解调器将向我的应用程序发送DLE命令20(DC4)和23(ETB)。当在语音模式下指定发送到调制解调器和从调制解调器接收的命令时,手册(下面的链接)没有提及这些代码。参见手册第194页/ 6.1.1
  • 在肮脏的重置过程中(我杀死了应用程序或重新启动了pi),我拨打的第一个电话将没有任何来电显示信息。下班后的电话绝对好。我似乎可以通过完全关闭调制解调器的电源(因为重新启动pi不能这样做)或从容关闭端口来规避此问题。

问题1和3对我来说不是问题,但是我也列出了这些问题,因为我不知道它们是否与我的主要问题有关。

我的应用程序是用Java编写的,并使用jSerialComm进行通信。但是,我首先使用了rxtx,它在上述问题上没有什么不同。我唯一注意到的是即使使用jSerialComm,应用程序对我而言什么都不做,使用rxtx的cpu负载也只有10%。

我使用与minicom相连的串行端口参数。下面的代码。

this.port = SerialPort.getCommPort("/dev/ttyACM0");
this.port.openPort();
this.port.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 0, 0);
this.port.setComPortParameters(115200, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
this.port.setFlowControl(SerialPort.FLOW_CONTROL_RTS_ENABLED | SerialPort.FLOW_CONTROL_CTS_ENABLED);

this.in = port.getInputStream();
this.out = port.getOutputStream();

我用来初始化调制解调器的命令:

ATE1
AT+GCI=42
AT+FCLASS=8
AT+VCID=1

并接受语音呼叫并进入接收和发送模式:

AT+VSM=1
AT+VLS=1
AT+VTR

我将命令转换为ISO-8859-1,并在发送命令之前附加\ r \ n。我也遵循手册的建议,在调制解调器发送回复消息和下一条命令之间的等待时间超过100毫秒。

编辑:我分析了我从调制解调器获得的输出数据的原始转储,并且经过短暂的沉默(1-2秒)后,数据输出包含: “检测到数字线”。同样,该手册将其列为可能的响应代码(通常,并非特定于任何内容),而没有进行解释。

手册: https://www.manualslib.com/manual/1140976/Conexant-Cx93010.html

Amazon链接到我购买的调制解调器: https://www.amazon.de/gp/product/B016MXLCEQ/

0 个答案:

没有答案