Lewati ke konten

Spesifikasi Teknis

Prinsip Desain

Aplikasi ini dibangun menggunakan Flutter dan memanfaatkan kerangka kerja manajemen status Riverpod. Ini berinteraksi dengan perangkat keras ELRS melalui RESTful API yang diekspos oleh modul WiFi internal perangkat, memastikan komunikasi latensi rendah dan sinkronisasi status real-time.

Sistem berkomunikasi dengan perangkat keras menggunakan titik akhir HTTP berikut:

MetodeTitik AkhirDeskripsi
GET/configMengambil konfigurasi perangkat saat ini dalam format JSON.
POST/options.jsonMemperbarui opsi runtime yang dapat dimodifikasi (SSID, Password, dll.).
POST/configMemperbarui parameter perangkat keras inti dan pemetaan PWM.
POST/rebootMemicu reset perangkat keras untuk menerapkan perubahan.

Model RuntimeConfig memanfaatkan struktur ELRS 4.x, yang memisahkan parameter menjadi tiga node utama:

  • settings: Pengidentifikasi perangkat keras hanya-baca dan string versi.
  • options: Preferensi pengguna yang dapat dimodifikasi dan kredensial jaringan.
  • config: Konfigurasi perangkat keras tingkat rendah (Protokol, Array PWM).

Contoh struktur 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}
]
}
}

Sistem menggunakan arsitektur reaktif:

  • ConfigViewModel: Mengelola status koneksi langsung, logika heartbeat, dan penemuan IP.
  • FlashingController: Mengatur unduhan firmware, patching biner lokal, dan proses unggah XH-over-HTTP.

ElrsMappings.domains900 memetakan indeks domain regulasi 900 MHz yang digunakan dalam API ke label yang mudah dibaca manusia:

IDLabelDeskripsi
0AU915Australia/Selandia Baru 915MHz
1FCC915Amerika Utara 915MHz
2EU868Eropa 868MHz
3IN866India 866MHz
4AU433Australia 433MHz
5EU433Eropa 433MHz
6US433Amerika Utara 433MHz
7US433-WideAmerika Utara Lebar 433MHz

Sistem mengimplementasikan strategi persistensi dua lapis:

  • SharedPreferences: Digunakan melalui PersistenceService untuk data non-sensitif seperti WiFi SSID dan preferensi aplikasi umum.
  • FlutterSecureStorage: Digunakan untuk data sensitif, termasuk Binding Phrases dan WiFi Passwords, memastikan enkripsi pada tingkat OS.