mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-28 09:11:11 -07:00
forgetest: kernel.k1-k2 leaves the position counters where it found them
K2 streamed 1000 masked +X steps; the counters advanced although nothing moved, and forgectrl's position display carried the offset. The stream now runs 1000 out and 1000 back, and the counters returning to start is a check. Bench-proven 2026-08-16: (0,0,0) before and after.
This commit is contained in:
@@ -33,7 +33,8 @@ LATCH_BIT = 1 << 3
|
|||||||
TICK_HZ = 10000
|
TICK_HZ = 10000
|
||||||
FIRE = b"\x10"
|
FIRE = b"\x10"
|
||||||
PAD = b"\x00"
|
PAD = b"\x00"
|
||||||
XSTEP = b"\x01"
|
XSTEP = b"\x01" # +X (DIR clear)
|
||||||
|
XSTEP_BACK = b"\x03" # -X (DIR set)
|
||||||
POWER0 = bytes([0x80]) # power byte, duty 0
|
POWER0 = bytes([0x80]) # power byte, duty 0
|
||||||
|
|
||||||
_KERNEL_COVERS = [("kernel-module-glowforge", "**"), ("linux-fslc", "**")]
|
_KERNEL_COVERS = [("kernel-module-glowforge", "**"), ("linux-fslc", "**")]
|
||||||
@@ -251,7 +252,9 @@ def k1_k2(ctx):
|
|||||||
ctx.log("K1 PASS: decelerating tail %.4f s, no burst, no fault", dt)
|
ctx.log("K1 PASS: decelerating tail %.4f s, no burst, no fault", dt)
|
||||||
|
|
||||||
# ---- K2
|
# ---- K2
|
||||||
step_sec = (XSTEP + PAD * 4) * 1000 # 1000 X steps at 2 kHz (masked)
|
# 1000 X steps out and 1000 back at 2 kHz (masked by motor_lock):
|
||||||
|
# the position counters end where they started
|
||||||
|
step_sec = (XSTEP + PAD * 4) * 1000 + (XSTEP_BACK + PAD * 4) * 1000
|
||||||
stream = (POWER0 + PAD * TICK_HZ + step_sec + PAD * (TICK_HZ // 2)
|
stream = (POWER0 + PAD * TICK_HZ + step_sec + PAD * (TICK_HZ // 2)
|
||||||
+ FIRE * (2 * TICK_HZ) + PAD * TICK_HZ)
|
+ FIRE * (2 * TICK_HZ) + PAD * TICK_HZ)
|
||||||
ctx.log("K2: %d bytes = %.1f s; latch stays LOCKED; waypoint +200; motor_lock=15",
|
ctx.log("K2: %d bytes = %.1f s; latch stays LOCKED; waypoint +200; motor_lock=15",
|
||||||
@@ -283,9 +286,8 @@ def k1_k2(ctx):
|
|||||||
"underruns": rd("cnc/underruns"), "faults": rd("cnc/faults")}
|
"underruns": rd("cnc/underruns"), "faults": rd("cnc/faults")}
|
||||||
ctx.log("K2 done: state=%s pos before=%s after=%s", state, pos_before, pos_after)
|
ctx.log("K2 done: state=%s pos before=%s after=%s", state, pos_before, pos_after)
|
||||||
ctx.check(not hits, "K2: laser asserted with the latch locked: %s", hits[:10])
|
ctx.check(not hits, "K2: laser asserted with the latch locked: %s", hits[:10])
|
||||||
if pos_before[:3] == pos_after[:3]:
|
ctx.check(pos_before[:3] == pos_after[:3],
|
||||||
ctx.log("K2 NOTE: position did not advance under motor_lock (waypoint completion "
|
"K2: position counters did not return to start (%s -> %s)", pos_before[:3], pos_after[:3])
|
||||||
"unconfirmed by the counter on this board)")
|
|
||||||
ctx.log("K2 PASS: FIRE window replayed after the resume waypoint with "
|
ctx.log("K2 PASS: FIRE window replayed after the resume waypoint with "
|
||||||
"laser_enable/laser_on at 0 throughout")
|
"laser_enable/laser_on at 0 throughout")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user