2017-04-13 39 views
0

嗨stackoverflow用戶!在Windows中調查CTS行的狀態

我需要輪詢我在Windows環境下, 我已經成功地打開了COM端口串口的CTS線,

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線的狀態?

在此先感謝。

+0

爲了挑剔,您希望切換RTS(請求發送),這是一個輸出,應該連接到CTS(清除發送),這是一個輸入。這些信號僅出現在RS-232中,而不是USB中。 – Lundin

+0

工作解決方案低於 'DWORD dwModemStatus; BOOL fCTS = 0;如果(!SetCommMask(hSerialIn,EV_CTS)){ DWORD err = GetLastError(); \t \t printf(「\ n處理程序創建錯誤代碼:%x \ n」,err); \t} \t DWORD dwCommEvent; \t \t而(1) \t { \t \t如果(!WaitCommEvent(hSerialIn,與dwCommEvent,NULL)) \t \t \t //發生錯誤等待事件。 \t \t \t printf(「」); \t \t其他{ \t \t \t如果 \t \t \t \t //錯誤GetCommModemStatus(GetCommModemStatus(hSerialIn,與dwModemStatus)!); \t \t \t \t return; \t \t \t fCTS = MS_CTS_ON&dwModemStatus; \t \t \t如果(FCTS) \t \t \t \t的printf( 「%X」,FCTS); \t \t} \t \t \t \t}' –

+2

不是評論的,​​你應該張貼此作爲一個回答你自己的問題。這樣做是非常好的,並鼓勵堆棧溢出。 – Lundin

回答

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