diff --git a/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp b/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp index 0f72885..938bfba 100644 --- a/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp +++ b/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp @@ -5,9 +5,11 @@ #include "feite_servo_motor.hpp" #include "sdk/components/zprotocols/zcancmder/api/i_mini_servo_module.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp" +#include "sdk\components\zcancmder\zimodule_impl_v1.hpp" + namespace iflytop { -class MiniRobotCtrlModule : public I_MiniServoModule, public ZIModule, public ZIMotor { +class MiniRobotCtrlModule : public I_MiniServoModule, public ZIModuleImplV1, public ZIMotor { ENABLE_MODULE(StepMotorCtrlModule, kmini_servo_motor_module, 0x0001); public: diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp b/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp index 1364901..421907f 100644 --- a/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp +++ b/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp @@ -3,8 +3,9 @@ #include "sdk/os/zos.hpp" #include "sdk\components\tmc\basic\tmc_ic_interface.hpp" #include "sdk\components\zcancmder\zcanreceiver.hpp" +#include "sdk\components\zcancmder\zimodule_impl_v1.hpp" namespace iflytop { -class StepMotorCtrlModule : public ZIModule, public ZIMotor { +class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { ENABLE_MODULE(StepMotorCtrlModule, kmotor_module, 0x0001); public: diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp new file mode 100644 index 0000000..e69de29 diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp new file mode 100644 index 0000000..e69de29 diff --git a/components/zcancmder/zcan_board_module.hpp b/components/zcancmder/zcan_board_module.hpp index dfe1685..f42ebc4 100644 --- a/components/zcancmder/zcan_board_module.hpp +++ b/components/zcancmder/zcan_board_module.hpp @@ -9,7 +9,7 @@ #include "sdk/chip/api/zi_temperature.hpp" #include "sdk\chip\api\zi_adc.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp" - +#include "sdk\components\zcancmder\zimodule_impl_v1.hpp" /** * @brief * @@ -30,7 +30,7 @@ namespace iflytop { using namespace std; -class ZCanBoardModule : public ZIModule { +class ZCanBoardModule : public ZIModuleImplV1 { public: typedef struct { ZGPIO::InputGpioCfg_t input[32]; diff --git a/components/zcancmder/zimodule_impl_v1.hpp b/components/zcancmder/zimodule_impl_v1.hpp new file mode 100644 index 0000000..70193e2 --- /dev/null +++ b/components/zcancmder/zimodule_impl_v1.hpp @@ -0,0 +1,137 @@ +#pragma once +#include + +#include + +#include "sdk\components\zprotocols\zcancmder_v2\api\zi_module.hpp" + +namespace iflytop { +using namespace std; + +#define REG_SET(reg, ...) _module_set_reg(param_id, ®, val, ##__VA_ARGS__) +#define REG_GET(reg) _module_get_reg(param_id, reg, val) + +#define REG_SET_FLOAT(reg, precision, ...) _module_set_reg_float(param_id, ®, val, precision, ##__VA_ARGS__) +#define REG_GET_FLOAT(reg, precision) _module_get_reg_float(param_id, reg, val, precision) + +#define ACTION_NONE 0 +#define PROCESS_REG(param_id, readaction, writeacton) \ + case param_id: { \ + if (read) { \ + return readaction; \ + } else { \ + return writeacton; \ + } \ + } break; + +#define ENABLE_MODULE(name, type, version) \ + const char *module_name = #name; \ + int32_t module_version = version; \ + int32_t module_type = type; + +#define MODULE_COMMON_PROCESS_REG_CB() \ + PROCESS_REG(kreg_module_version, /* */ REG_GET(module_version), ACTION_NONE); \ + PROCESS_REG(kreg_module_type, /* */ REG_GET(module_type), ACTION_NONE); \ + PROCESS_REG(kreg_module_status, /* */ module_get_status(&val), ACTION_NONE); \ + PROCESS_REG(kreg_module_errorcode, /* */ REG_GET(m_com_reg.module_errorcode), ACTION_NONE); \ + PROCESS_REG(kreg_module_initflag, /* */ module_get_inited_flag(&val), module_set_inited_flag(val)); \ + PROCESS_REG(kreg_module_errorbitflag0, /* */ REG_GET(m_com_reg.module_errorbitflag0), ACTION_NONE); \ + PROCESS_REG(kreg_module_enableflag, /* */ REG_GET(m_com_reg.module_enable), ACTION_NONE); + +typedef struct { + // int32_t module_version; + // int32_t module_type; + int32_t module_errorcode; + int32_t module_errorbitflag0; + int32_t module_enable; +} module_common_reg_t; + +class ZIModuleImplV1 : public ZIModule { + int32_t m_inited_flag = 0; + + protected: + module_common_reg_t m_com_reg; + + public: + virtual ~ZIModuleImplV1() {} + virtual int32_t getid() { + int32_t id = 0; + getid(&id); + return id; + }; + + virtual int32_t getid(int32_t *id) = 0; + + virtual int32_t module_ping() { return 0; }; + + virtual int32_t module_stop() { return err::koperation_not_support; } + virtual int32_t module_break() { return module_stop(); } + virtual int32_t module_start() { return err::koperation_not_support; } + + virtual int32_t module_get_status(int32_t *status) = 0; + virtual int32_t module_get_error(int32_t *iserror) { + *iserror = m_com_reg.module_errorcode; + return 0; + } + virtual int32_t module_clear_error() { + m_com_reg.module_errorcode = 0; + m_com_reg.module_errorbitflag0 = 0; + return 0; + } + + virtual int32_t module_enable(int32_t enable) { return err::koperation_not_support; } + + virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::koperation_not_support; } + + virtual int32_t module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } + virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value) { return module_xxx_reg(param_id, true, *param_value); } + + virtual int32_t module_readio(int32_t *io) { return err::koperation_not_support; } + virtual int32_t module_writeio(int32_t idindex, int32_t io) { return err::koperation_not_support; } + + virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) { return err::koperation_not_support; } + + virtual int32_t module_read_raw(int32_t index, uint8_t *data, int32_t *len) { return err::koperation_not_support; } + + virtual int32_t module_set_inited_flag(int32_t flag) { + m_inited_flag = flag; + return 0; + } + virtual int32_t module_get_inited_flag(int32_t *flag) { + *flag = m_inited_flag; + return 0; + } + + virtual int32_t module_get_inited_flag() { return m_inited_flag; } + + virtual int32_t module_factory_reset() { return err::koperation_not_support; } + virtual int32_t module_flush_cfg() { return err::ksucc; } + virtual int32_t module_active_cfg() { return err::ksucc; } + + virtual int32_t _module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min = INT32_MIN, int32_t max = INT32_MAX) { + if (val < min || val > max) { + return err::kparam_out_of_range; + } + *regval = val; + return 0; + } + virtual int32_t _module_get_reg(int32_t regoff, int32_t regval, int32_t &val) { + val = regval; + return 0; + } + + virtual int32_t _module_set_reg_float(int32_t regoff, float *regval, int32_t val, float precision, int32_t min = INT32_MIN, int32_t max = INT32_MAX) { + if (val < min || val > max) { + return err::kparam_out_of_range; + } + *regval = val * precision; + return 0; + } + virtual int32_t _module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision) { + val = regval / precision; + return 0; + } + + public: +}; +} // namespace iflytop diff --git a/components/zprotocols/zcancmder_v2/api/zi_module.hpp b/components/zprotocols/zcancmder_v2/api/zi_module.hpp index 61fdc23..aa6f128 100644 --- a/components/zprotocols/zcancmder_v2/api/zi_module.hpp +++ b/components/zprotocols/zcancmder_v2/api/zi_module.hpp @@ -9,134 +9,32 @@ namespace iflytop { using namespace std; -#define REG_SET(reg, ...) _module_set_reg(param_id, ®, val, ##__VA_ARGS__) -#define REG_GET(reg) _module_get_reg(param_id, reg, val) - -#define REG_SET_FLOAT(reg, precision, ...) _module_set_reg_float(param_id, ®, val, precision, ##__VA_ARGS__) -#define REG_GET_FLOAT(reg, precision) _module_get_reg_float(param_id, reg, val, precision) - -#define ACTION_NONE 0 -#define PROCESS_REG(param_id, readaction, writeacton) \ - case param_id: { \ - if (read) { \ - return readaction; \ - } else { \ - return writeacton; \ - } \ - } break; - - -#define ENABLE_MODULE(name, type, version) \ - const char *module_name = #name; \ - int32_t module_version = version; \ - int32_t module_type = type; - -#define MODULE_COMMON_PROCESS_REG_CB() \ - PROCESS_REG(kreg_module_version, /* */ REG_GET(module_version), ACTION_NONE); \ - PROCESS_REG(kreg_module_type, /* */ REG_GET(module_type), ACTION_NONE); \ - PROCESS_REG(kreg_module_status, /* */ module_get_status(&val), ACTION_NONE); \ - PROCESS_REG(kreg_module_errorcode, /* */ REG_GET(m_com_reg.module_errorcode), ACTION_NONE); \ - PROCESS_REG(kreg_module_initflag, /* */ module_get_inited_flag(&val), module_set_inited_flag(val)); \ - PROCESS_REG(kreg_module_errorbitflag0, /* */ REG_GET(m_com_reg.module_errorbitflag0), ACTION_NONE); \ - PROCESS_REG(kreg_module_enableflag, /* */ REG_GET(m_com_reg.module_enable), ACTION_NONE); \ - -typedef struct { - // int32_t module_version; - // int32_t module_type; - int32_t module_errorcode; - int32_t module_errorbitflag0; - int32_t module_enable; -} module_common_reg_t; - - - class ZIModule { - int32_t m_inited_flag = 0; - - protected: - module_common_reg_t m_com_reg; - public: virtual ~ZIModule() {} - virtual int32_t getid(int32_t *id) = 0; - virtual int32_t getid() { - int32_t id = 0; - getid(&id); - return id; - }; - - virtual int32_t module_ping() { return 0; }; - - virtual int32_t module_stop() { return err::koperation_not_support; } - virtual int32_t module_break() { return module_stop(); } - virtual int32_t module_start() { return err::koperation_not_support; } - - virtual int32_t module_get_status(int32_t *status) = 0; - virtual int32_t module_get_error(int32_t *iserror) { - *iserror = m_com_reg.module_errorcode; - return 0; - } - virtual int32_t module_clear_error() { - m_com_reg.module_errorcode = 0; - m_com_reg.module_errorbitflag0 = 0; - return 0; - } - - virtual int32_t module_enable(int32_t enable) { return err::koperation_not_support; } - - virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::koperation_not_support; } - - virtual int32_t module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } - virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value) { return module_xxx_reg(param_id, true, *param_value); } - - virtual int32_t module_readio(int32_t *io) { return err::koperation_not_support; } - virtual int32_t module_writeio(int32_t idindex, int32_t io) { return err::koperation_not_support; } - - virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) { return err::koperation_not_support; } - - virtual int32_t module_read_raw(int32_t index, uint8_t *data, int32_t *len) { return err::koperation_not_support; } - - virtual int32_t module_set_inited_flag(int32_t flag) { - m_inited_flag = flag; - return 0; - } - virtual int32_t module_get_inited_flag(int32_t *flag) { - *flag = m_inited_flag; - return 0; - } - - virtual int32_t module_get_inited_flag() { return m_inited_flag; } - - virtual int32_t module_factory_reset() { return err::koperation_not_support; } - virtual int32_t module_flush_cfg() { return err::ksucc; } - virtual int32_t module_active_cfg() { return err::ksucc; } - - virtual int32_t _module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min = INT32_MIN, int32_t max = INT32_MAX) { - if (val < min || val > max) { - return err::kparam_out_of_range; - } - *regval = val; - return 0; - } - virtual int32_t _module_get_reg(int32_t regoff, int32_t regval, int32_t &val) { - val = regval; - return 0; - } - - virtual int32_t _module_set_reg_float(int32_t regoff, float *regval, int32_t val, float precision, int32_t min = INT32_MIN, int32_t max = INT32_MAX) { - if (val < min || val > max) { - return err::kparam_out_of_range; - } - *regval = val * precision; - return 0; - } - virtual int32_t _module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision) { - val = regval / precision; - return 0; - } - + virtual int32_t getid(int32_t *id) = 0; + virtual int32_t getid() = 0; + virtual int32_t module_ping() = 0; + virtual int32_t module_stop() = 0; + virtual int32_t module_break() = 0; + virtual int32_t module_start() = 0; + virtual int32_t module_get_status(int32_t *status) = 0; + virtual int32_t module_get_error(int32_t *iserror) = 0; + virtual int32_t module_clear_error() = 0; + virtual int32_t module_enable(int32_t enable) = 0; + virtual int32_t module_set_reg(int32_t param_id, int32_t param_value) = 0; + virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value) = 0; + virtual int32_t module_readio(int32_t *io) = 0; + virtual int32_t module_writeio(int32_t idindex, int32_t io) = 0; + virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) = 0; + virtual int32_t module_read_raw(int32_t index, uint8_t *data, int32_t *len) = 0; + virtual int32_t module_set_inited_flag(int32_t flag) = 0; + virtual int32_t module_get_inited_flag(int32_t *flag) = 0; + virtual int32_t module_get_inited_flag() = 0; + virtual int32_t module_factory_reset() = 0; + virtual int32_t module_flush_cfg() = 0; + virtual int32_t module_active_cfg() = 0; public: - }; } // namespace iflytop