1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef NFC_CONTROLLER_H 16 #define NFC_CONTROLLER_H 17 18 #include "ndef_msg_callback_stub.h" 19 #include "nfc_controller_callback_stub.h" 20 #include "nfc_controller_proxy.h" 21 #include "nfc_sdk_common.h" 22 #include "infc_controller_callback.h" 23 #include "infc_controller_service.h" 24 #ifdef VENDOR_APPLICATIONS_ENABLED 25 #include "iquery_app_info_callback.h" 26 #endif 27 28 namespace OHOS { 29 namespace NFC { 30 namespace KITS { 31 static const std::string NFC_SERVICE_NAME = "nfc"; 32 33 class NfcController final { 34 public: 35 explicit NfcController(); 36 ~NfcController(); 37 38 /** 39 * @Description Get an object of nfc controller. 40 * @param void 41 * @return an object of nfc controller 42 */ 43 static NfcController &GetInstance(); 44 /** 45 * @Description Turn on Nfc of the device. 46 * @param void 47 * @return Errorcode of turn on nfc. if return 0, means successful. 48 */ 49 int TurnOn(); 50 /** 51 * @Description Turn off Nfc of the device. 52 * @param void 53 * @return Errorcode of turn off nfc. if return 0, means successful. 54 */ 55 int TurnOff(); 56 /** 57 * @Description Get nfc state of device. 58 * @param void 59 * @return nfc state. 60 */ 61 int GetNfcState(); 62 /** 63 * @Checks whether a device supports NFC. 64 * @param void 65 * @return If the device supports NFC return 1; otherwise return 0. 66 */ 67 bool IsNfcAvailable(); 68 /** 69 * @Description Checks whether NFC is enabled. 70 * @param isOpen The output for checking nfc is open or not. 71 * @return The status code of calling function. 72 */ 73 int IsNfcOpen(bool &isOpen); 74 /** 75 * @Description Registers the callback for nfc state changed notification. 76 * @param callback the callback to be registered. 77 * @param type the type for this callback, it's "nfcStateChange" 78 * @return The status code for register operation. 79 */ 80 ErrorCode RegListener(const sptr<INfcControllerCallback> &callback, const std::string& type); 81 /** 82 * @Description Unregisters the callback for nfc state changed notification. 83 * @param type the type for this callback, it's "nfcStateChange" 84 * @return The status code for unregister operation. 85 */ 86 ErrorCode UnregListener(const std::string& type); 87 88 /** 89 * @brief Get the Tag Service Iface object 90 * 91 * @return OHOS::sptr<IRemoteObject> the remote object of tag service. 92 */ 93 OHOS::sptr<IRemoteObject> GetTagServiceIface(); 94 95 OHOS::sptr<IRemoteObject> GetHceServiceIface(); 96 97 void OnRemoteDied(const wptr<IRemoteObject> &remoteObject); 98 99 ErrorCode RegNdefMsgCb(const sptr<INdefMsgCallback> &callback); 100 101 #ifdef VENDOR_APPLICATIONS_ENABLED 102 ErrorCode RegQueryApplicationCb(const std::string& type, 103 QueryApplicationByVendor tagCallback, QueryHceAppByVendor hceCallback); 104 105 ErrorCode RegCardEmulationNotifyCb(OnCardEmulationNotifyCb callback); 106 ErrorCode NotifyEventStatus(int eventType, int arg1 = 0, std::string arg2 = ""); 107 #endif 108 109 private: 110 class NfcServiceDeathRecipient : public IRemoteObject::DeathRecipient { 111 public: NfcServiceDeathRecipient(NfcController & client)112 explicit NfcServiceDeathRecipient(NfcController &client) : client_(client) {} 113 ~NfcServiceDeathRecipient() override = default; OnRemoteDied(const wptr<IRemoteObject> & remoteObject)114 void OnRemoteDied(const wptr<IRemoteObject> &remoteObject) override 115 { 116 client_.OnRemoteDied(remoteObject); 117 } 118 private: 119 NfcController &client_; 120 }; 121 122 private: 123 static void InitNfcRemoteSA(); 124 125 private: 126 static bool initialized_; 127 static std::shared_ptr<NfcControllerProxy> nfcControllerProxy_; 128 static std::weak_ptr<OHOS::NFC::INfcControllerService> nfcControllerService_; 129 static std::mutex mutex_; 130 static bool remoteDied_; 131 static sptr<IRemoteObject> remote_; 132 static sptr<IRemoteObject::DeathRecipient> deathRecipient_; 133 }; 134 } // namespace KITS 135 } // namespace NFC 136 } // namespace OHOS 137 #endif // NFC_CONTROLLER_H 138