From 4aed09f7ae4d1a12628abf0ef81e6a3ae88909c2 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 27 Oct 2023 19:55:37 +0800 Subject: [PATCH] update --- api/api.hpp | 3 +- api/i_cmdparser.hpp | 11 ++- api/i_zcan_cmder.hpp | 2 +- api/i_zcan_cmder_master.hpp | 3 +- api/protocol_constant.hpp | 1 + api/zi_module.hpp | 2 + cmdid.hpp | 5 + protocol_parser.cpp | 29 +++++- protocol_parser.hpp | 6 +- protocol_proxy.cpp | 166 ++++++++++++++++++---------------- protocol_proxy.hpp | 2 + zmodule_device_manager.cpp | 2 + zmodule_device_manager.hpp | 2 + zmodule_device_script_cmder_paser.cpp | 12 +++ 14 files changed, 154 insertions(+), 92 deletions(-) create mode 100644 api/protocol_constant.hpp diff --git a/api/api.hpp b/api/api.hpp index d95fb44..d963a81 100644 --- a/api/api.hpp +++ b/api/api.hpp @@ -8,4 +8,5 @@ #include "i_zcan_cmder.hpp" #include "i_zcan_cmder_master.hpp" #include "i_cmdparser.hpp" -#include "state_index.hpp" \ No newline at end of file +#include "state_index.hpp" +#include "protocol_constant.hpp" \ No newline at end of file diff --git a/api/i_cmdparser.hpp b/api/i_cmdparser.hpp index b43429c..c92c113 100644 --- a/api/i_cmdparser.hpp +++ b/api/i_cmdparser.hpp @@ -8,6 +8,7 @@ #include "config_index.hpp" #include "errorcode.hpp" #include "packet_interface.hpp" +#include "protocol_constant.hpp" namespace iflytop { using namespace zcr; @@ -22,7 +23,7 @@ class ICmdParserACK { public: int32_t ecode; ICmdParserACKType_t acktype; - uint8_t rawdata[512]; + uint8_t rawdata[ZCANCMD_READ_BUF_MAX_SIZE + 100]; int32_t rawlen; public: @@ -34,10 +35,10 @@ class ICmdParserACK { } void setNoneAck(int32_t ecode) { - this->ecode = ecode; - acktype = kAckType_none; - rawlen = 0; - rawdata[0] = 0; + this->ecode = ecode; + acktype = kAckType_none; + rawlen = 0; + rawdata[0] = 0; } int32_t *getAck(int index) { diff --git a/api/i_zcan_cmder.hpp b/api/i_zcan_cmder.hpp index d7d7e4e..f8c70d0 100644 --- a/api/i_zcan_cmder.hpp +++ b/api/i_zcan_cmder.hpp @@ -18,7 +18,7 @@ class IZCanCmder { public: public: virtual void registerListener(IZcanCmderListener *listener) = 0; - virtual int32_t sendAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) = 0; + virtual int32_t sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) = 0; virtual int32_t sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int32_t nack) = 0; virtual int32_t sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorcode) = 0; }; diff --git a/api/i_zcan_cmder_master.hpp b/api/i_zcan_cmder_master.hpp index c1b0de4..bcbacee 100644 --- a/api/i_zcan_cmder_master.hpp +++ b/api/i_zcan_cmder_master.hpp @@ -15,7 +15,8 @@ using namespace zcr; class IZcanCmderMaster { public: - virtual int32_t sendCmd(int32_t cmdid, int32_t moduleid, int32_t *param, size_t npara, int32_t *ack, size_t nack, int overtime_ms) = 0; + virtual int32_t sendCmd(int32_t cmdid, int32_t moduleid, int32_t *param, size_t npara, int32_t *ack, size_t nack, int overtime_ms) = 0; + virtual int32_t sendCmdAndReceiveBuf(int32_t cmdid, int32_t moduleid, int32_t *param, size_t npara, uint8_t *ack, int32_t *rxsize, int overtime_ms) = 0; }; } // namespace iflytop \ No newline at end of file diff --git a/api/protocol_constant.hpp b/api/protocol_constant.hpp new file mode 100644 index 0000000..faa241f --- /dev/null +++ b/api/protocol_constant.hpp @@ -0,0 +1 @@ +#define ZCANCMD_READ_BUF_MAX_SIZE 512 \ No newline at end of file diff --git a/api/zi_module.hpp b/api/zi_module.hpp index 0c2fda1..363cf4e 100644 --- a/api/zi_module.hpp +++ b/api/zi_module.hpp @@ -33,6 +33,8 @@ class ZIModule { virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) { return err::koperation_not_support; } + virtual int32_t module_read_raw(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } + virtual int32_t module_set_inited_flag(int32_t flag) { m_inited_flag = flag; return 0; diff --git a/cmdid.hpp b/cmdid.hpp index a8e02cd..5d7fb72 100644 --- a/cmdid.hpp +++ b/cmdid.hpp @@ -7,6 +7,7 @@ typedef enum { #if 0 virtual int32_t module_set_state(int32_t state_id, int32_t state_value) { return err::koperation_not_support; } virtual int32_t module_get_state(int32_t state_id, int32_t *state_value) { return err::koperation_not_support; } + virtual int32_t module_read_raw(int32_t startadd, int32_t *data, int32_t *len) { return err::koperation_not_support; } #endif kmodule_stop = CMDID(1, 1), // para:{}, ack:{} @@ -27,6 +28,7 @@ typedef enum { kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{} kmodule_set_state = CMDID(1, 17), // para:{4,4}, ack:{} kmodule_get_state = CMDID(1, 18), // para:{4}, ack:{4} + kmodule_read_raw = CMDID(1, 19), // para:{4,4}, ack:{4} #if 0 virtual int32_t motor_enable(int32_t enable) { return err::koperation_not_support; } @@ -85,6 +87,9 @@ typedef enum { kxymotor_read_pos = CMDID(3, 6), // para:{}, ack:{4,4} kxymotor_calculated_pos_by_move_to_zero = CMDID(3, 7), // para:{}, ack:{} +#if 0 +#endif + } cmdid_t; } // namespace zcr diff --git a/protocol_parser.cpp b/protocol_parser.cpp index 108d43a..288f256 100644 --- a/protocol_parser.cpp +++ b/protocol_parser.cpp @@ -31,15 +31,35 @@ using namespace std; return; \ } +#define PROCESS_PACKET_BUF_REQ_XX_END() \ + if (ecode == 0) { \ + m_cancmder->sendBufAck(rxcmd, ackbuf, readbufsize); \ + return; \ + } else { \ + m_cancmder->sendErrorAck(rxcmd, ecode); \ + } \ + return; \ + } + #define PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, XP, XACK, ...) \ { \ PROCESS_PACKET_BEGIN(var_cmdid, var_moduleType) \ CHECK_PARAM_NUM(XP) \ - int32_t ack[XACK + 1] = {0}; \ - int32_t ecode = mod->var_funcname(__VA_ARGS__); \ + int32_t* ack = (int32_t*)&ackbuf[0]; \ + static_assert(XACK * sizeof(int32_t) < sizeof(ackbuf)); \ + int32_t ecode = mod->var_funcname(__VA_ARGS__); \ PROCESS_PACKET_XX_END(XACK) \ } +#define PROCESS_BUF_REQUEST_X(var_cmdid, var_moduleType, var_funcname, XP, ...) \ + { \ + PROCESS_PACKET_BEGIN(var_cmdid, var_moduleType) \ + CHECK_PARAM_NUM(XP) \ + int32_t readbufsize = ZCANCMD_READ_BUF_MAX_SIZE; \ + int32_t ecode = mod->var_funcname(__VA_ARGS__); \ + PROCESS_PACKET_BUF_REQ_XX_END() \ + } + #define PROCESS_PACKET_00(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 0) #define PROCESS_PACKET_01(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 1, &ack[0]) #define PROCESS_PACKET_02(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 2, &ack[0], &ack[1]) @@ -65,6 +85,8 @@ using namespace std; #define PROCESS_PACKET_42(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 2, param[0], param[1], param[2], param[3], &ack[0], &ack[1]) #define PROCESS_PACKET_43(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 3, param[0], param[1], param[2], param[3], &ack[0], &ack[1], &ack[2]) +#define PROCESS_BUF_REQUEST_1(var_cmdid, var_moduleType, var_funcname) PROCESS_BUF_REQUEST_X(var_cmdid, var_moduleType, var_funcname, 1, param[0], &ackbuf[0], &readbufsize) + void ZIProtocolParser::initialize(IZCanCmder* cancmder) { m_cancmder = cancmder; m_cancmder->registerListener(this); @@ -129,6 +151,8 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in virtual int32_t module_set_state(int32_t state_id, int32_t state_value) { return err::koperation_not_support; } virtual int32_t module_get_state(int32_t state_id, int32_t *state_value) { return err::koperation_not_support; } + virtual int32_t module_read_raw(int32_t startadd, int32_t *data, int32_t *len) { return err::koperation_not_support; } + #endif PROCESS_PACKET_00(kmodule_stop, ZIModule, module_stop); PROCESS_PACKET_00(kmodule_break, ZIModule, module_break); @@ -148,6 +172,7 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_PACKET_00(kmodule_active_cfg, ZIModule, module_active_cfg); PROCESS_PACKET_20(kmodule_set_state, ZIModule, module_set_state); PROCESS_PACKET_11(kmodule_get_state, ZIModule, module_get_state); + PROCESS_BUF_REQUEST_1(kmodule_read_raw, ZIModule, module_read_raw); /******************************************************************************* * motor * diff --git a/protocol_parser.hpp b/protocol_parser.hpp index 332e9a5..1c94759 100644 --- a/protocol_parser.hpp +++ b/protocol_parser.hpp @@ -10,13 +10,15 @@ class ZIProtocolParser : public IZcanCmderListener { IZCanCmder* m_cancmder = nullptr; map m_modulers; + uint8_t ackbuf[ZCANCMD_READ_BUF_MAX_SIZE + 100]; + public: void initialize(IZCanCmder* cancmder); virtual void onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, int32_t len); void registerModule(ZIModule* module); - private: - void _registerModule(uint16_t id, ZIModule* module); + private: + void _registerModule(uint16_t id, ZIModule* module); }; } // namespace iflytop \ No newline at end of file diff --git a/protocol_proxy.cpp b/protocol_proxy.cpp index d2fb93d..f3b2e82 100644 --- a/protocol_proxy.cpp +++ b/protocol_proxy.cpp @@ -37,66 +37,72 @@ using namespace iflytop; PROXY_IMPL_X4_ACK(); \ *ack4 = ack[4]; -#define PROXY_IMPL_XX(cmdindex, paramnum, acknum, paraassign, ackassign) \ - int32_t param[1 + paramnum] = {0}; \ - int32_t ack[1 + acknum] = {0}; \ - paraassign; \ - int32_t ecode = m_cancmder->sendCmd(cmdindex, m_id, param, paramnum, ack, acknum, 30); \ - ackassign; \ +#define PROXY_IMPL_XX(cmdindex, paramnum, acknum, paraassign, ackassign, overtime) \ + int32_t param[1 + paramnum] = {0}; \ + int32_t ack[1 + acknum] = {0}; \ + paraassign; \ + int32_t ecode = m_cancmder->sendCmd(cmdindex, m_id, param, paramnum, ack, acknum, overtime); \ + ackassign; \ return ecode; -#define PROXY_IMPL_00(cmdindex) PROXY_IMPL_XX(cmdindex, 0, 0, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X0_ACK()); -#define PROXY_IMPL_01(cmdindex) PROXY_IMPL_XX(cmdindex, 0, 1, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X1_ACK()); -#define PROXY_IMPL_02(cmdindex) PROXY_IMPL_XX(cmdindex, 0, 2, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X2_ACK()); -#define PROXY_IMPL_03(cmdindex) PROXY_IMPL_XX(cmdindex, 0, 3, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X3_ACK()); -#define PROXY_IMPL_04(cmdindex) PROXY_IMPL_XX(cmdindex, 0, 4, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X4_ACK()); - -#define PROXY_IMPL_10(cmdindex) PROXY_IMPL_XX(cmdindex, 1, 0, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X0_ACK()); -#define PROXY_IMPL_11(cmdindex) PROXY_IMPL_XX(cmdindex, 1, 1, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X1_ACK()); -#define PROXY_IMPL_12(cmdindex) PROXY_IMPL_XX(cmdindex, 1, 2, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X2_ACK()); -#define PROXY_IMPL_13(cmdindex) PROXY_IMPL_XX(cmdindex, 1, 3, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X3_ACK()); -#define PROXY_IMPL_14(cmdindex) PROXY_IMPL_XX(cmdindex, 1, 4, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X4_ACK()); - -#define PROXY_IMPL_20(cmdindex) PROXY_IMPL_XX(cmdindex, 2, 0, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X0_ACK()); -#define PROXY_IMPL_21(cmdindex) PROXY_IMPL_XX(cmdindex, 2, 1, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X1_ACK()); -#define PROXY_IMPL_22(cmdindex) PROXY_IMPL_XX(cmdindex, 2, 2, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X2_ACK()); -#define PROXY_IMPL_23(cmdindex) PROXY_IMPL_XX(cmdindex, 2, 3, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X3_ACK()); -#define PROXY_IMPL_24(cmdindex) PROXY_IMPL_XX(cmdindex, 2, 4, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X4_ACK()); - -#define PROXY_IMPL_30(cmdindex) PROXY_IMPL_XX(cmdindex, 3, 0, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X0_ACK()); -#define PROXY_IMPL_31(cmdindex) PROXY_IMPL_XX(cmdindex, 3, 1, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X1_ACK()); -#define PROXY_IMPL_32(cmdindex) PROXY_IMPL_XX(cmdindex, 3, 2, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X2_ACK()); -#define PROXY_IMPL_33(cmdindex) PROXY_IMPL_XX(cmdindex, 3, 3, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X3_ACK()); - -#define PROXY_IMPL_40(cmdindex) PROXY_IMPL_XX(cmdindex, 4, 0, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X0_ACK()); -#define PROXY_IMPL_41(cmdindex) PROXY_IMPL_XX(cmdindex, 4, 1, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X1_ACK()); -#define PROXY_IMPL_42(cmdindex) PROXY_IMPL_XX(cmdindex, 4, 2, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X2_ACK()); -#define PROXY_IMPL_43(cmdindex) PROXY_IMPL_XX(cmdindex, 4, 3, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X3_ACK()); - -int32_t ZIProtocolProxy::module_stop() { PROXY_IMPL_00(kmodule_stop); } -int32_t ZIProtocolProxy::module_break() { PROXY_IMPL_00(kmodule_break); } -int32_t ZIProtocolProxy::module_get_last_exec_status(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_last_exec_status); } -int32_t ZIProtocolProxy::module_get_status(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_status); } - -int32_t ZIProtocolProxy::module_set_param(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmodule_set_param); } -int32_t ZIProtocolProxy::module_get_param(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_get_param); } - -int32_t ZIProtocolProxy::module_readio(int32_t *ack0) { PROXY_IMPL_01(kmodule_readio); } -int32_t ZIProtocolProxy::module_writeio(int32_t para0) { PROXY_IMPL_10(kmodule_writeio); } - -int32_t ZIProtocolProxy::module_read_adc(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_read_adc); } -int32_t ZIProtocolProxy::module_get_error(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_error); } -int32_t ZIProtocolProxy::module_clear_error() { PROXY_IMPL_00(kmodule_clear_error); } - -int32_t ZIProtocolProxy::module_set_inited_flag(int32_t para0) { PROXY_IMPL_10(kmodule_set_inited_flag); }; -int32_t ZIProtocolProxy::module_get_inited_flag(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_inited_flag); }; - -int32_t ZIProtocolProxy::module_factory_reset() { PROXY_IMPL_00(kmodule_factory_reset); } -int32_t ZIProtocolProxy::module_flush_cfg() { PROXY_IMPL_00(kmodule_flush_cfg); } -int32_t ZIProtocolProxy::module_active_cfg() { PROXY_IMPL_00(kmodule_active_cfg); } - -int32_t ZIProtocolProxy::module_set_state(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmodule_set_state); }; -int32_t ZIProtocolProxy::module_get_state(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_get_state); }; +#define PROXY_IMPL_00(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 0, 0, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X0_ACK(), overtime); +#define PROXY_IMPL_01(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 0, 1, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X1_ACK(), overtime); +#define PROXY_IMPL_02(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 0, 2, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X2_ACK(), overtime); +#define PROXY_IMPL_03(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 0, 3, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X3_ACK(), overtime); +#define PROXY_IMPL_04(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 0, 4, PROXY_IMPL_0X_PARA(), PROXY_IMPL_X4_ACK(), overtime); + +#define PROXY_IMPL_10(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 1, 0, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X0_ACK(), overtime); +#define PROXY_IMPL_11(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 1, 1, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X1_ACK(), overtime); +#define PROXY_IMPL_12(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 1, 2, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X2_ACK(), overtime); +#define PROXY_IMPL_13(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 1, 3, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X3_ACK(), overtime); +#define PROXY_IMPL_14(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 1, 4, PROXY_IMPL_1X_PARA(), PROXY_IMPL_X4_ACK(), overtime); + +#define PROXY_IMPL_20(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 2, 0, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X0_ACK(), overtime); +#define PROXY_IMPL_21(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 2, 1, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X1_ACK(), overtime); +#define PROXY_IMPL_22(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 2, 2, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X2_ACK(), overtime); +#define PROXY_IMPL_23(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 2, 3, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X3_ACK(), overtime); +#define PROXY_IMPL_24(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 2, 4, PROXY_IMPL_2X_PARA(), PROXY_IMPL_X4_ACK(), overtime); + +#define PROXY_IMPL_30(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 3, 0, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X0_ACK(), overtime); +#define PROXY_IMPL_31(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 3, 1, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X1_ACK(), overtime); +#define PROXY_IMPL_32(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 3, 2, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X2_ACK(), overtime); +#define PROXY_IMPL_33(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 3, 3, PROXY_IMPL_3X_PARA(), PROXY_IMPL_X3_ACK(), overtime); + +#define PROXY_IMPL_40(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 4, 0, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X0_ACK(), overtime); +#define PROXY_IMPL_41(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 4, 1, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X1_ACK(), overtime); +#define PROXY_IMPL_42(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 4, 2, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X2_ACK(), overtime); +#define PROXY_IMPL_43(cmdindex, overtime) PROXY_IMPL_XX(cmdindex, 4, 3, PROXY_IMPL_4X_PARA(), PROXY_IMPL_X3_ACK(), overtime); + +int32_t ZIProtocolProxy::module_stop() { PROXY_IMPL_00(kmodule_stop, 30); } +int32_t ZIProtocolProxy::module_break() { PROXY_IMPL_00(kmodule_break, 30); } +int32_t ZIProtocolProxy::module_get_last_exec_status(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_last_exec_status, 30); } +int32_t ZIProtocolProxy::module_get_status(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_status, 30); } + +int32_t ZIProtocolProxy::module_set_param(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmodule_set_param, 30); } +int32_t ZIProtocolProxy::module_get_param(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_get_param, 30); } + +int32_t ZIProtocolProxy::module_readio(int32_t *ack0) { PROXY_IMPL_01(kmodule_readio, 30); } +int32_t ZIProtocolProxy::module_writeio(int32_t para0) { PROXY_IMPL_10(kmodule_writeio, 30); } + +int32_t ZIProtocolProxy::module_read_adc(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_read_adc, 30); } +int32_t ZIProtocolProxy::module_get_error(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_error, 30); } +int32_t ZIProtocolProxy::module_clear_error() { PROXY_IMPL_00(kmodule_clear_error, 30); } + +int32_t ZIProtocolProxy::module_set_inited_flag(int32_t para0) { PROXY_IMPL_10(kmodule_set_inited_flag, 30); }; +int32_t ZIProtocolProxy::module_get_inited_flag(int32_t *ack0) { PROXY_IMPL_01(kmodule_get_inited_flag, 30); }; + +int32_t ZIProtocolProxy::module_factory_reset() { PROXY_IMPL_00(kmodule_factory_reset, 30); } +int32_t ZIProtocolProxy::module_flush_cfg() { PROXY_IMPL_00(kmodule_flush_cfg, 5000); } +int32_t ZIProtocolProxy::module_active_cfg() { PROXY_IMPL_00(kmodule_active_cfg, 30); } + +int32_t ZIProtocolProxy::module_set_state(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmodule_set_state, 30); }; +int32_t ZIProtocolProxy::module_get_state(int32_t para0, int32_t *ack0) { PROXY_IMPL_11(kmodule_get_state, 30); }; +int32_t ZIProtocolProxy::module_read_raw(int32_t startadd, uint8_t *data, int32_t *len) { + int32_t param[1 + 1] = {0}; + param[0] = startadd; + int32_t ecode = m_cancmder->sendCmdAndReceiveBuf(kmodule_read_raw, m_id, param, 1, data, len, 100); + return ecode; +} /******************************************************************************* * ZIMotor * @@ -125,26 +131,26 @@ int32_t ZIProtocolProxy::module_get_state(int32_t para0, int32_t *ack0) { PROXY_ #endif -int32_t ZIProtocolProxy::motor_enable(int32_t para0) { PROXY_IMPL_10(kmotor_enable); } -int32_t ZIProtocolProxy::motor_rotate(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_rotate); } -int32_t ZIProtocolProxy::motor_move_by(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_by); } -int32_t ZIProtocolProxy::motor_move_to(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to); } -int32_t ZIProtocolProxy::motor_rotate_with_torque(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmotor_rotate_with_torque); } +int32_t ZIProtocolProxy::motor_enable(int32_t para0) { PROXY_IMPL_10(kmotor_enable, 30); } +int32_t ZIProtocolProxy::motor_rotate(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_rotate, 30); } +int32_t ZIProtocolProxy::motor_move_by(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_by, 30); } +int32_t ZIProtocolProxy::motor_move_to(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to, 30); } +int32_t ZIProtocolProxy::motor_rotate_with_torque(int32_t para0, int32_t para1) { PROXY_IMPL_20(kmotor_rotate_with_torque, 30); } -int32_t ZIProtocolProxy::motor_rotate_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_rotate_acctime); } -int32_t ZIProtocolProxy::motor_move_by_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_by_acctime); } -int32_t ZIProtocolProxy::motor_move_to_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to_acctime); } +int32_t ZIProtocolProxy::motor_rotate_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_rotate_acctime, 30); } +int32_t ZIProtocolProxy::motor_move_by_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_by_acctime, 30); } +int32_t ZIProtocolProxy::motor_move_to_acctime(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to_acctime, 30); } -int32_t ZIProtocolProxy::motor_move_to_zero_forward(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_move_to_zero_forward); } -int32_t ZIProtocolProxy::motor_move_to_zero_backward(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_move_to_zero_backward); } +int32_t ZIProtocolProxy::motor_move_to_zero_forward(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_move_to_zero_forward, 30); } +int32_t ZIProtocolProxy::motor_move_to_zero_backward(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_move_to_zero_backward, 30); } -int32_t ZIProtocolProxy::motor_read_pos(int32_t *ack0) { PROXY_IMPL_01(kmotor_read_pos); } -int32_t ZIProtocolProxy::motor_set_current_pos_by_change_shift(int32_t para0) { PROXY_IMPL_10(kmotor_set_current_pos_by_change_shift); } +int32_t ZIProtocolProxy::motor_read_pos(int32_t *ack0) { PROXY_IMPL_01(kmotor_read_pos, 30); } +int32_t ZIProtocolProxy::motor_set_current_pos_by_change_shift(int32_t para0) { PROXY_IMPL_10(kmotor_set_current_pos_by_change_shift, 30); } -int32_t ZIProtocolProxy::motor_move_to_zero_forward_and_calculated_shift(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_motor_move_to_zero_forward_and_calculated_shift); }; -int32_t ZIProtocolProxy::motor_move_to_zero_backward_and_calculated_shift(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_motor_move_to_zero_backward_and_calculated_shift); }; +int32_t ZIProtocolProxy::motor_move_to_zero_forward_and_calculated_shift(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_motor_move_to_zero_forward_and_calculated_shift, 30); }; +int32_t ZIProtocolProxy::motor_move_to_zero_backward_and_calculated_shift(int32_t para0, int32_t para1, int32_t para2, int32_t para3) { PROXY_IMPL_40(kmotor_motor_move_to_zero_backward_and_calculated_shift, 30); }; -int32_t ZIProtocolProxy::motor_move_to_torque(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to_torque); } +int32_t ZIProtocolProxy::motor_move_to_torque(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kmotor_move_to_torque, 30); } /******************************************************************************* * ZIXYMotor * @@ -159,10 +165,10 @@ int32_t ZIProtocolProxy::motor_move_to_torque(int32_t para0, int32_t para1, int3 virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) { return err::koperation_not_support; } virtual int32_t xymotor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; } #endif -int32_t ZIProtocolProxy::xymotor_enable(int32_t para0) { PROXY_IMPL_10(kxymotor_enable); } -int32_t ZIProtocolProxy::xymotor_move_by(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kxymotor_move_by); } -int32_t ZIProtocolProxy::xymotor_move_to(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kxymotor_move_to); } -int32_t ZIProtocolProxy::xymotor_move_to_zero() { PROXY_IMPL_00(kxymotor_move_to_zero); } -int32_t ZIProtocolProxy::xymotor_move_to_zero_and_calculated_shift() { PROXY_IMPL_00(kxymotor_move_to_zero_and_calculated_shift); } -int32_t ZIProtocolProxy::xymotor_read_pos(int32_t *ack0, int32_t *ack1) { PROXY_IMPL_02(kxymotor_read_pos); } -int32_t ZIProtocolProxy::xymotor_calculated_pos_by_move_to_zero() { PROXY_IMPL_00(kxymotor_calculated_pos_by_move_to_zero); } +int32_t ZIProtocolProxy::xymotor_enable(int32_t para0) { PROXY_IMPL_10(kxymotor_enable, 30); } +int32_t ZIProtocolProxy::xymotor_move_by(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kxymotor_move_by, 30); } +int32_t ZIProtocolProxy::xymotor_move_to(int32_t para0, int32_t para1, int32_t para2) { PROXY_IMPL_30(kxymotor_move_to, 30); } +int32_t ZIProtocolProxy::xymotor_move_to_zero() { PROXY_IMPL_00(kxymotor_move_to_zero, 30); } +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); } diff --git a/protocol_proxy.hpp b/protocol_proxy.hpp index e1f2be4..b44e53b 100644 --- a/protocol_proxy.hpp +++ b/protocol_proxy.hpp @@ -57,6 +57,8 @@ class ZIProtocolProxy : public ZIMotor, // virtual int32_t module_set_state(int32_t state_id, int32_t state_value) override; virtual int32_t module_get_state(int32_t state_id, int32_t *state_value) override; + virtual int32_t module_read_raw(int32_t startadd, uint8_t *data, int32_t *len) override; + /******************************************************************************* * ZIMotor * *******************************************************************************/ diff --git a/zmodule_device_manager.cpp b/zmodule_device_manager.cpp index 754156e..eaf456d 100644 --- a/zmodule_device_manager.cpp +++ b/zmodule_device_manager.cpp @@ -46,6 +46,8 @@ int32_t ZModuleDeviceManager::module_flush_cfg(uint16_t id) { PROXY_IMPL(ZIModul int32_t ZModuleDeviceManager::module_active_cfg(uint16_t id) { PROXY_IMPL(ZIModule, module_active_cfg); } int32_t ZModuleDeviceManager::module_set_state(uint16_t id, int32_t state_id, int32_t state_value) { PROXY_IMPL(ZIModule, module_set_state, state_id, state_value); } int32_t ZModuleDeviceManager::module_get_state(uint16_t id, int32_t state_id, int32_t *state_value) { PROXY_IMPL(ZIModule, module_get_state, state_id, state_value); } +int32_t ZModuleDeviceManager::module_read_raw(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len) { PROXY_IMPL(ZIModule, module_read_raw, startadd, data, len); } + /******************************************************************************* * ZIMotor * *******************************************************************************/ diff --git a/zmodule_device_manager.hpp b/zmodule_device_manager.hpp index c69c021..d134cd9 100644 --- a/zmodule_device_manager.hpp +++ b/zmodule_device_manager.hpp @@ -84,6 +84,8 @@ class ZModuleDeviceManager { virtual int32_t module_set_state(uint16_t id, int32_t state_id, int32_t state_value); virtual int32_t module_get_state(uint16_t id, int32_t state_id, int32_t *state_value); + virtual int32_t module_read_raw(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len); + /******************************************************************************* * ZIMotor * *******************************************************************************/ diff --git a/zmodule_device_script_cmder_paser.cpp b/zmodule_device_script_cmder_paser.cpp index 51da037..11ae903 100644 --- a/zmodule_device_script_cmder_paser.cpp +++ b/zmodule_device_script_cmder_paser.cpp @@ -76,6 +76,8 @@ void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDevi int32_t module_set_state(uint16_t id, int32_t state_id, int32_t state_value); int32_t module_get_state(uint16_t id, int32_t state_id, int32_t *state_value); + virtual int32_t module_read_raw(uint16_t id, int32_t startadd, int32_t readlen, uint8_t *data, int32_t *len); + /******************************************************************************* * ZIMotor * *******************************************************************************/ @@ -114,6 +116,16 @@ void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDevi PROCESS_PACKET_10(module_active_cfg, "(mid)"); PROCESS_PACKET_30(module_set_state, "(mid, state_id, state_value)"); PROCESS_PACKET_21(module_get_state, "(mid, state_id)"); + cancmder->regCMD("module_read_raw", "(mid, readsize)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { + if (atoi(paraV[2]) > 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 motor_enable(int32_t enable) { return err::koperation_not_support; } virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }