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_;