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