Zaimplementuj interfejsy API abstrakcji platformy

Wyświetl źródło na GitHubie

OpenThread to rozwiązanie niezależne od systemu operacyjnego i platformy, z wąską warstwą abstrakcji platformy (PAL). Ten kod PAL definiuje:

Architektura przenoszenia
  • Interfejs alarmu z wolno działających minutnikiem i alarmem
  • Interfejsy autobusowe (UART, SPI) do komunikacji z wierszami poleceń i wiadomościami Spinel
  • Interfejs komunikacji z IEEE 802.15.4-2006
  • Procedury inicjowania specyficzne dla GCC
  • Entropia do prawdziwego generowania liczb losowych
  • Usługa ustawień pamięci nieulotnej
  • Interfejs logowania do obsługi komunikatów logu OpenThread
  • Rutyny inicjowania właściwe dla systemu

Wszystkie interfejsy API powinny być wdrożone w oparciu o bazowy pakiet HSP (sprzętu warstwowego)

Pliki API powinny znajdować się w tych katalogach:

Typ Katalog
Implementacja PAL dla poszczególnych platform /openthread/examples/platforms/platform-name
Pliki nagłówków – nieulotny interfejs API /openthread/examples/platforms/utils
Wszystkie inne pliki nagłówka /openthread/include/openthread/platform
HAL BSP /openthread/third_party/platform-name

Alarm

Deklaracja interfejsu API:

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

Interfejs Alarm API udostępnia funkcje podstawowych pomiarów czasu i alarmów do wdrożenia licznika czasu w górnej warstwie.

Dostępne są 2 typy alarmów: milisekunda i mikrosekunda. W przypadku nowej platformy sprzętowej wymagany jest milisekunda. Mikrosekunda jest opcjonalna.

UART

Deklaracja interfejsu API:

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

Interfejs UART API implementuje podstawową komunikację portów szeregowych przez interfejs UART.

Dodatki Thread API i NCP zależą od interfejsu UART w zakresie interakcji z hostem, ale obsługa interfejsu UART API jest opcjonalna. Jednak nawet jeśli nie zamierzasz używać tych dodatków na nowej platformie sprzętowej, zalecamy dodanie ich z kilku powodów:

  • Interfejs wiersza poleceń jest przydatny do sprawdzania, czy port działa prawidłowo
  • Narzędzie do automatyzacji interfejsu Harness wykorzystuje interfejs UART do kontrolowania OpenThread do celów testowych i certyfikacji

Jeśli docelowa platforma sprzętowa obsługuje moduł CDC USB, a nie UART:

  • Zainstaluj odpowiedni sterownik USB CDC po stronie hosta
  • Zastąp implementację interfejsu UART API sterownikiem USB CDC (wraz z BSP) po stronie OpenThread, korzystając z tych samych prototypów funkcji.

Radio

Deklaracja interfejsu API:

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

Interfejs Radio API definiuje wszystkie niezbędne funkcje wywoływane przez górną warstwę MAC IEEE 802.15.4. Element radiowy musi być w pełni zgodny ze specyfikacją 2.4 GHz IEEE 802.15.4-2006.

Ze względu na udoskonaloną funkcję niskiego poboru energii OpenThread wymaga, aby wszystkie platformy domyślnie stosowały automatyczną ramkę (transmisję pośrednią), a tabelę odpowiedników adresów źródłowych należy też zaimplementować w pliku źródłowym radio.h.

Jeśli jednak nowa przykładowa platforma sprzętowa ma ograniczoną liczbę zasobów, tabelę adresów źródłowych można zdefiniować jako zerową długość. Więcej informacji znajdziesz w sekcji Oczekująca automatyczna ramka.

Różne/resetowane

Deklaracja interfejsu API:

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

Misc/Reset API udostępnia metodę resetowania oprogramowania w układzie scalonym i wysyłania zapytań o powód ostatniego resetowania.

