Thread View: es.comp.os.linux.programacion
9 messages
9 total messages
Started by Eismann
Thu, 04 May 2006 12:15
Enviar ctrl-z por el puerto serie
Author: Eismann
Date: Thu, 04 May 2006 12:15
Date: Thu, 04 May 2006 12:15
60 lines
3384 bytes
3384 bytes
Holas, Estoy haciendo un programa para enviar SMS con un modem que está conectado al puerto serie. El programa funciona en mi ordenador, pero a la hora de llevarlo a uClinux (linux empotrado) se queda tonto. El problema que tengo es que para indicarle al modem que se ha terminado de redactar el mensaje, hay que mandarle el carácter ctrl-z (0x1A), y parece ser que no le llega al modem, que se queda frito esperando hasta que llegue el dichoso caracter. Supongo que será porque es un caracter de control y los drivers del puerto serie lo tratan de otra manera, y no lo mandan, pero ya no sé que probar para que le llegue al modem. Pongo aqui como inicializo termios: ---------------------- /* Esto para abrir el modem */ fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); [...] newtio->c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio->c_iflag = IGNPAR | ICRNL; newtio->c_oflag = OCRNL; newtio->c_lflag = ICANON; newtio->c_cc[VINTR] = 0; /* Ctrl-c */ newtio->c_cc[VQUIT] = 0; /* Ctrl-\ */ newtio->c_cc[VERASE] = 0; /* del */ newtio->c_cc[VKILL] = 0; /* @ */ newtio->c_cc[VEOF] = 4; /* Ctrl-d */ newtio->c_cc[VTIME] = 0; /* inter-character timer unused */ newtio->c_cc[VMIN] = 1; /* blocking read until 1 character arrives */ newtio->c_cc[VSWTC] = 0; /* '\0' */ newtio->c_cc[VSTART] = 0; /* Ctrl-q */ newtio->c_cc[VSTOP] = 0; /* Ctrl-s */ newtio->c_cc[VSUSP] = 0; /* Ctrl-z */ newtio->c_cc[VEOL] = 0; /* '\0' */ newtio->c_cc[VREPRINT] = 0; /* Ctrl-r */ newtio->c_cc[VDISCARD] = 0; /* Ctrl-u */ newtio->c_cc[VWERASE] = 0; /* Ctrl-w */ newtio->c_cc[VLNEXT] = 0; /* Ctrl-v */ newtio->c_cc[VEOL2] = 0; /* '\0' */ tcsetattr(fd,TCSANOW,newtio); -------------------- Lo que no sé es por qué en el ordenador me funciona, pero luego con uClinux no. En el ordenador tengo el kernel 2.6 y con uClinux uso el 2.4. ¿Álguien sabe como hacer para mandar caracteres especiales por el puerto serie? Por lo menos para saber si lo estoy haciendo bien y buscar el error por otro lado. Saludos, Eismann.
Re: Enviar ctrl-z por el puerto serie
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Thu, 04 May 2006 19:41
Date: Thu, 04 May 2006 19:41
67 lines
3800 bytes
3800 bytes
Hola "Eismann" <g.eismann@gmail.com> el 4 May 2006 05:15:01 -0700 escribiste: > Holas, > > Estoy haciendo un programa para enviar SMS con un modem que está > conectado al puerto serie. > El programa funciona en mi ordenador, pero a la hora de llevarlo a > uClinux (linux empotrado) se queda tonto. > El problema que tengo es que para indicarle al modem que se ha > terminado de redactar el mensaje, hay que mandarle el carácter ctrl-z > (0x1A), y parece ser que no le llega al modem, que se queda frito > esperando hasta que llegue el dichoso caracter. > > Supongo que será porque es un caracter de control y los drivers del > puerto serie lo tratan de otra manera, y no lo mandan, pero ya no sé > que probar para que le llegue al modem. > > Pongo aqui como inicializo termios: > > ---------------------- > /* Esto para abrir el modem */ > fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); > > [...] > > newtio->c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; > newtio->c_iflag = IGNPAR | ICRNL; > newtio->c_oflag = OCRNL; > newtio->c_lflag = ICANON; > > newtio->c_cc[VINTR] = 0; /* Ctrl-c */ > newtio->c_cc[VQUIT] = 0; /* Ctrl-\ */ > newtio->c_cc[VERASE] = 0; /* del */ > newtio->c_cc[VKILL] = 0; /* @ */ > newtio->c_cc[VEOF] = 4; /* Ctrl-d */ > newtio->c_cc[VTIME] = 0; /* inter-character timer unused */ > newtio->c_cc[VMIN] = 1; /* blocking read until 1 character > arrives */ > newtio->c_cc[VSWTC] = 0; /* '\0' */ > newtio->c_cc[VSTART] = 0; /* Ctrl-q */ > newtio->c_cc[VSTOP] = 0; /* Ctrl-s */ > newtio->c_cc[VSUSP] = 0; /* Ctrl-z */ > newtio->c_cc[VEOL] = 0; /* '\0' */ > newtio->c_cc[VREPRINT] = 0; /* Ctrl-r */ > newtio->c_cc[VDISCARD] = 0; /* Ctrl-u */ > newtio->c_cc[VWERASE] = 0; /* Ctrl-w */ > newtio->c_cc[VLNEXT] = 0; /* Ctrl-v */ > newtio->c_cc[VEOL2] = 0; /* '\0' */ > > tcsetattr(fd,TCSANOW,newtio); > -------------------- > > Lo que no sé es por qué en el ordenador me funciona, pero luego con > uClinux no. En el ordenador tengo el kernel 2.6 y con uClinux uso el > 2.4. > > ¿Álguien sabe como hacer para mandar caracteres especiales por el > puerto serie? Por lo menos para saber si lo estoy haciendo bien y > buscar el error por otro lado. ¿Qué es MODEMDEVICE? ¿Qué funciones utilizas para "escribir" en el puerto serie? -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Enviar ctrl-z por el puerto serie
Author: Eismann
Date: Fri, 05 May 2006 08:36
Date: Fri, 05 May 2006 08:36
4 lines
1377 bytes
1377 bytes
MODEMDEVICE es /dev/ttyS1 para escribir uso write(fd, "mensaje\x01A", 8), por ejemplo.
Re: Enviar ctrl-z por el puerto serie
Author: iarenaza
Date: Fri, 05 May 2006 09:23
Date: Fri, 05 May 2006 09:23
26 lines
2165 bytes
2165 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
>>>>> "Eismann" == Eismann <g.eismann@gmail.com> writes:
Eismann> para escribir uso write(fd, "mensaje\x01A", 8), por
Eismann> ejemplo.
�No tienes que enviar un '\r' al final de cada cadena que le envias al
modem? Por otra parte, recuerda que write puede no escribir todo lo
que le envias (comprueba lo que te devuelve) y que puede que tengas
que enviar las partes restantes en sucesivos envios.
Saludos. I�aki.
- --
Get PGP/GPG Keys at http://www.escomposlinux.org/iarenaza/pgpkey.php
I use free software / Yo uso software libre
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>
iD8DBQFEWxmYZXLnGT1HLgcRArjSAJ92ol0R9JE8GBHk3UdapLUVA3y7ewCfSDyd
0n+WToit+YPYNasKWd2eBKk=
=tid8
-----END PGP SIGNATURE-----
Re: Enviar ctrl-z por el puerto serie
Author: Eismann
Date: Fri, 05 May 2006 10:31
Date: Fri, 05 May 2006 10:31
21 lines
2312 bytes
2312 bytes
El '\r' es al final de cada orden AT. En este caso es para indicar que se ha acabado el mensaje que se está escribiendo. En mi ordenador lo hago sin el '\r' y funciona, aunque no te creas que no lo he probado también con '\r'... El write me devuelve un 1, así que sí que lo ha escrito... otra cosa es que lo haya leido el modem. El problema que tengo, es que en el ordenador, con un kernel 2.6, me funciona, y cuando lo paso a uClinux, que tiene un kernel 2.4 y usa otras librerias (uC-libc), pues no me manda el caracter (o eso es lo que creo). Y que no sé por dónde buscar para ver que pasa. Porque si me tengo que leer el código de las librerias, o del modulo que corresponda, pues me lo leo, pero quería confirmar que lo estoy haciendo bien y el problema va por otro sitio para no trabajar a lo tonto. Saludos, Eismann.
Re: Enviar ctrl-z por el puerto serie
Author: iarenaza
Date: Fri, 05 May 2006 11:16
Date: Fri, 05 May 2006 11:16
24 lines
2178 bytes
2178 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
>>>>> "Eismann" == Eismann <g.eismann@gmail.com> writes:
Eismann> Y que no s� por d�nde buscar para ver que pasa.
Pincha un equipo con dos interfaces series en medio entre el ordenador
que envia y el aparato embebido y usa algo como snooper para ver si el
trafico se envia o no, y la respuesta que envia el aparato embebido.
Saludos. I�aki.
- --
Get PGP/GPG Keys at http://www.escomposlinux.org/iarenaza/pgpkey.php
I use free software / Yo uso software libre
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>
iD8DBQFEWzQEZXLnGT1HLgcRAtrHAJ0bJS7EhVN4qtr7fCtVC1iBtYdERgCfX5Dy
tkcB2pD40wW6j+KH8T5t850=
=sYuA
-----END PGP SIGNATURE-----
Re: Enviar ctrl-z por el puerto serie
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Fri, 05 May 2006 12:54
Date: Fri, 05 May 2006 12:54
12 lines
1787 bytes
1787 bytes
Hola "Eismann" <g.eismann@gmail.com> el 5 May 2006 03:31:01 -0700 escribiste: > El write me devuelve un 1, as_ que s_ que lo ha escrito... otra cosa es > que lo haya leido el modem. write devuelve el número de bytes escritos. Si devuelve 1 es que sólo ha escrito el primer byte -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Enviar ctrl-z por el puerto serie
Author: Eismann
Date: Fri, 05 May 2006 13:50
Date: Fri, 05 May 2006 13:50
8 lines
1750 bytes
1750 bytes
Oops. Se me olvido decir que hacia el write solo con el caracter ctrl-z. O sea, que esta bien: escribo un caracter, y me devuelve un 1. Voy a probar con el snooper ese, que no lo conocia, a ver si esta mandando algo. Gracias, Eismann.
Re: Enviar ctrl-z por el puerto serie
Author: Eismann
Date: Mon, 08 May 2006 07:07
Date: Mon, 08 May 2006 07:07
17 lines
2235 bytes
2235 bytes
Esto es de traca. jajaja. Si enchufo el cacharrito embebido al ordenador y el ordenador al modem con el snooper en medio, veo que si está mandando el caratcer ctrl-z. Pero no solo eso. Encima es que el cabron del modem va y contesta (cosa previsible). Vamos, que con el snooper funciona todo correctamente, pero si enchufo el modem directamente no. Ya no se que pensar. Como no sean los cables, que para la conexion directa le tengo que poner un null-modem... Porque es lo unico que cambia, pero no le veo la logica a ese razonamiento (¿por que se iba a comer el null-modem los ctrl-z?). Si a alguien se le ocurre que puede estar pasando... Gracias, Eismann.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads