OpenThread tidak bergantung pada OS dan platform, dengan Platform Abstraction Layer (PAL) sempit. PAL ini mendefinisikan:
- Antarmuka alarm untuk timer yang berjalan gratis dengan alarm
- Antarmuka bus (UART, SPI) untuk mengomunikasikan pesan CLI dan Spinel
- Antarmuka radio untuk komunikasi IEEE 802.15.4-2006
- Rutinitas inisialisasi khusus GCC
- Entropi untuk pembuatan angka acak sebenarnya
- Layanan setelan untuk penyimpanan konfigurasi non-volatil
- Antarmuka logging untuk mengirim pesan log OpenThread
- Rutinitas inisialisasi khusus sistem
Semua API harus diterapkan berdasarkan Paket Dukungan Build (BSP) Hardware Abstraction Layer (HAL) yang mendasarinya.
File API harus ditempatkan di direktori berikut:
Jenis | Direktori |
---|---|
Implementasi PAL khusus platform | /openthread/examples/platforms/platform-name |
File header — API penyimpanan non-volatil | /openthread/examples/platforms/utils |
Semua file header lainnya | /openthread/include/openthread/platform |
HAL BSP | /openthread/third_party/platform-name |
Alarm
Deklarasi API:
/openthread/include/openthread/platform/alarm-milli.h
Alarm API menyediakan layanan pengaturan waktu dan alarm dasar untuk implementasi timer lapisan atas.
Ada dua jenis layanan alarm, milidetik dan mikrodetik. Milidetik diperlukan untuk platform hardware baru. Mikrodetik bersifat opsional.
UART
Deklarasi API:
/openthread/examples/platforms/utils/uart.h
UART API mengimplementasikan komunikasi port serial dasar melalui antarmuka UART.
Meskipun add-on CLI dan NCP OpenThread bergantung pada antarmuka UART untuk berinteraksi dengan sisi host, dukungan UART API bersifat opsional. Namun, meskipun Anda tidak berencana menggunakan add-on ini pada contoh platform hardware baru Anda, sebaiknya tambahkan dukungan karena beberapa alasan:
- CLI berguna untuk memvalidasi bahwa port berfungsi dengan benar
- Alat Otomatisasi Harness menggunakan antarmuka UART guna mengontrol OpenThread untuk tujuan pengujian dan sertifikasi
Jika platform hardware target mendukung modul CDC USB, bukan UART, pastikan untuk:
- Instal driver USB CDC yang benar di sisi host
- Ganti implementasi UART API dengan driver USB CDC (bersama dengan BSP) di sisi OpenThread, menggunakan prototipe fungsi yang sama
Radio
Deklarasi API:
/openthread/include/openthread/platform/radio.h
Radio API menentukan semua fungsi yang diperlukan yang dipanggil oleh lapisan MAC IEEE 802.15.4 di atas. Chip Radio harus sepenuhnya mematuhi spesifikasi 2.4GHz IEEE 802.15.4-2006.
Karena fitur daya rendah yang ditingkatkan, OpenThread mengharuskan semua platform untuk
mengimplementasikan frame otomatis yang tertunda (transmisi tidak langsung) secara default, dan tabel pencocokan
alamat sumber juga harus diimplementasikan di file sumber radio.h
.
Namun, jika contoh platform hardware baru Anda dibatasi resource, tabel alamat sumber dapat didefinisikan sebagai panjang nol. Lihat Frame Otomatis Tertunda untuk mengetahui informasi selengkapnya.
Lain-lain/Reset
Deklarasi API:
/openthread/include/openthread/platform/misc.h
Misc/Reset API menyediakan metode untuk mereset software pada chip, dan mengkueri alasan reset terakhir.
Entropi
Deklarasi API:
/openthread/include/openthread/platform/entropy.h
Entropy API menyediakan generator angka acak (TRNG) sebenarnya untuk lapisan atas, yang digunakan untuk mengelola aset keamanan untuk seluruh jaringan OpenThread. API harus menjamin bahwa angka acak baru akan dibuat untuk setiap panggilan fungsi. Aset keamanan yang terpengaruh oleh TRNG meliputi:
- Nonce AES CCM
- Jitter tertunda secara acak
- Alamat tambahan perangkat
- Periode acak awal dalam timer sementara
- ID token/pesan COAP
Perhatikan bahwa banyak platform telah mengintegrasikan generator angka acak, yang mengekspos API dalam paket BSP-nya. Jika platform hardware target tidak mendukung TRNG, sebaiknya manfaatkan pengambilan sampel modul ADC untuk menghasilkan angka acak dengan panjang tetap. Ambil sampel selama beberapa iterasi jika diperlukan untuk memenuhi persyaratan TRNG (uint32_t).
Jika makro MBEDTLS_ENTROPY_HARDWARE_ALT
disetel ke 1
, API ini juga harus menyediakan metode untuk menghasilkan entropi hardware yang digunakan di library mbedTLS.
Penyimpanan non-volatil
Deklarasi API:
/openthread/include/openthread/platform/flash.h
atau
/openthread/include/openthread/platform/settings.h
Persyaratan penyimpanan non-volatil dapat dipenuhi dengan menerapkan salah satu dari dua API yang tercantum di atas. Flash API mengimplementasikan driver penyimpanan flash, sedangkan Settings API menyediakan fungsi untuk implementasi operasi flash yang mendasarinya ke lapisan atas.
API ini mengekspos ke lapisan atas:
- Ukuran penyimpanan non-volatil yang tersedia yang digunakan untuk menyimpan data aplikasi (misalnya, set data operasional aktif/tertunda, parameter jaringan saat ini, dan kredensial perangkat thread untuk pemasangan ulang setelah reset)
- Membaca, menulis, menghapus, dan membuat kueri operasi status flash
Gunakan OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE
di file konfigurasi inti contoh platform Anda untuk menunjukkan API mana yang harus digunakan oleh platform tersebut. Jika ditetapkan ke 1
, Flash API harus diterapkan. Jika tidak, Settings API harus
diimplementasikan.
Tanda ini harus ditetapkan dalam
file
/openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h
Anda.
Logging
Deklarasi API:
/openthread/include/openthread/platform/logging.h
Logging API mengimplementasikan fungsi logging dan debug OpenThread, dengan beberapa level output debug yang tersedia. API ini bersifat opsional jika Anda tidak ingin menggunakan logging OpenThread pada contoh platform hardware baru Anda.
Level tertinggi dan paling mendetail adalah OPENTHREAD_LOG_LEVEL_DEBG
, yang
mencetak semua informasi paket mentah dan baris log melalui port serial atau di
terminal. Pilih level debug yang paling sesuai dengan kebutuhan Anda.
Khusus sistem
Deklarasi API:
/openthread/examples/platforms/openthread-system.h
API khusus Sistem terutama menyediakan operasi inisialisasi dan deinisialisasi untuk platform hardware yang dipilih. API ini tidak dipanggil oleh library OpenThread itu sendiri, tetapi mungkin berguna untuk sistem/RTOS Anda. Anda juga dapat mengimplementasikan inisialisasi modul lain (misalnya, UART, Radio, Random, Lain-lain/Reset) dalam file sumber ini.
Implementasi API ini bergantung pada kasus penggunaan Anda. Jika ingin menggunakan aplikasi CLI dan NCP yang dihasilkan untuk platform contoh, Anda harus menerapkan API ini. Jika tidak, API apa pun dapat diterapkan untuk mengintegrasikan contoh driver platform ke sistem/RTOS Anda.