Enforce LinuxCNC WASM authority for XYZAC frontend
This commit is contained in:
@@ -205,6 +205,7 @@ static void state_defaults(sim_io *io) {
|
||||
io->state.spindles[index].max_rpm = 100000.0;
|
||||
io->state.spindles[index].accel_rpm_s = old.spindles[index].accel_rpm_s;
|
||||
io->state.spindles[index].tolerance_rpm = old.spindles[index].tolerance_rpm;
|
||||
io->state.spindles[index].override_scale = 1.0;
|
||||
io->state.spindles[index].at_speed = 1;
|
||||
}
|
||||
}
|
||||
@@ -256,7 +257,7 @@ int sim_io_spindle_command(sim_io *io, uint32_t spindle, double rpm, uint32_t en
|
||||
if (io->state.estop) { set_last(io, SIM_IO_ERR_ESTOP); return SIM_IO_ERR_ESTOP; }
|
||||
if (!io->state.ready) { set_last(io, SIM_IO_ERR_NOT_READY); return SIM_IO_ERR_NOT_READY; }
|
||||
state = &io->state.spindles[spindle];
|
||||
state->command_rpm = enabled && !state->inhibit && !state->amp_fault ? rpm : 0.0;
|
||||
state->command_rpm = enabled && !state->inhibit && !state->amp_fault ? rpm * state->override_scale : 0.0;
|
||||
state->enabled = enabled ? 1U : 0U;
|
||||
set_last(io, SIM_IO_OK);
|
||||
mirror_pins(io);
|
||||
@@ -295,6 +296,21 @@ int sim_io_spindle_brake(sim_io *io, uint32_t spindle, uint32_t engaged) {
|
||||
return SIM_IO_OK;
|
||||
}
|
||||
|
||||
int sim_io_spindle_set_override(sim_io *io, uint32_t spindle, double scale) {
|
||||
sim_io_spindle_state *state;
|
||||
double base;
|
||||
if (!valid_spindle(io, spindle) || !isfinite(scale) || scale < 0.0 || scale > 2.0) return SIM_IO_ERR_RANGE;
|
||||
if (io->state.estop) { set_last(io, SIM_IO_ERR_ESTOP); return SIM_IO_ERR_ESTOP; }
|
||||
if (!io->state.ready) { set_last(io, SIM_IO_ERR_NOT_READY); return SIM_IO_ERR_NOT_READY; }
|
||||
state = &io->state.spindles[spindle];
|
||||
base = state->override_scale > 0.0 ? state->command_rpm / state->override_scale : 0.0;
|
||||
state->override_scale = scale;
|
||||
state->command_rpm = state->enabled && !state->inhibit && !state->amp_fault ? base * scale : 0.0;
|
||||
set_last(io, SIM_IO_OK);
|
||||
mirror_pins(io);
|
||||
return SIM_IO_OK;
|
||||
}
|
||||
|
||||
int sim_io_spindle_set_inhibit(sim_io *io, uint32_t spindle, uint32_t inhibit) {
|
||||
if (!valid_spindle(io, spindle) || inhibit > 1U) return SIM_IO_ERR_ARGUMENT;
|
||||
io->state.spindles[spindle].inhibit = inhibit;
|
||||
@@ -607,9 +623,9 @@ uint32_t sim_io_canonical(const sim_io *io, char *output, uint32_t capacity) {
|
||||
const sim_io_spindle_state *spindle = &io->state.spindles[index];
|
||||
int part = snprintf(destination + (output && (uint32_t)written < capacity ? written : 0),
|
||||
output && (uint32_t)written < capacity ? capacity - (uint32_t)written : 0,
|
||||
"%s{\"at_speed\":%u,\"brake\":%u,\"command_rpm\":%.9g,\"forward\":%u,\"reverse\":%u,\"speed_rpm\":%.9g,\"tick\":%u}",
|
||||
"%s{\"at_speed\":%u,\"brake\":%u,\"command_rpm\":%.9g,\"enabled\":%u,\"forward\":%u,\"inhibit\":%u,\"override\":%.9g,\"reverse\":%u,\"speed_rpm\":%.9g,\"tick\":%u}",
|
||||
index ? "," : "", spindle->at_speed, spindle->brake, spindle->command_rpm,
|
||||
spindle->forward, spindle->reverse, spindle->speed_rpm, spindle->tick);
|
||||
spindle->enabled, spindle->forward, spindle->inhibit, spindle->override_scale, spindle->reverse, spindle->speed_rpm, spindle->tick);
|
||||
if (part < 0) return 0; written += part;
|
||||
}
|
||||
{ int part = snprintf(destination + (output && (uint32_t)written < capacity ? written : 0),
|
||||
|
||||
Reference in New Issue
Block a user