ข้อกำหนดทางเทคนิค
ภาพรวมสถาปัตยกรรม
หัวข้อที่มีชื่อว่า “ภาพรวมสถาปัตยกรรม”แอปพลิเคชันนี้สร้างขึ้นโดยใช้ Flutter และใช้ประโยชน์จากเฟรมเวิร์กการจัดการสถานะ Riverpod โดยจะโต้ตอบกับฮาร์ดแวร์ ELRS ผ่าน RESTful API ที่เผยแพร่โดยโมดูล WiFi ในตัวของอุปกรณ์ เพื่อให้มั่นใจในการสื่อสารที่มีความหน่วงต่ำและการซิงโครไนซ์สถานะแบบเรียลไทม์
เลเยอร์ข้อมูล
หัวข้อที่มีชื่อว่า “เลเยอร์ข้อมูล”ปลายทาง API
หัวข้อที่มีชื่อว่า “ปลายทาง API”ระบบสื่อสารกับฮาร์ดแวร์โดยใช้ปลายทาง HTTP ดังต่อไปนี้:
| Method | Endpoint | Description |
|---|---|---|
GET | /config | ดึงข้อมูลการกำหนดค่าอุปกรณ์ปัจจุบันในรูปแบบ JSON |
POST | /options.json | อัปเดตตัวเลือกที่แก้ไขได้ระหว่างรันไทม์ (WiFi SSID, Password เป็นต้น) |
POST | /config | อัปเดตพารามิเตอร์ฮาร์ดแวร์หลักและการแมป PWM |
POST | /reboot | ทริกเกอร์การรีเซ็ตฮาร์ดแวร์เพื่อใช้การเปลี่ยนแปลง |
JSON Schema
หัวข้อที่มีชื่อว่า “JSON Schema”โมเดล RuntimeConfig ใช้โครงสร้าง ELRS 4.x ซึ่งแยกพารามิเตอร์ออกเป็นสามโหนดหลัก:
settings: ตัวระบุฮาร์ดแวร์และสตริงเวอร์ชันแบบอ่านอย่างเดียวoptions: การตั้งค่าผู้ใช้ที่แก้ไขได้และข้อมูลประจำตัวเครือข่ายconfig: การกำหนดค่าฮาร์ดแวร์ระดับต่ำ (Protocols, PWM Arrays)
ตัวอย่างโครงสร้าง JSON:
{ "product_name": "Test RX", "settings": { "version": "1.0.0", "module-type": "RX" }, "options": { "bindPhrase": "example", "wifi-ssid": "SSID", "domain": 1 }, "config": { "serial-protocol": 0, "pwm": [ {"channel": 0, "mode": 5} ] }}การจัดการสถานะ
หัวข้อที่มีชื่อว่า “การจัดการสถานะ”ระบบใช้สถาปัตยกรรมแบบ Reactive:
ConfigViewModel: จัดการสถานะการเชื่อมต่อแบบสด ตรรกะ heartbeat และการค้นหา IPDeviceEditorViewModel: เก็บสถานะร่างของการกำหนดค่าอุปกรณ์ ทำให้สามารถแก้ไขได้หลายขั้นตอนพร้อมตรรกะ “บันทึก/ยกเลิก” ขั้นสุดท้ายFlashingController: ประสานงานการดาวน์โหลดเฟิร์มแวร์ การแก้ไขไบนารีในเครื่อง และกระบวนการอัปโหลด XH-over-HTTP
เลเยอร์การแมป
หัวข้อที่มีชื่อว่า “เลเยอร์การแมป”ตารางต่อไปนี้กำหนดการแมประหว่างตัวระบุจำนวนเต็มที่ใช้ใน API แล��เทียบเท่าที่มนุษย์อ่านได้
Regulatory Domains
หัวข้อที่มีชื่อว่า “Regulatory Domains”| ID | Label | Description |
|---|---|---|
| 0 | AU915 | ออสเตรเลีย/นิวซีแลนด์ 915MHz |
| 1 | FCC915 | อเมริกาเหนือ 915MHz |
| 2 | EU868 | ยุโรป 868MHz |
| 3 | IN866 | อินเดีย 866MHz |
| 4 | AU433 | ออสเตรเลีย 433MHz |
| 5 | EU433 | ยุโรป 433MHz |
| 6 | US433 | อเมริกาเหนือ 433MHz |
| 7 | US433-Wide | อเมริกาเหนือ Wide 433MHz |
การแมปขั้นสูง
หัวข้อที่มีชื่อว่า “การแมปขั้นสูง”VBind (Binding Storage)
หัวข้อที่มีชื่อว่า “VBind (Binding Storage)”กำหนดวิธีการจัดเก็บวลีการผูก (binding phrase) บนอุปกรณ์
- 0: Persistent: บันทึกไปยังหน่วยความจำแฟลช (มาตรฐาน)
- 1: Volatile: ล้างข้อมูลเมื่อปิดเปิดเครื่องใหม่
- 2: Returnable: ใช้สำหรับอุปกรณ์ให้ยืม
- 3: Administered: ใช้ในสภาพแวดล้อมฝูงบินที่มีนักบินหลายคน
เลเยอร์การคงอยู่
หัวข้อที่มีชื่อว่า “เลเยอร์การคงอยู่”ระบบใช้กลยุทธ์การคงอยู่แบบสองเลเยอร์:
SharedPreferences: ใช้ผ่านPersistenceServiceสำหรับข้อมูลที่ไม่ละเอียดอ่อน เช่น WiFi SSIDs และการตั้งค่าแอปทั่วไปFlutterSecureStorage: ใช้สำหรับข้อมูลที่ละเอียดอ่อน รวมถึง Binding Phrases และ WiFi Passwords เพื่อให้มั่นใจถึงการเข้ารหัสในระดับ OS