/* * Copyright (c) 2016, NVIDIA CORPORATION. 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 NVIDIA CORPORATION 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 BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE 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. */ /** * @file * NVIDIA Multimedia API: Logging API * * @brief Description: This file defines macros for logging messages. */ #ifndef __NV_LOGGING_H_ #define __NV_LOGGING_H_ #include #include /** * * @defgroup l4t_mm_nvlogging_group Logging API * * This file defines macros that provide message logging * functionality. * * @ingroup aa_framework_api_group * @{ */ /** * Specifies the log level for Information messages. */ #define LOG_LEVEL_INFO 0 /** * Specifies the log level for Error messages. */ #define LOG_LEVEL_ERROR 1 /** * Specifies the log level for Warning messages. */ #define LOG_LEVEL_WARN 2 /** * Specifies the log level for Debug messages. */ #define LOG_LEVEL_DEBUG 3 /** * Holds the current log level at runtime by assignment of one of the * @c LOG_LEVEL_* values. */ extern int log_level; /** * Specifies the default log level. */ #define DEFAULT_LOG_LEVEL LOG_LEVEL_ERROR /** * @cond */ #define stringify(s) #s #define xstringify(s) stringify(s) #define __LINE_NUM_STR__ xstringify(__LINE__) extern const char *log_level_name[]; /** * @endcond */ /** * * Prints log messages. * * Prints a log message only if the current log_level is greater * than or equal to the level of the message. * * Messages are in the following form: * [LEVEL] (FILE: LINE_NUM) Message * * @param[in] level The Log level of the message. * @param[in] str1 The NULL-terminated char array to print. */ #define PRINT_MSG(level, str1) if(level <= log_level) { \ std::ostringstream ostr; \ ostr << "[" << log_level_name[level] << "] (" << \ __FILE__ << ":" __LINE_NUM_STR__ ") " << \ str1 << std::endl; \ std::cerr << ostr.str(); \ } /** * Prints a log message of level LOG_LEVEL_INFO. */ #define INFO_MSG(str) PRINT_MSG(LOG_LEVEL_INFO, str) /** * Prints a component-specific log message of level LOG_LEVEL_INFO. * This is used by the components internally and should not be used by * the application. * * Messages are in the following form: * [LEVEL] (FILE: LINE_NUM) */ #define COMP_INFO_MSG(str) INFO_MSG("<" << comp_name << "> " << str) /** * Prints a category-specific (Component type) system error log * message of level LOG_LEVEL_INFO. This is used by the components * internally and should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE: LINE_NUM) */ #define CAT_INFO_MSG(str) INFO_MSG("<" CAT_NAME "> " << str) /** * Prints a log message of level LOG_LEVEL_ERROR. */ #define ERROR_MSG(str) PRINT_MSG(LOG_LEVEL_ERROR, str) /** * Prints a component-specific log message of level * LOG_LEVEL_ERROR. This is used by the components internally * and should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define COMP_ERROR_MSG(str) ERROR_MSG("<" << comp_name << "> " << str) /** * Prints a category-specific (Component type) log message of level * LOG_LEVEL_ERROR. This is used by the components internally and * should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define CAT_ERROR_MSG(str) ERROR_MSG("<" CAT_NAME "> " << str) /** * Prints a system error log message of level LOG_LEVEL_ERROR with * the string description of the errno value appended. */ #define SYS_ERROR_MSG(str) ERROR_MSG(str << ": " << strerror(errno)) /** * Prints a component-specific system error log message of level * LOG_LEVEL_ERROR. This is used by the components internally and * should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define COMP_SYS_ERROR_MSG(str) SYS_ERROR_MSG("<" << comp_name << "> " << str) /** * Prints a category-specific (Component type) system error log * message of level LOG_LEVEL_ERROR. This is used by the components * internally and should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define CAT_SYS_ERROR_MSG(str) SYS_ERROR_MSG("<" CAT_NAME "> " << str) /** * Prints a log message of level LOG_LEVEL_WARN. */ #define WARN_MSG(str) PRINT_MSG(LOG_LEVEL_WARN, str) /** * Prints a component-specific log message of level LOG_LEVEL_WARN. * This is used by the components internally and should not be used by * the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define COMP_WARN_MSG(str) WARN_MSG("<" << comp_name << "> :" << str) /** * Print a category-specific (Component type) log message of level * LOG_LEVEL_WARN. * This is used by the components internally and should not be used by the * application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define CAT_WARN_MSG(str) WARN_MSG("<" CAT_NAME "> " << str) /** * Prints a log message of level LOG_LEVEL_DEBUG. */ #define DEBUG_MSG(str) PRINT_MSG(LOG_LEVEL_DEBUG, str) /** * Prints a component-specific log message of level LOG_LEVEL_DEBUG. * This is used by the components internally and should not be used by the * application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define COMP_DEBUG_MSG(str) DEBUG_MSG("<" << comp_name << "> :" << str) /** * Prints a category-specific (Component type) log message of level * LOG_LEVEL_DEBUG. This is used by the components internally and * should not be used by the application. * * Messages are in the following form: * [LEVEL] (FILE:LINE_NUM) */ #define CAT_DEBUG_MSG(str) DEBUG_MSG("<" CAT_NAME "> " << str) #endif /** @} */