按规划持续工作

结论:浏览器 interpreter smoke 和 INI panel UI 已接入 vendored LinuxCNC 五轴 switchkins remap 执行路径,只复制 LinuxCNC sample machine 文件到 WASM FS 并调用 SDK C ABI;host 聚合 smoke 通过,未新增 JavaScript M428/M429/M430 或运动学语义。
This commit is contained in:
2026-06-08 18:12:27 +08:00
parent 149095274c
commit 7cdfc458f9
8 changed files with 211 additions and 13 deletions

View File

@@ -360,6 +360,26 @@ TOOL_TABLE = browser-tool.tbl
"UI canonical event count",
);
uiDocument.getElementById("run-fiveaxis-remap").click();
await waitFor(
() => uiDocument.getElementById("log")?.textContent.includes("Ran LinuxCNC 5-axis"),
"5-axis remap run",
);
assertEqual(
uiDocument.getElementById("field-fiveaxis-remap").textContent,
"ok",
"UI 5-axis remap status",
);
const remapLog = uiDocument.getElementById("log").textContent;
if (
!remapLog.includes("fiveaxis_ini_open=1") ||
!remapLog.includes("fiveaxis_file_read_count=620") ||
!remapLog.includes("fiveaxis_hal_switchkins: rc=0 found=1 value=0") ||
!remapLog.includes("fiveaxis_linuxcnc_remap_file_execute=1")
) {
throw new Error(`UI 5-axis remap run missing LinuxCNC result: ${remapLog}`);
}
status.textContent = "browser_ini_opfs_smoke=ok";
} catch (error) {
status.textContent = `browser_ini_opfs_smoke=fail ${error.stack || error.message}`;

View File

@@ -93,6 +93,50 @@
}
}
async function writeFetchedTextFile(interp, sourcePath, wasmPath) {
interp.writeTextFile(wasmPath, await fetchText(sourcePath));
}
async function writeFiveAxisTrtMachineFiles(interp) {
const sourceDir =
"../../vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting";
const wasmDir = "/work/browser-fiveaxis/table-rotary-tilting";
const remapFiles = [
"428remap.ngc",
"429remap.ngc",
"430remap.ngc",
"centering.ngc",
"helix_ac.ngc",
"helix_bc.ngc",
"xyzac_switchkins_sub.ngc",
"xyzbc_switchkins_sub.ngc",
];
await writeFetchedTextFile(interp, `${sourceDir}/xyzac-trt.ini`, `${wasmDir}/xyzac-trt.ini`);
await writeFetchedTextFile(interp, `${sourceDir}/xyzbc-trt.ini`, `${wasmDir}/xyzbc-trt.ini`);
for (const filename of remapFiles) {
await writeFetchedTextFile(
interp,
`${sourceDir}/remap_subs/${filename}`,
`${wasmDir}/remap_subs/${filename}`,
);
}
await writeFetchedTextFile(
interp,
`${sourceDir}/demos/xyzac_switchkins.ngc`,
`${wasmDir}/demos/xyzac_switchkins.ngc`,
);
await writeFetchedTextFile(
interp,
`${sourceDir}/demos/xyzbc_switchkins.ngc`,
`${wasmDir}/demos/xyzbc_switchkins.ngc`,
);
return wasmDir;
}
async function verifyRejects(fixtureName, operation, expectedPattern) {
try {
await operation();
@@ -310,6 +354,48 @@
baselineIniExpectedText,
);
const fiveAxisTrtDir = await writeFiveAxisTrtMachineFiles(interp);
verifyExpectedOutput(
"browser_fiveaxis_xyzac_switchkins",
interp.runFiveAxisRemapFile(
`${fiveAxisTrtDir}/demos/xyzac_switchkins.ngc`,
`${fiveAxisTrtDir}/xyzac-trt.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parse_remap_3=0",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=620",
"fiveaxis_file_execute_count=620",
"fiveaxis_file_finish_count=21",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=0",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
verifyExpectedOutput(
"browser_fiveaxis_xyzbc_switchkins",
interp.runFiveAxisRemapFile(
`${fiveAxisTrtDir}/demos/xyzbc_switchkins.ngc`,
`${fiveAxisTrtDir}/xyzbc-trt.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parse_remap_3=0",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=620",
"fiveaxis_file_execute_count=620",
"fiveaxis_file_finish_count=21",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=0",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
verifyExpectedOutput(
"restore_parameters_missing_file",
interp.restoreParameters("/work/browser-missing.var"),