bench: the stale-origin drill goes, drills report their verdict, the pgood gate follows the pin

The faultpos live-fire drill armed and commanded a cut at an origin it
called stale to test a refusal the design decided not to gate: its only
outcome was an emission at an unknown position. Removed from the script
and the bench page.

live_fire_drills.py discarded every drill's return value, so the bench
page recorded a failed live-fire drill as OK. The exit status is the
drill's.

laser_pgood is the supply's power-good, high on every healthy machine;
fire_test.py and the K3 drill aborted on it and pgood_probe.py inverted
it. The latch-unlock drills now gate on the safety chain holding HV off
(charge-pump watchdog dead, pulse engine idle), as the kernel suite
does, and the probe reports the pin as the kernel publishes it.

motion.deadman: the controller resumed from its hang recovers on $X and
moves again without a restart (the stream's fault acknowledgment).
This commit is contained in:
ScottW514
2026-09-02 08:08:19 -04:00
parent 8cf2212e63
commit a2bc4233d5
6 changed files with 59 additions and 46 deletions
+4 -4
View File
@@ -12,9 +12,9 @@ against what the chain and the supply were doing: idle, a dry run
hv_current), a pause and a resume, a lid open. hv_current comes from the
PIC at a lower rate and rides along as a range.
PGOOD is reported as the RAW PIN LEVEL (the kernel's laser_pgood attribute
is the logical, inverted value: 1 = pin low). Everything else is the
kernel's logical value.
PGOOD is the raw pin level as the kernel publishes it (laser_pgood is the
supply's power-good: 1 = the supply reports its outputs within spec).
Everything else is the kernel's logical value.
The loop must not hog the CPU: single core, the protocol thread is
SCHED_OTHER, so the sampler sleeps between passes and reports its worst gap.
@@ -33,7 +33,7 @@ import time
CNC = '/sys/glowforge/cnc/'
ATTRS = [ # name, attribute, invert-to-raw
('PGOOD', CNC + 'laser_pgood', True),
('PGOOD', CNC + 'laser_pgood', False),
('LASER_ON', CNC + 'laser_on', False),
('FIRE', CNC + 'laser_enable', False),
('CP_ALIVE', CNC + 'charge_pump_alive', False),