FreeRDP
TestCommMonitor.c
1 
2 #include <winpr/crt.h>
3 #include <winpr/comm.h>
4 #include <winpr/file.h>
5 #include <winpr/synch.h>
6 #include <winpr/handle.h>
7 
8 int TestCommMonitor(int argc, char* argv[])
9 {
10  HANDLE hComm = NULL;
11  DWORD dwError = 0;
12  BOOL fSuccess = 0;
13  DWORD dwEvtMask = 0;
14  OVERLAPPED overlapped = { 0 };
15  LPCSTR lpFileName = "\\\\.\\COM1";
16 
17  hComm = CreateFileA(lpFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
18  FILE_FLAG_OVERLAPPED, NULL);
19 
20  if (!hComm || (hComm == INVALID_HANDLE_VALUE))
21  {
22  printf("CreateFileA failure: %s\n", lpFileName);
23  return -1;
24  }
25 
26  fSuccess = SetCommMask(hComm, EV_CTS | EV_DSR);
27 
28  if (!fSuccess)
29  {
30  printf("SetCommMask failure: GetLastError() = %" PRIu32 "\n", GetLastError());
31  return -1;
32  }
33 
34  if (!(overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
35  {
36  printf("CreateEvent failed: GetLastError() = %" PRIu32 "\n", GetLastError());
37  return -1;
38  }
39 
40  if (WaitCommEvent(hComm, &dwEvtMask, &overlapped))
41  {
42  if (dwEvtMask & EV_DSR)
43  {
44  printf("EV_DSR\n");
45  }
46 
47  if (dwEvtMask & EV_CTS)
48  {
49  printf("EV_CTS\n");
50  }
51  }
52  else
53  {
54  dwError = GetLastError();
55 
56  if (dwError == ERROR_IO_PENDING)
57  {
58  printf("ERROR_IO_PENDING\n");
59  }
60  else
61  {
62  printf("WaitCommEvent failure: GetLastError() = %" PRIu32 "\n", dwError);
63  return -1;
64  }
65  }
66 
67  (void)CloseHandle(hComm);
68 
69  return 0;
70 }