1

我正在使用ORSSerialPort重写一个 OSX 控件应用程序。在某些情况下,我想控制一个没有直接连接到我的机器的串口设备,或者在本地模拟该设备的通信以进行测试。使用socat one 可以创建虚拟串行端口,例如在本地或通过网络从真实串行设备进行通信。

例如,在这里我创建了一对虚拟设备/dev/master/dev/slavesudo socat -d -d -d -d -lf /tmp/socat pty,link=/dev/master,ixoff=0,ixon=0,ispeed=9600,ospeed=9600,echo=0,crtscts=0,user=gerwin,group=staff pty,link=/dev/slave,rawer,echo=0,user=gerwin,group=staff

使用这样的设置,我可以使用 pySerial 连接到虚拟端口。但是,使用 ORSSerialPort 对我不起作用。

单步执行代码时,这似乎源于 ORSSerialPort 仅依赖于 IOKit,其中“虚拟”设备不会出现在其雷达上。同样,当使用路径初始化实例时,例如/dev/master,对应的io_object_t不存在 - 并且初始化返回 nil。

我想避免深入研究 IOKit 和内核的东西(如此处所建议的)。

查看我看到的代码,sendData 写入文件描述符。是否有一种方法可以用“普通”文件描述符初始化 ORSSerialPort,跳过详细的 ioctl 设置,并将其视为普通字符流(假设这是 pySerial 将其拉下来的方式)。有什么选择吗?


2016 年 2 月 10 日更新:

我在ORSSerialPort github 问题列表中与创建者 armadsen 讨论了这种情况:

我认为基本方法是“交换” InternalSerialPort 和 SerialPort 中的初始化程序,以便路径初始化程序是指定/必需的,而 IOKit 初始化程序是可选的。已经是这种情况(正如您所指出的),路径(而不是 io_object_t)在内部用于获取文件描述符并从端口读/写。换句话说,我希望这不是一个非常复杂的变化。

我在下面发布了对最终结果的答案...

4

1 回答 1

0

2016 年 2 月 10 日更新:

我在ORSSerialPort github 问题列表中与创建者 armadsen 讨论了这种情况:

我认为基本方法是“交换” InternalSerialPort 和 SerialPort 中的初始化程序,以便路径初始化程序是指定/必需的,而 IOKit 初始化程序是可选的。已经是这种情况(正如您所指出的),路径(而不是 io_object_t)在内部用于获取文件描述符并从端口读/写。换句话说,我希望这不是一个非常复杂的变化。

在此之后,我做了一个概念验证实现,它适用于“仅文件描述符”,socat并且可以在这里找到:

https://github.com/gerwindehaan/ORSSerialPort/tree/3.0

于 2016-02-10T13:48:11.703 回答