diff --git a/docs/BRINGUP.md b/docs/BRINGUP.md index 8e062b1..41d004a 100644 --- a/docs/BRINGUP.md +++ b/docs/BRINGUP.md @@ -1307,14 +1307,40 @@ accordingly ("Automatic — AP country, else World"). approaches are near-silent** — belt compliance turns slow-speed skipping into sub-threshold grinding — so any contact-sensing scheme must strike fast. -4. **6.5 safety mapping**: door/estop evdev → feed-hold/halt in the - backend; underrun → grblHAL alarm. The driver reads EV_SW only for - the arm-flow button today (`driver.c` still calls these inputs a - later milestone), so this is wiring an already-documented signal — - the switch map is in `forgectrl/docs/SERVICES.md` and forgectrl - serves the live states — into the controller's real-time path. - Open question from the audit (N5): whether the laser latch needs a - software reset path. Interlock-trip recovery: closed 2026-08-12. +4. **6.5 safety mapping — IMPLEMENTED 2026-08-13, bench validation + pending** (`grblHAL-glowforge/src/glowforge_switches.c`). The + controller reads EV_SW with `EVIOCGSW` from the protocol thread's + realtime hook (no grab — forgectrl polls the same device) and maps: + - **doors (bit 3) not closed, or interlock (bit 5) loop open → + the core's `safety_door_ajar`.** A running job parks in the door + state and resumes when the condition clears, which is what the + hardware chain already does to the beam. Bit 3 is the series + combination the safety chain itself uses, not the individual door + switches. + - **e-stop (bit 4): opt-in only.** The line rests ACTIVE on a + healthy machine and drops for the duration of any stepper motion + on this board, so gating on it would abort every job. Set + `estop_halts_motion` in `/data/forgefirm.conf` (hand-edited; it is + not in forgectrl's settings whitelist, and unknown keys survive + forgectrl's writes) for a machine retrofitted with a real e-stop + circuit. Same escape hatch as the cloud client's + `MOTION.ESTOP_HALTS_MOTION`. + - **interlock latch (bit 6): deliberately not gated on.** Its + resting state on a healthy machine is not characterized and a + false assertion would wedge every job; the hardware chain enforces + it regardless. + - No switch device (host builds) = no capability advertised, no + signals. + **N5 answered: no software latch-reset path is needed.** + Interlock-trip recovery was exercised in commissioning runs without + one — the chain recovers when the condition clears. `cnc/laser_latch` + stays write-only (1 = lock), the driver's arm flow unlocks per job, + and `interlock_latch_reset` remains a readback. + **Bench items:** open the lid mid-job (expect `Door` at the sender, + motion parked, resume on close); jog and `$H` with the lid open + (refused); a Pro with an unjumpered interlock connector (expect the + same door behavior); confirm no spurious door events across a full + job. Underrun → alarm was already covered by the stream-fault path. 4b. **Cloud-mode complete review** (operator-directed 2026-08-03): `load_motion` preloads a job's ENTIRE pulse file into the ring with no backpressure recovery — with the 16 MiB default ring that caps diff --git a/meta-forgefirm/recipes-forgefirm/forgectrl/forgectrl.bb b/meta-forgefirm/recipes-forgefirm/forgectrl/forgectrl.bb index feef474..c2fc6a7 100644 --- a/meta-forgefirm/recipes-forgefirm/forgectrl/forgectrl.bb +++ b/meta-forgefirm/recipes-forgefirm/forgectrl/forgectrl.bb @@ -9,7 +9,7 @@ PV = "0.1.0" SRC_URI = "git://github.com/ScottW514/forgectrl.git;protocol=https;branch=main" # Pinned; bump deliberately after pushing forgectrl changes. -SRCREV = "c099a288378b15dfc5f32f1a9718e21bcddadcb4" +SRCREV = "e779554fa3bc1d4232a7b708a97a007198c57bd7" S = "${WORKDIR}/git" diff --git a/meta-forgefirm/recipes-forgefirm/grblhal-glowforge/grblhal-glowforge.bb b/meta-forgefirm/recipes-forgefirm/grblhal-glowforge/grblhal-glowforge.bb index e574e9a..09eb9ae 100644 --- a/meta-forgefirm/recipes-forgefirm/grblhal-glowforge/grblhal-glowforge.bb +++ b/meta-forgefirm/recipes-forgefirm/grblhal-glowforge/grblhal-glowforge.bb @@ -11,7 +11,7 @@ PV = "0.1.0" # upstream). SRC_URI = "gitsm://github.com/ScottW514/grblHAL-glowforge.git;protocol=https;branch=main" # Pinned; bump deliberately after pushing grblHAL-glowforge changes. -SRCREV = "3f22d1f56b2663bfc6d30452568dd809d5496b45" +SRCREV = "e6165487be47d028185214016bd82a544f90ea7e" SRC_URI += "file://grblhal.init"