# Copyright (c) 2018-2019 Jan Van Winkel <jan.van_winkel@dxplore.eu>
# Copyright (c) 2020 Teslabs Engineering S.L.
# SPDX-License-Identifier: Apache-2.0

menu "Debug settings"

config LVGL_USE_DEBUG
	bool "Enable debug support"
	default y if TEST
	help
	  Enable debug support.

	  If debug support is enabled LVGL will validate the parameters of
	  any function call made and if an invalid parameter is found __ASSERT
	  is called.

if LVGL_USE_DEBUG

config LVGL_USE_ASSERT_NULL
	bool "Enable null pointer assertion"
	default y if TEST
	help
	  Enable null pointer assertion

	  Check if a null pointer is passed as a parameter (Quite fast)

config LVGL_USE_ASSERT_MEM
	bool "Enable memory allocation assertion"
	default y if TEST
	help
	  Enable memory allocation assertion

	  Check if memory allocation is successful (Quite fast)

config LVGL_USE_ASSERT_MEM_INTEGRITY
	bool "Enable memory integrity check"
	default y if TEST
	help
	  Check the integrity of lv_mem after critical operations. (Slow)

config LVGL_USE_ASSERT_STR
	bool "Enable string assertion"
	default y if TEST
	help
	  Enable string assertion

	  Check if the string is not a NULL pointer, unusually long string,
	  contains invalid characters or contains unusual repetitions. (Slow)

	  If this option is disabled and NULL pointer checking is enabled, the
	  NULL pointer check is executed instead.

config LVGL_USE_ASSERT_OBJ
	bool "Enable object assertion"
	default y if TEST
	help
	  Enable object assertion

	  Check if an object is not a NULL pointer, has the correct type and
	  does exists. (Quite Slow)

	  If this option is disabled and NULL pointer checking is enabled, the
	  NULL pointer check is executed instead.

config LVGL_USE_ASSERT_STYLE
	bool "Enable style assertion"
	default y if TEST
	help
	  Enable style assertion

	  Check if a used style is correctly initialized. (Fast)

endif

endmenu
