【问题标题】:Hayes AT Commands: Detect Remote Hangup?海耶斯 AT 命令:检测远程挂断?
【发布时间】:2012-05-02 11:53:49
【问题描述】:

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

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

你如何“监听”远程挂断?

【问题讨论】:

  • P.S.我没有代表创建 56k-modem 或 softmodem 标签。调制解调器标签似乎与 Internet 访问调制解调器有关,而不是 56k 调制解调器到调制解调器链接。
  • 我添加了一个 [at-command] 标签;这应该足够了。 [listen] 并不是真正的标签。
  • 有趣的一个。在 RS232 硬件世界中,有用于此的 CD(载波检测)线。如果您使用的是 API/库,是否有相关的虚拟化?
  • 就我而言,我打开/dev/ttySL0 进行读/写。调制解调器显然能够检测到远程挂断(因为它在那个事件中给了我NO CARRIER)但我不知道如何在用户空间中区分远程挂断和远程端应用程序发送@987654326 @.
  • 如果您正在阅读此问题,调制解调器将多次收到大写文本NO CARRIER。但是从调制解调器,它应该包含在换行符中。检测到该文本后,您可以尝试使用+++ 切换到命令模式。如果可行,则您的连接仍然存在;如果没有(因为您已经在那里并且+++ 是无效命令),则连接已断开。如果它仍然存在,则重新连接它并继续。

标签: c modem at-command


【解决方案1】:

这是调制解调器上的硬件信号,即载波检测 (CD) 线路。您需要对其进行监视才能知道连接已丢失。 linux 的基础知识在this how-to 中进行了描述,您可以使用 TIOCM_CAR 命令通过 ioctl() 获取信号状态。

【讨论】:

  • 这似乎正是我想要的。不过,这比我希望将其归结为一个工作示例需要更多的工作。在我的第一个实验中,DCD 一开始是禁用的,并在建立连接时启用(如预期的那样),但是当远程调制解调器断开连接时,即使我从设备读取了NO CARRIER,DCD 仍然保持启用状态。
  • 那么它是如何关闭的 :)
  • 当我调用 TIOCSSOFTCAR ioctl 清除 CLOCAL 时,它会重置为 0。
  • 由于时间限制,我个人无法完成这项工作,因此我找到了另一种方法来解决我的特定问题,该方法不涉及编写与调制解调器接口的新软件。
【解决方案2】:

以文本形式测试NO CARRIER 是不够的。这段文字经常出现在网络上的网站上,甚至在问答网站上。

来自调制解调器,它应该包含在换行符中。

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

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2014-05-22
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2012-06-08
    相关资源
    最近更新 更多