我正在尝试将与 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.*”并自己输入?