#pragma once #include #include #include "basic_type.hpp" // namespace iflytop { using namespace std; class I_StepMotorCtrlModule { public: typedef enum { hbot, corexy } RobotType_t; typedef enum { kNormalStop, kBreakStop } StopType_t; /******************************************************************************* * ACTION * *******************************************************************************/ #pragma pack(1) /******************************************************************************* * READ * *******************************************************************************/ typedef struct { int32_t version; } version_t; typedef struct { uint8_t status; uint8_t io_state; // x_zero_io x_end_io int32_t x; } status_t; typedef struct { uint8_t status; uint8_t io_state; // x_zero_io x_end_io int32_t x; int32_t last_exec_status; } detailed_status_t; /******************************************************************************* * CFG * *******************************************************************************/ typedef struct { s32 x_shaft; s32 distance_scale; // 0.001 s32 ihold; s32 irun; u16 iholddelay; s32 acc; s32 dec; s32 maxspeed; s32 min_x; s32 max_x; // s32 shift_x; s32 run_to_zero_move_to_zero_max_d; s32 run_to_zero_leave_from_zero_max_d; s32 run_to_zero_speed; s32 run_to_zero_dec; } base_param_t; typedef struct { u8 index; s32 acc; s32 dec; s32 velocity; s32 x; } logic_point_t; typedef struct { base_param_t base_param; logic_point_t logic_point[5]; } flash_config_t; #pragma pack() public: virtual bool isbusy() = 0; virtual int32_t get_last_exec_status() = 0; virtual int32_t move_to(int32_t x, action_cb_status_t status_cb) = 0; virtual int32_t move_by(int32_t dx, action_cb_status_t status_cb) = 0; virtual int32_t move_to(int32_t x, int32_t velocity, action_cb_status_t status_cb) = 0; virtual int32_t move_by(int32_t dx, int32_t velocity, action_cb_status_t status_cb) = 0; virtual int32_t move_to_zero(action_cb_status_t status_cb) = 0; virtual int32_t move_to_zero_with_calibrate(int32_t x, action_cb_status_t status_cb) = 0; virtual int32_t rotate(int32_t speed, int32_t lastforms, action_cb_status_t status_cb) = 0; virtual int32_t enable(bool venable) = 0; virtual int32_t stop(uint8_t stopType) = 0; virtual int32_t force_change_current_pos(int32_t x) = 0; virtual int32_t move_to_logic_point(int32_t logic_point_num, action_cb_status_t status_cb) = 0; virtual int32_t set_logic_point(int logic_point_num, int32_t x, int32_t vel, s32 acc, s32 dec) = 0; virtual int32_t get_logic_point(int logic_point_num, logic_point_t& logic_point) = 0; virtual int32_t flush() = 0; virtual int32_t factory_reset() = 0; virtual int32_t move_to_block(int32_t tox, int overtime = 0) = 0; virtual int32_t move_by_block(int32_t dx, int overtime = 0) = 0; virtual int32_t move_to_block(int32_t tox, int32_t velocity, int overtime = 0) = 0; virtual int32_t move_by_block(int32_t dx, int32_t velocity, int overtime = 0) = 0; virtual int32_t move_to_zero_block(int overtime = 0) = 0; virtual int32_t move_to_zero_with_calibrate_block(int32_t x, int overtime = 0) = 0; virtual int32_t read_version(version_t& version) = 0; virtual int32_t read_status(status_t& status) = 0; virtual int32_t read_detailed_status(detailed_status_t& debug_info) = 0; virtual int32_t read_pos(int32_t& pos) = 0; virtual int32_t read_pos() = 0; virtual bool read_zero_io_state() = 0; virtual int32_t set_base_param(const base_param_t& param) = 0; virtual int32_t get_base_param(base_param_t& param) = 0; ~I_StepMotorCtrlModule() {} }; } // namespace iflytop