#ifndef LINUXCNC_WEB_WASM_SIM_KINEMATICS_FEEDBACK_H #define LINUXCNC_WEB_WASM_SIM_KINEMATICS_FEEDBACK_H #include "sim_kinematics.h" #ifdef __cplusplus extern "C" { #endif enum sim_kinematics_feedback_result { SIM_KIN_FEEDBACK_OK = 0, SIM_KIN_FEEDBACK_ERR_ARGUMENT = -820, SIM_KIN_FEEDBACK_ERR_CONFIGURATION = -821, SIM_KIN_FEEDBACK_ERR_NONFINITE = -822, SIM_KIN_FEEDBACK_ERR_FORWARD = -823, SIM_KIN_FEEDBACK_ERR_STATE = -824, }; typedef struct sim_kinematics_feedback_state { sim_posemath_pose pose; uint64_t forward_flags; uint64_t inverse_flags; double joints[SIM_KIN_MAX_JOINTS]; uint32_t joint_count; uint32_t tick; uint32_t valid; int last_error; int kinematics_error; } sim_kinematics_feedback_state; typedef struct sim_kinematics_feedback { sim_kinematics *kinematics; sim_kinematics_feedback_state state; } sim_kinematics_feedback; int sim_kinematics_feedback_init(sim_kinematics_feedback *feedback, sim_kinematics *kinematics, uint32_t joint_count); int sim_kinematics_feedback_reset(sim_kinematics_feedback *feedback); int sim_kinematics_feedback_update(sim_kinematics_feedback *feedback, const double *joints, uint32_t joint_count, uint64_t inverse_flags, sim_kinematics_result_info *info); int sim_kinematics_feedback_read(const sim_kinematics_feedback *feedback, sim_kinematics_feedback_state *state); uint64_t sim_kinematics_feedback_state_hash(const sim_kinematics_feedback *feedback); #ifdef __cplusplus } #endif #endif