1 #include <windows.h> 2 #include <stdio.h> 3 4 #include <tchar.h> 5 6 #define BUFSIZE 128 7 #define MAX_PORTNAME_LEN 20 8 #define APP_VERSION_STR "0.01" 9 10 int main(int argc, char *argv[]) 11 { 12 CHAR txBuffer[BUFSIZE]; 13 CHAR rxBuffer[BUFSIZE]; 14 DWORD dwBaud = 9600; 15 DWORD dwNumWritten; 16 DWORD dwErrors; 17 DCB dcb; 18 BOOL bResult; 19 HANDLE hPort; 20 int i; 21 int nPortNum = 1; 22 23 TCHAR szPortName[MAX_PORTNAME_LEN]; 24 25 if (argc > 1) { 26 //sscanf(argv[1], "%d", &dwBaud); 27 sscanf(argv[1], "%d", &nPortNum); 28 } 29 sprintf(szPortName, _T("COM%d"), nPortNum); 30 31 printf("Serial Port Test Application Version %s\n", APP_VERSION_STR); 32 printf("Attempting to open serial port %d - %s\n", nPortNum, szPortName); 33 hPort = CreateFile(szPortName, 34 GENERIC_READ|GENERIC_WRITE, 35 0, // exclusive 36 NULL, // sec attr 37 OPEN_EXISTING, 38 0, // no attributes 39 NULL); // no template 40 41 if (hPort == (HANDLE)-1) { 42 printf("ERROR: CreateFile() failed with result: %lx\n", (DWORD)hPort); 43 return 1; 44 } 45 printf("CreateFile() returned: %lx\n", (DWORD)hPort); 46 47 printf("Fiddling with DTR and RTS control lines...\n"); 48 for (i = 0; i < 100; i++) { 49 bResult = EscapeCommFunction(hPort, SETDTR); 50 if (!bResult) { 51 printf("WARNING: EscapeCommFunction(SETDTR) failed: %lx\n", (DWORD)bResult); 52 } 53 bResult = EscapeCommFunction(hPort, SETRTS); 54 if (!bResult) { 55 printf("WARNING: EscapeCommFunction(SETRTS) failed: %lx\n", (DWORD)bResult); 56 } 57 Sleep(500); 58 /* 59 #define CLRDTR (6) 60 #define CLRRTS (4) 61 #define SETDTR (5) 62 #define SETRTS (3) 63 #define SETXOFF (1) 64 #define SETXON (2) 65 #define SETBREAK (8) 66 #define CLRBREAK (9) 67 */ 68 bResult = EscapeCommFunction(hPort, CLRDTR); 69 if (!bResult) { 70 printf("WARNING: EscapeCommFunction(CLRDTR) failed: %lx\n", (DWORD)bResult); 71 } 72 bResult = EscapeCommFunction(hPort, CLRRTS); 73 if (!bResult) { 74 printf("WARNING: EscapeCommFunction(CLRRTS) failed: %lx\n", (DWORD)bResult); 75 } 76 } 77 printf("Getting the default line characteristics...\n"); 78 dcb.DCBlength = sizeof(DCB); 79 if (!GetCommState(hPort, &dcb)) { 80 printf("ERROR: failed to get the dcb: %ld\n", GetLastError()); 81 return 2; 82 } 83 printf("Setting the line characteristics to 9600,8,N,1\n"); 84 dcb.BaudRate = dwBaud; 85 dcb.ByteSize = 8; 86 dcb.Parity = NOPARITY; 87 dcb.StopBits = ONESTOPBIT; 88 89 bResult = SetCommState(hPort, &dcb); 90 if (!bResult) { 91 printf("ERROR: failed to set the comm state: %lx\n", (DWORD)bResult); 92 return 3; 93 } 94 for (i = 0; i < BUFSIZE; i++) { 95 txBuffer[i] = (CHAR)i; 96 //printf(" %d ", txBuffer[i]); 97 rxBuffer[i] = 0xFF; 98 } 99 printf("\n"); 100 printf("Writing transmit buffer to the serial port\n"); 101 bResult = WriteFile(hPort, txBuffer, BUFSIZE, &dwNumWritten, NULL); 102 if (!bResult) { 103 printf("ERROR: failed to write to the serial port: %lx\n", (DWORD)bResult); 104 return 4; 105 } 106 printf("WriteFile() returned: %lx, byteswritten: %lx\n", (DWORD)bResult, dwNumWritten); 107 #if 0 108 printf("Attempting to read %d bytes from the serial port\n", BUFSIZE); 109 bResult = ReadFile(hPort, rxBuffer, BUFSIZE, &dwNumRead, NULL); 110 if (!bResult) { 111 printf("ERROR: failed to read from the serial port: %lx\n", (DWORD)bResult); 112 return 5; 113 } 114 printf("ReadFile() returned: %lx, bytesread: %lx\n", (DWORD)bResult, dwNumRead); 115 for (i = 0; i < BUFSIZE; i++) { 116 printf(" %d ",rxBuffer[i]); 117 } 118 #endif 119 printf("Attempting to close the serial port\n"); 120 bResult = ClearCommError(hPort, &dwErrors, NULL); 121 printf("ClearCommError returned: %lx, dwErrors: %lx\n", (DWORD)bResult, dwErrors); 122 bResult = CloseHandle(hPort); 123 if (!bResult) { 124 printf("ERROR: failed to close the serial port: %lx\n", (DWORD)bResult); 125 return 6; 126 } 127 printf("Finished\n"); 128 return 0; 129 } 130