1 /*---------------------------------------------------------------------------* 2 Project: Cafe 3 File: OSSystemLog.h 4 Description: Public interface header for logging facility 5 6 Copyright (C) Nintendo. All rights reserved. 7 8 These coded instructions, statements, and computer programs contain 9 proprietary information of Nintendo of America Inc. and/or Nintendo 10 Company Ltd., and are protected by Federal copyright law. They may 11 not be disclosed to third parties or copied or duplicated in any form, 12 in whole or in part, without the prior written consent of Nintendo. 13 14 *---------------------------------------------------------------------------*/ 15 #ifndef __OSSYSTEMLOG_H__ 16 #define __OSSYSTEMLOG_H__ 17 18 #include <types.h> 19 20 #define OS_ATOMIC_DONT_INLINE 21 #include <cafe/os/OSAtomic.h> 22 #undef OS_ATOMIC_DONT_INLINE 23 #include <cafe/os/OSTime.h> 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 /*---------------------------------------------------------------------------* 30 * 31 * Constants defined for this file 32 * -- #Defines -- 33 * 34 *---------------------------------------------------------------------------*/ 35 /* 36 * Categories 37 */ 38 #define OS_LOG_MAX_CATEGORIES 256 39 #define OS_LOG_CATEGORY_ALL OS_LOG_MAX_CATEGORIES /* wildcard */ 40 41 /* These are all the usermode categories */ 42 #define OS_LOG_CATEGORY_FIRST 0 43 #define OS_LOG_CATEGORY_OS OS_LOG_CATEGORY_FIRST 44 #define OS_LOG_CATEGORY_OSREPORT 1 45 #define OS_LOG_CATEGORY_LOADER 2 46 #define OS_LOG_CATEGORY_APP 3 47 #define OS_LOG_CATEGORY_GFX 4 48 #define OS_LOG_CATEGORY_DRC 5 49 #define OS_LOG_CATEGORY_SOUND 6 50 #define OS_LOG_CATEGORY_FS 7 51 #define OS_LOG_CATEGORY_CUSTOM_RANGE_START 128 52 /* 53 * add more usermode log categories here... 54 */ 55 #define OS_LOG_CATEGORY_LAST (OS_LOG_MAX_CATEGORIES-1) 56 57 58 /* 59 * Levels 60 */ 61 #define OS_LOG_LEVEL_NOISE 0 62 #define OS_LOG_LEVEL_NOTICE 1 63 #define OS_LOG_LEVEL_WARNING 2 64 #define OS_LOG_LEVEL_ERROR 3 65 #define OS_LOG_MAX_LEVELS 4 66 #define OS_LOG_LEVEL_DEFAULT OS_LOG_LEVEL_NOISE /* default usermode log level */ 67 68 /* used by pretty print routines */ 69 #define OS_LOG_LEVEL_NAMES {"NOISE","NOTICE","WARNING","ERROR","!!!Invalid!!!"} 70 71 /* 72 * useCase in OS_LOG_HEADER 73 */ 74 #define OS_LOG_HEADER_USE_CASE_DEFAULT 0 75 #define OS_LOG_HEADER_USE_CASE_FUNC_ENTRY 1 76 #define OS_LOG_HEADER_USE_CASE_FUNC_EXIT 2 77 78 /* 79 * dataFormat in OS_LOG_HEADER 80 */ 81 #define OS_LOG_HEADER_PRINT_DATA_FORMAT 1 82 #define OS_LOG_HEADER_FILEFUNC_DATA_FORMAT 2 83 #define OS_LOG_HEADER_RAW_DATA_FORMAT 3 84 85 /* 86 * Data Options Bit Definitions 87 */ 88 #define OS_LOG_DATA_OPT_ARGC_SHIFT 0 89 #define OS_LOG_DATA_OPT_ARGC_MASK (0xf<<OS_LOG_DATA_OPT_ARGC_SHIFT) 90 #define OS_LOG_DATA_OPT_DATA_FORMAT_SHIFT 4 91 #define OS_LOG_DATA_OPT_DATA_FORMAT_MASK (0xf<<OS_LOG_DATA_OPT_DATA_FORMAT_SHIFT) 92 #define OS_LOG_DATA_OPT_PRINT_FORMAT_MASK (OS_LOG_HEADER_PRINT_DATA_FORMAT<<OS_LOG_DATA_OPT_DATA_FORMAT_SHIFT) 93 #define OS_LOG_DATA_OPT_FILEFUNC_FORMAT_MASK (OS_LOG_HEADER_FILEFUNC_DATA_FORMAT<<OS_LOG_DATA_OPT_DATA_FORMAT_SHIFT) 94 #define OS_LOG_DATA_OPT_RAW_FORMAT_MASK (OS_LOG_HEADER_RAW_DATA_FORMAT<<OS_LOG_DATA_OPT_DATA_FORMAT_SHIFT) 95 #define OS_LOG_DATA_OPT_PRIVATE_SHIFT 8 96 #define OS_LOG_DATA_OPT_PRIVATE_MASK (1<<OS_LOG_DATA_OPT_PRIVATE_SHIFT) 97 #define OS_LOG_DATA_OPT_FUNC_ENTER_SHIFT 9 98 #define OS_LOG_DATA_OPT_FUNC_ENTER_MASK (1<<OS_LOG_DATA_OPT_FUNC_ENTER_SHIFT) 99 #define OS_LOG_DATA_OPT_FUNC_EXIT_SHIFT 10 100 #define OS_LOG_DATA_OPT_FUNC_EXIT_MASK (1<<OS_LOG_DATA_OPT_FUNC_EXIT_SHIFT) 101 #define OS_LOG_DATA_OPT_KEY_ARG_SHIFT 11 102 #define OS_LOG_DATA_OPT_KEY_ARG_MASK (1<<OS_LOG_DATA_OPT_KEY_ARG_SHIFT) 103 #define OS_LOG_DATA_OPT_CTX_ARG_SHIFT 12 104 #define OS_LOG_DATA_OPT_CTX_ARG_MASK (1<<OS_LOG_DATA_OPT_CTX_ARG_SHIFT) 105 #define OS_LOG_DATA_OPT_DEFAULT_MASK 0x00000000 106 107 /* 108 * Log Retrieval Options Bit Definitions, relevant only 109 * for OSLogReport() 110 */ 111 #define OS_LOG_RETRIEVAL_OPT_DEFAULT_MASK 0 112 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE0_SHIFT 0 113 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE0_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE0_SHIFT) 114 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE1_SHIFT 1 115 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE1_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE1_SHIFT) 116 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE2_SHIFT 2 117 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE2_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_CORE2_SHIFT) 118 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOISE_SHIFT 3 119 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOISE_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOISE_SHIFT) 120 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOTICE_SHIFT 4 121 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOTICE_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOTICE_SHIFT) 122 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_WARNING_SHIFT 5 123 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_WARNING_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_WARNING_SHIFT) 124 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_ERROR_SHIFT 6 125 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_ERROR_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_ERROR_SHIFT) 126 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_MASK (OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOISE_MASK | \ 127 OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_NOTICE_MASK | \ 128 OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_WARNING_MASK | \ 129 OS_LOG_RETRIEVAL_OPT_EXCLUDE_USER_ERROR_MASK) 130 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOISE_SHIFT 7 131 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOISE_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOISE_SHIFT) 132 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOTICE_SHIFT 8 133 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOTICE_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOTICE_SHIFT) 134 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_WARNING_SHIFT 9 135 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_WARNING_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_WARNING_SHIFT) 136 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_ERROR_SHIFT 10 137 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_ERROR_MASK (1<<OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_ERROR_SHIFT) 138 #define OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_MASK (OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOISE_MASK | \ 139 OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_NOTICE_MASK | \ 140 OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_WARNING_MASK | \ 141 OS_LOG_RETRIEVAL_OPT_EXCLUDE_KERNEL_ERROR_MASK) 142 #define OS_LOG_RETRIEVAL_OPT_IGNORE_FILTERS_SHIFT 11 143 #define OS_LOG_RETRIEVAL_OPT_IGNORE_FILTERS_MASK (1<<OS_LOG_RETRIEVAL_OPT_IGNORE_FILTERS_SHIFT) 144 #define OS_LOG_RETRIEVAL_OPT_IGNORE_SESSION_MISMATCH_SHIFT 12 145 #define OS_LOG_RETRIEVAL_OPT_IGNORE_SESSION_MISMATCH (1<<OS_LOG_RETRIEVAL_OPT_IGNORE_SESSION_MISMATCH_SHIFT) 146 147 /* 148 * Limitations 149 */ 150 #define OS_LOG_FUNC_NAME_SIZE_LIMIT 32 151 #define OS_LOG_DATA_SIZE_LIMIT (1024*1024) 152 #define OS_LOG_PRINTF_SIZE_LIMIT 128 153 #define OS_LOG_ENTRY_MAX_ARGS 8 154 155 /* 156 * Macros 157 */ 158 #define KLOG_MIN(x,y) (((x) < (y)) ? (x) : (y)) 159 #define KLOG_MAX(x,y) (((x) > (y)) ? (x) : (y)) 160 161 /*---------------------------------------------------------------------------* 162 * 163 * Data types defined for this file 164 * -- Structs, Typedefs, Enums -- 165 * 166 *---------------------------------------------------------------------------*/ 167 168 PACKED_STRUCT_BEGIN 169 170 /* This structure is used for reporting a single log entry back to the user. */ 171 typedef struct { 172 u32 size; /* Size of this header and any associated data beyond, 173 must be at least sizeof(OS_LOG_HEADER) to be valid */ 174 u64 timeStamp; 175 u32 tag; 176 // 177 u32 session : 8; 178 u32 seqByte : 8; 179 u32 argc : 4; 180 u32 keyArg : 1; 181 u32 ctxArg : 1; 182 u32 dataFormat : 3; 183 u32 useCase : 3; 184 u32 unused1 : 4; 185 // 186 u32 intEnabled : 1; 187 u32 intPending : 1; 188 u32 coreId : 2; 189 u32 userMode : 1; 190 u32 procId : 6; 191 u32 procCfg : 2; 192 u32 level : 8; 193 u32 category : 8; 194 u32 unused2 : 3; 195 }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_HEADER; 196 197 typedef union { 198 struct { 199 u32 key; 200 u32 arg0; /* start of arguments */ 201 }PACKED_STRUCT_ATTRIBUTE keyOnly; 202 struct { 203 u32 ctx; 204 u32 arg0; /* start of arguments */ 205 }PACKED_STRUCT_ATTRIBUTE ctxOnly; 206 struct { 207 u32 key; 208 u32 ctx; 209 u32 arg0; /* start of arguments */ 210 }PACKED_STRUCT_ATTRIBUTE keyAndCtx; 211 }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_PAYLOAD; 212 213 typedef struct { 214 u16 lineNumber; 215 char funcName[OS_LOG_FUNC_NAME_SIZE_LIMIT]; 216 }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_FILEFUNC_DATA; 217 218 typedef struct { 219 u32 category; 220 u32 level; 221 }PACKED_STRUCT_ATTRIBUTE OS_LOG_ENTRY_FILTER_POLICY; 222 223 typedef struct { 224 u32 totalSize; 225 u32 numberOfEntries; 226 u32 currentSession; 227 OS_LOG_ENTRY_HEADER firstEntry; /* the first of numberOfEntries */ 228 }PACKED_STRUCT_ATTRIBUTE OS_LOG_RETRIEVAL; 229 230 /* OSLogFunc() can generate this much total data */ 231 #define OS_LOG_MAX_FILEFUNC_DATA_SIZE \ 232 ((OS_LOG_ENTRY_MAX_ARGS*sizeof(u32)) + sizeof(OS_LOG_ENTRY_FILEFUNC_DATA)) 233 234 PACKED_STRUCT_END 235 236 /*---------------------------------------------------------------------------* 237 * 238 * -- Interface Function Prototypes -- 239 * 240 *---------------------------------------------------------------------------*/ 241 /* OS Log Utility */ 242 void OSLogBuffer(u32 category, u32 level, u32 options, void* pBuffer, 243 size_t size); 244 void OSLogArgs(u32 category, u32 level, u32 options, u32 seqByte, 245 u32 arg0, u32 arg1, u32 arg2, u32 arg3); 246 void OSLogFunc(u32 category, u32 level, u32 options, const char* funcName, 247 u32 funcNameSize, u32 lineNumber, u32* argv, u32 argc); 248 void OSLogPrintf (u32 category, u32 level, u32 options, 249 const char * fmt, ...); 250 BOOL OSLogReport(u32 retrievalOptions, void* pWorkspace, u32 workSpaceSize); 251 BOOL OSLogRetrieve(u32 retrievalOptions, OS_LOG_RETRIEVAL* pRetrieval, 252 u32 maxRetrievedSize); 253 BOOL OSLogSaveCrashDump(void); 254 void OSLogSetFilterPolicy(u32 category, u32 minimumLevel); 255 256 /* Useful macros */ 257 258 #if APP_TRACE_ENABLED 259 260 /* 261 * APP_KEYTRACE_xARG 262 * Sequence byte, key word and up to three arbitrary word arguments, 263 * uses only one block per entry. 264 */ 265 #define APP_KEYTRACE_3ARG(_seqByte_,_key_,_arg0_,_arg1_,_arg2_) \ 266 OSLogArgs(OS_LOG_CATEGORY_OS,OS_LOG_LEVEL_NOTICE, \ 267 OS_LOG_DATA_OPT_KEY_ARG_MASK|3,(u32)(_seqByte_), \ 268 (u32)(_key_),(u32)(_arg0_),(u32)(_arg1_),(u32)(_arg2_)) 269 #define APP_KEYTRACE_2ARG(_seqByte_,_key_,_arg0_,_arg1_) \ 270 OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 271 OS_LOG_DATA_OPT_KEY_ARG_MASK|2, \ 272 (u32)(_seqByte_),(u32)(_key_),(u32)(_arg0_),(u32)(_arg1_),0) 273 #define APP_KEYTRACE_1ARG(_seqByte_,_key_,_arg0_) \ 274 OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 275 OS_LOG_DATA_OPT_KEY_ARG_MASK|1, \ 276 (u32)(_seqByte_),(u32)(_key_),(u32)(_arg0_),0,0) 277 #define APP_KEYTRACE_0ARG(_seqByte_,_key_) \ 278 OSLogArgs(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 279 OS_LOG_DATA_OPT_KEY_ARG_MASK|0, \ 280 (u32)(_seqByte_),(u32)(_key_),0,0,0) 281 282 /* 283 * APP_TRACE_xARG_OPT 284 * Logs function name, source file line number and up to eight arbitrary 285 * word arguments. Category, level and option fields are exposed as general parameters. 286 */ 287 #define APP_TRACE_8ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 288 _arg4_,_arg5_,_arg6_,_arg7_) { \ 289 u32 _args_[8]; \ 290 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ 291 _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_;_args_[6]=(u32)_arg6_;_args_[7]=(u32)_arg7_; \ 292 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 293 sizeof(__FUNCTION__),__LINE__,_args_,8); } 294 #define APP_TRACE_7ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 295 _arg4_,_arg5_,_arg6_) { \ 296 u32 _args_[7]; \ 297 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ 298 _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_;_args_[6]=(u32)_arg6_; \ 299 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 300 sizeof(__FUNCTION__),__LINE__,_args_,7); } 301 #define APP_TRACE_6ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 302 _arg4_,_arg5_) { \ 303 u32 _args_[6]; \ 304 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ 305 _args_[4]=(u32)_arg4_;_args_[5]=(u32)_arg5_; \ 306 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 307 sizeof(__FUNCTION__),__LINE__,_args_,6); } 308 #define APP_TRACE_5ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 309 _arg4_) { \ 310 u32 _args_[5]; \ 311 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ 312 _args_[4]=(u32)_arg4_; \ 313 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 314 sizeof(__FUNCTION__),__LINE__,_args_,5); } 315 #define APP_TRACE_4ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_){ \ 316 u32 _args_[4]; \ 317 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_;_args_[3]=(u32)_arg3_; \ 318 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 319 sizeof(__FUNCTION__),__LINE__,_args_,4); } 320 #define APP_TRACE_3ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_) { \ 321 u32 _args_[3]; \ 322 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_;_args_[2]=(u32)_arg2_; \ 323 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 324 sizeof(__FUNCTION__),__LINE__,_args_,3); } 325 #define APP_TRACE_2ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_) { \ 326 u32 _args_[2]; \ 327 _args_[0]=(u32)_arg0_;_args_[1]=(u32)_arg1_; \ 328 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 329 sizeof(__FUNCTION__),__LINE__,_args_,2); } 330 #define APP_TRACE_1ARG_OPT(_cat_,_level_,_opt_,_arg0_) { \ 331 u32 _args_[1]; \ 332 _args_[0]=(u32)_arg0_; \ 333 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 334 sizeof(__FUNCTION__),__LINE__,_args_,1); } 335 #define APP_TRACE_0ARG_OPT(_cat_,_level_,_opt_) { \ 336 OSLogFunc(_cat_,_level_,_opt_,__FUNCTION__, \ 337 sizeof(__FUNCTION__),__LINE__,NULL,0); } 338 339 /* 340 * APP_TRACE_... 341 * Logs general "APP" category function trace, with varied argument counts 342 */ 343 /* "notice" level */ 344 #define APP_TRACE_1ARG(_arg0_) \ 345 APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 346 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_) 347 #define APP_TRACE_2ARG(_arg0_,_arg1_) \ 348 APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 349 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_) 350 #define APP_TRACE_3ARG(_arg0_,_arg1_,_arg2_) \ 351 APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 352 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_) 353 #define APP_TRACE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ 354 APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 355 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 356 _arg3_) 357 #define APP_TRACE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ 358 APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 359 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 360 _arg3_,_arg4_) 361 #define APP_TRACE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ 362 APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 363 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 364 _arg3_,_arg4_,_arg5_) 365 #define APP_TRACE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ 366 APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 367 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 368 _arg3_,_arg4_,_arg5_,_arg6_) 369 #define APP_TRACE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 370 _arg7_) \ 371 APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 372 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 373 _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) 374 /* "noise" level */ 375 #define APP_TRACE_NOISE_1ARG(_arg0_) \ 376 APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 377 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_) 378 #define APP_TRACE_NOISE_2ARG(_arg0_,_arg1_) \ 379 APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 380 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_) 381 #define APP_TRACE_NOISE_3ARG(_arg0_,_arg1_,_arg2_) \ 382 APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 383 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_) 384 #define APP_TRACE_NOISE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ 385 APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 386 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 387 _arg3_) 388 #define APP_TRACE_NOISE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ 389 APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 390 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 391 _arg3_,_arg4_) 392 #define APP_TRACE_NOISE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ 393 APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 394 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 395 _arg3_,_arg4_,_arg5_) 396 #define APP_TRACE_NOISE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ 397 APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 398 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 399 _arg3_,_arg4_,_arg5_,_arg6_) 400 #define APP_TRACE_NOISE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 401 _arg7_) \ 402 APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 403 OS_LOG_DATA_OPT_DEFAULT_MASK,_arg0_,_arg1_,_arg2_, \ 404 _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) 405 406 /* 407 * APP_TRACE_ENTER... 408 * Logs "APP" category function entry, with varied argument counts 409 */ 410 /* "notice" level */ 411 #define APP_TRACE_ENTER() \ 412 APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 413 OS_LOG_DATA_OPT_FUNC_ENTER_MASK) 414 #define APP_TRACE_ENTER_1ARG(_arg0_) \ 415 APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 416 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_) 417 #define APP_TRACE_ENTER_2ARG(_arg0_,_arg1_) \ 418 APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 419 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_) 420 #define APP_TRACE_ENTER_3ARG(_arg0_,_arg1_,_arg2_) \ 421 APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 422 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_) 423 #define APP_TRACE_ENTER_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ 424 APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 425 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ 426 _arg3_) 427 #define APP_TRACE_ENTER_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ 428 APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 429 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ 430 _arg3_,_arg4_) 431 #define APP_TRACE_ENTER_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ 432 APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 433 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ 434 _arg3_,_arg4_,_arg5_) 435 #define APP_TRACE_ENTER_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ 436 APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 437 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ 438 _arg3_,_arg4_,_arg5_,_arg6_) 439 #define APP_TRACE_ENTER_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 440 _arg7_) \ 441 APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 442 OS_LOG_DATA_OPT_FUNC_ENTER_MASK,_arg0_,_arg1_,_arg2_, \ 443 _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) 444 /* "noise" level */ 445 #define APP_TRACE_NOISE_ENTER() \ 446 APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOISE, \ 447 OS_LOG_DATA_OPT_FUNC_ENTER_MASK) 448 449 /* 450 * APP_TRACE_EXIT... 451 * Logs "APP" category function exit, with varied argument counts 452 */ 453 /* "notice" level */ 454 #define APP_TRACE_EXIT() \ 455 APP_TRACE_0ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 456 OS_LOG_DATA_OPT_FUNC_EXIT_MASK) 457 #define APP_TRACE_EXIT_1ARG(_arg0_) \ 458 APP_TRACE_1ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 459 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_) 460 #define APP_TRACE_EXIT_2ARG(_arg0_,_arg1_) \ 461 APP_TRACE_2ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 462 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_) 463 #define APP_TRACE_EXIT_3ARG(_arg0_,_arg1_,_arg2_) \ 464 APP_TRACE_3ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 465 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_) 466 #define APP_TRACE_EXIT_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) \ 467 APP_TRACE_4ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 468 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ 469 _arg3_) 470 #define APP_TRACE_EXIT_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) \ 471 APP_TRACE_5ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 472 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ 473 _arg3_,_arg4_) 474 #define APP_TRACE_EXIT_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) \ 475 APP_TRACE_6ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 476 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ 477 _arg3_,_arg4_,_arg5_) 478 #define APP_TRACE_EXIT_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) \ 479 APP_TRACE_7ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 480 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ 481 _arg3_,_arg4_,_arg5_,_arg6_) 482 #define APP_TRACE_EXIT_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 483 _arg7_) \ 484 APP_TRACE_8ARG_OPT(OS_LOG_CATEGORY_APP,OS_LOG_LEVEL_NOTICE, \ 485 OS_LOG_DATA_OPT_FUNC_EXIT_MASK,_arg0_,_arg1_,_arg2_, \ 486 _arg3_,_arg4_,_arg5_,_arg6_,_arg7_) 487 488 #else // APP_TRACE_ENABLED is not enabled 489 490 #define APP_KEYTRACE_3ARG(_seqByte_,_key_,_arg0_,_arg1_,_arg2_) 491 #define APP_KEYTRACE_2ARG(_seqByte_,_key_,_arg0_,_arg1_) 492 #define APP_KEYTRACE_1ARG(_seqByte_,_key_,_arg0_) 493 #define APP_KEYTRACE_0ARG(_seqByte_,_key_) 494 #define APP_TRACE_8ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 495 _arg4_,_arg5_,_arg6_,_arg7_) 496 #define APP_TRACE_7ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 497 _arg4_,_arg5_,_arg6_) 498 #define APP_TRACE_6ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 499 _arg4_,_arg5_) 500 #define APP_TRACE_5ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_, \ 501 _arg4_) 502 #define APP_TRACE_4ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_,_arg3_) 503 #define APP_TRACE_3ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_,_arg2_) 504 #define APP_TRACE_2ARG_OPT(_cat_,_level_,_opt_,_arg0_,_arg1_) 505 #define APP_TRACE_1ARG_OPT(_cat_,_level_,_opt_,_arg0_) 506 #define APP_TRACE_0ARG_OPT(_cat_,_level_,_opt_) 507 #define APP_TRACE_1ARG(_arg0_) 508 #define APP_TRACE_2ARG(_arg0_,_arg1_) 509 #define APP_TRACE_3ARG(_arg0_,_arg1_,_arg2_) 510 #define APP_TRACE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) 511 #define APP_TRACE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) 512 #define APP_TRACE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) 513 #define APP_TRACE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) 514 #define APP_TRACE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 515 _arg7_) 516 #define APP_TRACE_NOISE_1ARG(_arg0_) 517 #define APP_TRACE_NOISE_2ARG(_arg0_,_arg1_) 518 #define APP_TRACE_NOISE_3ARG(_arg0_,_arg1_,_arg2_) 519 #define APP_TRACE_NOISE_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) 520 #define APP_TRACE_NOISE_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) 521 #define APP_TRACE_NOISE_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) 522 #define APP_TRACE_NOISE_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) 523 #define APP_TRACE_NOISE_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 524 _arg7_) 525 #define APP_TRACE_ENTER() 526 #define APP_TRACE_ENTER_1ARG(_arg0_) 527 #define APP_TRACE_ENTER_2ARG(_arg0_,_arg1_) 528 #define APP_TRACE_ENTER_3ARG(_arg0_,_arg1_,_arg2_) 529 #define APP_TRACE_ENTER_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) 530 #define APP_TRACE_ENTER_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) 531 #define APP_TRACE_ENTER_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) 532 #define APP_TRACE_ENTER_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) 533 #define APP_TRACE_ENTER_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 534 _arg7_) 535 #define APP_TRACE_NOISE_ENTER() 536 #define APP_TRACE_EXIT() 537 #define APP_TRACE_EXIT_1ARG(_arg0_) 538 #define APP_TRACE_EXIT_2ARG(_arg0_,_arg1_) 539 #define APP_TRACE_EXIT_3ARG(_arg0_,_arg1_,_arg2_) 540 #define APP_TRACE_EXIT_4ARG(_arg0_,_arg1_,_arg2_,_arg3_) 541 #define APP_TRACE_EXIT_5ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_) 542 #define APP_TRACE_EXIT_6ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_) 543 #define APP_TRACE_EXIT_7ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_) 544 #define APP_TRACE_EXIT_8ARG(_arg0_,_arg1_,_arg2_,_arg3_,_arg4_,_arg5_,_arg6_, \ 545 _arg7_) 546 547 #endif // APP_TRACE_ENABLED 548 549 550 #ifdef __cplusplus 551 } 552 #endif 553 554 #endif // __OSSYSTEMLOG_H__ 555