完善 working5 gmoccapy HAL 输入对标

This commit is contained in:
2026-06-26 22:07:41 -04:00
parent 0d79b3545b
commit 917cec15ad
20 changed files with 2853 additions and 27 deletions

View File

@@ -17,6 +17,8 @@ assert.deepEqual(model.nativePaths.command.path, ["gmoccapy", "linuxcnc.command(
assert.equal(model.nativePaths.status.path.includes("linuxcnc.stat()"), true);
assert.equal(model.nativePaths.status.path.includes("linuxcnc.error_channel()"), true);
assert.equal(model.nativePaths.hal.path.includes("HAL shared memory"), true);
assert.equal(model.nativePaths.hardwareButtons.path.includes("_button_pin_changed"), true);
assert.equal(model.nativePaths.halPins.path.includes("hal_glib.GPin value_changed"), true);
assert.equal(model.nativePaths.remap.path.includes("Python remap prolog/ngc/epilog"), true);
assert.deepEqual(model.webPath.path, ["button", "store.dispatch", "linuxcnc-task-policy", "runtime/status snapshot", "UI/Three.js"]);
@@ -42,6 +44,10 @@ for (const actionId of [
"abort",
"spindle",
"coolant",
"hardware-button",
"hal-pin-input",
"hal-jog-pin",
"hal-warning-confirm",
]) {
assert.equal(actionIds.includes(actionId), true, `${actionId} missing`);
}
@@ -60,15 +66,42 @@ const spindleMapping = model.actionMappings.find((mapping) => mapping.actionId =
assert.equal(spindleMapping.nativeStatus.includes("spindle.0.forward"), true);
assert.equal(spindleMapping.gate.includes("restricted during interpreter"), true);
const hardwareButtonMapping = model.actionMappings.find((mapping) => mapping.actionId === "hardware-button");
assert.equal(hardwareButtonMapping.nativeCommand.includes("_button_pin_changed"), true);
assert.equal(hardwareButtonMapping.gate.includes("rising-edge"), true);
assert.equal(hardwareButtonMapping.gate.includes("insensitive"), true);
const halPinMapping = model.actionMappings.find((mapping) => mapping.actionId === "hal-pin-input");
assert.equal(halPinMapping.webAction, "GMOCAPY_HAL_PIN");
assert.equal(halPinMapping.nativeCommand.includes("_optional_blocks"), true);
assert.equal(halPinMapping.nativeCommand.includes("_on_counts_changed"), true);
assert.equal(halPinMapping.nativeCommand.includes("_del_message_changed"), true);
assert.equal(halPinMapping.gate.includes("counts require count-enable"), true);
assert.equal(halPinMapping.gate.includes("direct-value requires analog-enable"), true);
assert.equal(halPinMapping.gate.includes("delete-message pins are rising-edge only"), true);
const halJogMapping = model.actionMappings.find((mapping) => mapping.actionId === "hal-jog-pin");
assert.equal(halJogMapping.webAction, "GMOCAPY_HAL_PIN jog.axis/jog-inc");
assert.equal(halJogMapping.nativeCommand.includes("_on_pin_jog_changed"), true);
assert.equal(halJogMapping.nativeCommand.includes("_on_pin_incr_changed"), true);
assert.equal(halJogMapping.gate.includes("press/release level"), true);
assert.equal(halJogMapping.gate.includes("increment pins are rising-edge only"), true);
const warningConfirmMapping = model.actionMappings.find((mapping) => mapping.actionId === "hal-warning-confirm");
assert.equal(warningConfirmMapping.nativeCommand.includes("confirm_pin"), true);
assert.equal(warningConfirmMapping.gate, "level-polled while warning dialog is active");
const summary = createGmoccapyCommunicationSummary(model);
assert.equal(summary.apiName, "web-rtcp-5axis-gmoccapy-communication-model-summary");
assert.equal(summary.profileId, "gmoccapy-xyzab");
assert.equal(summary.nativePathCount, 4);
assert.equal(summary.nativePathCount, 6);
assert.equal(summary.startupStageCount, 9);
assert.equal(summary.actionCount, 15);
assert.equal(summary.actionCount, 19);
assert.equal(summary.postguiAfterHalcompReady, true);
assert.equal(summary.hasNativeNmlCommandPath, true);
assert.equal(summary.hasNativeHalPath, true);
assert.equal(summary.hasNativeHardwareButtonPath, true);
assert.equal(summary.hasNativeHalPinInputPath, true);
assert.equal(summary.hasWebStorePath, true);
assert.equal(summary.semanticBoundary, model.semanticBoundary);