|
@ -156,14 +156,18 @@ void ZCanHost::initialize(string can_if_name, int baudrate, bool enablLoopback) |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
m_cmdMap["call"] = [this](int argc, char** argv, string& retval) { |
|
|
m_cmdMap["call"] = [this](int argc, char** argv, string& retval) { |
|
|
|
|
|
int32_t ack = 0; |
|
|
if (argc == 1 + 1) { |
|
|
if (argc == 1 + 1) { |
|
|
call(atoi(argv[1])); |
|
|
|
|
|
|
|
|
call(atoi(argv[1]), &ack); |
|
|
|
|
|
retval = fmt::format("ACK:{}", ack); |
|
|
return true; |
|
|
return true; |
|
|
} else if (argc == 2 + 1) { |
|
|
} else if (argc == 2 + 1) { |
|
|
call(atoi(argv[1]), atoi(argv[2])); |
|
|
|
|
|
|
|
|
call(atoi(argv[1]), atoi(argv[2]), &ack); |
|
|
|
|
|
retval = fmt::format("ACK:{}", ack); |
|
|
return true; |
|
|
return true; |
|
|
} else if (argc == 3 + 1) { |
|
|
} else if (argc == 3 + 1) { |
|
|
call(atoi(argv[1]), atoi(argv[2]), atoi(argv[3])); |
|
|
|
|
|
|
|
|
call(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), &ack); |
|
|
|
|
|
retval = fmt::format("ACK:{}", ack); |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
return false; |
|
|
return false; |
|
@ -455,7 +459,7 @@ int32_t ZCanHost::hpp272_read_c1000(int sensorid, hpp272_data_t& value) { |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t* val0, int32_t nval) { |
|
|
|
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t* val0, int32_t nval, int32_t* ack, int32_t* acknum) { |
|
|
shared_ptr<ZCanReceiverCMD> cmd = make_shared<ZCanReceiverCMD>(); |
|
|
shared_ptr<ZCanReceiverCMD> cmd = make_shared<ZCanReceiverCMD>(); |
|
|
cmd->cmdid = cmdid; |
|
|
cmd->cmdid = cmdid; |
|
|
cmd->subcmdid = 0; |
|
|
cmd->subcmdid = 0; |
|
@ -470,15 +474,40 @@ int32_t ZCanHost::call(int32_t cmdid, int32_t* val0, int32_t nval) { |
|
|
return err::zecode(err::knoack); |
|
|
return err::zecode(err::knoack); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (ack != nullptr && acknum != nullptr && rx->packetType == kpt_ack) { |
|
|
|
|
|
int32_t rxdatasize = rx->len / 4; |
|
|
|
|
|
for (int32_t i = 0; i < *acknum; i++) { |
|
|
|
|
|
ack[i] = *(int32_t*)&(rx->data[i * 4]); |
|
|
|
|
|
if (i >= rxdatasize) { |
|
|
|
|
|
ack[i] = 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
*acknum = rxdatasize; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (rx->packetType == kpt_error_ack) { |
|
|
if (rx->packetType == kpt_error_ack) { |
|
|
logger->error("call error ack,{}", *zuint16p(&rx->data[0])); |
|
|
logger->error("call error ack,{}", *zuint16p(&rx->data[0])); |
|
|
return err::zecode(err::kfail); |
|
|
return err::zecode(err::kfail); |
|
|
} |
|
|
} |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
int32_t ZCanHost::call(int32_t cmdid) { return call(cmdid, (int32_t*)nullptr, 0); } |
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0) { return call(cmdid, &val0, 1); } |
|
|
|
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t* ack) { |
|
|
|
|
|
int32_t acknum = 1; |
|
|
|
|
|
return call(cmdid, (int32_t*)nullptr, 0, ack, &acknum); |
|
|
|
|
|
} |
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0, int32_t* ack) { |
|
|
|
|
|
int32_t val[1] = {val0}; |
|
|
|
|
|
int32_t acknum = 1; |
|
|
|
|
|
return call(cmdid, val, 1, ack, &acknum); |
|
|
|
|
|
} |
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0, int32_t val1, int32_t* ack) { |
|
|
|
|
|
int32_t val[2] = {val0, val1}; |
|
|
|
|
|
int32_t acknum = 1; |
|
|
|
|
|
return call(cmdid, val, 2, ack, &acknum); |
|
|
|
|
|
} |
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid) { return call(cmdid, (int32_t*)nullptr, 0, nullptr, nullptr); } |
|
|
|
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0) { return call(cmdid, &val0, 1, nullptr, nullptr); } |
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0, int32_t val1) { |
|
|
int32_t ZCanHost::call(int32_t cmdid, int32_t val0, int32_t val1) { |
|
|
int32_t val[2] = {val0, val1}; |
|
|
int32_t val[2] = {val0, val1}; |
|
|
return call(cmdid, val, 2); |
|
|
|
|
|
|
|
|
return call(cmdid, val, 2, nullptr, nullptr); |
|
|
} |
|
|
} |