Chỉ định địa chỉ
Tóm tắt
Giới thiệu:
Vì có một số phần phụ thuộc lẫn nhau giữa các giao diện và vì các cấu hình Thiết bị khác nhau có thể yêu cầu địa chỉ TCP/IP và việc chỉ định tuyến khác nhau, nên điều thiết yếu là logic để kiểm soát địa chỉ IP và chỉ định Tuyến đường được hợp nhất vào một mô-đun duy nhất. WARM có mục đích là thêm và xoá đúng cách các địa chỉ TCP/IP và Tuyến đến Weave các giao diện IP liên quan khi các giao diện đó chuyển đổi từ trạng thái đang hoạt động<->không hoạt động.
WARM dự kiến sẽ được định cấu hình tại thời điểm biên dịch thông qua ấmProjectConfig.h và WarmConfig.h. WarmProjectConfig.h phải phản ánh chính xác các tính năng được hỗ trợ của thiết bị mà WARM sẽ thực thi trên đó.
WARM là một mô-đun di động giới hạn phần phụ thuộc vào cách định cấu hình ngăn xếp TCP/IP và Giao diện luồng. Với mục đích này, WARM dựa vào một Tập hợp các API nền tảng mà Nhà tích hợp nền tảng phải triển khai. Ngoài ra, Trình tích hợp nền tảng chịu trách nhiệm thực hiện các lệnh gọi API nl::Warm khác nhau từ các điểm thực thi phù hợp trong cơ sở mã của Nền tảng.
Lý thuyết hoạt động:
Cơ sở mã Nền tảng sẽ gọi nl::Warm API để thông báo về việc thay đổi Trạng thái cho các tính năng liên quan như giao diện Wi-Fi và giao diện Thread. Việc gọi bất kỳ nl::Warm API nào sau đây có thể dẫn đến một lệnh gọi của WARM đến Platform::RequestInvokeActions(). Nền tảng::RequestInvokeActions() phải được triển khai để thực hiện các thao tác cần thiết sẽ gọi Warm::InvokeActions(). Quá trình này thoạt nhìn có thể có vẻ gián tiếp. Tại sao WARM không gọi trực tiếp InvokeActions? Câu trả lời cho câu hỏi đó là cho phép bất kỳ tác vụ nào trong hệ thống đa nhiệm vụ gọi API thay đổi trạng thái nl::ấm và cung cấp cơ chế để chỉ có một tác vụ cụ thể sẽ gọi Nền tảng:: API. Sau khi cân nhắc các yêu cầu của Nền tảng, Nhà tích hợp nền tảng có thể chọn triển khai Platform::RequestInvokeActions() để đăng một sự kiện lên tác vụ thích hợp sẽ phản ứng bằng cách gọi Warm::InvokeActions(). Nếu đối với một nền tảng cụ thể, chúng tôi quyết định rằng không có vấn đề đa nhiệm nào như vậy, thì có thể triển khai Platform::RequestInvokeActions() trực tiếp gọi Warm:.InvokeActions()
Khi Warm::InvokeActions() được gọi, logic WARM sẽ kiểm tra Trạng thái hệ thống hiện tại và thực hiện mọi lệnh gọi cần thiết cho Platform:: API để đưa địa chỉ và Trạng thái định tuyến phù hợp với Trạng thái hệ thống và cấu hình. Các lệnh gọi này được thực hiện theo thứ tự được xác định trước và nếu bất kỳ lệnh gọi nào trong số kPlatformResultInProgress của API này trả về, thì việc thực thi danh sách theo thứ tự sẽ tạm ngưng và thoát. Hơn nữa, khi một trong các API này trả về kPlatformResultInProgress, hệ thống sẽ diễn giải rằng thao tác này sẽ hoàn tất không đồng bộ và logic WARM phải đợi thao tác đó hoàn tất. Sau khi hoàn tất thao tác, mã Nền tảng sẽ gọi Warm::ReportActionComplete(), chuyển đến kết quả là kPlatformResultSuccess hoặc kPlatformResultFailure. Khi nhận được lệnh gọi này, logic WARM sẽ lại gọi Platform::RequestInvokeActions() để bắt đầu lại quá trình thực thi danh sách hành động có thứ tự.
Bằng cách này, WARM không yêu cầu tác vụ riêng mà có thể dựa vào một tác vụ khác để gọi vào Ấm khi thích hợp. Ngoài ra, bất kỳ tác vụ nào cũng có thể gọi một hoặc nhiều API thay đổi trạng thái hệ thống, nhờ đó đơn giản hoá quá trình tích hợp.