Java 调制解调器接通时,手机偶尔会响起来;“检测到数字线路”;

Java 调制解调器接通时,手机偶尔会响起来;“检测到数字线路”;,java,serial-port,at-command,modem,Java,Serial Port,At Command,Modem,我有一个连接到raspberry pi的at调制解调器和一个作为呼叫管理器与调制解调器通信的应用程序。我的应用程序有两个主要功能: 基于callerid信息阻止调用 用抑制号码接听电话,播放音频文件,然后录制信息 大多数情况下,它工作得非常好。但是,我有多个问题: 使用ATE1(启用命令重复),第一个字符有时会丢失(“AT+VCID=1”变为“T+VCID=1”)。在极少数情况下,第一个字符将被复制(“AT+VCID=1”变为“AAT+VCID=1”)。到目前为止,这些命令执行得很好,我的

我有一个连接到raspberry pi的at调制解调器和一个作为呼叫管理器与调制解调器通信的应用程序。我的应用程序有两个主要功能:

  • 基于callerid信息阻止调用
  • 用抑制号码接听电话,播放音频文件,然后录制信息
大多数情况下,它工作得非常好。但是,我有多个问题:

  • 使用ATE1(启用命令重复),第一个字符有时会丢失(“AT+VCID=1”变为“T+VCID=1”)。在极少数情况下,第一个字符将被复制(“AT+VCID=1”变为“AAT+VCID=1”)。到目前为止,这些命令执行得很好,我的应用程序目前不得不愚蠢地解释这些丢失的字符和重复
  • 我的主要问题:在我接听的10个电话中,大约有1个是调制解调器用CONNECT应答的,并发送和接收数据(正如它应该的那样),但是电话仍然会响(我在固定电话上的电话响了,我正在用手机打固定电话)。然后,当调制解调器发送和接收音频数据时,调制解调器将向我的应用程序发送DLE命令20(DC4)和23(ETB)。当指定在语音模式下向调制解调器发送和从调制解调器接收的命令时,手册(下面的链接)没有说明这些代码。参见手册第194页/6.1.1
  • 在脏重设期间(我关闭应用程序或重新启动pi),我的第一次呼叫将不会有任何callerid信息。下班后的电话绝对没问题。我似乎能够通过完全关闭调制解调器的电源(因为重新启动pi并不能做到这一点)或优雅地关闭端口来避免这种情况
问题1和3对我来说不是问题,但是我也列出了它们,因为我不知道它们是否与我的主要问题相关

我的应用程序是用Java编写的,并使用jSerialComm进行通信。然而,我首先使用了rxtx,它在上述问题上没有做出任何改变。我注意到的唯一一件事是,即使应用程序在我这方面没有做任何事情,使用rxtx也会带来10%的cpu负载,jSerialComm已经完成了

我使用minicom在连接调制解调器时使用的serialport参数。代码如下

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秒)后,数据输出包含: “检测到数字线路”。同样,本手册将此列为可能的响应代码(一般而言,不是特定于任何内容),无需解释。

手册:

我购买的调制解调器的Amazon链接:

我可以设法解决流量控制问题。诀窍是在发送每个字节后刷新缓冲区,而不是在每个命令的基础上。那么是什么导致检测到的数字线返回呢?我有同样的problem@jeppla我不得不放弃并归还设备。我买了一台USRobotics one,它只有半双工,但即使这样也不能用作应答设备,因为切换双工方向需要调制解调器10(!)秒。我只是决定不理我。无论如何,这取决于您使用的设备。您是否使用完全相同的设备(相同的亚马逊链接,而不是相同的图片)?我使用的调制解调器有一个用于过电流保护的阈值命令,该命令被认为是被触发的,但没有帮助,当有目的地将其设置为较低时,行为略有不同。我放弃使用调制解调器来实现,尝试改为使用raspbx。我用这个我可以设法解决流量控制问题。诀窍是在发送每个字节后刷新缓冲区,而不是在每个命令的基础上。那么是什么导致检测到的数字线返回呢?我有同样的problem@jeppla我不得不放弃并归还设备。我买了一台USRobotics one,它只有半双工,但即使这样也不能用作应答设备,因为切换双工方向需要调制解调器10(!)秒。我只是决定不理我。无论如何,这取决于您使用的设备。您是否使用完全相同的设备(相同的亚马逊链接,而不是相同的图片)?我使用的调制解调器有一个用于过电流保护的阈值命令,该命令被认为是被触发的,但没有帮助,当有目的地将其设置为较低时,行为略有不同。我放弃使用调制解调器来实现,尝试改为使用raspbx。我用了这个