Skip to content

Releases

v1.0.4

Choose a tag to compare

@HeikkiRadu HeikkiRadu released this 23 Sep 21:38
bd62bc9

What's Changed

  • feat: Update project references to faultycat-tools by @Darcko123 in #7
  • fix: decode I2C on any header channel without an explicit --trigger by @HeikkiRadu in #8

New Contributors

Full Changelog: v1.0.3...v1.0.4

V1.0.3

Choose a tag to compare

@Darcko123 Darcko123 released this 04 Sep 16:58
7ab38c2

FaultyCat v1.0.3

Added

  • Lab notebook layer: the standalone faultycat-lab package is now folded
    into this repo as a second installable package (src/faultycat,
    import faultycat as fc) — a ChipWhisperer-style notebook API (engines,
    campaign, scanner, UART target, GlitchController, plotting), plus the
    lab/ tree (notebooks, Arduino target sketches, scripts, docs) and a new
    tests/test_facade.py suite. Install via the [notebook]/[interactive]
    extras.
  • Docs for the notebook layer (docs/CW-MAPPING.md, docs/architecture.html)
    indexed from docs/00-Overview.md.

Fixed

  • macOS: composite FaultyCat CDC interfaces (crowbar/EMFI/etc.) were all
    collapsing onto the crowbar interface because pyserial reports the same
    shared USB-topology location for every CDC of the device. Interface
    mapping now anchors on the bus:config.iface form and falls back to the
    per-port /dev/cu.usbmodem<...> device-name digit, so devices correctly
    detects all interfaces again. Regression tests added for the hubbed macOS
    shape.
  • glitch() now waits for the HV cap to report charged before firing,
    instead of firing on a possibly-uncharged cap.
  • Pre-commit lint errors across src/faultycat/ resolved; lab/ excluded
    from pre-commit.

Changed

  • Notebook explanatory text reworked for clarity across the lab notebooks;
    stale cell outputs refreshed.

Internal

  • Version bumped to 1.0.3 across build workflows, the macOS/Windows/Debian
    installers, and packaging metadata.

What's Changed

  • Integrate FaultyCat lab notebook layer, fix macOS CDC mapping, and wait-for-HV-charge glitching by @Darcko123 in #6

Full Changelog: v1.0.2...v1.0.3

v1.0.2

Choose a tag to compare

@Darcko123 Darcko123 released this 28 Jul 20:30
bf415fa

FaultyCat TUI v1.0.2

Highlights

  • Per-shot trigger for campaigns: the sweep no longer inherits whatever trigger the engine happened to be left with. Both the CLI (campaign configure --trigger) and the TUI Campaign modal now expose a trigger selector and pin it on the engine module right before the sweep config, so you no longer have to open the separate EMFI/Crowbar modal first.
  • Readable failure causes: a step's fire_status / verify_status byte is now decoded instead of being printed as raw hex. A failed step reads fire=CHARGE_TIMEOUT or fire=emfi:HV_NOT_CHARGED rather than fire=0x03, and campaign errors come with an actionable hint.
  • Engine-aware width axis: the width sweep is now validated against the selected engine's real driver bounds (crowbar 8..50000 ns, EMFI 1..50 µs), turning a silently-never-arming sweep into an inline form error.

New Features

  • campaign configure --trigger T (immediate, ext_rising, ext_falling, ext_pulse_pos, ext_pulse_neg) — applied to the engine module before the sweep runs; the confirmation line now echoes the trigger in use
  • trigger selector in the TUI Campaign modal, applied to the EMFI/Crowbar module right before configure
  • decode_fire_status() in protocols/campaign.py, decoding a step's status byte across its three disjoint namespaces: 0x00 clean, 0x80..0xBF engine *_err_t (rendered as engine:ERR_NAME), 0xE0..0xEF executor-phase failures (CONFIGURE_ERR, ARM_ERR, CHARGE_TIMEOUT, FIRE_REJECTED, ENGINE_STUCK) via the new CampaignFireStatus enum
  • CampaignStatus.err_hint() — an actionable, human-readable explanation for each CampaignErr (BAD_CONFIG, NOT_CONFIGURED, BUS_BUSY, STEP_FAILED, INTERNAL)

Improvements

  • The TUI Campaign panel turns red on ERROR, highlights the offending state / err values, and prints the hint below the summary
  • Failed result lines in the TUI are tagged with a highlighted decoded suffix (fire=…, verify=…); clean steps render unchanged
  • campaign status and campaign watch print the error hint, and watch now closes with an error (not a success) line when the sweep ended in a fault
  • campaign drain / campaign watch tables show decoded fire/verify causes, falling back to raw hex only for unknown codes
  • The Campaign modal keeps a per-engine width memory: switching the engine Select swaps the width field to that engine's units (and default), preserving whatever you had typed for the other engine
  • CampaignFormState validates the trigger against the supported set and range-checks the width axis with the same limits the manual EMFI/Crowbar modals enforce
  • Quick Reference updated with the new --trigger option

Bug Fixes

  • Fixed a step's fire_status being reinterpreted as a bare *_err_t, which made an HV charge race report as the unrelated TRIGGER_TIMEOUT
  • Fixed a crowbar-style width triplet (ns) being silently reused for an EMFI sweep, where it was read as µs: every per-shot configure was rejected with BAD_CONFIG, the HV cap never charged, and the sweep looked identical to a dead start

