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_ERR_H 16 #define PRT_ERR_H 17 18 #include "prt_typedef.h" 19 20 #ifdef __cplusplus 21 #if __cplusplus 22 extern "C" { 23 #endif /* __cpluscplus */ 24 #endif /* __cpluscplus */ 25 26 /* 27 * @brief 错误处理钩子函数。 28 * 29 * @par 描述 30 * 错误处理的钩子函数,用户自定义的错误处理函数必须要符合该钩子函数的参数要求。 31 * 32 * @attention 无。 33 * 34 * @param fileName [IN] 类型#const char *,出错文件名。 35 * @param lineNo [IN] 类型#U32,出错的行号。 36 * @param errorNo [IN] 类型#U32,用户定义的错误码。 37 * @param paraLen [IN] 类型#U32,入参para的长度。 38 * @param para [IN] 类型#void *,记录用户对于错误的描述或其他。 39 * 40 * @retval 无 41 * @par 依赖 42 * <li>prt_err.h:该接口声明所在的头文件。</li> 43 * @see 无 44 */ 45 typedef void (*ErrHandleFunc)(const char *fileName, U32 lineNo, U32 errorNo, U32 paraLen, void *para); 46 47 /* 48 * @brief 处理错误。 49 * 50 * @par 描述 51 * 用户或者OS内部使用该函数回调#PRT_ErrRegHook中注册的钩子函数。另外,OS内部使用此接口时,还会记录相关错误码。 52 * @attention 53 * <ul> 54 * <li>系统不会做入参检测,用户PRT_ErrHandle会全部当做钩子入参输入。</li> 55 * <li>用户调用PRT_ErrHandle接口时,只会回调用户注册钩子函数,不会进行错误码记录 56 * (致命错误也不会记录Trace轨迹和触发异常)。</li> 57 * </ul> 58 * 59 * @param fileName [IN] 类型#const char *,错误发生的文件名,可以用__FILE__作为输入。 60 * @param lineNo [IN] 类型#U32,错误发生所在的行号,可以用__LINE__作为输入。 61 * @param errorNo [IN] 类型#U32,用户输入的错误码。 62 * @param paraLen [IN] 类型#U32,入参para的长度。 63 * @param para [OUT] 类型#void *,记录用户对于错误的描述或其他(地址)。 64 * 65 * @retval #OS_OK 0x00000000,处理错误成功。 66 * @par 依赖 67 * <li>prt_err.h: 该接口声明所在的头文件。</li> 68 * @see 无 69 */ 70 extern U32 PRT_ErrHandle(const char *fileName, U32 lineNo, U32 errorNo, U32 paraLen, void *para); 71 72 /* 73 * @brief 注册用户错误处理的钩子函数。 74 * 75 * @par 描述 76 * 注册hook作为用户钩子函数,在调用PRT_ErrHandle接口进行错误处理时对该钩子进行调用。 77 * @attention 78 * <ul> 79 * <li>若入参hook为NULL,则为取消钩子。</li> 80 * <li>不允许重复或覆盖注册。</li> 81 * <li>用户定义的钩子函数必须符合#PRT_ERRORHANDLE_FUNC定义的形式,而且只能定义一个钩子函数。</li> 82 * <li>用户调用PRT_ErrRegHook注册回调钩子函数时,钩子函数里面不能有调用PRT_ErrHandle 83 * 或者调用OS函数发生上报错误码的情况,否则可能会进入死循环,需由用户保证。</li> 84 * <li>用户调用PRT_ErrRegHook注册回调钩子函数时,钩子函数里面如有单次上报的错误信息(只有第一次调用会执行), 85 * 那么会先记录钩子中错误信息,再记录发生错误时的错误信息。</li> 86 * </ul> 87 * 88 * @param hook [IN] 类型#ErrHandleFunc,用户钩子函数的宏定义。 89 * 90 * @retval #OS_OK 0x00000000,注册成功。 91 * @retval #其它值,注册失败。 92 * @par 依赖 93 * <li>prt_err.h:该接口声明所在的头文件。</li> 94 * @see 无 95 */ 96 extern U32 PRT_ErrRegHook(ErrHandleFunc hook); 97 98 #ifdef __cplusplus 99 #if __cplusplus 100 } 101 #endif /* __cpluscplus */ 102 #endif /* __cpluscplus */ 103 104 #endif /* PRT_ERR_H */ 105