#pragma once #include #include #include "apibasic/basic.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) \ 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() typedef struct { int32_t module_errorcode; int32_t module_status; } module_common_reg_t; class ZIModule { int32_t m_inited_flag = 0; protected: module_common_reg_t creg; public: virtual ~ZIModule() {} public: virtual int32_t getid(); virtual int32_t module_ping(); virtual int32_t module_get_error(int32_t *iserror); 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_status(int32_t *status); virtual int32_t module_get_version(int32_t *val) = 0; virtual int32_t module_get_type(int32_t *val) = 0; virtual int32_t module_stop() { return 0; } virtual int32_t module_active_cfg() { return 0; } /*********************************************************************************************************************** * 用户实现 * ***********************************************************************************************************************/ virtual int32_t getid(int32_t *id) = 0; virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val) = 0; public: // slice virtual int32_t bfcall(int32_t cmdid, uint8_t *param, int32_t len) { return 0; }; virtual void aftercall(int32_t cmdid, uint8_t *param, int32_t len, uint8_t *ack, int32_t acklen, int32_t ret) {}; protected: 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); 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: }; } // namespace iflytop