按规划继续工作

结论:OPFS 参数文件已通过桥接进入 LinuxCNC-backed WASM restore/save 路径,native 与 host/WASM/browser 验证全部通过。
This commit is contained in:
2026-06-08 07:42:50 +08:00
parent 16585690ca
commit 5ea07606d7
6 changed files with 211 additions and 12 deletions

View File

@@ -0,0 +1,63 @@
import { loadTextFile, saveTextFile } from "./file-service.js";
import { parameterFilePath } from "./path-model.js";
const DEFAULT_WASM_PARAMETER_PATH = "/work/linuxcnc.var";
function requireParameterSdk(interp) {
for (const method of ["writeTextFile", "readTextFile", "restoreParameters", "saveParameters"]) {
if (typeof interp?.[method] !== "function") {
throw new Error(`interpreter SDK is missing ${method}().`);
}
}
}
function resolvePaths(machineId, options = {}) {
const opfsPath = options.opfsPath ?? parameterFilePath(machineId, options.filename);
const wasmPath = options.wasmPath ?? DEFAULT_WASM_PARAMETER_PATH;
return { opfsPath, wasmPath };
}
function readOptionalWasmTextFile(interp, path) {
try {
return interp.readTextFile(path);
} catch {
return null;
}
}
export async function restoreMachineParametersFromOpfs(interp, machineId, options = {}) {
requireParameterSdk(interp);
const { opfsPath, wasmPath } = resolvePaths(machineId, options);
const text = await loadTextFile(opfsPath, options.storage);
interp.writeTextFile(wasmPath, text);
return {
opfsPath,
wasmPath,
result: interp.restoreParameters(wasmPath),
};
}
export async function saveMachineParametersToOpfs(interp, machineId, values, options = {}) {
requireParameterSdk(interp);
const { opfsPath, wasmPath } = resolvePaths(machineId, options);
const existingText = await loadTextFile(opfsPath, options.storage);
interp.writeTextFile(wasmPath, existingText);
const result = interp.saveParameters(wasmPath, values);
const savedText = interp.readTextFile(wasmPath);
const backupText = readOptionalWasmTextFile(interp, `${wasmPath}.bak`);
await saveTextFile(opfsPath, savedText, options.storage);
if (backupText !== null) {
await saveTextFile(`${opfsPath}.bak`, backupText, options.storage);
}
return {
opfsPath,
backupOpfsPath: backupText === null ? null : `${opfsPath}.bak`,
wasmPath,
result,
savedText,
backupText,
};
}