diff --git a/src/main_control_service.cpp b/src/main_control_service.cpp index 60bea53..4115082 100644 --- a/src/main_control_service.cpp +++ b/src/main_control_service.cpp @@ -4,6 +4,7 @@ #include "iflytop/components/zcanreceiver/zcanreceiverhost.hpp" #include "iflytop/core/components/stringutils.hpp" #include "iflytop/core/core.hpp" +#include "service/device_io_control_service_test.hpp" #include "version.hpp" using namespace iflytop; using namespace core; @@ -61,7 +62,11 @@ void MainControlService::initialize() { GET_SERVICE(DisinfectionLogsManager)->initialize(); GET_TO_SERVICE(m_disinfectionLogsManager); +#if 0 BUILD_AND_REG_SERRVICE(DeviceIoControlService); +#else + REG_SERRVICE(DeviceIoControlService, new DeviceIoControlServiceTest()); +#endif GET_SERVICE(DeviceIoControlService)->initialize(); GET_TO_SERVICE(m_deviceIoControlService); diff --git a/src/service/device_io_control_service.cpp b/src/service/device_io_control_service.cpp index 0401d8a..8b0c2a8 100644 --- a/src/service/device_io_control_service.cpp +++ b/src/service/device_io_control_service.cpp @@ -260,8 +260,7 @@ int DeviceIoControlService::getWaterImmersionSensor2() { } DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorData1() { - lock_guard lock(lock_); - + lock_guard lock(lock_); DeviceIoControlService::h2o2sensor_data_t data; // int16_t hydrogen_peroxide_volume; // ppm 0x0100 过氧化氢浓度 // int16_t h2o_h2o2_rs; // %RS * 100 0x0101 过氧化氢相对饱和度 @@ -271,6 +270,7 @@ DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorD data.humid = m_hpp272_data_1.relative_humidity / 100; data.temp = m_hpp272_data_1.temperature1 / 100; data.saturation = m_hpp272_data_1.h2o_h2o2_rs / 100; + return data; } diff --git a/src/service/device_io_control_service.hpp b/src/service/device_io_control_service.hpp index 23917e6..f092670 100644 --- a/src/service/device_io_control_service.hpp +++ b/src/service/device_io_control_service.hpp @@ -61,71 +61,71 @@ class DeviceIoControlService : public enable_shared_from_thisinfo("airCompressor_setState:{}", val); + if (val) { + m_airCompressor_State = true; + } else { + m_airCompressor_State = false; + } +} +int DeviceIoControlServiceTest::airCompressor_getio1() { + if (m_airCompressor_State) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::airCompressor_getio2() { + if (m_airCompressor_State) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::airCompressor_getcurrentValue() { + if (m_airCompressor_State) { + return 2; + } + return 0; +} +int DeviceIoControlServiceTest::airCompressor_getstate() { + if (m_airCompressor_State) { + return 1; + } + return 0; +} + +int DeviceIoControlServiceTest::airBlower_setState(bool val) { + logger->info("airBlower_setState:{}", val); + m_airBlower_State = val; + + return 0; +} +int DeviceIoControlServiceTest::airBlower_getio1() { + if (m_airBlower_State) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::airBlower_getio2() { + if (m_airBlower_State) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::airBlower_getstate() { + if (m_airBlower_State) { + return 1; + } + return 0; +} + +int DeviceIoControlServiceTest::airBlower_getcurrentValue() { + if (m_airBlower_State) { + return 2; + } + return 0; +} +// heatingStrip +void DeviceIoControlServiceTest::heartingPlate_setPower(bool val) { + logger->info("heartingPlate_setPower:{}", val); + + m_heartingPlate_power = val; +} +int DeviceIoControlServiceTest::heatingStrip_getio1() { + if (m_heartingPlate_power) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::heatingStrip_getio2() { + if (m_heartingPlate_power) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::heatingStrip_getstate() { + if (m_heartingPlate_power) { + return 1; + } + return 0; +} +int DeviceIoControlServiceTest::heatingStrip_getcurrentValue() { + if (m_heartingPlate_power) { + return 2; + } + return 0; +} +// +int DeviceIoControlServiceTest::getChargingPump_PumpRPM() { return 0; } + +static bool drainingPump_state; +void DeviceIoControlServiceTest::drainingPump_open() { + logger->info("drainingPump_open"); + drainingPump_state = true; +} +void DeviceIoControlServiceTest::drainingPump_close() { + logger->info("drainingPump_close"); + drainingPump_state = false; +} +static bool replenishingFluidsPump_state; +void DeviceIoControlServiceTest::replenishingFluidsPump_open() { + logger->info("replenishingFluidsPump_open"); + replenishingFluidsPump_state = true; +} +void DeviceIoControlServiceTest::replenishingFluidsPump_close() { + logger->info("replenishingFluidsPump_close"); + replenishingFluidsPump_state = false; +} + +void DeviceIoControlServiceTest::replenishingFluidsPump_open_for_test(int gpm) { + logger->info("replenishingFluidsPump_open_for_test {}", gpm); + replenishingFluidsPump_state = true; +} +void DeviceIoControlServiceTest::replenishingFluidsPump_close_for_test() { + logger->info("replenishingFluidsPump_close_for_test"); + replenishingFluidsPump_state = false; +} +/******************************************************************************* + * sprayLiquidPump * + *******************************************************************************/ +static bool sprayLiquidPump_state; +void DeviceIoControlServiceTest::sprayLiquidPump_open(int gpm) { + logger->info("sprayLiquidPump_open"); + sprayLiquidPump_state = true; +} +void DeviceIoControlServiceTest::sprayLiquidPump_close() { + logger->info("sprayLiquidPump_close"); + sprayLiquidPump_state = false; +} + +void DeviceIoControlServiceTest::sprayLiquidPump_open_for_test(int gpm) { + logger->info("sprayLiquidPump_open_for_test {}", gpm); + sprayLiquidPump_state = true; +} +void DeviceIoControlServiceTest::sprayLiquidPump_close_for_test() { + logger->info("sprayLiquidPump_close"); + sprayLiquidPump_state = false; +} + +int DeviceIoControlServiceTest::sprayLiquidPump_getRPM() { return 300; } +int DeviceIoControlServiceTest::sprayLiquidPump_getGPM() { return 30; } + +int DeviceIoControlServiceTest::sprayLiquidPump_getState() { // + return (sprayLiquidPump_getRPM() != 0); +} +/******************************************************************************* + * SensorState * + *******************************************************************************/ +int DeviceIoControlServiceTest::getDisinfectantVolume_g() { return 1000; } +int DeviceIoControlServiceTest::getPressureSensorData(int index) { return 1000; } + +int DeviceIoControlServiceTest::getWaterImmersionSensor1() { return 0; } +int DeviceIoControlServiceTest::getWaterImmersionSensor2() { return 0; } + +DeviceIoControlService::h2o2sensor_data_t DeviceIoControlServiceTest::getH2O2SenSorData1() { + DeviceIoControlService::h2o2sensor_data_t data; + + static bool isPumpOpen = false; + static int h2o2 = 0; + if (!isPumpOpen && sprayLiquidPump_getState() != 0) { + isPumpOpen = true; + h2o2 = 0; + } + if (isPumpOpen && sprayLiquidPump_getState() == 0) { + isPumpOpen = false; + } + + if (isPumpOpen) { + h2o2 += 10; + } else { + if (h2o2 <= 10) { + h2o2 -= 1; + } else { + h2o2 -= 10; + } + } + + if (h2o2 < 0) { + h2o2 = 0; + } + + data.h2o2 = h2o2; + data.humid = 12; + data.temp = 34; + data.saturation = 56; + return data; +} + +bool DeviceIoControlServiceTest::getAllSensorData(DeviceIoControlServiceTest::all_h2o2sensor_data_t& data) { + data = {0}; + data.h2o2sensor_data[0] = getH2O2SenSorData1(); + data.h2o2sensor_status[0] = true; + + data.h2o2sensor_status[1] = false; + data.h2o2sensor_status[2] = false; + + /** + * @brief 找到最小的过氧化氢浓度 + */ + data.min_h2o2 = -1; + for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { + if (data.h2o2sensor_status[i]) { + if (data.min_h2o2 < 0) { + data.min_h2o2 = data.h2o2sensor_data[i].h2o2; + } else if (data.h2o2sensor_data[i].h2o2 < data.min_h2o2) { + data.min_h2o2 = data.h2o2sensor_data[i].h2o2; + } + } + } + + data.max_h2o2 = -1; + for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { + if (data.h2o2sensor_status[i]) { + if (data.max_h2o2 < 0) { + data.max_h2o2 = data.h2o2sensor_data[i].h2o2; + } else if (data.h2o2sensor_data[i].h2o2 > data.max_h2o2) { + data.max_h2o2 = data.h2o2sensor_data[i].h2o2; + } + } + } + + /** + * @brief 找到最大的过氧化氢相对饱和度 + */ + data.max_saturation = -1; + for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { + if (data.h2o2sensor_status[i]) { + if (data.max_saturation < 0) { + data.max_saturation = data.h2o2sensor_data[i].saturation; + } else if (data.h2o2sensor_data[i].saturation > data.max_saturation) { + data.max_saturation = data.h2o2sensor_data[i].saturation; + } + } + } + + /** + * @brief 找到最大的相对湿度 + */ + + data.max_humid = -1; + for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { + if (data.h2o2sensor_status[i]) { + if (data.max_humid < 0) { + data.max_humid = data.h2o2sensor_data[i].humid; + } else if (data.h2o2sensor_data[i].humid > data.max_humid) { + data.max_humid = data.h2o2sensor_data[i].humid; + } + } + } + return true; +} diff --git a/src/service/device_io_control_service_test.hpp b/src/service/device_io_control_service_test.hpp new file mode 100644 index 0000000..9747da7 --- /dev/null +++ b/src/service/device_io_control_service_test.hpp @@ -0,0 +1,119 @@ +// +// Created by zwsd +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "device_io_control_service.hpp" +#include "iflytop/components/zcanreceiver/zcanhost.hpp" +#include "iflytop/core/core.hpp" +#include "zservice_container/zservice_container.hpp" +// lock_guard lock(lock_); + +#include +// std::lock_guard lock(lock_); + +/** + * @brief + * + * service: DeviceIoControlService + * + * 监听事件: + * 依赖状态: + * 依赖服务: + * 作用: + * + */ + +namespace iflytop { +using namespace std; +using namespace core; + +class DeviceIoControlServiceTest : public DeviceIoControlService { + ENABLE_LOGGER(DeviceIoControlServiceTest); + + bool m_airCompressor_State; + bool m_airBlower_State; + bool m_heartingPlate_power; + + public: + virtual void initialize(); + virtual void startScan(); + + public: + /******************************************************************************* + * 加热片控制 * + *******************************************************************************/ + virtual int heatingStrip_getio1(); + virtual int heatingStrip_getio2(); + virtual int heatingStrip_getstate(); + virtual int heatingStrip_getcurrentValue(); + void heartingPlate_setPower(bool val); + + /******************************************************************************* + * 鼓风机控制 * + *******************************************************************************/ + virtual int airBlower_getio1(); + virtual int airBlower_getio2(); + virtual int airBlower_getstate(); + virtual int airBlower_getcurrentValue(); + virtual int airBlower_setState(bool state); + + /******************************************************************************* + * 空压机控制 * + *******************************************************************************/ + virtual void airCompressor_setState(bool val); + virtual int airCompressor_getio1(); + virtual int airCompressor_getio2(); + virtual int airCompressor_getstate(); + virtual int airCompressor_getcurrentValue(); + + // heatingStrip + + /******************************************************************************* + * 泵控制 * + *******************************************************************************/ + virtual int getChargingPump_PumpRPM(); + // 排液泵 + virtual void drainingPump_open(); + virtual void drainingPump_close(); + // 充液泵 + virtual void replenishingFluidsPump_open(); + virtual void replenishingFluidsPump_close(); + + virtual void replenishingFluidsPump_open_for_test(int speed); + virtual void replenishingFluidsPump_close_for_test(); + + // 喷液泵 + virtual void sprayLiquidPump_open(int gpm); + virtual void sprayLiquidPump_close(); + virtual int sprayLiquidPump_getState(); + virtual int sprayLiquidPump_getRPM(); + virtual int sprayLiquidPump_getGPM(); + + virtual void sprayLiquidPump_open_for_test(int gpm); + virtual void sprayLiquidPump_close_for_test(); + + virtual h2o2sensor_data_t getH2O2SenSorData1(); + + /****************************************************************************** + * 水浸传感器 * + ******************************************************************************/ + virtual int getWaterImmersionSensor1(); + virtual int getWaterImmersionSensor2(); + + int getDisinfectantVolume_g(); // g + virtual int getPressureSensorData(int index); + virtual bool getAllSensorData(DeviceIoControlService::all_h2o2sensor_data_t& data); +}; +} // namespace iflytop \ No newline at end of file diff --git a/src/zservice_container/zservice_container.hpp b/src/zservice_container/zservice_container.hpp index 710aeab..6846ea3 100644 --- a/src/zservice_container/zservice_container.hpp +++ b/src/zservice_container/zservice_container.hpp @@ -192,6 +192,10 @@ class ServiceContrainer { shared_ptr type##_val(new type(__VA_ARGS__)); \ ServiceContrainer::get().regService(type##_val); +#define REG_SERRVICE(type,object) \ + shared_ptr type##_val(object); \ + ServiceContrainer::get().regService(type##_val); + #define BUILD_AND_REG_MOCK_SERRVICE(type, mocktype, ...) \ logger->info("build {}.....", #type); \ shared_ptr type##_val(new mocktype(__VA_ARGS__)); \