Envío y recepción de ficheros por IR en Linux.

Para transferir y recibir ficheros con el dispositivo IR se puede utilizar un terminal, mediante el comando ircp.

1 Para transmitir un fichero "ircp 'nombre fichero' ":

ircp andatuz.jpg

respuesta obtenida:


Connecting...done
Sending andatuz.jpg...done

Disconnecting...done

2 Para recibir un fichero "ircp -r 'ruta archivo' ":

ircp -r /home/sergio/Imágenes/ 
 
Waiting for incoming connection
Incoming connection
Receiving andatuz.jpg...done
Disconnecting


Si nos parece tedioso enviar/recibir ficheros por el terminal, tenemos una aplicación gráfica "ircp-tray".

3 Instalar el siguiente paquete:

sudo aptitude install ircp-tray

4 Para probar su funcionamiento, podemos lanzar la aplicación desde el propio terminal ircp-tray o bien Aplicaciones -> Accesorios -> ircp Tray
Una vez lanzada la aplicación, se añadirá en el panel superior.

Mientras no se detecta ningún dispositivo remoto, el icono de Ircp tray será de color gris , al detectar un dispositivo cambiará a rojo.

Dispositivo remoto desaparecido
Dispositivo remoto encontrado
Para enviar un archivo, hacer click en el icono y seleccionar el archivo a enviar.
Mientras se va transfiriendo el archivo, podemos ver su estado.

Enviando archivo a Palm Tx
En el dispositivo remoto también podemos comprobar su estado.


Una vez finalizado el envío correctamente, se muestra un mensaje advirtiéndonos del resultado.


5 La recepción de archivos es idéntica al envío, seleccionar carpeta para guardar el archivo y se inicia la recepción.


Recibiendo archivo desde IR remoto
6 Ircp Tray, permite obtener información del dispositivo remoto.

Instalar y configurar un dispositivo de infrarrojos en Linux.

Este tutorial o manual esta basado en el dispositivo CIR4u de conceptronic, con chip STIR4210 de Sigmatel.
Sigmatel fue adquirida por freescale en el año 2008 y como puede parecer lógico, la página web no se encuentra operativa.
Gracias a Internet Archive, es posible encontrar información del chip, driver, firmware para Linux y notas de aplicación.
Puedes consultar la información en este enlace:
http://web.archive.org/web/20050206010419/http://www.sigmatel.com/products/technical_docs.htm
o bien descargarla desde el blog.

Información técnica (Datasheet)

Esquema adaptador USB-IR

Firmware stir4210-4220-4116 (Linux)

Instalación.

1 Abrir un terminal, Aplicaciones -> Accesorios -> Terminal o bien Alt+F2 y ejecutar "gnome-terminal" sin comillas.

2 Instalar los siguientes paquetes:

sudo aptitude install irda-utils openobex-apps

3 Copiar en el directorio /lib/firmware los dos parches (42101001.sb, 42101002.sb) que se encuentran dentro del archivo "stir4210_4220_4116_patch_files.tar.gz"

Desde la carpeta actual.

tar zxvf stir4210_4220_4116_patch_files.tar.gz
sudo cp *.sb /lib/firmware


3 Crear el fichero /etc/modprobe.d/blacklist-usbserial.

sudo gedit /etc/modprobe.d/blacklist-usbserial

4 Añadir este contenido.

#If these modules are loaded stir421x driver won't work.
blacklist ir_usb
blacklist usbserial

guardar y cerrar el archivo.

Configuración.

5 Abrir el fichero de configuración /etc/default/irda-utils

sudo gedit /etc/default/irda-utils

Configurar tal y como aparece aquí.

    ENABLE="true"
    AUTOMATIC="false"
    DISCOVERY="true"
    DEVICE="irda0"
    DONGLE="none"
    SETSERIAL=""

guardar y cerrar el archivo.

