diff options
Diffstat (limited to 'inc/HAP_farf.h')
-rw-r--r-- | inc/HAP_farf.h | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/inc/HAP_farf.h b/inc/HAP_farf.h new file mode 100644 index 0000000..48e123a --- /dev/null +++ b/inc/HAP_farf.h @@ -0,0 +1,226 @@ +#ifndef HAP_FARF_H +#define HAP_FARF_H +/** + * Copyright (c) 2019, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "AEEStdDef.h" +#include "HAP_debug.h" + +/** + * FARF macro used for logging + * + * Compile time logging options + * ----------------------------- + * + * Logging is controlled via conditional compilation. A FARF + * level should be defined to 1 for FARF macros to be compiled + * in. For example: + * + * #define FARF_LOW 1 + * #include "HAP_farf.h" + * + * FARF(LOW, "something happened: %s", (const char*)string); + * + * If FARF_LOW is defined to 0, as it is by default, the above + * FARF string will not be compiled in, if it is defined to 1 it + * will be compiled in. Users can also define their own custom + * levels. For example: + * + * #include "HAP_farf.h" + * #define FARF_MYTRACE 1 + * #define FARF_MYTRACE_LEVEL HAP_LEVEL_LOW + * + * FARF(MYTRACE, "custom trace in file %s on line %d", __FILE__, __LINE__); + * + * The LEVEL define tells FARF what logging level to + * use. These are mapped to their diag level counterparts, in + * the above example the message will be logged to diag's LOW + * level. + * + * Messages logged with ALWAYS level are always compiled in and logged + * ------ + * + * When building the Debug variant or builds defining _DEBUG the + * following FARF levels will be enabled: + * + * HIGH + * ERROR + * FATAL + * + * + * + * Run time logging options + * -------------------------- + * + * In order to enable run-time logging (logging that can be enabled / disabled + * at run-time), the FARF_RUNTIME_* macros should be used. + * + * Log messages sent with these macros are compiled in by default. However by + * these messages WILL NOT be logged by default. In order to enable logging, + * the FASTRPC process will need to either call the + * HAP_SetFARFRuntimeLoggingParams() API, or by adding a <process_name>.farf + * file to the HLOS file system with the appropriate contents. + * + * #include "HAP_farf.h" + * FARF(RUNTIME_HIGH, "something happened: %s", (const char*)string); + * + */ + + + /* + * @param x, the FARF level defined to either 0 to disable compilation or 1 to enable. + * @param ..., format string and arguments. + */ +#define FARF(x, ...) _FARF_PASTE(_FARF_,_FARF_VAL(FARF_##x))(x, ##__VA_ARGS__) + +/* by default _DEBUG turns on ALWAYS, HIGH, ERROR, FATAL + * + */ +#ifdef _DEBUG +#ifndef FARF_HIGH +#define FARF_HIGH 1 +#endif +#ifndef FARF_ERROR +#define FARF_ERROR 1 +#endif +#ifndef FARF_FATAL +#define FARF_FATAL 1 +#endif +#endif + +/* Compile time macros. Set these to 1 to enable logging at that + level. Setting them to 0 will cause them to be COMPILED out . + + Example Usage: + #define FARF_HIGH 1 + FARF(HIGH,"Log message"); + + Defining _DEBUG will automatically enable compiled log messages with + priority higher than HIGH. + + The ALWAYS macro will cause log messages to be ALWAYS compiled in. + FARF(ALWAYS,"Log message") +*/ + +#ifndef FARF_ALWAYS +#define FARF_ALWAYS 1 /* 0 turns me off */ +#endif +#define FARF_ALWAYS_LEVEL HAP_LEVEL_HIGH + +#ifndef FARF_LOW +#define FARF_LOW 0 /* 0 turns me off */ +#endif +#define FARF_LOW_LEVEL HAP_LEVEL_LOW + +#ifndef FARF_MEDIUM +#define FARF_MEDIUM 0 /* 0 turns me off */ +#endif +#define FARF_MEDIUM_LEVEL HAP_LEVEL_MEDIUM + +#ifndef FARF_HIGH +#define FARF_HIGH 0 /* 0 turns me off */ +#endif +#define FARF_HIGH_LEVEL HAP_LEVEL_HIGH + +#ifndef FARF_ERROR +#define FARF_ERROR 0 /* 0 turns me off */ +#endif +#define FARF_ERROR_LEVEL HAP_LEVEL_ERROR + +#ifndef FARF_FATAL +#define FARF_FATAL 0 /* 0 turns me off */ +#endif +#define FARF_FATAL_LEVEL HAP_LEVEL_FATAL + +/* Runtime FARF macros. FARFs with these levels can be enabled at runtime. + They are turned OFF by default. + + Example Usage: + + FARF(RUNTIME_HIGH,"Log message"); +*/ +#ifndef FARF_RUNTIME_LOW +#define FARF_RUNTIME_LOW 1 /* 0 turns me off */ +#endif +#define FARF_RUNTIME_LOW_LEVEL (HAP_LEVEL_RUNTIME | HAP_LEVEL_LOW) + +#ifndef FARF_RUNTIME_MEDIUM +#define FARF_RUNTIME_MEDIUM 1 /* 0 turns me off */ +#endif +#define FARF_RUNTIME_MEDIUM_LEVEL (HAP_LEVEL_RUNTIME | HAP_LEVEL_MEDIUM) + +#ifndef FARF_RUNTIME_HIGH +#define FARF_RUNTIME_HIGH 1 /* 0 turns me off */ +#endif +#define FARF_RUNTIME_HIGH_LEVEL (HAP_LEVEL_RUNTIME | HAP_LEVEL_HIGH) + +#ifndef FARF_RUNTIME_ERROR +#define FARF_RUNTIME_ERROR 1 /* 0 turns me off */ +#endif +#define FARF_RUNTIME_ERROR_LEVEL (HAP_LEVEL_RUNTIME | HAP_LEVEL_ERROR) + +#ifndef FARF_RUNTIME_FATAL +#define FARF_RUNTIME_FATAL 1 /* 0 turns me off */ +#endif +#define FARF_RUNTIME_FATAL_LEVEL (HAP_LEVEL_RUNTIME | HAP_LEVEL_FATAL) + +//internal macros +#define _FARF_PASTE(a,b) _FARF_PASTE_(a,b) +#define _FARF_PASTE_(a,b) a##b +#define _FARF_VAL(a) a + +//internal macro +//this one is used when farfs are not compiled in +#define _FARF_0(x, ...) + +#ifndef __FILENAME__ +#define __FILENAME__ __FILE__ +#endif + +//lint -emacro(506,FARF) Constant Boolean Value +//lint -emacro(774,FARF) Boolean within always evaluates to True +//this one is used when farfs are compiled in +#define _FARF_1(x, ...) \ + do { \ + if(0 == (HAP_debug_v2)) { \ + _HAP_debug_v2(FARF_##x##_LEVEL, __FILENAME__, __LINE__, ##__VA_ARGS__); \ + } else { \ + if (FARF_##x##_LEVEL & HAP_LEVEL_RUNTIME) { \ + if (0 != HAP_debug_runtime) { \ + HAP_debug_runtime(FARF_##x##_LEVEL ^ HAP_LEVEL_RUNTIME , __FILENAME__, __LINE__, ##__VA_ARGS__); \ + } else { \ + break; \ + } \ + } else { \ + HAP_debug_v2(FARF_##x##_LEVEL, __FILENAME__, __LINE__, ##__VA_ARGS__); \ + } \ + } \ + } while (0) + +#endif /* #ifndef HAP_FARF_H */ |