ORSSerialPort中的虚拟串行端口

时间:2016-01-28 10:46:24

标签: macos serial-port iokit socat orsserialport

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

例如,我在这里创建了一对虚拟设备/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和内核(as suggested here)。

查看我内心深处的代码,sendData写入文件描述符。以任何方式可行的是,可以使用'plain'文件描述符初始化ORSSerialPort,跳过详细的ioctl设置,并将其视为普通字符流(假设这是pySerial将其拉出来的方式)。任何替代方案?

2016年2月10日更新:

我在ORSSerialPort github issue list上讨论了创作者armadsen的情况:

  

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

我发布了以下最终结果的答案......

1 个答案:

答案 0 :(得分:0)

2016年2月10日更新:

我在ORSSerialPort github issue list上讨论了创作者armadsen的情况:

  

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

在此之后,我做了一个概念验证实现,对我来说只适用于文件描述符"和socat,可以在这里找到:

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