Equipos y materiales > Openwrt & LEDE

Bluetooth en OpenWrt

(1/3) > >>

raphik:
Hace ya varios meses que le vengo dando vueltas al tema del Bluetooth en OpenWrt. La información que se encuentra en Internet es confusa y hasta contradictoria en algunos casos. Hay mucha información obsoleta de versiones antiguas. En fin, escribo este post para compartir mis pequeños avances y animaros a comentar los vuestros.

Las pruebas las he realizado en un hg553 con un firmware CC 15.05 recién bajado del repositorio.
He probado cuatro pinchos BT distintos, de los que sólo dos han funcionado bien.


1) PRELIMINARES.

Conectar el pincho BT al usb trasero del router y comprobar que OpenWrt detecta algo.

--- Código: ---dmesg
  usb 2-2: new full-speed USB device number 1 using ohci-platform

--- Fin del código ---

Instalar paquetes bluetooth.

--- Código: ---opkg update
opkg install kmod-bluetooth bluez-libs bluez-utils

--- Fin del código ---

El script de arranque es /etc/init.d/bluetoothd [command]. Admite los comandos:
  start     Inicia el servicio
  stop      Detiene el servicio
  restart   Reinicia el servicio
  reload    Vuelve a cargar los ficheros de configuración
  enable    Habilita el inicio automático del servicio en el arranque
  disable   Deshabilita el inicio automático del servicio en el arranque

Comprobar que OpenWrt reconoce el dispositivo bluetooth local.

--- Código: ---hciconfig
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
DOWN
RX bytes:141156 acl:5149 sco:0 events:4601 errors:0
TX bytes:57010 acl:4229 sco:0 commands:179 errors:0

--- Fin del código ---
(OpenWrt encuentra un dispositivo hdi0 con MAC 00:0A:94:XX:XX:XX en estado DOWN.)

Activar el dispositivo bluetooth.

--- Código: ---hciconfig hci0 up
--- Fin del código ---
El comando no devuelve nada por pantalla.

Confirmar que el dispositivo está activado:

--- Código: ---hciconfig hci0
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
UP RUNNING
RX bytes:141156 acl:5149 sco:0 events:4601 errors:0
TX bytes:57010 acl:4229 sco:0 commands:179 errors:0
--- Fin del código ---
La línea UP RUNNING indica que está activado.

Obtener mayor infiormación del dispositivo bluetooth.

--- Código: ---hciconfig -a hci0
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
UP RUNNING
RX bytes:140879 acl:5149 sco:0 events:4598 errors:0
TX bytes:57001 acl:4229 sco:0 commands:176 errors:0
Features: 0xff 0xff 0x8d 0x78 0x18 0x18 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'BlueZ 5.30'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 1.2 (0x2)  Revision: 0x0
LMP Version: 1.2 (0x2)  Subversion: 0x8a9
Manufacturer: Silicon Wave (11)
--- Fin del código ---
La verdad es que todavía no sé cómo sacarle jugo a toda esta información.

Cambiar el nombre del dispositivo bluetooth. Por defecto es 'BlueZ 5.30'.

--- Código: ---hciconfig hci0 name 'Mi router OpenWrt'
--- Fin del código ---
El comando tampoco devuelve nada en esta ocasión. Para verificar el nuevo nombre: hciconfig -a hci0.


2) CONECTAR EL ROUTER A UN DISPOSITIVO REMOTO.
(Las pruebas las he hecho con un GPS Bluetooth Holux 1200)

Descubrir dispositivos al alcance.

--- Código: ---hcitool -i hci0 scan
Scanning ...
00:1B:C1:XX:XX:XX HOLUX_M-1200
--- Fin del código ---

Obtener información de un dispositivo remoto.

--- Código: ---sdptool -i hci0 browse 00:1B:C1:XX:XX:XX
Browsing 00:1B:C1:XX:XX:XX ...
Service Name: SPP slave
Service RecHandle: 0x10000
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
--- Fin del código ---
(De aquí, interesa saber que el dispositivo remoto admite el protocolo RFCOMM en el canal 1.)

Emparejar el router con el dispositivo remoto.

--- Código: ---rfcomm -i hci0 bind HOLUX_M-1200 00:1B:C1:XX:XX:XX 1
--- Fin del código ---
Este comando tampoco devuelve nada.

Se puede verificar que los dispositivos están emparejados.

