Skip to content

Releases: w1ne/labwired-core

LabWired v0.17.3

Choose a tag to compare

@github-actions github-actions released this 22 Jun 11:21
a6f160d

Installation

curl -fsSL https://labwired.com/install.sh | sh

Or with a specific version:

LABWIRED_VERSION=v0.17.3 curl -fsSL https://labwired.com/install.sh | sh

See the full changelog for what's new.

LabWired v0.17.2

Choose a tag to compare

@github-actions github-actions released this 22 Jun 10:28
c8d8d03

Installation

curl -fsSL https://labwired.com/install.sh | sh

Or with a specific version:

LABWIRED_VERSION=v0.17.2 curl -fsSL https://labwired.com/install.sh | sh

See the full changelog for what's new.

LabWired v0.17.1

Choose a tag to compare

@github-actions github-actions released this 19 Jun 23:13
9f03907

Installation

curl -fsSL https://labwired.com/install.sh | sh

Or with a specific version:

LABWIRED_VERSION=v0.17.1 curl -fsSL https://labwired.com/install.sh | sh

See the full changelog for what's new.

LabWired v0.17.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 17:54
14cda44

Installation

curl -fsSL https://labwired.com/install.sh | sh

Or with a specific version:

LABWIRED_VERSION=v0.17.0 curl -fsSL https://labwired.com/install.sh | sh

See the full changelog for what's new.

LabWired v0.16.0

Choose a tag to compare

@github-actions github-actions released this 18 Jun 18:35
b40584b

Installation

curl -fsSL https://labwired.com/install.sh | sh

Or with a specific version:

LABWIRED_VERSION=v0.16.0 curl -fsSL https://labwired.com/install.sh | sh

See the full changelog for what's new.

v0.15.0: dual-core ESP32 sim + Arduino-ESP32 / FreeRTOS bring-up

Choose a tag to compare

@w1ne w1ne released this 24 May 08:29
f154297

Added

  • Dual-Core ESP32 / ESP32-S3 Simulation: Round-robin step loop with PRO_CPU / APP_CPU, PRID register exposing xPortGetCoreID(), cross-core IPI bridge wiring DPORT_CPU_INTR_FROM_CPU_n_REG triggers into the target CPU's INTERRUPT bit so esp_crosscore_int_send_yield lands.
  • Runtime Snapshot Subsystem: Machine::with_secondary_cpu, Machine::{take,apply}_runtime_snapshot, CLI snapshot capture subcommand, WASM apply_runtime_snapshot(bytes) + take_runtime_snapshot(). Cold-boot collapses from 30 s to ~0.5 s in the playground.
  • Arduino-ESP32 / FreeRTOS Bring-Up Thunks (crates/core/src/peripherals/esp32s3/rom_thunks.rs): abort_halt, esp_clk_cpu_freq_240mhz, x_queue_create_mutex_static_echo, x_task_get_current_task_handle, return_pd_true, spi_start_bus_fake, spi_class_begin_transaction (lazy spi_t init with USR_MOSI auto-enable), xQueueGiveMutexRecursive, esp_log_impl_lock, recursive-mutex create stubs, esp_ipc_init/esp_ipc_isr_init no-ops.
  • Loader Auto-Discovery: extract_arduino_esp32_thunks + resolve_symbol_in_elf resolve HardwareSerial / SPI / mutex / log-lock / IPC-init symbols by name from the ELF's .symtab, so installed thunks gate strictly on symbol presence (stripped ELFs that don't import the symbol are untouched).
  • AgentDeck Boot Snapshot Pipeline: Captured post-paint state blob; playground replays the snapshot in ~0.5 s.
  • Unified Demo Registry: BoardConfig-driven fetch-demo-firmware.sh and per-board snapshot blobs.
  • Dual-Core PxList Diagnostic Dump: CLI flag dumps the kernel ready/delayed list state on both cores for diagnosing scheduler regressions.

Changed

  • Xtensa WSR.INTSET Semantics: SR id 226 writes now raise pending IRQ bits in INTERRUPT instead of being silently dropped — required for FreeRTOS portYIELD() software interrupt to fire (crates/core/src/cpu/xtensa_sr.rs).
  • CCOMPARE0 Ack-on-Write: Writes ack bit 6 in INTERRUPT and re-raise if the new compare value is already ≤ CCOUNT, closing the silent-timer case where boot-allocator latency pushed the first compare past CCOUNT (crates/core/src/cpu/xtensa_sr.rs).
  • xTaskGetCurrentTaskHandle: Removed from generic nop_return_zero list — now uses dedicated thunk reading pxCurrentTCB[core] via the PX_CURRENT_TCB_ADDR thread-local seed.
  • Fake spi_t Region: Moved out of the firmware DRAM allocator's reach (0x3FFD_F0000x3FFF_FF00 in SRAM1) to prevent silent overwrite by heap growth.
  • return_pd_true Visibility: Now emits a one-time tracing::warn! on first call so the stub's activation is loud in logs — future regressions where a take should block will be visible instead of silently succeeding.

