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)
- 4736 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