Run XYZAC through upstream LinuxCNC TP
This commit is contained in:
@@ -63,7 +63,7 @@ export class WasmXyzacKinematics {
|
||||
constructor(core, options = {}) {
|
||||
this.core = core;
|
||||
this.options = { x_rot_point: 0, y_offset: 20, z_offset: 10, tool_offset: 0, limits: DEFAULT_LIMITS, ...options };
|
||||
this.available = ["sim_kinematics_init", "sim_kinematics_switch_init", "sim_kinematics_switch_register", "sim_kinematics_switch_select", "sim_kinematics_switch_forward", "sim_kinematics_switch_inverse", "sim_kinematics_switch_active", "sim_kinematics_switch_state_hash"].every((name) => typeof core?.[`_${name}`] === "function" || typeof core?.[name] === "function");
|
||||
this.available = ["sim_kinematics_init", "sim_kinematics_switch_init", "sim_kinematics_switch_register", "sim_kinematics_switch_select", "sim_kinematics_switch_select_physical", "sim_kinematics_switch_forward", "sim_kinematics_switch_inverse", "sim_kinematics_switch_inverse_mode", "sim_kinematics_switch_active", "sim_kinematics_switch_state_hash"].every((name) => typeof core?.[`_${name}`] === "function" || typeof core?.[name] === "function");
|
||||
this.lastCommand = null;
|
||||
this.modules = new Map();
|
||||
this.pointers = [];
|
||||
@@ -128,6 +128,14 @@ export class WasmXyzacKinematics {
|
||||
return this.snapshot();
|
||||
}
|
||||
|
||||
inverseMode(mode, currentPose) {
|
||||
if (!this.available) return { status: "blocked", code: "wasm_xyzac_unavailable" };
|
||||
this.setPose(currentPose);
|
||||
const result = call(this.core, "sim_kinematics_switch_inverse_mode", "number", ["number", "number", "number", "number", "number", "number"], [this.switchPointer, mode, this.posePointer, this.jointPointer, 5, this.resultPointer]);
|
||||
if (result !== 0) return resultCode("inverse_mode", result);
|
||||
return { status: "verified", joints: [...this.core.HEAPF64.subarray(this.jointPointer / 8, this.jointPointer / 8 + 5)] };
|
||||
}
|
||||
|
||||
select(mode, joints = [0, 0, 0, 0, 0]) {
|
||||
if (![MODE.identity, MODE.xyzac, MODE.userk].includes(mode)) return { status: "error", code: "wasm_xyzac_invalid_mode" };
|
||||
this.setJoints(joints);
|
||||
@@ -137,6 +145,16 @@ export class WasmXyzacKinematics {
|
||||
return this.snapshot();
|
||||
}
|
||||
|
||||
selectPhysical(mode, joints = [0, 0, 0, 0, 0]) {
|
||||
if (!this.available) return { status: "blocked", code: "wasm_xyzac_unavailable" };
|
||||
if (![MODE.identity, MODE.xyzac, MODE.userk].includes(mode)) return { status: "error", code: "wasm_xyzac_invalid_mode" };
|
||||
this.setJoints(joints);
|
||||
const result = call(this.core, "sim_kinematics_switch_select_physical", "number", ["number", "number", "number", "number", "number", "number"], [this.switchPointer, mode, this.jointPointer, 5, this.posePointer, this.resultPointer]);
|
||||
if (result !== 0) return resultCode("switch_physical", result);
|
||||
this.lastCommand = `M${mode === MODE.xyzac ? 428 : mode === MODE.identity ? 429 : 430}`;
|
||||
return this.snapshot();
|
||||
}
|
||||
|
||||
restoreState(state) {
|
||||
if (!state || state.schema !== "wasm-xyzac-kinematics.v1" || ![MODE.identity, MODE.xyzac, MODE.userk].includes(state.active_type) || !Array.isArray(state.joints) || state.joints.length !== 5) throw new Error("wasm_xyzac_restore_state_invalid");
|
||||
this.initializeSwitch();
|
||||
|
||||
Reference in New Issue
Block a user