1ea497e4dSopenharmony_ci/* 2ea497e4dSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3ea497e4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ea497e4dSopenharmony_ci * you may not use this file except in compliance with the License. 5ea497e4dSopenharmony_ci * You may obtain a copy of the License at 6ea497e4dSopenharmony_ci * 7ea497e4dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ea497e4dSopenharmony_ci * 9ea497e4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ea497e4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ea497e4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ea497e4dSopenharmony_ci * See the License for the specific language governing permissions and 13ea497e4dSopenharmony_ci * limitations under the License. 14ea497e4dSopenharmony_ci */ 15ea497e4dSopenharmony_ci 16ea497e4dSopenharmony_ci#include "face_auth_driver_hdi.h" 17ea497e4dSopenharmony_ci 18ea497e4dSopenharmony_ci#include <memory> 19ea497e4dSopenharmony_ci#include <vector> 20ea497e4dSopenharmony_ci 21ea497e4dSopenharmony_ci#include "hdf_base.h" 22ea497e4dSopenharmony_ci#include "refbase.h" 23ea497e4dSopenharmony_ci 24ea497e4dSopenharmony_ci#include "iam_check.h" 25ea497e4dSopenharmony_ci#include "iam_logger.h" 26ea497e4dSopenharmony_ci#include "iam_ptr.h" 27ea497e4dSopenharmony_ci 28ea497e4dSopenharmony_ci#include "face_auth_all_in_one_executor_hdi.h" 29ea497e4dSopenharmony_ci#include "face_auth_defines.h" 30ea497e4dSopenharmony_ci#include "face_auth_hdi.h" 31ea497e4dSopenharmony_ci#include "face_auth_interface_adapter.h" 32ea497e4dSopenharmony_ci 33ea497e4dSopenharmony_ci#define LOG_TAG "FACE_AUTH_SA" 34ea497e4dSopenharmony_ci 35ea497e4dSopenharmony_cinamespace OHOS { 36ea497e4dSopenharmony_cinamespace UserIam { 37ea497e4dSopenharmony_cinamespace FaceAuth { 38ea497e4dSopenharmony_cinamespace UserAuth = OHOS::UserIam::UserAuth; 39ea497e4dSopenharmony_cistd::mutex FaceAuthDriverHdi::mutex_; 40ea497e4dSopenharmony_ci 41ea497e4dSopenharmony_ciFaceAuthDriverHdi::FaceAuthDriverHdi(const std::shared_ptr<FaceAuthInterfaceAdapter> faceAuthInterfaceAdapter) 42ea497e4dSopenharmony_ci : faceAuthInterfaceAdapter_(faceAuthInterfaceAdapter) 43ea497e4dSopenharmony_ci{ 44ea497e4dSopenharmony_ci} 45ea497e4dSopenharmony_ci 46ea497e4dSopenharmony_civoid FaceAuthDriverHdi::GetExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> &executorList) 47ea497e4dSopenharmony_ci{ 48ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN(faceAuthInterfaceAdapter_ != nullptr); 49ea497e4dSopenharmony_ci auto faceIf = faceAuthInterfaceAdapter_->Get(); 50ea497e4dSopenharmony_ci if (faceIf == nullptr) { 51ea497e4dSopenharmony_ci IAM_LOGE("IFaceAuthInterface is null"); 52ea497e4dSopenharmony_ci return; 53ea497e4dSopenharmony_ci } 54ea497e4dSopenharmony_ci 55ea497e4dSopenharmony_ci std::vector<sptr<IAllInOneExecutor>> iExecutorList; 56ea497e4dSopenharmony_ci auto ret = faceIf->GetExecutorList(iExecutorList); 57ea497e4dSopenharmony_ci if (ret != HDF_SUCCESS) { 58ea497e4dSopenharmony_ci IAM_LOGE("GetExecutorList fail"); 59ea497e4dSopenharmony_ci return; 60ea497e4dSopenharmony_ci } 61ea497e4dSopenharmony_ci 62ea497e4dSopenharmony_ci std::lock_guard<std::mutex> guard(mutex_); 63ea497e4dSopenharmony_ci faceAuthExecutorList_.clear(); 64ea497e4dSopenharmony_ci for (const auto &iExecutor : iExecutorList) { 65ea497e4dSopenharmony_ci if (iExecutor == nullptr) { 66ea497e4dSopenharmony_ci IAM_LOGE("iExecutor is nullptr"); 67ea497e4dSopenharmony_ci continue; 68ea497e4dSopenharmony_ci } 69ea497e4dSopenharmony_ci auto executor = Common::MakeShared<FaceAuthAllInOneExecutorHdi>(iExecutor); 70ea497e4dSopenharmony_ci if (executor == nullptr) { 71ea497e4dSopenharmony_ci IAM_LOGE("make share failed"); 72ea497e4dSopenharmony_ci continue; 73ea497e4dSopenharmony_ci } 74ea497e4dSopenharmony_ci executorList.push_back(executor); 75ea497e4dSopenharmony_ci faceAuthExecutorList_.push_back(executor); 76ea497e4dSopenharmony_ci } 77ea497e4dSopenharmony_ci} 78ea497e4dSopenharmony_ci 79ea497e4dSopenharmony_civoid FaceAuthDriverHdi::OnHdiDisconnect() 80ea497e4dSopenharmony_ci{ 81ea497e4dSopenharmony_ci IAM_LOGI("start"); 82ea497e4dSopenharmony_ci std::lock_guard<std::mutex> guard(mutex_); 83ea497e4dSopenharmony_ci for (const auto &iExecutor : faceAuthExecutorList_) { 84ea497e4dSopenharmony_ci if (iExecutor == nullptr) { 85ea497e4dSopenharmony_ci IAM_LOGE("iExecutor is nullptr"); 86ea497e4dSopenharmony_ci continue; 87ea497e4dSopenharmony_ci } 88ea497e4dSopenharmony_ci iExecutor->OnHdiDisconnect(); 89ea497e4dSopenharmony_ci } 90ea497e4dSopenharmony_ci faceAuthExecutorList_.clear(); 91ea497e4dSopenharmony_ci return; 92ea497e4dSopenharmony_ci} 93ea497e4dSopenharmony_ci 94ea497e4dSopenharmony_ciint32_t FaceAuthDriverHdi::SetBufferProducer(sptr<IBufferProducer> &producer) 95ea497e4dSopenharmony_ci{ 96ea497e4dSopenharmony_ci OHOS::sptr<BufferProducerSequenceable> producerSequenceable(nullptr); 97ea497e4dSopenharmony_ci if (producer != nullptr) { 98ea497e4dSopenharmony_ci producerSequenceable = 99ea497e4dSopenharmony_ci sptr<BufferProducerSequenceable>(new (std::nothrow) BufferProducerSequenceable(producer)); 100ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN_VAL(producerSequenceable != nullptr, FACE_AUTH_ERROR); 101ea497e4dSopenharmony_ci } 102ea497e4dSopenharmony_ci 103ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN_VAL(faceAuthInterfaceAdapter_ != nullptr, FACE_AUTH_ERROR); 104ea497e4dSopenharmony_ci auto faceIf = faceAuthInterfaceAdapter_->Get(); 105ea497e4dSopenharmony_ci if (faceIf == nullptr) { 106ea497e4dSopenharmony_ci IAM_LOGE("IFaceAuthInterface is null"); 107ea497e4dSopenharmony_ci return FACE_AUTH_ERROR; 108ea497e4dSopenharmony_ci } 109ea497e4dSopenharmony_ci 110ea497e4dSopenharmony_ci auto ret = faceIf->SetBufferProducer(producerSequenceable); 111ea497e4dSopenharmony_ci if (ret != HDF_SUCCESS) { 112ea497e4dSopenharmony_ci IAM_LOGE("GetExecutorList fail"); 113ea497e4dSopenharmony_ci return FACE_AUTH_ERROR; 114ea497e4dSopenharmony_ci } 115ea497e4dSopenharmony_ci 116ea497e4dSopenharmony_ci return FACE_AUTH_SUCCESS; 117ea497e4dSopenharmony_ci} 118ea497e4dSopenharmony_ci} // namespace FaceAuth 119ea497e4dSopenharmony_ci} // namespace UserIam 120ea497e4dSopenharmony_ci} // namespace OHOS 121