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 
16 #ifndef POWER_LOG_H
17 #define POWER_LOG_H
18 
19 #define CONFIG_HILOG
20 #ifdef CONFIG_HILOG
21 
22 #include <stdint.h>
23 
24 #include "hilog/log.h"
25 
26 namespace OHOS {
27 namespace PowerMgr {
28 
29 #ifdef POWER_HILOGF
30 #undef POWER_HILOGF
31 #endif
32 
33 #ifdef POWER_HILOGE
34 #undef POWER_HILOGE
35 #endif
36 
37 #ifdef POWER_HILOGW
38 #undef POWER_HILOGW
39 #endif
40 
41 #ifdef POWER_HILOGI
42 #undef POWER_HILOGI
43 #endif
44 
45 #ifdef POWER_HILOGD
46 #undef POWER_HILOGD
47 #endif
48 
49 namespace {
50 // Power manager reserved domain id range
51 constexpr unsigned int POWER_DOMAIN_ID_START = 0xD002900;
52 constexpr unsigned int POWER_DOMAIN_ID_END = POWER_DOMAIN_ID_START + 32;
53 constexpr unsigned int TEST_DOMAIN_ID = 0xD000F00;
54 }
55 
56 enum PowerManagerLogLabel {
57     // Component labels, you can add if needed
58     COMP_APP = 0,
59     COMP_FWK = 1,
60     COMP_SVC = 2,
61     COMP_HDI = 3,
62     COMP_DRV = 4,
63     COMP_UTILS = 5,
64     // Feature labels, use to mark major features
65     FEATURE_WAKEUP,
66 #ifdef POWER_MANAGER_WAKEUP_ACTION
67     FEATURE_WAKEUP_ACTION,
68 #endif
69     FEATURE_SUSPEND,
70     FEATURE_RUNNING_LOCK,
71     FEATURE_ACTIVITY,
72     FEATURE_POWER_STATE,
73     FEATURE_SCREEN_OFF_PRE,
74     FEATURE_POWER_MODE,
75     FEATURE_SHUTDOWN,
76     FEATURE_INPUT,
77     FEATURE_UTIL,
78     // Test label
79     LABEL_TEST,
80     // The end of labels, max to the domain id range length 32
81     LABEL_END,
82 };
83 
84 enum PowerManagerLogDomain {
85     DOMAIN_APP = POWER_DOMAIN_ID_START + COMP_APP, // 0xD002900
86     DOMAIN_FRAMEWORK, // 0xD002901
87     DOMAIN_SERVICE, // 0xD002902
88     DOMAIN_HDI, // 0xD002903
89     DOMAIN_DRIVER, // 0xD002904
90     DOMAIN_UTILS, // 0xD002905
91     DOMAIN_FEATURE_WAKEUP,
92 #ifdef POWER_MANAGER_WAKEUP_ACTION
93     DOMAIN_FEATURE_WAKEUP_ACTION,
94 #endif
95     DOMAIN_FEATURE_SUSPEND,
96     DOMAIN_FEATURE_RUNNING_LOCK,
97     DOMAIN_FEATURE_ACTIVITY,
98     DOMAIN_FEATURE_POWER_STATE,
99     DOMAIN_FEATURE_SCREEN_OFF_PRE,
100     DOMAIN_FEATURE_POWER_MODE,
101     DOMAIN_FEATURE_SHUTDOWN,
102     DOMAIN_FEATURE_INPUT,
103     DOMAIN_FEATURE_UTIL,
104     DOMAIN_TEST = TEST_DOMAIN_ID, // 0xD000F00
105     DOMAIN_END = POWER_DOMAIN_ID_END, // Max to 0xD002920, keep the sequence and length same as PowerManagerLogLabel
106 };
107 
108 struct PowerManagerLogLabelDomain {
109     uint32_t domainId;
110     const char* tag;
111 };
112 
113 // Keep the sequence and length same as PowerManagerLogDomain
114 static const PowerManagerLogLabelDomain POWER_LABEL[LABEL_END] = {
115     {DOMAIN_APP,                  "PowerApp"},
116     {DOMAIN_FRAMEWORK,            "PowerFwk"},
117     {DOMAIN_SERVICE,              "PowerSvc"},
118     {DOMAIN_HDI,                  "PowerHdi"},
119     {DOMAIN_DRIVER,               "PowerDrv"},
120     {DOMAIN_UTILS,                "PowerUtils"},
121     {DOMAIN_FEATURE_WAKEUP,       "PowerWakeup"},
122 #ifdef POWER_MANAGER_WAKEUP_ACTION
123     {DOMAIN_FEATURE_WAKEUP_ACTION,       "PowerWakeupAction"},
124 #endif
125     {DOMAIN_FEATURE_SUSPEND,      "PowerSuspend"},
126     {DOMAIN_FEATURE_RUNNING_LOCK, "PowerRunningLock"},
127     {DOMAIN_FEATURE_ACTIVITY,     "PowerActivity"},
128     {DOMAIN_FEATURE_POWER_STATE,  "PowerState"},
129     {DOMAIN_FEATURE_SCREEN_OFF_PRE,  "PowerScreenOffPre"},
130     {DOMAIN_FEATURE_POWER_MODE,   "PowerMode"},
131     {DOMAIN_FEATURE_SHUTDOWN,     "PowerShutdown"},
132     {DOMAIN_FEATURE_INPUT,        "PowerInput"},
133     {DOMAIN_FEATURE_UTIL,         "PowerUtil"},
134     {DOMAIN_TEST,                 "PowerTest"},
135 };
136 
137 #define POWER_HILOGF(domain, ...) \
138     ((void)HILOG_IMPL(LOG_CORE, LOG_FATAL, POWER_LABEL[domain].domainId, POWER_LABEL[domain].tag, ##__VA_ARGS__))
139 #define POWER_HILOGE(domain, ...) \
140     ((void)HILOG_IMPL(LOG_CORE, LOG_ERROR, POWER_LABEL[domain].domainId, POWER_LABEL[domain].tag, ##__VA_ARGS__))
141 #define POWER_HILOGW(domain, ...) \
142     ((void)HILOG_IMPL(LOG_CORE, LOG_WARN, POWER_LABEL[domain].domainId, POWER_LABEL[domain].tag, ##__VA_ARGS__))
143 #define POWER_HILOGI(domain, ...) \
144     ((void)HILOG_IMPL(LOG_CORE, LOG_INFO, POWER_LABEL[domain].domainId, POWER_LABEL[domain].tag, ##__VA_ARGS__))
145 #define POWER_HILOGD(domain, ...) \
146     ((void)HILOG_IMPL(LOG_CORE, LOG_DEBUG, POWER_LABEL[domain].domainId, POWER_LABEL[domain].tag, ##__VA_ARGS__))
147 
148 } // namespace PowerMgr
149 } // namespace OHOS
150 
151 #else
152 
153 #define POWER_HILOGF(...)
154 #define POWER_HILOGE(...)
155 #define POWER_HILOGW(...)
156 #define POWER_HILOGI(...)
157 #define POWER_HILOGD(...)
158 
159 #endif // CONFIG_HILOG
160 
161 #endif // POWER_LOG_H
162