WinApi a seriovy port

Miroslav Sinko sinkomiro@rocketmail.com
Pátek Březen 14 21:45:57 CET 2008


Inicializacia (vytvara komunikacny thread a overlapped pristup, to
mozte vyhodit)

miro

void InitComm(HWND hwnd){//HWND okna, ktore bude dostavat spravy z
threadu
COMMTIMEOUTS CommTimeOuts;
char s[64];
DWORD BaudRate;
	CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF;
	CommTimeOuts.ReadTotalTimeoutMultiplier=0;
	CommTimeOuts.ReadTotalTimeoutConstant=1000;
	CommTimeOuts.WriteTotalTimeoutMultiplier=0;
	CommTimeOuts.WriteTotalTimeoutConstant=1000;
	if(commId) CloseComm();
	oWait.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
	oRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
	oWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

if((commId=CreateFile(Cfg.Port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL))==INVALID_HANDLE_VALUE){
		commId=NULL; goto _err;
	}
	SetCommMask(commId,EVENTIN);
	SetupComm(commId,SIZE_INQUE,SIZE_OUTQUE);

PurgeComm(commId,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
	SetCommTimeouts(commId,&CommTimeOuts);

	BaudRate=Cfg.dcb.BaudRate;//zatial uschovat z Cfg, aby sa nestratila
	ZeroMemory(&(Cfg.dcb),sizeof(DCB));//ostatne cleny inicializovat
natvrdo
	Cfg.dcb.DCBlength=sizeof(DCB);
	Cfg.dcb.fParity=FALSE;
	Cfg.dcb.Parity=NOPARITY;
	Cfg.dcb.StopBits=ONESTOPBIT;
	Cfg.dcb.ByteSize=8;
	Cfg.dcb.fBinary =1;//pre istotu
	Cfg.dcb.BaudRate=BaudRate;//vratit rychlost z uschovy

	if(!SetCommState(commId,&(Cfg.dcb))) goto _err;
	StopThread=false;

if((Thread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFn,(void*)hwnd,0,&(ThreadID)))==NULL)
goto _err;
	SetThreadPriority(Thread,THREAD_PRIORITY_NORMAL);
	Sleep(500);
	EscapeCommFunction(commId,SETDTR);
	EscapeCommFunction(commId,SETRTS);

	null_event=0;
	return;
_err:
	wsprintf(s,"Chyba otvorenia %s",Cfg.Port);
	MessageBox(NULL,s,"Error",MB_OK|MB_ICONSTOP);
	CloseComm();
}

--- Galloth <lordgalloth@gmail.com> wrote:

> Zdravim,
> kamarad za mnou prisel s problemem: Ma program, ktery pouziva WinApi
> (funkce CreateFile,WriteFile,ReadFile) ke cteni dat s mobilu. Vsechno
> mu funguje, ale pouze pokud pred ti s mobilem komunikuje nejakym
> jinym
> programem. Pokud prvni program, co se pokousi s mobilem komunikovat
> je
> ten jeho, tak se mu to zasekne na funkci readFile (funkce writeFile
> probehne bez problemu). Myslime si, ze je to proto, ze nikde
> nenastavuje rychlost prenosu pro komunikaci tim portem. Mate nekdo
> nejaky funkcni programek, ktery opravdu vyuziva jen WinAPI? Popripade
> netusite jak se jmenuje funkce, ktera nastavuje parametry k prenosum
> po tom COM portu?
> 
> Diky
> -- 
> Jan Kastil
> galloth@jabbim.cz
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 



      ____________________________________________________________________________________
Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  http://tools.search.yahoo.com/newsearch/category.php?category=shopping



Další informace o konferenci Hw-list