#include #include #define BUFSIZE 128 #define MAX_PORTNAME_LEN 20 #define APP_VERSION_STR "0.01" int main(int argc, char *argv[]) { CHAR txBuffer[BUFSIZE]; CHAR rxBuffer[BUFSIZE]; DWORD dwBaud = 9600; DWORD dwNumWritten; DWORD dwNumRead; DWORD dwErrors; DCB dcb; BOOL bResult; HANDLE hPort; int i; int nPortNum = 1; TCHAR szPortName[MAX_PORTNAME_LEN]; if (argc > 1) { //sscanf(argv[1], "%d", &dwBaud); sscanf(argv[1], "%d", &nPortNum); } sprintf(szPortName, _T("COM%d"), nPortNum); printf("Serial Port Test Application Version %s\n", APP_VERSION_STR); printf("Attempting to open serial port %d - %s\n", nPortNum, szPortName); hPort = CreateFile(szPortName, GENERIC_READ|GENERIC_WRITE, 0, // exclusive NULL, // sec attr OPEN_EXISTING, 0, // no attributes NULL); // no template if (hPort == (HANDLE)-1) { printf("ERROR: CreateFile() failed with result: %lx\n", hPort); return 1; } printf("CreateFile() returned: %lx\n", hPort); printf("Fiddling with DTR and RTS control lines...\n"); bResult = EscapeCommFunction(hPort, SETDTR); if (!bResult) { printf("WARNING: EscapeCommFunction(SETDTR) failed: %lx\n", bResult); } bResult = EscapeCommFunction(hPort, SETRTS); if (!bResult) { printf("WARNING: EscapeCommFunction(SETRTS) failed: %lx\n", bResult); } printf("Getting the default line characteristics...\n"); dcb.DCBlength = sizeof(DCB); if (!GetCommState(hPort, &dcb)) { printf("ERROR: failed to get the dcb: %d\n", GetLastError()); return 2; } printf("Setting the line characteristics to 9600,8,N,1\n"); dcb.BaudRate = dwBaud; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; bResult = SetCommState(hPort, &dcb); if (!bResult) { printf("ERROR: failed to set the comm state: %lx\n", bResult); return 3; } printf("INFO: preparing the transmit buffer: %lx\n", bResult); for (i = 0; i < BUFSIZE; i++) { txBuffer[i] = (CHAR)i; } for (i = 0; i < BUFSIZE; i++) { printf(" %d ", txBuffer[i]); } for (i = 0; i < BUFSIZE; i++) { rxBuffer[i] = 0xFF; } printf("\n"); printf("Writting transmit buffer to the serial port\n"); bResult = WriteFile(hPort, txBuffer, BUFSIZE, &dwNumWritten, NULL); if (!bResult) { printf("ERROR: failed to write to the serial port: %lx\n", bResult); return 4; } printf("WriteFile() returned: %lx, byteswritten: %lx\n", bResult, dwNumWritten); #if 0 printf("Attempting to read %d bytes from the serial port\n", BUFSIZE); bResult = ReadFile(hPort, rxBuffer, BUFSIZE, &dwNumRead, NULL); if (!bResult) { printf("ERROR: failed to read from the serial port: %lx\n", bResult); return 5; } printf("ReadFile() returned: %lx, bytesread: %lx\n", bResult, dwNumRead); for (i = 0; i < BUFSIZE; i++) { printf(" %d ",rxBuffer[i]); } #endif printf("Attempting to close the serial port\n"); bResult = ClearCommError(hPort, &dwErrors, NULL); printf("ClearCommError returned: %lx, dwErrors: %lx\n", bResult, dwErrors); bResult = CloseHandle(hPort); if (!bResult) { printf("ERROR: failed to close the serial port: %lx\n", bResult); return 6; } printf("Finished\n"); return 0; }