Browse Source

update

disinfection_machine
zhaohe 2 years ago
parent
commit
17b5cd5e7e
  1. 43
      src/iflytop/components/zcanreceiver/zcanhost.cpp
  2. 13
      src/iflytop/components/zcanreceiver/zcanhost.hpp

43
src/iflytop/components/zcanreceiver/zcanhost.cpp

@ -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) {
int32_t ack = 0;
if (argc == 1 + 1) {
call(atoi(argv[1]));
call(atoi(argv[1]), &ack);
retval = fmt::format("ACK:{}", ack);
return true;
} 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;
} 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 false;
@ -455,7 +459,7 @@ int32_t ZCanHost::hpp272_read_c1000(int sensorid, hpp272_data_t& value) {
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>();
cmd->cmdid = cmdid;
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);
}
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) {
logger->error("call error ack,{}", *zuint16p(&rx->data[0]));
return err::zecode(err::kfail);
}
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 val[2] = {val0, val1};
return call(cmdid, val, 2);
return call(cmdid, val, 2, nullptr, nullptr);
}

13
src/iflytop/components/zcanreceiver/zcanhost.hpp

@ -25,8 +25,11 @@ typedef enum {
kcmd_high_power_electrical_ctl = 1003,
kcmd_peristaltic_pump_ctl = 1004,
kcmd_read_huacheng_pressure_sensor = 1005,
kcmd_set_proportional_valve = 1006, // {4:valveId,4:valveValue}
kcmd_air_compressor_ch_ctrl = 1007, // {4:chstate}
kcmd_set_proportional_valve = 1006, // 设置比例阀 {4:valveId,4:valveValue}
kcmd_air_compressor_ch_select = 1007, // 空压机通道选择 {4:val}
kcmd_air_compressor_valve1_set = 1008, // 空压机阀门1控制 {4:val}
kcmd_air_compressor_valve2_set = 1009, // 空压机阀门2控制 {4:val}
kcmd_air_compressor_read_pressure = 1010, // 空压机阀读取压力 {}{4:val}
} CmdID_t;
class ZCanHost {
@ -130,8 +133,12 @@ class ZCanHost {
int32_t call(int32_t cmdid, int32_t val0);
int32_t call(int32_t cmdid, int32_t val0, int32_t val1);
int32_t call(int32_t cmdid, int32_t* ack);
int32_t call(int32_t cmdid, int32_t val0, int32_t* ack);
int32_t call(int32_t cmdid, int32_t val0, int32_t val1, int32_t* ack);
private:
int32_t call(int32_t cmdid, int32_t* val0, int32_t nval);
int32_t call(int32_t cmdid, int32_t* val0, int32_t nval, int32_t* ack, int32_t* acknum);
};
} // namespace iflytop
Loading…
Cancel
Save