diff --git a/app_protocols/transmit_disfection_protocol b/app_protocols/transmit_disfection_protocol index 8b73b00..9b15ef0 160000 --- a/app_protocols/transmit_disfection_protocol +++ b/app_protocols/transmit_disfection_protocol @@ -1 +1 @@ -Subproject commit 8b73b00eacba449c5d71f7d9f0dab9abc54c6aaa +Subproject commit 9b15ef0cb011476bff3659117a9e7907155a9f1b diff --git a/usrc/app/dmapp.hpp b/usrc/app/dmapp.hpp new file mode 100644 index 0000000..1c4b1f6 --- /dev/null +++ b/usrc/app/dmapp.hpp @@ -0,0 +1,150 @@ +#pragma once +#include "board/public_board.hpp" +#include "board_base/board_base.hpp" + +/** + * @brief + * 大空间消毒机-功率控制板 + */ + +namespace iflytop { +using namespace transmit_disfection_protocol; + +#define TAG "LargeSpaceDmPowerCtrlBoard" +class DisinfectionApp { + public: + HeaterController heaterCtrler; + BlowerController blowerCtrler; + AirCompressorController airComCtrler; + H2O2SensorDriver h2o2Sensor; + + ZGPIO evaporationBinWS; // 蒸发仓水浸 + ZGPIO deviceBottomWS; // 设备底部水浸 + WarningLightDriver wlDriver; // 报警灯 + TmcMotorGroup tmcPowerGroup; // TMC电机 + PXXPSBus psBus; // PXX压力传感器总线 + + public: + static DisinfectionApp* ins() { + static DisinfectionApp instance; + return &instance; + } + + virtual const char* getName() { return "DisinfectionApp"; } + + void initialize() { + initializeDevice(); + regProtocol(); + } + + void initializeDevice() { + int btid = PublicBoard::ins()->getBoardTypeId(); + // + + if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) { + heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8); + } + + if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) { + blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1); + } + + if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) { + airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0); + } + + if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) { + h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10); + } + + if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { + evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + } + + if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { + // TMC电机初始化 + LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT(); + tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/}); + } + + if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { + // 三色指示灯初始化 + wlDriver.initialize(PD8, PD7, PD9, PD10); + } + + if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { + // 压力传感器初始化 + osDelay(1500); // 等待传感器上电 + LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1); + psBus.initialize(&huart3); + } + } + + void regProtocol() { + if (heaterCtrler.isInitialized()) { + BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl); + BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl_safe_valve); + BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_electric_current); + BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_temperature_data); + } + + if (blowerCtrler.isInitialized()) { + BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl); + BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl_safe_valve); + BIND_FN(BlowerController, &blowerCtrler, fn_blower_read_electric_current); + } + + if (airComCtrler.isInitialized()) { + BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl); + BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl_safe_valve); + BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_read_electric_current); + } + + if (h2o2Sensor.isInitialized()) { + BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_calibration_date); + BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode); + BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg); + } + if (wlDriver.isInitialized()) { + BIND_FN(WarningLightDriver, wlDriver, fn_triple_warning_light_ctl); + } + + if (tmcPowerGroup.isInitialized()) { + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_rotate); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_stop); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ihold_irun_idelay); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_acc); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ramp); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_tzw); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_subic_reg); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_get_subic_reg); + BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_ping); + } + + if (psBus.isInitialized()) { + BIND_FN(PXXPSBus, psBus, fn_psbus_read_data); + BIND_FN(PXXPSBus, psBus, fn_psbus_scan); + } + + if (evaporationBinWS.isInited()) { + ProtocolProcesserMgr::ins()->regCmdProcesser( // + CmdProcesser(kfn_evaporation_tank_water_sensor_read_state, // + [this](ProcessContext* cxt) { + int32_t val = evaporationBinWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + })); + } + + if (deviceBottomWS.isInited()) { + ProtocolProcesserMgr::ins()->regCmdProcesser( // + CmdProcesser(kfn_device_bottom_water_sensor_read_state, // + [this](ProcessContext* cxt) { + int32_t val = deviceBottomWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + })); + } + } +}; +#undef TAG +} // namespace iflytop \ No newline at end of file diff --git a/usrc/app_main.cpp b/usrc/app_main.cpp index 254246a..d64f720 100644 --- a/usrc/app_main.cpp +++ b/usrc/app_main.cpp @@ -2,19 +2,12 @@ #include // +#include "app/dmapp.hpp" #include "base/appdep.hpp" // -#include "board/large_space_dm_liquid_ctrl_board.hpp" -#include "board/large_space_dm_power_ctrl_board.hpp" -#include "board/pipe_dm_liquid_ctrl_board.hpp" -#include "board/pipe_dm_power_ctrl_board.hpp" #include "board/public_board.hpp" // #include "base/protocol_processer_mgr.hpp" -#include "protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp" -#include "protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp" -#include "protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp" -#include "protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp" #include "protocol_processer_impl/public_cmd_processer.hpp" // #include "zsdk/zcanreceiver/zcanreceiver.hpp" @@ -97,35 +90,21 @@ void umain() { ZLOGI(TAG, "="); ProtocolProcesserMgr::ins()->initialize(); - REG_PROCESSER(PublicCmdProcesser::ins()); + PublicCmdProcesser::ins()->initialize(); switch (PublicBoard::ins()->getBoardTypeId()) { case kLargeSpaceDMLiquidCtrlBoard: - case kSmallSpaceDMLiquidCtrlBoard: - LargeSpaceDmLiquidCtrlBoard::ins()->initialize(); - REG_PROCESSER(LargeSpaceDmLiquidCtrlBoardPP::ins()); - break; case kLargeSpaceDMPowerCtrlBoard: + case kSmallSpaceDMLiquidCtrlBoard: case kSmallSpaceDMPowerCtrlBoard: - LargeSpaceDmPowerCtrlBoard::ins()->initialize(); - REG_PROCESSER(LargeSpaceDmPowerCtrlBoardPP::ins()); - break; case kPipeDMLiquidCtrlBoard: - PipeDMLiquidCtrlBoard::ins()->initialize(); - REG_PROCESSER(PipeDMLiquidCtrlBoardPP::ins()); - break; case kPipeDMPowerCtrlBoard: - PipeDMPowerCtrlBoard::ins()->initialize(); - REG_PROCESSER(PipeDMPowerCtrlBoardPP::ins()); - break; case kDrawBarDMLiquidCtrlBoard: - break; case kDrawBarDMPowerCtrlBoard: + DisinfectionApp::ins()->initialize(); break; case kDrawBarDMExtBallValveCtrl: - break; case kH2O2SensorBoard: - break; default: gInitErrorFlag = true; break; diff --git a/usrc/base/appdep.hpp b/usrc/base/appdep.hpp index 83013cd..c862a8a 100644 --- a/usrc/base/appdep.hpp +++ b/usrc/base/appdep.hpp @@ -16,7 +16,7 @@ #include "config_service.hpp" #include "device_info.hpp" #include "gflag/gflag.h" -#include "i_protocol_processer.hpp" +#include "protocol_processer_mgr.hpp" #include "idtable/IdMgr.hpp" #include "transmit_disfection_protocol/transmit_disfection_protocol.hpp" // diff --git a/usrc/base/protocol_processer_mgr.cpp b/usrc/base/protocol_processer_mgr.cpp index c5390cc..818c5d3 100644 --- a/usrc/base/protocol_processer_mgr.cpp +++ b/usrc/base/protocol_processer_mgr.cpp @@ -26,15 +26,7 @@ static void zcanbus_on_connected(bool connected) { } void ProtocolProcesserMgr::initialize() {} -void ProtocolProcesserMgr::regProcesser(IProtocolProcesser* processer) { - m_processers.push_back(processer); - - ZLOGI(TAG, "register processer %s", processer->getName()); -} void ProtocolProcesserMgr::startSchedule(int deviceId) { - for (auto processer : m_processers) { - processer->initialize(); - } zcanbus_init(deviceId); zcanbus_reglistener(zcanbus_on_rx); @@ -57,10 +49,9 @@ void ProtocolProcesserMgr::onPacket(uint8_t from, uint8_t to, uint8_t* rawpacket ZLOGI(TAG, "process packet from %d to %d, function_id %d, len %d", from, to, packet->function_id, len); - for (auto processer : m_processers) { - if (processer->isSupportThisCmd(&cxt)) { - ZLOGI(TAG, "%s process this packet", processer->getName()); - processer->process(&cxt); + for (auto& processer : cmdprocesser) { + if (processer.cmd == cxt.packet->function_id) { + processer.fn(&cxt); processed = true; break; } diff --git a/usrc/base/protocol_processer_mgr.hpp b/usrc/base/protocol_processer_mgr.hpp index d94cbe4..8faf495 100644 --- a/usrc/base/protocol_processer_mgr.hpp +++ b/usrc/base/protocol_processer_mgr.hpp @@ -1,11 +1,13 @@ #pragma once -#include "i_protocol_processer.hpp" +#include "protocol_processer_utils.hpp" +#define REG_FN(fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ThisClass::fn, this, placeholders::_1))) +#define BIND_FN(ClassName, obj, fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ClassName::fn, obj, placeholders::_1))); namespace iflytop { using namespace std; class ProtocolProcesserMgr { - list m_processers; + list cmdprocesser; public: static ProtocolProcesserMgr* ins() { @@ -14,8 +16,8 @@ class ProtocolProcesserMgr { } void initialize(); - void regProcesser(IProtocolProcesser* processer); void startSchedule(int deviceId); + void regCmdProcesser(CmdProcesser processer) { cmdprocesser.push_back(processer); } public: void onPacket(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len); diff --git a/usrc/base/i_protocol_processer.hpp b/usrc/base/protocol_processer_utils.hpp similarity index 72% rename from usrc/base/i_protocol_processer.hpp rename to usrc/base/protocol_processer_utils.hpp index ed21619..46a0dcf 100644 --- a/usrc/base/i_protocol_processer.hpp +++ b/usrc/base/protocol_processer_utils.hpp @@ -15,9 +15,6 @@ using namespace std; using namespace zscanprotocol; using namespace transmit_disfection_protocol; -#define REG_FN(fn) cmdprocesser.push_back(CmdProcesser(k##fn, bind(&ThisClass::fn, this, placeholders::_1))) -#define BIND_FN(ClassName, obj, fn) cmdprocesser.push_back(CmdProcesser(k##fn, bind(&ClassName::fn, obj, placeholders::_1))); - #define GET_PARAM(off) ((((int32_t*)(cxt->packet->params))[off])) #define PRAAM_LEN() ((cxt->packetlen - sizeof(zcanbus_packet_t)) / 4) @@ -31,12 +28,10 @@ using namespace transmit_disfection_protocol; * ClassDeclear * ***********************************************************************************************************************/ class ProcessContext; - /*********************************************************************************************************************** * TYPEDEF * ***********************************************************************************************************************/ typedef function cmdprocessfn_t; - /*********************************************************************************************************************** * CLASS * ***********************************************************************************************************************/ @@ -53,33 +48,5 @@ class CmdProcesser { 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/usrc/board/draw_bar_dm_board.hpp.xx b/usrc/board/draw_bar_dm_board.hpp.xx new file mode 100644 index 0000000..2c3a9b6 --- /dev/null +++ b/usrc/board/draw_bar_dm_board.hpp.xx @@ -0,0 +1,62 @@ +#pragma once +#include "board_base/board_base.hpp" + +/** + * @brief + * 手持拉杆箱-功率控制板 + * 1.鼓风机改成PWM驱动 + * 2.去掉空压机,空压机 + * + * 两块板写在一起 + * + * + * + */ + +namespace iflytop { +using namespace transmit_disfection_protocol; + +#define TAG "DrawBarDMBoard" +class DrawBarDMBoard { + public: + HeaterController heaterCtrler; + BlowerController blowerCtrler; + AirCompressorController airComCtrler; + H2O2SensorDriver h2o2Sensor; + ZGPIO evaporationBinWS; // 蒸发仓水浸 + ZGPIO deviceBottomWS; // 设备底部水浸 + WarningLightDriver wlDriver; // 报警灯 + TmcMotorGroup tmcPowerGroup; // TMC电机 + PXXPSBus psBus; // PXX压力传感器总线 + + public: + static DrawBarDMBoard* ins() { + static DrawBarDMBoard instance; + return &instance; + } + void initialize() { + LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); + LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2); + + heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8); + blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1); + airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0); + h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10); + + AppPeriodTaskMgr::ins()->regTask("AirComAdc", DrawBarDMBoard::onTimeCb, this, 1000); + } + static void onTimeCb(void* handler) { ((DrawBarDMBoard*)handler)->onTimeCb(); } + void onTimeCb() { + heaterCtrler.periodTask(); + blowerCtrler.periodTask(); + airComCtrler.periodTask(); + + ZLOGI(TAG, "b:%d(%d), a:%d(%d), h:%d(%d) ht:%d(%d)", // + blowerCtrler.blower_read_electric_current(), blowerCtrler.blower_read_iadc(), // + airComCtrler.air_compressor_read_electric_current(), airComCtrler.air_compressor_read_iadc(), // + heaterCtrler.heater_read_electric_current(), heaterCtrler.heater_read_iadc(), // + heaterCtrler.heater_read_temperature_data(), heaterCtrler.heater_read_tadc()); + } +}; +#undef TAG +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/large_space_dm_liquid_ctrl_board.hpp b/usrc/board/large_space_dm_liquid_ctrl_board.hpp.xx similarity index 100% rename from usrc/board/large_space_dm_liquid_ctrl_board.hpp rename to usrc/board/large_space_dm_liquid_ctrl_board.hpp.xx diff --git a/usrc/board/large_space_dm_power_ctrl_board.hpp b/usrc/board/large_space_dm_power_ctrl_board.hpp.xx similarity index 97% rename from usrc/board/large_space_dm_power_ctrl_board.hpp rename to usrc/board/large_space_dm_power_ctrl_board.hpp.xx index 012286f..71d688d 100644 --- a/usrc/board/large_space_dm_power_ctrl_board.hpp +++ b/usrc/board/large_space_dm_power_ctrl_board.hpp.xx @@ -7,7 +7,6 @@ */ namespace iflytop { -#define H2O2_SENSOR_TYPE_HMP110 using namespace transmit_disfection_protocol; #define TAG "LargeSpaceDmPowerCtrlBoard" diff --git a/usrc/board/pipe_dm_liquid_ctrl_board.hpp b/usrc/board/pipe_dm_liquid_ctrl_board.hpp.xx similarity index 100% rename from usrc/board/pipe_dm_liquid_ctrl_board.hpp rename to usrc/board/pipe_dm_liquid_ctrl_board.hpp.xx diff --git a/usrc/board/pipe_dm_power_ctrl_board.hpp b/usrc/board/pipe_dm_power_ctrl_board.hpp.xx similarity index 95% rename from usrc/board/pipe_dm_power_ctrl_board.hpp rename to usrc/board/pipe_dm_power_ctrl_board.hpp.xx index 1f19477..4fe9c0f 100644 --- a/usrc/board/pipe_dm_power_ctrl_board.hpp +++ b/usrc/board/pipe_dm_power_ctrl_board.hpp.xx @@ -9,7 +9,6 @@ * */ namespace iflytop { -#define H2O2_SENSOR_TYPE_HMP110 using namespace transmit_disfection_protocol; class PipeDMPowerCtrlBoard { diff --git a/usrc/board/public_board.cpp b/usrc/board/public_board.cpp index cfbc1ad..a5771d1 100644 --- a/usrc/board/public_board.cpp +++ b/usrc/board/public_board.cpp @@ -125,3 +125,34 @@ int PublicBoard::getBoardTypeId() { } } int PublicBoard::getBoardId() { return IdMgr::ins().getBoardId(getBoardTypeId()); } + +namespace iflytop { +bool isBoardType(int32_t val0) { + int boardType = PublicBoard::ins()->getBoardTypeId(); + if (boardType == val0) { + return true; + } + return false; +} +bool isBoardType(int32_t val0, int32_t val1) { + int boardType = PublicBoard::ins()->getBoardTypeId(); + if (boardType == val0 || boardType == val1) { + return true; + } + return false; +} +bool isBoardType(int32_t val0, int32_t val1, int32_t val2) { + int boardType = PublicBoard::ins()->getBoardTypeId(); + if (boardType == val0 || boardType == val1 || boardType == val2) { + return true; + } + return false; +} +bool isBoardType(int32_t val0, int32_t val1, int32_t val2, int32_t val3) { + int boardType = PublicBoard::ins()->getBoardTypeId(); + if (boardType == val0 || boardType == val1 || boardType == val2 || boardType == val3) { + return true; + } + return false; +} +} // namespace iflytop diff --git a/usrc/board/public_board.hpp b/usrc/board/public_board.hpp index 050becd..83a0933 100644 --- a/usrc/board/public_board.hpp +++ b/usrc/board/public_board.hpp @@ -22,4 +22,10 @@ class PublicBoard { void debugUartInit(void); void canInit(); }; + +bool isBoardType(int32_t val0); +bool isBoardType(int32_t val0, int32_t val1); +bool isBoardType(int32_t val0, int32_t val1, int32_t val2); +bool isBoardType(int32_t val0, int32_t val1, int32_t val2, int32_t val3); + } // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/air_compressor_controller.hpp b/usrc/board_base/app_share/air_compressor_controller.hpp index df2a62b..41268e4 100644 --- a/usrc/board_base/app_share/air_compressor_controller.hpp +++ b/usrc/board_base/app_share/air_compressor_controller.hpp @@ -8,6 +8,7 @@ using namespace transmit_disfection_protocol; class AirCompressorController { ZGPIO m_AirCompressor_ctrlGpio; ZADC m_AirCompressor_iAdc; + bool m_isInitialized = false; public: static AirCompressorController* ins() { @@ -18,7 +19,9 @@ class AirCompressorController { void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich); + m_isInitialized = true; } + bool isInitialized() { return m_isInitialized; } // FN void air_compressor_ctrl(int32_t val) { m_AirCompressor_ctrlGpio.write(val); } diff --git a/usrc/board_base/app_share/blower_controller.hpp b/usrc/board_base/app_share/blower_controller.hpp index 5b156ad..8109290 100644 --- a/usrc/board_base/app_share/blower_controller.hpp +++ b/usrc/board_base/app_share/blower_controller.hpp @@ -19,13 +19,16 @@ class BlowerController { // kHighPowerUartBlower ModbusBlockHost m_modbusblock; + bool m_isInitialized = false; public: void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); m_iadc.initialize("Blower-iadc", iadc, ich); m_blowerType = kIOBlower; + m_isInitialized = true; } + bool isInitialized() { return m_isInitialized; } void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart) { m_modbusblock.initialize(huart); diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.cpp b/usrc/board_base/app_share/h2o2_sensor_driver.cpp index 0ad2b16..3fbb39b 100644 --- a/usrc/board_base/app_share/h2o2_sensor_driver.cpp +++ b/usrc/board_base/app_share/h2o2_sensor_driver.cpp @@ -35,6 +35,8 @@ void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); + m_isInitialized = true; + } /*********************************************************************************************************************** diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.hpp b/usrc/board_base/app_share/h2o2_sensor_driver.hpp index 4354849..9682dd6 100644 --- a/usrc/board_base/app_share/h2o2_sensor_driver.hpp +++ b/usrc/board_base/app_share/h2o2_sensor_driver.hpp @@ -10,9 +10,12 @@ class H2O2SensorDriver { ZADC m_H2O2Adc; // H2O2传感器控制 HMP110 m_HMP110; // H2O2传感器 int32_t m_detectId = -1; + bool m_isInitialized = false; public: void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); + bool isInitialized() { return m_isInitialized; } + bool h2o2_sensor_is_online(); int32_t h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day); int32_t h2o2_sensor_read_sub_ic_errorcode(); diff --git a/usrc/board_base/app_share/heater_controller.hpp b/usrc/board_base/app_share/heater_controller.hpp index bf16fa0..bb545b8 100644 --- a/usrc/board_base/app_share/heater_controller.hpp +++ b/usrc/board_base/app_share/heater_controller.hpp @@ -8,14 +8,18 @@ class HeaterController { ZGPIO m_Heater_ctrlGpio; ZADC m_Heater_electricCurrentAdc; ZADC m_Heater_temperatureAdc; + bool m_isInitialized = false; public: void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich, ADC_HandleTypeDef* tadc, uint32_t tch) { m_Heater_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); m_Heater_electricCurrentAdc.initialize("HeaterCurrentAdc", iadc, ich); m_Heater_temperatureAdc.initialize("temperatureAdc", iadc, tch); + m_isInitialized = true; } + bool isInitialized() { return m_isInitialized; } + void heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); } void heater_ctrl_safe_valve(int32_t val) {} int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_Heater_temperatureAdc.getCacheVal()); } diff --git a/usrc/board_base/app_share/proportional_valve_ctrl.hpp b/usrc/board_base/app_share/proportional_valve_ctrl.hpp index 93ee3f9..6ef14d0 100644 --- a/usrc/board_base/app_share/proportional_valve_ctrl.hpp +++ b/usrc/board_base/app_share/proportional_valve_ctrl.hpp @@ -6,10 +6,15 @@ using namespace transmit_disfection_protocol; class ProportionalValveCtrl { PreportionalValveCtrl valve; + bool m_isInitialized = false; public: - void initialize(UART_HandleTypeDef* huart) { valve.initialize(huart); } + void initialize(UART_HandleTypeDef* huart) { + valve.initialize(huart); + m_isInitialized = true; + } + bool isInitialized() { return m_isInitialized; } void fn_proportional_set_valve(ProcessContext* cxt) { int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1)); diff --git a/usrc/board_base/app_share/pxxpsbus.hpp b/usrc/board_base/app_share/pxxpsbus.hpp index c57accf..4053bf2 100644 --- a/usrc/board_base/app_share/pxxpsbus.hpp +++ b/usrc/board_base/app_share/pxxpsbus.hpp @@ -6,9 +6,14 @@ using namespace transmit_disfection_protocol; class PXXPSBus { PXXPressureSensorBus psbus; + bool m_isInitialized = false; public: - void initialize(UART_HandleTypeDef* huart) { psbus.init(huart); } + void initialize(UART_HandleTypeDef* huart) { + psbus.init(huart); + m_isInitialized = true; + } + bool isInitialized() { return m_isInitialized; } void fn_psbus_read_data(ProcessContext* cxt) { CHECK_PARAM_LEN(PRAAM_LEN(), 1); diff --git a/usrc/board_base/app_share/tmc_motor_group.cpp b/usrc/board_base/app_share/tmc_motor_group.cpp index 9720251..55d06f0 100644 --- a/usrc/board_base/app_share/tmc_motor_group.cpp +++ b/usrc/board_base/app_share/tmc_motor_group.cpp @@ -27,7 +27,7 @@ static void motorErrorFlag_set(int subindex, bool val) { static void onMotorMonitorTimer(void const* argument) { // 电机异常检查 - TmcMotorGroup* DEVICE = (TmcMotorGroup*)argument; + TmcMotorGroup* DEVICE = (TmcMotorGroup*)argument; report_exeception_data_t data; for (size_t i = 0; i < DEVICE->motorNum(); i++) { bool estate = motorErrorFlag_get(i); @@ -101,6 +101,7 @@ void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cf osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, this); osTimerStart(MotorMonitorTimerId, 1000); + m_isInitialized = true; } #define MOTOR_CHECK() \ diff --git a/usrc/board_base/app_share/tmc_motor_group.hpp b/usrc/board_base/app_share/tmc_motor_group.hpp index a236182..a177a83 100644 --- a/usrc/board_base/app_share/tmc_motor_group.hpp +++ b/usrc/board_base/app_share/tmc_motor_group.hpp @@ -8,9 +8,12 @@ class TmcMotorGroup { public: TMC51X0 m_motor[2]; // 蠕动泵控制 ZGPIO m_tmc_power_pin; // + bool m_isInitialized = false; public: - void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); + void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); + bool isInitialized() { return m_isInitialized; } + int motorNum() { return 2; } TMC51X0* motor(int32_t index) { if (index < 0 || index >= motorNum()) { diff --git a/usrc/board_base/app_share/warning_light_driver.hpp b/usrc/board_base/app_share/warning_light_driver.hpp index 1695938..1bb15b0 100644 --- a/usrc/board_base/app_share/warning_light_driver.hpp +++ b/usrc/board_base/app_share/warning_light_driver.hpp @@ -9,6 +9,7 @@ class WarningLightDriver { ZGPIO triLight_G; ZGPIO triLight_B; ZGPIO triLight_BEEP; + bool m_isInitialized = false; public: void initialize(Pin_t r, Pin_t g, Pin_t b, Pin_t beep) { @@ -16,7 +17,11 @@ class WarningLightDriver { triLight_G.initAsOutput(g, kxs_gpio_nopull, false, false); triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); + m_isInitialized = true; + } + bool isInitialized() { return m_isInitialized; } + void setRGBW(int32_t r, int32_t g, int32_t b, int32_t beep) { if (r > 0) triLight_R.write(1); diff --git a/usrc/board_base/app_share/water_sensor_mgr.hpp b/usrc/board_base/app_share/water_sensor_mgr.hpp new file mode 100644 index 0000000..7aaabd6 --- /dev/null +++ b/usrc/board_base/app_share/water_sensor_mgr.hpp @@ -0,0 +1,29 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class WaterSensorMgr { + ZGPIO evaporationBinWS; // 蒸发仓水浸 + ZGPIO deviceBottomWS; // 设备底部水浸 + bool m_isInitialized = false; + + public: + void initialize(Pin_t evaporationBinWSPin, Pin_t deviceBottomWSPin) { + evaporationBinWS.initAsInput(evaporationBinWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + deviceBottomWS.initAsInput(deviceBottomWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + m_isInitialized = true; + } + bool isInitialized() { return m_isInitialized; } + + void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) { + int32_t val = evaporationBinWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) { + int32_t val = deviceBottomWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp.xx similarity index 100% rename from usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp rename to usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp.xx diff --git a/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp.xx similarity index 100% rename from usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp rename to usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp.xx diff --git a/usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp.xx similarity index 100% rename from usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp rename to usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp.xx diff --git a/usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp.xx similarity index 100% rename from usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp rename to usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp.xx diff --git a/usrc/protocol_processer_impl/public_cmd_processer.hpp b/usrc/protocol_processer_impl/public_cmd_processer.hpp index 4058b16..29c9d7e 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.hpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.hpp @@ -7,9 +7,8 @@ using namespace std; using namespace zscanprotocol; using namespace transmit_disfection_protocol; - -class PublicCmdProcesser : public IProtocolProcesser { - uint8_t boardResetFlag; // 0: 重启标志 +class PublicCmdProcesser { + uint8_t boardResetFlag; // 0: 重启标志 public: static PublicCmdProcesser* ins() { @@ -17,8 +16,8 @@ class PublicCmdProcesser : public IProtocolProcesser { return &ins; } - virtual void initialize() override; - virtual const char* getName() override { return "PublicCmdProcesser"; }; + virtual void initialize(); + virtual const char* getName() { return "PublicCmdProcesser"; }; private: void fn_read_board_info(ProcessContext* cxt); diff --git a/zsdk b/zsdk index 45dd762..56b0595 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit 45dd7621fe18ad66544d4b74c7cad454d6e3bb05 +Subproject commit 56b0595562d44d5ed960fcada360556ab816ce76