#ifndef LINUXCNC_WEB_WASM_SIM_LINUXCNC_TP_H #define LINUXCNC_WEB_WASM_SIM_LINUXCNC_TP_H #include #include "sim_posemath.h" #ifdef __cplusplus extern "C" { #endif typedef struct sim_linuxcnc_tp sim_linuxcnc_tp; typedef struct sim_linuxcnc_tp_segment { sim_posemath_segment segment; uint32_t id; int term_cond; double progress; double target; } sim_linuxcnc_tp_segment; uint32_t sim_linuxcnc_tp_size(void); uint32_t sim_linuxcnc_tp_queue_capacity(const sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_init(sim_linuxcnc_tp *planner, double cycle_time, double velocity_limit, double acceleration_limit); int32_t sim_linuxcnc_tp_reset(sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_set_profile(sim_linuxcnc_tp *planner, int profile, double tolerance); int32_t sim_linuxcnc_tp_set_feed_override(sim_linuxcnc_tp *planner, double scale); int32_t sim_linuxcnc_tp_set_velocity_scale(sim_linuxcnc_tp *planner, double scale); int32_t sim_linuxcnc_tp_set_jog_scale(sim_linuxcnc_tp *planner, double scale); int32_t sim_linuxcnc_tp_set_axis_limit(sim_linuxcnc_tp *planner, int axis, double minimum, double maximum); int32_t sim_linuxcnc_tp_jog(sim_linuxcnc_tp *planner, int axis, int direction, double increment, uint32_t tag); double sim_linuxcnc_tp_velocity_scale(const sim_linuxcnc_tp *planner); double sim_linuxcnc_tp_velocity_limit(const sim_linuxcnc_tp *planner); double sim_linuxcnc_tp_velocity_mm_min(const sim_linuxcnc_tp *planner); double sim_linuxcnc_tp_jog_scale(const sim_linuxcnc_tp *planner); double sim_linuxcnc_tp_jog_velocity(const sim_linuxcnc_tp *planner, int axis); double sim_linuxcnc_tp_feed_override(const sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_set_dynamics(sim_linuxcnc_tp *planner, double acceleration_limit); int32_t sim_linuxcnc_tp_set_paused(sim_linuxcnc_tp *planner, int paused); int32_t sim_linuxcnc_tp_step_line(sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_is_stepping(const sim_linuxcnc_tp *planner); double sim_linuxcnc_tp_axis_limit(const sim_linuxcnc_tp *planner, int axis, int maximum); int32_t sim_linuxcnc_tp_abort(sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_set_position(sim_linuxcnc_tp *planner, const sim_posemath_pose *position); int32_t sim_linuxcnc_tp_set_goal_position(sim_linuxcnc_tp *planner, const sim_posemath_pose *position); int32_t sim_linuxcnc_tp_add_line(sim_linuxcnc_tp *planner, const sim_posemath_pose *end, double velocity, double acceleration, uint32_t tag, int canon_motion_type); int32_t sim_linuxcnc_tp_add_circle(sim_linuxcnc_tp *planner, const sim_posemath_pose *end, const sim_posemath_cartesian *center, const sim_posemath_cartesian *normal, int turn, double velocity, double acceleration, uint32_t tag, int canon_motion_type); int32_t sim_linuxcnc_tp_step(sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_idle(sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_read_state(const sim_linuxcnc_tp *planner, sim_tp_state *state); uint32_t sim_linuxcnc_tp_queue_depth(const sim_linuxcnc_tp *planner); int32_t sim_linuxcnc_tp_queue_segment(const sim_linuxcnc_tp *planner, uint32_t index, sim_linuxcnc_tp_segment *segment); int32_t sim_linuxcnc_tp_restore_progress(sim_linuxcnc_tp *planner, const sim_posemath_pose *position, double velocity, uint32_t tick); uint64_t sim_linuxcnc_tp_state_hash(const sim_linuxcnc_tp *planner); uint32_t sim_linuxcnc_tp_canonical(const sim_linuxcnc_tp *planner, char *output, uint32_t capacity); #ifdef __cplusplus } #endif #endif