/*---------------------------------------------------------------------------* Project: Cafe File: OSSystemLog.h Description: Public interface header for logging facility Copyright (C) Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #ifndef __OSSYSTEMLOG_H__ #define __OSSYSTEMLOG_H__ #include #define OS_ATOMIC_DONT_INLINE #include #undef OS_ATOMIC_DONT_INLINE #include #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------* * * Constants defined for this file * -- #Defines -- * *---------------------------------------------------------------------------*/ /* * Categories */ #define OS_LOG_MAX_CATEGORIES 256 #define OS_LOG_CATEGORY_ALL OS_LOG_MAX_CATEGORIES /* wildcard */ /* These are all the usermode categories */ #define OS_LOG_CATEGORY_FIRST 0 #define OS_LOG_CATEGORY_OS OS_LOG_CATEGORY_FIRST #define OS_LOG_CATEGORY_OSREPORT 1 #define OS_LOG_CATEGORY_LOADER 2 #define OS_LOG_CATEGORY_APP 3 #define OS_LOG_CATEGORY_GFX 4 #define OS_LOG_CATEGORY_DRC 5 #define OS_LOG_CATEGORY_SOUND 6 #define OS_LOG_CATEGORY_FS 7 #define OS_LOG_CATEGORY_CUSTOM_RANGE_START 128 /* * add more usermode log categories here... */ #define OS_LOG_CATEGORY_LAST (OS_LOG_MAX_CATEGORIES-1) /* * Levels */ #define OS_LOG_LEVEL_NOISE 0 #define OS_LOG_LEVEL_NOTICE 1 #define OS_LOG_LEVEL_WARNING 2 #define OS_LOG_LEVEL_ERROR 3 #define OS_LOG_MAX_LEVELS 4 #define OS_LOG_LEVEL_DEFAULT OS_LOG_LEVEL_NOISE /* default usermode log level */ /* used by pretty print routines */ #define OS_LOG_LEVEL_NAMES {"NOISE","NOTICE","WARNING","ERROR","!!!Invalid!!!"} /* * useCase in OS_LOG_HEADER */ #define OS_LOG_HEADER_USE_CASE_DEFAULT 0 #define OS_LOG_HEADER_USE_CASE_FUNC_ENTRY 1 #define OS_LOG_HEADER_USE_CASE_FUNC_EXIT 2 /* * dataFormat in OS_LOG_HEADER */ #define OS_LOG_HEADER_PRINT_DATA_FORMAT 1 #define OS_LOG_HEADER_FILEFUNC_DATA_FORMAT 2 #define OS_LOG_HEADER_RAW_DATA_FORMAT 3 /* * Data Options Bit Definitions */ #define OS_LOG_DATA_OPT_ARGC_SHIFT 0 #define OS_LOG_DATA_OPT_ARGC_MASK (0xf< (y)) ? (x) : (y)) /*---------------------------------------------------------------------------* * * Data types defined for this file * -- Structs, Typedefs, Enums -- * *---------------------------------------------------------------------------*/ PACKED_STRUCT_BEGIN /* This structure is used for reporting a single log entry back to the user. */ typedef struct { u32 size; /* Size of this header and any associated data beyond, must be at least sizeof(OS_LOG_HEADER) to be valid */ u64 timeStamp; u32 tag; // u32 session : 8; u32 seqByte : 8; u32 argc : 4; u32 keyArg : 1; u32 ctxArg : 1; u32 dataFormat : 3; u32 useCase : 3; u32 unused1 : 4; // u32 intEnabled : 1; u32 intPending : 1; u32 coreId : 2; u32 userMode : 1; u32 procId : 6; u32 procCfg : 2; u32 level : 8; u32 category : 8; u32 unused2 : 3; }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_HEADER; typedef union { struct { u32 key; u32 arg0; /* start of arguments */ }PACKED_STRUCT_ATTRIBUTE keyOnly; struct { u32 ctx; u32 arg0; /* start of arguments */ }PACKED_STRUCT_ATTRIBUTE ctxOnly; struct { u32 key; u32 ctx; u32 arg0; /* start of arguments */ }PACKED_STRUCT_ATTRIBUTE keyAndCtx; }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_PAYLOAD; typedef struct { u16 lineNumber; char funcName[OS_LOG_FUNC_NAME_SIZE_LIMIT]; }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_FILEFUNC_DATA; typedef struct { u32 category; u32 level; }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_FILTER_POLICY; typedef struct { u32 totalSize; u32 numberOfEntries; u32 currentSession; OS_LOG_ENTRY_HEADER firstEntry; /* the first of numberOfEntries */ }PACKED_STRUCT_ATTRIBUTE OS_LOG_RETRIEVAL; /* OSLogFunc() can generate this much total data */ #define OS_LOG_MAX_FILEFUNC_DATA_SIZE \ ((OS_LOG_ENTRY_MAX_ARGS*sizeof(u32)) + sizeof(OS_LOG_ENTRY_FILEFUNC_DATA)) PACKED_STRUCT_END /*---------------------------------------------------------------------------* * * -- Interface Function Prototypes -- * *---------------------------------------------------------------------------*/ /* OS Log Utility */ void OSLogBuffer(u32 category, u32 level, u32 options, void* pBuffer, size_t size); void OSLogArgs(u32 category, u32 level, u32 options, u32 seqByte, u32 arg0, u32 arg1, u32 arg2, u32 arg3); void OSLogFunc(u32 category, u32 level, u32 options, const char* funcName, u32 funcNameSize, u32 lineNumber, u32* argv, u32 argc); void OSLogPrintf (u32 category, u32 level, u32 options, const char * fmt, ...); BOOL OSLogReport(u32 retrievalOptions, void* pWorkspace, u32 workSpaceSize); BOOL OSLogRetrieve(u32 retrievalOptions, OS_LOG_RETRIEVAL* pRetrieval, u32 maxRetrievedSize); BOOL OSLogSaveCrashDump(void); void OSLogSetFilterPolicy(u32 category, u32 minimumLevel); /* Useful macros */ #if APP_TRACE_ENABLED /* * APP_KEYTRACE_xARG * Sequence byte, key word and up to three arbitrary word arguments, * uses only one block per entry. */ #define APP_KEYTRACE_3ARG(_seqByte_,_key_,_arg0_,_arg1_,_arg2_) \ OSLogArgs(OS_LOG_CATEGORY_OS,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_KEY_ARG_MASK|3,(u32)(_seqByte_), \ (u32)(_key_),(u32)(_arg0_),(u32)(_arg1_),(u32)(_arg2_)) #define APP_KEYTRACE_2ARG(_seqByte_,_key_,_arg0_,_arg1_) \ OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_KEY_ARG_MASK|2, \ (u32)(_seqByte_),(u32)(_key_),(u32)(_arg0_),(u32)(_arg1_),0) #define APP_KEYTRACE_1ARG(_seqByte_,_key_,_arg0_) \ OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_KEY_ARG_MASK|1, \ (u32)(_seqByte_),(u32)(_key_),(u32)(_arg0_),0,0) #define APP_KEYTRACE_0ARG(_seqByte_,_key_) \ OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_KEY_ARG_MASK|0, \ (u32)(_seqByte_),(u32)(_key_),0,0,0) /* * APP_TRACE_xARG_OPT * Logs function name, source file line number and up to eight arbitrary * word arguments. Category, level and option fields are exposed as general parameters. */ #define APP_TRACE_8ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_,_arg6_,_arg7_) { \ u32 _args_[8]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_;_args_[6]=(u32)_arg6_;_args_[7]=(u32)_arg7_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,8); } #define APP_TRACE_7ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_,_arg6_) { \ u32 _args_[7]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_;_args_[6]=(u32)_arg6_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,7); } #define APP_TRACE_6ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_) { \ u32 _args_[6]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,6); } #define APP_TRACE_5ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_) { \ u32 _args_[5]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ _args_[4]=(u32)_arg4_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,5); } #define APP_TRACE_4ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_){ \ u32 _args_[4]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,4); } #define APP_TRACE_3ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_) { \ u32 _args_[3]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,3); } #define APP_TRACE_2ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_) { \ u32 _args_[2]; \ _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,2); } #define APP_TRACE_1ARG_OPT(_cat_,_level_,_opt_,_arg0_) { \ u32 _args_[1]; \ _args_[0]=(u32)_arg0_; \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,_args_,1); } #define APP_TRACE_0ARG_OPT(_cat_,_level_,_opt_) { \ OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ sizeof(__FUNCTION__),__LINE__,NULL,0); } /* * APP_TRACE_... * Logs general "APP" category function trace, with varied argument counts */ /* "notice" level */ #define APP_TRACE_1ARG(_arg0_) \ APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_) #define APP_TRACE_2ARG(_arg0_,_arg1_) \ APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_) #define APP_TRACE_3ARG(_arg0_,_arg1_,_arg2_) \ APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_) #define APP_TRACE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_) #define APP_TRACE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_) #define APP_TRACE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_) #define APP_TRACE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) \ APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) /* "noise" level */ #define APP_TRACE_NOISE_1ARG(_arg0_) \ APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_) #define APP_TRACE_NOISE_2ARG(_arg0_,_arg1_) \ APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_) #define APP_TRACE_NOISE_3ARG(_arg0_,_arg1_,_arg2_) \ APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_) #define APP_TRACE_NOISE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_) #define APP_TRACE_NOISE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_) #define APP_TRACE_NOISE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_) #define APP_TRACE_NOISE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_NOISE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) \ APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) /* * APP_TRACE_ENTER... * Logs "APP" category function entry, with varied argument counts */ /* "notice" level */ #define APP_TRACE_ENTER() \ APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK) #define APP_TRACE_ENTER_1ARG(_arg0_) \ APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_) #define APP_TRACE_ENTER_2ARG(_arg0_,_arg1_) \ APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_) #define APP_TRACE_ENTER_3ARG(_arg0_,_arg1_,_arg2_) \ APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_) #define APP_TRACE_ENTER_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_) #define APP_TRACE_ENTER_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_) #define APP_TRACE_ENTER_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_) #define APP_TRACE_ENTER_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_ENTER_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) \ APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) /* "noise" level */ #define APP_TRACE_NOISE_ENTER() \ APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ OS_LOG_DATA_OPT_FUNC_ENTER_MASK) /* * APP_TRACE_EXIT... * Logs "APP" category function exit, with varied argument counts */ /* "notice" level */ #define APP_TRACE_EXIT() \ APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK) #define APP_TRACE_EXIT_1ARG(_arg0_) \ APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_) #define APP_TRACE_EXIT_2ARG(_arg0_,_arg1_) \ APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_) #define APP_TRACE_EXIT_3ARG(_arg0_,_arg1_,_arg2_) \ APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_) #define APP_TRACE_EXIT_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_) #define APP_TRACE_EXIT_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_) #define APP_TRACE_EXIT_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_) #define APP_TRACE_EXIT_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_EXIT_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) \ APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) #else // APP_TRACE_ENABLED is not enabled #define APP_KEYTRACE_3ARG(_seqByte_,_key_,_arg0_,_arg1_,_arg2_) #define APP_KEYTRACE_2ARG(_seqByte_,_key_,_arg0_,_arg1_) #define APP_KEYTRACE_1ARG(_seqByte_,_key_,_arg0_) #define APP_KEYTRACE_0ARG(_seqByte_,_key_) #define APP_TRACE_8ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_,_arg6_,_arg7_) #define APP_TRACE_7ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_,_arg6_) #define APP_TRACE_6ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_,_arg5_) #define APP_TRACE_5ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ _arg4_) #define APP_TRACE_4ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_) #define APP_TRACE_3ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_) #define APP_TRACE_2ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_) #define APP_TRACE_1ARG_OPT(_cat_,_level_,_opt_,_arg0_) #define APP_TRACE_0ARG_OPT(_cat_,_level_,_opt_) #define APP_TRACE_1ARG(_arg0_) #define APP_TRACE_2ARG(_arg0_,_arg1_) #define APP_TRACE_3ARG(_arg0_,_arg1_,_arg2_) #define APP_TRACE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) #define APP_TRACE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) #define APP_TRACE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) #define APP_TRACE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) #define APP_TRACE_NOISE_1ARG(_arg0_) #define APP_TRACE_NOISE_2ARG(_arg0_,_arg1_) #define APP_TRACE_NOISE_3ARG(_arg0_,_arg1_,_arg2_) #define APP_TRACE_NOISE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) #define APP_TRACE_NOISE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) #define APP_TRACE_NOISE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) #define APP_TRACE_NOISE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_NOISE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) #define APP_TRACE_ENTER() #define APP_TRACE_ENTER_1ARG(_arg0_) #define APP_TRACE_ENTER_2ARG(_arg0_,_arg1_) #define APP_TRACE_ENTER_3ARG(_arg0_,_arg1_,_arg2_) #define APP_TRACE_ENTER_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) #define APP_TRACE_ENTER_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) #define APP_TRACE_ENTER_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) #define APP_TRACE_ENTER_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_ENTER_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) #define APP_TRACE_NOISE_ENTER() #define APP_TRACE_EXIT() #define APP_TRACE_EXIT_1ARG(_arg0_) #define APP_TRACE_EXIT_2ARG(_arg0_,_arg1_) #define APP_TRACE_EXIT_3ARG(_arg0_,_arg1_,_arg2_) #define APP_TRACE_EXIT_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) #define APP_TRACE_EXIT_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) #define APP_TRACE_EXIT_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) #define APP_TRACE_EXIT_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) #define APP_TRACE_EXIT_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ _arg7_) #endif // APP_TRACE_ENABLED #ifdef __cplusplus } #endif #endif // __OSSYSTEMLOG_H__