Linux-os drv-t keresek RS232 - COM port lekezelésére.
Linux (debian) alá szeretném áthozni a win alatt fejlesztett RS232 - COM portot kezelő,
mérés-adatgyűjtő alkalmazásomat. Pascal és C környezetű források futnak.
Hogyan megy ez a COM port kezelés Linux, debian alatt ?
Tudtok ebben segíteni ?
köszi:virtualm@freemail.hu
LinuxLame : virtualm , (debil debianos)
- 4737 megtekintés
Hozzászólások
A google első 3 találata a témában,,, :)
Én is ezt használom, pont most irok egy soros portot is használó progit.
http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html
http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html
Egy kicsit más:
http://www.comptechdoc.org/os/linux/programming/c/linux_pgcserial.html
- A hozzászóláshoz be kell jelentkezni
- Szia igiboly
Milyen környezetben írod a soros portot is kezelő progit?
Milyen kernel, milyen disztri, milyen nyelv és miért ezek?
Van e alternatív lehetőséged, vagy kényszerből ezek?
köszi:virtualm@freemail.hu
LinuxLame : virtualm , (debil debianos)
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Én így használom:
1. Megynitom a soros porthoz tartozó eszközt. (pl.: /dev/ttyS0)
2. poll - lal írom olvasom
3. lezárokm a soros porthoz tartozó eszközt.
Ha USB-d van, akkor egy USB-SER átalakítóval a /dev/USBn - re
is rányithatsz.
Ha kell tudok programpéldát adni...
(én is soroson keresztül mérés-adatgyűjtök)
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Engem érdekel a dolog....
De hogy állítasz be dolgokat rajta??? Sebesség, Bit, paritás, stb...?
- A hozzászóláshoz be kell jelentkezni
Ketfele modon lehet:
1. man setserial
2. a sajat programodbol ioctl
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Sziasztok, gyorsak és rendesek vagytok.
Milyen fejlesztői környezetet ajánlotok, itt linux (debian) alatt ?
Fordító, linker, debugger ? ( hol lehet hozzájutni ?)
A példák engem is érdekelnek. Én egyenlőre csak win alatti példát tudok adni.
köszi:virtualm@freemail.hu
LinuxLame : virtualm , (debil debianos)
- A hozzászóláshoz be kell jelentkezni
Engem is érdekelne az a program példa...
- A hozzászóláshoz be kell jelentkezni
Engemn is érdekel :D
- A hozzászóláshoz be kell jelentkezni
Itt Van példának okáért az open a soros_port beállításával.
Keressetek rá man-nal a függvényhívásokra. "C" nyelvi környezet.
//----------------------------------------------------------------------------------------------
speed_t BaudXSpeed(unsigned char *b_str)
	{speed_t	speed;
	 speed=
	 (!memcmp(b_str,"B2400",5))?B2400:
	 (!memcmp(b_str,"B4800",5))?B4800:
	 (!memcmp(b_str,"B9600",5))?B9600:
	 (!memcmp(b_str,"B19200",6))?B19200:
	 (!memcmp(b_str,"B38400",6))?B38400:
	 (!memcmp(b_str,"B57600",6))?B57600:
	 (!memcmp(b_str,"B115200",7))?B115200:B9600;
	 return(speed);
	}
