Implement AXIS parity UI and execution baseline
This commit is contained in:
43
web/react/src/gui-domain.ts
Normal file
43
web/react/src/gui-domain.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import type { FrontendState } from "./store";
|
||||
|
||||
export const GUI_FAMILIES = ["axis", "gmoccapy", "touchy", "gscreen", "qtvcp", "qtdragon", "pyvcp", "gladevcp", "vismach", "ngcgui", "qtplasmac", "plasma"] as const;
|
||||
export type GuiFamily = typeof GUI_FAMILIES[number];
|
||||
|
||||
export const GUI_COMMANDS = Object.freeze({
|
||||
run: "PROGRAM_RUN", pause: "PROGRAM_PAUSE", resume: "PROGRAM_RESUME", step: "PROGRAM_STEP", restart: "PROGRAM_RESTART", abort: "PROGRAM_ABORT", load: "PROGRAM_LOAD", mdi: "MDI_EXECUTE", jogStart: "JOG_START", jogStop: "JOG_STOP", home: "HOME", override: "SET_OVERRIDE", estop: "ESTOP", recover: "IO_RECOVER", spindle: "SPINDLE_COMMAND", coolant: "COOLANT_COMMAND", toolPrepare: "TOOL_PREPARE", toolChange: "TOOL_CHANGE", probe: "PROBE_CONFIG", snapshot: "SNAPSHOT_REQUEST", checkpoint: "CHECKPOINT", recoverProject: "RECOVER",
|
||||
} as const);
|
||||
|
||||
export type GuiAction = keyof typeof GUI_COMMANDS;
|
||||
|
||||
const GUI_PANEL_DEFINITIONS = {
|
||||
axis: ["program", "preview", "dro", "manual", "mdi", "overrides", "spindle", "tool", "alarm"],
|
||||
gmoccapy: ["program", "dro", "manual", "mdi", "tool", "spindle", "alarm"],
|
||||
touchy: ["dro", "manual", "mdi", "program", "alarm"],
|
||||
gscreen: ["program", "dro", "manual", "mdi", "hal", "alarm"],
|
||||
qtvcp: ["program", "dro", "manual", "mdi", "vcp", "hal", "tool", "alarm"],
|
||||
qtdragon: ["program", "dro", "manual", "mdi", "vcp", "tool", "alarm"],
|
||||
pyvcp: ["dro", "manual", "vcp", "alarm"],
|
||||
gladevcp: ["dro", "manual", "vcp", "hal", "alarm"],
|
||||
vismach: ["preview", "dro", "manual", "program", "alarm"],
|
||||
ngcgui: ["program", "mdi", "preview"],
|
||||
qtplasmac: ["program", "dro", "manual", "material", "torch", "alarm"],
|
||||
plasma: ["program", "dro", "manual", "material", "torch", "alarm"],
|
||||
} as const satisfies Record<GuiFamily, readonly string[]>;
|
||||
export const GUI_PANELS = Object.freeze(GUI_PANEL_DEFINITIONS);
|
||||
|
||||
export const GUI_BOUNDARIES = Object.freeze({
|
||||
desktop_window: "WEB-EQUIV",
|
||||
python_callbacks: "PY-WASM",
|
||||
virtual_devices: "SIM-DEVICE",
|
||||
source_icons: "WEB-EQUIV/SOURCE-ASSET",
|
||||
host_processes: "REAL-EXCLUDED",
|
||||
physical_safety: "REAL-EXCLUDED",
|
||||
});
|
||||
|
||||
export function commandFor(action: GuiAction): string { return GUI_COMMANDS[action]; }
|
||||
|
||||
export function panelsForFamily(family: string): readonly string[] { return GUI_PANELS[family as GuiFamily] ?? GUI_PANELS.axis; }
|
||||
|
||||
export function guiStatus(state: FrontendState) {
|
||||
return { session: state.status, task: state.task?.state ?? null, program: state.program?.program_status ?? null, tick: state.tick, alarms: state.alarms.length, error: state.error?.code ?? null, snapshot_hash: state.snapshot?.state_hash ?? null };
|
||||
}
|
||||
Reference in New Issue
Block a user