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.6 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include <stdint.h>
  3. #include <functional>
  4. #include "basic_type.hpp"
  5. //
  6. namespace iflytop {
  7. using namespace std;
  8. class I_StepMotorCtrlModule {
  9. public:
  10. typedef enum { hbot, corexy } RobotType_t;
  11. typedef enum { kNormalStop, kBreakStop } StopType_t;
  12. /*******************************************************************************
  13. * ACTION *
  14. *******************************************************************************/
  15. #pragma pack(1)
  16. /*******************************************************************************
  17. * READ *
  18. *******************************************************************************/
  19. typedef struct {
  20. int32_t version;
  21. } version_t;
  22. typedef struct {
  23. uint8_t status;
  24. uint8_t io_state; // x_zero_io x_end_io
  25. int32_t x;
  26. } status_t;
  27. typedef struct {
  28. uint8_t status;
  29. uint8_t io_state; // x_zero_io x_end_io
  30. int32_t x;
  31. int32_t last_exec_status;
  32. } detailed_status_t;
  33. /*******************************************************************************
  34. * CFG *
  35. *******************************************************************************/
  36. typedef struct {
  37. s32 motor_shaft;
  38. s32 motor_one_circle_pulse; //
  39. s32 motor_one_circle_pulse_denominator; //
  40. s32 stepmotor_ihold;
  41. s32 stepmotor_irun;
  42. s32 stepmotor_iholddelay;
  43. s32 motor_default_acc;
  44. s32 motor_default_dec;
  45. s32 motor_default_velocity;
  46. s32 min_d;
  47. s32 max_d;
  48. //
  49. s32 motor_shift;
  50. s32 motor_run_to_zero_max_d;
  51. s32 motor_run_to_zero_speed;
  52. s32 motor_run_to_zero_dec;
  53. s32 motor_look_zero_edge_max_d;
  54. s32 motor_look_zero_edge_speed;
  55. s32 motor_look_zero_edge_dec;
  56. } base_param_t;
  57. typedef struct {
  58. u8 index;
  59. s32 acc;
  60. s32 dec;
  61. s32 velocity;
  62. s32 x;
  63. } logic_point_t;
  64. typedef struct {
  65. bool configInited;
  66. base_param_t base_param;
  67. logic_point_t logic_point[5];
  68. } flash_config_t;
  69. #pragma pack()
  70. public:
  71. virtual bool isbusy() = 0;
  72. virtual int32_t get_last_exec_status() = 0;
  73. virtual int32_t move_to(int32_t x, action_cb_status_t status_cb) = 0;
  74. virtual int32_t move_by(int32_t dx, action_cb_status_t status_cb) = 0;
  75. virtual int32_t move_to(int32_t x, int32_t velocity, action_cb_status_t status_cb) = 0;
  76. virtual int32_t move_by(int32_t dx, int32_t velocity, action_cb_status_t status_cb) = 0;
  77. virtual int32_t move_to_zero(action_cb_status_t status_cb) = 0;
  78. virtual int32_t move_to_zero_with_calibrate(int32_t x, action_cb_status_t status_cb) = 0;
  79. virtual int32_t rotate(int32_t speed, int32_t lastforms, action_cb_status_t status_cb) = 0;
  80. virtual int32_t enable(bool venable) = 0;
  81. virtual int32_t stop(uint8_t stopType) = 0;
  82. virtual int32_t force_change_current_pos(int32_t x) = 0;
  83. virtual int32_t move_to_logic_point(int32_t logic_point_num, action_cb_status_t status_cb) = 0;
  84. virtual int32_t set_logic_point(int logic_point_num, int32_t x, int32_t vel, s32 acc, s32 dec) = 0;
  85. virtual int32_t get_logic_point(int logic_point_num, logic_point_t& logic_point) = 0;
  86. virtual int32_t flush() = 0;
  87. virtual int32_t factory_reset() = 0;
  88. virtual int32_t move_to_block(int32_t tox, int overtime = 0) = 0;
  89. virtual int32_t move_by_block(int32_t dx, int overtime = 0) = 0;
  90. virtual int32_t move_to_block(int32_t tox, int32_t velocity, int overtime = 0) = 0;
  91. virtual int32_t move_by_block(int32_t dx, int32_t velocity, int overtime = 0) = 0;
  92. virtual int32_t move_to_zero_block(int overtime = 0) = 0;
  93. virtual int32_t move_to_zero_with_calibrate_block(int32_t x, int overtime = 0) = 0;
  94. virtual int32_t read_version(version_t& version) = 0;
  95. virtual int32_t read_status(status_t& status) = 0;
  96. virtual int32_t read_detailed_status(detailed_status_t& debug_info) = 0;
  97. virtual int32_t read_pos(int32_t& pos) = 0;
  98. virtual int32_t read_pos() = 0;
  99. virtual bool read_zero_io_state() = 0;
  100. virtual int32_t set_base_param(const base_param_t& param) = 0;
  101. virtual int32_t get_base_param(base_param_t& param) = 0;
  102. ~I_StepMotorCtrlModule() {}
  103. };
  104. } // namespace iflytop