You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.4 KiB

#pragma once
#include <stdint.h>
#include <functional>
#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; //
s32 distance_scale_denominator; //
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_max_d;
s32 run_to_zero_speed;
s32 run_to_zero_dec;
s32 look_zero_edge_max_d;
s32 look_zero_edge_speed;
s32 look_zero_edge_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