67 lines
2.7 KiB
Markdown
67 lines
2.7 KiB
Markdown
# MeerK40t mock-controller MOPA spike
|
|
|
|
- Date: 2026-10-18
|
|
- Upstream: `meerk40t/meerk40t`
|
|
- Commit: `d511944e08788e88077727f682957759884ff5ca`
|
|
- Scope: offline command-list encoding only
|
|
|
|
## Result
|
|
|
|
The pinned BalorMK controller selected its `MockConnection` and encoded a
|
|
synthetic square with explicit power, speed, 40 kHz frequency and 200 ns MOPA
|
|
pulse width. Two consecutive runs produced identical parsed command traces.
|
|
The harness supplies a synthetic 110 mm field solely for BalorMK's conversion
|
|
from mm/s to galvo units; it is not evidence that the physical lens is 110 mm.
|
|
|
|
The trace contains:
|
|
|
|
- `listQSwitchPeriod` value `0x01f4` (500), matching BalorMK's internal
|
|
fiber-source conversion `20000 / 40 kHz`;
|
|
- `listFiberYLPMPulseWidth` value `0x00c8` (200);
|
|
- jump and mark commands for the synthetic square; and
|
|
- a one millisecond `listLaserOnPoint` dwell represented as 100 ten-microsecond
|
|
controller units; and
|
|
- an explicit end-of-list command.
|
|
|
|
The harness replaces PyUSB with a trap before BalorMK is imported. Any call to
|
|
USB discovery or resource disposal fails the run. The controller is also
|
|
constructed with `force_mock=True`. No USB enumeration or hardware access was
|
|
attempted.
|
|
|
|
## Reproduce
|
|
|
|
Check out the pinned MeerK40t commit outside this repository, then run:
|
|
|
|
```powershell
|
|
python scripts/spike_meerk40t_mock_mopa.py C:\path\to\meerk40t
|
|
```
|
|
|
|
The script refuses to run against any other commit. Its JSON output includes
|
|
the upstream revision, inputs, selected transport, USB status and parsed trace.
|
|
The checked result is stored as
|
|
`tests/fixtures/meerk40t-mock-mopa-trace.json` for later golden comparisons.
|
|
|
|
## What this proves
|
|
|
|
- BalorMK's mock path can be forced without controller discovery.
|
|
- Operation settings preserve frequency in kHz and pulse width as the integer
|
|
value emitted by `listFiberYLPMPulseWidth` through command-list encoding.
|
|
- The tested square produces a deterministic mock trace.
|
|
|
|
## What this does not prove
|
|
|
|
- It does not validate the units or safe range expected by the makerspace's
|
|
specific JPT E2/M7 source.
|
|
- It does not exercise MeerK40t's graphical UI, hatch planner, correction file,
|
|
job spooler, framing, cancellation or status behavior.
|
|
- It does not establish compatibility with the physical controller, mounted
|
|
lens or correction profile.
|
|
- It does not authorize USB access, galvo motion or laser output.
|
|
|
|
## Decision impact
|
|
|
|
This is positive evidence for the BalorMK command encoder and mock transport,
|
|
but it is not enough to select stock MeerK40t as the workshop application.
|
|
The next useful extension of Spike A is a full cut-plan/spooler test containing
|
|
synthetic hatch geometry. Spike B, the external Rayforge no-device driver
|
|
registration proof, can proceed independently.
|