soros port kezeles win alatt
Szima Gábor
sygma at tesla.hu
Thu May 20 15:11:57 CEST 2004
Udv!
On Thu, 20 May 2004, VF wrote:
> Hogy kell win alatt soros portot kezelni? Hogy kell beallitani a
> baudrate-t? Egyelore ott tartok, hogy fopen("com6","r+b")
std. megoldas, talan hasznalhato valami belole:
http://www.cab.u-szeged.hu/LDP/HOWTO/Serial-Programming-HOWTO/x115.html
Izig-verig WIN megoldas:
------
HANDLE fHandle;
DCB dcb;
COMMTIMEOUTS lpCT;
fHandle = CreateFile (port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if ( fHandle == INVALID_HANDLE_VALUE ) return ( -3 ); //COM open error
PurgeComm (lph,PURGE_RXCLEAR|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_TXABORT);
dcb.BaudRate=baud; //bps
dcb.fBinary=flowc[0]; //0; //binary, NO EOFchk
dcb.fParity=flowc[1]; //0; //parity chk, or no
dcb.fOutxCtsFlow=flowc[2]; //0;
dcb.fOutxDsrFlow=flowc[3]; //0; //CTS,DSR flow control
dcb.fDtrControl=flowc[4]; //0;
dcb.fDsrSensitivity=flowc[5]; //0;
dcb.fTXContinueOnXoff=flowc[6]; //0;
dcb.fOutX=flowc[7]; //0;
dcb.fInX=flowc[8]; //1;
dcb.fErrorChar=flowc[9]; //0;
dcb.fNull=flowc[10]; //0;
dcb.fRtsControl=flowc[11]; //1;
dcb.fAbortOnError=flowc[12]; //0;
dcb.XonLim=(WORD)flowc[13]; //1;
dcb.XoffLim=(WORD)flowc[14]; //1;
dcb.ByteSize=(BYTE)bytes; //bytesize
dcb.Parity=(BYTE)parity; //parity 0-4=no,odd,even,mark,space
dcb.StopBits=(BYTE)stopb; //0,1,2 = 1, 1.5, 2
dcb.EofChar=(char)0; //eofchar (fiktiv)
dcb.EvtChar=(char)0;
dcb.DCBlength=dcb.wReserved1-dcb.DCBlength+2; //????
dcb.XonChar=(char)17;
dcb.XoffChar=(char)19;
SetCommState(fHandle,&dcb);
lpCT.ReadIntervalTimeout=0;
lpCT.ReadTotalTimeoutMultiplier=10;//timeou
lpCT.ReadTotalTimeoutConstant=0;
lpCT.WriteTotalTimeoutMultiplier=0;
lpCT.WriteTotalTimeoutConstant=0;
SetCommTimeouts(fHandle,&lpCT);
SetupComm(fHandle,128,128); //inputbuffer, outputbuffer
SetCommMask(fHandle,EV_CTS|EV_DSR|EV_TXEMPTY|EV_RXFLAG|EV_RXCHAR); //EVENTS
iras:
WriteFile(fHandle,(char*)(*l_datap),*l_size,&NumberOfBytesWrite,NULL);
olvasas:
int NumberOfBytesRead;
char buff[MAX_BYTES];
if ( ReadFile (fHandle,buff,MAX_BYTES,&NumberOfBytesRead,NULL) && NumberOfBytesRead > 0 ) {
...
}
W95/W98 es NT kompatibilis..
(Azota nem lattam/hasznaltam dozert :)
-Sygma
More information about the Elektro
mailing list