| /** @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 <linker/sections.h> |
| #include <offsets.h> |
| #include <zephyr.h> |
| #include <logging/log.h> |
| #include <sys/__assert.h> |
| |
| #include <bluetooth/bluetooth.h> |
| #include <bluetooth/uuid.h> |
| #include <bluetooth/hci.h> |
| |
| #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 */ |