1 /*
2  * Copyright (C) 2024 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 
16 #ifndef NFC_NOTIFICATION_PUBLISHER_H
17 #define NFC_NOTIFICATION_PUBLISHER_H
18 
19 #include <mutex>
20 #include <string>
21 
22 #include "nfc_service.h"
23 
24 namespace OHOS {
25 namespace NFC {
26 namespace TAG {
27 enum NfcNotificationId : int {
28     NFC_TAG_DEFAULT_NOTIFICATION_ID = 114000,
29     NFC_BT_NOTIFICATION_ID = 114001,
30     NFC_WIFI_NOTIFICATION_ID = 114002,
31     NFC_TRANSPORT_CARD_NOTIFICATION_ID = 114003,
32     NFC_BROWSER_NOTIFICATION_ID = 114004,
33     NFC_HCE_AID_CONFLICTED_ID = 114005,
34     NFC_NO_HAP_SUPPORTED_NOTIFICATION_ID = 114006,
35 };
36 
37 typedef void (NfcNtfCallback)(int notificationId);
38 
39 struct NfcNtfInterface {
40     void (*publishNotification)(int notificationId, const std::string &name, int balance);
41     void (*regNtfCallback)(NfcNtfCallback *callback);
42 };
43 
44 constexpr const char* NFC_NTF_LIB_PATH = "libnfc_notification.z.so";
45 constexpr const char* REG_NFC_CALLBACK_FUNC_NAME = "RegNotificationCallback";
46 constexpr const char* PUBLISH_NTF_FUNC_NAME = "PublishNfcNotification";
47 
48 class NfcNotificationPublisher {
49 public:
50     static NfcNotificationPublisher& GetInstance(void);
51 
52     void PublishNfcNotification(int notificationId, const std::string &name, int balance);
53     void RegNotificationCallback(std::weak_ptr<NfcService> nfcService);
54     void OnNotificationButtonClicked(int notificationId);
55 
56 private:
57     NfcNotificationPublisher();
58     ~NfcNotificationPublisher();
59     NfcNotificationPublisher(const NfcNotificationPublisher&) = delete;
60     NfcNotificationPublisher& operator=(const NfcNotificationPublisher&) = delete;
61 
62     void UnloadNfcNtfLib();
63     void InitNfcNtfLib();
64 
65     const static int NOTIFICATION_WAIT_TIME_US = 150 * 1000;
66 
67     std::mutex mutex_ {};
68     bool isNtfLibLoaded_ = false;
69     void *nfcNtfHandle_ {};
70     NfcNtfInterface nfcNtfInf_ {};
71     bool isInitialized_ = false;
72     std::weak_ptr<NfcService> nfcService_;
73 };
74 }  // namespace TAG
75 }  // namespace NFC
76 }  // namespace OHOS
77 #endif  // NFC_NOTIFICATION_PUBLISHER_H
78