| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- * ________________________________________________________________________________________________________
- * Copyright (c) 2017 InvenSense Inc. All rights reserved.
- *
- * This software, related documentation and any modifications thereto (collectively “Software”) is subject
- * to InvenSense and its licensors' intellectual property rights under U.S. and international copyright
- * and other intellectual property rights laws.
- *
- * InvenSense and its licensors retain all intellectual property and proprietary rights in and to the Software
- * and any use, reproduction, disclosure or distribution of the Software without an express license agreement
- * from InvenSense is strictly prohibited.
- *
- * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE SOFTWARE IS
- * PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
- * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL
- * INVENSENSE BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
- * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THE SOFTWARE.
- * ________________________________________________________________________________________________________
- */
- /** @defgroup Message Message
- * @brief Utility functions to display and redirect diagnostic messages
- *
- * Use INV_MSG_DISABLE or INV_MSG_ENABLE define before including
- * this header to enable/disable messages for a compilation unit.
- *
- * Under Linux, Windows or Arduino, messages are enabled by default.
- * Use INV_MSG_DISABLE to disable them.
- *
- * Under orther environmment, message are disabled by default.
- * Use INV_MSG_ENABLE to disable them.
- *
- * @ingroup EmbUtils
- * @{
- */
- #ifndef _INV_MESSAGE_H_
- #define _INV_MESSAGE_H_
- #include "InvExport.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stdarg.h>
- /** @brief For eMD target, disable log by default
- * If compile switch is set for a compilation unit
- * messages will be totally disabled by default
- */
- #if !defined(__linux) && !defined(_WIN32) && !defined(ARDUINO)
- #define INV_MSG_DISABLE 1
- #endif
- /** @brief Allow to force enabling messaging using INV_MSG_ENABLE define */
- #ifdef INV_MSG_ENABLE
- #undef INV_MSG_DISABLE
- #endif
- /** @brief Helper macro for calling inv_msg()
- * If INV_MSG_DISABLE compile switch is set for a compilation unit
- * messages will be totally disabled
- */
- #define INV_MSG(level, ...) _INV_MSG(level, __VA_ARGS__)
- /** @brief Helper macro for calling inv_msg_setup()
- * If INV_MSG_DISABLE compile switch is set for a compilation unit
- * messages will be totally disabled
- */
- #define INV_MSG_SETUP(level, printer) _INV_MSG_SETUP(level, printer)
- /** @brief Helper macro for calling inv_msg_setup_level()
- * If INV_MSG_DISABLE compile switch is set for a compilation unit
- * messages will be totally disabled
- */
- #define INV_MSG_SETUP_LEVEL(level) _INV_MSG_SETUP_LEVEL(level)
- /** @brief Helper macro for calling inv_msg_setup_default()
- * If INV_MSG_DISABLE compile switch is set for a compilation unit
- * messages will be totally disabled
- */
- #define INV_MSG_SETUP_DEFAULT() _INV_MSG_SETUP_DEFAULT()
- /** @brief Return current level
- * @warning This macro may expand as a function call
- */
- #define INV_MSG_LEVEL _INV_MSG_LEVEL
- #if defined(INV_MSG_DISABLE)
- #define _INV_MSG(level, ...) (void)0
- #define _INV_MSG_SETUP(level, printer) (void)0
- #define _INV_MSG_SETUP_LEVEL(level) (void)0
- #define _INV_MSG_LEVEL INV_MSG_LEVEL_OFF
- #else
- #define _INV_MSG(level, ...) inv_msg(level, __VA_ARGS__)
- #define _INV_MSG_SETUP(level, printer) inv_msg_setup(level, printer)
- #define _INV_MSG_SETUP_LEVEL(level) inv_msg_setup(level, inv_msg_printer_default)
- #define _INV_MSG_SETUP_DEFAULT() inv_msg_setup_default()
- #define _INV_MSG_LEVEL inv_msg_get_level()
- #endif
- /** @brief message level definition
- */
- enum inv_msg_level {
- INV_MSG_LEVEL_OFF = 0,
- INV_MSG_LEVEL_ERROR,
- INV_MSG_LEVEL_WARNING,
- INV_MSG_LEVEL_INFO,
- INV_MSG_LEVEL_VERBOSE,
- INV_MSG_LEVEL_DEBUG,
- INV_MSG_LEVEL_MAX
- };
- /** @brief Prototype for print routine function
- */
- typedef void (*inv_msg_printer_t)(int level, const char * str, va_list ap);
- /** @brief Set message level and printer function
- * @param[in] level only message above level will be passed to printer function
- * @param[in] printer user provided function in charge printing message
- * @return none
- */
- void INV_EXPORT inv_msg_setup(int level, inv_msg_printer_t printer);
- /** @brief Default printer function that display messages to stderr
- * Function uses stdio. Care must be taken on embeded platfrom.
- * Function does nothing with IAR compiler.
- * @return none
- */
- void INV_EXPORT inv_msg_printer_default(int level, const char * str, va_list ap);
- /** @brief Set message level
- * Default printer function will be used.
- * @param[in] level only message above level will be passed to printer function
- * @return none
- */
- static inline void inv_msg_setup_level(int level)
- {
- inv_msg_setup(level, inv_msg_printer_default);
- }
- /** @brief Set default message level and printer
- * @return none
- */
- static inline void inv_msg_setup_default(void)
- {
- inv_msg_setup(INV_MSG_LEVEL_INFO, inv_msg_printer_default);
- }
- /** @brief Return current message level
- * @return current message level
- */
- int INV_EXPORT inv_msg_get_level(void);
- /** @brief Display a message (through means of printer function)
- * @param[in] level for the message
- * @param[in] str message string
- * @param[in] ... optional arguments
- * @return none
- */
- void INV_EXPORT inv_msg(int level, const char * str, ...);
- #ifdef __cplusplus
- }
- #endif
- #endif /* INV_MESSAGE_H_ */
- /** @} */
|