Releases: emobotics-dev/oxiforge
Releases · emobotics-dev/oxiforge
Release list
oxiforge 0.4.0
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, theoxivgl::memPSRAM pool, LVGL's
built-in TLSF allocator, a panickingLV_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-inFontconst to the faces the
LVGL build exposes, so atext_font:naming a disabled face is now acannot 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: afire27/
cores3board feature selects M5Stack Fire (ESP32) or CoreS3 (ESP32-S3), the
m5stack-coreBSP handles bring-up, andexample_main_psram!(nav examples
use the underlyingboard_body!(…, nav, …)) hands a 512 KiB PSRAM region to
oxivgl::mem::reserve_poolso the generated widget tree allocates from
external RAM. The sharedlv_conf.hswitched toLV_STDLIB_BUILTINwith
LV_MEM_POOL_EXPAND_SIZEsized for the pool. The three crates share one
examples/cargo workspace carrying the esp-hal[patch.crates-io]fork
(examples/HIL only —cargo publishstrips 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_HANDLERnow panics instead ofwhile(1);(#38). The
sharedexamples/conf/lv_conf.hroutes LVGL assertions (a failed
lv_malloc, a NULL object) through oxivgl 0.6.0'soxivgl_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
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_tsymbol; oxiforge emits the declaration, the app links the
asset),bg_image_opa,bg_image_recolor,bg_image_recolor_opa,
bg_image_tiled. Usable instyle_definitions, inline widget styles,
state/part styles, and directly on pages — a whole-screen backdrop is a
page-levelstyles:ref. (#30) - Per-view resource budgets.
budget: { max_objects, max_depth }on a
page or toast emitsoxivgl::diag::assert_budgetafter 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 newschemafeature;gen_schemabin) 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 whenmodel.rschanges without regeneration. (#35)
Changed
- oxivgl dependency bumped 0.3.3 → 0.4.0 — shared-style model
(deprecated inline setters),diagresource toolkit, background-image
API. (#30) - Referenced styles are built once per
create_*()and shared by every
referencing widget (hoistedlet style_<id> = style_<id>();). Previously
N references built N duplicatelv_style_t, resident for the view's
lifetime. Zero visual change. (#30) - Page/toast-level style props build a shared
Styleapplied via
add_styleinstead of theObjinline 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
onelv_style_t. (#32) model::Page,model::ToastDefgained abudgetfield and
model::StylePropsgained thebg_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 generatedSyncwrapper) instead of
Box::leak— previously an accumulating leak on any repeatedly-opened
view usinglayout: gridoranim_img. (#31) - A one-sided
grid_columns/grid_rowsno 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_definitionsgradient refs are validated (previously
unchecked);bg_image_srcis validated as a Rust identifier. (#30)- Documentation rot swept. README/CLAUDE.md no longer describe the
abandonedBox::leak+mem::forgetmodel; the YAML spec documents the
full 0.2.0/0.3.0 surface (events, toasts, views, feature-gated widgets)
and markstheme:as reserved; CR docs carry resolution statuses. (#36)