Browse Source

update

master
zhaohe 1 year ago
parent
commit
4ba6fefe14
  1. 3
      src/api/cmds/device_state_cmd_impl.cpp
  2. 45
      src/api/cmds/selftest_cmd_impl.cpp
  3. 24
      src/api/cmds/selftest_cmd_impl.hpp
  4. 18
      src/service/device_io_control_service.cpp
  5. 1
      src/service/device_io_control_service.hpp
  6. 79
      src/service/device_io_control_service_test.cpp
  7. 9
      src/service/device_io_control_service_test.hpp
  8. 4
      src/service/disfection_ctl/disinfection_service.cpp
  9. 2
      src/service/disfection_ctl/disinfection_state_machine.cpp
  10. 6
      src/service/if_devoce_io_contrl_service.hpp

3
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);

45
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<DeviceIoControlServiceTest*>(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);
}
}

24
src/api/cmds/selftest_cmd_impl.hpp

@ -33,22 +33,24 @@ using namespace core;
class SelfTestCmdImpl : public enable_shared_from_this<SelfTestCmdImpl> {
ENABLE_LOGGER(SelfTestCmdImpl);
shared_ptr<FrontMsgProcesser> m_msgProcesser;
shared_ptr<GConfig> m_zconfig;
shared_ptr<IflytopFrontEndService> m_iflytopwsService;
shared_ptr<DBService> m_dbService;
shared_ptr<DeviceStateService> m_deviceStateService;
shared_ptr<DisinfectionCtrlService> m_disinfectionCtrlService;
shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService;
shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
shared_ptr<ZCanHost> m_zcanhost;
shared_ptr<DataExportService> m_dataExportService;
shared_ptr<FrontMsgProcesser> m_frontMsgProcesser;
shared_ptr<FrontMsgProcesser> m_msgProcesser;
shared_ptr<GConfig> m_zconfig;
shared_ptr<IflytopFrontEndService> m_iflytopwsService;
shared_ptr<DBService> m_dbService;
shared_ptr<DeviceStateService> m_deviceStateService;
shared_ptr<DisinfectionCtrlService> m_disinfectionCtrlService;
shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService;
shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
shared_ptr<ZCanHost> m_zcanhost;
shared_ptr<DataExportService> m_dataExportService;
shared_ptr<FrontMsgProcesser> m_frontMsgProcesser;
public:
SelfTestCmdImpl(){};
void initialize();
void selfTest_setH2O2Val(json& cmd, json& receipt);
private:
};
} // namespace iflytop

18
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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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;
}

1
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);

79
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;
}
/*******************************************************************************
* *

9
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)
/*******************************************************************************

4
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) {}

2
src/service/disfection_ctl/disinfection_state_machine.cpp

@ -41,10 +41,8 @@ void DisinfectionStateMachine::startProcess() {
{
lock_guard<recursive_mutex> 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;
}
}

6
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, // 消毒通道

Loading…
Cancel
Save