diff --git a/disinfection_iflytop_can_protocol b/disinfection_iflytop_can_protocol index fc6162a..c01f84e 160000 --- a/disinfection_iflytop_can_protocol +++ b/disinfection_iflytop_can_protocol @@ -1 +1 @@ -Subproject commit fc6162a1f1af5c5be894fc42c7991750d54d812d +Subproject commit c01f84e2ad44f02f615ceec55762e9eda995c0a1 diff --git a/iflytop_canbus/iflytop_canbus_master.cpp b/iflytop_canbus/iflytop_canbus_master.cpp index 299ca2d..c091a19 100644 --- a/iflytop_canbus/iflytop_canbus_master.cpp +++ b/iflytop_canbus/iflytop_canbus_master.cpp @@ -8,6 +8,8 @@ using namespace iflytop; #define TAG "IflytopCanbusMaster" +#define DEFUALT_OVERTIME 30 + IflytopCanbusMaster *IflytopCanbusMaster::ins() { static IflytopCanbusMaster *ins = new IflytopCanbusMaster(); return ins; @@ -211,23 +213,43 @@ void IflytopCanbusMaster::callcmd3(int32_t device_id, int32_t cmdid, int32_t par param[2] = param2; callcmd(device_id, cmdid, (uint8_t *)param, 12, overtime); } +void IflytopCanbusMaster::callcmd4(int32_t to, int32_t cmdid, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t overtime) { + int32_t param[4]; + param[0] = param0; + param[1] = param1; + param[2] = param2; + param[3] = param3; + callcmd(to, cmdid, (uint8_t *)param, 16, overtime); +} + void IflytopCanbusMaster::sendraw(int32_t from, int32_t to, uint8_t *data, size_t len) { sendframe(from, to, data, len); } ack_read_board_info_data_t IflytopCanbusMaster::readboardinfo(int to) { ack_read_board_info_data_t ack; - callcmd0(to, kcmd_read_board_info, 100); + callcmd0(to, kcmd_read_board_info, DEFUALT_OVERTIME); memcpy(&ack, m_receipt_frame->params, sizeof(ack)); return ack; } ack_sysinfo_t IflytopCanbusMaster::readsysinfo(int to) { ack_sysinfo_t ack; - callcmd0(to, kcmd_read_sysinfo, 100); + callcmd0(to, kcmd_read_sysinfo, DEFUALT_OVERTIME); memcpy(&ack, m_receipt_frame->params, sizeof(ack)); return ack; } ask_taskinfo_t IflytopCanbusMaster::readtaskinfo(int to, int32_t taskoff) { ask_taskinfo_t ack; - callcmd1(to, kcmd_read_taskinfo, taskoff, 100); + callcmd1(to, kcmd_read_taskinfo, taskoff, DEFUALT_OVERTIME); memcpy(&ack, m_receipt_frame->params, sizeof(ack)); return ack; -} \ No newline at end of file +} + +void IflytopCanbusMaster::pump_rotate(int boardid, int subid, int rpm) { callcmd2(boardid, kcmd_pump_rotate, subid, rpm, DEFUALT_OVERTIME); } +void IflytopCanbusMaster::pump_stop(int boardid, int subid) { callcmd1(boardid, kcmd_pump_stop, subid, DEFUALT_OVERTIME); } +void IflytopCanbusMaster::pump_set_ihold_irun_idelay(int boardid, int subid, int ihold, int irun, int idelay) { callcmd4(boardid, kcmd_pump_set_ihold_irun_idelay, subid, irun, ihold, idelay, DEFUALT_OVERTIME); } +void IflytopCanbusMaster::pump_set_acc(int boardid, int subid, int acc) { callcmd2(boardid, kcmd_pump_set_acc, subid, acc, DEFUALT_OVERTIME); } + +void IflytopCanbusMaster::pump_set_subic_reg(int boardid, int subid, int regadd, int val) { callcmd3(boardid, kcmd_pump_set_subic_reg, subid, regadd, val, DEFUALT_OVERTIME); } +int IflytopCanbusMaster::pump_get_subic_reg(int boardid, int subid, int regadd) { + callcmd2(boardid, kcmd_pump_get_subic_reg, subid, regadd, DEFUALT_OVERTIME); + return *(int32_t *)m_receipt_frame->params; +} diff --git a/iflytop_canbus/iflytop_canbus_master.hpp b/iflytop_canbus/iflytop_canbus_master.hpp index a009104..80ac767 100644 --- a/iflytop_canbus/iflytop_canbus_master.hpp +++ b/iflytop_canbus/iflytop_canbus_master.hpp @@ -87,12 +87,24 @@ class IflytopCanbusMaster { void callcmd1(int32_t to, int32_t cmdid, int32_t param0, int32_t overtime = 100); void callcmd2(int32_t to, int32_t cmdid, int32_t param0, int32_t param1, int32_t overtime = 100); void callcmd3(int32_t to, int32_t cmdid, int32_t param0, int32_t param1, int32_t param2, int32_t overtime = 100); + void callcmd4(int32_t to, int32_t cmdid, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t overtime = 100); void sendraw(int32_t from, int32_t to, uint8_t *data, size_t len); + /*********************************************************************************************************************** + * FUNCTION_LIST * + ***********************************************************************************************************************/ ack_read_board_info_data_t readboardinfo(int to); ack_sysinfo_t readsysinfo(int to); - ask_taskinfo_t readtaskinfo(int to,int32_t taskoff); + ask_taskinfo_t readtaskinfo(int to, int32_t taskoff); + + void pump_rotate(int boardid, int subid, int rpm); + void pump_stop(int boardid, int subid); + void pump_set_ihold_irun_idelay(int boardid, int subid, int ihold, int irun, int idelay); + void pump_set_acc(int boardid, int subid, int acc); + + void pump_set_subic_reg(int boardid, int subid, int regadd, int val); + int pump_get_subic_reg(int boardid, int subid, int regadd); private: void sendframe(int32_t from, int32_t to, uint8_t *frame, size_t len); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2c12f7d..90153c2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -258,7 +258,7 @@ void MainWindow::constructAppUI() { ZQUI::ins()->ishow("hardware_version :%d", ack.hardware_version); }); - box->newFunc("读系统信息", {}, [this](int argn, const char **args) { // + box->newFunc("读内存信息", {}, [this](int argn, const char **args) { // ack_sysinfo_t ack = IflytopCanbusMaster::ins()->readsysinfo(getDeviceId()); ask_taskinfo_t task[20]; for (int i = 0; i < ack.taskNum; i++) { @@ -271,13 +271,42 @@ void MainWindow::constructAppUI() { ZQUI::ins()->ishow("="); ZQUI::ins()->ishow("=========================== task info ==========================="); - ZQUI::ins()->ishow("taskoff name state stackRemainSize priority"); + ZQUI::ins()->ishow("taskoff name state stackRemainSize priority"); for (int i = 0; i < ack.taskNum; i++) { - ZQUI::ins()->ishow("%d %10s %c %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority); + ZQUI::ins()->ishow("%d %10s %c %d %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority); } ZQUI::ins()->ishow("="); }); } + + { + ZQFunctionListBox *box = new ZQFunctionListBox(tab, "泵机指令", 4); + + box->newFunc("pump_rotate", {"subid", "rpm"}, [this](int argn, const char **args) { // + IflytopCanbusMaster::ins()->pump_rotate(getDeviceId(), atoi(args[0]), atoi(args[1])); + }); + + box->newFunc("pump_stop", {"subid"}, [this](int argn, const char **args) { // + IflytopCanbusMaster::ins()->pump_stop(getDeviceId(), atoi(args[0])); + }); + + box->newFunc("pump_set_ihold_irun_idelay", {"subid", "ihold", "irun", "idelay"}, [this](int argn, const char **args) { // + IflytopCanbusMaster::ins()->pump_set_ihold_irun_idelay(getDeviceId(), atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3])); + }); + + box->newFunc("pump_set_acc", {"subid", "acc"}, [this](int argn, const char **args) { // + IflytopCanbusMaster::ins()->pump_set_acc(getDeviceId(), atoi(args[0]), atoi(args[1])); + }); + + box->newFunc("pump_set_subic_reg", {"subid", "regadd", "val"}, [this](int argn, const char **args) { // + IflytopCanbusMaster::ins()->pump_set_subic_reg(getDeviceId(), atoi(args[0]), atoi(args[1]), atoi(args[2])); + }); + + box->newFunc("pump_get_subic_reg", {"subid", "regadd"}, [this](int argn, const char **args) { // + int val = IflytopCanbusMaster::ins()->pump_get_subic_reg(getDeviceId(), atoi(args[0]), atoi(args[1])); + ZQUI::ins()->ishow("val:%d", val); + }); + } } }