diff --git a/components/pipette_module/pipette_ctrl_module_v2.cpp b/components/pipette_module/pipette_ctrl_module_v2.cpp index 41b7770..db5d0b4 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.cpp +++ b/components/pipette_module/pipette_ctrl_module_v2.cpp @@ -9,15 +9,15 @@ using namespace iflytop; int exec_ret = ACTION; \ if (exec_ret != 0) { \ ZLOGE(TAG, "do " infostr "(line:%d) fail, ret = %d", __LINE__, exec_ret); \ - m_lastexec_status.set_exec_status(exec_ret); \ + _module_set_exec_status(exec_ret); \ return; \ } \ ZLOGI(TAG, "do " infostr " complete"); \ } void PipetteModule::initialize(int32_t id, config_t *config, hardward_config_t *hardwaredcfg) { // -ZASSERT(config != nullptr); -ZASSERT(hardwaredcfg != nullptr); + ZASSERT(config != nullptr); + ZASSERT(hardwaredcfg != nullptr); m_id = id; m_config = *config; m_smtp2.initialize(hardwaredcfg->uart, hardwaredcfg->hdma_rx, hardwaredcfg->hdma_tx); @@ -44,41 +44,18 @@ int32_t PipetteModule::module_break() { return 0; } -int32_t PipetteModule::module_clear_error() { return err::koperation_not_support; } +int32_t PipetteModule::module_readio(int32_t *io) { return 0; } +int32_t PipetteModule::module_factory_reset() { return 0; } +int32_t PipetteModule::module_flush_cfg() { return 0; } +int32_t PipetteModule::module_active_cfg() { return 0; } -#define ACTION_NULL ; -#define REG(param_id, readaction, writeacton) \ - case param_id: { \ - if (read) { \ - readaction; \ - } else { \ - writeacton; \ - } \ - } - -int32_t PipetteModule::module_process_reg_read_and_write(int32_t param_id, bool read, int32_t &val) { +int32_t PipetteModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { switch (param_id) { - REG(kreg_module_version, /* */ val = 0, ACTION_NULL); - REG(kreg_module_type, /* */ val = 0, ACTION_NULL); - REG(kreg_module_status, /* */ val = read_status(), ACTION_NULL); - REG(kreg_module_errorcode, /* */ val = read_error_status(), ACTION_NULL); - REG(kreg_module_initflag, /* */ val = module_get_inited_flag(), ACTION_NULL); - REG(kreg_module_enableflag, /* */ val = 1, ACTION_NULL); - REG(kreg_module_errorbitflag0, /* */ val = 0, ACTION_NULL); - REG(kreg_module_errorbitflag1, /* */ val = 0, ACTION_NULL); - REG(kreg_module_input_state, /* */ val = read_input_status(), ACTION_NULL); - REG(kreg_module_last_cmd_exec_status, /**/ val = m_lastexec_status.exec_status, ACTION_NULL); - REG(kreg_module_last_cmd_exec_val0, /* */ val = m_lastexec_status.exec_val[0], ACTION_NULL); - REG(kreg_module_last_cmd_exec_val1, /* */ val = m_lastexec_status.exec_val[1], ACTION_NULL); - REG(kreg_module_last_cmd_exec_val2, /* */ val = m_lastexec_status.exec_val[2], ACTION_NULL); - REG(kreg_module_last_cmd_exec_val3, /* */ val = m_lastexec_status.exec_val[3], ACTION_NULL); - REG(kreg_module_last_cmd_exec_val4, /* */ val = m_lastexec_status.exec_val[4], ACTION_NULL); - REG(kreg_module_last_cmd_exec_val5, /* */ val = m_lastexec_status.exec_val[5], ACTION_NULL); - REG(kreg_pipette_pos_ul, /* */ val = read_pos_ul(), ACTION_NULL); - REG(kreg_pipette_capactitance_val, /* */ val = read_capactitance(), ACTION_NULL); - REG(kreg_pipette_tip_state, /* */ val = read_tip_state(), ACTION_NULL); - REG(kreg_pipette_limit_ul, /* */ val = read_ul_limit(), write_ul_limit(val)); - + MODULE_COMMON_PROCESS_REG_CB(); + PROCESS_REG(kreg_pipette_pos_ul, /* */ read_pos_ul(&val), ACTION_NONE); + PROCESS_REG(kreg_pipette_capactitance_val, /* */ read_capactitance(&val), ACTION_NONE); + PROCESS_REG(kreg_pipette_tip_state, /* */ read_tip_state(&val), ACTION_NONE); + PROCESS_REG(kreg_pipette_limit_ul, /* */ REG_GET(m_config.limit_ul), REG_SET(m_config.limit_ul)); default: return err::kmodule_not_find_config_index; break; @@ -86,48 +63,24 @@ int32_t PipetteModule::module_process_reg_read_and_write(int32_t param_id, bool return 0; } -int32_t PipetteModule::module_set_reg(int32_t param_id, int32_t param_value) { - switch (param_id) { - default: - return err::kmodule_not_find_config_index; - } - return 0; -} -int32_t PipetteModule::module_get_reg(int32_t param_id, int32_t *param_value) { return err::koperation_not_support; } - -int32_t PipetteModule::module_readio(int32_t *io) { return err::koperation_not_support; } - -int32_t PipetteModule::module_factory_reset() { return err::koperation_not_support; } -int32_t PipetteModule::module_flush_cfg() { return err::koperation_not_support; } -int32_t PipetteModule::module_active_cfg() { return err::koperation_not_support; } - -int32_t PipetteModule::read_error_status() { - bool isbusy = false; - err::error_t errorcode = err::ksucc; - int32_t retecode = m_smtp2.getState(isbusy, errorcode); - if (retecode != 0) { - return retecode; - } - if (errorcode != err::ksucc && errorcode != err::kSMTP2_NoError) { - return errorcode; - } - - return 0; -} +int32_t PipetteModule::module_get_status(int32_t *status) { + int32_t ecode = 0; + ecode = _read_error_status(); -int32_t PipetteModule::read_status() { - if (read_error_status() != 0) { + if (ecode != 0) { + m_com_reg.module_errorcode = ecode; + *status = 3; m_thread.stop(); - return 3; + return 0; } if (m_thread.isworking()) { - return 1; + *status = 1; } else { - return 0; + *status = 0; } -} - + return 0; +}; /******************************************************************************* * pipette_ctrl * *******************************************************************************/ @@ -138,7 +91,7 @@ int32_t PipetteModule::pipette_ctrl_init_device() { m_thread.stop(); m_thread.start([this]() { DO("init_device_block", m_smtp2.init_device_block()); - m_lastexec_status.set_exec_status(0); + _module_set_exec_status(0); }); return 0; }; @@ -148,7 +101,7 @@ int32_t PipetteModule::pipette_ctrl_put_tip() { m_thread.stop(); m_thread.start([this]() { DO("put_tip_block", m_smtp2.put_tip_block()); - m_lastexec_status.set_exec_status(0); + _module_set_exec_status(0); }); return 0; }; @@ -162,24 +115,32 @@ int32_t PipetteModule::pipette_ctrl_move_to_ul(int32_t ul) { m_thread.stop(); m_thread.start([this, ul]() { DO("move_to_ul_block", m_smtp2.move_to_ul_block(ul)); - m_lastexec_status.set_exec_status(0); + _module_set_exec_status(0); }); return 0; }; -int32_t PipetteModule::read_input_status() { // - return 0; -} - -int32_t PipetteModule::read_pos_ul() { return m_smtp2.read_pos_ul(); } -int32_t PipetteModule::read_capactitance() { - int32_t val = 0; - m_smtp2.read_capacitance_val(val); - return val; +/******************************************************************************* + * PRIVATE * + *******************************************************************************/ +int32_t PipetteModule::read_pos_ul(int32_t *val) { return m_smtp2.read_pos_ul(*val); } +int32_t PipetteModule::read_capactitance(int32_t *val) { return m_smtp2.read_capacitance_val(*val); } +int32_t PipetteModule::read_tip_state(int32_t *val) { + bool tipstate = false; + int32_t ecode = m_smtp2.read_tip_state(tipstate); + *val = tipstate ? 1 : 0; + return ecode; } +int32_t PipetteModule::_read_error_status() { + bool isbusy = false; + err::error_t errorcode = err::ksucc; + int32_t retecode = m_smtp2.getState(isbusy, errorcode); + if (retecode != 0) { + return retecode; + } + if (errorcode != err::ksucc && errorcode != err::kSMTP2_NoError) { + return errorcode; + } -int32_t PipetteModule::read_tip_state() { - bool tipstate = false; - m_smtp2.read_tip_state(tipstate); - return tipstate; -} + return 0; +} \ No newline at end of file diff --git a/components/pipette_module/pipette_ctrl_module_v2.hpp b/components/pipette_module/pipette_ctrl_module_v2.hpp index ef8401c..6e6b7ee 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.hpp +++ b/components/pipette_module/pipette_ctrl_module_v2.hpp @@ -6,14 +6,16 @@ // #include "StepMotorCtrlModule" /** - * @brief - * + * @brief + * * 参考:https://iflytop1.feishu.cn/wiki/LTilwSyJwi6fJUkiIhzc2oRqnTb 对设备进行初始化 - * + * */ namespace iflytop { class PipetteModule : public ZIModule, public ZIPipetteCtrlModule { + ENABLE_MODULE(PipetteModule, kpipette_ctrl_module, 0x0001); + public: typedef struct { UART_HandleTypeDef *uart; @@ -30,53 +32,43 @@ class PipetteModule : public ZIModule, public ZIPipetteCtrlModule { ZThread m_thread; int32_t m_id = 0; - ModuleCMDExecStatus m_lastexec_status; - config_t m_config; public: - void initialize(int32_t id, config_t* config, hardward_config_t *cfg); + void initialize(int32_t id, config_t *config, hardward_config_t *cfg); virtual int32_t getid(int32_t *id); /******************************************************************************* * Module * *******************************************************************************/ - virtual int32_t module_ping() { return 0; }; - - virtual int32_t module_enable(int32_t enable); - - virtual int32_t module_stop(); - virtual int32_t module_break(); - - 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_enable(int32_t enable) override; + virtual int32_t module_stop() override; + virtual int32_t module_break() override; + virtual int32_t module_readio(int32_t *io) override; + virtual int32_t module_factory_reset() override; + virtual int32_t module_flush_cfg() override; + virtual int32_t module_active_cfg() override; - virtual int32_t module_readio(int32_t *io); - - virtual int32_t module_factory_reset(); - virtual int32_t module_flush_cfg(); - virtual int32_t module_active_cfg(); + virtual int32_t module_get_status(int32_t *status) override; /******************************************************************************* * pipette_ctrl * *******************************************************************************/ - virtual int32_t pipette_ctrl_init_device(); - virtual int32_t pipette_ctrl_put_tip(); - virtual int32_t pipette_ctrl_move_to_ul(int32_t ul); + virtual int32_t pipette_ctrl_init_device() override; + virtual int32_t pipette_ctrl_put_tip() override; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) override; + + private: + + int32_t read_pos_ul(int32_t *val); + int32_t read_capactitance(int32_t *val); + int32_t read_tip_state(int32_t *val); + virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val) override; private: - int32_t module_process_reg_read_and_write(int32_t param_id, bool read, int32_t ¶m_value); - int32_t read_status(); - int32_t read_error_status(); - int32_t read_input_status(); - int32_t read_pos_ul(); - int32_t read_capactitance(); - int32_t read_tip_state(); - int32_t read_ul_limit(); - void write_ul_limit(int32_t ul_limit); + int32_t _read_error_status(); }; } // namespace iflytop \ No newline at end of file diff --git a/components/sensors/m3078/m3078_code_scaner.cpp b/components/sensors/m3078/m3078_code_scaner.cpp index 50e81aa..8454e96 100644 --- a/components/sensors/m3078/m3078_code_scaner.cpp +++ b/components/sensors/m3078/m3078_code_scaner.cpp @@ -30,7 +30,7 @@ void M3078CodeScanner::initialize(int moduleid, hardware_config_t* hardwareconfi m_com_reg.module_enable = 1; } void M3078CodeScanner::trigger() { - m_codeisready = false; + clearIdinfo(); m_triggerGpio.setState(0); zos_delay(3); m_uart.clearRxData(); @@ -59,6 +59,12 @@ int32_t M3078CodeScanner::module_start() { trigger(); return 0; } + +int32_t M3078CodeScanner::module_get_status(int32_t* status) { + *status = read_status(); + return 0; +} + int32_t M3078CodeScanner::module_read_raw(int32_t startadd, uint8_t* data, int32_t* len) { ZLOGI(TAG, "module_read_raw"); if (codecachelen > *len) { diff --git a/components/sensors/m3078/m3078_code_scaner.hpp b/components/sensors/m3078/m3078_code_scaner.hpp index bc1edb8..e83b598 100644 --- a/components/sensors/m3078/m3078_code_scaner.hpp +++ b/components/sensors/m3078/m3078_code_scaner.hpp @@ -85,10 +85,11 @@ class M3078CodeScanner : public ZIModule { *id = this->id; return 0; } - virtual int32_t module_stop(); - virtual int32_t module_break(); - virtual int32_t module_start(); - virtual int32_t module_read_raw(int32_t index, uint8_t* data, int32_t* len); + virtual int32_t module_stop() override; + virtual int32_t module_break() override; + virtual int32_t module_start() override; + virtual int32_t module_read_raw(int32_t index, uint8_t* data, int32_t* len) override; + virtual int32_t module_get_status(int32_t* status) override; private: virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t& val) override; diff --git a/components/zcancmder/zcan_board_module.cpp b/components/zcancmder/zcan_board_module.cpp index 9777e50..0a98ac7 100644 --- a/components/zcancmder/zcan_board_module.cpp +++ b/components/zcancmder/zcan_board_module.cpp @@ -54,6 +54,11 @@ int32_t ZCanBoardModule::module_xxx_reg(int32_t param_id, bool read, int32_t &va return 0; } +int32_t ZCanBoardModule::module_get_status(int32_t *status) { + *status = 0; + return 0; +} + int32_t ZCanBoardModule::module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } int32_t ZCanBoardModule::module_get_reg(int32_t param_id, int32_t *param_value) { return module_xxx_reg(param_id, true, *param_value); } diff --git a/components/zcancmder/zcan_board_module.hpp b/components/zcancmder/zcan_board_module.hpp index a3c3e7b..e7caeca 100644 --- a/components/zcancmder/zcan_board_module.hpp +++ b/components/zcancmder/zcan_board_module.hpp @@ -45,7 +45,7 @@ class ZCanBoardModule : public ZIModule { public: virtual ~ZCanBoardModule() {} - void initialize(int32_t moduleId, hardware_config_t *cfg); + void initialize(int32_t moduleId, hardware_config_t *cfg); virtual int32_t module_ping() { return 0; }; virtual int32_t getid(int32_t *id) override; @@ -55,6 +55,8 @@ class ZCanBoardModule : public ZIModule { 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); + private: int32_t module_xxx_reg(int32_t param_id, bool read, int32_t ¶m_value); int32_t readinput(); diff --git a/components/zprotocols/zcancmder_v2 b/components/zprotocols/zcancmder_v2 index f20a0f5..87d2bfa 160000 --- a/components/zprotocols/zcancmder_v2 +++ b/components/zprotocols/zcancmder_v2 @@ -1 +1 @@ -Subproject commit f20a0f5affb28e0f4ae6c6dddfea7c54b493fe54 +Subproject commit 87d2bfa20a22003f1731511b6c50f925330a5ebd