The logic analyzer that 2026-08-08-hardcut-plan Tasks 8–10 depend on is in hand — a Logic-24M-8CH FX2LP/Saleae clone bought 2026-08-08, arrived 2026-08-11 — and this note records both the instrument itself (it was never written down as an owned item) and the macOS capture toolchain decision made on 2026-08-29: sigrok-cli + Surfer, explicitly not PulseView.

For Agents

Device: generic Cypress CY7C68013A (FX2LP) 8-channel / 24 MHz Saleae clone. sigrok driver = fx2lafw. No capture memory — it streams over USB 2.0. Toolchain: brew install sigrok-cli surfer. Capture to VCD with sigrok-cli, view in Surfer. PulseView does not exist for Apple Silicon — see below. Two things that will bite you: the FX2 firmware blob is not in Homebrew and must be dropped into ~/.local/share/sigrok-firmware/ by hand; and 24 MHz silently drops samples — use 1 MHz for this project. Used by: Task 9: Hardware-in-the-loop verification step 4, the run-cap assertion on real hardware. Open question: Saleae Logic 2 is NOT ruled out — the clone reports the original Saleae Logic’s USB ID (0x0925/0x3881) and Saleae still nominally supports it. Untested. Try it at the bench before assuming sigrok is the only path — but sigrok remains the recommendation for the run-cap assertion either way. Not for bus protocol decoding — this project captures raw digital ignition timing only.

The Instrument

ModelLogic-24M-8CH“Logikai analizátor, 8 csatorna, 24MHz (DZ366, Saleae kompatibilis)“
What it actually isGeneric Cypress CY7C68013A (FX2LP) based 8-channel, 24 MHz Saleae Logic clone
USB IDVID 0x0925 / PID 0x3881 — the EEPROM reports the exact USB ID of the original 2008-era Saleae Logic. That is what “Saleae kompatibilis” on the listing means: it impersonates that specific device
sigrok driverfx2lafw
SupplierHESTORE, cikkszám 100.355.03, 3 975 Ft, qty 1
Ordered2026-08-08 — order H26/7333913
Arrived2026-08-11
Product pagehestore.hu/prod_10035503.html
Cart export on disk/Users/levander/Downloads/hestore_20260808.xml

Probe accessories, same order:

CikkszámPartQty
100.420.73TESTHOOK1-RD — clip-on test hook, red2
100.420.74TESTHOOK1-YE — clip-on test hook, yellow2

Four hooks against eight channels, so a five-node capture needs the hooks plus jumper wire into the breadboard.

What It Is For Here

Digital timing capture of the ignition path — not protocol decoding. The nodes that matter, from Task 8: Breadboard the front end, flip-flop and shunt and Task 9:

NodeWhere to clipWhy
IGt (emulator)bench emulator ESP32 GPIO 4the fake ECM spark command; the reference clock for everything else
IGf (emulator)bench emulator ESP32 GPIO 5igniter feedback, active-low, 200 µs after each IGt falling edge
Dmain ESP32 GPIO 15what the firmware asks for
Q74HC74 pin 5 (1Q)what the hardware allows — drives the shunt FET
node Athe IGt line at the shunt drainthe actual result the igniter sees

Two assertions are what the instrument exists to prove, and both are safety-critical:

  1. No run of suppressed events ever exceeds MAX_CONSECUTIVE_CUTS = 5 — capture 10 s at r 6400, export, count. This is the test that protects the fuel supply (Task 9: Hardware-in-the-loop verification step 4, re-verified against a real igniter at Task 10 step 5).
  2. Q only ever changes coincident with IGt’s falling edge — D may move at any time and must not propagate until the next falling edge. This is the flip-flop interlock that makes the engine-destroying mid-dwell bug physically unreachable (The Engine-Destroying Bug, Made Physically Unreachable).

Decision: sigrok, via sigrok-cli + Surfer — not PulseView

Verified on macOS / Apple Silicon, 2026-08-29.

This is the right tool for this job, and the fallback that definitely works

It is not “the only thing that can drive the device” — Open Question: Saleae Logic 2 — untested, try it first may well work too and has a far nicer UI. The recommendation stands on its own merits regardless of how that test goes: the load-bearing task here is proving that the gate never moves while IGt is high across ~10,000 events, and that is an assertion over a VCD file, not something anyone should be doing by eye in a GUI.

brew install sigrok-cli surfer
ComponentVersionarm64 status
sigrok-cli0.7.2✅ native arm64 Homebrew bottle, through arm64_tahoe
libsigrok0.5.2✅ native arm64 bottle
libsigrokdecode0.5.3✅ native arm64 bottle
surfer0.7.0✅ bottled in homebrew-core — modern Rust waveform viewer, reads VCD / FST / GHW
PulseViewdoes not exist on this platform
sigrok-firmware-fx2lafw0.1.7not in Homebrew — manual install, see gotcha below

Why PulseView is off the table

  • Not in Homebrew at all. brew search pulseview returns only pulseaudio; the formula API 404s.
  • sigrok.org’s macOS nightly DMGs are dead links — both PulseView-NIGHTLY.dmg and sigrok-cli-NIGHTLY.dmg return HTTP 404.
  • The sigrok wiki’s Mac page was last edited July 2023 and still says “64bit x86 only”.
  • Upstream sigrok is not dead — libsigrok and pulseview both have commits from Nov 2025 — but there has been no release since 2020 and no macOS binary at all.

So the GUI half of sigrok is unavailable, while the library and CLI half is healthy and natively bottled. Splitting the job — sigrok-cli captures → VCD → Surfer views — recovers the whole workflow with maintained, native software.

