Реализация API уровня абстракции платформы

Посмотреть исходный код на GitHub

OpenThread не зависит от ОС и платформы и имеет узкий уровень абстракции платформы (PAL). Этот PAL определяет:

Перенос архитектуры
  • Интерфейс сигнализации для автономного таймера с сигнализацией
  • Интерфейсы шины (UART, SPI) для передачи сообщений CLI и Spinel
  • Радиоинтерфейс для связи IEEE 802.15.4-2006
  • Процедуры инициализации, специфичные для GCC
  • Энтропия для генерации истинных случайных чисел
  • Сервис настроек для энергонезависимого хранилища конфигурации
  • Интерфейс ведения журнала для доставки сообщений журнала OpenThread
  • Системные процедуры инициализации

Все API-интерфейсы должны быть реализованы на основе базового пакета поддержки сборки (BSP) уровня аппаратной абстракции (HAL).

Файлы API следует разместить в следующих каталогах:

Тип Каталог
Реализация PAL для конкретной платформы /openthread/examples/platforms/ platform-name
Заголовочные файлы - API энергонезависимого хранилища /openthread/examples/platforms/utils
Все остальные файлы заголовков /openthread/include/openthread/platform
HAL BSP /openthread/third_party/ platform-name

Тревога

Декларация API:

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

API аварийной сигнализации предоставляет основные службы синхронизации и аварийной сигнализации для реализации таймера верхнего уровня.

Есть два типа обслуживания сигнализации, миллисекунды и микросекунды . Для новой аппаратной платформы требуется миллисекунда. Микросекунда не является обязательной.

UART

Декларация API:

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

UART API реализует фундаментальную связь последовательного порта через интерфейс UART.

В то время как OpenThread CLI и NCP дополнение зависят от интерфейса UART , чтобы взаимодействовать с принимающей стороной, поддержка UART API не является обязательной. Однако, даже если вы не планируете использовать эти надстройки на примере своей новой аппаратной платформы, мы настоятельно рекомендуем вам добавить поддержку по нескольким причинам:

  • Интерфейс командной строки полезен для проверки правильности работы порта.
  • Инструмент Harness Automation Tool использует интерфейс UART для управления OpenThread в целях тестирования и сертификации.

Если целевая аппаратная платформа поддерживает модуль USB CDC, а не UART, убедитесь, что:

  • Установите правильный драйвер USB CDC на стороне хоста
  • Замените реализацию UART API драйвером USB CDC (вместе с BSP) на стороне OpenThread, используя те же прототипы функций.

Радио

Декларация API:

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

Radio API определяет все необходимые функции, вызываемые верхним MAC-уровнем IEEE 802.15.4. Радиочип должен полностью соответствовать спецификации 2,4 ГГц IEEE 802.15.4-2006.

Благодаря расширенной функции малой мощности, OpenThread требует всех платформ для осуществления автоматического кадра в ожидании (косвенная передача) по умолчанию, и таблица матча адреса источника также должна быть реализована в radio.h исходного файла.

Однако, если ваш новый пример аппаратной платформы ограничен в ресурсах, таблицу адресов источника можно определить как нулевую длину. См Авто кадров Pending для получения дополнительной информации.

Разное / Сброс

Декларация API:

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

API Misc / Reset предоставляет метод для сброса программного обеспечения на микросхеме и запроса причины последнего сброса.

Энтропия

Декларация API:

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

Entropy API предоставляет истинный генератор случайных чисел (TRNG) для верхнего уровня, который используется для поддержки активов безопасности для всей сети OpenThread. API должен гарантировать создание нового случайного числа для каждого вызова функции. К активам безопасности, затронутым TRNG, относятся:

  • Одноразовый номер AES CCM
  • Случайный задержанный джиттер
  • Расширенный адрес устройств
  • Начальный случайный период в таймере тонкой струйки
  • Идентификаторы токена / сообщения CoAP

Обратите внимание, что многие платформы уже интегрировали генератор случайных чисел, предоставляя API в своем пакете BSP. В случае, если целевая аппаратная платформа не поддерживает TRNG, рассмотрите возможность использования выборки модуля АЦП для генерации случайного числа фиксированной длины. При необходимости выполните выборку нескольких итераций для соответствия требованиям TRNG (uint32_t).

Когда макро MBEDTLS_ENTROPY_HARDWARE_ALT установлен в 1 , этот API , должен также обеспечить способ для генерации аппаратных средств энтропии , используемой в библиотеке mbedTLS.

Энергонезависимая память

Декларации API:

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

или

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

Требование к энергонезависимому хранилищу может быть выполнено путем реализации одного из двух API, перечисленных выше. Flash API реализует драйвер флэш-памяти, а API настроек предоставляет функции для реализации базовой флэш-операции на верхнем уровне.

Эти API открывают доступ к верхнему уровню:

  • Доступный размер энергонезависимого хранилища, используемого для хранения данных приложения (например, активного / ожидающего набора рабочих данных, текущих сетевых параметров и учетных данных потоковых устройств для повторного подключения после сброса)
  • Операции чтения, записи, стирания и запроса состояния флэш-памяти

Использование OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE в вашей платформы пример в основной конфигурационный файл , чтобы указать , какие API платформы следует использовать. Если установлено значение 1 , то Flash API должны быть реализованы. В противном случае необходимо реализовать API настроек.

Этот флаг должен быть установлен в вашем /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h - /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h файл.

логирование

Декларация API:

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

API ведения журналов реализует функции ведения журнала и отладки OpenThread с несколькими доступными уровнями вывода отладки. Этот API не является обязательным, если вы не планируете использовать ведение журнала OpenThread на примере новой аппаратной платформы.

Самый высокий и самый подробный уровень OPENTHREAD_LOG_LEVEL_DEBG , который печатает всю необработанную информацию пакета и журналы линию через последовательный порт или терминал. Выберите уровень отладки, который лучше всего соответствует вашим потребностям.

Специфическая для системы

Декларация API:

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

Специфичный для системы API в первую очередь обеспечивает операции инициализации и деинициализации для выбранной аппаратной платформы. Этот API не вызывается самой библиотекой OpenThread, но может быть полезен для вашей системы / ОСРВ. Вы также можете реализовать инициализацию других модулей (например, UART, Radio, Random, Misc / Reset) в этом исходном файле.

Реализация этого API зависит от вашего варианта использования. Если вы хотите использовать сгенерированные приложения CLI и NCP для примера платформы , вы должны использовать этот API. В противном случае можно реализовать любой API для интеграции примеров драйверов платформы в вашу систему / ОСРВ.