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