gpt4 book ai didi

c++ - 串口编程中的PNP(Plug and Play)事件处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:00 24 4
gpt4 key购买 nike

我正在编写一个应用程序,例如用于 RS232 端口连接设备的串行端口驱动程序。我在处理即插即用事件时遇到问题(How to notify connect and disconnect devices to installed RS232 ports of PC?)。我正在为每个设备打开一个文件描述符 (/dev/ttySx),我需要在将设备连接到 PC 时打开它,在断开连接时需要关闭它。我的问题是我是否需要像在 USB 设备(在 libusb 库中)一样在串行端口编程中处理 PNP 事件,如果需要,最好的方法是什么?

操作系统:CentOS

编程语言:C++

最佳答案

因此,传统串行端口没有直接的 PNP 事件 - 显然 USB 串行端口在某种程度上是串行端口,但我相信这是由串行设备的“usb 驱动程序”处理的,而不是其他东西你需要处理。

不幸的是,没有明确的方法可以确定串行端口上连接的最基本行为(RX、TX 和接地的三根线)。如果您至少使用四根线,则可以使用 DCD(数据载波检测)来注意到串行端口“连接在另一端”。在 linux 中,没有办法在用户模式下识别 DCD 引脚本身的变化。如果您尝试使用 fd = open("/dev/ttyS0", O_RDWR); - 如果您指定 O_NONBLOCK 它将立即打开,无论 DCD 的状态如何。如果您未指定 O_NONBLOCK,则操作系统会在打开之前等待运营商出现。如果需要,可以稍后将文件更改为非阻塞。然后,您将不得不使用 IOCTL 调用(或这些调用的其他一些包装)来轮询 DCD:http://man7.org/linux/man-pages/man4/tty_ioctl.4.html

“检测”串行端口的另一种方法是简单地从端口发送一些内容,然后查看是否收到(正确类型的)答复。这显然假设该设备实际上被设计为以某种方式响应串行端口上的某些事件 - 例如,调制解调器将接受“Hayes 命令”或“AT 命令”,并将一些信息返回给这些命令。但是,当然,要使其正常工作,您需要先打开设备,然后发送内容,并且(如果是调制解调器)很难检测到设备何时消失。当然,如果你的另一端有“你自己的”设备,你可以在没有“流量”的情况下,发送一个“ping”命令来询问对方机器是否还在。如果没有回复,那么设备就没了……

关于c++ - 串口编程中的PNP(Plug and Play)事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com