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