Skip to main content

JS API General Usage

ElenixOS provides rich JavaScript APIs for developing applications and watchfaces. This document introduces the general usage of JS APIs, including basic concepts, naming conventions, error handling, and more.

Script Engine Architecture​

ElenixOS's script engine adopts a three-layer architecture design:

Three-Layer Architecture​

  1. Core Engine Layer (Script Engine Core)

    • Responsible for JerryScript's underlying operations
    • Realm management, compilation execution, memory operations
  2. SPM Layer (Script Program Manager)

    • Intermediate management layer, separating program lifecycle from JS execution
    • Manages program startup, suspend, resume, and termination
    • Supports context save/restore for state persistence
    • JS callback gate validation and error snapshot persistence
  3. SNI Layer (Script Native Interface)

    • Provides interface between scripts and native code
    • Includes service API, UI component API, event API, etc.

Basic Concepts​

API Namespaces​

ElenixOS's JavaScript APIs are exposed to scripts through the following namespaces:

  • eos - System API
  • lv - LVGL UI API

Object-Oriented Style​

ElenixOS's JavaScript APIs adopt an object-oriented style, using constructors to create objects and instance methods to operate objects:

// Create a button
const button = new lv.button(eos.view.active());

// Set button size and position
button.setSize(100, 50);
button.setPos(10, 10);

// Add label
const label = new lv.label(button);
label.setText("Click Me");

Event Handling​

ElenixOS's JavaScript APIs use callback functions to handle events:

// Bind click event
button.addEventCb((e) => {
eos.console.log("Button clicked!");
}, lv.EVENT_CLICKED, null);

Naming Conventions​

Constant Naming​

Constants use all uppercase letters with underscores between words:

// Event types
lv.EVENT_CLICKED
lv.EVENT_PRESSED

// Object flags
lv.OBJ_FLAG_CLICKABLE
lv.OBJ_FLAG_CHECKABLE

// Alignment
lv.ALIGN_CENTER
lv.ALIGN_TOP_LEFT

Method Naming​

Methods use camelCase naming convention with lowercase first letter:

// Set methods
button.setSize(width, height);
button.setPos(x, y);

// Get methods
const width = button.getWidth();
const height = button.getHeight();

Constructor Naming​

Constructors use camelCase naming convention with lowercase first letter:

// Create objects
const button = new lv.button(parent);
const label = new lv.label(parent);

Error Handling​

Exception Handling​

Use try-catch to catch potential errors:

try {
// Code that may throw errors
const button = new lv.button(null);
} catch (e) {
// Handle error
eos.console.error("Error creating button:", e);
}

Error Types​

ElenixOS's JavaScript APIs may throw the following types of errors:

  • TypeError - Parameter type error
  • ReferenceError - Reference to non-existent object
  • RangeError - Parameter value out of range

Memory Management​

Object Lifecycle​

In ElenixOS, object lifecycles are managed by the garbage collector. When objects are no longer referenced, the garbage collector automatically reclaims their memory.

Manual Release​

For some resource-intensive objects, manual release can be performed to save memory:

// Create object
const timer = new lv.timer(parent);

// Use object
// ...

// Manually release object
timer.delete();

Asynchronous Operations​

Timers​

See Timer.

Debugging Tips​

Log Output​

Use eos.console.log to output log information:

eos.console.log("Debug information");
eos.console.error("Error information");
eos.console.warn("Warning information");