Enforce LinuxCNC WASM authority for XYZAC frontend
This commit is contained in:
@@ -64,6 +64,7 @@ int sim_kinematics_home_limit_home(sim_kinematics_home_limit *home_limit,
|
||||
memcpy(home_limit->state.joints, joints, sizeof(double) * home_limit->state.joint_count);
|
||||
home_limit->state.pose = pose;
|
||||
home_limit->state.home_sequence = home_sequence;
|
||||
home_limit->state.homed_mask = home_limit->state.joint_count >= 32 ? UINT32_MAX : (UINT32_C(1) << home_limit->state.joint_count) - 1U;
|
||||
home_limit->state.homed = 1;
|
||||
home_limit->state.tick += 1;
|
||||
home_limit->state.last_error = SIM_KIN_HOME_OK;
|
||||
@@ -72,6 +73,33 @@ int sim_kinematics_home_limit_home(sim_kinematics_home_limit *home_limit,
|
||||
return SIM_KIN_HOME_OK;
|
||||
}
|
||||
|
||||
int sim_kinematics_home_limit_home_joint(sim_kinematics_home_limit *home_limit,
|
||||
uint32_t home_sequence, uint32_t joint) {
|
||||
sim_posemath_pose pose;
|
||||
double joints[SIM_KIN_MAX_JOINTS] = {0};
|
||||
int result;
|
||||
if (home_limit == 0 || home_limit->kinematics == 0 || joint >= home_limit->state.joint_count) return SIM_KIN_HOME_ERR_ARGUMENT;
|
||||
if (home_sequence > 0xffffu) return SIM_KIN_HOME_ERR_SEQUENCE;
|
||||
if (home_limit->state.homed_mask != 0) memcpy(joints, home_limit->state.joints, sizeof(double) * home_limit->state.joint_count);
|
||||
else {
|
||||
result = sim_kinematics_home(home_limit->kinematics, joints, home_limit->state.joint_count, &pose);
|
||||
if (result != SIM_KIN_OK) return SIM_KIN_HOME_ERR_FORWARD;
|
||||
}
|
||||
joints[joint] = 0.0;
|
||||
result = sim_kinematics_forward(home_limit->kinematics, joints, home_limit->state.joint_count, &pose);
|
||||
if (result != SIM_KIN_OK) return SIM_KIN_HOME_ERR_FORWARD;
|
||||
memcpy(home_limit->state.joints, joints, sizeof(double) * home_limit->state.joint_count);
|
||||
home_limit->state.pose = pose;
|
||||
home_limit->state.home_sequence = home_sequence;
|
||||
home_limit->state.homed_mask |= UINT32_C(1) << joint;
|
||||
home_limit->state.homed = home_limit->state.homed_mask == (home_limit->state.joint_count >= 32 ? UINT32_MAX : (UINT32_C(1) << home_limit->state.joint_count) - 1U);
|
||||
home_limit->state.tick += 1;
|
||||
home_limit->state.last_error = SIM_KIN_HOME_OK;
|
||||
home_limit->state.limit_error = SIM_KIN_OK;
|
||||
home_limit->state.kinematics_error = SIM_KIN_OK;
|
||||
return SIM_KIN_HOME_OK;
|
||||
}
|
||||
|
||||
int sim_kinematics_home_limit_check(sim_kinematics_home_limit *home_limit,
|
||||
const double *joints,
|
||||
uint32_t joint_count) {
|
||||
|
||||
Reference in New Issue
Block a user