#ifndef CONTROLLER_H #define CONTROLLER_H #include "event.h" #include "gb_math.h" #include "stepper.h" #include "path.h" #include "angle.h" #define VEL_DIV 1024 #ifdef __cplusplus extern "C" { #endif enum { CONTROLLER_OK = 0, CONTROLLER_ERR = -1, CONTROLLER_NO_PATH = -2, CONTROLLER_STATISFIED = -3, }; typedef struct { stepper_t *stepper_a; stepper_t *stepper_b; uint32_t time_step; path_t *path; thread_flags_t flags; } controller_t; /** * @brief Initialize controller * * @param[out] control struct describing the controller */ int controller_init(controller_t *control); /** * @brief execute main loop of the controller * * @param[in] control struct describing the controller */ int controller_loop(controller_t *control); //void controller_update(event_t *event); //int controller_setpoint(controller_t *control, gbVec2 *point); // //void controller_inverse_kinematics(controller_t *control, gbVec2 *point, float *angle1, float *angle2); // //void controller_current_position(controller_t *control, gbVec2 *point); // //int controller_calculate_velocity(controller_t *control); // //int controller_sub_setpoint(controller_t *control, gbVec2 *setpoint, float distance); /** * @brief home both stepper motors * * @param[in] control struct describing the controller */ int controller_home(controller_t *control); #ifdef __cplusplus } #endif #endif /* CONTROLLER_H */