# 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 "Memory manager settings"

config LVGL_BITS_PER_PIXEL
	int "Bits per pixel"
	default 32
	range 1 32
	depends on LVGL_BUFFER_ALLOC_STATIC
	help
	  Number of bits per pixel.

choice
	prompt "Memory pool"
	default LVGL_MEM_POOL_HEAP_KERNEL
	help
	  Memory pool to use for lvgl allocated objects

	config LVGL_MEM_POOL_HEAP_KERNEL
		bool "Kernel Heap"
		depends on HEAP_MEM_POOL_SIZE != 0
		help
		  Use k_malloc and k_free to allocate objects on the kernel heap

	config LVGL_MEM_POOL_HEAP_LIB_C
	  bool "C library Heap"
	  depends on !MINIMAL_LIBC || (MINIMAL_LIBC_MALLOC_ARENA_SIZE != 0)
	  help
		Use C library malloc and free to allocate objects on the C library heap

	config LVGL_MEM_POOL_KERNEL
		bool "Kernel space lvgl pool"
		help
		  Use a dedicated memory pool in kernel space to allocate lvgl objects
		  on

	config LVGL_MEM_POOL_USER
		bool "User space lvgl pool"
		help
		  Use a dedicated memory pool in user space to allocate lvgl objects on

endchoice

if LVGL_MEM_POOL_KERNEL || LVGL_MEM_POOL_USER

config LVGL_MEM_POOL_MIN_SIZE
	int "Minimum memory pool block size"
	default 16
	help
	  Size of the smallest block in the memory pool in bytes

config LVGL_MEM_POOL_MAX_SIZE
	int "Maximum memory pool block size"
	default 2048
	help
	  Size of the largest block in the memory pool in bytes

config LVGL_MEM_POOL_NUMBER_BLOCKS
	int "Number of max size blocks in memory pool"
	default 1
	help
	  Number of maximum sized blocks in the memory pool.

endif

config LVGL_VDB_SIZE
	int "Rendering buffer size"
	default 10
	range 1 100
	help
	  Size of the buffer used for rendering screen content as a percentage
	  of total display size.

config LVGL_DOUBLE_VDB
	bool "Use two rendering buffers"
	help
	  Use two buffers to render and flush data in parallel

choice
	prompt "Rendering Buffer Allocation"
	default LVGL_BUFFER_ALLOC_STATIC
	help
	  Type of allocation that should be used for allocating rendering buffers

config LVGL_BUFFER_ALLOC_STATIC
	bool "Static"
	help
	  Rendering buffers are statically allocated based on the following
	  configuration parameters:
	  * Horizontal screen resolution
	  * Vertical screen resolution
	  * Rendering buffer size
	  * Bytes per pixel

config LVGL_BUFFER_ALLOC_DYNAMIC
	bool "Dynamic"
	help
	  Rendering buffers are dynamically allocated based on the actual
	  display parameters

endchoice

endmenu
