1 /*
2  * Copyright (C) 2021 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 SERVICES_INCLUDE_GLOBAL_H
17 #define SERVICES_INCLUDE_GLOBAL_H
18 
19 #include <errno.h>
20 #include <sys/time.h>
21 #include <time.h>
22 
23 #include <functional>
24 
25 #include "hilog/log.h"
26 
27 namespace OHOS {
28 namespace MiscServices {
29 
30 #define LOG_INFO(fmt, args...) \
31     LogTimeStamp();            \
32     printf("I %s:%d  %s - " fmt, basename(__FILE__), __LINE__, __FUNCTION__, ##args)
33 
34 #define LOG_ERROR(fmt, args...) \
35     LogTimeStamp();             \
36     printf("E %s:%d  %s - " fmt, basename(__FILE__), __LINE__, __FUNCTION__, ##args)
37 
38 #define LOG_WARNING(fmt, args...) \
39     LogTimeStamp();               \
40     printf("W %s:%d  %s - " fmt, basename(__FILE__), __LINE__, __FUNCTION__, ##args)
41 
42 #if DEBUG
43 #define LOG_DEBUG(fmt, args...) \
44     LogTimeStamp();             \
45     printf("D %s:%d  %s - " fmt, basename(__FILE__), __LINE__, __FUNCTION__, ##args)
46 #else
47 #define LOG_DEBUG(fmt, args...)
48 #endif
49 
50 void LogTimeStamp();
51 
52 // Error Code
53 namespace ErrorCode {
54 // Error Code definition in the input method management system
55 enum {
56     ERROR_STATUS_PERMISSION_DENIED = -EPERM,                          // permission denied
57     ERROR_STATUS_UNKNOWN_TRANSACTION = -EBADMSG,                      // unknown transaction
58 
59     // binder exception error code from Status.h
60     ERROR_EX_ILLEGAL_ARGUMENT = -3,      // illegal argument exception
61     ERROR_EX_NULL_POINTER = -4,          // null pointer exception
62     ERROR_EX_ILLEGAL_STATE = -5,         // illegal state exception
63     ERROR_EX_PARCELABLE  = -6,           // parcelable exception
64     ERROR_EX_UNSUPPORTED_OPERATION = -7, // unsupported operation exception
65     ERROR_EX_SERVICE_SPECIFIC = -8,      // service specific exception
66     // no error
67     NO_ERROR = 0, // no error
68 
69     // system service error
70     ERROR_NULL_POINTER = 1,          // null pointer
71     ERROR_BAD_PARAMETERS = 2,        // bad parameters
72     ERROR_CLIENT_NOT_FOUND = 3,
73     ERROR_CLIENT_NULL_POINTER = 4,
74     ERROR_SUBSCRIBE_KEYBOARD_EVENT = 5,
75     ERROR_IME_NOT_STARTED = 6,
76     ERROR_SERVICE_START_FAILED = 7,
77 
78     ERROR_CONTROLLER_INVOKING_FAILED = 8,
79     ERROR_PERSIST_CONFIG = 9,
80     ERROR_KBD_HIDE_FAILED = 10,
81     ERROR_SWITCH_IME = 11,
82     ERROR_PACKAGE_MANAGER = 12,
83     ERROR_REMOTE_CLIENT_DIED = 13,
84     ERROR_IME_START_FAILED = 14,          // failed to start IME service
85     ERROR_KBD_SHOW_FAILED = 15,           // failed to show keyboard
86     ERROR_CLIENT_NOT_BOUND = 16,
87     ERROR_CLIENT_NOT_EDITABLE = 17,
88     ERROR_CLIENT_NOT_FOCUSED = 18,
89     ERROR_CLIENT_ADD_FAILED = 19,
90     ERROR_OPERATE_PANEL = 20,
91     ERROR_NOT_CURRENT_IME = 21,
92     ERROR_NOT_IME = 22,
93     ERROR_ADD_DEATH_RECIPIENT_FAILED = 23,
94     ERROR_STATUS_SYSTEM_PERMISSION = 24, // not system application
95     ERROR_IME = 25,
96 	ERROR_PARAMETER_CHECK_FAILED = 26,
97     ERROR_IME_START_INPUT_FAILED = 27,
98     ERROR_KEYWORD_NOT_FOUND = 28,
99     ERROR_ENABLE_IME = 29,
100     ERROR_PARSE_CONFIG_FILE = 30,
101     ERROR_NOT_DEFAULT_IME = 31,
102     ERROR_ENABLE_SECURITY_MODE = 32,
103     ERROR_DISPATCH_KEY_EVENT = 33,
104     ERROR_INVALID_PRIVATE_COMMAND_SIZE = 34,
105     ERROR_TEXT_LISTENER_ERROR = 35,
106     ERROR_PANEL_NOT_FOUND = 36,
107     ERROR_WINDOW_MANAGER = 37,
108     ERROR_GET_TEXT_CONFIG = 38,
109     ERROR_TEXT_PREVIEW_NOT_SUPPORTED = 39,
110     ERROR_INVALID_RANGE = 40,
111     ERROR_CMD_LISTENER_ERROR = 41,
112     ERROR_SYSTEM_CMD_CHANNEL_ERROR = 42,
113     ERROR_INVALID_PRIVATE_COMMAND = 43,
114     ERROR_OS_ACCOUNT = 44,
115     ERROR_RES_ERROR = 46,
116 };
117 }; // namespace ErrorCode
118 
119 static constexpr HiviewDFX::HiLogLabel g_SMALL_SERVICES_LABEL = { LOG_CORE, 0xD001C10, "ImsaKit" };
120 
121 #define IMSA_HILOGD(fmt, ...)                                                                                    \
122     (void)HILOG_IMPL(LOG_CORE, LOG_DEBUG, OHOS::MiscServices::g_SMALL_SERVICES_LABEL.domain,                     \
123         OHOS::MiscServices::g_SMALL_SERVICES_LABEL.tag, "line: %{public}d, function: %{public}s," fmt, __LINE__, \
124         __FUNCTION__, ##__VA_ARGS__)
125 #define IMSA_HILOGE(fmt, ...)                                                                                    \
126     (void)HILOG_IMPL(LOG_CORE, LOG_ERROR, OHOS::MiscServices::g_SMALL_SERVICES_LABEL.domain,                     \
127         OHOS::MiscServices::g_SMALL_SERVICES_LABEL.tag, "line: %{public}d, function: %{public}s," fmt, __LINE__, \
128         __FUNCTION__, ##__VA_ARGS__)
129 #define IMSA_HILOGF(fmt, ...)                                                                                    \
130     (void)HILOG_IMPL(LOG_CORE, LOG_FATAL, OHOS::MiscServices::g_SMALL_SERVICES_LABEL.domain,                     \
131         OHOS::MiscServices::g_SMALL_SERVICES_LABEL.tag, "line: %{public}d, function: %{public}s," fmt, __LINE__, \
132         __FUNCTION__, ##__VA_ARGS__)
133 #define IMSA_HILOGI(fmt, ...)                                                                                    \
134     (void)HILOG_IMPL(LOG_CORE, LOG_INFO, OHOS::MiscServices::g_SMALL_SERVICES_LABEL.domain,                      \
135         OHOS::MiscServices::g_SMALL_SERVICES_LABEL.tag, "line: %{public}d, function: %{public}s," fmt, __LINE__, \
136         __FUNCTION__, ##__VA_ARGS__)
137 #define IMSA_HILOGW(fmt, ...)                                                                                    \
138     (void)HILOG_IMPL(LOG_CORE, LOG_WARN, OHOS::MiscServices::g_SMALL_SERVICES_LABEL.domain,                      \
139         OHOS::MiscServices::g_SMALL_SERVICES_LABEL.tag, "line: %{public}d, function: %{public}s," fmt, __LINE__, \
140         __FUNCTION__, ##__VA_ARGS__)
141 using Function = std::function<bool()>;
142 bool BlockRetry(uint32_t interval, uint32_t maxRetryTimes, Function func);
143 } // namespace MiscServices
144 } // namespace OHOS
145 #endif // SERVICES_INCLUDE_GLOBAL_H
146