/** @file * @brief Bluetooth subsystem logging helpers. */ /* * Copyright (c) 2017 Nordic Semiconductor ASA * Copyright (c) 2015-2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __BT_LOG_H #define __BT_LOG_H #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #if !defined(BT_DBG_ENABLED) #define BT_DBG_ENABLED 1 #endif #if BT_DBG_ENABLED #define LOG_LEVEL LOG_LEVEL_DBG #else #define LOG_LEVEL CONFIG_BT_LOG_LEVEL #endif LOG_MODULE_REGISTER(LOG_MODULE_NAME, LOG_LEVEL); #define BT_DBG(fmt, ...) LOG_DBG(fmt, ##__VA_ARGS__) #define BT_ERR(fmt, ...) LOG_ERR(fmt, ##__VA_ARGS__) #define BT_WARN(fmt, ...) LOG_WRN(fmt, ##__VA_ARGS__) #define BT_INFO(fmt, ...) LOG_INF(fmt, ##__VA_ARGS__) #if defined(CONFIG_BT_ASSERT_VERBOSE) #define BT_ASSERT_PRINT(test) __ASSERT_LOC(test) #define BT_ASSERT_PRINT_MSG(fmt, ...) __ASSERT_MSG_INFO(fmt, ##__VA_ARGS__) #else #define BT_ASSERT_PRINT(test) #define BT_ASSERT_PRINT_MSG(fmt, ...) #endif /* CONFIG_BT_ASSERT_VERBOSE */ #if defined(CONFIG_BT_ASSERT_PANIC) #define BT_ASSERT_DIE k_panic #else #define BT_ASSERT_DIE k_oops #endif /* CONFIG_BT_ASSERT_PANIC */ #if defined(CONFIG_BT_ASSERT) #define BT_ASSERT(cond) \ do { \ if (!(cond)) { \ BT_ASSERT_PRINT(cond); \ BT_ASSERT_DIE(); \ } \ } while (0) #define BT_ASSERT_MSG(cond, fmt, ...) \ do { \ if (!(cond)) { \ BT_ASSERT_PRINT(cond); \ BT_ASSERT_PRINT_MSG(fmt, ##__VA_ARGS__); \ BT_ASSERT_DIE(); \ } \ } while (0) #else #define BT_ASSERT(cond) __ASSERT_NO_MSG(cond) #define BT_ASSERT_MSG(cond, msg, ...) __ASSERT(cond, msg, ##__VA_ARGS__) #endif/* CONFIG_BT_ASSERT*/ #define BT_HEXDUMP_DBG(_data, _length, _str) \ LOG_HEXDUMP_DBG((const uint8_t *)_data, _length, _str) /* NOTE: These helper functions always encodes into the same buffer storage. * It is the responsibility of the user of this function to copy the information * in this string if needed. * * NOTE: These functions are not thread-safe! */ const char *bt_hex_real(const void *buf, size_t len); const char *bt_addr_str_real(const bt_addr_t *addr); const char *bt_addr_le_str_real(const bt_addr_le_t *addr); const char *bt_uuid_str_real(const struct bt_uuid *uuid); /* NOTE: log_strdup does not guarantee a duplication of the string. * It is therefore still the responsibility of the user to handle the * restrictions in the underlying function call. */ #define bt_hex(buf, len) log_strdup(bt_hex_real(buf, len)) #define bt_addr_str(addr) log_strdup(bt_addr_str_real(addr)) #define bt_addr_le_str(addr) log_strdup(bt_addr_le_str_real(addr)) #define bt_uuid_str(uuid) log_strdup(bt_uuid_str_real(uuid)) #ifdef __cplusplus } #endif #endif /* __BT_LOG_H */