#include #include HANDLE com=0; int com_close() { if(com) CloseHandle(com); com=0; return 0; } int com_startup(char *port) { DCB params = {0}; COMMTIMEOUTS timeouts = {0}; FILE* dcbFile; FILE* timeoutsFile; com = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(com==INVALID_HANDLE_VALUE) { com=0; return 0; } //if (!GetCommTimeouts(com, &?) // Save original comm timeouts //error params.DCBlength=sizeof(params); if(!GetCommState(com, ¶ms)) return com_close(); params.BaudRate = CBR_115200; params.ByteSize = 8; params.StopBits = ONESTOPBIT; params.Parity = NOPARITY; params.fDtrControl = DTR_CONTROL_DISABLE; params.fRtsControl = RTS_CONTROL_DISABLE; params.fOutxCtsFlow = FALSE; params.fOutxDsrFlow = FALSE; params.fDsrSensitivity = FALSE; params.fOutX = FALSE; params.fInX = FALSE; params.fTXContinueOnXoff = FALSE; dcbFile = fopen("dcb.bin", "wb"); fwrite(¶ms, sizeof(params), 1, dcbFile); fclose(dcbFile); if(!SetCommState(com, ¶ms)) return com_close(); //read timeout = chars*multiplier+constant timeouts.ReadIntervalTimeout=0; timeouts.ReadTotalTimeoutConstant = 50; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 0; timeouts.WriteTotalTimeoutMultiplier = 0; timeoutsFile = fopen("timeouts.bin", "wb"); fwrite(&timeouts, sizeof(timeouts), 1, timeoutsFile); fclose(timeoutsFile); if(!SetCommTimeouts(com, &timeouts)) return com_close(); return 1; } void com_flush() { PurgeComm(com, PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR); } void com_shutdown() { if(com) { //SetCommTimeouts(com, &?); // restore original comm timeouts com_flush(); com_close(); } } //write byte to com port int com_write(int c) { int written=0; if(com) WriteFile(com, &c, 1, &written, NULL); return written; } //write bytes to com port //returns # of bytes written int com_writebuf(char *buf, int size) { int written=0; if(com) WriteFile(com, buf, size, &written, NULL); return written; } //read bytes from com //returns # of bytes read int com_read(char *buf, int size) { int read=0; if(com) ReadFile(com, buf, size, &read, NULL); return read; }