gpt4 book ai didi

c# - Mono SerialPort.GetPortNames() 实际连接了吗?

转载 作者:行者123 更新时间:2023-11-30 16:48:41 32 4
gpt4 key购买 nike

我试图在 Mono 中使用 SerialPort.GetPortNames() 接收所有连接端口的数组,但它返回如下内容:

(Mac 但在 Linux 上应该是一样的)

ApfelBuch:~ janwiesemann$ mono "/Users/janwiesemann/Desktop/ports/ports/bin/Debug/ports.exe"
/dev/tty.Bluetooth-Incoming-Port
/dev/ttyp0
/dev/ttyp1
/dev/ttyp2
/dev/ttyp3
/dev/ttyp4
...
/dev/ttywc
/dev/ttywd
/dev/ttywe
/dev/ttywf

Press any key to continue...

使用的代码:

string[] ports = SerialPort.GetPortNames();

foreach (string p in ports)
{
Console.WriteLine (p);
}

所以我的问题是如何找出哪些端口实际连接到我的计算机?

最佳答案

正如您在 mono source code 中看到的那样, SerialPort.GetPortNames() 方法只是枚举了 /dev/tty* 节点:

string[] ttys = Directory.GetFiles("/dev/", "tty*");
...
foreach (string dev in ttys) {
if (linux_style){
if (dev.StartsWith("/dev/ttyS") || dev.StartsWith("/dev/ttyUSB") || dev.StartsWith("/dev/ttyACM"))
serial_ports.Add (dev);
} else {
if (dev != "/dev/tty" && dev.StartsWith ("/dev/tty") && !dev.StartsWith ("/dev/ttyC"))
serial_ports.Add (dev);
}
}

这就是为什么您在输出中得到所有那些 tty* 设备的原因。但是要确定它们中的哪一个实际上对应于您机器上的(连接的)串行端口并不那么容易。

可以上this看看回答。他们使用 Unix dmesg 命令,然后使用 grep 来找出哪些设备实际上是串行端口。他们甚至试图弄清楚哪个串行端口也连接在另一侧。

$dmesg | grep ttyS
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[ 0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

或者,您可以解析 /proc/tty/drivers 文件,如 this answer 中所述。 .

有几个 similar questions关于它。也许您可以找到最适合您需求的解决方案。

据我所知,没有直接在单声道中执行此操作的简单方法,您必须更深入。


更新

在连接的 FTDI 设备中只有一个 /dev/ttyUSB0 项的原因似乎很明显。

在相同的方法中,linux_style 标志值通过简单的查找确定:

if (dev.StartsWith("/dev/ttyS") || dev.StartsWith("/dev/ttyUSB") || dev.StartsWith("/dev/ttyACM")) {
linux_style = true;
break;
}

因此,如果有可用的 ttyUSB* 设备,此标志将设置为 true。这会影响上述返回单个项目的设备枚举。

关于c# - Mono SerialPort.GetPortNames() 实际连接了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859627/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com