HoloCubic
開発を始める

HoloCubic App SDK

Lua と LVGL で HoloCubic App を開発

App パッケージは名称、入口、アセットを定義します。Lua はライフサイクル、ネットワーク、デバイスロジック、LVGL は UI を担当します。ネイティブ性能が必要な場合だけ公開 C ABI を使います。

開発手順を見る
holo://appREADY
hello/
├── app.info
├── main.lua
├── main.png
├── assets/
└── modules/ # optional

$ app.rescan()
✓ Hello is ready
01

App パッケージを作成

app.info、main.lua、必要なアセットを用意します。

02

UI を作成

LVGL ウィジェットまたは Canvas で 320 × 240 に対応します。

03

インストールして再スキャン

/sd/apps/{app-id} へアップロードし、App を再スキャンします。

SDK STACK

開発レイヤーと役割

App パッケージからネイティブ拡張まで、それぞれに明確な境界があります。まず Lua と LVGL を使い、性能が必要な処理だけ C ABI に移します。

01
APP.INFO

App SDK

このレイヤーを見る
+

ディレクトリ、メタデータ、入口、ライフサイクル、配置、解放。App は単独で起動し、終了時に処理とリソースを解放します。

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

Lua API

+

NodeMCU 形式のタイマー、ネットワーク、ファイルに、BLE Service、IPC、デバイス状態などを追加します。

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

LVGL UI

+

ウィジェット、スタイル、イベント、アニメーション、画像、フォント、Canvas。320 × 240 と短いコールバックを前提にします。

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

C ABI

+

音声、プロトコル、連続演算向けのバージョン付き Host API。内部ファームウェアのシンボルは公開せず、依存もできません。

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

PUBLIC BOUNDARY

公開 SDK の利用ルール

  1. 01文書化された API のみに依存し、内部ファームウェアへリンクしません。
  2. 02コールバックは短く保ち、終了時にタイマー、イベント、フォントを解放します。
  3. 03ネイティブ境界では opaque handle、POD 構造体、安定したエラーコードを使います。