Ahora es necesario reiniciar el sistema con el dispositivo conectado, o bien conectarlo una vez reiniciado.
Si optamos por conectar el dispositivo después de reiniciar, es necesario iniciar el servicio de irda.

sudo /etc/init.d/irda-utils restart

Verificación.

6 Para verificar que el dispositivo es reconocido y funciona correctamente, enviar los siguientes comandos:

dmesg

respuesta obtenida:


[  349.299342] IRDA-USB found at address 5, Vendor: 66f, Product: 4210
[  349.300002] irda_usb_parse_endpoints(), And our endpoints are : in=02, out=01 (512), int=00
[  349.310429] irda_usb_init_qos(), dongle says speed=0x17F, size=0x20, window=0x8, bofs=0x80, turn=0x4
[  349.311660] IrDA: Registered device irda0
[  349.311665] usb 1-1: firmware: requesting 42101002.sb
[  349.323706] stir421x_patch_device(): Received firmware 42101002.sb (1687 bytes)
[  349.343998] irda_usb_init_qos(), dongle says speed=0x17F, size=0x20, window=0x8, bofs=0x80, turn=0x4
[  349.344052] usbcore: registered new interface driver irda-usb
[  349.344059] USB IrDA support registered

ifconfig irda0

respuesta obtenida:
irda0     Link encap:IrLAP  direcciónHW 00:00:00:00
          NOARP  MTU:2048  Métrica:1
          Paquetes RX:0 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:0 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:8
          Bytes RX:0 (0.0 B)  TX bytes:0 (0.0 B)

sudo irdadump

respuesta obtenida:
20:21:57.966408 xid:cmd e52c5b89 > ffffffff S=6 s=0 (14)
20:21:58.053362 xid:cmd e52c5b89 > ffffffff S=6 s=1 (14)
20:21:58.131360 xid:rsp e52c5b89 < 51473487 S=6 s=1 TuxPalm hint=8220 [ PDA/Palmtop IrOBEX ] (25)
20:21:58.141901 xid:cmd e52c5b89 > ffffffff S=6 s=2 (14)
20:21:58.229340 xid:cmd e52c5b89 > ffffffff S=6 s=3 (14)
20:21:58.318339 xid:cmd e52c5b89 > ffffffff S=6 s=4 (14)
20:21:58.406361 xid:cmd e52c5b89 > ffffffff S=6 s=5 (14)
20:21:58.493326 xid:cmd e52c5b89 > ffffffff S=6 s=* laptop hint=0400 [ Computer ] (22)
20:22:00.966316 xid:cmd e52c5b89 > ffffffff S=6 s=0 (14)
20:22:01.053312 xid:cmd e52c5b89 > ffffffff S=6 s=1 (14)
20:22:01.141305 xid:cmd e52c5b89 > ffffffff S=6 s=2 (14)
20:22:01.229332 xid:cmd e52c5b89 > ffffffff S=6 s=3 (14)
20:22:01.307243 xid:rsp e52c5b89 < 51473487 S=6 s=3 TuxPalm hint=8220 [ PDA/Palmtop IrOBEX ] (25)
20:22:01.317332 xid:cmd e52c5b89 > ffffffff S=6 s=4 (14)
20:22:01.405295 xid:cmd e52c5b89 > ffffffff S=6 s=5 (14)
20:22:01.493324 xid:cmd e52c5b89 > ffffffff S=6 s=* laptop hint=0400 [ Computer ] (22)
20:22:03.965332 xid:cmd e52c5b89 > ffffffff S=6 s=0 (14)
20:22:04.054140 xid:cmd e52c5b89 > ffffffff S=6 s=1 (14)
20:22:04.141362 xid:cmd e52c5b89 > ffffffff S=6 s=2 (14)
xid:rsp e52c5b89 < 51473487 S=6 s=2 TuxPalm hint=8220 [ PDA/Palmtop IrOBEX ] (25)
20:22:04.229350 xid:cmd e52c5b89 > ffffffff S=6 s=3 (14)
20:22:04.318286 xid:cmd e52c5b89 > ffffffff S=6 s=4 (14)
20:22:04.406349 xid:cmd e52c5b89 > ffffffff S=6 s=5 (14)
20:22:04.494330 xid:cmd e52c5b89 > ffffffff S=6 s=* laptop hint=0400 [ Computer ] (22)
^C
24 packets received by filter


Para detener el comando irdadump, es necesario pulsar ctrl-c.

Nota:  Si disponemos de un dispositivo de infrarrojos, podemos colocarlo delante para comprobar la comunicación entre ambos (Ver texto en negrita).

Dialang. Capturas de pantalla

Hace unos días quería poner unas captura de pantalla de Dialang funcionando en Linux, en mi caso sobre Guadalinex.

Dialang, iniciándose.

Pero mi sorpresa fue que no funcionaba, parecía como si el servidor estuviera caído.
Después de reintentar varias veces sin éxito, comprobé la página oficial Dialang por si habían nuevas versiones, pero no se encuentra operativa. De forma temporal han habilitado una web en Lancaster University, allí fue donde encontré como verificar el servidor de test.
Para verificar la conexión con el servidor, abriremos un terminal y realizamos un Ping al servidor, la respuesta fue clara el servidor no esta accesible.


sergio@laptop:~/Descargas/Dialang$ ping 148.88.38.11
connect: Network is unreachable
sergio@laptop:~/Descargas/Dialang$


Si el servidor estuviera operativo, la respuesta obtenida seria similar a esta:

sergio@laptop:~/Descargas/Dialang$ ping 148.88.38.11
PING 148.88.38.11 (148.88.38.11) 56(84) bytes of data.
64 bytes from 148.88.38.11: icmp_seq=1 ttl=46 time=84.8 ms
64 bytes from 148.88.38.11: icmp_seq=2 ttl=46 time=85.4 ms
64 bytes from 148.88.38.11: icmp_seq=3 ttl=46 time=83.8 ms
64 bytes from 148.88.38.11: icmp_seq=4 ttl=46 time=84.5 ms
^C
--- 148.88.38.11 ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 4002ms
rtt min/avg/max/mdev = 83.823/84.641/85.415/0.571 ms
sergio@laptop:~/Descargas/Dialang$


Cuando la conexión con el servidor se establece correctamente, esta es la primera pantalla que aparece.

Seleccionamos la opción "Instrucciones en español" y automáticamente aparece la pantalla de bienvenida a Dialang.


Si pasamos a la siguiente pantalla, podemos elegir el tipo de prueba a realizar y sobre que idioma realizar la prueba.


Las pruebas disponibles son:
  1. Comprensión oral
  2. Expresión escrita
  3. Comprensión escrita
  4. Gramática
  5. Vocabulario
La ultima versión de la aplicación es Dialang 0.93.1

Nota: Para ejecutar Dialang sobre Linux, puedes consultar esta entrada.

Como remplazar la batería a una Zire 21 (Palm)

Desde hace bastante tiempo, tenia mi Palm Zire 21 sin batería. La conecte para cargarla e instalar una aplicación para probar los infrarrojos, pero no se encendía. Me fije que en la parte trasera de la tapa tenia una grieta, como si la batería hiciera presión sobre la tapa.
Grieta en la parte trasera de la tapa.
Así que la abrí y comprobé que la batería estaba como hinchada. Desoldé los dos cables de la batería y conecte una fuente de alimentación a 3,6V y la Palm volvía a funcionar.

Nota: Si no tenemos a mano una fuente de alimentación, se puede emplear tres baterías recargables de (1,2V 600mAh) conectadas en serie.

Para desmontar la Palm Zire 21, necesitaremos el siguiente material:
  • Destornillador Torx número 5.
  • Soldador de estaño 15.
  • Estaño.
  • Alicates de corte.
Estos materiales son fáciles de conseguir, se pueden comprar en cualquier tienda de electrónica. También es posible encontrarlos en cualquier bazar o gran superficie.

1. Colocar la Palm con la pantalla mirando hacia abajo de forma que quede visible la pegatina con el código de barras.
Parte trasera de la Palm.


2. Quitar el protector de pantalla para dejar visibles los dos tornillos Torx. Para quitar el protector, se realiza un desplazamiento lateral hasta que salga completamente.

Una vez fuera el protector , quedarán visibles los dos tornillos.
Funda protectora desmontada.

3. Con la ayuda del destornillador quitaremos los dos tornillos.  También es necesario retirar el lápiz para poder abrir la tapa.
Tornillos torx
Lápiz

4. Llegó el momento de abrir la PDA, para comenzar a separar la tapa comenzaremos por la parte superior por donde esta situado el conector USB y seguir por uno de los laterales, podemos ayudarnos a separar la tapa con un objeto plano y delgado, como puede ser un destornillador de punta plana o incluso una hoja de cutter, con cuidado de no cortarse.

Una vez retirada la tapa, ya se puede ver la batería.
Palm Zire 21 abierta.

5. Para quitar la batería, es necesario desoldar los dos cables (rojo y negro) de los terminales.
Batería defectuosa.

6. Conectamos el soldador a la corriente y pasados unos minutos la punta ya estará lista para desoldar los cables. Una vez que la punta este caliente y con cuidado de no quemarse, acercaremos la punta al extremo del cable donde esta el estaño, en pocos segundos el estaño se calienta y podemos sacar el cable de la batería. Repetiremos el mismo proceso para el otro cable.

7. La batería esta fijada con un adhesivo de doble cara al circuito impreso, con un destornillador de punta plana o un objeto similar, haremos palanca para despegar la batería del circuito impreso.

8. El proceso de montaje de la nueva batería, es similar al descrito con anterioridad. Salvo en el cableado y en la fijación al circuito impreso.
Para soldar los cables al circuito impreso, es necesario cortar y estañar los cables.
Batería Palm Zire 21
Batería con cables estañados
9. Haciendo uso de la cinta de doble cara, colocaremos un trozo en la parte superior como se muestra en la imagen.

10. Le damos la vuelta a la batería y retiramos la otra parte de la cinta de doble cara. Situamos la batería en la zona marcada del circuito impreso para que quede fijada.
Batería fijada al circuito
 11. Soldamos nuevamente los cables de la batería a los pads del circuito, como se ve en la imagen y tan solo queda volver a montar la tapa.

Cables soldados al circuito.

Error al compilar con gcc

Hace unos meses publique la entrada Mi primer programa en C. y quería volver a compilar y ejecutar ese ejemplo. Pues bien, me lleve una gran sorpresa al comprobar que no compilaba un ejemplo tan sencillo.
Los mensajes de error que aparecen son:

hola.c: In function ‘main’:
hola.c:6: error: stray ‘\342’ in program
hola.c:6: error: stray ‘\200’ in program

hola.c:6: error: stray ‘\234’ in program
hola.c:6: error: ‘Hola’ undeclared (first use in this function)
hola.c:6: error: (Each undeclared identifier is reported only once
hola.c:6: error: for each function it appears in.)
hola.c:6: error: expected ‘)’ before ‘Mundo’
hola.c:6: error: stray ‘\’ in program
hola.c:6: error: stray ‘\342’ in program
hola.c:6: error: stray ‘\200’ in program
hola.c:6: error: stray ‘\235’ in program


Después de comprobar que tenia instalado el paquete "build-essential" seguía teniendo los mismos mensajes de error.

El misterio fue fácil de resolver aunque no se vea a simple vista, se trata de un error en la representación de la doble comilla por el editor de texto.
  "
La corrección que se debe realizar en el código hola.c es cambiar:
printf(“Hola Mundo\n”); por printf("Hola Mundo\n");

Descarga aquí la nueva versión del hola.c corregida y el código compilado hola