1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-21 06:53:01 +08:00
lvgl/src/lv_core/lv_debug.h

155 lines
3.6 KiB
C
Raw Normal View History

2019-09-24 16:30:38 +02:00
/**
* @file lv_debug.h
*
*/
#ifndef LV_DEBUG_H
#define LV_DEBUG_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "lv_obj.h"
2019-09-27 03:28:44 +02:00
#if LV_USE_DEBUG
2019-09-24 16:30:38 +02:00
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
bool lv_debug_check_null(const void * p);
2019-09-24 23:14:17 +02:00
bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type);
2019-09-24 16:30:38 +02:00
2019-09-24 23:14:17 +02:00
bool lv_debug_check_obj_valid(const lv_obj_t * obj);
2019-09-24 16:30:38 +02:00
bool lv_debug_check_style(const lv_style_t * style);
2019-09-24 23:14:17 +02:00
bool lv_debug_check_str(const void * str);
2019-09-24 16:30:38 +02:00
void lv_debug_log_error(const char * msg, uint64_t value);
/**********************
* MACROS
**********************/
2019-09-24 23:14:17 +02:00
#ifndef LV_DEBUG_ASSERT
#define LV_DEBUG_ASSERT(expr, msg, value) \
{ \
if(!(expr)) { \
LV_LOG_ERROR(__func__); \
lv_debug_log_error(msg, (unsigned long int)value); \
while(1); \
} \
}
#endif
/*----------------
* CHECKS
*----------------*/
#ifndef LV_DEBUG_IS_NULL
#define LV_DEBUG_IS_NULL(p) (lv_debug_check_null(p))
#endif
#ifndef LV_DEBUG_IS_STR
2019-09-27 03:28:44 +02:00
#define LV_DEBUG_IS_STR(str) (lv_debug_check_null(str) && \
lv_debug_check_str(str))
2019-09-24 23:14:17 +02:00
#endif
#ifndef LV_DEBUG_IS_OBJ
#define LV_DEBUG_IS_OBJ(obj_p, obj_type) (lv_debug_check_null(obj_p) && \
lv_debug_check_obj_valid(obj_p) && \
lv_debug_check_obj_type(obj_p, obj_type))
#endif
#ifndef LV_DEBUG_IS_STYLE
#define LV_DEBUG_IS_STYLE(style_p) (lv_debug_check_style(style_p))
#endif
/*-----------------
* ASSERTS
*-----------------*/
2019-09-24 16:30:38 +02:00
2019-09-25 08:58:12 +02:00
/*clang-format off*/
#if LV_USE_ASSERT_NULL
# ifndef LV_ASSERT_NULL
# define LV_ASSERT_NULL(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "NULL pointer", p);
# endif
#else
# define LV_ASSERT_NULL(p) true
2019-09-24 23:14:17 +02:00
#endif
2019-09-25 08:58:12 +02:00
#if LV_USE_ASSERT_MEM
# ifndef LV_ASSERT_MEM
# define LV_ASSERT_MEM(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "Out of memory", p);
# endif
#else
# define LV_ASSERT_MEM(p) true
2019-09-24 16:30:38 +02:00
#endif
2019-09-25 08:58:12 +02:00
#if LV_USE_ASSERT_STR
# ifndef LV_ASSERT_STR
# define LV_ASSERT_STR(str) LV_DEBUG_ASSERT(LV_DEBUG_IS_STR(str), "Strange or invalid string", str);
2019-09-25 08:58:12 +02:00
# endif
2019-09-27 03:28:44 +02:00
#else /* LV_USE_ASSERT_OBJ == 0 */
# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
# define LV_ASSERT_STR(str) LV_ASSERT_NULL(str)
# else
# define LV_ASSERT_STR(str) true
# endif
2019-09-24 16:30:38 +02:00
#endif
2019-09-25 08:58:12 +02:00
#if LV_USE_ASSERT_OBJ
# ifndef LV_ASSERT_OBJ
# define LV_ASSERT_OBJ(obj_p, obj_type) LV_DEBUG_ASSERT(LV_DEBUG_IS_OBJ(obj_p, obj_type), "Invalid object", obj_p);
# endif
2019-09-27 03:28:44 +02:00
#else /* LV_USE_ASSERT_OBJ == 0 */
# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
# define LV_ASSERT_OBJ(obj_p, obj_type) LV_ASSERT_NULL(obj_p)
# else
# define LV_ASSERT_OBJ(obj_p, obj_type) true
# endif
2019-09-24 16:30:38 +02:00
#endif
2019-09-25 08:58:12 +02:00
#if LV_USE_ASSERT_STYLE
# ifndef LV_ASSERT_STYLE
# define LV_ASSERT_STYLE(style_p) LV_DEBUG_ASSERT(LV_DEBUG_IS_STYLE(style_p), "Invalid style", style_p);
2019-09-25 08:58:12 +02:00
# endif
#else
# define LV_ASSERT_STYLE(style) true
2019-09-24 16:30:38 +02:00
#endif
2019-09-27 03:28:44 +02:00
#else /* LV_USE_DEBUG == 0 */
#define LV_DEBUG_ASSERT(expr, msg, value) do{}while(0)
2019-09-27 03:28:44 +02:00
#define LV_ASSERT_NULL(p) true
#define LV_ASSERT_MEM(p) true
#define LV_ASSERT_STR(p) true
#define LV_ASSERT_OBJ(obj, obj_type) true
#define LV_ASSERT_STYLE(p) true
#endif /* LV_USE_DEBUG */
2019-09-25 08:58:12 +02:00
/*clang-format on*/
2019-09-24 16:30:38 +02:00
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /*LV_DEBUG_H*/