Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Hayes AT命令:检测远程挂断?_C_Modem_At Command - Fatal编程技术网

C Hayes AT命令:检测远程挂断?

C Hayes AT命令:检测远程挂断?,c,modem,at-command,C,Modem,At Command,您应该如何通过编程来检测通话中的远程调制解调器何时挂断?我正在写一个C程序,它与Ubuntu linux中的SoftModem设备/dev/ttySL0接口。我能够使用Hayes AT命令配置调制解调器,并与远程调制解调器通信。然而,我无法确定如何检测到另一端挂断了线路 我配置了调制解调器,以便在另一端挂断时,设备打印无载波,并切换到命令模式。但是,我不能使用无载波字符串,因为我不能保证调制解调器在数据模式下不会接收该字符串 如何“监听”远程挂断?这是调制解调器上的硬件信号,即载波检测(CD)线

您应该如何通过编程来检测通话中的远程调制解调器何时挂断?我正在写一个C程序,它与Ubuntu linux中的SoftModem设备
/dev/ttySL0
接口。我能够使用Hayes AT命令配置调制解调器,并与远程调制解调器通信。然而,我无法确定如何检测到另一端挂断了线路

我配置了调制解调器,以便在另一端挂断时,设备打印
无载波
,并切换到命令模式。但是,我不能使用
无载波
字符串,因为我不能保证调制解调器在数据模式下不会接收该字符串


如何“监听”远程挂断?

这是调制解调器上的硬件信号,即载波检测(CD)线路。您需要对其进行监视,以知道连接已断开。linux中的基础知识在中介绍,您可以使用TIOCM_CAR命令通过ioctl()获取信号状态。

测试
无载波
,因为文本是不够的。这篇文章经常出现在网上的网站上,甚至在问答网站上

来自调制解调器的数据应包含在换行符中


此外,在检测到该文本后,可以尝试使用
++
切换到命令模式。如果这样做有效,您的连接将持续存在,您可以重新连接并继续使用它。如果没有(因为您已经在那里并且
++
是无效命令),则连接已断开。

p.S.我没有代表创建56k调制解调器或softmodem标记。与56k调制解调器到调制解调器的链接相比,调制解调器标签似乎更多地与Internet接入调制解调器有关;这就足够了。[听]不是真正的标签,很有趣。在RS232硬件世界中,有用于此目的的CD(载波检测)导线。如果您使用的是API/库,是否存在相关的虚拟化?在我的例子中,我正在打开
/dev/ttySL0
进行读/写。调制解调器显然能够检测到远程挂断(因为在这种情况下它给我提供了
无载波
),但我不知道如何在用户空间中区分远程挂断和远程端发送
无载波
的应用程序。如果您正在阅读此问题,调制解调器将多次接收大写文本
NO CARRIER
。但是从调制解调器上看,它应该用换行符括起来。检测到该文本后,可以尝试使用
++
切换到命令模式。如果这样做有效,您的连接将持续存在;如果没有(因为您已经在那里,
++
是无效的命令),则连接已断开。如果它仍然在那里,你重新连接它,继续。这当然是我一直在寻找的。不过,这需要做的工作比我希望将其归结为一个有效的例子要多。在我的第一个实验中,DCD一开始被禁用,在建立连接时被启用(如预期),但当远程调制解调器断开连接时,DCD保持启用状态,即使在我从设备中读取了
无载波之后。它如何关闭:)当我调用
TIOCSSOFTCAR
ioctl清除CLOCAL时,它会重置为0。由于时间限制,我个人无法执行此操作,所以我找到了另一种方法来解决我的具体问题,它不涉及编写与调制解调器接口的新软件。