ScottW514 0870a835c4 Acceptance catalog: the rest of the lid/button/interlock drills, and a pause/resume chain-timing tool
Catalog 34 -> 39. Every remaining bench drill of the lid/button parity work
is now a test, with drills that exercise the same path combined:

  motion.lid-cancel-home   also cancels from a hold - a job paused on the
                           button is ended by the lid, never resumed - so the
                           armed window and the hardware button latch stay in
                           agreement by construction.
  motion.cancel-abort      also asserts what a sender abort must NOT do: it
                           stops where it stopped and never returns home. The
                           return-to-start belongs to the lid policy alone.
  motion.interlock-cancel-park (new)  the interlock loop cancels like the lid,
                           and the lid opened during the return home does not
                           interrupt it.
  motion.lid-policy-hold (new)  the other policy: Door park, no cancel, no
                           return, and a cycle start finishes the move. The
                           setting is restored on the way out.
  laser.pause-resume-live (new)  the button pause/resume during a live cut:
                           emission stops, the latch stays UNLOCKED and the
                           armed window open (a pause is not a cancel), the
                           next press resumes and the job finishes.
  cloud.interlock-abort-park (new)  the same interlock/park pair in cloud mode.
  cloud.pause-cancel-paths (new)  the two non-finishing ends of a print, each
                           from the state the factory ends it in: paused on the
                           button then cancelled by the lid, and cancelled from
                           the app while running.

The shared cancel tail (reason reported, reset without an alarm, position
kept, head back at the job start with the KERNEL counters confirming it) is
now one helper, so every trigger is judged the same way.

scripts/bench/resume_dark_lead.py: samples LASER_ON, FIRE, HV_ENABLE, the
charge-pump watchdog, the button and the doors off the SoC pads at ~2 kHz
through /dev/mem, with motion dated from the kernel step counters, across a
pause and a resume. Levels are taken at idle and everything after is reported
as a change from that baseline, so no polarity assumption is baked in. Dry by
default, with --auto driving the pause and resume through ! / ~ for an
unattended rehearsal; --run live adds the dark lead between FIRE and LASER_ON,
in milliseconds and in millimeters at the job's feed.

Bench registry: argument specs can name a flag (--feed 600) instead of being
positional, and an optional argument with an empty default is left off the
command line entirely.

Host proof: 104 unit tests (20 in the cloud suite - the two new cloud tests
replay the machine's own lid-abort excerpt, with the interlock and the app
cancel substituted for the trigger, and fail for the right reasons), coverage
lint 0 uncovered across 39 tests.
2026-08-17 07:54:47 -04:00
2026-06-19 13:41:23 -04:00
2020-04-15 17:09:41 -04:00
2022-10-06 10:05:41 -04:00

OpenGlow/ForgeFIRM Firmware for Glowforge

Open-source firmware for Glowforge brand CNC lasers. ForgeFIRM replaces the cloud-dependent factory software on the stock control board — no hardware modification — and gives the machine a local controller, a local web control panel, and a standard Grbl interface.

What it does

Two controller modes, selected in the web panel and switchable while the machine is idle:

  • GRBL mode — grblHAL runs on the machine and speaks Grbl 1.1 over TCP port 23, so LightBurn, UGS, and cncjs drive the laser directly. Motion runs on the board's own hardware step engine (SDMA + EPIT), fed live by the planner. M3/M4 dynamic laser power, coolant-flow verification, over-temp holds, and an operator button press to arm the laser for each job.
  • Cloud mode — the machine presents itself as a stock Glowforge to the Glowforge web service, so the phone and web apps work as they always did. Optional, and off by default. GRBL mode jogs and cuts without it; the one GRBL-mode function that still reaches the Glowforge service is camera-referenced homing (below), until limit-switch homing lands.

Around both modes:

  • A web control panel on port 8080: machine status and position, coolant and fan telemetry, safety-switch states, camera view, machine settings, hardware diagnostics, firmware updates, and boot-slot management.
  • Unified logging: every ForgeFIRM component logs through syslog into its own directory under /data/log/forgefirm, with per-logger levels for the device and for an optional remote syslog server, a live viewer in the panel, and a one-click log bundle — sanitized of identifying details — for attaching to an issue report.
  • Both cameras as MJPEG streams and full-resolution snapshots — the lid camera feeds LightBurn's camera overlay directly.
  • Camera-referenced homing: $H from any sender runs the factory-style camera homing cycle through the Glowforge service (a Glowforge account and a live service session are required for $H; everything else in GRBL mode runs without them), and the machine records where it is.
  • Installs alongside the factory firmware in the unused A/B rootfs slot, archiving every factory version first, so the machine can be switched back to stock at any time without the Glowforge cloud.

Hardware

The control board is common to Glowforge Basic, Plus, and Pro. The 5 MP (OV5648) camera modules are fully supported; the 8 MP (OV8856) modules found in "HD" units bind but do not capture yet — see the camera note in kas/README.md.

Roadmap

  • Limit-switch homing as an alternative to camera-referenced homing.
  • Camera lens calibration and bed alignment for the LightBurn overlay.
  • Capture support for the 8 MP (OV8856) camera modules.
  • Cloud mode: stream jobs into the motion ring during the run, lifting the job-length cap that buffering the whole job imposes.

Safety

This machine contains a Class 4 CO₂ laser: it burns, blinds, and starts fires. Never defeat the lid switches or interlock, always vent the exhaust outdoors, and never cut PVC or other chlorinated plastics. Never leave a running job unattended — keep a fire extinguisher within reach. Read Before you cut — safety before your first job, and the Regulatory and legal section before installing. How the laser safing works describes the hardware safety chain and the software gates ForgeFIRM stacks on it.

A very important warning: this is experimental software. Use of this software could seriously maim or kill you or others, and voids your warranty. It is not affiliated with or endorsed by Glowforge. Use it at your own risk.

S
Description
OpenGlow/ForgeFIRM Firmware for Glowforge
Readme
5.8 MiB
Languages
Python 90.3%
Shell 3.5%
BitBake 2.6%
C 1.2%
JavaScript 1.2%
Other 1.2%