Triển khai API Lớp trừu tượng nền tảng

Xem nguồn trên GitHub

OpenThread là hệ điều hành và nền tảng không phân biệt, với một Lớp trừu tượng nền tảng (PAL) hẹp. PAL này xác định:

Kiến trúc chuyển số
  • Giao diện của chuông báo và đồng hồ hẹn giờ chạy miễn phí
  • Giao diện xe buýt (SecureT, SPI) để giao tiếp các thông báo CLI và Spinel
  • Giao diện vô tuyến cho giao tiếp IEEE 802.15.4-2006
  • Quy trình khởi chạy dành riêng cho GCC
  • Entropy để 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 biến động
  • Giao diện ghi nhật ký để gử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ả các API đều phải được triển khai dựa trên Gói hỗ trợ bản dựng (HAL) Xây dựng phần cứng (HAL) bản dựng.

Bạn nên đặt tệp API trong các thư mục sau:

Loại Thư mục
Triển khai PAL dành riêng cho nền tảng /openthread/examples/platforms/platform-name
Tệp tiêu đề — API không thay đổi bộ nhớ /openthread/examples/platforms/utils
Tất cả các tệp tiêu đề khác /openthread/include/openthread/platform
NGHỆ SĨ CHÍNH THỨC /openthread/third_party/platform-name

Báo thức

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à định thời gian cơ bản để triển khai bộ tính năng lớp trên.

Có hai loại dịch vụ chuông báo là mili giâymicro giây. Milli giây là bắt buộc đối với nền tảng phần cứng mới. Phần triệu giây là không bắt buộc.

UART

Khai báo API:

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

API UART triển khai hoạt động 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 CLINCP 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 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 hỗ trợ thêm vì một số lý do:

  • CLI rất hữu ích cho việc 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 thử nghiệm và chứng nhận

Nếu nền tảng phần cứng đích hỗ trợ mô-đun USB CDC chứ không phải UART, hãy đảm bảo:

  • Cài đặt đúng trình điều khiển USB CDC ở 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 Bundle) ở phía OpenThread, sử dụng các nguyên mẫu hàm tương tự

Đài phát

Khai báo API:

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

API Radio xác định tất cả các hàm cần thiết được gọi bởi lớp MAC IEEE 802.15.4 ở trên. Chip Radio phải tuân thủ đầy đủ thông số kỹ thuật IEEE 802.15.4-2006 2.4GHz.

Do tính năng tiết kiệm pin nâng cao, nên OpenThread yêu cầu tất cả các nền tảng triển khai khung hình tự động đang chờ xử lý (truyền gián tiếp) và bảng so khớp địa chỉ nguồn cũng nên đượ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 về tài nguyên, thì bảng địa chỉ nguồn có thể được xác định là độ dài bằng 0. Hãy xem phần Tự động hiển thị khung hình đang chờ xử lý để biết thêm thông tin.

Nội dung 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 chip 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 (TRNG) thực cho lớp trên (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 gồm:

  • Số chỉ dùng một lần AES CCM
  • Dao động ngẫu nhiên bị trễ
  • Địa chỉ mở rộng của thiết bị
  • Khoảng thời gian ngẫu nhiên ban đầu trong bộ tính giờ nhỏ
  • Mã thông báo/mã 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, cho thấy API trong gói EMM. 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 tận dụng hoạt động lấy mẫu mô-đun ADC để tạo một số ngẫu nhiên có độ dài cố định. Lấy mẫu nhiều lần lặp lại nếu cần thiết để đáp ứng các yêu cầu về TRNG (uint32_t).

Khi macro MBEDTLS_ENTROPY_HARDWARE_ALT được đặt thành 1, API này cũng phải cung cấp phương thức để tạo entropy phần cứng dùng trong thư viện mbedTLS.

Bộ nhớ không thay đổi

Khai báo API:

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

hoặc

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

Yêu cầu về bộ nhớ không thay đổi có thể được đáp ứng 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 lưu trữ 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ị với lớp trên:

  • Kích thước bộ nhớ không thay đổi có sẵn dùng để lưu trữ dữ liệu ứng dụng (ví dụ: tập dữ liệu hoạt động/đang chờ xử lý, thông 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, xóa và truy vấn hoạt động trạng thái 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 của bạn để cho biết API mà nền tảng sẽ sử dụng. Nếu đặt thành 1, bạn phải triển khai API Flash. Nếu không, API Cài đặt phải được triển khai.

Bạn phải đặt cờ này trong tệp /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h.

Logging

Khai báo API:

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

API Ghi nhật ký 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 có sẵn. API này là không bắt buộc nếu bạn không đị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, cho phép in tất cả thông tin gói thô và dòng nhật ký 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 đáp ứng tốt nhất nhu cầu của bạn.

Theo từ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 động 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 chạy các mô-đun khác (ví dụ: UART, Radio, Ngẫu nhiên, Khác/Đặt lại) 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 các ứ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ất kỳ API nào cũng có thể được triển khai để tích hợp các trình điều khiển nền tảng mẫu vào hệ thống/RTOS của bạn.