按规划继续工作
结论:接入 vendored LinuxCNC tooldata_common.cc 负责刀具表解析与保存,WASM/SDK/OPFS/UI 仅做运行时边界搬运;native、WASM、OPFS 和浏览器 smoke 验证已通过。
This commit is contained in:
@@ -32,6 +32,13 @@ import {
|
||||
restoreMachineParametersFromOpfs,
|
||||
saveMachineParametersToOpfs,
|
||||
} from "../../../runtime/opfs/linuxcnc-parameter-bridge.js";
|
||||
import {
|
||||
loadMachineToolTableFromOpfs,
|
||||
saveMachineToolTableToOpfs,
|
||||
} from "../../../runtime/opfs/linuxcnc-tool-table-bridge.js";
|
||||
import {
|
||||
loadMachineSessionFromOpfs,
|
||||
} from "../../../runtime/opfs/linuxcnc-machine-session-bridge.js";
|
||||
|
||||
class MockFileHandle {
|
||||
constructor(name) {
|
||||
@@ -176,6 +183,13 @@ const bridgeInterp = {
|
||||
bridgeFiles.set(`${path}.bak`, "5161 0.0\n5162 0.0\n");
|
||||
return `save_parameters=0\nsave_path=${path}\nvalues=${Object.keys(values).join(",")}\n`;
|
||||
},
|
||||
loadToolTable(path) {
|
||||
return `tooldata_load=0\nload_tool_path=${path}\n`;
|
||||
},
|
||||
saveToolTable(path) {
|
||||
bridgeFiles.set(path, "T2 P2 Z+1.250000 D+0.250000 ;loaded by LinuxCNC\n");
|
||||
return `tooldata_save=0\nsave_tool_path=${path}\n`;
|
||||
},
|
||||
};
|
||||
|
||||
const restoredParameters = await restoreMachineParametersFromOpfs(
|
||||
@@ -208,6 +222,65 @@ assert.equal(
|
||||
"5161 0.0\n5162 0.0\n",
|
||||
);
|
||||
|
||||
const loadedToolTable = await loadMachineToolTableFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{ storage, wasmPath: "/work/bridge-tool.tbl" },
|
||||
);
|
||||
assert.deepEqual(loadedToolTable, {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
||||
wasmPath: "/work/bridge-tool.tbl",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/bridge-tool.tbl\n",
|
||||
});
|
||||
assert.equal(bridgeFiles.get("/work/bridge-tool.tbl"), "T0 P0 ; no tool\nT2 P2 Z1.25 D0.25\n");
|
||||
|
||||
const savedToolTable = await saveMachineToolTableToOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{ storage, wasmPath: "/work/bridge-tool.tbl" },
|
||||
);
|
||||
assert.equal(savedToolTable.opfsPath, "linuxcnc/machines/xyzab-tdr/tool.tbl");
|
||||
assert.equal(savedToolTable.wasmPath, "/work/bridge-tool.tbl");
|
||||
assert.equal(savedToolTable.result.includes("tooldata_save=0"), true);
|
||||
assert.equal(
|
||||
await loadTextFile("linuxcnc/machines/xyzab-tdr/tool.tbl", storage),
|
||||
"T2 P2 Z+1.250000 D+0.250000 ;loaded by LinuxCNC\n",
|
||||
);
|
||||
|
||||
const loadedSession = await loadMachineSessionFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{
|
||||
storage,
|
||||
iniWasmPath: "/work/session.ini",
|
||||
parameterWasmPath: "/work/session.var",
|
||||
toolTableWasmPath: "/work/session-tool.tbl",
|
||||
},
|
||||
);
|
||||
assert.deepEqual(loadedSession, {
|
||||
machineId: "xyzab-tdr",
|
||||
ini: {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/machine.ini",
|
||||
wasmPath: "/work/session.ini",
|
||||
},
|
||||
parameters: {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
|
||||
wasmPath: "/work/session.var",
|
||||
result: "restore_parameters=0\nrestore_path=/work/session.var\n",
|
||||
},
|
||||
toolTable: {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
||||
wasmPath: "/work/session-tool.tbl",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/session-tool.tbl\n",
|
||||
},
|
||||
});
|
||||
assert.equal(bridgeFiles.get("/work/session.ini"), "[EMC]\nMACHINE = xyzab-tdr\n");
|
||||
assert.equal(bridgeFiles.get("/work/session.var"), "5161\t12.340000\n5162\t56.780000\n");
|
||||
assert.equal(
|
||||
bridgeFiles.get("/work/session-tool.tbl"),
|
||||
"T2 P2 Z+1.250000 D+0.250000 ;loaded by LinuxCNC\n",
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() => loadTextFile("linuxcnc/machines/missing.ini", storage),
|
||||
/missing file/,
|
||||
|
||||
Reference in New Issue
Block a user