OpenThread không phụ thuộc vào hệ điều hành và nền tảng, với một Lớp trừu tượng nền tảng (PAL) hẹp. PAL này xác định:
- Giao diện chuông báo cho bộ hẹn giờ chạy tự do có chuông báo
- Giao diện bus (UART, SPI) để giao tiếp các thông báo CLI và Spinel
- Giao diện vô tuyến để giao tiếp theo IEEE 802.15.4-2006
- Quy trình khởi chạy dành riêng cho GCC
- Độ hỗn loạn để tạo số ngẫu nhiên thực sự
- Dịch vụ cài đặt cho bộ nhớ cấu hình không bay hơi
- Giao diện ghi nhật ký để phân phối thông điệp nhật ký OpenThread
- Quy trình khởi chạy dành riêng cho hệ thống
Tất cả API phải được triển khai dựa trên Gói hỗ trợ bản dựng (BSP) Lớp trừu tượng hoá phần cứng (HAL) cơ bản.
Bạn nên đặt các tệp API trong các thư mục sau:
Loại | Thư mục |
---|---|
Triển khai PAL theo nền tảng cụ thể | /openthread/examples/platforms/platform-name |
Tệp tiêu đề – API bộ nhớ không bay hơi | /openthread/examples/platforms/utils |
Tất cả các tệp tiêu đề khác | /openthread/include/openthread/platform |
HAL BSP | /openthread/third_party/platform-name |
Chuông báo
Khai báo API:
/openthread/include/openthread/platform/alarm-milli.h
Alarm API cung cấp các dịch vụ báo thức và tính giờ cơ bản để triển khai bộ hẹn giờ ở lớp trên.
Có hai loại dịch vụ chuông báo, milli giây và micro giây. Bạn phải có mili giây cho nền tảng phần cứng mới. Bạn không bắt buộc phải sử dụng micro giây.
UART
Khai báo API:
/openthread/examples/platforms/utils/uart.h
UART API triển khai giao tiếp cổng nối tiếp cơ bản thông qua giao diện UART.
Mặc dù các tiện ích bổ sung CLI và NCP của OpenThread phụ thuộc vào giao diện UART để tương tác với phía máy chủ, nhưng bạn không bắt buộc phải hỗ trợ API UART. Tuy nhiên, ngay cả khi bạn không có kế hoạch sử dụng các tiện ích bổ sung này trên ví dụ về nền tảng phần cứng mới, bạn vẫn nên thêm tính năng hỗ trợ vì một số lý do sau:
- CLI hữu ích để xác thực rằng cổng hoạt động đúng cách
- Công cụ tự động hoá Harness sử dụng giao diện UART để kiểm soát OpenThread cho mục đích kiểm thử và chứng nhận
Nếu nền tảng phần cứng mục tiêu hỗ trợ mô-đun USB CDC thay vì UART, hãy nhớ:
- Cài đặt trình điều khiển USB CDC chính xác ở phía máy chủ
- Thay thế hoạt động triển khai API UART bằng trình điều khiển USB CDC (cùng với BSP) ở phía OpenThread, sử dụng cùng một nguyên mẫu hàm
Đài
Khai báo API:
/openthread/include/openthread/platform/radio.h
Radio API xác định tất cả các hàm cần thiết do lớp MAC IEEE 802.15.4 cấp cao gọi. Chip Radio phải tuân thủ đầy đủ thông số kỹ thuật 2.4GHz IEEE 802.15.4-2006.
Do tính năng tiết kiệm pin nâng cao, OpenThread yêu cầu tất cả các nền tảng triển khai khung tự động đang chờ xử lý (truyền gián tiếp) theo mặc định và bảng so khớp địa chỉ nguồn cũng phải được triển khai trong tệp nguồn radio.h
.
Tuy nhiên, nếu ví dụ về nền tảng phần cứng mới của bạn bị giới hạn tài nguyên, thì bảng địa chỉ nguồn có thể được xác định là có độ dài bằng 0. Hãy xem phần Tự động tạo khung hình đang chờ xử lý để biết thêm thông tin.
Khác/Đặt lại
Khai báo API:
/openthread/include/openthread/platform/misc.h
API Misc/Reset cung cấp một phương thức để đặt lại phần mềm trên khối và truy vấn lý do đặt lại gần đây nhất.
Entropy
Khai báo API:
/openthread/include/openthread/platform/entropy.h
API Entropy cung cấp một trình tạo số ngẫu nhiên thực sự (TRNG) cho lớp trên, được dùng để duy trì các thành phần bảo mật cho toàn bộ mạng OpenThread. API phải đảm bảo rằng một số ngẫu nhiên mới được tạo cho mỗi lệnh gọi hàm. Các thành phần bảo mật chịu ảnh hưởng của TRNG bao gồm:
- Số chỉ dùng một lần AES CCM
- Độ trễ ngẫu nhiên
- Địa chỉ mở rộng của thiết bị
- Khoảng thời gian ngẫu nhiên ban đầu trong bộ hẹn giờ nhỏ giọt
- Mã thông báo/mã nhận dạng thông báo CoAP
Xin lưu ý rằng nhiều nền tảng đã tích hợp trình tạo số ngẫu nhiên, hiển thị API trong gói BSP. Trong trường hợp nền tảng phần cứng mục tiêu không hỗ trợ TRNG, hãy cân nhắc việc tận dụng tính năng lấy mẫu mô-đun ADC để tạo số ngẫu nhiên có độ dài cố định. Lấy mẫu trên nhiều lần lặp lại nếu cần để đáp ứng các yêu cầu của TRNG (uint32_t).
Khi macro MBEDTLS_ENTROPY_HARDWARE_ALT
được đặt thành 1
, API này cũng sẽ cung cấp một phương thức để tạo entropy phần cứng dùng trong thư viện mbedTLS.
Bộ nhớ không bay hơi
Nội dung khai báo API:
/openthread/include/openthread/platform/flash.h
hoặc
/openthread/include/openthread/platform/settings.h
Bạn có thể đáp ứng yêu cầu về bộ nhớ không bay hơi bằng cách triển khai một trong hai API nêu trên. API Flash triển khai trình điều khiển bộ nhớ flash, trong khi API Cài đặt cung cấp các hàm để triển khai hoạt động flash cơ bản cho lớp trên.
Các API này hiển thị cho lớp trên:
- Dung lượng bộ nhớ không bay hơi hiện có dùng để lưu trữ dữ liệu ứng dụng (ví dụ: tập dữ liệu hoạt động đang hoạt động/đang chờ xử lý, các tham số mạng hiện tại và thông tin xác thực của thiết bị luồng để đính kèm lại sau khi đặt lại)
- Đọc, ghi, xoá và truy vấn các thao tác trạng thái của ổ flash
Sử dụng OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE
trong tệp cấu hình cốt lõi của ví dụ về nền tảng để cho biết nền tảng nên sử dụng API nào. Nếu đặt thành 1
, bạn phải triển khai API Flash. Nếu không, bạn phải triển khai API Cài đặt.
Bạn phải đặt cờ này trong tệp /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h
.
Ghi nhật ký
Khai báo API:
/openthread/include/openthread/platform/logging.h
Logging API triển khai chức năng ghi nhật ký và gỡ lỗi của OpenThread, với nhiều cấp đầu ra gỡ lỗi. API này là không bắt buộc nếu bạn không dự định sử dụng tính năng ghi nhật ký của OpenThread trên ví dụ về nền tảng phần cứng mới.
Cấp cao nhất và chi tiết nhất là OPENTHREAD_LOG_LEVEL_DEBG
, giúp in tất cả thông tin gói thô và ghi lại các dòng thông qua cổng nối tiếp hoặc trên thiết bị đầu cuối. Chọn cấp độ gỡ lỗi phù hợp nhất với nhu cầu của bạn.
Riêng hệ thống
Khai báo API:
/openthread/examples/platforms/openthread-system.h
API dành riêng cho hệ thống chủ yếu cung cấp các thao tác khởi chạy và huỷ khởi chạy cho nền tảng phần cứng đã chọn. API này không được thư viện OpenThread gọi, nhưng có thể hữu ích cho hệ thống/RTOS của bạn. Bạn cũng có thể triển khai việc khởi tạo các mô-đun khác (ví dụ: UART, Radio, Random, Misc/Reset) trong tệp nguồn này.
Việc triển khai API này phụ thuộc vào trường hợp sử dụng của bạn. Nếu muốn sử dụng ứng dụng CLI và NCP đã tạo cho một nền tảng mẫu, bạn phải triển khai API này. Nếu không, bạn có thể triển khai bất kỳ API nào để tích hợp trình điều khiển nền tảng mẫu vào hệ thống/RTOS của mình.