7 changed files with 166 additions and 128 deletions
-
4components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp
-
3components/step_motor_ctrl_module/step_motor_ctrl_module.hpp
-
0components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp
-
0components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp
-
4components/zcancmder/zcan_board_module.hpp
-
137components/zcancmder/zimodule_impl_v1.hpp
-
142components/zprotocols/zcancmder_v2/api/zi_module.hpp
@ -0,0 +1,137 @@ |
|||||
|
#pragma once
|
||||
|
#include <stdint.h>
|
||||
|
|
||||
|
#include <functional>
|
||||
|
|
||||
|
#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
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue