/*
 *
 * Copyright 2018 NXP
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef NX_LOG_SSS_H
#define NX_LOG_SSS_H

#include <nxLog.h>

/* ############################################################ */
/* ## AUTO Generated ########################################## */
/* ############################################################ */

/* Default configuration file */
#include <nxLog_DefaultConfig.h>

/* clang-format off */

/* Check if we are double defining these macros */
#if defined(LOG_D) || defined(LOG_I) || defined(LOG_W) || defined(LOG_E)
/* This should not happen.  The only reason this could happn is double inclusion of different log files. */
#   error "LOG_ macro already defined"
#endif /* LOG_E */

/* Enable/Set log levels for 'sss' - start */
/* If source file, or nxLog_Config.h has not set it, set these defines
 *
 * Do not #undef these values, rather set to 0/1. This way we can
 * jump to definition and avoid plain-old-text-search to jump to
 * undef. */

#ifndef NX_LOG_ENABLE_SSS_DEBUG
#   define NX_LOG_ENABLE_SSS_DEBUG (NX_LOG_ENABLE_DEFAULT_DEBUG)
#endif
#ifndef NX_LOG_ENABLE_SSS_INFO
#   define NX_LOG_ENABLE_SSS_INFO (NX_LOG_ENABLE_SSS_DEBUG + NX_LOG_ENABLE_DEFAULT_INFO)
#endif
#ifndef NX_LOG_ENABLE_SSS_WARN
#   define NX_LOG_ENABLE_SSS_WARN (NX_LOG_ENABLE_SSS_INFO + NX_LOG_ENABLE_DEFAULT_WARN)
#endif
#ifndef NX_LOG_ENABLE_SSS_ERROR
#   define NX_LOG_ENABLE_SSS_ERROR (NX_LOG_ENABLE_SSS_WARN + NX_LOG_ENABLE_DEFAULT_ERROR)
#endif

/* Enable/Set log levels for 'sss' - end */