Tests

  • New unit tests covering fire-status decoding across all three namespaces (tests/test_protocols_campaign.py) and engine-specific width/trigger validation in the Campaign modal (tests/test_tui_modals.py)

Packaging

  • Bumped version to 1.0.2 across VERSION, CI workflows, Debian control, the macOS build script, and the Windows installer

Full Changelog: v1.0.1...v1.0.2

v1.0.1

Choose a tag to compare

@Darcko123 Darcko123 released this 17 Jul 17:37
90e069e

FaultyCat TUI v1.0.1

Highlights

  • EMFI campaigns in the TUI: the Campaign panel now drives both the crowbar and emfi engines (previously crowbar-only). The selected engine's sweep runs over its own CDC, sharing the port with the live status client.
  • Safer emfi arm: arm now waits for the high-voltage capacitor to actually reach CHARGED before reporting success, so a following fire no longer hits a misleading "not charged yet" error.

New Features

  • EMFI-engine campaign support in the TUI: pick crowbar (CDC1) or emfi (CDC0) in the Campaign modal; the live panel, hotkeys, and start/stop/drain all follow the pinned engine
  • emfi arm --charge-timeout-s option to bound how long to wait for the HV cap to charge (default 10s)

Improvements

  • emfi arm polls status until the HV capacitor is CHARGED instead of returning immediately after kicking off charging
  • CDC0 is now shared between the EMFI status/control client and the emfi-engine campaign client via SharedSerial, mirroring the existing CDC1 crowbar+campaign sharing
  • Centralized status and result formatting: EmfiStatus, CrowbarStatus, and CampaignStatus expose a shared as_rows(), and CampaignResult a shared render_line(), used by both the CLI status tables and the TUI panels (a new status field now only has to be added in one place)
  • Clearer campaign form validation and modal hints for the two supported engines

Bug Fixes

  • Fixed premature "Armed" reporting on emfi arm that could lead to a misleading INTERNAL error when firing before the HV cap finished charging

Packaging

  • Bumped version to 1.0.1 across CI workflows, Debian control, macOS build script, and the Windows installer

Full Changelog: v1.0.0...v1.0.1

v1.0.0

Choose a tag to compare

@Darcko123 Darcko123 released this 06 Jul 21:07
88351a4

FaultyCat TUI v1.0.0

Highlights

  • Logic Analyzer (la): brand-new protocol-agnostic logic analyzer supporting I2C and UART, with SUMP-compatible capture and one-click PulseView integration (auto-launch, auto-discovery of I2C SDA/SCL pins, robust DTR-based handoff/recovery).
  • RP2040 Firmware Update: new command to download the latest firmware from GitHub releases and flash it directly, with automatic boot-mode triggering, mount-point detection, and retry logic for UF2 flashing.
  • UART support: passthrough commands, an interactive UART console, and UART decoding for captured traffic.
  • I2C bus scanning & probing: scan the bus, probe individual addresses, and export captures to VCD.
  • Cross-platform packaging: installable packages/workflows for Arch, Debian, macOS, and Windows.

New Features

  • I2C bus scanning and probing with raw capture decoding and VCD export
  • i2c la / i2c la sump arm commands for logic-analyzer capture, with auto-launch and DTR recovery for PulseView
  • Unified la command covering both I2C and UART protocols
  • UART passthrough commands, console, and decoding
  • Firmware update command for RP2040 (download + flash from GitHub releases)
  • Remote boot-mode trigger for firmware updates
  • Trigger options and overflow handling for logic-analyzer captures
  • Shared sweep-axis parser reused by both CLI and TUI
  • Auto-discovery of I2C SDA/SCL pins
  • Cross-platform packaging workflows (Arch, Debian, macOS, Windows)

Improvements

  • More reliable SUMP session exit via an explicit protocol byte (replacing DTR-based exit)
  • Better SUMP/serial timeout and error handling
  • Improved PulseView executable discovery across platforms (including AppImage on Linux and Windows path fixes)
  • Better UART console disconnection handling and main-loop error handling; exit shortcut changed to Ctrl-X
  • setup-env now Linux-only, with clearer error handling
  • Shell completion install now supported on non-Windows platforms; fixed header output during completion script generation
  • Various internal refactors (thread dispatch consolidation, scanner client renames, shared triplet-parsing utility, mixins for TUI forms/status lines) for consistency and maintainability

Bug Fixes

  • Corrected GitHub API URL and firmware version parsing/matching logic
  • Fixed TypeError during serial read on shutdown
  • Fixed I2C SUMP DTR handling for PulseView handoff
  • Enhanced RP2040 mount-point detection and added retry logic for UF2 flashing reliability

Documentation

  • Overhauled README and project documentation, updated contributor links and images
  • Added PulseView setup guides (AppImage, sample rate, trigger configuration, manual connection, I2C auto-discovery)
  • Documented protocol-agnostic logic analyzer usage and the firmware update process

Full Changelog: https://github.com/ElectronicCats/faultycat-TUI/commits/v1.0.0