Hay otro aspecto de esto que se está perdiendo en las otras respuestas. Según la especificación Core BLE, solo se está viendo un canal de publicidad durante cada scanInterval y se gira al siguiente de los 3 canales con cada intervalo. Por lo tanto, si hay interferencia de RF en ese canal, es posible que no vea el dispositivo, incluso si tiene el scanWindow igual al scanInterval para realizar un escaneo continuo.
El dispositivo periférico BLE que hace publicidad normalmente giraría en secuencia a través de los tres canales de publicidad muy rápidamente durante cada parpadeo de tiempo. Por lo tanto, el mejor algoritmo de escaneo del dispositivo central tendría ventanas e intervalos más cortos para verificar secuencialmente cada canal de publicidad. Aparentemente, Apple usa una ventana de escaneo de 30 ms con un intervalo de escaneo de 40 ms en iOS con aplicaciones en modo de primer plano. Eso significa que cada canal de publicidad será revisado cada 40 ms. Según la especificación básica de BLE:
Cada evento publicitario se compone de una o más PDU publicitarias enviadas en
Índices de canales de publicidad utilizados. El evento publicitario se cerrará después de
Se ha enviado una PDU publicitaria en cada uno de los canales de publicidad utilizados.
índices (consulte la Sección 4.4.2.1) o el anunciante puede cerrar un evento publicitario
antes para acomodar otras funcionalidades.
Otro aspecto muy importante es hacer que el dispositivo periférico establezca un intervalo de publicidad relativamente primordial en comparación con el intervalo de exploración en el dispositivo central . Por eso Apple especifica intervalos publicitarios específicos. Si tuviera que elegir un ScanInterval de 100 ms con un scanWindow que era más pequeño, digamos 80 ms y tenía un intervalo de publicidad de 1000 ms (1 segundo), podría tener mala suerte y estar siempre publicitando durante los 20 ms cuando el dispositivo Central No estaba escaneando durante cada scanInterval. En realidad, la especificación básica de BLE agrega de 0 a 10 ms aleatorios al intervalo publicitario que ayuda a evitar un bloqueo completo, pero en realidad se hace más para evitar que la publicidad de múltiples dispositivos casi exactamente al mismo tiempo interfiera entre ellos para siempre.
Para todos los eventos publicitarios no dirigidos o publicidad dirigida conectable
eventos utilizados en un modo de ciclo de trabajo bajo, el tiempo entre el comienzo de dos
consecutivo
los eventos publicitarios (T_advEvent) se calculan como sigue para cada uno
evento publicitario:
T_advEvent = advInterval + advDelay
El advInterval será un múltiplo entero de 0.625 ms en el rango de 20 ms
a 10.24 s. Si el tipo de evento publicitario es escaneable no direccionado
evento
tipo o un tipo de evento no direccionable no conectable, el advInterval no será
Menos de 100 ms. Si el tipo de evento publicitario es un conectable no dirigido.
tipo de evento o tipo de evento dirigido conectable utilizado en un modo de ciclo de trabajo bajo,
el advInterval puede ser de 20 ms o más.
advDelay es un valor pseudoaleatorio con un rango de 0 ms a 10 ms generado
por la capa de enlace para cada evento publicitario.
Piensa en tener dos frecuencias cercanas y en cómo obtienes una frecuencia de latido de su diferencia. Eso es esencialmente lo que puede suceder entre el intervalo de exploración y el intervalo de publicidad. Apple hizo un trabajo decente con sus configuraciones para esto, por lo que seguir sus estándares no solo funcionaría bien para iOS sino también para Android. El modo de primer plano de Apple de 30 ms scanWindow con 40 ms scanInterval significa que, para un intervalo de publicidad base de 1022.5 ms, verá el dispositivo dentro de 1 segundo aproximadamente 3/4 del tiempo y siempre dentro de 2 segundos, suponiendo que no haya interferencia de RF que oculte el paquete de publicidad. . En el modo de fondo con un scanWindow de 30 ms y un scanInterval de 300 ms, el tiempo medio se convierte en 5 segundos y el máximo habitual en 19 segundos, aunque con muy mala suerte de los cambios aleatorios podría ser un poco más largo.
enlace
Los intervalos de publicidad periférica recomendados por Apple son 152.5, 211.25, 318.75, 417.5, 546.25, 760, 852.5, 1022.5, 1285 ms.