ใช้ 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
ไฟล์ส่วนหัว — Non-volatile storage API /openthread/examples/platforms/utils
ไฟล์ส่วนหัวอื่นๆ ทั้งหมด /openthread/include/openthread/platform
HAL BSP /openthread/third_party/platform-name

การปลุก

การประกาศ API

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

Alarm API ให้บริการจับเวลาและการปลุกพื้นฐานสําหรับการใช้งานตัวจับเวลาในเลเยอร์บน

บริการสัญญาณเตือนมี 2 ประเภท ได้แก่ มิลลิวินาทีและไมโครวินาที ต้องระบุมิลลิวินาทีสำหรับแพลตฟอร์มฮาร์ดแวร์ใหม่ ไมโครวินาทีเป็นตัวเลือกที่ไม่บังคับ

UART

การประกาศ API

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

UART API ใช้การสื่อสารพื้นฐานของพอร์ตอนุกรมผ่านอินเทอร์เฟซ UART

แม้ว่าส่วนเสริม OpenThread CLI และ NCP จะขึ้นอยู่กับอินเทอร์เฟซ UART เพื่อโต้ตอบกับฝั่งโฮสต์ แต่คุณก็เลือกไม่ใช้การรองรับ UART API ได้ อย่างไรก็ตาม แม้ว่าคุณจะไม่ได้วางแผนที่จะใช้ส่วนเสริมเหล่านี้ในแพลตฟอร์มฮาร์ดแวร์ใหม่ แต่เราขอแนะนำให้คุณเพิ่มการรองรับด้วยเหตุผลต่อไปนี้

  • CLI มีประโยชน์ในการตรวจสอบว่าพอร์ตทํางานอย่างถูกต้อง
  • เครื่องมือการทำงานอัตโนมัติของสายใช้อินเทอร์เฟซ UART เพื่อควบคุม OpenThread เพื่อวัตถุประสงค์ในการทดสอบและการรับรอง

หากแพลตฟอร์มฮาร์ดแวร์เป้าหมายรองรับโมดูล USB CDC แทน UART โปรดตรวจสอบสิ่งต่อไปนี้

  • ติดตั้งไดรเวอร์ USB CDC ที่ถูกต้องฝั่งโฮสต์
  • แทนที่การใช้งาน UART API ด้วยไดรเวอร์ USB CDC (พร้อมกับ BSP) ในฝั่ง OpenThread โดยใช้โปรโตไทป์ฟังก์ชันเดียวกัน

วิทยุ

การประกาศ API

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

Radio API จะกำหนดฟังก์ชันที่จำเป็นทั้งหมดที่เรียกใช้โดยเลเยอร์ IEEE 802.15.4 MAC ที่สูงกว่า ชิปวิทยุต้องเป็นไปตามข้อกำหนด IEEE 802.15.4-2006 2.4GHz อย่างเต็มรูปแบบ

เนื่องจากฟีเจอร์พลังงานต่ำที่มีประสิทธิภาพมากขึ้น OpenThread จึงกำหนดให้ทุกแพลตฟอร์มใช้การรอเฟรมอัตโนมัติ (การส่งข้อมูลโดยอ้อม) โดยค่าเริ่มต้น และควรใช้ตารางการจับคู่ที่อยู่ต้นทางในไฟล์ต้นทาง radio.h ด้วย

อย่างไรก็ตาม หากตัวอย่างแพลตฟอร์มฮาร์ดแวร์ใหม่มีทรัพยากรจํากัด คุณสามารถกําหนดตารางที่อยู่ต้นทางให้มีความยาวเป็น 0 ได้ ดูข้อมูลเพิ่มเติมได้ที่รอจัดเฟรมอัตโนมัติ

อื่นๆ/รีเซ็ต

การประกาศ API

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

Misc/Reset API มีวิธีการรีเซ็ตซอฟต์แวร์ในชิปและค้นหาเหตุผลในการรีเซ็ตครั้งล่าสุด

เอนโทรปี

การประกาศ API

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

Entropy API มีเครื่องมือสร้างตัวเลขสุ่มจริง (TRNG) สำหรับเลเยอร์บน ซึ่งใช้ในการดูแลรักษาสินทรัพย์ด้านความปลอดภัยสำหรับเครือข่าย OpenThread ทั้งหมด API ควรรับประกันว่าระบบจะสร้างตัวเลขแบบสุ่มใหม่สําหรับการเรียกใช้ฟังก์ชันแต่ละครั้ง เนื้อหาด้านความปลอดภัยที่ได้รับผลกระทบจาก TRNG มีดังนี้

  • ข้อมูลที่ไม่ซ้ำกันของ AES CCM
  • เสียงรบกวนแบบล่าช้าแบบสุ่ม
  • ที่อยู่แบบยาวของอุปกรณ์
  • ระยะเวลาแบบสุ่มเริ่มต้นในเครื่องมือจับเวลาแบบค่อยเป็นค่อยไป
  • รหัสโทเค็น/ข้อความ CoAP

