【问题标题】:Manage serial port from two processes simultaneosly同时管理来自两个进程的串口
【发布时间】:2015-07-23 02:53:40
【问题描述】:

我有以下场景:

  • Rasperry pi 通过串口连接到设备
  • 3g 加密狗连接到树莓派(能够拨打/接听电话)
  • 一个进程从串口读取数据并将其重定向到服务器(使用 3g)
  • 另一个等待来电的进程,当有人调用程序时,程序从串行端口获取数据,并使用 AT 命令(如传真呼叫)通过 3g 加密狗将其重定向。当有人呼叫时,呼叫是使用 AT 命令进行的,呼叫者应该能够与连接到串行端口的最终设备“通话”。

问题是两个进程不能同时使用,因为它们使用同一个串口,当一个进程已经启动时,另一个进程无法从串口读取数据(端口忙)。

有没有办法做到这一点?我可以做一个“假”的串口,或者重定向数据的东西吗?

非常感谢

【问题讨论】:

    标签: sockets unix serial-port raspberry-pi at-command


    【解决方案1】:

    您可以编写一个与真实串行端口通信但本身提供两个虚拟串行端口的服务,如此处所述Virtual Serial Port for Linux

    【讨论】:

    • 这里的问题是终端设备不能同时处理两条不同的“线路”,并且拥有两个虚拟端口会产生同样的问题,因为它们是在与同一个设备通信。跨度>
    【解决方案2】:

    就像所有好的 GSM 东西一样,有一个规范:)

    GSM 07.10 是规范,并且有一段时间可以支持您的库。有些是可以构建到服务器系统中的库,有些是实际的守护进程。

    我敢肯定,“gsm 多路复用”的快速谷歌会让你开始。

    【讨论】:

    • 我正在使用 wvdial 通过 3g 加密狗连接到互联网
    【解决方案3】:

    我在管理一些独立进程之间的串行端口时遇到了类似的问题。最后,我最好的解决方案是使用 Redis 来监听对端口的调用。

    想要发送内容的进程通过 redis 在通道“uart_request”中发布一个带有参数的 json,用于调用串行端口,以及一个使用时间戳生成的哈希(“hash_message”)。就在发布 json 之前,该进程订阅了“hash_message”。

    最后,一个进程监听“uart_request”中的帖子。当一个帖子到达时,从json中获取'hash_message',调用串口,等待响应并将响应发布到'hash_message'中。

    关键是只有一个进程控制串口,所以不需要打开和关闭。效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多