Android 6.0 Marshmallow BLE: Parámetros de conexión

La gestión de los parámetros de conexión Bluetooth Low Energy parece haber cambiado en Android 6.

Tengo un dispositivo periférico BLE que necesita usar algunos parámetros de conexión específicos (en particular, el intervalo de conexión), y quiero usar el intervalo de conexión mínimo permitido por la especificación BLE (es decir, 7,5ms).

El SDK de Android no permite elegirlo desde el lado BLE GAP Central (el teléfono inteligente), por lo que la forma correcta de hacerlo es hacer que mi dispositivo periférico GAP envíe unL2CAP Connection Parameter Update Request después de que se realice la conexión GAP.

Los parámetros que solicito son:

intervalo de conexión min: 7,5msintervalo de conexión máx .: 7,5 mslatencia esclava: 0tiempo de espera de supervisión: 2000 ms

Esto funcionó como se esperaba con todos los dispositivos Android que he estado probando, de 4.3 a 5.x: después de enviar elL2CAP Connection Parameter Update Requestmi dispositivo recibe unL2CAP Connection Parameter Update Response con 0x0000 (aceptado), seguido de unLE Connection Update Complete event donde puedo ver que los parámetros de conexión solicitados se han tenido muy en cuenta.

Ahora, con una tableta Nexus 9 o con 2 dispositivos Nexus 5 diferentes, todos con Android 6.0.1, puedo ver que elL2CAP Connection Parameter Update Request siempre se rechaza (recibo unL2CAP Connection Parameter Update Response con 0x0001 (rechazado)). Entonces recibo unLE Connection Update Complete event donde puedo ver que los parámetros de conexión solicitados NO se han tenido en cuenta.

He intentado esto con 2 implementaciones diferentes en el lado periférico (una con BlueNRG de ST Microelectronics, otra con nRF52 de Nordic Semiconductor), ambas con exactamente el mismo resultado.

Luego, después de más pruebas: probé diferentes conjuntos de parámetros, cambiando el intervalo de conexión max (mantuve otros parámetros iguales). Aquí está lo que encontré:

con intervalo de conexión máx = 18,75 ms, se aceptó la solicitud de actualización con el intervalo establecido en 18,75 mscon intervalo de conexión máx = 17.50 ms, se aceptó la solicitud de actualización con el intervalo establecido en 15.00 mscon intervalo de conexión máx = 15.00ms, la solicitud de actualización fue aceptada con el intervalo establecido en 15.00mscon intervalo de conexión máx = 13.75 ms, se aceptó la solicitud de actualización con el intervalo establecido en 11.25 mscon intervalo de conexión máx = 11.25 ms, la solicitud de actualización se aceptó con el intervalo establecido en 11.25 mscon cualquier otro valor máximo de intervalo de conexión por debajo de 11.25 ms, me rechazan.

Entonces, la observación es que algo ha cambiado claramente con la forma en que la pila BLE de Android 6 maneja los parámetros de conexión. Pero no parece haber ningún tipo de información o documentación para confirmarlo.

Mis observaciones llevan a la conclusión de que el intervalo de conexión mínimo permitido ahora es de 11.25 ms (que en realidad se ajusta a mis necesidades) en lugar de 7.5 ms en versiones anteriores de Android. Pero habiéndolo encontrado empíricamente, me gustaría estar seguro de que no me faltan otras restricciones / reglas o si ese mínimo no sería dinámico, dependiendo, por ejemplo, del nivel de batería actual ...

Lo que sería genial sería tener el equivalente dePautas de diseño de Bluetooth de Apple (cf. §3.6) para dejar en claro cómo un periférico LE debe tratar este tema.

¿Alguien tiene el mismo problema o conoce alguna información más útil de Google?

Respuestas a la pregunta(4)

Su respuesta a la pregunta