O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementar APIs de camada de abstração de plataforma

Ver fonte no GitHub

OpenThread é independente de SO e plataforma, com uma estreita camada de abstração de plataforma (PAL). Este PAL define:

Arquitetura de portabilidade
  • Interface de alarme para temporizador de funcionamento livre com alarme
  • Interfaces de barramento (UART, SPI) para comunicação de mensagens CLI e Spinel
  • Interface de rádio para comunicação IEEE 802.15.4-2006
  • Rotinas de inicialização específicas do GCC
  • Entropia para geração de números aleatórios verdadeiros
  • Serviço de configurações para armazenamento de configuração não volátil
  • Interface de log para entrega de mensagens de log do OpenThread
  • Rotinas de inicialização específicas do sistema

Todas as APIs devem ser implementadas com base no pacote de suporte de compilação (BSP) da camada de abstração de hardware (HAL) subjacente.

Os arquivos da API devem ser colocados nos seguintes diretórios:

Tipo Diretório
Implementação PAL específica da plataforma /openthread/examples/platforms/ platform-name
Arquivos de cabeçalho — API de armazenamento não volátil /openthread/examples/platforms/utils
Todos os outros arquivos de cabeçalho /openthread/include/openthread/platform
HAL BSP /openthread/third_party/ platform-name

Alarme

Declaração da API:

/openthread/include/openthread/platform/alarm-milli.h

A API de alarme fornece serviços fundamentais de temporização e alarme para a implementação do temporizador da camada superior.

Existem dois tipos de serviço de alarme, milissegundos e microssegundos . Milissegundos são necessários para uma nova plataforma de hardware. Microssegundo é opcional.

UART

Declaração da API:

/openthread/examples/platforms/utils/uart.h

A API UART implementa a comunicação de porta serial fundamental por meio da interface UART.

Embora os complementos OpenThread CLI e NCP dependam da interface UART para interagir com o lado do host, o suporte à API UART é opcional. No entanto, mesmo que você não planeje usar esses complementos em seu novo exemplo de plataforma de hardware, é altamente recomendável adicionar suporte por alguns motivos:

  • A CLI é útil para validar se a porta funciona corretamente
  • A Harness Automation Tool usa a interface UART para controlar o OpenThread para fins de teste e certificação

Se a plataforma de hardware de destino suportar um módulo USB CDC em vez de UART, certifique-se de:

  • Instale o driver USB CDC correto no lado do host
  • Substitua a implementação da API UART pelo driver USB CDC (junto com o BSP) no lado OpenThread, usando os mesmos protótipos de função

Rádio

Declaração da API:

/openthread/include/openthread/platform/radio.h

A API de rádio define todas as funções necessárias chamadas pela camada MAC IEEE 802.15.4 superior. O chip de rádio deve ser totalmente compatível com a especificação IEEE 802.15.4-2006 de 2,4 GHz.

Devido ao seu recurso de baixo consumo de energia aprimorado, o OpenThread exige que todas as plataformas implementem o quadro automático pendente (transmissão indireta) por padrão, e a tabela de correspondência de endereço de origem também deve ser implementada no arquivo de origem radio.h .

No entanto, se o seu novo exemplo de plataforma de hardware tiver recursos limitados, a tabela de endereços de origem poderá ser definida como comprimento zero. Consulte Quadro automático pendente para obter mais informações.

Diversos/Redefinir

Declaração da API:

/openthread/include/openthread/platform/misc.h

A API Misc/Reset fornece um método para redefinir o software no chip e consultar o motivo da última redefinição.

Entropia

Declaração da API:

/openthread/include/openthread/platform/entropy.h

A API Entropy fornece um verdadeiro gerador de números aleatórios (TRNG) para a camada superior, que é usado para manter ativos de segurança para toda a rede OpenThread. A API deve garantir que um novo número aleatório seja gerado para cada chamada de função. Os ativos de segurança afetados pelo TRNG incluem:

  • AES CCM nonce
  • Jitter atrasado aleatório
  • Endereço estendido dos dispositivos
  • O período aleatório inicial no temporizador trickle
  • CoAP token/IDs de mensagem

Observe que muitas plataformas já integraram um gerador de números aleatórios, expondo a API em seu pacote BSP. Caso a plataforma de hardware de destino não suporte TRNG, considere aproveitar a amostragem do módulo ADC para gerar um número aleatório de comprimento fixo. Faça a amostragem em várias iterações, se necessário, para atender aos requisitos do TRNG (uint32_t).

Quando a macro MBEDTLS_ENTROPY_HARDWARE_ALT é definida como 1 , essa API também deve fornecer um método para gerar a entropia de hardware usada na biblioteca mbedTLS.

Armazenamento não volátil

Declarações da API:

/openthread/include/openthread/platform/flash.h

ou

/openthread/include/openthread/platform/settings.h

O requisito de armazenamento não volátil pode ser atendido implementando uma das duas APIs listadas acima. A API Flash implementa um driver de armazenamento flash, enquanto a API Configurações fornece funções para uma implementação de operação flash subjacente para a camada superior.

Essas APIs expõem à camada superior:

  • O tamanho de armazenamento não volátil disponível usado para armazenar dados do aplicativo (por exemplo, conjunto de dados operacional ativo/pendente, parâmetros de rede atuais e credenciais de dispositivos de encadeamento para reconexão após redefinição)
  • Ler, gravar, apagar e consultar operações de status do flash

Use OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE no arquivo de configuração principal do seu exemplo de plataforma para indicar qual API a plataforma deve usar. Se definido como 1 , a API Flash deve ser implementada. Caso contrário, a API de configurações deve ser implementada.

Este sinalizador deve ser definido em seu /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h .

Exploração madeireira

Declaração da API:

/openthread/include/openthread/platform/logging.h

A API Logging implementa a funcionalidade de log e depuração do OpenThread, com vários níveis de saída de depuração disponíveis. Essa API é opcional se você não planeja utilizar o log do OpenThread em seu novo exemplo de plataforma de hardware.

O nível mais alto e detalhado é OPENTHREAD_LOG_LEVEL_DEBG , que imprime todas as informações do pacote bruto e registra as linhas através da porta serial ou no terminal. Escolha um nível de depuração que melhor atenda às suas necessidades.

Específico do sistema

Declaração da API:

/openthread/examples/platforms/openthread-system.h

A API específica do sistema fornece principalmente operações de inicialização e desinicialização para a plataforma de hardware selecionada. Essa API não é chamada pela própria biblioteca OpenThread, mas pode ser útil para seu sistema/RTOS. Você também pode implementar a inicialização de outros módulos (por exemplo, UART, Radio, Random, Misc/Reset) neste arquivo de origem.

A implementação desta API depende do seu caso de uso. Se você deseja usar os aplicativos CLI e NCP gerados para uma plataforma de exemplo , você deve implementar esta API. Caso contrário, qualquer API pode ser implementada para integrar os drivers de plataforma de exemplo em seu sistema/RTOS.