1bc2ed2b3Sopenharmony_ci/* 2bc2ed2b3Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3bc2ed2b3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4bc2ed2b3Sopenharmony_ci * you may not use this file except in compliance with the License. 5bc2ed2b3Sopenharmony_ci * You may obtain a copy of the License at 6bc2ed2b3Sopenharmony_ci * 7bc2ed2b3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8bc2ed2b3Sopenharmony_ci * 9bc2ed2b3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10bc2ed2b3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11bc2ed2b3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bc2ed2b3Sopenharmony_ci * See the License for the specific language governing permissions and 13bc2ed2b3Sopenharmony_ci * limitations under the License. 14bc2ed2b3Sopenharmony_ci */ 15bc2ed2b3Sopenharmony_ci#include "nfc_routing_manager.h" 16bc2ed2b3Sopenharmony_ci 17bc2ed2b3Sopenharmony_ci#include "loghelper.h" 18bc2ed2b3Sopenharmony_ci#include "nfc_service.h" 19bc2ed2b3Sopenharmony_ci#include "nfc_watch_dog.h" 20bc2ed2b3Sopenharmony_ci 21bc2ed2b3Sopenharmony_cinamespace OHOS { 22bc2ed2b3Sopenharmony_cinamespace NFC { 23bc2ed2b3Sopenharmony_ci// ms wait for setting the routing table. 24bc2ed2b3Sopenharmony_ciconst int ROUTING_DELAY_TIME = 0; // ms 25bc2ed2b3Sopenharmony_ciNfcRoutingManager::NfcRoutingManager(std::shared_ptr<NfcEventHandler> eventHandler, 26bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciNfccInterface> nciNfccProxy, 27bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciCeInterface> nciCeProxy, 28bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService) 29bc2ed2b3Sopenharmony_ci : eventHandler_(eventHandler), nciNfccProxy_(nciNfccProxy), nciCeProxy_(nciCeProxy), nfcService_(nfcService) 30bc2ed2b3Sopenharmony_ci{} 31bc2ed2b3Sopenharmony_ci 32bc2ed2b3Sopenharmony_ciNfcRoutingManager::~NfcRoutingManager() 33bc2ed2b3Sopenharmony_ci{ 34bc2ed2b3Sopenharmony_ci eventHandler_ = nullptr; 35bc2ed2b3Sopenharmony_ci} 36bc2ed2b3Sopenharmony_ci 37bc2ed2b3Sopenharmony_civoid NfcRoutingManager::CommitRouting() 38bc2ed2b3Sopenharmony_ci{ 39bc2ed2b3Sopenharmony_ci eventHandler_->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_COMMIT_ROUTING), ROUTING_DELAY_TIME); 40bc2ed2b3Sopenharmony_ci} 41bc2ed2b3Sopenharmony_ci 42bc2ed2b3Sopenharmony_civoid NfcRoutingManager::HandleCommitRouting() 43bc2ed2b3Sopenharmony_ci{ 44bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 45bc2ed2b3Sopenharmony_ci int nfcState = nfcService_.lock()->GetNfcState(); 46bc2ed2b3Sopenharmony_ci if (nfcState == KITS::STATE_OFF || nfcState == KITS::STATE_TURNING_OFF) { 47bc2ed2b3Sopenharmony_ci DebugLog("HandleCommitRouting: NOT Handle CommitRouting in state off or turning off."); 48bc2ed2b3Sopenharmony_ci return; 49bc2ed2b3Sopenharmony_ci } 50bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingParams> currPollingParams = 51bc2ed2b3Sopenharmony_ci nfcService_.lock()->GetNfcPollingManager().lock()->GetCurrentParameters(); 52bc2ed2b3Sopenharmony_ci if (currPollingParams == nullptr) { 53bc2ed2b3Sopenharmony_ci ErrorLog("HandleCommitRouting: currPollingParams is nullptr."); 54bc2ed2b3Sopenharmony_ci return; 55bc2ed2b3Sopenharmony_ci } 56bc2ed2b3Sopenharmony_ci NfcWatchDog CommitRoutingDog("CommitRouting", WAIT_ROUTING_INIT, nciNfccProxy_); 57bc2ed2b3Sopenharmony_ci CommitRoutingDog.Run(); 58bc2ed2b3Sopenharmony_ci if (currPollingParams->ShouldEnablePolling()) { 59bc2ed2b3Sopenharmony_ci bool result = nciCeProxy_.lock()->CommitRouting(); 60bc2ed2b3Sopenharmony_ci DebugLog("HandleCommitRouting: result = %{public}d", result); 61bc2ed2b3Sopenharmony_ci } else { 62bc2ed2b3Sopenharmony_ci ErrorLog("HandleCommitRouting: NOT Handle CommitRouting when polling not enabled."); 63bc2ed2b3Sopenharmony_ci } 64bc2ed2b3Sopenharmony_ci CommitRoutingDog.Cancel(); 65bc2ed2b3Sopenharmony_ci} 66bc2ed2b3Sopenharmony_ci 67bc2ed2b3Sopenharmony_civoid NfcRoutingManager::ComputeRoutingParams(KITS::DefaultPaymentType defaultPaymentType) 68bc2ed2b3Sopenharmony_ci{ 69bc2ed2b3Sopenharmony_ci eventHandler_->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_COMPUTE_ROUTING_PARAMS), 70bc2ed2b3Sopenharmony_ci static_cast<int>(defaultPaymentType), ROUTING_DELAY_TIME); 71bc2ed2b3Sopenharmony_ci} 72bc2ed2b3Sopenharmony_ci 73bc2ed2b3Sopenharmony_civoid NfcRoutingManager::HandleComputeRoutingParams(int defaultPaymentType) 74bc2ed2b3Sopenharmony_ci{ 75bc2ed2b3Sopenharmony_ci if (!nfcService_.lock()->IsNfcEnabled()) { 76bc2ed2b3Sopenharmony_ci ErrorLog("HandleComputeRoutingParams: NFC not enabled, do not Compute Routing Params"); 77bc2ed2b3Sopenharmony_ci return; 78bc2ed2b3Sopenharmony_ci } 79bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 80bc2ed2b3Sopenharmony_ci NfcWatchDog ComputeRoutingParamDog("ComputeRoutingParam", WAIT_ROUTING_INIT, nciNfccProxy_); 81bc2ed2b3Sopenharmony_ci ComputeRoutingParamDog.Run(); 82bc2ed2b3Sopenharmony_ci bool result = nciCeProxy_.lock()->ComputeRoutingParams(defaultPaymentType); 83bc2ed2b3Sopenharmony_ci DebugLog("HandleComputeRoutingParams result = %{public}d", result); 84bc2ed2b3Sopenharmony_ci ComputeRoutingParamDog.Cancel(); 85bc2ed2b3Sopenharmony_ci} 86bc2ed2b3Sopenharmony_ci} // namespace NFC 87bc2ed2b3Sopenharmony_ci} // namespace OHOS