HoloCubic
App entwickeln

HoloCubic App SDK

HoloCubic-Apps mit Lua und LVGL entwickeln

Das App-Paket definiert Name, Einstieg und Assets. Lua übernimmt Lebenszyklus, Netzwerk und Gerätelogik; LVGL baut die Oberfläche. Die öffentliche C ABI ist nur für native Leistung vorgesehen.

Entwicklungsablauf ansehen
holo://appREADY
hello/
├── app.info
├── main.lua
├── main.png
├── assets/
└── modules/ # optional

$ app.rescan()
✓ Hello is ready
01

App-Paket erstellen

app.info, main.lua und benötigte Assets vorbereiten.

02

Oberfläche erstellen

LVGL-Widgets oder Canvas für 320 × 240 verwenden.

03

Installieren und neu einlesen

Nach /sd/apps/{app-id} hochladen und die Apps neu scannen.

SDK STACK

Entwicklungsebenen und Aufgaben

Vom App-Paket bis zur nativen Erweiterung hat jede Ebene eine klare Grenze. Lua und LVGL kommen zuerst; die C ABI nur bei echtem Leistungsbedarf.

01
APP.INFO

App SDK

Erläuterung öffnen
+

Verzeichnis, Metadaten, Einstieg, Lebenszyklus, Bereitstellung und Bereinigung. Apps starten unabhängig und geben beim Beenden alle eigenen Ressourcen frei.

[app]
name = "Hello"
entry = "main.lua"
icon = "main.png"
02
LUA

Lua API

+

Timer, Netzwerk und Dateien im NodeMCU-Stil plus HoloCubic-Funktionen für BLE Service, IPC und Gerätestatus.

local timer = tmr.create()
timer:alarm(1000, tmr.ALARM_AUTO, function()
  print("tick", tmr.time())
end)
03
LVGL 8.3

LVGL UI

+

Widgets, Stile, Events, Animationen, Bilder, Schriften und Canvas – für 320 × 240 und kurze Callbacks ausgelegt.

local label = lv_label_create(lv_scr_act())
lv_label_set_text(label, "Hello, Holo.")
lv_obj_center(label)
04
C ABI

C ABI

+

Versionierte Host API für Audio, Protokolle und dauerhafte Berechnungen; interne Firmware-Symbole werden weder offengelegt noch vorausgesetzt.

const holo_host_api_v1 *host;
int holo_module_init(const holo_host_api_v1 *api) {
  host = api;
  return HOLO_OK;
}

PUBLIC BOUNDARY

Regeln des öffentlichen SDK

  1. 01Nur dokumentierte APIs verwenden; keine internen Firmware-Symbole linken.
  2. 02Callbacks kurz halten und Timer, Events sowie Schriften beim Beenden freigeben.
  3. 03Opaque Handles, POD-Strukturen und stabile Fehlercodes an der nativen Grenze verwenden.