//----------------------------------------------------------------------------------------------
void SerialOpen (unsigned wich)
	{SerTab[wich].fd=open(&SerTab[wich].dev[0],O_RDWR | O_NOCTTY | O_NONBLOCK | O_SYNC);
	 tcgetattr(SerTab[wich].fd,&SerTab[wich].old_t);
	 bzero(&SerTab[wich].new_t,sizeof(struct termios));
	 SerTab[wich].new_t.c_cflag = CS8 | CREAD | CLOCAL;SerTab[wich].new_t.c_iflag=IGNPAR;
	 SerTab[wich].new_t.c_oflag=OPOST;SerTab[wich].new_t.c_lflag = IEXTEN;
	 SerTab[wich].new_t.c_cc[VMIN]=0;SerTab[wich].new_t.c_cc[VTIME]=0;
	 cfsetospeed(&SerTab[wich].new_t,BaudXSpeed(&SerTab[wich].baud[0]));
	 cfsetispeed(&SerTab[wich].new_t,BaudXSpeed(&SerTab[wich].baud[0]));
	 tcsetattr(SerTab[wich].fd,TCSANOW,&SerTab[wich].new_t);
	 tcflush(SerTab[wich].fd,TCIOFLUSH);WaitmSec(10);tcflush(SerTab[wich].fd,TCIOFLUSH);
 	}
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Látom van érdeklődő. Ez jó! Ha összeszerveztek egy pizzázást
Pesten valahol, akkor tartok egy kis kiképzést soros port
programozásból. Egyszerűbb lenne, mint egyeként elmondani
mindenkinek.  (-::
Üdv: med.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
meditor - Szia
Már meg is vagy(tok) hívva, mehetünk a pizzeriaba!
Dobjál emaiben paramétereket, hogy konkretizáljuk a dolgokat.
köszi:virtualm@freemail.hu
LinuxLame : virtualm , (debil debianos)
- A hozzászóláshoz be kell jelentkezni
Sőt, mivel méréstechnikával foglalkozom, még a mérés_adatgyűjtést
is teritékre vehetjük (-::
http://www.meditor.hu/xmeaasci_en.php
http://www.meditor.hu/xmea_hu.php
Mail megy...
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Itt a poll routin:
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
int GetSerPoll(unsigned int wich,unsigned short len,unsigned int rl_long,unsigned char *tchar)
	{int 			count;
	 struct	pollfd		serpoll;
	 int			selres;
	 unsigned int		tmp;
memset(&SerTab[wich].modDTA[0],0,4096);SerReadLive=rl_long;tmp=0;
sigbrk:	 serpoll.fd=SerTab[wich].fd;serpoll.events=POLLIN|POLLPRI|POLLERR|POLLHUP;serpoll.revents=0;
	 count=0;selres=poll(&serpoll,1,SerTab[wich].timeout);
	 switch(selres)
	 {case -1: if(errno==EINTR)
	 	   {if(!SerReadLive--){SerTab[wich].sockstate=serpoll.revents;siglongjmp(SERreset,129);}
	 	    goto sigbrk;}
	 	   break;
case 0: break;
	  default: if(!len)
	  	   {while(SerReadLive)
	  	    {tmp=read(SerTab[wich].fd,&SerTab[wich].modDTA[count],4095);count+=tmp;
	  	     if(tchar!=NULL){if(CharSearch(&SerTab[wich].modDTA[0],0,*tchar,count+1)!=0xffff)break;}
	  	     else{break;}
	  	     SerReadLive--;if(SerReadLive)usleep(10000);}}
	           else{while(len>0)
		        {tmp=read(SerTab[wich].fd,&SerTab[wich].modDTA[count],len);
		         if(!tmp)SerReadLive--;if(!SerReadLive)goto gsto;
		         usleep(10000);count+=tmp;len-=tmp;}}
	 	   break;
	 }
gsto:    SerTab[wich].sockstate=serpoll.revents;
	 return(count);
	}
//----------------------------------------------------------------------------------------------
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Egyébként én úgy szervezem a soros_porti kommunikációt, hogy,
mivel több programom futhat egyszerre, amelyek soros portot
használhatnak, van egy démon szerű valami, ami kiajánl egy
megosztott_mem területet. Ez az adatátviteli terület. Ide pakolom
az elküldendőket, illetve itt várom a beérkező adatokat.
Ha az adatátviteli terület elő van készítve, akkor egy
signal()-lal s.e.g.g.berúgom a démont, az megteszi amit kell,
és ha megjött a check_bit, akkor kiolvasom, ami az adatátviteli
területben van(fogadás) illetve tudomásul vettem a küldés
sikerességét(küldés).
Üdv: med.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni