9 de Julio, 2005

Trabajando con infrarred en OpenBSD

Lo primero que hay que tener claro es que OpenBSD no cuenta con soporte para dispositivos infrarred (infrarrojos o IrDA), aunque sí detecta el dispositivo como un puerto de comunicaciones normal y corriente, que podremos usar con una implementación en espacio de usuario: birda.

Además a yo tengo un problema añadido, porque resulta que la tarjeta de sonido comparte IRQ con el puerto de infrarrojos, así que tendré que cambiar algunas cosas en la BIOS.

Si miramos la página del manual de pccom podemos ver:

...
     pccom0 at isa? port 0x3f8 irq 4
     pccom1 at isa? port 0x2f8 irq 3
     pccom2 at isa? port 0x3e8 irq 5
     pccom3 at isa? port 0x2e8 irq 9
...

Actualmente no me detecta bien el dispositivo de infrarred, porque su IRQ está en uso por sb0 (la tarjeta de sonido).

Cuando no se detecta un dispositivo de este tipo, probablemente sea debido a algún conflicto de hardware (sobretodo trabajando con el bus ISA), así que vamos a configurar el dispositivo de infrarred en la BIOS para que emplee la IRQ 3, que está libre.

Volvemos a arrancar el sistema y, en efecto, se ha solucionado el problema:

$ dmesg | grep pccom 
pccom0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pccom1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo

Ahora vamos a echarle un vistazo a lo que trae el paquete birda.

Contamos principalmente con irs(1) (que acepta y envía objetos OBEX, como cuando mandamos algo desde el móvil o la PDA, o sincronizar esta última vía infrarrojos) e ircomm(1) (para emplear el módem del móvil vía IrDA). Con estas dos herramientas tendremos suficiente.

Como ejemplo, y para probar el invento, vamos a recibir una fotografía enviada desde el teléfono móvil:

# irs -o -e -d /dev/cua01
object 0.obex

Cuando ejecutamos irs se queda esperando a que le envíen un objeto, cosa que hacemos (en el móvil aparece una conexión contra $(hostname)). He empleado cua01 porque recordemos que el dispositivo es pccom1.

Lamentablemente con el objeto OBEX podemos hacer más bien poco, ya que lo que nos interesa es lo que contiene (una imagen en este caso). Además no he encontrado nada que me permita conseguir esos datos.

Parece que el paquete birda está pensado para trabajar de intermediario con otro software y encargarse solo del soporte de infrarred, así que necesitaríamos otra aplicación que manejara los objetos OBEX.

Me he dedicado esta mañana más tiempo a buscar una aplicación, que al parecer no existe, que en programar una sencilla herramienta esta tarde :(. Yo buscaba un programa para decodificar objetos OBEX, y he encontrado cosas como OpenOBEX, que parece interesante pero que se centra en el protocolo y en la comunicación, pero no en el pequeño detalle que yo necesito.

He buscado la especificación del protocolo y he hecho un programita que analiza los chunks más importantes (en realidad solo porque los usa mi móvil :D). Esto es: nombre, tipo MIME, tamaño, cuerpo y fin de cuerpo.

Además paso de muchos de los datos, como en el nombre (que está en UNICODE :|), pero hace lo que yo necesito. Se puede descargar la aplicación desde este servidor: ext_odata (tiene su README y todo).

Pues bien, decodificamos el objeto OBEX tal que así:

$ /home/jjm/bin/ext_odata 0.obex  
Extract OBEX data!
Copyright (C) 2005 Juan J. Martinez  <jjm usebox net>
Name
 length: 0x17
Type
 length: 0x0e
 image/jpeg
Length
 3928 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 503 bytes
Body chunk
 length: 431 bytes
Body end
 length: 3 bytes
/home/jjm/bin/ext_odata: Undefined error: 0

Así obtenemos un body.0, que en este caso y como indica el chunk Type, es una imagen JPG.

Sonia
Es pequeña, pero lo primero que envío desde el móvil al portátil ;)

He probado a enviar otros tipos de fichero, como MID (las melodías), y funciona perfectamente. En realidad lo importante con ext_odata es que no aparezcan chunks que no sepa como tratar, así que se puede extraer cualquier tipo de datos del objeto OBEX.

¡Ya puedo sacar las fotografías del móvil! Aunque aún me falta probar conectar a Internet, y eso ya lo intentaré otro día, parece que para no tener OpenBSD soporte para infrarred, esto va bastante bien :).

Así que para terminar, una foto de la criatura.

El portaka
Una foto algo más grande

La calidad de las fotos no es para echar cohetes, pero bueno. Este artículo lo he escrito en el portátil, usando convert para dimensionar la imagen (las fotos grandes las hace el móvil a 640x480 pixeles), y empleando mi mail2post ;).

Anotación por Juan J. Martínez, clasificada en: bsd, irda.

Hay 2 comentarios

Gravatar

Que caracteriticas tiene se Portatil?

por un visitante, en 2005-07-10 12:45:13

Gravatar

Es un portátil bastante viejo:
http://www.usebox.net/jjm/obsd-wifi/laptop/

Lo compré de 2da mano hace unos años, a buen precio. Sirve para lo que sirve, eso sí.

por Juanjo, en 2005-07-10 19:53:17

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: