diff --git a/app_protocols/transmit_disfection_protocol b/app_protocols/transmit_disfection_protocol index 0cbbc25..2793d57 160000 --- a/app_protocols/transmit_disfection_protocol +++ b/app_protocols/transmit_disfection_protocol @@ -1 +1 @@ -Subproject commit 0cbbc25f3b6402ae5e5122ca6e3d2337b985f182 +Subproject commit 2793d57d7d94a044240958a8084b345369c1ef7a diff --git a/usrc/app_main.cpp b/usrc/app_main.cpp index 3306ef8..0cb17b0 100644 --- a/usrc/app_main.cpp +++ b/usrc/app_main.cpp @@ -106,6 +106,11 @@ void umain() { ZLOGI(TAG, "======================= init processer ================ "); ProtocolProcesserMgr::ins()->initialize(); ProtocolProcesserMgr::ins()->regProcesser(PublicCmdProcesser::ins()); + + if (PublicBoard::ins()->getBoardTypeId() == kBoardType_LiquidCtrl) { + ProtocolProcesserMgr::ins()->regProcesser(LiquidCtrlBoardCmdProcesser::ins()); + } + ProtocolProcesserMgr::ins()->startSchedule(); ZLOGI(TAG, "="); diff --git a/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.cpp b/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.cpp index b52423b..62c1f92 100644 --- a/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.cpp +++ b/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.cpp @@ -3,9 +3,9 @@ #include "board/liquid_ctrl_board.hpp" using namespace iflytop; -#define TAG "LiquidCtrl" +#define TAG "LiquidCtrl" #define ThisClass LiquidCtrlBoardCmdProcesser -#define DEVICE LiquidCtrlBoard::ins() +#define DEVICE LiquidCtrlBoard::ins() /*********************************************************************************************************************** * 压力主动上报定时器 * @@ -93,14 +93,14 @@ void LiquidCtrlBoardCmdProcesser::initialize() { REG_FN(pump_ping); REG_FN(triple_warning_light_ctl); - REG_FN(pressure_sensor_bus_read_data); + REG_FN(psbus_read_data); + REG_FN(psbus_scan); motorErrorFlagCacheLock.init(); osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, NULL); osTimerStart(MotorMonitorTimerId, 1000); } -bool LiquidCtrlBoardCmdProcesser::isSupportThisCmd(ProcessContext* cxt) { return false; } /*********************************************************************************************************************** * PUMP * @@ -225,7 +225,7 @@ void LiquidCtrlBoardCmdProcesser::device_bottom_water_sensor_read_state(ProcessC /*********************************************************************************************************************** * PRESSURE * ***********************************************************************************************************************/ -void LiquidCtrlBoardCmdProcesser::pressure_sensor_bus_read_data(ProcessContext* cxt) { +void LiquidCtrlBoardCmdProcesser::psbus_read_data(ProcessContext* cxt) { CHECK_PARAM_LEN(PRAAM_LEN(), 1); int32_t index = GET_PARAM(0); @@ -241,6 +241,17 @@ void LiquidCtrlBoardCmdProcesser::pressure_sensor_bus_read_data(ProcessContext* zcanbus_send_errorack(cxt->packet, kerr_subdevice_offline); } } +void LiquidCtrlBoardCmdProcesser::psbus_scan(ProcessContext* cxt) { + auto* sensors = DEVICE->pressureSensorBus()->sensors; + int numSensor = DEVICE->pressureSensorBus()->sensorNum; + + ack_psbus_scan_t result = {0}; + result.numOnlineId = numSensor; + for (int i = 0; i < numSensor; i++) { + result.onlineId[i] = sensors[i].id; + } + zcanbus_send_ack(cxt->packet, (uint8_t*)&result, sizeof(result)); +} /*********************************************************************************************************************** * WARNING LIGHT * diff --git a/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.hpp b/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.hpp index 61ffdb4..0516d88 100644 --- a/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.hpp +++ b/usrc/protocol_processer_impl/liquid_ctrl_board_cmd_processer.hpp @@ -19,10 +19,6 @@ class LiquidCtrlBoardCmdProcesser : public IProtocolProcesser { virtual void initialize() override; virtual const char* getName() override { return "LiquidCtrlBoardCmdProcesser"; }; - virtual bool isSupportThisCmd(ProcessContext* cxt) override; - - virtual void process(ProcessContext* cxt) override; - private: void evaporation_tank_water_sensor_read_state(ProcessContext* cxt); void device_bottom_water_sensor_read_state(ProcessContext* cxt); @@ -37,8 +33,10 @@ class LiquidCtrlBoardCmdProcesser : public IProtocolProcesser { void pump_get_subic_reg(ProcessContext* cxt); void pump_ping(ProcessContext* cxt); + void triple_warning_light_ctl(ProcessContext* cxt); - void pressure_sensor_bus_read_data(ProcessContext* cxt); + void psbus_read_data(ProcessContext* cxt); + void psbus_scan(ProcessContext* cxt); }; -} // namespace iflytop \ No newline at end of file +} // namespace iflytop diff --git a/usrc/protocol_processer_impl/public_cmd_processer.cpp b/usrc/protocol_processer_impl/public_cmd_processer.cpp index 87838a0..5629380 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.cpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.cpp @@ -12,23 +12,6 @@ void PublicCmdProcesser::initialize() { REG_FN(heart_ping); REG_FN(clear_reset_flag); } -bool PublicCmdProcesser::isSupportThisCmd(ProcessContext* cxt) { - for (auto& cmd : cmdprocesser) { - if (cmd.cmd == cxt->packet->function_id) { - return true; - } - } - return false; -} - -void PublicCmdProcesser::process(ProcessContext* cxt) { - for (auto& cmd : cmdprocesser) { - if (cmd.cmd == cxt->packet->function_id) { - cmd.fn(cxt); - return; - } - } -} void PublicCmdProcesser::read_board_info(ProcessContext* cxt) { static ack_read_board_info_data_t ack; diff --git a/usrc/protocol_processer_impl/public_cmd_processer.hpp b/usrc/protocol_processer_impl/public_cmd_processer.hpp index 1b1ddfe..8fa7b11 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.hpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.hpp @@ -9,7 +9,6 @@ using namespace transmit_disfection_protocol; class PublicCmdProcesser : public IProtocolProcesser { - list cmdprocesser; uint8_t boardResetFlag; // 0: 重启标志 public: @@ -20,9 +19,6 @@ class PublicCmdProcesser : public IProtocolProcesser { virtual void initialize() override; virtual const char* getName() override { return "PublicCmdProcesser"; }; - virtual bool isSupportThisCmd(ProcessContext* cxt) override; - - virtual void process(ProcessContext* cxt) override; private: void read_board_info(ProcessContext* cxt); diff --git a/usrc/protocol_processer_mgr/i_protocol_processer.hpp b/usrc/protocol_processer_mgr/i_protocol_processer.hpp index 0d74bbf..ff60260 100644 --- a/usrc/protocol_processer_mgr/i_protocol_processer.hpp +++ b/usrc/protocol_processer_mgr/i_protocol_processer.hpp @@ -46,22 +46,41 @@ class ProcessContext { zcanbus_packet_t* packet; size_t packetlen; }; - -class IProtocolProcesser { - public: - virtual void initialize() = 0; - virtual bool isSupportThisCmd(ProcessContext* cxt) = 0; - virtual void process(ProcessContext* cxt) = 0; - virtual const char* getName() = 0; - - virtual ~IProtocolProcesser() {} -}; - class CmdProcesser { public: int cmd; cmdprocessfn_t fn; CmdProcesser(int cmd, cmdprocessfn_t fn) : cmd(cmd), fn(fn) {} }; +class IProtocolProcesser { + public: + list cmdprocesser; + + public: + virtual void initialize() = 0; + virtual const char* getName() = 0; + + public: + virtual void process(ProcessContext* cxt) { + for (auto& cmd : cmdprocesser) { + if (cmd.cmd == cxt->packet->function_id) { + cmd.fn(cxt); + return; + } + } + } + virtual bool isSupportThisCmd(ProcessContext* cxt) { + for (auto& cmd : cmdprocesser) { + if (cmd.cmd == cxt->packet->function_id) { + return true; + } + } + return false; + } + + virtual ~IProtocolProcesser() {} +}; + + } // namespace iflytop \ No newline at end of file diff --git a/zsdk b/zsdk index ad5cb40..21ce93c 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit ad5cb407bff7a885afbef6104cb992a680f8e828 +Subproject commit 21ce93cb5aaa9686b147274b08e9d8007cef6334