btstack/src/btstack_debug.h

135 lines
4.1 KiB
C

/*
* Copyright (C) 2014 BlueKitchen GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. 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.
* 3. Neither the name of the copyright holders nor the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
* 4. Any redistribution, use, or modification is done solely for
* personal benefit and not for any commercial purpose or for
* monetary gain.
*
* THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
* ``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 MATTHIAS
* RINGWALD 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.
*
* Please inquire about commercial licensing options at
* contact@bluekitchen-gmbh.com
*
*/
/*
* btstack_debug.h
*
* allow to funnel debug & error messages
*/
#ifndef DEBUG_H
#define DEBUG_H
#include "btstack_config.h"
#include "btstack_defines.h"
#include "hci_dump.h"
#include <stdio.h>
#ifdef __AVR__
#include <avr/pgmspace.h>
#endif
#ifdef HAVE_ASSERT
#include <assert.h>
#endif
// fallback to __FILE__ for untagged files
#ifndef BTSTACK_FILE__
#define BTSTACK_FILE__ __FILE__
#endif
#ifdef HAVE_ASSERT
// map to libc assert
#define btstack_assert(condition) assert(condition)
#else /* HAVE_ASSERT */
#ifdef ENABLE_BTSTACK_ASSERT
void btstack_assert_failed(const char * file, uint16_t line_nr);
#ifndef btstack_assert
// use btstack macro that calls btstack_assert_failed() - provided by port
#define btstack_assert(condition) if (condition) {} else { btstack_assert_failed(BTSTACK_FILE__, __LINE__); }
#endif
#else /* btstack_assert */
// asserts off
#define btstack_assert(condition) {}
#endif
#endif
// allow to provide port specific printf
#ifndef BTSTACK_PRINTF
#ifdef __AVR__
#define BTSTACK_PRINTF(format, ...) printf_P(PSTR(format), ## __VA_ARGS__)
#else
#define BTSTACK_PRINTF(format, ...) printf(format, ## __VA_ARGS__)
#endif
#endif
#ifdef __AVR__
#define HCI_DUMP_LOG(log_level, format, ...) hci_dump_log_P(log_level, PSTR("%s.%u: " format), BTSTACK_FILE__, __LINE__, ## __VA_ARGS__)
#else
#define HCI_DUMP_LOG(log_level, format, ...) hci_dump_log(log_level, "%s.%u: " format, BTSTACK_FILE__, __LINE__, ## __VA_ARGS__)
#endif
#ifdef ENABLE_LOG_DEBUG
#define log_debug(format, ...) HCI_DUMP_LOG(HCI_DUMP_LOG_LEVEL_DEBUG, format, ## __VA_ARGS__)
#else
#define log_debug(...) (void)(0)
#endif
#ifdef ENABLE_LOG_INFO
#define log_info(format, ...) HCI_DUMP_LOG(HCI_DUMP_LOG_LEVEL_INFO, format, ## __VA_ARGS__)
#else
#define log_info(...) (void)(0)
#endif
#ifdef ENABLE_LOG_ERROR
#define log_error(format, ...) HCI_DUMP_LOG(HCI_DUMP_LOG_LEVEL_ERROR, format, ## __VA_ARGS__)
#else
#define log_error(...) (void)(0)
#endif
/**
* @brief Log Security Manager key via log_info
* @param key to log
*/
void log_info_key(const char * name, sm_key_t key);
/**
* @brief Hexdump via log_info
* @param data
* @param size
*/
void log_info_hexdump(const void *data, int size);
/**
* @brief Hexdump via log_debug * @param data
* @param size
*/
void log_debug_hexdump(const void *data, int size);
#endif // DEBUG_H