Entropia

Deklaracja interfejsu API:

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

Interfejs Entropy API udostępnia prawdziwy generator liczb losowych (TRNG) dla górnej warstwy, który służy do utrzymywania zasobów zabezpieczeń w całej sieci OpenThread. Interfejs API powinien generować nowy losowy numer dla każdego wywołania funkcji. Komponenty z zabezpieczeniami TRNG:

  • Identyfikator jednorazowy CES AES
  • Losowe zakłócenia
  • Rozszerzony adres urządzeń
  • Początkowy losowy okres w liczniku czasu
  • Identyfikator tokena/wiadomości CoAP

Pamiętaj, że wiele platform zintegrowało generator liczb losowych, udostępniając interfejs API w pakiecie BSP. Jeśli docelowa platforma sprzętowa nie obsługuje TRNG, możesz użyć próbkowania modułu ADC, aby wygenerować losową liczbę o stałej długości. Jeśli musisz spełniać wymagania TRNG, próbuj w wielu iteracjach (uint32_t).

Jeśli makro MBEDTLS_ENTROPY_HARDWARE_ALT jest ustawione na 1, ten interfejs API powinien też udostępniać metodę generowania entropy sprzętowej używanej w bibliotece mbedTLS.

Pamięć nieulotna

Deklaracje interfejsu API:

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

lub

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

Wymagania dotyczące pamięci nieulotnej można spełnić, implementując jeden z dwóch interfejsów API wymienionych powyżej. Interfejs Flash API ma zainstalowany sterownik pamięci flash, natomiast interfejs API ustawień udostępnia w górnej warstwie funkcje bazowej operacji Flash.

Te interfejsy API ujawniają górną warstwę:

  • Rozmiar pamięci nieulotnej służący do przechowywania danych aplikacji (np. aktywny/oczekujący zbiór danych operacyjnych, bieżące parametry sieci i dane logowania urządzeń do wątków po zresetowaniu)
  • Odczytywanie, zapisywanie i usuwanie zapytań o stan Flash

Użyj OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE w podstawowym pliku konfiguracyjnym przykładowej platformy, aby wskazać interfejs API, którego ma używać platforma. Jeśli jest ustawiona wartość 1, trzeba wdrożyć interfejs Flash API. W przeciwnym razie należy zaimplementować interfejs Settings API.

Ta flaga musi być ustawiona w pliku /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h.

Logowanie

Deklaracja interfejsu API:

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

Interfejs Logging API implementuje funkcję logowania i debugowania w OpenThread, mając do dyspozycji wiele poziomów danych wyjściowych debugowania. Ten interfejs API jest opcjonalny, jeśli nie planujesz używać logowania OpenThread na nowej platformie sprzętowej.

Najwyższy i najbardziej szczegółowy poziom to OPENTHREAD_LOG_LEVEL_DEBG, który drukuje nieprzetworzone dane pakietów i rejestruje wiersze przez port szeregowy lub na terminalu. Wybierz poziom debugowania, który najlepiej odpowiada Twoim potrzebom.

Zależnie od systemu

Deklaracja interfejsu API:

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

Właściwy dla konkretnego interfejsu API interfejs inicjuje i deinicjonuje wybraną platformę sprzętową. Ten interfejs API nie jest wywoływany przez bibliotekę OpenThread, ale może być przydatny w Twoim systemie/RTOS. W tym pliku źródłowym możesz też wdrożyć inicjowanie innych modułów (np. UART, Radio, losowy, inny/resetowany).

Implementacja tego interfejsu API zależy od konkretnego przypadku użycia. Jeśli na potrzeby przykładowej platformy chcesz korzystać z wygenerowanych aplikacji wiersza poleceń i NCP, musisz wdrożyć ten interfejs API. W przeciwnym razie można wdrożyć każdy interfejs API, aby zintegrować z systemem/RTOS przykładowe sterowniki platform.