C# открытый последовательный порт, созданный socat
Создайте два виртуальных последовательных порта
socat -d -d -d PTY,b115200,raw,echo=0,crnl,link=/home/user/ttyS110 PTY,b115200,raw,echo=0,crnl,link=/home/user/ttyS111
cat /home/user/ttyS110 echo "привет" > /home/user/ttyS111 Работает!
Попробуйте открыть:
using System;
using System.IO.Ports;
namespace qqq
{
class MainClass
{
public static void Main (string[] args)
{
SerialPort fSerialPort = new SerialPort();
fSerialPort.PortName = "/home/user/ttyS111";
fSerialPort.BaudRate = 115200;
fSerialPort.Parity = Parity.None;
fSerialPort.DataBits = 8;
fSerialPort.StopBits = StopBits.One;
fSerialPort.ReadTimeout = 500;
fSerialPort.WriteTimeout = 500;
try
{
fSerialPort.Open();
Console.WriteLine("Open port");
}
catch (Exception e)
{
Console.WriteLine("Open port ERROR! " + e.Message);
}
}
}
}
Поймать исключение "Неверный аргумент".
Как открыть виртуальный порт из C# (Mono)?
1 ответ
Казалось бы, это как-то связано с тем, что socat неправильно эмулирует последовательный порт. Все, что я смог найти, это информация, приведенная ниже, которая относится к адаптеру USB-Serial, но я предполагаю, что socat ведет себя так же.
При открытии последовательного порта System.IO.Ports.SerialPort косвенно вызывает SetSignal, который вызывает TIOCMGET ioctl, который, как это происходит, НЕ ОСУЩЕСТВЛЯЕТСЯ в драйвере mos7720!