domingo, julio 13, 2008

Bluetooth

Ahora vamos a conectar nuestro bluetooth-usb a nuestro portátil.

El usb es de conceptronic, y lo primero es compilar los módulos:
Networking -> Bluetooth subsystem support -> Aquí activar todas las opciones.
y en Bluetooth device drivers: HCI USB driver y HCI VHCI (Virtual HCI device) driver

Una vez hecho, nos tenemos que instalar las utilidades desde http://www.bluez.org/download/:
bluez-libs
./configure --prefix=/usr/local/bluetooth --localstatedir=/var

bluez-utils
Para instalar este paquete necesitamos libnl; hay que aplicar el siguiente parche:
--- libnl-1.0/lib/route/link/vlan.c.orig 2008-01-16 22:59:21.000000000 -0800
+++ libnl-1.0/lib/route/link/vlan.c 2008-01-16 22:59:36.000000000 -0800
@@ -27,6 +27,9 @@
#include

#include
+#ifndef VLAN_FLAG_REORDER_HDR
+#define VLAN_FLAG_REORDER_HDR 0x01
+#endif

/** @cond SKIP */

#define VLAN_HAS_ID (1<<0)>
./configure --prefix=/usr/local/bluetooth

También necesitamos una versión actual de la glib, porque las utils utilizan una función relativamente nueva "g_timeout_add_seconds"

Ahora instalamos las utils:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/bluetooth/lib/pkgconfig

CPPFLAGS=-I/usr/local/bluetooth/include LDFLAGS=-L/usr/local/usb/lib ./configure --prefix=/usr/local/bluetooth --localstatedir=/var --enable-alsa --enable-usb --enable-netlink --enable-tools --enable-bccmd --enable-hid2hci --enable-dfutool --enable-hidd --enable-pand --enable-dund --enable-manpages --enable-configfiles --enable-initscripts --enable-pcmciarules --enable-debug --enable-test

Una vez compilado e instalado también debemos copiar del directorio test el programa passkey-agent a /usr/local/bluetooth/bin

bluez-firmware
./configure --prefix=/usr/local/bluetooth

bluez-hcidump
./configure --prefix=/usr/local/bluetooth

Si conectamos nuestro bluetooth debe aparcer en dmesg:
usb 1-1: USB disconnect, address 12
usb 1-1: new full speed USB device using uhci_hcd and address 13
usb 1-1: configuration #1 chosen from 1 choice
Bluetooth: Core ver 2.11
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: HCI USB driver ver 2.9
usbcore: registered new interface driver hci_usb

Ahora levantamos el interfaz: hciconfig hci0 up

Si ponemos hciconfig debe aparecer:
hci0: Type: USB
BD Address: 00:80:5A:46:58:97 ACL MTU: 384:8 SCO MTU: 64:8
UP RUNNING
RX bytes:1845 acl:0 sco:0 events:41 errors:0
TX bytes:153 acl:0 sco:0 commands:22 errors:0

Para buscar los dispositivos: hcitool scan; tiene que aparecer una lista de los dispositivos a su alcance.

passkey-agent --default '1234' &

dejando en ejecución el programa que suministra la clave. Como esta solución parece poco elegante voy a utilizar udev para que ejecute el programa "passkey-agent" cada vez que conecte el dispositivo bluetooth usb. udev es un sistema que se encarga de la creación dinámica de dispositivos.

Editamos un fichero llamado:

/etc/udev/rules.d/60-reglasmias.rules


y le añadimos la siguiente línea:

ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0a12", SYSFS{idProduct}=="0001", RUN+="/usr/bin/passkey-agent --default '1234'
"

En resumidas cuentas, le estamos diciendo a udev que cuando de conecte el dispositvo con los idVendor e idProduct especificados ejecute el programa "passkey-agent".
Los valores de IdVendor e idProducto corrresponden a un adaptador bluetooth Conceptronics. Para averiguar los valores concretos en tu caso deberías ejecutar:

lsusb

para averiguar tus identificadores de dispositivo concretos.

Una vez creado o modificado el fichero ejecutamos:

start_udev

para reiniciar los servicios udev. Ahora cada vez que conectamos el dispositivo USB bluetooth tendremos el programa "passkey-agent" en ejecución.


Audio:
En /usr/local/sonido/lib/alsa-lib, ln -s /usr/local/bluetooth/lib/alsa-lib/libasound_module_* .
En $HOME/.asoundrc
pcm.bluetooth {
type bluetooth
device 00:1A:80:45:AC:57
profile "hifi"
}

mplayer -ao alsa:device=bluetooth file.mp3

martes, julio 08, 2008