更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_pm.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _LOS_PM_H
33#define _LOS_PM_H
34
35#include "los_config.h"
36#include "los_typedef.h"
37#include "los_list.h"
38#include "los_seq_buf.h"
39#include "los_errno.h"
40
41typedef enum {
42 LOS_SYS_NORMAL_SLEEP = 0, //普通睡眠
43 LOS_SYS_LIGHT_SLEEP, //浅度睡眠
44 LOS_SYS_DEEP_SLEEP, //深度睡眠
45 LOS_SYS_SHUTDOWN, //关闭电源
47
48typedef enum {
50 LOS_PM_TYPE_TICK_TIMER, /* reserved */
53
54typedef struct {
55 UINT32 (*suspend)(UINT32 mode); /* The device enters low power consumption, Unlocked task scheduling. */
56 VOID (*resume)(UINT32 mode); /* The device exits from low power consumption, Unlocked task scheduling. */
58
59typedef struct {
60 /* Preparations before the CPU enters low power consumption.
61 * All modes except normal mode are invoked.
62 * Unlocked task scheduling.
63 */
64 UINT32 (*early)(UINT32 mode);
65 /* The system performs low-power recovery.
66 * All modes except normal mode are invoked.
67 * Unlocked task scheduling.
68 */
69 VOID (*late)(UINT32 mode);
70 /* The system enters the Normal sleep mode.
71 * In normal mode, the value cannot be NULL.
72 */
73 UINT32 (*normalSuspend)(VOID);
74 /* The system recovers from normal sleep.
75 * The value can be NULL.
76 */
77 VOID (*normalResume)(VOID);
78 /* The system enters the light sleep mode.
79 * In light sleep mode, the value cannot be NULL.
80 */
81 UINT32 (*lightSuspend)(VOID);
82 /* The system recovers from light sleep.
83 * The value can be NULL.
84 */
85 VOID (*lightResume)(VOID);
86 /* The system enters the deep sleep mode.
87 * In deep sleep mode, the value cannot be NULL.
88 */
89 UINT32 (*deepSuspend)(VOID);
90 /* The system recovers from deep sleep.
91 * The value can be NULL.
92 */
93 VOID (*deepResume)(VOID);
94 /* The system enters the shutdown mode.
95 * In shutdown mode, the value cannot be NULL.
96 */
97 UINT32 (*shutdownSuspend)(VOID);
98 /* The system recovers from shutdown.
99 * In shutdown mode, the value cannot be NULL.
100 */
101 VOID (*shutdownResume)(VOID);
103
104/**
105 * @ingroup los_pm
106 * @brief Register a power management node.
107 *
108 * @par Description:
109 * This API is used to register a power management node.
110 *
111 * @attention None.
112 *
113 * @param type [IN] The types supported by the PM module.
114 * @param node [IN] power management node.
115 *
116 * @retval error code, LOS_OK means success.
117 * @par Dependency:
118 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
119 * @see LOS_PmUnregister
120 */
121UINT32 LOS_PmRegister(LOS_PmNodeType type, VOID *node);
122
123/**
124 * @ingroup los_pm
125 * @brief Unregister a power management node.
126 *
127 * @par Description:
128 * This API is used to unregister a power management node.
129 *
130 * @attention None.
131 *
132 * @param type [IN] The types supported by the PM module.
133 * @param node [IN] power management node.
134 *
135 * @retval error code, LOS_OK means success.
136 * @par Dependency:
137 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
138 * @see LOS_PmRegister
139 */
140UINT32 LOS_PmUnregister(LOS_PmNodeType type, VOID *node);
141
142/**
143 * @ingroup los_pm
144 * @brief Set the system wake up flag.
145 *
146 * @par Description:
147 * This API is used to set the system wake-up flag.
148 *
149 * @attention None.
150 *
151 * @param None.
152 *
153 * @retval None.
154 * @par Dependency:
155 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
156 * @see
157 */
158VOID LOS_PmWakeSet(VOID);
159
160/**
161 * @ingroup los_pm
162 * @brief Get the low power mode of the current system.
163 *
164 * @par Description:
165 * This API is used to get the low power mode of the current system.
166 *
167 * @attention None.
168 *
169 * @param None.
170 *
171 * @retval error code, LOS_OK means success.
172 * @par Dependency:
173 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
174 * @see
175 */
177
178/**
179 * @ingroup los_pm
180 * @brief Set low power mode.
181 *
182 * @par Description:
183 * This API is used to set low power mode.
184 *
185 * @attention None.
186 *
187 * @param mode [IN] low power mode.
188 *
189 * @retval error code, LOS_OK means success.
190 * @par Dependency:
191 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
192 * @see LOS_PmModeGet
193 */
195
196/**
197 * @ingroup los_pm
198 * @brief Get the low power mode of the current system.
199 *
200 * @par Description:
201 * This API is used to get the low power mode of the current system.
202 *
203 * @attention None.
204 *
205 * @param None.
206 *
207 * @retval Number of locks held.
208 * @par Dependency:
209 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
210 * @see
211 */
213
214/**
215 * @ingroup los_pm
216 * @brief Request to obtain the lock in current mode, so that the system will not enter
217 * this mode when it enters the idle task next time.
218 *
219 * @par Description:
220 * This API is used to obtain the lock in current mode.
221 *
222 * @attention None.
223 *
224 * @param name [IN] Who requests the lock.
225 *
226 * @retval error code, LOS_OK means success.
227 * @par Dependency:
228 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
229 * @see LOS_PmLockRelease
230 */
231UINT32 LOS_PmLockRequest(const CHAR *name);
232
233/**
234 * @ingroup los_pm
235 * @brief Request to obtain the lock in current mode, so that the system will not enter
236 * this mode when it enters the idle task next time. After the specified interval, the
237 * lock is automatically released.
238 *
239 * @par Description:
240 * This API is used to obtain the delay lock in current mode.
241 *
242 * @attention None.
243 *
244 * @param name [IN] Who requests the lock.
245 * @param millisecond [IN] Specifies the time to automatically release the lock.
246 *
247 * @retval error code, LOS_OK means success.
248 * @par Dependency:
249 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
250 * @see LOS_PmLockRelease
251 */
252UINT32 LOS_PmTimeLockRequest(const CHAR *name, UINT64 millisecond);
253
254/**
255 * @ingroup los_pm
256 * @brief Release the lock in current mode so that the next time the system enters
257 * the idle task, it will enter this mode.
258 *
259 * @par Description:
260 * This API is used to release the lock in current mode.
261 *
262 * @attention None.
263 *
264 * @param name [IN] Who releases the lock.
265 *
266 * @retval error code, LOS_OK means success.
267 * @par Dependency:
268 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
269 * @see LOS_PmLockRequest
270 */
271UINT32 LOS_PmLockRelease(const CHAR *name);
272
273/**
274 * @ingroup los_pm
275 * @brief Gets the current PM lock status.
276 *
277 * @par Description:
278 * This API is used to Get the current PM lock status.
279 *
280 * @attention None.
281 *
282 * @param None.
283 *
284 * @retval Number of awakening sources of the device.
285 * @par Dependency:
286 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
287 * @see
288 */
290
291/**
292 * @ingroup los_pm
293 * @brief The system enters the low-power flow.
294 *
295 * @par Description:
296 * This API is used to enter the system into a low-power process.
297 *
298 * @attention None.
299 *
300 * @param wakeCount [IN] Number of wake sources.
301 *
302 * @retval error code, LOS_OK means success.
303 * @par Dependency:
304 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
305 * @see
306 */
307UINT32 LOS_PmSuspend(UINT32 wakeCount);
308
309/**
310 * @ingroup los_pm
311 * @brief Output the locking information of the pm lock.
312 *
313 * @par Description:
314 * This API is used to output the locking information of the pm lock.
315 *
316 * @attention None.
317 *
318 * @param m [IN] .
319 *
320 * @retval error code, LOS_OK means success.
321 * @par Dependency:
322 * <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
323 * @see LOS_PmLockRequest
324 */
325VOID LOS_PmLockInfoShow(struct SeqBuf *m);
326
327#endif
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
UINT32 LOS_PmUnregister(LOS_PmNodeType type, VOID *node)
Unregister a power management node.
Definition: los_pm.c:367
UINT32 LOS_PmModeSet(LOS_SysSleepEnum mode)
Set low power mode.
Definition: los_pm.c:411
VOID LOS_PmLockInfoShow(struct SeqBuf *m)
Output the locking information of the pm lock.
Definition: los_pm.c:455
UINT32 LOS_PmLockCountGet(VOID)
Get the low power mode of the current system.
Definition: los_pm.c:443
UINT32 LOS_PmReadLock(VOID)
Gets the current PM lock status.
Definition: los_pm.c:664
LOS_SysSleepEnum
Definition: los_pm.h:41
@ LOS_SYS_DEEP_SLEEP
Definition: los_pm.h:44
@ LOS_SYS_LIGHT_SLEEP
Definition: los_pm.h:43
@ LOS_SYS_SHUTDOWN
Definition: los_pm.h:45
@ LOS_SYS_NORMAL_SLEEP
Definition: los_pm.h:42
UINT32 LOS_PmLockRequest(const CHAR *name)
Request to obtain the lock in current mode, so that the system will not enter this mode when it enter...
Definition: los_pm.c:543
UINT32 LOS_PmSuspend(UINT32 wakeCount)
The system enters the low-power flow.
Definition: los_pm.c:674
LOS_PmNodeType
Definition: los_pm.h:48
@ LOS_PM_TYPE_TICK_TIMER
Definition: los_pm.h:50
@ LOS_PM_TYPE_DEVICE
Definition: los_pm.h:49
@ LOS_PM_TYPE_SYSCTRL
Definition: los_pm.h:51
UINT32 LOS_PmLockRelease(const CHAR *name)
Release the lock in current mode so that the next time the system enters the idle task,...
Definition: los_pm.c:552
VOID LOS_PmWakeSet(VOID)
Set the system wake up flag.
Definition: los_pm.c:390
UINT32 LOS_PmTimeLockRequest(const CHAR *name, UINT64 millisecond)
Request to obtain the lock in current mode, so that the system will not enter this mode when it enter...
Definition: los_pm.c:629
UINT32 LOS_PmRegister(LOS_PmNodeType type, VOID *node)
Register a power management node.
Definition: los_pm.c:319
LOS_SysSleepEnum LOS_PmModeGet(VOID)
Get the low power mode of the current system.
Definition: los_pm.c:400
long unsigned int UINT64
Definition: los_typedef.h:66
unsigned int UINT32
Definition: los_typedef.h:57
char CHAR
Definition: los_typedef.h:63