การกำหนดที่อยู่

สรุป

บทนำ:

เนื่องจากอินเทอร์เฟซระหว่างอินเทอร์เฟซนั้นมีจำนวนมาก และเนื่องจากการกำหนดค่าอุปกรณ์ที่แตกต่างกันอาจต้องใช้ที่อยู่ TCP/IP และการกําหนดเส้นทางที่แตกต่างกัน จึงจำเป็นต้องรวมตรรกะในการควบคุมที่อยู่ IP และการกําหนดเส้นทางไว้ในโมดูลเดียว WARM ทำหน้าที่เพิ่มและนำที่อยู่ TCP/IP และเส้นทางไปยังอินเทอร์เฟซ IP ที่เกี่ยวข้องกับ Weave ออกอย่างเหมาะสม เนื่องจากอินเทอร์เฟซเหล่านั้นเปลี่ยนจากสถานะแอ็กทีฟ<->ไม่ใช้งาน

WARM มีไว้เพื่อกำหนดค่า ณ เวลาที่คอมไพล์ผ่าน WarmProjectConfig.h และ WarmConfig.h WarmProjectConfig.h จะต้องแสดงถึงฟีเจอร์ที่รองรับของอุปกรณ์ซึ่ง WARM จะทำงานอย่างถูกต้อง

WARM คือโมดูลแบบพกพาที่จำกัดการพึ่งพาการกำหนดค่าสแต็ก TCP/IP และอินเทอร์เฟซเทรด สำหรับวัตถุประสงค์นี้ WARM จะใช้ชุดของ Platform API ซึ่งผู้ผสานรวมแพลตฟอร์มต้องติดตั้งใช้งาน นอกจากนี้ ผู้รวมแพลตฟอร์มมีหน้าที่สร้างการเรียก nl::Warm API ต่างๆ จากจุดปฏิบัติการที่เหมาะสมภายในฐานของโค้ดของแพลตฟอร์ม

ทฤษฎีปฏิบัติการ:

ฐานของโค้ดแพลตฟอร์มจะเรียก nl::Warm API เพื่อประกาศการเปลี่ยนแปลงสถานะสำหรับคุณลักษณะที่เกี่ยวข้อง เช่น อินเทอร์เฟซ WiFi และอินเทอร์เฟซเทรด การเรียกใช้ nl::Warm API เหล่านี้อาจทำให้ WARM เรียกใช้ Platform::RequestInvokeActions() ได้ จะต้องมีการติดตั้งใช้งาน Platform::RequestInvokeActions() เพื่อดำเนินการที่จำเป็นซึ่งจะเรียกใช้ Warm::InvokeActions() ขั้นตอนนี้เมื่อมองครั้งแรกแล้วอาจปรากฏเป็นโดยอ้อมโดยไม่จำเป็น เหตุใด WARM จึงไม่เรียกใช้ InvokeActions โดยตรง คำตอบสำหรับคำถามนี้คือการอนุญาตให้งานใดก็ตามในระบบมัลติทาสก์กิงสามารถเรียกใช้ nl::Warm State Change API และเป็นการให้กลไกเพื่อให้เฉพาะงานบางอย่างเรียกใช้ Platform:: API หลังจากพิจารณาข้อกำหนดของแพลตฟอร์มแล้ว ผู้ผสานรวมแพลตฟอร์มอาจเลือกใช้ Platform::RequestInvokeActions() เพื่อให้โพสต์เหตุการณ์ไปยังงานที่เหมาะสมซึ่งจะตอบสนองด้วยการเรียกใช้ Warm::InvokeActions() ได้ ในกรณีที่แพลตฟอร์มหนึ่งๆ พิจารณาแล้วว่าไม่มีข้อกังวลเกี่ยวกับการทำงานหลายอย่างพร้อมกัน ก็สามารถนำ Platform::RequestInvoke() เพื่อเรียกใช้ Warm::Invoke() ได้โดยตรง

เมื่อมีการเรียก Warm::InvokeActions() ลอจิก WARM จะตรวจสอบสถานะของระบบปัจจุบันและสร้างแพลตฟอร์มที่จำเป็น (เช่น การเรียก API) เพื่อให้ที่อยู่และสถานะการกำหนดเส้นทางสอดคล้องกับระบบและสถานะการกำหนดค่า การเรียกเหล่านี้จะเกิดขึ้นตามลำดับที่กำหนดไว้ล่วงหน้า และถ้า kPlatform ResultsInProgress ของ API เหล่านี้แสดง การดำเนินการตามรายการที่เรียงลำดับจะระงับและออกจากการดำเนินการ นอกจากนี้ เมื่อหนึ่งใน API เหล่านี้แสดงผล kPlatformResultInProgress ระบบจะตีความว่าการทำงานจะเสร็จสมบูรณ์แบบไม่พร้อมกัน และตรรกะ WARM ควรรอให้การดำเนินการดังกล่าวเสร็จสิ้น เมื่อการดำเนินการเสร็จสมบูรณ์ โค้ดแพลตฟอร์มควรเรียก Warm::ReportActionComplete() ซึ่งส่งผ่าน kPlatformResultSuccess หรือ kPlatformResultFailure เมื่อได้รับการเรียกนี้ ตรรกะ WARM จะเรียกใช้ Platform::RequestInvokeActions() อีกครั้ง เพื่อเริ่มการดำเนินการกับรายการการดำเนินการที่เรียงลำดับใหม่

วิธีนี้ทำให้ WARM ไม่จำเป็นต้องทำงานของตนเอง แต่จะอาศัยงานอื่นเพื่อทำให้อยู่ใน Warm ตามความเหมาะสม นอกจากนี้งานใดก็ตามอาจเรียกใช้ System Change API อย่างน้อย 1 รายการเพื่อให้การผสานรวมทำได้ง่ายขึ้น