Public feed #727277

Zeug

public cpp v1 · immutable
Raw Edit
·published 2007-10-05 22:00 UTC
rendered paste body
#include <windows.h>#include <stdio.h>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, &params))		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(&params, sizeof(params), 1, dcbFile);fclose(dcbFile);	if(!SetCommState(com, &params))		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 portint 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 writtenint 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 readint com_read(char *buf, int size) {	int read=0;	if(com)		ReadFile(com, buf, size, &read, NULL);	return read;}