diff --git a/api/api.hpp b/api/api.hpp index d6d2c54..563c92e 100644 --- a/api/api.hpp +++ b/api/api.hpp @@ -21,4 +21,8 @@ // #include "protocol_constant.hpp" // -#include "reg_index.hpp" \ No newline at end of file +#include "reg_index.hpp" +// +#include "zi_code_scaner.hpp" +// +#include "zi_pipette_ctrl_module.hpp" \ No newline at end of file diff --git a/api/reg_index.hpp b/api/reg_index.hpp index 2a98992..5a82883 100644 --- a/api/reg_index.hpp +++ b/api/reg_index.hpp @@ -17,7 +17,7 @@ typedef enum { kreg_module_enableflag = REG_INDEX(0, 5), // 0idle,1busy,2error kreg_module_errorbitflag0 = REG_INDEX(0, 6), // 模块异常标志,bit,每个模块自定义 kreg_module_errorbitflag1 = REG_INDEX(0, 7), // - kreg_module_input_state = REG_INDEX(0, 8), // + kreg_module_input_state = REG_INDEX(0, 8), // kreg_module_output_state = REG_INDEX(0, 9), // kreg_module_last_cmd_exec_status = REG_INDEX(20, 0), // 上一条指令执行的状态 kreg_module_last_cmd_exec_val0 = REG_INDEX(20, 1), // 上一条指令执行的结果0 @@ -186,6 +186,14 @@ typedef enum { kreg_pwm_pump3_speed_level = REG_INDEX(4040, 3), // PWM水泵0,1,2,3 kreg_pwm_pump4_speed_level = REG_INDEX(4040, 4), // PWM水泵0,1,2,3 + /******************************************************************************* + * 移液枪状态 * + *******************************************************************************/ + kreg_pipette_pos_ul = REG_INDEX(4100, 0), // 移液枪位置 + kreg_pipette_capactitance_val = REG_INDEX(4100, 1), // 移液枪电容值 + kreg_pipette_tip_state = REG_INDEX(4100, 2), // 移动液枪tip状态 + kreg_pipette_limit_ul = REG_INDEX(4100, 3), // 移液枪ul限制 + } reg_index_t; } // namespace iflytop diff --git a/api/zi_code_scaner.hpp b/api/zi_code_scaner.hpp new file mode 100644 index 0000000..13f6375 --- /dev/null +++ b/api/zi_code_scaner.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +#include + +#include "errorcode.hpp" + +namespace iflytop { +using namespace std; +class ZICodeScaner { + public: + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +}; +} // namespace iflytop \ No newline at end of file diff --git a/api/zi_module.hpp b/api/zi_module.hpp index 1e62ff4..6fdf721 100644 --- a/api/zi_module.hpp +++ b/api/zi_module.hpp @@ -7,6 +7,23 @@ namespace iflytop { using namespace std; + +class ModuleCMDExecStatus { + public: + int32_t exec_status = 0; + int32_t exec_val[6] = {0}; + + void set_exec_status(int32_t status, int32_t val0 = 0, int32_t val1 = 0, int32_t val2 = 0, int32_t val3 = 0, int32_t val4 = 0, int32_t val5 = 0) { + exec_status = status; + exec_val[0] = val0; + exec_val[1] = val1; + exec_val[2] = val2; + exec_val[3] = val3; + exec_val[4] = val4; + exec_val[5] = val5; + } +}; + class ZIModule { int32_t m_inited_flag = 0; diff --git a/api/zi_pipette_ctrl_module.hpp b/api/zi_pipette_ctrl_module.hpp new file mode 100644 index 0000000..57230a9 --- /dev/null +++ b/api/zi_pipette_ctrl_module.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +#include + +#include "errorcode.hpp" + +namespace iflytop { +using namespace std; +class ZIPipetteCtrlModule { + public: + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +}; +} // namespace iflytop \ No newline at end of file diff --git a/cmdid.hpp b/cmdid.hpp index 7b6dfe7..8931ad4 100644 --- a/cmdid.hpp +++ b/cmdid.hpp @@ -15,8 +15,8 @@ typedef enum { kmodule_break = CMDID(1, 2), // para:{}, ack:{} kmodule_get_last_exec_status = CMDID(1, 3), // para:{}, ack:{4} kmodule_get_status = CMDID(1, 4), // para:{}, ack:{4} - kmodule_set_reg = CMDID(1, 5), // para:{4,4}, ack:{} - kmodule_get_reg = CMDID(1, 6), // para:{4}, ack:{4}I + kmodule_set_reg = CMDID(1, 5), // para:{4,4}, ack:{} + kmodule_get_reg = CMDID(1, 6), // para:{4}, ack:{4}I kmodule_readio = CMDID(1, 7), // para:{}, ack:{4} kmodule_writeio = CMDID(1, 8), // para:{4}, ack:{} kmodule_read_adc = CMDID(1, 9), // para:{4}, ack:{4} @@ -90,8 +90,25 @@ typedef enum { kxymotor_calculated_pos_by_move_to_zero = CMDID(3, 7), // para:{}, ack:{} #if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } #endif + kcode_scaner_start_scan = CMDID(4, 1), // para:{}, ack:{} + kcode_scaner_stop_scan = CMDID(4, 2), // para:{}, ack:{} + kcode_scaner_read_scaner_result = CMDID(4, 3), // para:{4,4}, ack:{4} + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + + kpipette_ctrl_init_device = CMDID(5, 1), // para:{}, ack:{} + kpipette_ctrl_put_tip = CMDID(5, 2), // para:{}, ack:{} + kpipette_ctrl_move_to_ul = CMDID(5, 3), // para:{4}, ack:{} + } cmdid_t; } // namespace zcr diff --git a/protocol_parser.cpp b/protocol_parser.cpp index 0030c77..8ce3080 100644 --- a/protocol_parser.cpp +++ b/protocol_parser.cpp @@ -202,7 +202,6 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in virtual int32_t motor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; } - #endif PROCESS_PACKET_10(kmotor_enable, ZIMotor, motor_enable); PROCESS_PACKET_30(kmotor_rotate, ZIMotor, motor_rotate); @@ -242,4 +241,24 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_PACKET_00(kxymotor_move_to_zero_and_calculated_shift, ZIXYMotor, xymotor_move_to_zero_and_calculated_shift); PROCESS_PACKET_02(kxymotor_read_pos, ZIXYMotor, xymotor_read_pos); PROCESS_PACKET_00(kxymotor_calculated_pos_by_move_to_zero, ZIXYMotor, xymotor_calculated_pos_by_move_to_zero); + +#if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +#endif + + PROCESS_PACKET_00(kcode_scaner_start_scan, ZICodeScaner, code_scaner_start_scan); + PROCESS_PACKET_00(kcode_scaner_stop_scan, ZICodeScaner, code_scaner_stop_scan); + PROCESS_BUF_REQUEST_1(kcode_scaner_read_scaner_result, ZICodeScaner, code_scaner_read_scaner_result); + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + PROCESS_PACKET_00(kpipette_ctrl_init_device, ZIPipetteCtrlModule, pipette_ctrl_init_device); + PROCESS_PACKET_00(kpipette_ctrl_put_tip, ZIPipetteCtrlModule, pipette_ctrl_put_tip); + PROCESS_PACKET_10(kpipette_ctrl_move_to_ul, ZIPipetteCtrlModule, pipette_ctrl_move_to_ul); + } \ No newline at end of file diff --git a/protocol_proxy.cpp b/protocol_proxy.cpp index 515282e..9c45ba7 100644 --- a/protocol_proxy.cpp +++ b/protocol_proxy.cpp @@ -176,3 +176,28 @@ int32_t ZIProtocolProxy::xymotor_move_to_zero() { PROXY_IMPL_00(kxymotor_move_to int32_t ZIProtocolProxy::xymotor_move_to_zero_and_calculated_shift() { PROXY_IMPL_00(kxymotor_move_to_zero_and_calculated_shift, 30); } int32_t ZIProtocolProxy::xymotor_read_pos(int32_t *ack0, int32_t *ack1) { PROXY_IMPL_02(kxymotor_read_pos, 30); } int32_t ZIProtocolProxy::xymotor_calculated_pos_by_move_to_zero() { PROXY_IMPL_00(kxymotor_calculated_pos_by_move_to_zero, 30); } + +#if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +#endif + +int32_t ZIProtocolProxy::code_scaner_start_scan() { PROXY_IMPL_00(kcode_scaner_start_scan, 30); } +int32_t ZIProtocolProxy::code_scaner_stop_scan() { PROXY_IMPL_00(kcode_scaner_stop_scan, 30); } +int32_t ZIProtocolProxy::code_scaner_read_scaner_result(int32_t para0, uint8_t *data, int32_t *len) { + int32_t param[1 + 1] = {0}; + param[0] = para0; + int32_t ecode = m_cancmder->sendCmdAndReceiveBuf(kmodule_read_raw, m_id, param, 1, data, len, 100); + return ecode; +} + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + +int32_t ZIProtocolProxy::pipette_ctrl_init_device() { PROXY_IMPL_00(kpipette_ctrl_init_device, 30); }; +int32_t ZIProtocolProxy::pipette_ctrl_put_tip() { PROXY_IMPL_00(kpipette_ctrl_put_tip, 30); }; +int32_t ZIProtocolProxy::pipette_ctrl_move_to_ul(int32_t para0) { PROXY_IMPL_10(kpipette_ctrl_move_to_ul, 30); }; diff --git a/protocol_proxy.hpp b/protocol_proxy.hpp index 94f384a..f7e6a59 100644 --- a/protocol_proxy.hpp +++ b/protocol_proxy.hpp @@ -8,7 +8,9 @@ namespace iflytop { class ZIProtocolProxy : public ZIMotor, // public ZIXYMotor, // - public ZIModule { + public ZIModule, + public ZICodeScaner , + public ZIPipetteCtrlModule{ private: IZcanCmderMaster *m_cancmder; int32_t m_id = 0; @@ -126,6 +128,30 @@ class ZIProtocolProxy : public ZIMotor, // virtual int32_t xymotor_move_to_zero_and_calculated_shift() override; virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) override; virtual int32_t xymotor_calculated_pos_by_move_to_zero() override; + + /******************************************************************************* + * ZICodeScaner * + *******************************************************************************/ +#if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +#endif + + virtual int32_t code_scaner_start_scan() override; + virtual int32_t code_scaner_stop_scan() override; + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) override; + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + + 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; + }; } // namespace iflytop \ No newline at end of file diff --git a/zmodule_device_manager.cpp b/zmodule_device_manager.cpp index ec0aba7..2f373fa 100644 --- a/zmodule_device_manager.cpp +++ b/zmodule_device_manager.cpp @@ -109,3 +109,22 @@ int32_t ZModuleDeviceManager::xymotor_move_to_zero(uint16_t id) { PROXY_IMPL(ZIX int32_t ZModuleDeviceManager::xymotor_move_to_zero_and_calculated_shift(uint16_t id) { PROXY_IMPL(ZIXYMotor, xymotor_move_to_zero_and_calculated_shift); } int32_t ZModuleDeviceManager::xymotor_read_pos(uint16_t id, int32_t *x, int32_t *y) { PROXY_IMPL(ZIXYMotor, xymotor_read_pos, x, y); } int32_t ZModuleDeviceManager::xymotor_calculated_pos_by_move_to_zero(uint16_t id) { PROXY_IMPL(ZIXYMotor, xymotor_calculated_pos_by_move_to_zero); } + +#if 0 + virtual int32_t code_scaner_start_scan(uint16_t id); + virtual int32_t code_scaner_stop_scan(uint16_t id); + virtual int32_t code_scaner_read_scaner_result(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len); +#endif +int32_t ZModuleDeviceManager::code_scaner_start_scan(uint16_t id) { PROXY_IMPL(ZICodeScaner, code_scaner_start_scan); } +int32_t ZModuleDeviceManager::code_scaner_stop_scan(uint16_t id) { PROXY_IMPL(ZICodeScaner, code_scaner_stop_scan); } +int32_t ZModuleDeviceManager::code_scaner_read_scaner_result(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len) { PROXY_IMPL(ZICodeScaner, code_scaner_read_scaner_result, startadd, data, len); } + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + +int32_t ZModuleDeviceManager::pipette_ctrl_init_device(uint16_t id) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_init_device); } +int32_t ZModuleDeviceManager::pipette_ctrl_put_tip(uint16_t id) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_put_tip); } +int32_t ZModuleDeviceManager::pipette_ctrl_move_to_ul(uint16_t id, int32_t ul) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_move_to_ul, ul); } \ No newline at end of file diff --git a/zmodule_device_manager.hpp b/zmodule_device_manager.hpp index 784cf91..a0fbc41 100644 --- a/zmodule_device_manager.hpp +++ b/zmodule_device_manager.hpp @@ -80,7 +80,6 @@ class ZModuleDeviceManager { virtual int32_t module_flush_cfg(uint16_t id); virtual int32_t module_active_cfg(uint16_t id); - virtual int32_t module_read_raw(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len); virtual int32_t module_enable(uint16_t id, int32_t enable); @@ -151,6 +150,26 @@ class ZModuleDeviceManager { virtual int32_t xymotor_read_pos(uint16_t id, int32_t *x, int32_t *y); virtual int32_t xymotor_calculated_pos_by_move_to_zero(uint16_t id); +#if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +#endif + + virtual int32_t code_scaner_start_scan(uint16_t id); + virtual int32_t code_scaner_stop_scan(uint16_t id); + virtual int32_t code_scaner_read_scaner_result(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len); + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + + virtual int32_t pipette_ctrl_init_device(uint16_t id); + virtual int32_t pipette_ctrl_put_tip(uint16_t id); + virtual int32_t pipette_ctrl_move_to_ul(uint16_t id, int32_t ul); + virtual ~ZModuleDeviceManager() {} private: diff --git a/zmodule_device_script_cmder_paser.cpp b/zmodule_device_script_cmder_paser.cpp index b452a2c..206c874 100644 --- a/zmodule_device_script_cmder_paser.cpp +++ b/zmodule_device_script_cmder_paser.cpp @@ -188,4 +188,31 @@ void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDevi PROCESS_PACKET_10(xymotor_move_to_zero_and_calculated_shift, "(mid)"); PROCESS_PACKET_12(xymotor_read_pos, "(mid)"); PROCESS_PACKET_10(xymotor_calculated_pos_by_move_to_zero, "(mid)"); + +#if 0 + virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } + virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } +#endif + + PROCESS_PACKET_10(code_scaner_start_scan, "(mid)"); + PROCESS_PACKET_10(code_scaner_stop_scan, "(mid)"); + cancmder->regCMD("code_scaner_read_scaner_result", "(mid, pad0)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { + if (atoi(paraV[2]) > (int32_t)sizeof(ack->rawdata)) { + ack->ecode = err::kbuffer_not_enough; + return; + } + ack->rawlen = sizeof(ack->rawdata); + ack->ecode = m_deviceManager->module_read_raw(atoi(paraV[0]), atoi(paraV[1]), ack->rawdata, &ack->rawlen); + ack->acktype = ICmdParserACK::kAckType_buf; + }); + +#if 0 + virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; + virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; +#endif + PROCESS_PACKET_10(pipette_ctrl_init_device, "(mid)"); + PROCESS_PACKET_10(pipette_ctrl_put_tip, "(mid)"); + PROCESS_PACKET_20(pipette_ctrl_move_to_ul, "(mid, ul)"); }