diff --git a/sensor/hdi_service_3.0/sensor_clients_manager.cpp b/sensor/hdi_service_3.0/sensor_clients_manager.cpp index fd3944db3c..5d34250bfc 100644 --- a/sensor/hdi_service_3.0/sensor_clients_manager.cpp +++ b/sensor/hdi_service_3.0/sensor_clients_manager.cpp @@ -382,6 +382,27 @@ bool SensorClientsManager::IsNeedCloseSensor(SensorHandle sensorHandle, int serv return false; } +void SensorClientsManager::AddServiceToReportQueue(SensorHandle sensorHandle, int serviceId) +{ + SENSOR_TRACE_PID; + std::unique_lock lock(sensorUsedMutex_); + auto it = sensorUsed_.find(sensorHandle); + if (it == sensorUsed_.end()) { + std::set service = {serviceId}; + sensorUsed_.emplace(sensorHandle, service); + HDF_LOGD("%{public}s: sensorHandle %{public}s is enabled by service: %{public}d", __func__, + SENSOR_HANDLE_TO_C_STR(sensorHandle), serviceId); + return; + } + auto service = sensorUsed_[sensorHandle].find(serviceId); + if (service == sensorUsed_[sensorHandle].end()) { + sensorUsed_[sensorHandle].insert(serviceId); + HDF_LOGD("%{public}s: service: %{public}d is enabled sensorHandle: %{public}s", __func__, serviceId, + SENSOR_HANDLE_TO_C_STR(sensorHandle)); + } + return; +} + bool SensorClientsManager::IsExistSdcSensorEnable(SensorHandle sensorHandle) { SENSOR_TRACE_PID; diff --git a/sensor/hdi_service_3.0/sensor_clients_manager.h b/sensor/hdi_service_3.0/sensor_clients_manager.h index 591767c7fb..d99a73a3ad 100644 --- a/sensor/hdi_service_3.0/sensor_clients_manager.h +++ b/sensor/hdi_service_3.0/sensor_clients_manager.h @@ -61,6 +61,7 @@ public: std::unordered_map> GetSensorUsed(); bool IsNeedOpenSensor(SensorHandle sensorHandle, int serviceId); bool IsNeedCloseSensor(SensorHandle sensorHandle, int serviceId); + void AddServiceToReportQueue(SensorHandle sensorHandle, int serviceId); bool IsExistSdcSensorEnable(SensorHandle sensorHandle); void OpenSensor(SensorHandle sensorHandle, int serviceId); void UpdateSensorConfig(SensorHandle sensorHandle, int64_t samplingInterval, int64_t reportInterval); diff --git a/sensor/hdi_service_3.0/sensor_if_service.cpp b/sensor/hdi_service_3.0/sensor_if_service.cpp index 6af924f7ca..d1c60dd225 100644 --- a/sensor/hdi_service_3.0/sensor_if_service.cpp +++ b/sensor/hdi_service_3.0/sensor_if_service.cpp @@ -511,16 +511,16 @@ void SensorIfService::RemoveDeathNotice(int32_t groupId) int32_t SensorIfService::DisableSensor(const SensorHandle sensorHandle, uint32_t serviceId) { SENSOR_TRACE_PID_MSG("sensorHandle " + SENSOR_HANDLE_TO_STRING(sensorHandle)); - if (!SensorClientsManager::GetInstance()->IsUpadateSensorState(sensorHandle, serviceId, DISABLE_SENSOR)) { - HDF_LOGD("%{public}s There are still some services enable", __func__); - return HDF_SUCCESS; - } - if (sensorVdiImplV1_1_ == nullptr) { HDF_LOGE("%{public}s: get sensor vdi impl failed", __func__); return HDF_FAILURE; } + if (!SensorClientsManager::GetInstance()->IsUpadateSensorState(sensorHandle, serviceId, DISABLE_SENSOR)) { + HDF_LOGD("%{public}s There are still some services enable", __func__); + return HDF_SUCCESS; + } + int32_t ret = SENSOR_SUCCESS; if (SensorClientsManager::GetInstance()->IsExistSdcSensorEnable(sensorHandle)) { SENSOR_TRACE_START("sensorVdiImplV1_1_->SetSaBatch"); @@ -533,6 +533,7 @@ int32_t SensorIfService::DisableSensor(const SensorHandle sensorHandle, uint32_t if (ret != SENSOR_SUCCESS) { HDF_LOGE("%{public}s SetSaBatch failed, error code is %{public}d, sensorHandle = %{public}s, serviceId = " "%{public}d", __func__, ret, SENSOR_HANDLE_TO_C_STR(sensorHandle), serviceId); + SensorClientsManager::GetInstance()->AddServiceToReportQueue(sensorHandle, serviceId); return ret; } return HDF_SUCCESS; @@ -549,6 +550,7 @@ int32_t SensorIfService::DisableSensor(const SensorHandle sensorHandle, uint32_t if (ret != SENSOR_SUCCESS) { HDF_LOGE("%{public}s failed, error code is %{public}d, sensorHandle = %{public}s, serviceId = %{public}d", __func__, ret, SENSOR_HANDLE_TO_C_STR(sensorHandle), serviceId); + SensorClientsManager::GetInstance()->AddServiceToReportQueue(sensorHandle, serviceId); } return ret;