From 93ee471981148fbf36510ab9f682634953a7c143 Mon Sep 17 00:00:00 2001 From: maan4 Date: Thu, 26 Dec 2024 10:37:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9hall=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=85=A2=E6=88=96=E4=B8=8D=E4=B8=8A=E6=8A=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: maan4 --- services/hdi_connection/adapter/src/compatible_connection.cpp | 1 + services/hdi_connection/adapter/src/sensor_event_callback.cpp | 1 + .../hdi_connection/interface/include/i_sensor_hdi_connection.h | 1 + .../hdi_connection/interface/src/sensor_hdi_connection.cpp | 1 + services/src/sensor_data_processer.cpp | 3 ++- 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/services/hdi_connection/adapter/src/compatible_connection.cpp b/services/hdi_connection/adapter/src/compatible_connection.cpp index f7096eaa..9c07aa2a 100644 --- a/services/hdi_connection/adapter/src/compatible_connection.cpp +++ b/services/hdi_connection/adapter/src/compatible_connection.cpp @@ -137,6 +137,7 @@ void CompatibleConnection::ReportSensorDataCallback(SensorEvent *event) CHKPV(reportDataCb_); std::unique_lock lk(ISensorHdiConnection::dataMutex_); (void)(reportDataCallback_->*reportDataCb_)(&sensorData, reportDataCallback_); + ISensorHdiConnection::dataReady_.store(true); ISensorHdiConnection::dataCondition_.notify_one(); } diff --git a/services/hdi_connection/adapter/src/sensor_event_callback.cpp b/services/hdi_connection/adapter/src/sensor_event_callback.cpp index 65b2d098..85ed1e9c 100644 --- a/services/hdi_connection/adapter/src/sensor_event_callback.cpp +++ b/services/hdi_connection/adapter/src/sensor_event_callback.cpp @@ -87,6 +87,7 @@ int32_t SensorEventCallback::OnDataEvent(const HdfSensorEvents &event) if (sensorData.sensorTypeId == SENSOR_TYPE_ID_HALL_EXT) { SEN_HILOGI("dataCondition notify one sensorId: %{public}d", sensorData.sensorTypeId); } + ISensorHdiConnection::dataReady_.store(true); ISensorHdiConnection::dataCondition_.notify_one(); return ERR_OK; } diff --git a/services/hdi_connection/interface/include/i_sensor_hdi_connection.h b/services/hdi_connection/interface/include/i_sensor_hdi_connection.h index 7e3a7b5e..06a53f44 100644 --- a/services/hdi_connection/interface/include/i_sensor_hdi_connection.h +++ b/services/hdi_connection/interface/include/i_sensor_hdi_connection.h @@ -37,6 +37,7 @@ public: virtual int32_t DestroyHdiConnection() = 0; static std::mutex dataMutex_; static std::condition_variable dataCondition_; + static std::atomic dataReady_; private: DISALLOW_COPY_AND_MOVE(ISensorHdiConnection); diff --git a/services/hdi_connection/interface/src/sensor_hdi_connection.cpp b/services/hdi_connection/interface/src/sensor_hdi_connection.cpp index 3990a43b..2f7e949f 100644 --- a/services/hdi_connection/interface/src/sensor_hdi_connection.cpp +++ b/services/hdi_connection/interface/src/sensor_hdi_connection.cpp @@ -28,6 +28,7 @@ #define LOG_TAG "SensorHdiConnection" std::mutex OHOS::Sensors::ISensorHdiConnection::dataMutex_; std::condition_variable OHOS::Sensors::ISensorHdiConnection::dataCondition_; +std::atomic OHOS::Sensors::ISensorHdiConnection::dataReady_ = false; namespace OHOS { namespace Sensors { diff --git a/services/src/sensor_data_processer.cpp b/services/src/sensor_data_processer.cpp index cad4ba31..55449e6b 100644 --- a/services/src/sensor_data_processer.cpp +++ b/services/src/sensor_data_processer.cpp @@ -283,7 +283,8 @@ int32_t SensorDataProcesser::ProcessEvents(sptr dataCallback { CHKPR(dataCallback, INVALID_POINTER); std::unique_lock lk(ISensorHdiConnection::dataMutex_); - ISensorHdiConnection::dataCondition_.wait(lk); + ISensorHdiConnection::dataCondition_.wait(lk, [this] { return ISensorHdiConnection::dataReady_.load(); }); + ISensorHdiConnection::dataReady_.store(false); auto &eventsBuf = dataCallback->GetEventData(); if (eventsBuf.eventNum <= 0) { SEN_HILOGE("Data cannot be empty"); -- Gitee