|
|
@ -8,11 +8,11 @@ using namespace zcr; |
|
|
|
#define zuint16p(x) ((uint16_t*)(x))
|
|
|
|
#define zint32p(x) ((int32_t*)(x))
|
|
|
|
|
|
|
|
#define CHECK_ARGC_NUM(x) \
|
|
|
|
if (argc != (x + 1)) { \ |
|
|
|
logger->error("do {},argc error", argv[0]); \ |
|
|
|
retval = "argc num error"; \ |
|
|
|
return false; \ |
|
|
|
#define CHECK_ARGC_NUM(x) \
|
|
|
|
if (argc != (x + 1)) { \ |
|
|
|
logger->error("do {},argc error {}!={}", argv[0], argc, x + 1); \ |
|
|
|
retval = "argc num error"; \ |
|
|
|
return false; \ |
|
|
|
} |
|
|
|
|
|
|
|
void ZCanHost::initialize(string can_if_name, int baudrate, bool enablLoopback) { |
|
|
@ -20,11 +20,24 @@ void ZCanHost::initialize(string can_if_name, int baudrate, bool enablLoopback) |
|
|
|
m_zcanReceiverHost->initialize(can_if_name, baudrate, enablLoopback); |
|
|
|
|
|
|
|
m_cmdMap["pumpctrl_c1004"] = [this](int argc, char** argv, string& retval) { |
|
|
|
CHECK_ARGC_NUM(4); |
|
|
|
uint8_t id = atoi(argv[1]); |
|
|
|
int16_t acc = atoi(argv[2]); |
|
|
|
int16_t rpm = atoi(argv[3]); |
|
|
|
return pumpctrl_c1004(id, acc, rpm) != 0; |
|
|
|
// CHECK_ARGC_NUM(3);
|
|
|
|
|
|
|
|
if (argc == 4) { |
|
|
|
uint8_t id = atoi(argv[1]); |
|
|
|
int16_t acc = atoi(argv[2]); |
|
|
|
int16_t rpm = atoi(argv[3]); |
|
|
|
return pumpctrl_c1004(id, acc, rpm) != 0; |
|
|
|
} else if (argc == 6) { |
|
|
|
uint8_t id = atoi(argv[1]); |
|
|
|
int16_t acc = atoi(argv[2]); |
|
|
|
int16_t rpm = atoi(argv[3]); |
|
|
|
int8_t idlepower = atoi(argv[4]); |
|
|
|
int8_t power = atoi(argv[5]); |
|
|
|
return pumpctrl_c1004(id, acc, rpm, idlepower, power) != 0; |
|
|
|
} |
|
|
|
logger->error("do {},argc error {}!={},{}", argv[0], argc, 4, 6); |
|
|
|
retval = "argc num error"; |
|
|
|
return false; |
|
|
|
}; |
|
|
|
|
|
|
|
// ZCanHost::readio(int id, bool& value)
|
|
|
@ -298,6 +311,28 @@ int32_t ZCanHost::pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZCanHost::pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm, int8_t idlepower, int8_t power) { |
|
|
|
shared_ptr<ZCanReceiverCMD> cmd = make_shared<ZCanReceiverCMD>(); |
|
|
|
cmd->cmdid = 1004; |
|
|
|
cmd->subcmdid = 1; |
|
|
|
cmd->data[0] = sensorid; |
|
|
|
*zint16p(&cmd->data[2]) = acc; |
|
|
|
*zint16p(&cmd->data[4]) = rpm; |
|
|
|
cmd->data[6] = idlepower; |
|
|
|
cmd->data[7] = power; |
|
|
|
cmd->len = 8; |
|
|
|
auto rx = m_zcanReceiverHost->sendcmdblock(cmd, 100); |
|
|
|
if (rx == nullptr) { |
|
|
|
return err::zecode(err::knoack); |
|
|
|
} |
|
|
|
if (rx->packetType == kpt_error_ack) { |
|
|
|
logger->error("pumpctrl_c1004 error ack,{}", *zuint16p(&rx->data[0])); |
|
|
|
return err::zecode(err::kfail); |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 报警三色指示灯控制 |
|
|
|
* |
|
|
|