2

我正在尝试将与 Insteon 自动化硬件接口的跨平台应用程序放在一起。在我发现的基于 .Net 的示例中,System.IO.Ports.SerialPort 类用于从基于 RS-232 串行端口的设备和 USB 串行调制解调器读取数据。在 Windows 平台上,串行调制解调器通常被映射到一个虚拟 COM 端口,并且运行一个列表、传入新的 COM 地址并尝试找出 USB 或串行设备连接到哪一个并不难。

不幸的是,在 Mac 上,我完全不合时宜。MonoMac 允许我用更舒适的语言进行编程,但与硬件对话这样低级的东西有点超出我的能力范围。我的初始化代码如下:

    private void OpenSerialConnection(string comPort)
    {
        _serialPort = new System.IO.Ports.SerialPort("/dev/ttys1", 19200, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
        _serialPort.Encoding = System.Text.Encoding.Default;
        _serialPort.WriteTimeout = 1000;
        _serialPort.DataReceived += OnDataReceived;
        _serialPort.Open();
    }

代替“comPort”变量所在位置的“/dev/ttsy1”值是我发现的一些示例的一部分,这些示例表明地址可能采用/dev/ttys* 的形式。经过一番搜索,我发现一个 USB 设备可能会注册为“/dev/tty.usbserial*”,但我想知道是否有更优雅的方法来检测我可以在 Mono 中利用的这个值而不是指示用户进入终端并输入“ls /dev/tty.*”并自己输入?

4

1 回答 1

0

我对 Mac 上的 Mono 没有任何个人经验,但我认为可以在 Mono 项目中包含和使用 Objective-C 类。假设是这种情况,请查看ORSSerialPort。ORSSerialPortManager 的-availablePorts方法将为您提供系统上所有可用串行端口的数组。您还可以注册以在添加/删除端口时接收通知,并且该库还可以轻松打开端口、配置端口​​以及发送和接收数据。

如果没有这样的东西,您必须使用 IOKit 来发现系统上的端口,以及用于打开、配置、读取和写入串行端口的 POSIX API。IOKit 和 POSIX 串行端口 API 是低(ish)级 C API。

于 2012-11-26T17:39:43.937 回答