[LUGOS-PROG] Serial port problem
Marko Bevc
fonzie at kibla.org
Sun Sep 14 20:53:03 CEST 2003
Zdravo!
Kot je kolega že omenil se tukaj odpre fd(file descriptor), s katerim se
dela. Najprej ti priporočam Linux Serial Programming Guide. Drugače pa
potem bereš dol z read/write funkcijama. Samo čakanje pa je odvisno od
inicialicacije fd-ja ob odprtju. No v primeru večih ali pa da te zanima
kdaj so podatki na voljo lahko uporabiš select() oz while(1) in nastavič
čakanje na podatke(blocking mode). no seveda navsezadnje odvisno od potreb
aplikacije...
lp,
Marko
On Fri, 12 Sep 2003 15062262 at users.siol.net wrote:
>
> Pozdravljeni.
>
> Prenaam kodo iz Win na Linux in imam naslednji problem.
> Problem je v tem,da metoda read čaka dokler ne dobi podatkov.
> Na Win obstaja funkcija SetCommMask(), ki prepreči, da metoda read čaka
> v neskončnost ali obstaja kaj podobnega na Linuxu oz. kako se to dosee.
>
> Hvala, lep pozdrav Goran
> Koda:
> ***************************************************************************=
> **************************
> BOOL CSerialPort::blWaitCommEventLinux (BYTE btAFlag)
> {
> int inRes;
> BYTE btBuf;
> BOOL STOP=FALSE;
> while (STOP==FALSE ) {
>
> usleep(300);=20
>
> // after receiving SIGO, wait_flagFrom_ComPort=3DFALSE, input is av=
> ailable and can be read
> if ( wait_flagFrom_ComPort==FALSE ) {
> printf("CSerialPort::blWaitCommEventLinux :wait_flagFrom_ComPor=
> t=3D=3DFALSE\n");
> inRes =3D read(intDeviceHandle,&btBuf, 1); // TU FUNKCIJA NE VR=
> NE
> printf("CSerialPort::blWaitCommEventLinux :wait_flagFrom_ComPor=
> t==FALSE za read\n");
> if(inRes==1){
> wait_flagFrom_ComPort=TRUE;
> if( btBuf==btAFlag) {
> return TRUE;
> }
> STOP=TRUE;
> return FALSE;
> }
> }
> }
>
> return FALSE;
>
>
> }
>
> ***************************************************************************=
> *********************
>
More information about the lugos-prog
mailing list