Browse Source

update

disinfection_machine
zhaohe 2 years ago
parent
commit
a838d01d60
  1. 42
      src/iflytop/components/zcanreceiver/zcanhost.cpp
  2. 30
      src/iflytop/components/zcanreceiver/zcanhost.hpp

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

@ -154,6 +154,20 @@ void ZCanHost::initialize(string can_if_name, int baudrate, bool enablLoopback)
std::this_thread::sleep_for(std::chrono::milliseconds(ms)); std::this_thread::sleep_for(std::chrono::milliseconds(ms));
return true; return true;
}; };
m_cmdMap["call"] = [this](int argc, char** argv, string& retval) {
if (argc == 1 + 1) {
call(atoi(argv[1]));
return true;
} else if (argc == 2 + 1) {
call(atoi(argv[1]), atoi(argv[2]));
return true;
} else if (argc == 3 + 1) {
call(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
return true;
}
return false;
};
} }
static void prase_cmd(char* input, int inputlen, int& argc, char* argv[]) { static void prase_cmd(char* input, int inputlen, int& argc, char* argv[]) {
@ -440,3 +454,31 @@ int32_t ZCanHost::hpp272_read_c1000(int sensorid, hpp272_data_t& value) {
memcpy(&value, &rx->data[2], sizeof(hpp272_data_t)); memcpy(&value, &rx->data[2], sizeof(hpp272_data_t));
return 0; return 0;
} }
int32_t ZCanHost::call(int32_t cmdid, int32_t* val0, int32_t nval) {
shared_ptr<ZCanReceiverCMD> cmd = make_shared<ZCanReceiverCMD>();
cmd->cmdid = cmdid;
cmd->subcmdid = 0;
int32_t* p = (int32_t*)&cmd->data[0];
for (int i = 0; i < nval; i++) {
p[i] = val0[i];
}
cmd->len = 4 * nval;
auto rx = m_zcanReceiverHost->sendcmdblock(cmd, 100);
if (!rx) {
return err::zecode(err::knoack);
}
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 val0, int32_t val1) {
int32_t val[2] = {val0, val1};
return call(cmdid, val, 2);
}

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

@ -13,10 +13,27 @@ namespace iflytop {
using namespace std; using namespace std;
using namespace zcr; using namespace zcr;
using namespace core; using namespace core;
typedef enum {
kcmd_ping = 0,
kcmd_read_io = 1,
kcmd_set_io = 2,
kcmd_readadc_raw = 3,
kcmd_m211887_operation = 1000, // 维萨拉压力传感器
kcmd_read_presure_sensor = 1001,
kcmd_triple_warning_light_ctl = 1002,
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}
} CmdID_t;
class ZCanHost { class ZCanHost {
ENABLE_LOGGER(ZCanHost); ENABLE_LOGGER(ZCanHost);
public:
private:
shared_ptr<ZCanReceiverHost> m_zcanReceiverHost; shared_ptr<ZCanReceiverHost> m_zcanReceiverHost;
map<string, function<bool(int argc, char** argv, string& retval)>> m_cmdMap; map<string, function<bool(int argc, char** argv, string& retval)>> m_cmdMap;
@ -96,18 +113,25 @@ class ZCanHost {
} huacheng_pressure_sensor_read_c1005_t; } huacheng_pressure_sensor_read_c1005_t;
int32_t huacheng_pressure_sensor_get_pa(huacheng_pressure_sensor_read_c1005_t* rawdata) { int32_t huacheng_pressure_sensor_get_pa(huacheng_pressure_sensor_read_c1005_t* rawdata) {
if (rawdata->unit == 0) { if (rawdata->unit == 0) {
int32_t pa = (int32_t)rawdata->value / (pow(10.0,rawdata->precision) ) * 1000000;
int32_t pa = (int32_t)rawdata->value / (pow(10.0, rawdata->precision)) * 1000000;
return pa; return pa;
} else if (rawdata->unit == 1) { } else if (rawdata->unit == 1) {
int32_t pa = (int32_t)rawdata->value / (pow(10.0,rawdata->precision) ) * 1000;
int32_t pa = (int32_t)rawdata->value / (pow(10.0, rawdata->precision)) * 1000;
return pa; return pa;
} else if (rawdata->unit == 2) { } else if (rawdata->unit == 2) {
int32_t pa = (int32_t)rawdata->value / (pow(10.0,rawdata->precision) );
int32_t pa = (int32_t)rawdata->value / (pow(10.0, rawdata->precision));
return pa; return pa;
} }
return -1; return -1;
} }
int32_t huacheng_pressure_sensor_read_c1005(int sensorid, huacheng_pressure_sensor_read_c1005_t& value); int32_t huacheng_pressure_sensor_read_c1005(int sensorid, huacheng_pressure_sensor_read_c1005_t& value);
int32_t call(int32_t cmdid);
int32_t call(int32_t cmdid, int32_t val0);
int32_t call(int32_t cmdid, int32_t val0, int32_t val1);
private:
int32_t call(int32_t cmdid, int32_t* val0, int32_t nval);
}; };
} // namespace iflytop } // namespace iflytop
Loading…
Cancel
Save