Repository navigation
Releases
Releases · ElectronicCats/faultycat-tools
v1.0.4
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
- @HeikkiRadu made their first contribution in #8
Full Changelog: v1.0.3...v1.0.4
V1.0.3
FaultyCat v1.0.3
Added
- Lab notebook layer: the standalone
faultycat-labpackage 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.pysuite. Install via the[notebook]/[interactive]
extras. - Docs for the notebook layer (
docs/CW-MAPPING.md,docs/architecture.html)
indexed fromdocs/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 thebus:config.ifaceform and falls back to the
per-port/dev/cu.usbmodem<...>device-name digit, sodevicescorrectly
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
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_statusbyte is now decoded instead of being printed as raw hex. A failed step readsfire=CHARGE_TIMEOUTorfire=emfi:HV_NOT_CHARGEDrather thanfire=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 usetriggerselector in the TUI Campaign modal, applied to the EMFI/Crowbar module right beforeconfiguredecode_fire_status()inprotocols/campaign.py, decoding a step's status byte across its three disjoint namespaces:0x00clean,0x80..0xBFengine*_err_t(rendered asengine:ERR_NAME),0xE0..0xEFexecutor-phase failures (CONFIGURE_ERR,ARM_ERR,CHARGE_TIMEOUT,FIRE_REJECTED,ENGINE_STUCK) via the newCampaignFireStatusenumCampaignStatus.err_hint()— an actionable, human-readable explanation for eachCampaignErr(BAD_CONFIG,NOT_CONFIGURED,BUS_BUSY,STEP_FAILED,INTERNAL)
Improvements
- The TUI Campaign panel turns red on
ERROR, highlights the offendingstate/errvalues, 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 statusandcampaign watchprint the error hint, andwatchnow closes with an error (not a success) line when the sweep ended in a faultcampaign drain/campaign watchtables 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
CampaignFormStatevalidates 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
--triggeroption
Bug Fixes
- Fixed a step's
fire_statusbeing reinterpreted as a bare*_err_t, which made an HV charge race report as the unrelatedTRIGGER_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.2acrossVERSION, CI workflows, Debian control, the macOS build script, and the Windows installer
Full Changelog: v1.0.1...v1.0.2
v1.0.1
FaultyCat TUI v1.0.1
Highlights
- EMFI campaigns in the TUI: the Campaign panel now drives both the
crowbarandemfiengines (previously crowbar-only). The selected engine's sweep runs over its own CDC, sharing the port with the live status client. - Safer
emfi arm:armnow waits for the high-voltage capacitor to actually reachCHARGEDbefore reporting success, so a followingfireno longer hits a misleading "not charged yet" error.
New Features
- EMFI-engine campaign support in the TUI: pick
crowbar(CDC1) oremfi(CDC0) in the Campaign modal; the live panel, hotkeys, and start/stop/drain all follow the pinned engine emfi arm --charge-timeout-soption to bound how long to wait for the HV cap to charge (default 10s)
Improvements
emfi armpollsstatusuntil the HV capacitor isCHARGEDinstead 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, andCampaignStatusexpose a sharedas_rows(), andCampaignResulta sharedrender_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 armthat could lead to a misleadingINTERNALerror when firing before the HV cap finished charging
Packaging
- Bumped version to
1.0.1across CI workflows, Debian control, macOS build script, and the Windows installer
Full Changelog: v1.0.0...v1.0.1
v1.0.0
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 armcommands for logic-analyzer capture, with auto-launch and DTR recovery for PulseView- Unified
lacommand 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-envnow 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
TypeErrorduring 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