Estoy tratando de usar la pila BlueZ en una máquina Linux para crear un servidor GATT con características y servicios personalizados. El objetivo final es utilizar cualquier dispositivo central (p. ej., dispositivo iOS o Android) para conectarse al servidor GATT, descubrir los servicios y características, y manipular los datos en las características.
Ejemplo:
Desde el dispositivo central, debería ver el dispositivo periférico, conectarme a él y descubrir un servicio (0xFFFF) que tiene tres características (0xAAAA, 0xBBBB, 0xCCCC). Entonces debería poder leer el valor de 0xAAAA, leer y escribir en el valor de 0xBBBB y habilitar las notificaciones en 0xCCCC.
Tenga en cuenta que soy consciente de que existe una pregunta similar , pero solo explica cómo usar el periférico como anunciante. Otra duda resuelta explica como crear un servidor GATT, pero no explica como jugar con las propiedades de las caracteristicas (eg readable, notificable, etc.), o tal vez me falte algo.
Gracias de antemano.
Puede ver la práctica de ejemplo de gatt o los perfiles definidos en el directorio profile/ como alert/server.c. Básicamente, solo tienes que registrar tu servicio usando la función gatt_service_add(), siguiendo el código existente. Por ejemplo :
gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF, /* Char 1 */ GATT_OPT_CHR_UUID16, 0xAAAA, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback, /* Char 2 Define here */ ... /* Char 3 Define here */ ... GATT_OPT_INVALID); }Además, olvidé los detalles, pero para que el servidor de alertas funcione, debe habilitar el modo experimental (¿y el de mantenimiento?) durante la configuración agregando "--enable-maintainer-mode" y "--enable-experimental"
Para ejecutar, ejecute el "bluetoothd" compilado con las opciones -n y -d para depurar (también -E para habilitar servicios experimentales). Es posible que desee restablecer su adaptador nuevamente después de ejecutar bluetoothd. Y luego puede conectarse desde un dispositivo remoto usando gatttool (también con bluetoothd ejecutándose en un dispositivo remoto).
1) ir a la carpeta Bluez
2) sudo ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-systemd --enable-experimental --enable-maintainer- modo
3) sudo hacer todo
4) Anunciar paquetes conectables
# activate bluetooth sudo hciconfig hci0 up # set advertise data: "hello world" sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44 # start advertising as connectable sudo hciconfig hci0 leadv 05) parada de bluetooth del servicio sudo
6) sudo src/bluetoothd -d -n
7) Desde otra PC, escriba (Change MAC id gatt server mac)
gatttool -b gatt_server_mac --interactiveel paso 6 es por si quieres compilar plugins/gatt-example.c
si desea compilar el servidor . c desde perfil/hora o perfil /alerta (reemplace con alerta en lugar de tiempo) o cualquier otro archivo en la carpeta de perfil reemplace el paso 6
sudo src/bluetoothd --plugin=hora -n
Ahora existe otra solución con la herramienta de línea de comandos Bluetoothctl. Más detalles de esto se pueden encontrar aquí: -
BlueZ: Cómo configurar un servidor GATT desde la línea de comandos
No estoy seguro de cuándo se introdujo Bluetoothctl, pero es relativamente reciente en el momento de escribir este artículo y, por lo tanto, no existía en versiones anteriores de BlueZ. Estoy usando BlueZ v5.50 y esta es la versión con la que lo probé.