From b2435ca786395df639643cb7224f2c0800657613 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 11 Nov 2023 17:30:53 +0800 Subject: [PATCH] update --- .../subcanmodule/zcancmder_subboard_initer.cpp | 2 +- .../xy_robot_ctrl_module/xy_robot_ctrl_module.cpp | 128 +++++++-------------- .../xy_robot_ctrl_module/xy_robot_ctrl_module.hpp | 18 ++- ...o_computer_module_device_script_cmder_paser.cpp | 95 +++++++++------ ...o_computer_module_device_script_cmder_paser.hpp | 12 +- components/zprotocols/zcancmder_v2 | 2 +- 6 files changed, 113 insertions(+), 144 deletions(-) diff --git a/components/subcanmodule/zcancmder_subboard_initer.cpp b/components/subcanmodule/zcancmder_subboard_initer.cpp index a1e2546..56cb66d 100644 --- a/components/subcanmodule/zcancmder_subboard_initer.cpp +++ b/components/subcanmodule/zcancmder_subboard_initer.cpp @@ -12,7 +12,7 @@ const char* TAG = PC_PROJECT_NAME; __weak void nvs_init_cb() {} extern DMA_HandleTypeDef PC_DEBUG_UART_DMA_HANDLER; -int32_t ZCancmderSubboardIniter::get_module_id(int32_t moduleIndex) { return m_cfg.deviceId * 100 + moduleIndex; } +int32_t ZCancmderSubboardIniter::get_module_id(int32_t moduleIndex) { return m_cfg.deviceId * 10 + moduleIndex; } void ZCancmderSubboardIniter::init(cfg_t* cfg) { m_cfg = *cfg; diff --git a/components/xy_robot_ctrl_module/xy_robot_ctrl_module.cpp b/components/xy_robot_ctrl_module/xy_robot_ctrl_module.cpp index 617335e..7a58d32 100644 --- a/components/xy_robot_ctrl_module/xy_robot_ctrl_module.cpp +++ b/components/xy_robot_ctrl_module/xy_robot_ctrl_module.cpp @@ -631,91 +631,45 @@ int32_t XYRobotCtrlModule::module_get_error(int32_t* iserror) { } int32_t XYRobotCtrlModule::module_clear_error() { return 0; } -#define SET_REG(param_id, modulereg) \ - case param_id: \ - modulereg = val; \ - break; - -#define GET_REG(param_id, modulereg) \ - case param_id: \ - *val = modulereg; \ - break; - -int32_t XYRobotCtrlModule::module_set_reg(int32_t param_id, int32_t val) { - switch (param_id) { - SET_REG(kreg_motor_x_shift, m_basecfg.shift_x); - SET_REG(kreg_motor_y_shift, m_basecfg.shift_y); - SET_REG(kreg_motor_x_shaft, m_basecfg.x_shaft); - SET_REG(kreg_motor_y_shaft, m_basecfg.y_shaft); - SET_REG(kreg_motor_x_one_circle_pulse, m_basecfg.distance_scale); - SET_REG(kreg_motor_y_one_circle_pulse, m_basecfg.distance_scale); - SET_REG(kreg_motor_default_velocity, m_basecfg.maxspeed); - SET_REG(kreg_motor_default_acc, m_basecfg.acc); - SET_REG(kreg_motor_default_dec, m_basecfg.dec); - SET_REG(kreg_motor_default_break_dec, m_basecfg.breakdec); - SET_REG(kreg_motor_run_to_zero_max_x_d, m_basecfg.run_to_zero_max_d); - SET_REG(kreg_motor_run_to_zero_max_y_d, m_basecfg.run_to_zero_max_d); - SET_REG(kreg_motor_look_zero_edge_max_x_d, m_basecfg.look_zero_edge_max_d); - SET_REG(kreg_motor_look_zero_edge_max_y_d, m_basecfg.look_zero_edge_max_d); - SET_REG(kreg_motor_run_to_zero_speed, m_basecfg.run_to_zero_speed); - SET_REG(kreg_motor_run_to_zero_dec, m_basecfg.run_to_zero_dec); - SET_REG(kreg_motor_look_zero_edge_speed, m_basecfg.look_zero_edge_speed); - SET_REG(kreg_motor_look_zero_edge_dec, m_basecfg.look_zero_edge_dec); - SET_REG(kreg_stepmotor_ihold, m_basecfg.ihold); - SET_REG(kreg_stepmotor_irun, m_basecfg.irun); - SET_REG(kreg_stepmotor_iholddelay, m_basecfg.iholddelay); - SET_REG(kreg_xyrobot_robot_type, m_basecfg.robot_type); - default: - return err::kmodule_not_find_config_index; - } - return 0; -} -int32_t XYRobotCtrlModule::module_get_reg(int32_t param_id, int32_t* val) { +int32_t XYRobotCtrlModule::module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } +int32_t XYRobotCtrlModule::module_get_reg(int32_t param_id, int32_t* param_value) { return module_xxx_reg(param_id, true, *param_value); } +int32_t XYRobotCtrlModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { switch (param_id) { - GET_REG(kreg_motor_x_shift, m_basecfg.shift_x); - GET_REG(kreg_motor_y_shift, m_basecfg.shift_y); - GET_REG(kreg_motor_x_shaft, m_basecfg.x_shaft); - GET_REG(kreg_motor_y_shaft, m_basecfg.y_shaft); - GET_REG(kreg_motor_x_one_circle_pulse, m_basecfg.distance_scale); - GET_REG(kreg_motor_y_one_circle_pulse, m_basecfg.distance_scale); - GET_REG(kreg_motor_default_velocity, m_basecfg.maxspeed); - GET_REG(kreg_motor_default_acc, m_basecfg.acc); - GET_REG(kreg_motor_default_dec, m_basecfg.dec); - GET_REG(kreg_motor_default_break_dec, m_basecfg.breakdec); - GET_REG(kreg_motor_run_to_zero_max_x_d, m_basecfg.run_to_zero_max_d); - GET_REG(kreg_motor_run_to_zero_max_y_d, m_basecfg.run_to_zero_max_d); - GET_REG(kreg_motor_look_zero_edge_max_x_d, m_basecfg.look_zero_edge_max_d); - GET_REG(kreg_motor_look_zero_edge_max_y_d, m_basecfg.look_zero_edge_max_d); - GET_REG(kreg_motor_run_to_zero_speed, m_basecfg.run_to_zero_speed); - GET_REG(kreg_motor_run_to_zero_dec, m_basecfg.run_to_zero_dec); - GET_REG(kreg_motor_look_zero_edge_speed, m_basecfg.look_zero_edge_speed); - GET_REG(kreg_motor_look_zero_edge_dec, m_basecfg.look_zero_edge_dec); - GET_REG(kreg_stepmotor_ihold, m_basecfg.ihold); - GET_REG(kreg_stepmotor_irun, m_basecfg.irun); - GET_REG(kreg_stepmotor_iholddelay, m_basecfg.iholddelay); - GET_REG(kreg_xyrobot_robot_type, m_basecfg.robot_type); - - GET_REG(kreg_module_status, m_thread.isworking() ? 0x01 : 0x00); - GET_REG(kreg_module_errorcode, 0); - GET_REG(kreg_module_enableflag, m_enable); - GET_REG(kreg_robot_x_pos, m_x); - GET_REG(kreg_robot_y_pos, m_y); - - GET_REG(kreg_module_last_cmd_exec_status, m_module_last_cmd_exec_status); - GET_REG(kreg_module_last_cmd_exec_val0, m_module_last_cmd_exec_val0); - GET_REG(kreg_module_last_cmd_exec_val1, m_module_last_cmd_exec_val1); - GET_REG(kreg_module_last_cmd_exec_val2, m_module_last_cmd_exec_val2); - GET_REG(kreg_module_last_cmd_exec_val3, m_module_last_cmd_exec_val3); - GET_REG(kreg_module_last_cmd_exec_val4, m_module_last_cmd_exec_val4); - GET_REG(kreg_module_last_cmd_exec_val5, m_module_last_cmd_exec_val5); - - // GET_REG(kreg_xyrobot_x_dpos, m_dx); - // GET_REG(kreg_xyrobot_y_dpos, m_dy); + MODULE_COMMON_PROCESS_REG_CB(); + + PROCESS_REG(kreg_motor_x_shift, REG_GET(m_basecfg.shift_x), REG_SET(m_basecfg.shift_x)); + PROCESS_REG(kreg_motor_y_shift, REG_GET(m_basecfg.shift_y), REG_SET(m_basecfg.shift_y)); + PROCESS_REG(kreg_motor_x_shaft, REG_GET(m_basecfg.x_shaft), REG_SET(m_basecfg.x_shaft)); + PROCESS_REG(kreg_motor_y_shaft, REG_GET(m_basecfg.y_shaft), REG_SET(m_basecfg.y_shaft)); + PROCESS_REG(kreg_motor_x_one_circle_pulse, REG_GET(m_basecfg.distance_scale), REG_SET(m_basecfg.distance_scale)); + PROCESS_REG(kreg_motor_y_one_circle_pulse, REG_GET(m_basecfg.distance_scale), REG_SET(m_basecfg.distance_scale)); + PROCESS_REG(kreg_motor_default_velocity, REG_GET(m_basecfg.maxspeed), REG_SET(m_basecfg.maxspeed)); + PROCESS_REG(kreg_motor_default_acc, REG_GET(m_basecfg.acc), REG_SET(m_basecfg.acc)); + PROCESS_REG(kreg_motor_default_dec, REG_GET(m_basecfg.dec), REG_SET(m_basecfg.dec)); + PROCESS_REG(kreg_motor_default_break_dec, REG_GET(m_basecfg.breakdec), REG_SET(m_basecfg.breakdec)); + PROCESS_REG(kreg_motor_run_to_zero_max_x_d, REG_GET(m_basecfg.run_to_zero_max_d), REG_SET(m_basecfg.run_to_zero_max_d)); + PROCESS_REG(kreg_motor_run_to_zero_max_y_d, REG_GET(m_basecfg.run_to_zero_max_d), REG_SET(m_basecfg.run_to_zero_max_d)); + PROCESS_REG(kreg_motor_look_zero_edge_max_x_d, REG_GET(m_basecfg.look_zero_edge_max_d), REG_SET(m_basecfg.look_zero_edge_max_d)); + PROCESS_REG(kreg_motor_look_zero_edge_max_y_d, REG_GET(m_basecfg.look_zero_edge_max_d), REG_SET(m_basecfg.look_zero_edge_max_d)); + PROCESS_REG(kreg_motor_run_to_zero_speed, REG_GET(m_basecfg.run_to_zero_speed), REG_SET(m_basecfg.run_to_zero_speed)); + PROCESS_REG(kreg_motor_run_to_zero_dec, REG_GET(m_basecfg.run_to_zero_dec), REG_SET(m_basecfg.run_to_zero_dec)); + PROCESS_REG(kreg_motor_look_zero_edge_speed, REG_GET(m_basecfg.look_zero_edge_speed), REG_SET(m_basecfg.look_zero_edge_speed)); + PROCESS_REG(kreg_motor_look_zero_edge_dec, REG_GET(m_basecfg.look_zero_edge_dec), REG_SET(m_basecfg.look_zero_edge_dec)); + PROCESS_REG(kreg_stepmotor_ihold, REG_GET(m_basecfg.ihold), REG_SET(m_basecfg.ihold)); + PROCESS_REG(kreg_stepmotor_irun, REG_GET(m_basecfg.irun), REG_SET(m_basecfg.irun)); + PROCESS_REG(kreg_stepmotor_iholddelay, REG_GET(m_basecfg.iholddelay), REG_SET(m_basecfg.iholddelay)); + PROCESS_REG(kreg_xyrobot_robot_type, REG_GET(m_basecfg.robot_type), REG_SET(m_basecfg.robot_type)); + PROCESS_REG(kreg_robot_x_pos, REG_GET(m_x), ACTION_NONE); + PROCESS_REG(kreg_robot_y_pos, REG_GET(m_y), ACTION_NONE); + default: return err::kmodule_not_find_config_index; + break; } return 0; } +int32_t XYRobotCtrlModule::do_action(int32_t actioncode) { return err::kmodule_not_support_action; } + #if 0 int32_t XYRobotCtrlModule::module_set_state(int32_t state_id, int32_t state_value) { return err::kmodule_not_find_state_index; } int32_t XYRobotCtrlModule::module_get_state(int32_t state_id, int32_t* state_value) { @@ -799,17 +753,17 @@ int32_t XYRobotCtrlModule::xymotor_calculated_pos_by_move_to_zero() { m_dx = 0; m_dy = 0; - m_module_last_cmd_exec_status = err::kmodule_opeation_break_by_user; - m_module_last_cmd_exec_val0 = 0; - m_module_last_cmd_exec_val1 = 0; + m_com_reg.module_last_cmd_exec_status = err::kmodule_opeation_break_by_user; + m_com_reg.module_last_cmd_exec_val0 = 0; + m_com_reg.module_last_cmd_exec_val1 = 0; _motor_stop(); return; } - m_dx = dx; - m_dy = dy; - m_module_last_cmd_exec_status = 0; - m_module_last_cmd_exec_val0 = m_dx; - m_module_last_cmd_exec_val1 = m_dy; + m_dx = dx; + m_dy = dy; + m_com_reg.module_last_cmd_exec_status = 0; + m_com_reg.module_last_cmd_exec_val0 = m_dx; + m_com_reg.module_last_cmd_exec_val1 = m_dy; m_stepM1->setXACTUAL(0); m_stepM2->setXACTUAL(0); return; diff --git a/components/xy_robot_ctrl_module/xy_robot_ctrl_module.hpp b/components/xy_robot_ctrl_module/xy_robot_ctrl_module.hpp index 1b4382a..02017b1 100644 --- a/components/xy_robot_ctrl_module/xy_robot_ctrl_module.hpp +++ b/components/xy_robot_ctrl_module/xy_robot_ctrl_module.hpp @@ -8,6 +8,8 @@ namespace iflytop { class XYRobotCtrlModule : public I_XYRobotCtrlModule, public ZIXYMotor, public ZIModule { + ENABLE_MODULE(XYRobotCtrlModule, khbot_module, 0x0001); + public: private: IStepperMotor* m_stepM1; @@ -23,13 +25,6 @@ class XYRobotCtrlModule : public I_XYRobotCtrlModule, public ZIXYMotor, public Z int32_t m_moduleId; - int32_t m_module_last_cmd_exec_status = 0; - int32_t m_module_last_cmd_exec_val0 = 0; - int32_t m_module_last_cmd_exec_val1 = 0; - int32_t m_module_last_cmd_exec_val2 = 0; - int32_t m_module_last_cmd_exec_val3 = 0; - int32_t m_module_last_cmd_exec_val4 = 0; - int32_t m_module_last_cmd_exec_val5 = 0; int m_x = 0; int m_y = 0; @@ -79,8 +74,8 @@ class XYRobotCtrlModule : public I_XYRobotCtrlModule, public ZIXYMotor, public Z virtual int32_t flush() override; virtual int32_t factory_reset() override; - void loop(); - void dumpcfg(); + void loop(); + void dumpcfg(); virtual int32_t module_ping() { return 0; }; virtual int32_t getid(int32_t* id); @@ -107,7 +102,6 @@ class XYRobotCtrlModule : public I_XYRobotCtrlModule, public ZIXYMotor, public Z virtual int32_t xymotor_calculated_pos_by_move_to_zero(); private: - void active_cfg(); void computeTargetMotorPos(); void getnowpos(int32_t& x, int32_t& y); @@ -123,6 +117,8 @@ class XYRobotCtrlModule : public I_XYRobotCtrlModule, public ZIXYMotor, public Z void _motor_stop(int32_t dec = -1); bool _motor_is_reach_target(); - void call_status_cb(action_cb_status_t cb, int32_t status); + void call_status_cb(action_cb_status_t cb, int32_t status); + int32_t module_xxx_reg(int32_t param_id, bool read, int32_t& val); + int32_t do_action(int32_t actioncode); }; } // namespace iflytop \ No newline at end of file diff --git a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp index 1951491..81e38f1 100644 --- a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp +++ b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp @@ -10,14 +10,6 @@ using namespace std; #define TAG "CMD" -void MicroComputerModuleDeviceScriptCmderPaser::do_dumpreg(int32_t moduleId) { - ICmdParserACK ack; - const char paraV_cache[1][10] = {{0}}; - sprintf((char*)paraV_cache[0], "%ld", moduleId); - const char* paraV[1] = {paraV_cache[0]}; - do_dumpreg(1, (const char**)paraV, &ack); -} - static const char* dumpbit(int32_t bit) { static char buf[100]; sprintf(buf, "%d%d%d%d(0:3) %d%d%d%d(4:7) %d%d%d%d(8:11) %d%d%d%d(12:15)", // @@ -28,26 +20,69 @@ static const char* dumpbit(int32_t bit) { return buf; } -void MicroComputerModuleDeviceScriptCmderPaser::do_dumpreg(int32_t paramN, const char* paraV[], ICmdParserACK* ack) { - // - ack->ecode = 0; +void MicroComputerModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager) { + ZModuleDeviceScriptCmderPaser::initialize(cancmder, deviceManager); + m_cmdParser = cancmder; + m_deviceManager = deviceManager; + + cancmder->regCMD("dumpreg", "(mid)", 1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + app_dump_reg(paramN, paraV, ack); + }); + cancmder->regCMD("app_dump_regs", "(mid)", 1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + app_dump_reg(paramN, paraV, ack); + }); + cancmder->regCMD("app_dump_reg", "(mid,regindex)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + app_dump_reg(paramN, paraV, ack); + }); + cancmder->regCMD("app_scanmodule", "()", 0, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + do_scan_module(paramN, paraV, ack); + }); + cancmder->regCMD("app_wait_for_module", "(mid,timeout)", -1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + do_wait_for_module(paramN, paraV, ack); + }); + + cancmder->regCMD("scanmodule", "()", 0, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { // + do_scan_module(paramN, paraV, ack); + }); + deviceManager->regOnRegValChangeEvent([this](int32_t moduleid, int32_t event_id, int32_t eventval) { // + ZLOGI(TAG, "onRegValChangeEvent(%d,%d,%d)", moduleid, event_id, eventval); + }); +} - uint16_t moduleId = atoi(paraV[0]); - int32_t configval = 0; - int32_t ecode = 0; - ZLOGI(TAG, "dumpconfig %s", paraV[0]); +void MicroComputerModuleDeviceScriptCmderPaser::app_dump_regs(int32_t paramN, const char* paraV[], ICmdParserACK* ack) { + ack->ecode = 0; + uint16_t moduleId = atoi(paraV[0]); + ZLOGI(TAG, "app_dump_regs %s", paraV[0]); + app_dump_reg(moduleId, 0); +} +void MicroComputerModuleDeviceScriptCmderPaser::app_dump_reg(int32_t paramN, const char* paraV[], ICmdParserACK* ack) { + ack->ecode = 0; + uint16_t moduleId = atoi(paraV[0]); + uint16_t regid = atoi(paraV[1]); + ZLOGI(TAG, "app_dump_regs %s", paraV[0], paraV[1]); + app_dump_reg(moduleId, regid); +} -#define DUMP_CONFIG(tag, configid) \ - ecode = m_deviceManager->module_get_reg(moduleId, configid, &configval); \ - if (ecode == 0) { \ - ZLOGI(TAG, "%s(%d) :%d", tag, configid, configval); \ +void MicroComputerModuleDeviceScriptCmderPaser::app_dump_reg(int32_t moduleId, int32_t regid) { +#define DUMP_CONFIG(tag, configid) \ + if (regid == 0 || regid == configid) { \ + ecode = m_deviceManager->module_get_reg(moduleId, configid, &configval); \ + if (ecode == 0) { \ + ZLOGI(TAG, "%s(%d) :%d", tag, configid, configval); \ + } \ } -#define DUMP_CONFIG_BIT(tag, configid) \ - ecode = m_deviceManager->module_get_reg(moduleId, configid, &configval); \ - if (ecode == 0) { \ - ZLOGI(TAG, "%s(%d) :%s", tag, configid, dumpbit(configval)); \ +#define DUMP_CONFIG_BIT(tag, configid) \ + if (regid == 0 || regid == configid) { \ + ecode = m_deviceManager->module_get_reg(moduleId, configid, &configval); \ + if (ecode == 0) { \ + ZLOGI(TAG, "%s(%d) :%s", tag, configid, dumpbit(configval)); \ + } \ } + int32_t configval = 0; + int32_t ecode = 0; + + ZLOGI(TAG,"-------------------------REG LIST--------------------------") /******************************************************************************* * Ä£¿éͨÓÃÅäÖúÍ״̬ * @@ -351,20 +386,6 @@ void MicroComputerModuleDeviceScriptCmderPaser::do_dumpreg(int32_t paramN, const DUMP_CONFIG("boditech_optical_laster_intensity", kreg_boditech_optical_laster_intensity); } -void MicroComputerModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager) { - ZModuleDeviceScriptCmderPaser::initialize(cancmder, deviceManager); - m_cmdParser = cancmder; - m_deviceManager = deviceManager; - - cancmder->regCMD("dumpreg", "(mid)", 1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { do_dumpreg(paramN, paraV, ack); }); - cancmder->regCMD("scanmodule", "()", 0, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { do_scan_module(paramN, paraV, ack); }); - deviceManager->regOnRegValChangeEvent([this](int32_t moduleid, int32_t event_id, int32_t eventval) { // - ZLOGI(TAG, "onRegValChangeEvent(%d,%d,%d)", moduleid, event_id, eventval); - }); - - cancmder->regCMD("app_wait_for_module", "(mid,timeout)", -1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { do_wait_for_module(paramN, paraV, ack); }); -} - void MicroComputerModuleDeviceScriptCmderPaser::do_wait_for_module(int32_t paramN, const char* paraV[], ICmdParserACK* ack) { if (paramN < 1) { ack->ecode = err::kcmd_param_num_error; diff --git a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.hpp b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.hpp index 5a48e39..539c076 100644 --- a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.hpp +++ b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.hpp @@ -10,16 +10,14 @@ class MicroComputerModuleDeviceScriptCmderPaser : public ZModuleDeviceScriptCmde public: void initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager); - void do_dumpreg(int32_t paramN, const char* paraV[], ICmdParserACK* ack); - void do_dumpreg(int32_t moduleId); - - void do_dumpstate(int32_t paramN, const char* paraV[], ICmdParserACK* ack) {} - void do_dumpstate(int32_t moduleId) {} + void app_dump_reg(int32_t moduleId, int32_t regid); + void do_wait_for_module(int32_t moduleid, int32_t timeout, ICmdParserACK* ack); + private: void do_scan_module(int32_t paramN, const char* paraV[], ICmdParserACK* ack); - void do_wait_for_module(int32_t paramN, const char* paraV[], ICmdParserACK* ack); - void do_wait_for_module(int32_t moduleid, int32_t timeout, ICmdParserACK* ack); + void app_dump_regs(int32_t paramN, const char* paraV[], ICmdParserACK* ack); + void app_dump_reg(int32_t paramN, const char* paraV[], ICmdParserACK* ack); }; } // namespace iflytop diff --git a/components/zprotocols/zcancmder_v2 b/components/zprotocols/zcancmder_v2 index 8c1056e..9cdfcc0 160000 --- a/components/zprotocols/zcancmder_v2 +++ b/components/zprotocols/zcancmder_v2 @@ -1 +1 @@ -Subproject commit 8c1056e0d3019b754ae57f65c954a69262efa5cd +Subproject commit 9cdfcc02e4c0e75f4d1b731c91b87ae2c22b467e