• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2009-12-22
13  * Description: 事件模块的对外头文件。
14  */
15 #ifndef PRT_EVENT_H
16 #define PRT_EVENT_H
17 
18 #include "prt_module.h"
19 #include "prt_errno.h"
20 
21 #ifdef __cplusplus
22 #if __cplusplus
23 extern "C" {
24 #endif /* __cpluscplus */
25 #endif /* __cpluscplus */
26 
27 /*
28  * 事件等待时间设定:事件最大等待超时值设置。
29  */
30 #define OS_EVENT_WAIT_FOREVER 0xFFFFFFFF
31 
32 /*
33  * 事件读取模式:表示期望eventMask中的任何一个事件。
34  */
35 #define OS_EVENT_ANY 0x00000001
36 
37 /*
38  * 事件读取模式:表示期望接收eventMask中的所有事件。
39  */
40 #define OS_EVENT_ALL 0x00000010
41 
42 /*
43  * 事件读取模式:表示等待接收事件。
44  */
45 #define OS_EVENT_WAIT 0x00010000
46 
47 /*
48  * 事件读取模式:表示不等待接收事件。
49  */
50 #define OS_EVENT_NOWAIT 0x00100000
51 
52 /*
53  * 事件错误码:事件读取失败,期望事件没有发生。
54  *
55  * 值: 0x02000b01
56  *
57  * 解决方案:可使用等待读取事件。
58  */
59 #define OS_ERRNO_EVENT_READ_FAILED OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x01)
60 
61 /*
62  * 事件错误码:读取事件超时。
63  *
64  * 值: 0x02000b02
65  *
66  * 解决方案:增大事件读取等待时间,或其他任务给该任务写事件操作。
67  */
68 #define OS_ERRNO_EVENT_READ_TIMEOUT OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x02)
69 
70 /*
71  * 事件错误码:写事件时入参任务ID非法。
72  *
73  * 值: 0x02000b03
74  *
75  * 解决方案: 请输入合法任务ID。
76  */
77 #define OS_ERRNO_EVENT_TASKID_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x03)
78 
79 /*
80  * 事件错误码:写事件时入参任务未创建。
81  *
82  * 值: 0x02000b04
83  *
84  * 解决方案: 请输入合法任务ID,或先创建任务再对其写事件操作。
85  */
86 #define OS_ERRNO_EVENT_TSK_NOT_CREATED OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x04)
87 
88 /*
89  * 事件错误码:读事件时EVENTMASK入参非法,入参不能为0。
90  *
91  * 值: 0x02000b05
92  *
93  * 解决方案: 请输入合法值。
94  */
95 #define OS_ERRNO_EVENT_EVENTMASK_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x05)
96 
97 /*
98  * 事件错误码:只能在任务中进行读事件操作。
99  *
100  * 值: 0x02000b06
101  *
102  * 解决方案: 请在任务中进行读事件操作。
103  */
104 #define OS_ERRNO_EVENT_READ_NOT_IN_TASK OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x06)
105 
106 /*
107  * 事件错误码
108  * 读事件接口中flags入参非法,该入参为(OS_EVENT_ANY,OS_EVENT_ALL)中一个和
109  * (OS_EVENT_WAIT,OS_EVENT_NOWAIT)中的一个标识或的结果;
110  * OS_EVENT_WAIT模式下,等待时间必须非零。
111  *
112  * 值: 0x02000b07
113  *
114  * 解决方案: 请输入合法的入参。
115  */
116 #define OS_ERRNO_EVENT_FLAGS_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x07)
117 
118 /*
119  * 事件错误码:在锁任务调度状态下,禁止任务阻塞于读事件。
120  *
121  * 值: 0x02000b08
122  *
123  * 解决方案: 请解锁任务调度后,再进行读事件。
124  */
125 #define OS_ERRNO_EVENT_READ_IN_LOCK OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x08)
126 
127 /*
128  * 事件错误码:写事件时EVENT入参非法,入参不能为0。
129  *
130  * 值: 0x02000b09
131  *
132  * 解决方案: 请输入合法值。
133  */
134 #define OS_ERRNO_EVENT_INVALID OS_ERRNO_BUILD_ERROR(OS_MID_EVENT, 0x09)
135 
136 /*
137  * @brief 读事件。
138  *
139  * @par 描述
140  * 读取当前任务的指定掩码为eventMask的事件,可以一次性读取多个事件。事件读取成功后,被读取的事件将被清除。
141  * @attention
142  * <ul>
143  * <li>读取模式可以选择读取任意事件和读取所有事件。</li>
144  * <li>等待模式可以选择等待和不等待,可等待指定时间、永久等待。</li>
145  * <li>当读取事件没有发生且为等待模式时,会发生任务调度,锁任务状态除外。</li>
146  * <li>不能在IDLE任务中读事件,需要用户自行保证。</li>
147  * <li>不能在系统初始化之前调用读事件接口。</li>
148  * </ul>
149  *
150  * @param eventMask [IN]  类型#U32,设置要读取的事件掩码,每个bit位对应一个事件,1表示要读取。该入参不能为0。
151  * @param flags     [IN]  类型#U32,读取事件所采取的策略, 为(OS_EVENT_ANY,OS_EVENT_ALL)中一个和(OS_EVENT_WAIT,
152  * OS_EVENT_NOWAIT)中的一个标识或的结果。#OS_EVENT_ALL表示期望接收eventMask中的所有事件,
153  * #OS_EVENT_ANY表示等待eventMask中的任何一个事件。#OS_EVENT_WAIT表示若期望事件没有发生,等待接收,
154  * #OS_EVENT_NOWAIT表示若期望事件没有发生,将不会等待接收。
155  * @param timeOut   [IN]  类型#U32,等待超时时间,单位为tick,取值(0~0xFFFFFFFF]。当flags标志为OS_EVENT_WAIT,
156  * 这个参数才有效。若值为#OS_EVENT_WAIT_FOREVER,则表示永久等待。
157  * @param events    [OUT] 类型#U32 *,用于保存接收到的事件的指针。如果不需要输出,可以填写NULL。
158  *
159  * @retval #OS_OK  0x00000000,操作成功。
160  * @retval #其它值,操作失败。
161  *
162  * @par 依赖
163  * <ul>
164  * @li prt_event.h:该接口声明所在的头文件。
165  * </ul>
166  * @see PRT_EventWrite
167  */
168 extern U32 PRT_EventRead(U32 eventMask, U32 flags, U32 timeOut, U32 *events);
169 
170 /*
171  * @brief 写事件。
172  *
173  * @par 描述
174  * 写任务ID为taskId的指定事件,可以一次性写多个事件,可以在UniProton接管的中断中调用。
175  * @attention
176  * <ul>
177  * <li>若指定任务正在等待读取写入的事件,则会激活指定任务,并发生任务调度。</li>
178  * <li>不能向IDLE任务写事件,需要用户自行保证。</li>
179  * </ul>
180  *
181  * @param taskId [IN]  类型#U32,任务ID,表示要对某个任务进行写事件操作。
182  * @param events [IN]  类型#U32,事件号,每个bit对应一个事件。
183  *
184  * @retval #OS_OK  0x00000000,操作成功。
185  * @retval #其它值,操作失败。
186  * @par 依赖
187  * <ul>
188  * @li prt_event.h:该接口声明所在的头文件。
189  * </ul>
190  * @see PRT_EventRead
191  */
192 extern U32 PRT_EventWrite(U32 taskId, U32 events);
193 
194 #ifdef __cplusplus
195 #if __cplusplus
196 }
197 #endif /* __cpluscplus */
198 #endif /* __cpluscplus */
199 
200 #endif /* PRT_EVENT_H */
201