โปรดทราบว่าแพลตฟอร์มจำนวนมากได้ผสานรวมเครื่องมือสร้างตัวเลขสุ่มแล้ว ซึ่งแสดง API ในแพ็กเกจ BSP ในกรณีที่แพลตฟอร์มฮาร์ดแวร์เป้าหมายไม่รองรับ TRNG ให้ลองใช้ประโยชน์จากการสุ่มตัวอย่างของโมดูล ADC เพื่อสร้างตัวเลขสุ่มที่มีความยาวคงที่ ทำการสุ่มตัวอย่างซ้ำหลายครั้งหากจําเป็นเพื่อให้เป็นไปตามข้อกําหนดของ TRNG (uint32_t)

เมื่อตั้งค่ามาโคร MBEDTLS_ENTROPY_HARDWARE_ALT เป็น 1 แล้ว API นี้ควรมีเมธอดในการสร้างการเข้ารหัสแบบสุ่มของฮาร์ดแวร์ที่ใช้ในไลบรารี mbedTLS ด้วย

พื้นที่เก็บข้อมูลแบบไม่ผันแปร

การประกาศ API

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

หรือ

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

คุณปฏิบัติตามข้อกำหนดเกี่ยวกับพื้นที่เก็บข้อมูลแบบไม่ผันแปรได้โดยใช้ API รายการใดรายการหนึ่งจาก 2 รายการที่ระบุไว้ข้างต้น Flash API ใช้ไดรฟ์สำหรับพื้นที่เก็บข้อมูล Flash ส่วน Settings API มีฟังก์ชันสำหรับการใช้งานการดำเนินการ Flash พื้นฐานในเลเยอร์บน

API เหล่านี้จะแสดงในเลเยอร์บน

  • ขนาดพื้นที่เก็บข้อมูลแบบคงที่ที่ใช้จัดเก็บข้อมูลแอปพลิเคชัน (เช่น ชุดข้อมูลการทํางานที่มีการใช้งาน/รอดําเนินการ พารามิเตอร์เครือข่ายปัจจุบัน และข้อมูลเข้าสู่ระบบของอุปกรณ์เทรดสำหรับการเชื่อมต่ออีกครั้งหลังจากรีเซ็ต)
  • การดำเนินการอ่าน เขียน ลบ และค้นหาสถานะแฟลช

ใช้ OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE ในไฟล์การกําหนดค่าหลักของตัวอย่างแพลตฟอร์มเพื่อระบุ API ที่แพลตฟอร์มควรใช้ หากตั้งค่าเป็น 1 ต้องติดตั้งใช้งาน Flash API มิเช่นนั้น จะต้องติดตั้งใช้งาน Settings API

คุณต้องตั้งค่า Flag นี้ในไฟล์ /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h

การบันทึก

การประกาศ API

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

Logging API ใช้ฟังก์ชันการบันทึกและการแก้ไขข้อบกพร่องของ OpenThread โดยมีเอาต์พุตการแก้ไขข้อบกพร่องหลายระดับ คุณไม่จำเป็นต้องใช้ API นี้หากไม่ได้วางแผนที่จะใช้การบันทึกของ OpenThread ในตัวอย่างแพลตฟอร์มฮาร์ดแวร์ใหม่

ระดับสูงสุดและละเอียดที่สุดคือ OPENTHREAD_LOG_LEVEL_DEBG ซึ่งจะพิมพ์ข้อมูลแพ็กเก็ตดิบทั้งหมดและบันทึกบรรทัดผ่านพอร์ตอนุกรมหรือในเทอร์มินัล เลือกระดับการแก้ไขข้อบกพร่องที่ตรงกับความต้องการของคุณมากที่สุด

เฉพาะระบบ

การประกาศ API

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

API สำหรับระบบโดยเฉพาะจะดำเนินการเริ่มต้นและยกเลิกการเริ่มต้นสำหรับแพลตฟอร์มฮาร์ดแวร์ที่เลือกเป็นหลัก ไลบรารี OpenThread ไม่ได้เรียกใช้ API นี้ แต่อาจมีประโยชน์สำหรับระบบ/RTOS นอกจากนี้ คุณยังใช้การเริ่มต้นโมดูลอื่นๆ (เช่น UART, วิทยุ, Random, อื่นๆ/รีเซ็ต) ในไฟล์ต้นฉบับนี้ได้อีกด้วย

การติดตั้งใช้งาน API นี้ขึ้นอยู่กับกรณีการใช้งานของคุณ หากต้องการใช้แอปพลิเคชัน CLI และ NCP ที่สร้างขึ้นสำหรับแพลตฟอร์มตัวอย่าง คุณต้องติดตั้งใช้งาน API นี้ หรือจะใช้ API ใดก็ได้เพื่อผสานรวมไดรเวอร์แพลตฟอร์มตัวอย่างเข้ากับระบบ/RTOS