#if NX_LOG_ENABLE_SSS_DEBUG
#   define LOG_DEBUG_ENABLED 1
#   define LOG_D(format, ...) \
        nLog("sss", NX_LEVEL_DEBUG, format, ##__VA_ARGS__)
#   define LOG_X8_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=0x%02X",#VALUE, VALUE)
#   define LOG_U8_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=%u",#VALUE, VALUE)
#   define LOG_X16_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=0x%04X",#VALUE, VALUE)
#   define LOG_U16_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=%u",#VALUE, VALUE)
#   define LOG_X32_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=0x%08X",#VALUE, VALUE)
#   define LOG_U32_D(VALUE) \
        nLog("sss", NX_LEVEL_DEBUG, "%s=%u",#VALUE, VALUE)
#   define LOG_AU8_D(ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_DEBUG, #ARRAY, ARRAY, LEN)
#   define LOG_MAU8_D(MESSAGE, ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_DEBUG, MESSAGE, ARRAY, LEN)
#else
#   define LOG_DEBUG_ENABLED 0
#   define LOG_D(...)
#   define LOG_X8_D(VALUE)
#   define LOG_U8_D(VALUE)
#   define LOG_X16_D(VALUE)
#   define LOG_U16_D(VALUE)
#   define LOG_X32_D(VALUE)
#   define LOG_U32_D(VALUE)
#   define LOG_AU8_D(ARRAY, LEN)
#   define LOG_MAU8_D(MESSAGE, ARRAY, LEN)
#endif

#if NX_LOG_ENABLE_SSS_INFO
#   define LOG_INFO_ENABLED 1
#   define LOG_I(format, ...) \
        nLog("sss", NX_LEVEL_INFO, format, ##__VA_ARGS__)
#   define LOG_X8_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=0x%02X",#VALUE, VALUE)
#   define LOG_U8_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=%u",#VALUE, VALUE)
#   define LOG_X16_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=0x%04X",#VALUE, VALUE)
#   define LOG_U16_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=%u",#VALUE, VALUE)
#   define LOG_X32_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=0x%08X",#VALUE, VALUE)
#   define LOG_U32_I(VALUE) \
        nLog("sss", NX_LEVEL_INFO, "%s=%u",#VALUE, VALUE)
#   define LOG_AU8_I(ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_INFO, #ARRAY, ARRAY, LEN)
#   define LOG_MAU8_I(MESSAGE, ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_INFO, MESSAGE, ARRAY, LEN)
#else
#   define LOG_INFO_ENABLED 0
#   define LOG_I(...)
#   define LOG_X8_I(VALUE)
#   define LOG_U8_I(VALUE)
#   define LOG_X16_I(VALUE)
#   define LOG_U16_I(VALUE)
#   define LOG_X32_I(VALUE)
#   define LOG_U32_I(VALUE)
#   define LOG_AU8_I(ARRAY, LEN)
#   define LOG_MAU8_I(MESSAGE, ARRAY, LEN)
#endif

#if NX_LOG_ENABLE_SSS_WARN
#   define LOG_WARN_ENABLED 1
#   define LOG_W(format, ...) \
        nLog("sss", NX_LEVEL_WARN, format, ##__VA_ARGS__)
#   define LOG_X8_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=0x%02X",#VALUE, VALUE)
#   define LOG_U8_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=%u",#VALUE, VALUE)
#   define LOG_X16_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=0x%04X",#VALUE, VALUE)
#   define LOG_U16_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=%u",#VALUE, VALUE)
#   define LOG_X32_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=0x%08X",#VALUE, VALUE)
#   define LOG_U32_W(VALUE) \
        nLog("sss", NX_LEVEL_WARN, "%s=%u",#VALUE, VALUE)
#   define LOG_AU8_W(ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_WARN, #ARRAY, ARRAY, LEN)
#   define LOG_MAU8_W(MESSAGE, ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_WARN, MESSAGE, ARRAY, LEN)
#else
#   define LOG_WARN_ENABLED 0
#   define LOG_W(...)
#   define LOG_X8_W(VALUE)
#   define LOG_U8_W(VALUE)
#   define LOG_X16_W(VALUE)
#   define LOG_U16_W(VALUE)
#   define LOG_X32_W(VALUE)
#   define LOG_U32_W(VALUE)
#   define LOG_AU8_W(ARRAY, LEN)
#   define LOG_MAU8_W(MESSAGE, ARRAY, LEN)
#endif

#if NX_LOG_ENABLE_SSS_ERROR
#   define LOG_ERROR_ENABLED 1
#   define LOG_E(format, ...) \
        nLog("sss", NX_LEVEL_ERROR, format, ##__VA_ARGS__)
#   define LOG_X8_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=0x%02X",#VALUE, VALUE)
#   define LOG_U8_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=%u",#VALUE, VALUE)
#   define LOG_X16_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=0x%04X",#VALUE, VALUE)
#   define LOG_U16_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=%u",#VALUE, VALUE)
#   define LOG_X32_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=0x%08X",#VALUE, VALUE)
#   define LOG_U32_E(VALUE) \
        nLog("sss", NX_LEVEL_ERROR, "%s=%u",#VALUE, VALUE)
#   define LOG_AU8_E(ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_ERROR, #ARRAY, ARRAY, LEN)
#   define LOG_MAU8_E(MESSAGE, ARRAY,LEN) \
        nLog_au8("sss", NX_LEVEL_ERROR, MESSAGE, ARRAY, LEN)
#else
#   define LOG_ERROR_ENABLED 0
#   define LOG_E(...)
#   define LOG_X8_E(VALUE)
#   define LOG_U8_E(VALUE)
#   define LOG_X16_E(VALUE)
#   define LOG_U16_E(VALUE)
#   define LOG_X32_E(VALUE)
#   define LOG_U32_E(VALUE)
#   define LOG_AU8_E(ARRAY, LEN)
#   define LOG_MAU8_E(MESSAGE, ARRAY, LEN)
#endif

/* clang-format on */

#endif /* NX_LOG_SSS_H */
