您好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线路的状态呢?

提前致谢。

最佳答案

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);
    }
}

关于c - 在Windows中轮询CTS线路的状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43392508/

10-11 17:08