From 4ba6fefe144959e51cee3416af3127792068f88d Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 18 May 2024 17:27:29 +0800 Subject: [PATCH] update --- src/api/cmds/device_state_cmd_impl.cpp | 3 + src/api/cmds/selftest_cmd_impl.cpp | 45 +++++++++++- src/api/cmds/selftest_cmd_impl.hpp | 24 ++++--- src/service/device_io_control_service.cpp | 18 +++-- src/service/device_io_control_service.hpp | 1 + src/service/device_io_control_service_test.cpp | 79 +++++++++++++++++++--- src/service/device_io_control_service_test.hpp | 9 +++ .../disfection_ctl/disinfection_service.cpp | 4 ++ .../disfection_ctl/disinfection_state_machine.cpp | 2 - src/service/if_devoce_io_contrl_service.hpp | 6 +- 10 files changed, 161 insertions(+), 30 deletions(-) diff --git a/src/api/cmds/device_state_cmd_impl.cpp b/src/api/cmds/device_state_cmd_impl.cpp index df838da..cff23fe 100644 --- a/src/api/cmds/device_state_cmd_impl.cpp +++ b/src/api/cmds/device_state_cmd_impl.cpp @@ -31,6 +31,9 @@ json DeviceStateCmdImpl::createSensorDataJson() { #elif (defined PROJECT_TYPE_DRAW_BAR_BOX) #else #endif + report["h2o2_sensor_state_1"] = m_deviceIoControlService->H2O2Sensor_readSensorState(0); + report["h2o2_sensor_state_2"] = m_deviceIoControlService->H2O2Sensor_readSensorState(1); + report["h2o2_sensor_state_3"] = m_deviceIoControlService->H2O2Sensor_readSensorState(2); report["h2o2_1"] = m_deviceIoControlService->H2O2Sensor_readH2O2PPM(0); report["temp_1"] = m_deviceIoControlService->H2O2Sensor_readTemperature(0); diff --git a/src/api/cmds/selftest_cmd_impl.cpp b/src/api/cmds/selftest_cmd_impl.cpp index b22c370..b3c5a4a 100644 --- a/src/api/cmds/selftest_cmd_impl.cpp +++ b/src/api/cmds/selftest_cmd_impl.cpp @@ -1,4 +1,47 @@ #include "selftest_cmd_impl.hpp" +#include "service/device_io_control_service_test.hpp" using namespace iflytop; -void SelfTestCmdImpl::initialize() {} +void SelfTestCmdImpl::initialize() { + GET_TO_SERVICE(m_msgProcesser); + GET_TO_SERVICE(m_zconfig); + GET_TO_SERVICE(m_iflytopwsService); + GET_TO_SERVICE(m_dbService); + GET_TO_SERVICE(m_deviceStateService); + GET_TO_SERVICE(m_disinfectionCtrlService); + GET_TO_SERVICE(m_deviceIoControlService); + GET_TO_SERVICE(m_disinfectionLogsManager); + GET_TO_SERVICE(m_zcanhost); + GET_TO_SERVICE(m_dataExportService); + GET_TO_SERVICE(m_frontMsgProcesser); + + m_msgProcesser->registerMsgProcesser("selftest_setH2O2Val", bind(&SelfTestCmdImpl::selfTest_setH2O2Val, shared_from_this(), placeholders::_1, placeholders::_2)); +} + +void SelfTestCmdImpl::selfTest_setH2O2Val(json& cmd, json& receipt) { // + DeviceIoControlServiceTest* p = dynamic_cast(m_deviceIoControlService.get()); + if (p == nullptr) { + receipt["ackcode"] = err::zecode(err::kfail); + receipt["ackcodeInfo"] = "dynamic_cast failed"; + return; + } + + bool random = cmd["params"]["random"]; + int sensorNum = cmd["params"]["sensors"].size(); + + p->SelfTest_H2O2Sensor_setInRandom(random); + for (int i = 0; i < sensorNum; i++) { + int sensorid = cmd["params"]["sensors"][i]["sensorid"]; + int h2o2 = cmd["params"]["sensors"][i]["h2o2"]; + int humid = cmd["params"]["sensors"][i]["humid"]; + int temp = cmd["params"]["sensors"][i]["temp"]; + int sat = cmd["params"]["sensors"][i]["sat"]; + int state = cmd["params"]["sensors"][i]["state"]; + + p->SelfTest_H2O2Sensor_setH2O2PPM(sensorid, h2o2); + p->SelfTest_H2O2Sensor_setHumid(sensorid, humid); + p->SelfTest_H2O2Sensor_setTemperature(sensorid, temp); + p->SelfTest_H2O2Sensor_setSaturation(sensorid, sat); + p->SelfTest_H2O2Sensor_setSensorState(sensorid, state); + } +} diff --git a/src/api/cmds/selftest_cmd_impl.hpp b/src/api/cmds/selftest_cmd_impl.hpp index 8b54e95..ede1405 100644 --- a/src/api/cmds/selftest_cmd_impl.hpp +++ b/src/api/cmds/selftest_cmd_impl.hpp @@ -33,22 +33,24 @@ using namespace core; class SelfTestCmdImpl : public enable_shared_from_this { ENABLE_LOGGER(SelfTestCmdImpl); - shared_ptr m_msgProcesser; - shared_ptr m_zconfig; - shared_ptr m_iflytopwsService; - shared_ptr m_dbService; - shared_ptr m_deviceStateService; - shared_ptr m_disinfectionCtrlService; - shared_ptr m_deviceIoControlService; - shared_ptr m_disinfectionLogsManager; - shared_ptr m_zcanhost; - shared_ptr m_dataExportService; - shared_ptr m_frontMsgProcesser; + shared_ptr m_msgProcesser; + shared_ptr m_zconfig; + shared_ptr m_iflytopwsService; + shared_ptr m_dbService; + shared_ptr m_deviceStateService; + shared_ptr m_disinfectionCtrlService; + shared_ptr m_deviceIoControlService; + shared_ptr m_disinfectionLogsManager; + shared_ptr m_zcanhost; + shared_ptr m_dataExportService; + shared_ptr m_frontMsgProcesser; public: SelfTestCmdImpl(){}; void initialize(); + void selfTest_setH2O2Val(json& cmd, json& receipt); + private: }; } // namespace iflytop \ No newline at end of file diff --git a/src/service/device_io_control_service.cpp b/src/service/device_io_control_service.cpp index 9cdaeda..407c9b8 100644 --- a/src/service/device_io_control_service.cpp +++ b/src/service/device_io_control_service.cpp @@ -203,10 +203,18 @@ void DeviceIoControlService::processReportPacket(uint8_t* packet, size_t len) { /******************************************************************************* * H2O2 * *******************************************************************************/ +bool DeviceIoControlService::H2O2Sensor_readSensorState(int32_t sensorid) { + std::lock_guard lck(m_h2o2_sensor_data_lock_); + if (sensorid >= MAX_H2O2_SENSOR_NUM) return false; + + h2o2_sensor_data_t* data = &m_h2o2_sensor_data[sensorid]; + if (zsys_haspassedms(data->updatetime) > 10 * 1000) return false; + return true; +} int32_t DeviceIoControlService::H2O2Sensor_readH2O2PPM(int32_t sensorid) { std::lock_guard lck(m_h2o2_sensor_data_lock_); - if (sensorid > MAX_H2O2_SENSOR_NUM) return -1; + if (sensorid >= MAX_H2O2_SENSOR_NUM) return -1; h2o2_sensor_data_t* data = &m_h2o2_sensor_data[sensorid]; if (data->updatetime == 0) return -1; @@ -217,7 +225,7 @@ int32_t DeviceIoControlService::H2O2Sensor_readH2O2PPM(int32_t sensorid) { } int32_t DeviceIoControlService::H2O2Sensor_readHumid(int32_t sensorid) { std::lock_guard lck(m_h2o2_sensor_data_lock_); - if (sensorid > MAX_H2O2_SENSOR_NUM) return -1; + if (sensorid >= MAX_H2O2_SENSOR_NUM) return -1; h2o2_sensor_data_t* data = &m_h2o2_sensor_data[sensorid]; if (data->updatetime == 0) return -1; @@ -228,7 +236,7 @@ int32_t DeviceIoControlService::H2O2Sensor_readHumid(int32_t sensorid) { } int32_t DeviceIoControlService::H2O2Sensor_readTemperature(int32_t sensorid) { std::lock_guard lck(m_h2o2_sensor_data_lock_); - if (sensorid > MAX_H2O2_SENSOR_NUM) return -1; + if (sensorid >= MAX_H2O2_SENSOR_NUM) return -1; h2o2_sensor_data_t* data = &m_h2o2_sensor_data[sensorid]; if (data->updatetime == 0) return -1; @@ -239,7 +247,7 @@ int32_t DeviceIoControlService::H2O2Sensor_readTemperature(int32_t sensorid) { } int32_t DeviceIoControlService::H2O2Sensor_readSaturation(int32_t sensorid) { std::lock_guard lck(m_h2o2_sensor_data_lock_); - if (sensorid > MAX_H2O2_SENSOR_NUM) return -1; + if (sensorid >= MAX_H2O2_SENSOR_NUM) return -1; h2o2_sensor_data_t* data = &m_h2o2_sensor_data[sensorid]; if (data->updatetime == 0) return -1; @@ -251,7 +259,7 @@ int32_t DeviceIoControlService::H2O2Sensor_readSaturation(int32_t sensorid) { void DeviceIoControlService::H2O2Sensor_updateSensorData(int32_t sensorid, report_h2o2_data_t* data) { std::lock_guard lck(m_h2o2_sensor_data_lock_); - if (sensorid > MAX_H2O2_SENSOR_NUM) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) { logger->warn("H2O2Sensor_updateSensorData fail,sensorid:{} is invalid", sensorid); return; } diff --git a/src/service/device_io_control_service.hpp b/src/service/device_io_control_service.hpp index 3f25a0d..a4d11e8 100644 --- a/src/service/device_io_control_service.hpp +++ b/src/service/device_io_control_service.hpp @@ -111,6 +111,7 @@ class DeviceIoControlService : public IF_DeviceIoContrlService { virtual int32_t H2O2Sensor_readHumid(int32_t sensorid) override; virtual int32_t H2O2Sensor_readTemperature(int32_t sensorid) override; virtual int32_t H2O2Sensor_readSaturation(int32_t sensorid) override; + virtual bool H2O2Sensor_readSensorState(int32_t sensorid) override; private: void H2O2Sensor_updateSensorData(int32_t sensorid, report_h2o2_data_t* data); diff --git a/src/service/device_io_control_service_test.cpp b/src/service/device_io_control_service_test.cpp index 2a086c3..9e8b47c 100644 --- a/src/service/device_io_control_service_test.cpp +++ b/src/service/device_io_control_service_test.cpp @@ -13,15 +13,76 @@ void DeviceIoControlServiceTest::printerPrintf(string str) { // GET_SERVICE(UartPrinter)->print(ZIconv::utf8_to_gb2312(str)); } -int32_t DeviceIoControlServiceTest::H2O2Sensor_readH2O2PPM(int32_t sensorid) { return rand() % 1000; } -int32_t DeviceIoControlServiceTest::H2O2Sensor_readHumid(int32_t sensorid) { return rand() % 100; } -int32_t DeviceIoControlServiceTest::H2O2Sensor_readTemperature(int32_t sensorid) { return rand() % 40; } -int32_t DeviceIoControlServiceTest::H2O2Sensor_readSaturation(int32_t sensorid) { return rand() % 100; } - -// int32_t DeviceIoControlServiceTest::H2O2Sensor_readH2O2PPM(int32_t sensorid) { return 1; } -// int32_t DeviceIoControlServiceTest::H2O2Sensor_readHumid(int32_t sensorid) { return 2; } -// int32_t DeviceIoControlServiceTest::H2O2Sensor_readTemperature(int32_t sensorid) { return 3; } -// int32_t DeviceIoControlServiceTest::H2O2Sensor_readSaturation(int32_t sensorid) { return 4; } +bool selftest_val_random = true; +int32_t sleftest_h2o2[10]; +int32_t sleftest_humid[10]; +int32_t sleftest_temp[10]; +int32_t sleftest_saturation[10]; +bool sleftest_sensorstate[10]; + +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setInRandom(bool random) { selftest_val_random = random; } + +int32_t DeviceIoControlServiceTest::H2O2Sensor_readH2O2PPM(int32_t sensorid) { + if (!selftest_val_random) { + return sleftest_h2o2[sensorid]; + } + + return 300 + rand() % 1000; +} +int32_t DeviceIoControlServiceTest::H2O2Sensor_readHumid(int32_t sensorid) { + if (!selftest_val_random) { + return sleftest_humid[sensorid]; + } + return rand() % 100; +} +int32_t DeviceIoControlServiceTest::H2O2Sensor_readTemperature(int32_t sensorid) { + if (!selftest_val_random) { + return sleftest_temp[sensorid]; + } + return rand() % 40; +} +int32_t DeviceIoControlServiceTest::H2O2Sensor_readSaturation(int32_t sensorid) { + if (!selftest_val_random) { + return sleftest_saturation[sensorid]; + } + return rand() % 100; +} +bool DeviceIoControlServiceTest::H2O2Sensor_readSensorState(int32_t sensorid) { + if (!selftest_val_random) { + return sleftest_sensorstate[sensorid]; + } + + if (sensorid >= MAX_H2O2_SENSOR_NUM) { + return false; + } + return true; +} + +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setH2O2PPM(int32_t sensorid, int32_t val) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) return; + sleftest_h2o2[sensorid] = val; + return; +} +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setHumid(int32_t sensorid, int32_t val) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) return; + sleftest_humid[sensorid] = val; + return; +} +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setTemperature(int32_t sensorid, int32_t val) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) return; + sleftest_temp[sensorid] = val; + return; +} +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setSaturation(int32_t sensorid, int32_t val) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) return; + sleftest_saturation[sensorid] = val; + return; +} +void DeviceIoControlServiceTest::SelfTest_H2O2Sensor_setSensorState(int32_t sensorid, int32_t val) { + if (sensorid >= MAX_H2O2_SENSOR_NUM) return; + sleftest_sensorstate[sensorid] = val; + return; +} /******************************************************************************* * 加热片控制 * diff --git a/src/service/device_io_control_service_test.hpp b/src/service/device_io_control_service_test.hpp index bd1abb5..f094a83 100644 --- a/src/service/device_io_control_service_test.hpp +++ b/src/service/device_io_control_service_test.hpp @@ -51,6 +51,15 @@ class DeviceIoControlServiceTest : public IF_DeviceIoContrlService { virtual int32_t H2O2Sensor_readHumid(int32_t sensorid) override; virtual int32_t H2O2Sensor_readTemperature(int32_t sensorid) override; virtual int32_t H2O2Sensor_readSaturation(int32_t sensorid) override; + virtual bool H2O2Sensor_readSensorState(int32_t sensorid) override; + + void SelfTest_H2O2Sensor_setInRandom(bool random); + void SelfTest_H2O2Sensor_setH2O2PPM(int32_t sensorid, int32_t val); + void SelfTest_H2O2Sensor_setHumid(int32_t sensorid, int32_t val); + void SelfTest_H2O2Sensor_setTemperature(int32_t sensorid, int32_t val); + void SelfTest_H2O2Sensor_setSaturation(int32_t sensorid, int32_t val); + void SelfTest_H2O2Sensor_setSensorState(int32_t sensorid, int32_t val); + #if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION) /******************************************************************************* diff --git a/src/service/disfection_ctl/disinfection_service.cpp b/src/service/disfection_ctl/disinfection_service.cpp index b1cd97a..89e1074 100644 --- a/src/service/disfection_ctl/disinfection_service.cpp +++ b/src/service/disfection_ctl/disinfection_service.cpp @@ -850,6 +850,10 @@ void DisinfectionService::processStateDegradation(disinfection_event_t* event) { sm.changeState(kstate_finished); } } + + else if (event->event == kdisinfection_event_stop) { + sm.changeState(kstate_finished); + } } void DisinfectionService::processStateDehumidification_before_disinfection(disinfection_event_t* event) {} void DisinfectionService::processStateDehumidification_after_disinfection(disinfection_event_t* event) {} diff --git a/src/service/disfection_ctl/disinfection_state_machine.cpp b/src/service/disfection_ctl/disinfection_state_machine.cpp index 9be5396..75bce74 100644 --- a/src/service/disfection_ctl/disinfection_state_machine.cpp +++ b/src/service/disfection_ctl/disinfection_state_machine.cpp @@ -41,10 +41,8 @@ void DisinfectionStateMachine::startProcess() { { lock_guard lock(lock_); if (!m_event_list.empty()) { - logger->info("event list size: {}", m_event_list.size()); event = m_event_list.front(); m_event_list.pop_front(); - logger->info("event list size: {}", m_event_list.size()); popevent = true; } } diff --git a/src/service/if_devoce_io_contrl_service.hpp b/src/service/if_devoce_io_contrl_service.hpp index 91098e5..d7c4364 100644 --- a/src/service/if_devoce_io_contrl_service.hpp +++ b/src/service/if_devoce_io_contrl_service.hpp @@ -65,6 +65,8 @@ class IF_DeviceIoContrlService { virtual int32_t H2O2Sensor_readTemperature(int32_t sensorid) = 0; virtual int32_t H2O2Sensor_readSaturation(int32_t sensorid) = 0; + virtual bool H2O2Sensor_readSensorState(int32_t sensorid) = 0; + #if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION) /******************************************************************************* @@ -186,8 +188,8 @@ class IF_DeviceIoContrlService { virtual int32_t DBDB__heaterReadElectricCurrent() = 0; virtual int32_t DBDB__heaterReadTemperatureData() = 0; - virtual int32_t DBDB__miniPwmBlowerCtrl(int index) = 0; - virtual int32_t DBDB__miniPwmBlowerReadFbcount() = 0; + virtual int32_t DBDB__miniPwmBlowerCtrl(int index) = 0; + virtual int32_t DBDB__miniPwmBlowerReadFbcount() = 0; typedef enum { kExtValveChannel_disinfectionChannel = 0, // 消毒通道