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#ifndef NFC_POLLING_MANAGER_H 16bc2ed2b3Sopenharmony_ci#define NFC_POLLING_MANAGER_H 17bc2ed2b3Sopenharmony_ci#include "access_token.h" 18bc2ed2b3Sopenharmony_ci#include "common_event_manager.h" 19bc2ed2b3Sopenharmony_ci#include "iforeground_callback.h" 20bc2ed2b3Sopenharmony_ci#include "ireader_mode_callback.h" 21bc2ed2b3Sopenharmony_ci#include "nfc_polling_params.h" 22bc2ed2b3Sopenharmony_ci#include "taginfo_parcelable.h" 23bc2ed2b3Sopenharmony_ci#include "inci_nfcc_interface.h" 24bc2ed2b3Sopenharmony_ci#include "inci_tag_interface.h" 25bc2ed2b3Sopenharmony_ci 26bc2ed2b3Sopenharmony_cinamespace OHOS { 27bc2ed2b3Sopenharmony_cinamespace NFC { 28bc2ed2b3Sopenharmony_ci// ms wait for setting the routing table. 29bc2ed2b3Sopenharmony_cistatic const int WAIT_MS_SET_ROUTE = 10 * 1000; 30bc2ed2b3Sopenharmony_ciclass NfcService; 31bc2ed2b3Sopenharmony_ciclass NfcPollingManager { 32bc2ed2b3Sopenharmony_cipublic: 33bc2ed2b3Sopenharmony_ci NfcPollingManager(std::weak_ptr<NfcService> nfcService, 34bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciNfccInterface> nciNfccProxy, 35bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciTagInterface> nciTagProxy); 36bc2ed2b3Sopenharmony_ci ~NfcPollingManager(); 37bc2ed2b3Sopenharmony_ci class ForegroundRegistryData { 38bc2ed2b3Sopenharmony_ci public: 39bc2ed2b3Sopenharmony_ci bool isEnabled_ = false; 40bc2ed2b3Sopenharmony_ci uint16_t techMask_ = 0xFFFF; 41bc2ed2b3Sopenharmony_ci AppExecFwk::ElementName element_; 42bc2ed2b3Sopenharmony_ci Security::AccessToken::AccessTokenID callerToken_ = 0; 43bc2ed2b3Sopenharmony_ci sptr<KITS::IForegroundCallback> callback_ = nullptr; 44bc2ed2b3Sopenharmony_ci }; 45bc2ed2b3Sopenharmony_ci 46bc2ed2b3Sopenharmony_ci class ReaderModeRegistryData { 47bc2ed2b3Sopenharmony_ci public: 48bc2ed2b3Sopenharmony_ci bool isEnabled_ = false; 49bc2ed2b3Sopenharmony_ci uint16_t techMask_ = 0xFFFF; 50bc2ed2b3Sopenharmony_ci AppExecFwk::ElementName element_; 51bc2ed2b3Sopenharmony_ci Security::AccessToken::AccessTokenID callerToken_ = 0; 52bc2ed2b3Sopenharmony_ci sptr<KITS::IReaderModeCallback> callback_ = nullptr; 53bc2ed2b3Sopenharmony_ci }; 54bc2ed2b3Sopenharmony_ci 55bc2ed2b3Sopenharmony_ci void ResetCurrPollingParams(); 56bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingParams> GetCurrentParameters(); 57bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingParams> GetPollingParameters(int screenState); 58bc2ed2b3Sopenharmony_ci 59bc2ed2b3Sopenharmony_ci // polling 60bc2ed2b3Sopenharmony_ci void StartPollingLoop(bool force); 61bc2ed2b3Sopenharmony_ci // screen changed 62bc2ed2b3Sopenharmony_ci void HandleScreenChanged(int screenState); 63bc2ed2b3Sopenharmony_ci // package updated 64bc2ed2b3Sopenharmony_ci bool HandlePackageUpdated(std::shared_ptr<EventFwk::CommonEventData> data); 65bc2ed2b3Sopenharmony_ci 66bc2ed2b3Sopenharmony_ci bool EnableForegroundDispatch(AppExecFwk::ElementName &element, const std::vector<uint32_t> &discTech, 67bc2ed2b3Sopenharmony_ci const sptr<KITS::IForegroundCallback> &callback); 68bc2ed2b3Sopenharmony_ci bool DisableForegroundDispatch(const AppExecFwk::ElementName &element); 69bc2ed2b3Sopenharmony_ci bool DisableForegroundByDeathRcpt(); 70bc2ed2b3Sopenharmony_ci bool IsForegroundEnabled(); 71bc2ed2b3Sopenharmony_ci void SendTagToForeground(KITS::TagInfoParcelable* tagInfo); 72bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingManager::ForegroundRegistryData> GetForegroundData(); 73bc2ed2b3Sopenharmony_ci 74bc2ed2b3Sopenharmony_ci bool EnableReaderMode(AppExecFwk::ElementName &element, std::vector<uint32_t> &discTech, 75bc2ed2b3Sopenharmony_ci const sptr<KITS::IReaderModeCallback> &callback); 76bc2ed2b3Sopenharmony_ci bool DisableReaderMode(AppExecFwk::ElementName &element); 77bc2ed2b3Sopenharmony_ci bool DisableReaderModeByDeathRcpt(); 78bc2ed2b3Sopenharmony_ci bool IsReaderModeEnabled(); 79bc2ed2b3Sopenharmony_ci void SendTagToReaderApp(KITS::TagInfoParcelable* tagInfo); 80bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingManager::ReaderModeRegistryData> GetReaderModeData(); 81bc2ed2b3Sopenharmony_ci 82bc2ed2b3Sopenharmony_ciprivate: 83bc2ed2b3Sopenharmony_ci int screenState_ = 0; 84bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingManager::ForegroundRegistryData> foregroundData_ {}; 85bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingManager::ReaderModeRegistryData> readerModeData_ {}; 86bc2ed2b3Sopenharmony_ci std::shared_ptr<NfcPollingParams> currPollingParams_ {}; 87bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService_ {}; 88bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciNfccInterface> nciNfccProxy_ {}; 89bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciTagInterface> nciTagProxy_ {}; 90bc2ed2b3Sopenharmony_ci 91bc2ed2b3Sopenharmony_ci // lock 92bc2ed2b3Sopenharmony_ci std::mutex mutex_ {}; 93bc2ed2b3Sopenharmony_ci}; 94bc2ed2b3Sopenharmony_ci} // namespace NFC 95bc2ed2b3Sopenharmony_ci} // namespace OHOS 96bc2ed2b3Sopenharmony_ci#endif // NFC_POLLING_MANAGER_H