我正在尝试整合一个与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();
}
“/ dev / ttsy1”值代替“comPort”变量的位置是我发现的一些示例的一部分,建议地址可能是/ dev / ttys *的形式。经过一番搜索,我发现一个usb设备可能会注册为“/dev/tty.usbserial*”,但是我想知道如果检测到这个值是多么优雅,我可以在Mono中使用而不是指示用户进入终端并输入“ls /dev/tty.*”并自行输入?
答案 0 :(得分:0)
我对Mac上的Mono没有任何个人经验,但我认为可以在Mono项目中包含和使用Objective-C类。假设是这种情况,请查看ORSSerialPort。 ORSSerialPortManager的-availablePorts
方法将为您提供系统上可用的所有串行端口的数组。您还可以注册以在添加/删除端口时接收通知,并且该库还可以轻松打开端口,配置端口以及发送和接收数据。
如果没有这样的东西,你必须使用IOKit来发现系统上的端口,以及用于打开,配置,读取和写入串行端口的POSIX API。 IOKit和POSIX串行端口API是低(ish)级别的C API。