![](/img/trans.png)
[英]Controlling DTR and RTS pin of serial port in C on Windows platform
[英]Getting DTR and RTS pin of serial port in C on Windows platform
如何在windows平台上獲取串口的DTR和RTS狀態? 我想讀取這兩個引腳的當前狀態(ON 或 OFF)。
我可以設置引腳:
EscapeCommFunction(hSerial,SETRTS);
但我不知道如何讀取引腳狀態。
由於在 Linux 上,可以使用以下代碼完成,我認為它在技術上可行:
int status=0;
ioctl(fd, TIOCMGET, &status);
return status & TIOCM_RTS;
使用inc\\api\\ntddser.h
API 和winioctl.h
,您可以訪問 DTR 和 RTS 狀態。 調用 DeviceIoControl,將第二個參數設置為IOCTL_SERIAL_GET_DTRRTS
:
稱呼:
DeviceIoControl(
handle, // handle returned by CreateFile
IOCTL_SERIAL_GET_DTRRTS,
NULL,
0,
&Status, // pointer to a DWORD variable 1
sizeof(Status),
&unused, // pointer to a DWORD variable
pOverlapped // optional pointer to overlapped buffer (may be NULL)
);
關於DeviceIoControl
文檔在這里。
除非你主動改變信號線,否則使用DCB中設置的值嗎?
除此之外,您自己控制信號線,因此每次更改時都應記住它。
只要您打開串行端口,您就擁有所有控制權,其他任何事情都不會改變。
現在沒有人使用握手或切換模式嗎?
BOOL SetDefaultCommConfigW( LPCWSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize );
BOOL SetCommConfig( HANDLE hCommDev, LPCOMMCONFIG lpCC, DWORD dwSize );
BOOL GetCommConfig( HANDLE hCommDev, LPCOMMCONFIG lpCC, LPDWORD lpdwSize );
typedef struct _COMMCONFIG { ... DCB dcb; ... } COMMCONFIG, *LPCOMMCONFIG;
typedef struct _DCB { DWORD DCBlength; ... DWORD fDtrControl : 2; ... DWORD fRtsControl : 2; ... } DCB, *LPDCB; DTR_CONTROL_DISABLE 0x00 DTR_CONTROL_ENABLE 0x01 DTR_CONTROL_HANDSHAKE 0x02 RTS_CONTROL_DISABLE 0x00 RTS_CONTROL_ENABLE 0x01 RTS_CONTROL_HANDSHAKE 0x02 RTS_CONTROL_TOGGLE 0x03
如果您仍然想這樣做,請使用@Hans Passant 評論的 DeviceIoControl()。
但是,不能保證它得到適當的支持,因為大多數人不會使用它。
設備輸入和輸出控制 (IOCTL)
DeviceIoControl 函數
以下是磁盤驅動器的 DeviceIoControl 調用示例,但您可以通過將這些參數中的每一個更改為與串行端口的 IOCTL_SERIAL_GET_DTRRTS 相關的參數來調用它。
調用 DeviceIoControl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.