diff --git a/app_protocols/transmit_disfection_protocol b/app_protocols/transmit_disfection_protocol index cc6b013..6bfe740 160000 --- a/app_protocols/transmit_disfection_protocol +++ b/app_protocols/transmit_disfection_protocol @@ -1 +1 @@ -Subproject commit cc6b0133119f5d7a8538a7e644234e3bb0e7ce57 +Subproject commit 6bfe740cbf0caae387badd4e7702337d4583f46b diff --git a/usrc/app/dmapp.cpp b/usrc/app/dmapp.cpp index f7ef64d..7ddf4b4 100644 --- a/usrc/app/dmapp.cpp +++ b/usrc/app/dmapp.cpp @@ -42,34 +42,28 @@ void DisinfectionApp::initialize() { if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8); - bindHeaterCtrler(); } else if (isBoardType(kDrawBarDMPowerCtrlBoard)) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); heaterCtrler.initialize(PC7, NULL, 0, &hadc1, ADC_CHANNEL_1); - bindHeaterCtrler(); } // 风机 if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard)) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1); - bindBlowerCtrler(); } else if (isBoardType(kPipeDMPowerCtrlBoard)) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1); blowerCtrler.initializeAsHighPowerUartBlower(&huart2, &hadc1, ADC_CHANNEL_1); - bindBlowerCtrler(); } else if (isBoardType(kDrawBarDMPowerCtrlBoard)) { DBDMPowerCtrlBoard::HTIM3_INIT(); blowerCtrler.initializeAsMiniPwmBlower(&htim3, TIM_CHANNEL_3, PC6 /*en*/, PC9 /*fb*/); - bindBlowerCtrler(); } // 空压机 if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0); - bindAirComCtrler(); } else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) { airComCtrler.initialize(PD14, NULL, 0); } @@ -78,8 +72,7 @@ void DisinfectionApp::initialize() { // kfn_air_tightness_test_ac_ctrl if (isBoardType(kPipeDMPowerCtrlBoard)) { REG_LAMADA_FN(kfn_air_tightness_test_ac_ctrl, [&](ProcessContext* cxt) { - airComCtrler.air_compressor_ctrl(GET_PARAM(0)); - airComCtrler.air_compressor_ctrl_safe_valve(GET_PARAM(0)); + airComCtrler.open(GET_PARAM(0)); zcanbus_send_ack(cxt->packet, NULL, 0); }); } else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) { @@ -96,7 +89,6 @@ void DisinfectionApp::initialize() { LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2); LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_3); - bindH2o2Sensor(); } // 水浸传感器 @@ -104,8 +96,9 @@ void DisinfectionApp::initialize() { ZLOGI(TAG, "WaterSensor init"); evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); - bindDeviceBottomWS(); - bindEvaporationBinWS(); + + REG_LAMADA_FN(kfn_device_bottom_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, deviceBottomWS.read()); }); + REG_LAMADA_FN(kfn_evaporation_tank_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, evaporationBinWS.read()); }); } if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { @@ -113,7 +106,6 @@ void DisinfectionApp::initialize() { ZLOGI(TAG, "TMCMotorGroup init"); LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT(); tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/}); - bindTmcPowerGroup(); } // 三色指示灯 @@ -121,7 +113,6 @@ void DisinfectionApp::initialize() { // 三色指示灯初始化 ZLOGI(TAG, "WarningLightDriver init"); wlDriver.initialize(PD8, PD7, PD9, PD10); - bindWlDriver(); } // 压力传感器初始化 @@ -130,14 +121,12 @@ void DisinfectionApp::initialize() { osDelay(1500); // 等待传感器上电 LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1); psBus.initialize(&huart3); - bindPsBus(); } // 比例阀初始化 if (isBoardType(kPipeDMLiquidCtrlBoard)) { ZLOGI(TAG, "ProportionalValveCtrl init"); LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600); proportionalValveCtrl.initialize(&huart2); - bindProportionalValveCtrl(); } // 气密性测试通道 @@ -163,70 +152,5 @@ void DisinfectionApp::initialize() { /*********************************************************************************************************************** * PROTOCOL_BIND * ***********************************************************************************************************************/ -void DisinfectionApp::bindHeaterCtrler() { - 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); -} - -void DisinfectionApp::bindBlowerCtrler() { - 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); - BIND_FN(BlowerController, &blowerCtrler, fn_blower_is_error); -} -void DisinfectionApp::bindAirComCtrler() { - 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); -} - -void DisinfectionApp::bindH2o2Sensor() { - 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); -} -void DisinfectionApp::bindWlDriver() { BIND_FN(WarningLightDriver, &wlDriver, fn_triple_warning_light_ctl); } - -void DisinfectionApp::bindTmcPowerGroup() { - 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); -} -void DisinfectionApp::bindPsBus() { - BIND_FN(PXXPSBus, &psBus, fn_psbus_read_data); - BIND_FN(PXXPSBus, &psBus, fn_psbus_scan); -} - -void DisinfectionApp::bindEvaporationBinWS() { - 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)); - })); -} - -void DisinfectionApp::bindDeviceBottomWS() { - 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)); - })); -} - -void DisinfectionApp::bindProportionalValveCtrl() { - BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_set_valve); - BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_read_pos); - BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_is_busy); -} diff --git a/usrc/app/dmapp.hpp b/usrc/app/dmapp.hpp index bc39894..acd9f9b 100644 --- a/usrc/app/dmapp.hpp +++ b/usrc/app/dmapp.hpp @@ -44,17 +44,5 @@ class DisinfectionApp { void initialize(); - - private: - void bindHeaterCtrler(); - void bindBlowerCtrler(); - void bindAirComCtrler(); - void bindH2o2Sensor(); - void bindWlDriver(); - void bindTmcPowerGroup(); - void bindPsBus(); - void bindEvaporationBinWS(); - void bindDeviceBottomWS(); - void bindProportionalValveCtrl(); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/app/exth2o2_sensor.cpp b/usrc/app/exth2o2_sensor.cpp index 3746a39..4bc8e8d 100644 --- a/usrc/app/exth2o2_sensor.cpp +++ b/usrc/app/exth2o2_sensor.cpp @@ -25,10 +25,6 @@ void ExtH2O2Sensor::initialize() { m_alarmLightY.initAsOutput(PD8, kxs_gpio_pullup, true, false); id_from_machine.initAsInput(PE8, kxs_gpio_nopull, kxs_gpio_no_irq, false); - 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); - osThreadDef(H2O2SensorMonitor, c_onH2O2MonitorThread, osPriorityNormal, 0, 1024); H2O2SensorMonitorThreadId = osThreadCreate(osThread(H2O2SensorMonitor), NULL); diff --git a/usrc/base/appthread/app_period_task_mgr.cpp b/usrc/base/appthread/app_period_task_mgr.cpp index a187d12..29d307f 100644 --- a/usrc/base/appthread/app_period_task_mgr.cpp +++ b/usrc/base/appthread/app_period_task_mgr.cpp @@ -26,12 +26,21 @@ void AppPeriodTaskMgr::regTask(const char* name, task_fn_t fn, void* cxt, int pe ZLOGI(TAG, "reg task %s", name); ntask++; } +void AppPeriodTaskMgr::regTask(const char* name, std::function fn, int period) { + task[ntask].exfn = fn; + task[ntask].taskname = name; + task[ntask].period = period; + task[ntask].lastcalltp = HAL_GetTick(); + ZLOGI(TAG, "reg task %s", name); + ntask++; +} void AppPeriodTaskMgr::onThreadCB() { while (true) { for (int i = 0; i < ntask; i++) { if (haspassedms(task[i].lastcalltp) >= task[i].period) { - task[i].fn(task[i].cxt); + if (task[i].fn) task[i].fn(task[i].cxt); + if (task[i].exfn) task[i].exfn(); task[i].lastcalltp = HAL_GetTick(); } } diff --git a/usrc/base/appthread/app_period_task_mgr.hpp b/usrc/base/appthread/app_period_task_mgr.hpp index 21c6fad..42dc5fd 100644 --- a/usrc/base/appthread/app_period_task_mgr.hpp +++ b/usrc/base/appthread/app_period_task_mgr.hpp @@ -13,11 +13,12 @@ namespace iflytop { typedef void (*task_fn_t)(void*); typedef struct { - task_fn_t fn; - const char* taskname; - void* cxt; - int period; - int32_t lastcalltp; + task_fn_t fn; + std::function exfn; + const char* taskname; + void* cxt; + int period; + int32_t lastcalltp; } task_t; class AppPeriodTaskMgr { @@ -33,6 +34,7 @@ class AppPeriodTaskMgr { void initialize(); void regTask(const char* name, task_fn_t fn, void* cxt, int period); + void regTask(const char* name, std::function fn, int period); void onThreadCB(); void startScheduler(); diff --git a/usrc/base/gflag/gflag.c b/usrc/base/gflag/gflag.c index 983b805..40b2b2c 100644 --- a/usrc/base/gflag/gflag.c +++ b/usrc/base/gflag/gflag.c @@ -5,8 +5,9 @@ #include "cmsis_os.h" -bool gInitErrorFlag = false; -uint32_t gBoardFlag = 0; +bool gInitErrorFlag = false; +uint32_t gBoardFlag = 0; +bool gEnableReportFlag = true; void gBoardFlagSetResetFlag() { vPortEnterCritical(); diff --git a/usrc/base/gflag/gflag.h b/usrc/base/gflag/gflag.h index b687f40..17d020c 100644 --- a/usrc/base/gflag/gflag.h +++ b/usrc/base/gflag/gflag.h @@ -16,6 +16,7 @@ extern bool gInitErrorFlag; * 0: board reset flag (1:reset) */ extern uint32_t gBoardFlag; +extern bool gEnableReportFlag; void gBoardFlagSetResetFlag(); void gBoardFlagClearResetFlag(); diff --git a/usrc/board_base/app_share/air_compressor_controller.hpp b/usrc/board_base/app_share/air_compressor_controller.hpp index 36d1ddd..1c16e17 100644 --- a/usrc/board_base/app_share/air_compressor_controller.hpp +++ b/usrc/board_base/app_share/air_compressor_controller.hpp @@ -6,8 +6,8 @@ using namespace zscanprotocol; using namespace transmit_disfection_protocol; class AirCompressorController { - ZGPIO m_AirCompressor_ctrlGpio; - ZADC m_AirCompressor_iAdc; + ZGPIO m_ctrlGpio; + ZADC m_iAdc; bool m_isInitialized = false; public: @@ -17,35 +17,35 @@ class AirCompressorController { } void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { - if (m_isInitialized) return; - m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich); + ZASSERT(!m_isInitialized); + m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_iAdc.initialize("AirComAdc", iadc, ich); m_isInitialized = true; + + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + // BIND + BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl); + BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl_safe_valve); + BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei); + BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei_adc_raw); } bool isInitialized() { return m_isInitialized; } - // FN - void air_compressor_ctrl(int32_t val) { m_AirCompressor_ctrlGpio.write(val); } - void air_compressor_ctrl_safe_valve(int32_t val) {} - int32_t air_compressor_read_electric_current() { return airCompressorAdcToCurrent(m_AirCompressor_iAdc.getCacheVal()); } - - int32_t air_compressor_read_iadc() { return m_AirCompressor_iAdc.getCacheVal(); } + public: + void open(bool val) { m_ctrlGpio.write(val); } + private: // PP void fn_air_compressor_ctrl(ProcessContext* cxt) { // - air_compressor_ctrl(GET_PARAM(0)); + m_ctrlGpio.write(GET_PARAM(0)); zcanbus_send_ack(cxt->packet, NULL, 0); } - void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { // - air_compressor_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_air_compressor_read_electric_current(ProcessContext* cxt) { // - auto val = air_compressor_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } + void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, NULL, 0); } + void fn_air_compressor_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airCompressorAdcToCurrent(m_iAdc.getCacheVal())); } + void fn_air_compressor_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iAdc.getCacheVal()); } - void periodTask() { m_AirCompressor_iAdc.updateAdcValToCache(); } + private: + void periodTask() { m_iAdc.updateAdcValToCache(); } }; } // namespace iflytop diff --git a/usrc/board_base/app_share/blower_controller.hpp b/usrc/board_base/app_share/blower_controller.hpp index 11474c9..1589de8 100644 --- a/usrc/board_base/app_share/blower_controller.hpp +++ b/usrc/board_base/app_share/blower_controller.hpp @@ -34,22 +34,39 @@ class BlowerController { 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); + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); m_blowerType = kIOBlower; m_isInitialized = true; + bindFn(); } - bool isInitialized() { return m_isInitialized; } void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) { m_modbusblock.initialize(huart); m_iadc.initialize("Blower-iadc", iadc, ich); - m_blowerType = kHighPowerUartBlower; + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + m_blowerType = kHighPowerUartBlower; + m_isInitialized = true; + bindFn(); } void initializeAsMiniPwmBlower(TIM_HandleTypeDef* htim, uint32_t channel, Pin_t enGpio, Pin_t fbGpio) { m_miniPwmBlower_htim = htim; m_miniPwmBlower_channle = channel; m_miniPwmBlower_enGpio.initAsOutput(enGpio, kxs_gpio_nopull, true, false); m_miniPwmBlower_fbGpio.initAsInput(fbGpio, kxs_gpio_nopull, kxs_gpio_rising_irq, false); - m_blowerType = kMiniPwmBlower; + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + m_blowerType = kMiniPwmBlower; + m_isInitialized = true; + bindFn(); + } + + bool isInitialized() { return m_isInitialized; } + + void bindFn() { + BIND_FN(BlowerController, this, fn_blower_ctrl); + BIND_FN(BlowerController, this, fn_blower_ctrl_safe_valve); + BIND_FN(BlowerController, this, fn_blower_read_ei); + BIND_FN(BlowerController, this, fn_blower_is_error); + BIND_FN(BlowerController, this, fn_blower_read_ei_adc_raw); } /*********************************************************************************************************************** @@ -69,7 +86,7 @@ class BlowerController { } } void blower_ctrl_safe_valve(int32_t val) {} - int32_t blower_read_electric_current() { + int32_t blower_read_ei() { if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { return blowserAdcToCurrent(m_iadc.getCacheVal()); } @@ -102,15 +119,9 @@ class BlowerController { blower_ctrl_safe_valve(GET_PARAM(0)); zcanbus_send_ack(cxt->packet, NULL, 0); } - void fn_blower_read_electric_current(ProcessContext* cxt) { // - auto val = blower_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } - - void fn_blower_is_error(ProcessContext* cxt) { // - auto val = blower_is_error(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } + void fn_blower_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_read_ei()); } + void fn_blower_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iadc.getCacheVal()); } + void fn_blower_is_error(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_is_error()); } private: void mini_pwm_blower_ctrl(int32_t duty) { diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.cpp b/usrc/board_base/app_share/h2o2_sensor_driver.cpp index 3fbb39b..64697a9 100644 --- a/usrc/board_base/app_share/h2o2_sensor_driver.cpp +++ b/usrc/board_base/app_share/h2o2_sensor_driver.cpp @@ -1,4 +1,5 @@ #include "h2o2_sensor_driver.hpp" + #include "zsdk/zcanreceiver/zcanreceiver.hpp" using namespace iflytop; @@ -35,8 +36,11 @@ void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); - m_isInitialized = true; + m_isInitialized = true; + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_calibration_date); + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_errorcode); + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_reg); } /*********************************************************************************************************************** @@ -99,6 +103,6 @@ void H2O2SensorDriver::onH2O2CaptureThread() { static report_h2o2_data_t data; memset(&data, 0, sizeof(data)); h2o2_sensor_data(&data); - zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); + if (gEnableReportFlag) zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); } } \ No newline at end of file diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.hpp b/usrc/board_base/app_share/h2o2_sensor_driver.hpp index 9682dd6..d64ddaf 100644 --- a/usrc/board_base/app_share/h2o2_sensor_driver.hpp +++ b/usrc/board_base/app_share/h2o2_sensor_driver.hpp @@ -9,11 +9,11 @@ class H2O2SensorDriver { ModbusBlockHost m_ModbusBlockHost; // ZADC m_H2O2Adc; // H2O2传感器控制 HMP110 m_HMP110; // H2O2传感器 - int32_t m_detectId = -1; - bool m_isInitialized = false; + int32_t m_detectId = -1; + bool m_isInitialized = false; public: - void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); + void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); bool isInitialized() { return m_isInitialized; } bool h2o2_sensor_is_online(); @@ -22,6 +22,7 @@ class H2O2SensorDriver { int32_t h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len); int32_t h2o2_sensor_data(report_h2o2_data_t* sensorData); + private: // PP void fn_h2o2_sensor_read_calibration_date(ProcessContext* cxt) { int32_t data[3]; diff --git a/usrc/board_base/app_share/heater_controller.hpp b/usrc/board_base/app_share/heater_controller.hpp index bb545b8..321f461 100644 --- a/usrc/board_base/app_share/heater_controller.hpp +++ b/usrc/board_base/app_share/heater_controller.hpp @@ -5,27 +5,35 @@ namespace iflytop { using namespace transmit_disfection_protocol; class HeaterController { - ZGPIO m_Heater_ctrlGpio; - ZADC m_Heater_electricCurrentAdc; - ZADC m_Heater_temperatureAdc; + ZGPIO m_ctrlGpio; + ZADC m_iAdc; + ZADC m_tempAdc; 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_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_iAdc.initialize("heater-idac", iadc, ich); + m_tempAdc.initialize("heater-tadc", iadc, tch); m_isInitialized = true; + AppPeriodTaskMgr::ins()->regTask("Heater-ADC", [this]() { periodTask(); }, 1000); + + BIND_FN(HeaterController, this, fn_heater_ctrl); + BIND_FN(HeaterController, this, fn_heater_ctrl_safe_valve); + BIND_FN(HeaterController, this, fn_heater_read_ei); + BIND_FN(HeaterController, this, fn_heater_read_temperature_data); + BIND_FN(HeaterController, this, fn_heater_read_ei_adc_raw); + BIND_FN(HeaterController, this, fn_heater_read_temperature_data_adc_raw); } bool isInitialized() { return m_isInitialized; } - void heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); } + void heater_ctrl(int32_t val) { m_ctrlGpio.write(val); } void heater_ctrl_safe_valve(int32_t val) {} - int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_Heater_temperatureAdc.getCacheVal()); } - int32_t heater_read_electric_current() { return hearterAdcToCurrent(m_Heater_electricCurrentAdc.getCacheVal()); } - int32_t heater_read_iadc() { return m_Heater_electricCurrentAdc.getCacheVal(); } - int32_t heater_read_tadc() { return m_Heater_temperatureAdc.getCacheVal(); } + int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_tempAdc.getCacheVal()); } + int32_t heater_read_ei() { return hearterAdcToCurrent(m_iAdc.getCacheVal()); } + int32_t heater_read_iadc() { return m_iAdc.getCacheVal(); } + int32_t heater_read_tadc() { return m_tempAdc.getCacheVal(); } // PP void fn_heater_ctrl(ProcessContext* cxt) { // @@ -36,19 +44,29 @@ class HeaterController { heater_ctrl_safe_valve(GET_PARAM(0)); zcanbus_send_ack(cxt->packet, NULL, 0); } - void fn_heater_read_electric_current(ProcessContext* cxt) { // - auto val = heater_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); + void fn_heater_read_ei(ProcessContext* cxt) { // + auto val = heater_read_ei(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); } void fn_heater_read_temperature_data(ProcessContext* cxt) { // auto val = heater_read_temperature_data(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); } - public: + void fn_heater_read_ei_adc_raw(ProcessContext* cxt) { // + auto val = m_iAdc.getCacheVal(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + + void fn_heater_read_temperature_data_adc_raw(ProcessContext* cxt) { // + auto val = m_tempAdc.getCacheVal(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + + private: void periodTask() { - m_Heater_electricCurrentAdc.updateAdcValToCache(); - m_Heater_temperatureAdc.updateAdcValToCache(); + m_iAdc.updateAdcValToCache(); + m_tempAdc.updateAdcValToCache(); } }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/proportional_valve_ctrl.hpp b/usrc/board_base/app_share/proportional_valve_ctrl.hpp index 6ef14d0..dd12080 100644 --- a/usrc/board_base/app_share/proportional_valve_ctrl.hpp +++ b/usrc/board_base/app_share/proportional_valve_ctrl.hpp @@ -12,10 +12,15 @@ class ProportionalValveCtrl { void initialize(UART_HandleTypeDef* huart) { valve.initialize(huart); m_isInitialized = true; + + BIND_FN(ProportionalValveCtrl, this, fn_proportional_set_valve); + BIND_FN(ProportionalValveCtrl, this, fn_proportional_read_pos); + BIND_FN(ProportionalValveCtrl, this, fn_proportional_is_busy); } bool isInitialized() { return m_isInitialized; } + private: void fn_proportional_set_valve(ProcessContext* cxt) { int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1)); if (err) { diff --git a/usrc/board_base/app_share/pxxpsbus.hpp b/usrc/board_base/app_share/pxxpsbus.hpp index 4053bf2..ecafa78 100644 --- a/usrc/board_base/app_share/pxxpsbus.hpp +++ b/usrc/board_base/app_share/pxxpsbus.hpp @@ -12,9 +12,12 @@ class PXXPSBus { void initialize(UART_HandleTypeDef* huart) { psbus.init(huart); m_isInitialized = true; + BIND_FN(PXXPSBus, this, fn_psbus_read_data); + BIND_FN(PXXPSBus, this, fn_psbus_scan); } bool isInitialized() { return m_isInitialized; } + private: void fn_psbus_read_data(ProcessContext* cxt) { CHECK_PARAM_LEN(PRAAM_LEN(), 1); int32_t index = GET_PARAM(0); diff --git a/usrc/board_base/app_share/tmc_motor_group.cpp b/usrc/board_base/app_share/tmc_motor_group.cpp index 1ace799..2eb1557 100644 --- a/usrc/board_base/app_share/tmc_motor_group.cpp +++ b/usrc/board_base/app_share/tmc_motor_group.cpp @@ -110,6 +110,16 @@ void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cf ZLOGI(TAG, "MotorMonitorTimerId: %p", this); osTimerStart(MotorMonitorTimerId, 1000); m_isInitialized = true; + + BIND_FN(TmcMotorGroup, this, fn_pump_rotate); + BIND_FN(TmcMotorGroup, this, fn_pump_stop); + BIND_FN(TmcMotorGroup, this, fn_pump_set_ihold_irun_idelay); + BIND_FN(TmcMotorGroup, this, fn_pump_set_acc); + BIND_FN(TmcMotorGroup, this, fn_pump_set_ramp); + BIND_FN(TmcMotorGroup, this, fn_pump_set_tzw); + BIND_FN(TmcMotorGroup, this, fn_pump_set_subic_reg); + BIND_FN(TmcMotorGroup, this, fn_pump_get_subic_reg); + BIND_FN(TmcMotorGroup, this, fn_pump_ping); } #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 a177a83..582b45c 100644 --- a/usrc/board_base/app_share/tmc_motor_group.hpp +++ b/usrc/board_base/app_share/tmc_motor_group.hpp @@ -22,6 +22,7 @@ class TmcMotorGroup { return &m_motor[index]; } + private: void fn_pump_rotate(ProcessContext* cxt); void fn_pump_stop(ProcessContext* cxt); void fn_pump_set_ihold_irun_idelay(ProcessContext* cxt); diff --git a/usrc/board_base/app_share/warning_light_driver.hpp b/usrc/board_base/app_share/warning_light_driver.hpp index 1bb15b0..b0d456e 100644 --- a/usrc/board_base/app_share/warning_light_driver.hpp +++ b/usrc/board_base/app_share/warning_light_driver.hpp @@ -18,7 +18,7 @@ class WarningLightDriver { triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); m_isInitialized = true; - + BIND_FN(WarningLightDriver, this, fn_triple_warning_light_ctl); } bool isInitialized() { return m_isInitialized; } @@ -44,6 +44,7 @@ class WarningLightDriver { triLight_BEEP.write(0); } + private: void fn_triple_warning_light_ctl(ProcessContext* cxt) { CHECK_PARAM_LEN(PRAAM_LEN(), 4); diff --git a/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp b/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp index 4b0f477..95297bd 100644 --- a/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp +++ b/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp @@ -1,4 +1,3 @@ -#pragma once #include "dbdm_power_ctrl_board.hpp" using namespace iflytop; void DBDMPowerCtrlBoard::HTIM3_INIT() { diff --git a/usrc/protocol_processer_impl/public_cmd_processer.cpp b/usrc/protocol_processer_impl/public_cmd_processer.cpp index 17eb5b7..ca35519 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.cpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.cpp @@ -11,6 +11,7 @@ void PublicCmdProcesser::initialize() { REG_FN(fn_read_taskinfo); REG_FN(fn_heart_ping); REG_FN(fn_clear_reset_flag); + REG_FN(fn_enable_report); } void PublicCmdProcesser::fn_read_board_info(ProcessContext* cxt) { @@ -25,11 +26,11 @@ void PublicCmdProcesser::fn_read_board_info(ProcessContext* cxt) { } void PublicCmdProcesser::fn_read_sysinfo(ProcessContext* cxt) { static ack_sysinfo_t ack; - ack.free_heap_size = SysMgr::ins()->osGetMinimumEverFreeHeapSize(); - ack.total_heap_size = SysMgr::ins()->osGetTotalHeapSize(); - ack.free_heap_size = SysMgr::ins()->osGetFreeSysHeapSize(); - ack.taskNum = SysMgr::ins()->getTaskNum(); - ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000; + ack.free_heap_size = SysMgr::ins()->osGetMinimumEverFreeHeapSize(); + ack.total_heap_size = SysMgr::ins()->osGetTotalHeapSize(); + ack.free_sys_heap_size = SysMgr::ins()->osGetFreeSysHeapSize(); + ack.taskNum = SysMgr::ins()->getTaskNum(); + ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000; zcanbus_send_ack(cxt->packet, (uint8_t*)&ack, sizeof(ack)); } void PublicCmdProcesser::fn_read_taskinfo(ProcessContext* cxt) { @@ -53,4 +54,9 @@ void PublicCmdProcesser::fn_heart_ping(ProcessContext* cxt) { void PublicCmdProcesser::fn_clear_reset_flag(ProcessContext* cxt) { gBoardFlagClearResetFlag(); zcanbus_send_ack(cxt->packet, NULL, 0); -} \ No newline at end of file +} + +void PublicCmdProcesser::fn_enable_report(ProcessContext* cxt) { + gEnableReportFlag = GET_PARAM(0); + zcanbus_send_ack(cxt->packet, NULL, 0); +} diff --git a/usrc/protocol_processer_impl/public_cmd_processer.hpp b/usrc/protocol_processer_impl/public_cmd_processer.hpp index 29c9d7e..e3e5cf6 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.hpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.hpp @@ -25,6 +25,7 @@ class PublicCmdProcesser { void fn_read_taskinfo(ProcessContext* cxt); void fn_heart_ping(ProcessContext* cxt); void fn_clear_reset_flag(ProcessContext* cxt); + void fn_enable_report(ProcessContext* cxt); }; } // namespace iflytop \ No newline at end of file diff --git a/zsdk b/zsdk index 333f0d4..4b1b1b8 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit 333f0d4eb7cd32934156ba989d63b2cc079ed098 +Subproject commit 4b1b1b80df20a5eca96c43f787ac3ee23708065b