Other software considered

Recorded so this is not re-litigated later. Saleae Logic 2 is deliberately not in this table — it is an open question, not a rejection; see the next section.

OptionVerdictWhy
DSView (DreamSourceLab)Targets DSLogic hardware. Latest release v1.3.0, 2023-07-18, a single DSView-v1.3.0.dmg, x86 only
ngscopeclient (scopehal)Revisit later — the one to watchThe genuinely modern, GPU-accelerated option. v0.2.2 released 2026-08-20 with a native ngscopeclient-0.2.2-Darwin-arm.dmg, supports Apple Silicon GPUs. But it has no fx2lafw driver — open requests at scopehal#270 (fx2lafw) and scopehal#16 (Saleae), with nobody working on either

Open Question: Saleae Logic 2 — untested, try it first

Status: UNTESTED. Settle this at the bench in 60 seconds — do not record it as decided in either direction

The device has never been plugged into Logic 2. An earlier version of this note called it a “dead end” on the grounds that modern Saleae software rejects non-Saleae hardware. That was wrong and has been retracted — see below. Logic 2 is native arm64 with the best UI in the category, so if it takes, it is worth having.

Why it plausibly works:

  • The clone’s EEPROM reports VID 0x0925 / PID 0x3881 — the original Saleae Logic’s own USB ID. Confirmed in libsigrok, src/hardware/fx2lafw/api.c:
    { 0x0925, 0x3881, "Saleae", "Logic", NULL, "fx2lafw-saleae-logic.fw", ... }
    whose comment lists six known clones filed under that same ID: EE Electronics ESLA100, Robomotic MiniLogic, Robomotic BugLogic 3, MCU123, Hantek 6022BL (in LA mode), Instrustar ISDS205X (in LA mode).
  • The FX2 has no flash. Firmware loads into RAM over USB at plug-in, so whichever host software connects first uploads its own — which is exactly why one board can be driven by either Saleae’s software or sigrok, with no modification and nothing to undo.
  • Saleae’s own docs still claim support for this ID: “The original Logic device is supported on all releases, including the original Windows-only software, versions 1.0.0 through 1.0.34.” (source)
  • The clone-resistance that genuinely exists applies to Saleae’s newer hardware revisions (Oct 2022+), not to the original Logic’s USB ID.

Two real caveats — neither a technical block, and the call is the user’s:

  1. This is a bare FX2 wearing the ID, not the original board. Whether Logic 2’s firmware-upload and streaming handshake actually completes against it is unverified, and community reports are mixed.
  2. Saleae’s EULA restricts the software to Saleae-manufactured hardware. A licensing question, not a capability one.

Related — Logic 1.x is deprecated, and don't bother

Last version 1.2.40, macOS build Logic-1.2.40-MacOS.dmg, OS X 10.8+ and Intel-only — it would need Rosetta. Its Decoded Protocols Panel was removed in that very version. (older releases) If Logic 2 does not take the device, the answer is sigrok-cli, not Logic 1.x.

Gotchas

The FX2 firmware is not in Homebrew, and the device is useless without it

The CY7C68013A has no onboard flash. Its firmware is uploaded over USB on every single plug-in, and brew does not ship it — there is no sigrok-firmware-fx2lafw formula. Until the blob is in place, sigrok-cli --scan finds nothing usable.

curl -LO https://sigrok.org/download/binary/sigrok-firmware-fx2lafw/sigrok-firmware-fx2lafw-bin-0.1.7.tar.gz
mkdir -p ~/.local/share/sigrok-firmware
tar -xzf sigrok-firmware-fx2lafw-bin-0.1.7.tar.gz --strip-components=1 \
  -C ~/.local/share/sigrok-firmware
ls ~/.local/share/sigrok-firmware/fx2lafw-saleae-logic.fw   # the one this clone needs

Where libsigrok looks, confirmed by reading src/resource.c, in order:

  1. $SIGROK_FIRMWARE_DIR
  2. $SIGROK_FIRMWARE_PATH
  3. g_get_user_data_dir()/sigrok-firmware~/.local/share/sigrok-firmware on macOS
  4. the system data dirs

Path 3 is why ~/.local/share/sigrok-firmware/ is the right home for it and needs no env var.

Do not capture at 24 MHz — use 1 MHz. The device has no memory and drops samples silently

This clone has zero capture RAM. It streams straight over USB 2.0 bulk at 1 byte per sample — all 8 channels packed into that byte regardless of how many are enabled, so disabling channels buys you nothing.

24 MHz = 24 MB/s, right at the practical USB 2.0 bulk ceiling. When it overruns it drops samples without saying so — the capture just quietly lies.

For ignition timing that headroom is pointless anyway. A 4-cylinder at 6000 r/min fires ≈200 sparks/second and IGt dwell is in the millisecond range. 1 MHz gives 1 µs resolution at 1 MB/s — roughly 1000× finer than anything here needs, with enormous margin, and cheap enough that minutes-long captures are trivial.

Capture Shape

The intended workflow. Not yet run against the devicehardcut is parked with no code written and the bench rig is not set up, so this is the shape to start from, not a verified transcript.

sigrok-cli --scan
sigrok-cli -d fx2lafw --config samplerate=1m \
  --channels D0,D1,D2,D3,D4 --time 10s \
  -o /Users/levander/vitara/hardcut/bench/captures/runcap.vcd -O vcd
surfer /Users/levander/vitara/hardcut/bench/captures/runcap.vcd

VCD is the right export format precisely because it is what Surfer reads, and because a text VCD can also be counted by script — which is how the “no run longer than 5” assertion should actually be checked, rather than by eye.