#include #include void PrintAPIError(const char *msg, DWORD err) { if (msg) fprintf(stderr, "%s%d\n", msg, err); LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR)&lpMsgBuf, 0, NULL); fprintf(stderr, "Win API Last Error: %s", (char *)lpMsgBuf); LocalFree(lpMsgBuf); } int WriteComPort(char *Port, char *data, int BaudRate, int ByteSize,int Parity,int StopBits) { DCB dcb; DWORD byteswritten; const char* DRV_PATH = "\\\\.\\"; char portName[32]; strcpy(portName, DRV_PATH); strncat(portName, Port, 6); HANDLE hPort = CreateFile( portName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); if (INVALID_HANDLE_VALUE == hPort) { PrintAPIError("Error on CreateFile()!!!\n", GetLastError()); return 0; } if (!GetCommState(hPort,&dcb)) { PrintAPIError("Error on GetCommState()!!!\n", GetLastError()); return 0; } dcb.BaudRate = BaudRate; //9600 Baud dcb.ByteSize = ByteSize; //8 data bits dcb.Parity = Parity; //no parity dcb.StopBits = StopBits; //1 stop if (!SetCommState(hPort,&dcb)) { fprintf(stderr,"Error on SetCommState()!!!\n"); return 0; } int retVal = WriteFile(hPort,data,1,&byteswritten,NULL); CloseHandle(hPort); if(!retVal) { fprintf(stderr,"Error on WriteFile()!!!\n"); return 0; } return 1; } int main(int argc, char *argv[]) { char *port="COM17"; char c=0; while(scanf("%c",&c)>0){ fflush(stdin); if(!WriteComPort(port,&c,CBR_9600, 8, NOPARITY, ONESTOPBIT)) fprintf(stderr,"Error!"); } return 0; }