在 SerialPort 上设置 DTR、RTS、CTS、DSR 和 Xonn/Xoff
Set DTR, RTS, CTS, DSR and Xonn/Xoff on SerialPort
我有这个 C++ 代码,我需要将其转换为 C#。
*hDev = CreateFile(PortNameUNC, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(*hDev == INVALID_HANDLE_VALUE) return false ;
DCB *dcb = new DCB ;
memset(dcb, 0x00, sizeof(DCB)) ;
dcb->DCBlength = sizeof(DCB);
dcb->BaudRate = BaudRate;
dcb->Parity = Parity;
dcb->StopBits = StopBits;
dcb->ByteSize = ByteSize;
dcb->fBinary = TRUE;
dcb->fDsrSensitivity = 0;
dcb->fDtrControl = (DTR ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE) ;
dcb->fRtsControl = (RTS ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE) ;
dcb->fOutxCtsFlow = (CTS ? 1 : 0) ;
dcb->fOutxDsrFlow = (DSR ? 1 : 0) ;
dcb->fOutX = (XonnXoff ? 1 : 0) ;
dcb->fInX = 0 ;
我设法在 C# 上使用例如
翻译了大部分内容
m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
但我不确定如何设置像 DTR, RTS, CTS, DSR and Xonn/Xoff?
这样的属性
我在 SerialPort
上找到了 Dtr.Enable
和 Rts.Enable
属性,但如何处理其他三个? CTS、DSR 和 Xonn/Xoff?如何启用它们?
编辑:此外,这是我对上述内容的 C# 实现。 我是否正确地将 C++ 代码映射到 C#,如下所示?感谢任何反馈。 尤其是 xon/xoff
标志以及 dtr
和 rts
?
public SerialPortHASP(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, bool dtr, bool rts, bool xonxoff)
{
m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
// Set XonXoff if set
if (xonxoff)
m_port.Handshake = Handshake.XOnXOff;
// Set DTR/RTS
m_port.DtrEnable = dtr;
m_port.RtsEnable = rts;
// Open the port for communications
m_port.Open();
}
CTS 和 DSR 是输入,因此无法通过代码设置。可以通过访问以下属性来检查它们; CtsHolding 和 DsrHolding.
XOnXOff是流控,可以使用串口Handshake设置属性.
我有这个 C++ 代码,我需要将其转换为 C#。
*hDev = CreateFile(PortNameUNC, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(*hDev == INVALID_HANDLE_VALUE) return false ;
DCB *dcb = new DCB ;
memset(dcb, 0x00, sizeof(DCB)) ;
dcb->DCBlength = sizeof(DCB);
dcb->BaudRate = BaudRate;
dcb->Parity = Parity;
dcb->StopBits = StopBits;
dcb->ByteSize = ByteSize;
dcb->fBinary = TRUE;
dcb->fDsrSensitivity = 0;
dcb->fDtrControl = (DTR ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE) ;
dcb->fRtsControl = (RTS ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE) ;
dcb->fOutxCtsFlow = (CTS ? 1 : 0) ;
dcb->fOutxDsrFlow = (DSR ? 1 : 0) ;
dcb->fOutX = (XonnXoff ? 1 : 0) ;
dcb->fInX = 0 ;
我设法在 C# 上使用例如
翻译了大部分内容 m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
但我不确定如何设置像 DTR, RTS, CTS, DSR and Xonn/Xoff?
我在 SerialPort
上找到了 Dtr.Enable
和 Rts.Enable
属性,但如何处理其他三个? CTS、DSR 和 Xonn/Xoff?如何启用它们?
编辑:此外,这是我对上述内容的 C# 实现。 我是否正确地将 C++ 代码映射到 C#,如下所示?感谢任何反馈。 尤其是 xon/xoff
标志以及 dtr
和 rts
?
public SerialPortHASP(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, bool dtr, bool rts, bool xonxoff)
{
m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
// Set XonXoff if set
if (xonxoff)
m_port.Handshake = Handshake.XOnXOff;
// Set DTR/RTS
m_port.DtrEnable = dtr;
m_port.RtsEnable = rts;
// Open the port for communications
m_port.Open();
}
CTS 和 DSR 是输入,因此无法通过代码设置。可以通过访问以下属性来检查它们; CtsHolding 和 DsrHolding.
XOnXOff是流控,可以使用串口Handshake设置属性.