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