diff --git a/api/i_mini_servo_module.hpp b/api/i_mini_servo_module.hpp new file mode 100644 index 0000000..457beff --- /dev/null +++ b/api/i_mini_servo_module.hpp @@ -0,0 +1,118 @@ +#pragma once +#include + +#include + +#include "basic_type.hpp" +// + +namespace iflytop { +using namespace std; +class I_MiniServoModule { + public: + typedef enum { kNormalStop, kBreakStop } StopType_t; + + typedef struct { + u8 id; + u8 status; + s32 has_run_time; + } rotate_cb_status_t; + + typedef struct { + u8 id; + u8 status; + s32 pos; + } move_to_cb_status_t; + + typedef struct { + u8 id; + u8 status; + s32 pos; + } move_by_cb_status_t; + + typedef struct { + u8 id; + u8 status; + s32 has_run_time; + } run_with_torque_cb_status_t; + + typedef struct { + u8 id; + u8 status; + s32 pos; + } move_by_nolimit_cb_status_t; + + /******************************************************************************* + * READ * + *******************************************************************************/ + typedef struct { + int32_t version; + } version_t; + + typedef struct { + uint8_t status; // 0:normal 1:运行中 2:offline 3:故障 + uint8_t io_state; // + int16_t torque; // + int16_t speed; // + int16_t pos; // + } status_t; + + typedef struct { + uint8_t status; + uint8_t io_state; + int16_t torque; + int16_t speed; + int16_t pos; + int16_t voltage; + int16_t current; + int16_t temperature; + int16_t error_flag; + + } debug_info_t; + + /******************************************************************************* + * CFG * + *******************************************************************************/ + + typedef struct { + s16 pos_calibrate; + } basic_param_t; + + typedef struct { + s16 minlimit; + s16 maxlimit; + } run_param_t; + + typedef struct { + s16 mintemp; + s16 maxtemp; + s16 minvoltage; + s16 maxvoltage; + s16 mincurrent; + s16 maxcurrent; + } warning_limit_param_t; + + public: + virtual int32_t enable(u8 enable) = 0; + virtual int32_t stop(u8 stop_type) = 0; + virtual int32_t position_calibrate(s32 calibrate_pos) = 0; + + virtual int32_t rotate(s32 speed, s32 run_time, function status_cb) = 0; + virtual int32_t move_to(s32 pos, s32 speed, s32 torque, function status_cb) = 0; + virtual int32_t move_by(s32 pos, s32 speed, s32 torque, function status_cb) = 0; + virtual int32_t run_with_torque(s32 torque, s32 run_time, function status_cb) = 0; + virtual int32_t move_by_nolimit(s32 pos, s32 speed, s32 torque, function status_cb) = 0; + + virtual int32_t read_version(version_t& version) = 0; + virtual int32_t read_status(status_t& status) = 0; + virtual int32_t read_debug_info(debug_info_t& debug_info) = 0; + + virtual int32_t set_run_param(run_param_t& param) = 0; + virtual int32_t set_basic_param(basic_param_t& param) = 0; + virtual int32_t set_warning_limit_param(warning_limit_param_t& param) = 0; + + virtual int32_t get_run_param(run_param_t& param) = 0; + virtual int32_t get_basic_param(basic_param_t& param) = 0; + virtual int32_t get_warning_limit_param(warning_limit_param_t& param) = 0; +}; +} // namespace iflytop \ No newline at end of file diff --git a/zcancmder_protocol.hpp b/zcancmder_protocol.hpp index 63a1374..2fba8e7 100644 --- a/zcancmder_protocol.hpp +++ b/zcancmder_protocol.hpp @@ -76,8 +76,10 @@ typedef enum { kcmd_mini_servo_ctrl_read_status = CMDID(1008, 51), // 读取模块精简状态信息 kcmd_mini_servo_ctrl_read_debug_info = CMDID(1008, 52), // 读取模块详细状态信息 - kcmd_mini_servo_ctrl_set_run_param = CMDID(1008, 100), // 位置限制 最大位置,最小位置 - kcmd_mini_servo_ctrl_set_warning_limit_param = CMDID(1008, 101), // 过压保护设置 最大电压 最小电压 + kcmd_mini_servo_ctrl_set_run_param = CMDID(1008, 100), + kcmd_mini_servo_ctrl_get_run_param = CMDID(1008, 101), + kcmd_mini_servo_ctrl_set_warning_limit_param = CMDID(1008, 101), + kcmd_mini_servo_ctrl_get_warning_limit_param = CMDID(1008, 102), /******************************************************************************* * |Module_1009:EEPROM *