summaryrefslogtreecommitdiff
path: root/inc/HAP_farf.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/HAP_farf.h')
-rw-r--r--inc/HAP_farf.h226
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 */