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

Veja o código no GitHub

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

Arquitetura de portabilidade
  • Interface de alarme para timer de corrida livre com alarme
  • Interfaces de barramento (UART, SPI) para comunicar mensagens da CLI e do Spinel
  • Interface de rádio para comunicação IEEE 802.15.4-2006
  • Rotinas de inicialização específicas do GCC
  • Entropia pela verdadeira geração de números aleatórios
  • Serviço de configurações para armazenamento de configurações não voláteis
  • Interface de registro para entregar mensagens de registro do OpenThread
  • Rotinas de inicialização específicas do sistema

Todas as APIs precisam ser implementadas com base no Pacote de suporte de compilação (BSP, na sigla em inglês) da camada de abstração de hardware (HAL).

Os arquivos de API precisam ser colocados nos seguintes diretórios:

Tipo Diretório
Implementação de 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 principais /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 Alarm oferece serviços fundamentais de tempo e alarme para a implementação do timer de camada superior.

Há dois tipos de serviço de alarme, milissegundo e microssegundo. Um milissegundo é necessário para uma nova plataforma de hardware. O microssegundo é opcional.

UART

Declaração da API:

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

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

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

  • A CLI é útil para confirmar que a porta funciona corretamente
  • A ferramenta Harness Automation usa a interface UART para controlar o OpenThread para fins de testes e certificação.

Se a plataforma de hardware de destino for compatível com um módulo CDC USB em vez de UART, verifique se:

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

Rádio

Declaração da API:

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

A API Radio define todas as funções necessárias chamadas pela camada MAC IEEE 802.15.4. O chip de rádio precisa estar totalmente em conformidade com a especificação IEEE 802.15.4-2006 de 2,4 GHz.

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

No entanto, se o novo exemplo de plataforma de hardware tiver recursos limitados, a tabela de endereços de origem poderá ser definida como um comprimento zero. Consulte Frames automáticos pendentes para ver mais informações.

Diversos/redefinir

Declaração da API:

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

A API Misc/Reset oferece 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 oferece um verdadeiro gerador de números aleatórios (TRNG, na sigla em inglês) para a camada superior, que é usado para manter recursos de segurança para toda a rede OpenThread. A API precisa garantir que um novo número aleatório seja gerado para cada chamada de função. Os recursos de segurança afetados pelo TRNG incluem:

  • Valor de uso único do AES CCM
  • Instabilidade aleatória atrasada
  • Dispositivos estendidos
  • O período aleatório inicial no timer do fluxo
  • Códigos de token/mensagem CoAP

Muitas plataformas já integraram um gerador de número aleatório, expondo a API no pacote BSP. Caso a plataforma de hardware de destino não seja compatível com TRNG, considere usar a amostragem de módulos do ADC para gerar um número aleatório de comprimento fixo. Amostra em várias iterações, se necessário, para atender aos requisitos de TRNG (uint32_t).

Quando a macro MBEDTLS_ENTROPY_HARDWARE_ALT está definida como 1, essa API também precisa 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

Para atender ao requisito de armazenamento não volátil, implemente uma das duas APIs listadas acima. A API Flash implementa um driver de armazenamento em Flash, enquanto a API Settings fornece funções para uma implementação de operação de flash substancial na camada superior.

Estas APIs são expostas à camada superior:

  • O tamanho de armazenamento não volátil disponível para armazenar dados de aplicativos (por exemplo, conjuntos de dados operacionais ativos/pendentes, parâmetros de rede atuais e dispositivos de linha de execução; credenciais para reanexação após a redefinição)
  • Ler, gravar, limpar e consultar operações de status do flash

Use OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE no arquivo de configuração principal do exemplo da plataforma para indicar qual API a plataforma precisa usar. Se definida como 1, a API Flash precisará ser implementada. Caso contrário, a API Settings precisará ser implementada.

Essa sinalização precisa ser definida no arquivo /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h.

Logging

Declaração da API:

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

A API Logging implementa a funcionalidade de geração de registros 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 usar a geração de registros do OpenThread'no exemplo da nova plataforma de hardware.

O nível mais alto e detalhado é OPENTHREAD_LOG_LEVEL_DEBG, que imprime todas as informações brutas de pacote e registra linhas na porta serial ou no terminal. Escolha o nível de depuração mais adequado às suas necessidades.

Específico do sistema

Declaração da API:

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

A API específica do sistema oferece principalmente operações de inicialização e desinicialização para a plataforma de hardware selecionada. Essa API não é chamada pela 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) nesse arquivo de origem.

A implementação dessa API depende do seu caso de uso. Se você quiser usar os aplicativos CLI e NCP gerados em uma plataforma de exemplo, implemente essa API. Caso contrário, qualquer API poderá ser implementada para integrar os drivers de plataforma de exemplo ao seu sistema/RTOS.