Detecção de jam

Ver código-fonte no GitHub

Para fornecer um mecanismo configurável de detecção de bloqueio de sinal em qualquer nó OpenThread, ative o recurso de detecção de bloqueio.

Esse recurso é útil para certificações de dispositivos que exigem a capacidade de detectar interferência de sinal em um canal específico. Ele pode ser configurado para atender aos requisitos de cada tipo de certificação.

Como funciona

A detecção de interferência monitora o RSSI (indicador de intensidade do sinal recebido) de um nó durante períodos especificados para determinar se o canal foi interferido.

Quando a detecção de congestionamento está ativada:

  1. O estado de detecção de congestionamento está definido como false.
  2. O nó faz amostragem do RSSI várias vezes em cada intervalo de um segundo.
  3. Se o RSSI em todo esse intervalo de um segundo permanecer acima do limite de RSSI configurado para cada amostra, esse intervalo de um segundo será considerado congestionado.
  4. Se um número agregado de intervalos de um segundo bloqueados for maior ou igual a o número agregado de segundos de Período ocupado configurados nos segundos de Janela de detecção configurados anteriores a qualquer momento, o estado de detecção de bloqueio nesse momento será definido como true.
  5. Se um número agregado de intervalos de um segundo bloqueados for menor do que o número agregado de segundos de período ocupado configurados nos segundos de janela de detecção anteriores em qualquer momento, o estado de detecção de bloqueio nesse momento será definido como false.

Bitmap do histórico

Na API OpenThread, um bitmap dos 63 segundos anteriores está disponível para recuperação. Esse bitmap indica se o RSSI cruzou o limite configurado nos últimos 63 segundos.

Por exemplo, você pode extrair o seguinte bitmap:

0xC248068C416E7FF0

A conversão para binário produz todas as instâncias em que o RSSI ficou acima do limite configurado durante os 63 segundos anteriores:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

Se a janela de detecção for definida como 16 segundos e o período ocupado como 8 segundos, o estado de detecção de interferência se tornará true aos 51 segundos, já que essa é a primeira instância em que o limite de RSSI foi excedido por pelo menos 8 segundos inteiros nos 16 segundos anteriores. Neste exemplo, o estado de detecção de bloqueio permanece true pelos próximos 13 segundos.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

Esse bitmap pode ser representado pelo gráfico a seguir se -45 dBm for o limite de RSSI configurado:

Detecção de bloqueio de OT

Como ativar

Esse recurso fica desativado por padrão.

Por definição

Para ativar a detecção de bloqueio, defina OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE como 1 no arquivo openthread/src/core/config/openthread-core-default-config.h antes de criar o OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

Por opção

Como alternativa, use a opção de build -DOT_JAM_DETECTION=ON ao criar o OpenThread:

./script/build -DOT_JAM_DETECTION=ON

Parâmetros

Os parâmetros de detecção de bloqueio só podem ser configurados pela API OpenThread ou pelo protocolo Spinel. Os valores padrão são aplicados se o recurso for ativado sem configuração posterior.

Personalize esse recurso usando os seguintes parâmetros:

Parâmetros
Limite de RSSI
Valor padrão
0 dBm
Descrição
Especifica o nível de RSSI limite em dBm acima do qual o canal é considerado congestionado.
Janela de detecção
Valor padrão
63 segundos
Descrição
Especifica a janela em segundos em que a verificação de bloqueio de sinal será feita. Intervalo: 1 a 63.
Período de alta demanda
Valor padrão
63 segundos
Descrição
Especifica o número de segundos agregados na janela de detecção em que o RSSI precisa estar acima do limite para acionar a detecção de interferência. Precisa ser menor que a janela de detecção. Intervalo: 1 a 63.

API

OpenThread

Use a API Jam Detection para gerenciar o recurso de detecção de interferências diretamente no aplicativo OpenThread. A API OpenThread oferece as seguintes funcionalidades:

  • Iniciar e parar o recurso
  • Ver o estado de detecção de congestionamento
  • Gerenciar todos os parâmetros
  • Recuperar o bitmap do histórico de detecção de congestionamento atual
  • Registrar uma função de callback para quando um congestionamento for detectado

Espinélio

O protocolo Spinel permite que um dispositivo host se comunique diretamente com um NCP. Esse protocolo expõe propriedades de detecção de bloqueio em openthread/src/lib/spinel/spinel.h que oferecem a seguinte funcionalidade:

  • Iniciar e parar o recurso
  • Ver o estado de detecção de congestionamento
  • Gerenciar todos os parâmetros
  • Recuperar o bitmap do histórico de detecção de congestionamento atual

CLI

OpenThread

Não há comandos da CLI do OpenThread relacionados a esse recurso.