--- Código: ---rfcomm -i hci0
rfcomm0: 00:0A:94:XX:XX:XX -> 00:1B:C1:XX:XX:XX channel 1 connected [tty-attached]
--- Fin del código ---

Al emparejar los dispositivos con rfcomm, OpenWrt crea un fichero especial ("pipe", en la jerga linux) llamado /dev/rfcomm0. Comprobar que existe.

--- Código: ---ls /dev/rf*
/dev/rfcomm0
--- Fin del código ---

Visualizar las sentencias NMEA que el GPS envía al router.

--- Código: ---cat /dev/rfcomm0
$GPGGA, ...
$GPGSV, ...
$GPRMC, ...

--- Fin del código ---

Desemparejar los dispositivos.

--- Código: ---rfcomm -i hci0 release HOLUX_M-1200
--- Fin del código ---

Desactivar el BT del router.

--- Código: ---hciconfig hci0 down
--- Fin del código ---


3) CONECTAR UN DISPOSITIVO REMOTO AL ROUTER.
(Las pruebas las he hecho con un móvil Samsung ACE GT-5839i con Android 2.3.6)

Hacer visible el dispositivo bluetooth del router. (Por defecto está oculto).

--- Código: ---hciconfig hci0 piscan
--- Fin del código ---

Comprobar que el comando anterior ha funcionado.

--- Código: ---hciconfig -a hci0
--- Fin del código ---
La línea UP RUNNING PSCAN ISCAN confirma que el dispositivo es visible.

Puede ser que además haya que cambiarle la clase para hacerlo visible.

--- Código: ---hciconfig hci0 class 0x5a0100
--- Fin del código ---

Ahora el router es visible desde al móvil. Sin embargo, todavía no he podido emparejarlos. El móvil pide contraseña para emparejar. He probado 0000 y 1234. El router rechaza la conexión.

Ocultar el dispositivo bluetooth del router.

--- Código: ---hciconfig hci0 noscan
--- Fin del código ---

Y hasta aquí he llegado con los experimentos.

raphik:
Esta información proviene de la página (en inglés) http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html. Es para la versión 5.37, por lo que las discrepancias con la 5.30 que se instala con OpenWrt probablemente serán mínimas.

Ficheros de configuración.
Por lo que se lee, hay un fichero principal y otros tres suplementarios en la carpeta /etc/bluetooth: main.conf, input.conf, network.conf y proximity.conf
Se menciona la existencia de un fichero relacionado con el script de arranque: /etc/sysconfig/bluetooth. Lo cierto es que no está en esa ruta. El que hay en el router es /etc/config/bluetooth
Por último, hay un par de ficheros que el propio usuario puede crear en la carpeta /etc/bluetooth: rfcomm.conf y uart.conf.

Script de arranque.
Durante el arranque del router se puede hacer uso de un script que cargaría el proceso bluetoothd, un programa tipo daemon imprescindible para el funcionamiento de BT. Se trata del fichero /etc/init.d/bluetoothd.

Herramientas.
Al instalar bluez-utils, se generan en el router un conjunto de harramientas. Copio y pego.

bccmd is used to issue BlueCore commands to Cambridge Silicon Radio devices.
bluemoon is a Bluemoon configuration utility.
bluetoothctl is the interactive Bluetooth control program.
bluetoothd is the Bluetooth daemon.
btmon provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces.
ciptool is used to set up, maintain, and inspect the CIP configuration of the Bluetooth subsystem in the Linux kernel.
hciattach is used to attach a serial UART to the Bluetooth stack as HCI transport interface.
hciconfig is used to configure Bluetooth devices.
hcidump reads raw HCI data coming from and going to a Bluetooth device and prints to screen commands, events and data in a human-readable form.
hcitool is used to configure Bluetooth connections and send some special command to Bluetooth devices.
hex2hcd is used to convert a file needed by Broadcom devices to hcd (Broadcom bluetooth firmware) format.
l2ping is used to send a L2CAP echo request to the Bluetooth MAC address given in dotted hex notation.
l2test is L2CAP testing program.
rctest is used to test RFCOMM communications on the Bluetooth stack.
rfcomm is used to set up, maintain, and inspect the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.
sdptool is used to perform SDP queries on Bluetooth devices.

Tki2000:
Muy bueno!!!  >:( >:( >:(

Chincheta unas semanitas...  ;D

Pteridium:
Coincido con Tki2000: muy bueno.  >:( >:( >:(

jar229:
Impresionante  >:( >:(

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa