Aclaración sobre la API de BlueNRG-MS

Estoy construyendo un dispositivo periférico BLE con el chip ST BlueNRG-MS y necesito implementar algunas características en las que no estoy seguro de cuál es el camino correcto. Este es mi primer proyecto BLE, así que tal vez alguien con un poco más de experiencia pueda arrojar algo de luz sobre el tema.

1. Permita que los dispositivos "conocidos" se conecten automáticamente
Si bien el emparejamiento solo debe permitirse en un modo de dispositivo específico, un dispositivo ya emparejado debería poder reconectarse automáticamente.

Mi idea que tengo es que el dispositivo tiene que estar discoverabletodo el tiempo, y almaceno la dirección de los 10 últimos dispositivos emparejados. Entonces, cuando se conecta un nuevo dispositivo, verifico si su dirección está almacenada en esta lista y, si no, rechazo la conexión. O si está en modo de emparejamiento, agrego el nuevo dispositivo a la lista.

Pregunta: ¿En qué punto del proceso de conexión puedo hacer eso? Supongo que solo obtengo el EVT_LE_CONN_COMPLETEevento en la user_notifydevolución de llamada. ¿En qué momento se establece la conexión con el dispositivo central? Si no llamo GAP_ConnectionComplete_CB()si la dirección no está en la lista, ¿funcionaría? Parece que el dispositivo central aún puede ver todos los servicios disponibles, pero simplemente no puede leerlos. Pero después de eso, la conexión BLE parece rota y el periférico ya no es visible.

2. Leer el nombre del dispositivo central
Además de la dirección del teléfono, también me gustaría almacenar un nombre de dispositivo legible por humanos. ¿Cómo puedo hacer eso? Supongo que tengo que usar algún comando GATT para leer el nombre del dispositivo, pero ¿cómo puedo saber lo que tengo que leer? ¿El nombre del dispositivo es siempre 0x2A00?

3. Intervalo de actualización automática de características

¿Es posible usar la API BlueNRG para tener una transmisión automática de caracteres? Actualmente hago esto manualmente llamando a la función

aci_gatt_update_char_value()

para la característica correspondiente, pero eso es un poco engorroso. ¿La pila proporciona un enfoque automático para este problema?

No parece ser un chip muy utilizado...

Respuestas (1)

Escribiré aquí lo que he descubierto hasta ahora, tal vez alguien pueda usarlo algún día...

  1. El problema con el nuevo sistema operativo de los teléfonos móviles es que utilizan direcciones resolubles aleatorias, por lo que no puede simplemente verificar la dirección recibida. En su lugar, la dirección debe resolverse utilizando la IRK (clave de resolución de identidad) y luego agregar el dispositivo a la lista blanca.

  2. La respuesta a la pregunta es "sí", la característica del nombre del dispositivo siempre es uuid 0x2a00

  3. Usar el aci_gatt_update_char_value()es la forma correcta de cambiar/transmitir una característica al dispositivo central conectado.