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 sistema operacional e plataforma, com uma estreita Platform Abstraction Layer (PAL). Este PAL define:

Arquitetura de portabilidade
  • Interface de alarme para cronômetro de funcionamento livre com alarme
  • Interfaces de barramento (UART, SPI) para comunicar 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 registro para entrega de mensagens de registro 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).

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

Modelo 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 de API:

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

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

Existem dois tipos de serviços de alarme, milissegundo e microssegundo . Milissegundos são necessários para uma nova plataforma de hardware. O microssegundo é opcional.

UART

Declaração de API:

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

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

Enquanto o OpenThread CLI e NCP add-ons dependem da interface UART para interagir com o lado do anfitrião, o apoio UART API é opcional. No entanto, mesmo se você não planeja 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 host
  • Substitua a implementação da API UART pelo driver USB CDC (junto com BSP) no lado do OpenThread, usando os mesmos protótipos de função

Rádio

Declaração de 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 2.4 GHz IEEE 802.15.4-2006.

Devido à sua característica de baixa potência melhorada, OpenThread requer todas as plataformas para implementar estrutura auto pendentes (transmissão indirecta) por padrão e tabela de correspondência o endereço de origem também deve ser implementado no radio.h arquivo de origem.

No entanto, se o seu novo exemplo de plataforma de hardware tiver recursos limitados, a tabela de endereço de origem pode ser definida como comprimento zero. Ver Quadro Auto Pendente para obter mais informações.

Misc / Reset

Declaração de API:

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

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

Entropia

Declaração de API:

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

A API Entropy fornece um gerador de número aleatório verdadeiro (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. Ativos de segurança afetados pelo TRNG incluem:

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

Observe que muitas plataformas já integraram um gerador de números aleatórios, expondo a API em seu pacote BSP. No caso de a plataforma de hardware de destino não suportar 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 de TRNG (uint32_t).

Quando a macro MBEDTLS_ENTROPY_HARDWARE_ALT está definido para 1 , este API também deve fornecer um método para gerar a entropia hardware usado na biblioteca mbedTLS.

Armazenamento não volátil

Declarações de API:

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

ou

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

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

Essas APIs expõem à camada superior:

  • O tamanho de armazenamento não volátil disponível usado para armazenar dados de aplicativo (por exemplo, conjunto de dados operacional ativo / pendente, parâmetros de rede atuais e credenciais de dispositivos de thread 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 do núcleo do seu exemplo de plataforma para indicar qual API a plataforma deve usar. Se definido como 1 , a API do Flash deve ser implementada. Caso contrário, a API de configurações deve ser implementada.

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

Exploração madeireira

Declaração de API:

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

A API Logging implementa a funcionalidade de registro e depuração do OpenThread, com vários níveis de saída de depuração disponíveis. Esta 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 mais detalhado é OPENTHREAD_LOG_LEVEL_DEBG , que imprime todas as linhas de informação de pacotes em bruto e troncos através da porta série ou no terminal. Escolha um nível de depuração que melhor atenda às suas necessidades.

Específico do sistema

Declaração de 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. Esta API não é chamada pela própria biblioteca OpenThread, mas pode ser útil para o 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 gerados aplicativos CLI e NCP 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.