轮询Windows中CTS行的状态

时间:2017-04-13 12:36:19

标签: c windows serial-port

嗨stackoverflow用户!

我需要在Windows环境中轮询我的串口的CTS线, 我已经成功打开了COM端口,

HANDLE hSerialIn;
const char* pcCommPort = TEXT("COM3");
hSerialIn = CreateFile(pcCommPort, GENERIC_READ | GENERIC_WRITE, \
                       0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

然后我想要这样的东西

DCB dcb = { 0 };

while (GetCommState(hSerialIn, &dcb)) {
    if (dcb.fOutxCtsFlow)
        ;
    else
        ;
}

我对COM端口感兴趣的背景是,我有一个USB-> UART转换器,它连接到测量设备的触发输出,该设备每秒触发输出,我想拥有它在我的程序中。当我通过Hercules(终端应用程序)连接到COM端口时它工作,我看到我的CTS线每秒都在变化。那么如何检查CTS线的状态呢?

提前致谢。

1 个答案:

答案 0 :(得分:0)

DWORD dwModemStatus; 
BOOL fCTS = 0; 

if (!SetCommMask(hSerialIn, EV_CTS)) 
{ 
    DWORD err = GetLastError(); 
    printf("\nHandle creation error code: %x\n", err); 
} 

DWORD dwCommEvent; 

while(1) 
{ 
    if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event. 
        printf(""); 
    else 
    { 
        if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus; 
            return; 
        fCTS = MS_CTS_ON & dwModemStatus; 

        if(fCTS) 
            printf("%x ", fCTS); 
    }  
}