2012-07-05 21 views
7
  • Estamos tratando de detectar un evento en C/C++.
  • Estamos utilizando Bluez en Linux como nuestra Biblioteca de Bluetooth.
  • Nuestro objetivo es ejecutar un script externo cuando se desencadena ese evento.
  • Específicamente, tenemos un auricular Motorola H730, con un botón, y estamos buscando detectar la presión de ese botón.
  • Hemos emparejado el dispositivo bluetooth (hcitool), y podemos conectarnos a él (bluez-test-audio), pero estaríamos interesados ​​en migrar ese enfoque a C/C++.
  • La salida del hcidump cuando se conecta el dispositivo y se pulsa el botón es:Bluetooth: detectar evento usando Bluez

    HCI sniffer - analizador de paquetes Bluetooth ver 2.2
    dispositivo: hci0 snap_len: 1,028 filtro: 0xFFFFFFFF

    HCI Evento: cambio de modalidad (0x14) plen 6
    estado 0x00 manejan intervalo de 0x00 21 modo 0
    modo: activo datos
    ACL: mango 21 banderas 0x02 dlen 17
    L2CAP (d): cid 0x0041 len 13 [PSM 0]
    < datos ACL: mango 21 banderas 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [PSM 0]
    < datos ACL: mango 21 banderas 0x00 dlargo 22
    L2CAP (d): cid 0x0047 len 18 [PSM 0] datos
    < ACL: mango 21 banderas 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [PSM 0]
    HCI Evento : Cantidad de paquetes completados (0x13) plen 5
    manejar 21 paquetes 1
    datos 10 ACL: mango 21 banderas 0x02 dlen 18
    L2CAP (d): cid 0x0041 len 14 [PSM 0]
    < datos ACL: mango 21 banderas 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [PSM 0]
    HCI Evento: número de paquetes completadas (0x13) plen 5
    mango 21 paquetes 1
    HCI Evento: número de paquetes completadas (0x13) plen 5
    mango 21 paquetes 1
    HCI Evento: número de Completado Paquetes (0x13) plen 5
    manejar 21 paquetes 1
    HCl Evento: Cambiar el modo (0x14) plen 6
    estado 0x00 0x02 manejan intervalo de 21 modo Modo 2048
    : Sniff

  • Hemos buscado la documentación bluetooth y no hemos tenido mucho éxito.
    ¿Cómo podemos detectar un evento bluetooth en C/C++ usando Bluez?
+0

¿Has tenido algún éxito? – Schrieveslaach

Respuesta

0

hcidump como se recogen son los registros entre el host del dispositivo y el controlador. Los eventos son los que el controlador envió al host del dispositivo y los comandos son los envíos de solicitud/respuesta al host del dispositivo.

Bluez guía de programación: http://people.csail.mit.edu/albert/bluez-intro/

1

me hizo algo similar el año pasado. El enfoque que establecí fue usar libdbus-c++ para generar objetos/clases proxy de C++ para comunicarme con bluez a través de dbus.

  • Determine las interfaces bluetooth implementadas por sus auriculares. Usé d-feet y exploré el dispositivo cuando estaba conectado. Puede controlar y leer manualmente el estado de los auriculares aquí, esto fue útil para la depuración.
  • Genera, encuentra o crea las descripciones dbus xml de las interfaces requeridas. Hice esto manualmente al traducir la especificación api del bluez api documentation a xml, pero creo que también podría crearlos mediante la introspección de dbus.
  • Uso dbusxx-xml2cpp para generar objetos proxy
  • Determinar la devolución de llamada que se llama cuando se presiona el botón
  • Integrar objetos proxy en su código según sea necesario

Usted tendrá que enlazar el código de libdbus- C++ y que lo instale también en el destino.

Puede usar los objetos proxy generados para acceder a la funcionalidad completa de los auriculares, ¡puede ser útil para mucho más que simplemente presionar un botón!

Cuestiones relacionadas