diff --git a/components/pipette_module/pipette_ctrl_module_v2.cpp b/components/pipette_module/pipette_ctrl_module_v2.cpp index fa3099b..0730447 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.cpp +++ b/components/pipette_module/pipette_ctrl_module_v2.cpp @@ -118,18 +118,38 @@ int32_t PipetteModule::pipette_lld_prepare() { if (creg.module_status == 1) return err::kdevice_is_busy; return do_pipette_lld_prepare(); }; + +int32_t PipetteModule::pipette_plld(int32_t zdpos, int32_t p_threshold) { + ZLOGI(TAG, "pipette_plld %d %d", zdpos, p_threshold); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_lld(kplld, zdpos, 0, p_threshold); +}; +int32_t PipetteModule::pipette_clld(int32_t zdpos, int32_t c_threshold) { + ZLOGI(TAG, "pipette_clld %d %d", zdpos, c_threshold); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_lld(kclld, zdpos, c_threshold, 0); +} +int32_t PipetteModule::pipette_mlld(int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { + ZLOGI(TAG, "pipette_mlld %d %d %d", zdpos, c_threshold, p_threshold); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_lld(kmixlld, zdpos, c_threshold, p_threshold); +} + int32_t PipetteModule::pipette_aspirate(int32_t ul) { - // - return 0; + ZLOGI(TAG, "pipette_aspirate %d", ul); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_aspirate(ul); }; int32_t PipetteModule::pipette_distribut(int32_t ul) { - // - return 0; + ZLOGI(TAG, "pipette_distribut %d", ul); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_distribut(ul); }; -int32_t PipetteModule::pipette_lld(int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { - // +int32_t PipetteModule::pipette_shake_up(int32_t ul, int32_t times) { + ZLOGI(TAG, "pipette_shake_up %d %d", ul, times); + if (creg.module_status == 1) return err::kdevice_is_busy; return 0; -}; +} int32_t PipetteModule::pipette_lld_is_detect_liquid(int32_t *detect_liquid) { // *detect_liquid = m_state.detected_liquid; diff --git a/components/pipette_module/pipette_ctrl_module_v2.hpp b/components/pipette_module/pipette_ctrl_module_v2.hpp index 836acd3..c37e7d9 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.hpp +++ b/components/pipette_module/pipette_ctrl_module_v2.hpp @@ -136,12 +136,14 @@ class PipetteModule : public ZIModule, public ZIPipetteCtrlModule { virtual int32_t pipette_ctrl_init_device() override; virtual int32_t pipette_ctrl_put_tip() override; virtual int32_t pipette_lld_prepare() override; - virtual int32_t pipette_lld(int32_t zdpos, int32_t c_threshold, int32_t p_threshold) override; - virtual int32_t pipette_lld_is_detect_liquid(int32_t *liquid); + virtual int32_t pipette_plld(int32_t zdpos, int32_t p_threshold) override; + virtual int32_t pipette_clld(int32_t zdpos, int32_t c_threshold) override; + virtual int32_t pipette_mlld(int32_t zdpos, int32_t c_threshold, int32_t p_threshold) override; + virtual int32_t pipette_lld_is_detect_liquid(int32_t *liquid) override; virtual int32_t pipette_aspirate(int32_t ul) override; virtual int32_t pipette_distribut(int32_t ul) override; - // virtual int32_t pipette_mix(int32_t ul, int32_t times); + virtual int32_t pipette_shake_up(int32_t ul, int32_t times) override; virtual int32_t pipette_enable_zmotor(int32_t enable); virtual int32_t pipette_write_cmd_direct(uint8_t *tx, int32_t len, uint8_t *rx, int32_t *rxlen) override; diff --git a/components/zcancmder/zcan_protocol_parser.cpp b/components/zcancmder/zcan_protocol_parser.cpp index c5990cf..f6403c6 100644 --- a/components/zcancmder/zcan_protocol_parser.cpp +++ b/components/zcancmder/zcan_protocol_parser.cpp @@ -71,11 +71,14 @@ void ZCanProtocolParser::initialize(IZCanReceiver* cancmder) { REGFN(pipette_ctrl_init_device); REGFN(pipette_ctrl_put_tip); REGFN(pipette_ctrl_move_to_ul); - REGFN(pipette_lld_prepare); - REGFN(pipette_lld); + REGFN(pipette_plld); + REGFN(pipette_clld); + REGFN(pipette_mlld); + REGFN(pipette_lld_is_detect_liquid); REGFN(pipette_aspirate); REGFN(pipette_distribut); + REGFN(pipette_shake_up); REGFN(pipette_enable_zmotor); REGFN(pipette_write_cmd_direct); @@ -492,37 +495,64 @@ int32_t ZCanProtocolParser::pipette_ctrl_move_to_ul(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); return module->pipette_ctrl_move_to_ul(cxt->params[0]); } -int32_t ZCanProtocolParser::pipette_write_cmd_direct(cmdcontxt_t* cxt) { - GET_MODULE(); - cxt->acklen = ZCANCMD_READ_BUF_MAX_SIZE; - int32_t suc = module->pipette_write_cmd_direct(cxt->paramRaw, cxt->paramlen, cxt->ackbuf, &cxt->acklen); - if (suc != 0) { - cxt->acklen = 0; - } - return suc; -} int32_t ZCanProtocolParser::pipette_lld_prepare(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(0); return module->pipette_lld_prepare(); } -int32_t ZCanProtocolParser::pipette_lld(cmdcontxt_t* cxt) { + +int32_t ZCanProtocolParser::pipette_plld(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(2); + return module->pipette_plld(cxt->params[0], cxt->params[1]); +} + +int32_t ZCanProtocolParser::pipette_clld(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(2); + return module->pipette_clld(cxt->params[0], cxt->params[1]); +} + +int32_t ZCanProtocolParser::pipette_mlld(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(3); - return module->pipette_lld(cxt->params[0], cxt->params[1], cxt->params[2]); + return module->pipette_mlld(cxt->params[0], cxt->params[1], cxt->params[2]); } + +int32_t ZCanProtocolParser::pipette_lld_is_detect_liquid(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(0); + int32_t* ack = (int32_t*)cxt->ackbuf; + cxt->acklen = 4; + return module->pipette_lld_is_detect_liquid(&ack[0]); +} + int32_t ZCanProtocolParser::pipette_aspirate(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); return module->pipette_aspirate(cxt->params[0]); } + int32_t ZCanProtocolParser::pipette_distribut(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); return module->pipette_distribut(cxt->params[0]); } +int32_t ZCanProtocolParser::pipette_shake_up(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(2); + return module->pipette_shake_up(cxt->params[0], cxt->params[1]); +} + int32_t ZCanProtocolParser::pipette_enable_zmotor(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); return module->pipette_enable_zmotor(cxt->params[0]); } +// pipette_write_cmd_direct +int32_t ZCanProtocolParser::pipette_write_cmd_direct(cmdcontxt_t* cxt) { + GET_MODULE(); + cxt->acklen = ZCANCMD_READ_BUF_MAX_SIZE; + int32_t suc = module->pipette_write_cmd_direct(cxt->paramRaw, cxt->paramlen, cxt->ackbuf, &cxt->acklen); + if (suc != 0) { + cxt->acklen = 0; + } + return suc; +} + int32_t ZCanProtocolParser::pipette_get_sensor_sample_data(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); int32_t* ack = (int32_t*)cxt->ackbuf; diff --git a/components/zcancmder/zcan_protocol_parser.hpp b/components/zcancmder/zcan_protocol_parser.hpp index 0cb0f0e..4a7ed56 100644 --- a/components/zcancmder/zcan_protocol_parser.hpp +++ b/components/zcancmder/zcan_protocol_parser.hpp @@ -108,9 +108,13 @@ class ZCanProtocolParser : public IZCanReceiverListener { CMDFN(pipette_ctrl_put_tip); CMDFN(pipette_ctrl_move_to_ul); CMDFN(pipette_lld_prepare); - CMDFN(pipette_lld); + CMDFN(pipette_plld); + CMDFN(pipette_clld); + CMDFN(pipette_mlld); + CMDFN(pipette_lld_is_detect_liquid); CMDFN(pipette_aspirate); CMDFN(pipette_distribut); + CMDFN(pipette_shake_up); CMDFN(pipette_enable_zmotor); CMDFN(pipette_write_cmd_direct);