Files
linuxcncWebWASM/wasm-core/include/sim_interpreter.h

100 lines
3.3 KiB
C

#ifndef LINUXCNC_WEB_WASM_SIM_INTERPRETER_H
#define LINUXCNC_WEB_WASM_SIM_INTERPRETER_H
#include <stdint.h>
#include "sim_posemath.h"
#ifdef __cplusplus
extern "C" {
#endif
enum sim_interpreter_result {
SIM_INTERP_OK = 0,
SIM_INTERP_ERR_ARGUMENT = -500,
SIM_INTERP_ERR_NONFINITE = -501,
SIM_INTERP_ERR_SYNTAX = -502,
SIM_INTERP_ERR_RANGE = -503,
SIM_INTERP_ERR_UNKNOWN_CODE = -504,
SIM_INTERP_ERR_STATE = -505,
SIM_INTERP_ERR_BUFFER = -506,
SIM_INTERP_ERR_PARAMETER = -507,
SIM_INTERP_ERR_EXPRESSION = -508,
};
enum sim_interpreter_units {
SIM_INTERP_UNITS_INCH = 20,
SIM_INTERP_UNITS_MM = 21,
};
enum sim_interpreter_distance_mode {
SIM_INTERP_ABSOLUTE = 90,
SIM_INTERP_INCREMENTAL = 91,
};
typedef struct sim_interpreter_state {
double x;
double y;
double z;
double a;
double b;
double c;
double u;
double v;
double w;
double feed;
double speed;
uint32_t line;
int units;
int distance_mode;
int plane;
int motion_mode;
int spindle_mode;
int program_end;
int status;
} sim_interpreter_state;
#define SIM_INTERPRETER_CANONICAL_CAPACITY 512u
#define SIM_INTERPRETER_PARAMETER_MIN 1u
#define SIM_INTERPRETER_PARAMETER_MAX 5399u
typedef struct sim_interpreter {
sim_interpreter_state state;
uint64_t block_hash;
uint32_t canonical_length;
char canonical[SIM_INTERPRETER_CANONICAL_CAPACITY];
} sim_interpreter;
typedef struct sim_coordinate_context {
double offsets[9][9];
int system;
} sim_coordinate_context;
int sim_interpreter_get_coordinates(const sim_interpreter *interpreter, sim_coordinate_context *context);
int sim_interpreter_set_coordinates(sim_interpreter *interpreter, const sim_coordinate_context *context);
int sim_interpreter_sync_position(sim_interpreter *interpreter, const sim_posemath_pose *position);
int sim_interpreter_init(sim_interpreter *interpreter);
uint32_t sim_interpreter_checkpoint_size(void);
int32_t sim_interpreter_checkpoint_export(const sim_interpreter *interpreter, uint8_t *output, uint32_t capacity);
int32_t sim_interpreter_checkpoint_restore(sim_interpreter *interpreter, const uint8_t *input, uint32_t length);
int sim_interpreter_reset(sim_interpreter *interpreter);
int sim_interpreter_execute(sim_interpreter *interpreter, const char *block, uint32_t length);
uint32_t sim_interpreter_size(void);
int sim_interpreter_read_state(const sim_interpreter *interpreter, sim_interpreter_state *state);
int sim_interpreter_read_motion(const sim_interpreter *interpreter, sim_posemath_segment *segment);
uint32_t sim_interpreter_motion_size(void);
uint32_t sim_interpreter_canonical(const sim_interpreter *interpreter, char *output, uint32_t capacity);
uint64_t sim_interpreter_state_hash(const sim_interpreter *interpreter);
uint64_t sim_interpreter_block_hash(const sim_interpreter *interpreter);
uint64_t sim_interpreter_modal_hash(const sim_interpreter *interpreter);
uint32_t sim_interpreter_error_column(const sim_interpreter *interpreter);
int32_t sim_interpreter_error_code(const sim_interpreter *interpreter);
int sim_interpreter_parameter_set(sim_interpreter *interpreter, uint32_t index, double value);
int sim_interpreter_parameter_get(const sim_interpreter *interpreter, uint32_t index, double *value);
#ifdef __cplusplus
}
#endif
#endif