Fixed

  • IPC-Task Spin / Scheduler-Tick Starvation: Combined fix from WSR.INTSET raising SOFTWARE0 and CCOMPARE0 ack-and-rearm; AgentDeck and reader sketch both progress past xQueueSemaphoreTake into app_main / setup().
  • esp_newlib_locks_init Assertion Failure: xQueueCreateMutexStatic returning 0 now echoes the static-buffer argument so the lock pointer is non-NULL.
  • GxEPD2 / SSD1680 SPI Writes Reach the Panel: SPIClass::beginTransaction lazy init enables USER_REG.USR_MOSI (bit 27) when the sketch never calls SPI.begin() explicitly — reader sketch black-plane bytes 0 → 1,429 non-FF (29% glyph coverage) across 3 full refresh cycles, 19,039 SPI3 transactions.
  • Print::print / Print::write Dispatch: Restored real virtual dispatch so display.print("text") flows Print → Adafruit_GFX::write → drawChar → drawPixel; only HardwareSerial::write and the uart* helpers stay stubbed.
  • Dead Inherent Watchpoint Removed: SystemBus::write_u32/write_u16 inherent watchpoint from #93 never fired (bus dispatch goes through trait impl) — code path removed.
  • mkdocs.yml Drift: repo_url typo (libwired-corelabwired-core); nav entries pointing at nonexistent SUPPORTED_DEVICES.md, verification_audit.md, development/git_flow.md corrected or removed.
  • SECURITY.md: Supported versions table updated to 0.15.x; advisory URL corrected from labwired to labwired-core.
  • Example Lints: Cleared clippy::identity_op, needless_range_loop, doc_overindented_list_items, and unused-variable warnings across sensor labs and firmware demos; gated firmware-f407-demo inline ARM asm behind #[cfg(target_arch = "arm")] so host clippy doesn't choke on it.

Playground demo firmware — v1

Choose a tag to compare

@w1ne w1ne released this 21 May 13:28

Pre-stripped firmware ELFs the labwired playground fetches at build time so they don't bloat git history.

Files

  • demo-agentdeck.elf (1.3 MB) — AgentDeck firmware, stripped of debug info from the 22 MB Arduino-ESP32 + GxEPD2 + Adafruit_GFX build (xtensa-esp32-elf-strip --strip-all). Byte-exact SPI output to the unstripped binary; renders "IDLE / Waiting for daemon / ATTACH / DECIDE / STOP" with 782 non-white black-plane bytes when stepped through 30M Xtensa cycles.

Why this repo (labwired-core) and not labwired
Releases here are public; the playground monorepo (labwired) is private. The fetch script in the playground prebuild hook needs an unauthenticated curl-able URL — a public release is the cleanest.

v0.14.0: Hardware-validated board expansion

Choose a tag to compare

@w1ne w1ne released this 12 May 19:35

Added

  • ESP32-S3 / Xtensa LX7 Support: Added the Xtensa LX7 CPU backend, ESP32-S3 boot path, GPIO, interrupt matrix, SYSTIMER, ROM thunk, flash XIP, USB serial/JTAG, and I2C/TMP102 support.
  • Hardware Oracle Harness: Ported the hardware-oracle capture/replay harness to the core repo, including OpenOCD/GDB capture tooling and fixture-backed oracle tests.
  • Hardware-Validated STM32L476 Coverage: Added the NUCLEO-L476RG board package, modern STM32L4 peripherals, CubeMX-style HAL firmware coverage, and hardware trace fixtures.
  • Hardware-Validated STM32F407 I2C Coverage: Added STM32F407 board configs, firmware, oracle captures, survival traces, and I2C sensor coverage for AHT20/BMP280 flows.
  • Expanded Peripheral Models: Added or extended STM32L4/L4-style peripherals including PWR, FLASH, RNG, CRC, timers, RTC, watchdogs, DAC, EXTI, DMA, SDMMC, FMC, TSC, COMP, bxCAN, SAI, USB OTG, and QSPI.
  • ISA and Snapshot Coverage: Added ARM Thumb-2 instructions, RISC-V atomics, async IRQ fixes, snapshot schema validation, ESP32-C3 survival coverage, and an ISA coverage matrix.
  • Trace-Level Determinism Proof: Extended determinism.rs to compare trace.json SHA-256 hashes across 5 runs; added as determinism-proof CI gate.
  • Deterministic Trace Serialization: Switched InstructionTrace.register_delta from HashMap to BTreeMap for stable JSON key ordering.
  • Auto-Generated Compatibility Matrix: scripts/generate_compat_matrix.py enumerates chip configs and smoke test coverage; output uploaded as CI artifact.
  • Conditional Breakpoints: DAP breakpoints with condition and hitCondition expression evaluation (register comparisons, hex/decimal literals).
  • Data Breakpoints: supportsDataBreakpoints DAP capability; triggers on memory writes to watched addresses via MemoryTracker.
  • Enhanced Evaluate Handler: DAP evaluate supports *(0xADDR) memory dereference and Rn +/- offset register arithmetic.
  • Improved Disassembly: Thumb-2 32-bit instruction decoding in DAP disassemble handler; decode_thumb_32 re-exported from decoder module; source line correlation via DWARF symbols.

Changed

  • Release Version: Workspace version updated to 0.14.0 across workspace-managed crates.
  • Documentation Structure: Consolidated architecture docs, removed stale root-level junk and orphan changelog files, corrected stale core/... subpath prefixes, and refreshed README positioning around hardware-validated parity.
  • Catalog Metadata: Refreshed onboarding target pass-rate metadata and board coverage tables for modeled chips.
  • Build Profile: Enabled thin LTO for release builds.

Fixed

  • I2C Fidelity: Closed STM32 I2C state-machine gaps exposed by F407 firmware and added runtime-attached AHT20/BMP280 component support.
  • Cortex-M Fidelity: Fixed DBGMCU IDCODE behavior, vector-table handling, semihosting breakpoints, bit-band gating by architecture, and multiple Thumb-2 decode/execute gaps surfaced by hardware traces.
  • DAP Robustness: Capped readMemory requests and made board I/O matching exhaustive.
  • CI and Fixture Stability: Repaired workspace CI issues, RP2040 firmware configuration, nightly test failures, and firmware survival tests.

v0.12.2: Quality & Maintenance Release

Choose a tag to compare

@w1ne w1ne released this 16 Feb 20:06

Quality Improvements

  • Applied cargo fmt across workspace
  • Fixed 39 clippy warnings (unnecessary casts, redundant imports)
  • Suppressed benign clippy warnings to ensure clean CI
  • Removed unused GPIO constants

CI/CD

  • All crates pass 'cargo check', 'cargo test', 'cargo fmt', and 'cargo clippy -D warnings'
  • Documentation builds successfully

Notes

  • This release establishes a trunk-based development baseline.
  • 'demo_blinky' functional test failure is a known issue tracked for future fix.

v0.12.0: Documentation Overhaul & Architecture Unification

Choose a tag to compare

@w1ne w1ne released this 16 Feb 09:56

🚀 Highlights

Documentation Overhaul & Architecture Unification
This release introduces a completely restructured documentation site based on the Diataxis framework, alongside critical architectural improvements in the SVD transformation pipeline and CPU core instruction fidelity.

✨ New Features

  • Documentation Overhaul: Migrated to MkDocs with Material theme, reorganized into Tutorials, How-To, Reference, and Explanation sections.
  • Architecture Unification: Native ingestion of Strict IR (JSON) in the simulation core, bridging labwired-ir and labwired-config.
  • Asset Foundry Hardening: Enhanced SVD transformation with flattened inheritance, register array unrolling, and cluster flattening.
  • Timeline View: Professional visualization of instruction trace data in the VS Code extension.

🐛 Bug Fixes

  • Critical Instruction Regression: Fixed io-smoke failure by implementing proper Thumb-2 IT (If-Then) block support in the CortexM core.
  • Instruction Coverage: Expanded modular decoder and executor for MOVW, MOVT, LDR.W, STR.W, and UXTB.W.
  • Structural Stability: Refactored CPU step loop for improved variable scoping and exception handling consistency.

🛠 Improvements

  • Support Strategy: Defined Tier 1 Device Support (STM32F4, RP2040, nRF52) in SUPPORTED_DEVICES.md.
  • Core Guides: Added comprehensive architecture_guide.md and board_onboarding_playbook.md.

📦 Dependency Updates

  • Verified workspace-wide compatibility and version alignment for the 0.12.0 milestone.

Full Changelog: https://github.com/w1ne/labwired-core/blob/v0.12.0/CHANGELOG.md