Skip to content

Releases: emobotics-dev/oxiforge

oxiforge 0.4.0

Choose a tag to compare

@hsteinhaus hsteinhaus released this 21 Jul 09:09
4e8475a

An oxivgl 0.6.0 release: the dependency moves 0.4.0 → 0.6.0 (breaking for
crates that pinned oxivgl 0.4.x, hence the minor bump — oxiforge's own API and
generated code are unchanged), and the bundled examples now run their LVGL
heaps in PSRAM on both M5Stack Fire (ESP32) and CoreS3 (ESP32-S3).

Changed

  • oxivgl dependency bumped 0.4.0 → 0.6.0. Generated code is unchanged
    across both steps — 0.5.0 (POINTER touchscreen indev, keypad hold-to-repeat)
    and 0.6.0 (ESP32-S3/CoreS3 support, the oxivgl::mem PSRAM pool, LVGL's
    built-in TLSF allocator, a panicking LV_ASSERT_HANDLER) are additive or
    runtime-only, and the sole widget-API deprecation (Label::text_long) is one
    oxiforge never emitted. The bump is carried so consuming crates resolve a
    single oxivgl version across the build-dep (oxiforge) and runtime-dep.
  • Font references now require the face to be enabled in the app's
    lv_conf.h.
    oxivgl 0.5.0 gates each built-in Font const to the faces the
    LVGL build exposes, so a text_font: naming a disabled face is now a cannot find value … error against the generated code (documented in the YAML spec).
    Apps may drop unused Montserrat faces to save flash.

Examples

  • All three examples now put LVGL's heap in PSRAM and build for both boards.
    The example crates were ported to the oxivgl 0.6.0 harness: a fire27 /
    cores3 board feature selects M5Stack Fire (ESP32) or CoreS3 (ESP32-S3), the
    m5stack-core BSP handles bring-up, and example_main_psram! (nav examples
    use the underlying board_body!(…, nav, …)) hands a 512 KiB PSRAM region to
    oxivgl::mem::reserve_pool so the generated widget tree allocates from
    external RAM. The shared lv_conf.h switched to LV_STDLIB_BUILTIN with
    LV_MEM_POOL_EXPAND_SIZE sized for the pool. The three crates share one
    examples/ cargo workspace carrying the esp-hal [patch.crates-io] fork
    (examples/HIL only — cargo publish strips it, so the published library
    still resolves stock crates.io esp-hal). Host (SDL2) builds are unchanged and
    run on LVGL's internal pool.
  • Example LV_ASSERT_HANDLER now panics instead of while(1); (#38). The
    shared examples/conf/lv_conf.h routes LVGL assertions (a failed
    lv_malloc, a NULL object) through oxivgl 0.6.0's oxivgl_lv_assert_handler
    → the platform panic path (esp-backtrace on target, a failing test on host),
    ending the silent-spin freeze class instead of hanging with no message.

oxiforge 0.3.0

Choose a tag to compare

@hsteinhaus hsteinhaus released this 12 Jun 16:56
a033460

A memory-efficiency release on oxivgl 0.4.0: generated views now pay one
lv_style_t per distinct style treatment instead of per widget, the last
per-create heap leaks are gone, new YAML surface covers background images
and per-view resource budgets, and the JSON schema is generated from the
model types.

Added

  • Background-image style props — bg_image_src (an extern
    lv_image_dsc_t symbol; oxiforge emits the declaration, the app links the
    asset), bg_image_opa, bg_image_recolor, bg_image_recolor_opa,
    bg_image_tiled. Usable in style_definitions, inline widget styles,
    state/part styles, and directly on pages — a whole-screen backdrop is a
    page-level styles: ref. (#30)
  • Per-view resource budgets. budget: { max_objects, max_depth } on a
    page or toast emits oxivgl::diag::assert_budget after creation — a
    debug-build tripwire so a widget-count regression fails CI/HIL instead of
    OOMing a constrained target. No-op in release builds. (#33)
  • The JSON schema is now generated from the model types (schemars behind
    the new schema feature; gen_schema bin) and covers all 34 widgets and
    every property the parser accepts — the previous hand-written schema was
    stale at the 0.1.0 surface and structurally rejected valid documents. A CI
    drift test fails when model.rs changes without regeneration. (#35)

Changed

  • oxivgl dependency bumped 0.3.3 → 0.4.0 — shared-style model
    (deprecated inline setters), diag resource toolkit, background-image
    API. (#30)
  • Referenced styles are built once per create_*() and shared by every
    referencing widget (hoisted let style_<id> = style_<id>();). Previously
    N references built N duplicate lv_style_t, resident for the view's
    lifetime. Zero visual change. (#30)
  • Page/toast-level style props build a shared Style applied via
    add_style instead of the Obj inline setters deprecated in oxivgl
    0.4.0. The old screen-only prop subset is gone: previously
    silently-dropped page props (pad_all, radius, …) are now emitted. (#30)
  • Structurally identical anonymous styles are deduplicated within a
    create_*() — inline/state/part styles with the same setter body share
    one lv_style_t. (#32)
  • model::Page, model::ToastDef gained a budget field and
    model::StyleProps gained the bg_image_* fields
    — code constructing
    these types literally must add the new fields; the YAML schema is purely
    additive. (#30, #33)

Fixed

  • Grid-track and AnimImg frame arrays no longer leak per create_*().
    Both are compile-time constants and now live in function-local statics
    (frame arrays behind a generated Sync wrapper) instead of
    Box::leak — previously an accumulating leak on any repeatedly-opened
    view using layout: grid or anim_img. (#31)
  • A one-sided grid_columns/grid_rows no longer generates
    uncompilable code
    — the absent axis gets a terminator-only dsc
    array. (#31)
  • Image symbols in toasts are now declared. Symbol collection scans
    pages and toasts — AnimImg/Imagebutton sources inside a toast
    previously produced undeclared-symbol errors. (#30)
  • style_definitions gradient refs are validated (previously
    unchecked); bg_image_src is validated as a Rust identifier. (#30)
  • Documentation rot swept. README/CLAUDE.md no longer describe the
    abandoned Box::leak + mem::forget model; the YAML spec documents the
    full 0.2.0/0.3.0 surface (events, toasts, views, feature-gated widgets)
    and marks theme: as reserved; CR docs carry resolution statuses. (#36)