You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
7.2 KiB
227 lines
7.2 KiB
#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 */
|