diff --git a/api/zi_module.cpp b/api/zi_module.cpp index 43a0442..5346ccd 100644 --- a/api/zi_module.cpp +++ b/api/zi_module.cpp @@ -14,9 +14,49 @@ int32_t ZIModule::getid() { }; int32_t ZIModule::module_ping() { return 0; }; +int32_t ZIModule::module_set_reg(int32_t param_id, int32_t param_value) { return _module_xxx_reg(param_id, false, param_value); } +int32_t ZIModule::module_get_reg(int32_t param_id, int32_t *param_value) { return _module_xxx_reg(param_id, true, *param_value); } + +int32_t ZIModule::_module_xxx_reg(int32_t param_id, bool read, int32_t &val) { + if (param_id == kreg_module_version) { + if (read) { + module_get_version(&val); + return 0; + } else { + return 0; + } + } + + else if (param_id == kreg_module_type) { + if (read) { + module_get_type(&val); + return 0; + } else { + return 0; + } + } + + else if (param_id == kreg_module_status) { + if (read) { + module_get_status(&val); + return 0; + } else { + return 0; + } + } + + else if (param_id == kreg_module_errorcode) { + if (read) { + val = creg.module_errorcode; + return 0; + } else { + return 0; + } + } + + return module_xxx_reg(param_id, read, val); +} -int32_t ZIModule::module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } -int32_t ZIModule::module_get_reg(int32_t param_id, int32_t *param_value) { return module_xxx_reg(param_id, true, *param_value); } int32_t ZIModule::_module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min, int32_t max) { if (val < min || val > max) { return err::kparam_out_of_range; diff --git a/api/zi_module.hpp b/api/zi_module.hpp index 19df600..45ddfaf 100644 --- a/api/zi_module.hpp +++ b/api/zi_module.hpp @@ -24,16 +24,18 @@ using namespace std; } \ } break; -#define ENABLE_MODULE(name, type, version) \ - const char *module_name = #name; \ - int32_t module_version = version; \ - int32_t module_type = type; +#define ENABLE_MODULE(name, type, version) \ + public: \ + virtual int32_t module_get_version(int32_t *val) { \ + *val = version; \ + return 0; \ + } \ + virtual int32_t module_get_type(int32_t *val) { \ + *val = type; \ + return 0; \ + } -#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(creg.module_errorcode), ACTION_NONE); +#define MODULE_COMMON_PROCESS_REG_CB() typedef struct { int32_t module_errorcode; @@ -56,6 +58,9 @@ class ZIModule { virtual int32_t module_clear_error(); virtual int32_t module_set_reg(int32_t param_id, int32_t param_value); virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value); + virtual int32_t module_get_version(int32_t *val) = 0; + virtual int32_t module_get_type(int32_t *val) = 0; + /*********************************************************************************************************************** * Óû§ÊµÏÖ * ***********************************************************************************************************************/ @@ -68,6 +73,7 @@ class ZIModule { virtual int32_t _module_get_reg(int32_t regoff, int32_t regval, int32_t &val); 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); virtual int32_t _module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision); + virtual int32_t _module_xxx_reg(int32_t param_id, bool read, int32_t &val); public: public: