From e659ec0e8ab230f6e19f791d0ccc705781e425f7 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 17 May 2024 12:00:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=B5=B7=E6=9D=A55=E5=88=86=E9=92=9F=E5=90=8E=20?= =?UTF-8?q?=E8=BF=87=E6=B0=A7=E5=8C=96=E6=B0=A2=E4=BC=A0=E6=84=9F=E5=99=A8?= =?UTF-8?q?=E6=89=8D=E5=BC=80=E5=A7=8B=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iflytoplinuxsdk | 2 +- src/service/device_io_control_service.cpp | 49 ++++++++++++++++++++++--------- src/service/device_io_control_service.hpp | 3 ++ 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/iflytoplinuxsdk b/iflytoplinuxsdk index 7c49f67..df64525 160000 --- a/iflytoplinuxsdk +++ b/iflytoplinuxsdk @@ -1 +1 @@ -Subproject commit 7c49f67b539e76c7b6417bc121a242ea43621a65 +Subproject commit df6452534c5ccb2340efcc81e9cebe4d134cc37e diff --git a/src/service/device_io_control_service.cpp b/src/service/device_io_control_service.cpp index 13c6eae..443a2da 100644 --- a/src/service/device_io_control_service.cpp +++ b/src/service/device_io_control_service.cpp @@ -20,6 +20,7 @@ void DeviceIoControlService::initialize() { GET_TO_SERVICE(m_config); m_zcanReceiverHost = m_zcanHost->getZCanReceiverHost(); m_zcanReceiverHost->registerReportMsgListener([this](uint8_t* packet, size_t len) { processReportPacket(packet, len); }); + m_workQueue.reset(new WorkQueue("DeviceIoControlServiceWorkQueue")); startScan(); } @@ -348,14 +349,21 @@ void DeviceIoControlService::processReportPacket(uint8_t* packet, size_t len) { * @brief 更新过氧化氢传感器数据 */ if (cmdpacket->cmdid == kreport_h2o2_sensor_data) { - report_h2o2_data_t* h2o2data = (report_h2o2_data_t*)cmdpacket->data; - if (h2o2data->sensorid > 100 && h2o2data->sensorid < 200) { - H2O2Sensor_updateSensorData(h2o2data->sensorid - 1, h2o2data); - } else if (h2o2data->sensorid < 100) { - H2O2Sensor_updateSensorData(0, h2o2data); - } else { - logger->error("[h2o2 sensor] id:{} error sensorid", h2o2data->sensorid); - } + report_h2o2_data_t* h2o2data = (report_h2o2_data_t*)cmdpacket->data; + report_h2o2_data_t h2o2datacache = *h2o2data; + + m_workQueue->enQueue([this, h2o2datacache]() { // + report_h2o2_data_t h2o2datac_cpy = h2o2datacache; + + if (h2o2datac_cpy.sensorid > 100 && h2o2datac_cpy.sensorid < 200) { + H2O2Sensor_updateSensorData(h2o2datac_cpy.sensorid - 100, &h2o2datac_cpy); + } else if (h2o2datac_cpy.sensorid < 100) { + H2O2Sensor_updateSensorData(0, &h2o2datac_cpy); + } else { + logger->error("[h2o2 sensor] id:{} error sensorid", h2o2datac_cpy.sensorid); + } + + }); } } @@ -412,12 +420,25 @@ void DeviceIoControlService::H2O2Sensor_updateSensorData(int32_t sensorid, repor } h2o2_sensor_data_t* sensor_data = &m_h2o2_sensor_data[sensorid]; - sensor_data->h2o2 = data->h2o2 / 10; - sensor_data->temp = data->temp / 10; - sensor_data->humid = data->humid / 10; - sensor_data->saturation = data->saturation / 10; - sensor_data->sensorId = data->sensorid; - sensor_data->updatetime = zsys_get_ticket(); + + /** + * @brief 系统启动至少5分钟后,才开始更新数据 + */ + if (zsteady_clock().gets() > 5 * 60) { + sensor_data->h2o2 = data->h2o2 / 10; + sensor_data->temp = data->temp / 10; + sensor_data->humid = data->humid / 10; + sensor_data->saturation = data->saturation / 10; + sensor_data->sensorId = data->sensorid; + sensor_data->updatetime = zsys_get_ticket(); + } else { + sensor_data->h2o2 = 0; + sensor_data->temp = data->temp / 10; + sensor_data->humid = 0; + sensor_data->saturation = 0; + sensor_data->sensorId = data->sensorid; + sensor_data->updatetime = zsys_get_ticket(); + } } #ifdef PROJECT_TYPE_PIPE_DISINFECTION diff --git a/src/service/device_io_control_service.hpp b/src/service/device_io_control_service.hpp index 189ac9f..2888e4a 100644 --- a/src/service/device_io_control_service.hpp +++ b/src/service/device_io_control_service.hpp @@ -15,6 +15,7 @@ #include // #include "if_devoce_io_contrl_service.hpp" +#include "iflytop/core/components/jobs/work_queue.hpp" /** * @brief @@ -62,6 +63,8 @@ class DeviceIoControlService : public IF_DeviceIoContrlService { unique_ptr m_mainH2O2SensorDataSampleThread; unique_ptr m_workThread; + unique_ptr m_workQueue; + // // std::mutex lock_; std::recursive_mutex lock_;