mirror of
https://github.com/openharmony/drivers_peripheral.git
synced 2026-08-24 18:15:56 -04:00
@@ -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<std::mutex> lock(sensorUsedMutex_);
|
||||
auto it = sensorUsed_.find(sensorHandle);
|
||||
if (it == sensorUsed_.end()) {
|
||||
std::set<int> 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;
|
||||
|
||||
@@ -61,6 +61,7 @@ public:
|
||||
std::unordered_map<SensorHandle, std::set<int32_t>> 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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user