diff --git a/api/module_type_index.hpp b/api/module_type_index.hpp new file mode 100644 index 0000000..23ebd06 --- /dev/null +++ b/api/module_type_index.hpp @@ -0,0 +1,11 @@ +#pragma once +#include + +namespace iflytop { +typedef enum { + kuniversal_module = 0, + khbot_module = 1, + kmotor_module = 2, + ktemperature_ctrl_module = 3, +} module_type_t; +} \ No newline at end of file diff --git a/api/zi_module.hpp b/api/zi_module.hpp index 73d0f98..20aca2a 100644 --- a/api/zi_module.hpp +++ b/api/zi_module.hpp @@ -4,6 +4,7 @@ #include #include "errorcode.hpp" +#include "module_type_index.hpp" namespace iflytop { using namespace std; @@ -32,6 +33,52 @@ using namespace std; PROCESS_REG(kreg_module_action_ack1, /* */ REG_GET(m_reg.module_action_ack1), ACTION_NONE); \ PROCESS_REG(kreg_module_action_ack2, /* */ REG_GET(m_reg.module_action_ack2), ACTION_NONE); +#define ENABLE_MODULE(name, type, version) module_common_reg_t m_com_reg = {.module_version = version, .module_type = type}; + +#define MODULE_COMMON_PROCESS_REG_CB() \ + PROCESS_REG(kreg_module_version, /* */ REG_GET(m_com_reg.module_version), ACTION_NONE); \ + PROCESS_REG(kreg_module_type, /* */ REG_GET(m_com_reg.module_type), ACTION_NONE); \ + PROCESS_REG(kreg_module_status, /* */ REG_GET(m_com_reg.module_status), REG_SET(m_com_reg.module_status)); \ + PROCESS_REG(kreg_module_errorcode, /* */ REG_GET(m_com_reg.module_errorcode), REG_SET(m_com_reg.module_errorcode)); \ + PROCESS_REG(kreg_module_initflag, /* */ REG_GET(m_com_reg.module_initflag), REG_SET(m_com_reg.module_initflag)); \ + PROCESS_REG(kreg_module_errorbitflag0, /* */ REG_GET(m_com_reg.module_errorbitflag0), REG_SET(m_com_reg.module_errorbitflag0)); \ + PROCESS_REG(kreg_module_do_action0, /* */ ACTION_NONE, do_action(val)); \ + PROCESS_REG(kreg_module_action_param1, /* */ REG_GET(m_com_reg.module_action_param1), REG_SET(m_com_reg.module_action_param1)); \ + PROCESS_REG(kreg_module_action_param2, /* */ REG_GET(m_com_reg.module_action_param2), REG_SET(m_com_reg.module_action_param2)); \ + PROCESS_REG(kreg_module_action_param3, /* */ REG_GET(m_com_reg.module_action_param3), REG_SET(m_com_reg.module_action_param3)); \ + PROCESS_REG(kreg_module_action_ack1, /* */ REG_GET(m_com_reg.module_action_ack1), ACTION_NONE); \ + PROCESS_REG(kreg_module_action_ack2, /* */ REG_GET(m_com_reg.module_action_ack2), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_status, /* */ REG_GET(m_com_reg.module_last_cmd_exec_status), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val0, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val0), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val1, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val1), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val2, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val2), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val3, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val3), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val4, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val4), ACTION_NONE); \ + +typedef struct { + int32_t module_version; + int32_t module_type; + int32_t module_status; + int32_t module_errorcode; + int32_t module_initflag; + int32_t module_errorbitflag0; + + int32_t module_last_cmd_exec_status; + int32_t module_last_cmd_exec_val0; + int32_t module_last_cmd_exec_val1; + int32_t module_last_cmd_exec_val2; + int32_t module_last_cmd_exec_val3; + int32_t module_last_cmd_exec_val4; + + int32_t module_do_action0; + int32_t module_action_param1; + int32_t module_action_param2; + int32_t module_action_param3; + int32_t module_action_ack1; + int32_t module_action_ack2; + +} module_common_reg_t; + class ModuleCMDExecStatus { public: int32_t exec_status = 0;