Newsgroup: it.comp.os.linux.development
Titolo: sviluppo porta seriale

Ciao,
sto sviluppando qualche pezzo di programma per la porta seriale su
linux.
Ho trovato diversa documantazione on line, ad esempio:
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Serial-Programming-HOWTO
(un buon how to)
http://www.lilik.it/~mirko/gapil/gapilsu163.html#x400-21000010.2.2
(gapil)
http://www.pluto.it/files/ildp/HOWTO/Modem-HOWTO/Modem-HOWTO-9.html#set_serial
Che però non si spingono ad approfondire molto.
Forse non c'è molto altro..
Qualcuno conosce documentazione sul codice più approfondita per sapere
di più sulla programmazione della seriale?
Gabri

 di piů sulla programmazione della seriale?
per "programmazione della seriale" cosa intendi?
io piu' aprirla,scriverci,leggerci e chiuderla non faccio molto.
ti riporto parti di codice C di un mio vecchio programma che la utilizza:
aprirla:
ttyfd = open("/dev/ttyS1", O_RDWR | O_NONBLOCK);
leggerci:
int readtty(int ttyfd, char *buffer)
{
int k, a,b;
char appo;
	k = strlen(buffer);
	while( 1 )
	{
		a = read(ttyfd, &appo, 1);
		if (a > 0)
		{
			fflush(stdout);	
			if (appo == '\r')
			{
				buffer[k++] = '\0';
				return(1);
			}
			else
			{
				if (k < MAXBUFLEN - 2)
					buffer[k++] = appo;
				else
				{
					k = 0;
					printf("==============ERRORE===========\n\n");
					return(0);
				}
			}
		}
		else if (a == 0)
			return(0);
		else
			return(-1);
	}
	return(0);
}
scriverci:
int writetty(int ttyfd, char *buffer)
{
int a;
	strcat(buffer, "\r");
	a = write(ttyfd, buffer, strlen(buffer));
	if (a < strlen(buffer))
		return(-1);
	else
	{
		usleep(10000);
		return(1);
	}
}
chiuderla:
 close(ttyfd);	
non credo ci sia molto altro, la massimo puoi prevedere la presenza di un
file di lock sulla porta
-- 
Web marketing & community management:
http://www.insistema.com/

Se stai programmando in C ti segnalo questo:
http://www.easysw.com/~mike/serial/serial.html
ma mi ricordo che quando mi ci ero cimentato avevo bestemmiato per settimane 
per fare andare le cose a posto... c'e' sempre qualche dettaglio che non e' 
spiegato bene o che e' osboleto su qualasiasi risorsa che ho trovato online 
(anche sulle gapil).
Alla fine ho trovato la mia bibbia / riferimento totale (per questo e 
_molto_ altro):
Richard Stevens, Stephen Rago, "Advanced programming in the UNIX 
environment, Second edition"
Per quel che mi riguarda, quello che c'e' scritto li' e' _giusto_. Mi ha 
risolto ogni dubbio e problema che abbia mai avuto. Ma e' un malloppone 
immenso, non val la pena comprarlo solo per quello :) ma magari lo trovi in 
biblioteca.
Pleg 

 
dopo un ' occhiata alla pagina che hai linkato mi sono ricordato chemi ero
dimenticato di segnalare la parte del setting degli attributi dellsa
porta, sempre dallo stesso programmino che avevo fatto:
struct termios prima, dopo;
	tcgetattr(ttyfd, &prima);
	tcgetattr(ttyfd, &dopo);
 
	switch (speed)
	{
		case 1200:
			sf = B1200;
			break;
		case 2400:
			sf = B2400;
			break;
		case 4800:
			sf = B4800;
			break;
		case 9600:
			sf = B9600;
			break;
		case 19200:
			sf = B19200;
			break;
		case 38400:
			sf = B38400;
			break;
		case 57600:
			sf = B57600;
			break;
		case 115200:
			sf = B115200;
			break;
		case 230400:
			sf = B230400;
			break;
	}
	cfsetospeed(&dopo, sf);
	cfsetispeed(&dopo, sf);
	cfmakeraw(&dopo);
	dopo.c_lflag & ~ECHO;
	a = tcsetattr(ttyfd, TCSANOW, &dopo);	

Grazie dei commenti di entrambi..
non avevo specificato..intendevo programmazione nel classico C.
Più che altro quello che ho trovato fastidioso è la gestione dei
setting della porta seriale..
con tutti i flag nella struttura termios..non sono chiari da subito..
Capita che mi dimenticavo di azzerare un flag e non ricevevo più dati.
Su read/write non ci sono problemi particolari, le uso similmente come
per i file
Proverò a trovare il libro che mi ha consigliato Pleg.
Gabri
.
RedWiz ha scritto:


 setting della porta seriale..
Si' anch'io ci avevo perso una cifra di tempo.
Oltre al libro che ti ho detto, che li riporta tutti ed e' abbastanza chiaro 
(piu' della media, cmq :) mi ricordo che avevo anche preso il codice di 
cutecom (o puoi prendere un qualsiasi programma che comunichi colla 
seriale), ci puoi dare un'occhiata e vedere cosa fanno gli altri :)
Pleg