🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11965

Pregunta complicada

#11965
From: JordiNitrox
Date: Wed, 05 Sep 2001 20:00
129 lines
4306 bytes
Hola a todos/as

Estoy intentando de programar el puerto serie para comunicarme con un
dispositivo externo no standard (un interfase de un ordenador de buceo). 
Tengo el protocolo de comunicaciones es:
http://pakuro.is.sci.toho-u.ac.jp/aladin/memomouse-e.html

Bien, el problema que tengo es que no encuentro la forma de apagar el
pin RTS del puerto serie y necesito ponerlo en "off" para qeue el
periferico se conecte. 
He estado siguiendo el Serial-Programming How-To y El "Serial
Programming guide for POSIX operating systems" y actualmente tengo este
trozo de codigo:

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>

[mas codigo]

void Comunicacion::ejecutar(){
// declara variables
int fd,c,res,status;
struct termios oldtio,newtio;
char buff[1024];
// abre puerto para lectura/escritura
fd=open(PUERTO,O_RDWR | O_NOCTTY);
if(fd<0){perror(PUERTO);return;}
//inicializa parametros del puerto y hace el flush
tcgetattr(fd,&oldtio);
bzero(&newtio,sizeof(newtio));
newtio.c_cflag=0;
newtio.c_cflag=BAUDRATE | CS8 | CLOCAL | CREAD | CRTSCTS;
newtio.c_iflag= IGNPAR | ICRNL;
newtio.c_oflag=0;
newtio.c_lflag=0;
fcntl(fd, F_SETFL,FNDELAY);
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
//obtiene el estatus de los pins
ioctl(fd,TIOCMGET,&status);
// (1) el mismo número en el listado del output del programa (ver más
abajo)
imprime_estado(status); // método que imprime que pins estan en alto
(ver más abajo)
// hace que el unico pin activo sea el DTR y lo envia otra vez al puerto
status =TIOCM_DTR;
// (2)
imprime_estado(status);
ioctl(fd,TIOCMSET,status);
//obtiene otra vez los datos de puerto para comprobar el estado
ioctl(fd,TIOCMGET,&status);
// (3)
imprime_estado(status);


// trozo de codigo que intenta otra vez desactivar el RTS y comprobar el
resultado
status &= ~TIOCM_RTS;
// (4)
imprime_estado(status);
ioctl(fd,TIOCMSET,status);
ioctl(fd,TIOCMGET,&status);
// (5)
imprime_estado(status);


}
/** imprime el estado de los pins del puerto */
void Comunicacion::imprime_estado(int status){
fprintf(stderr,"\n--------------\n");
if(status & TIOCM_DTR)
  fprintf(stderr,"DTR--on\n");
if(status & TIOCM_LE)
  fprintf(stderr,"DSR--on\n");
if(status & TIOCM_RTS)
  fprintf(stderr,"RTS--on\n");
if(status & TIOCM_CTS)
  fprintf(stderr,"CTS--on\n");
if(status & TIOCM_CAR)
  fprintf(stderr,"DCD--on\n");
if(status & TIOCM_DSR)
  fprintf(stderr,"DSR--on\n");
fprintf(stderr,"--------------\n");
}


El resultado que obtengo es el siguiente

(1)
--------------
DTR--on
RTS--on
--------------
(2)
--------------
DTR--on
--------------
(3)
--------------
DTR--on
RTS--on
--------------
(4)
--------------
DTR--on
--------------
(5)
--------------
DTR--on
RTS--on
--------------

Como veis, mis intentos para desactivar el RTS no han dado resultado.
Alguien sabe como desactivar el RTS de las narices?????????

Venga a ver quien se anima a hecharme una mano, que quiero desterrar
completamente al windows!! (aun lo necesito para comunicarme con el p...
dispositivo)


Jordi
mailto:JordiNitrox@virtual-sub.org
http://www.virtual-sub.org
Technical Details
Message-ID: <3B968465.E714D98@virtual-sub.org>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,bc00889959010e54,start
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-09-05 13:11:06 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
From: JordiNitrox <Jordinitrox@virtual-sub.org>
Newsgroups: es.comp.os.linux.programacion
Subject: Pregunta complicada
Date: Wed, 05 Sep 2001 22:00:37 +0200
Organization: Virtual-Sub.Org
Lines: 129
Message-ID: <3B968465.E714D98@virtual-sub.org>
NNTP-Posting-Host: 212.25.147.135
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
X-Trace: news.wanadoo.es 999720323 3044 212.25.147.135 (5 Sep 2001 20:05:23 GMT)
X-Complaints-To: usenet@wanadoo.es
NNTP-Posting-Date: Wed, 5 Sep 2001 20:05:23 +0000 (UTC)
X-Mailer: Mozilla 4.77 [es] (X11; U; Linux 2.4.4-4GB i686)
X-Accept-Language: ca, es, en