# 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 LV_Z_BITS_PER_PIXEL
	int "Bits per pixel"
	default 32
	range 1 32
	depends on LV_Z_BUFFER_ALLOC_STATIC
	help
	  Number of bits per pixel.

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

	config LV_Z_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 LV_Z_MEM_POOL_SYS_HEAP
		bool "User space lvgl pool"
		select SYS_HEAP_INFO
		help
		  Use a dedicated memory pool from a private sys heap.

endchoice

config LV_Z_MEM_POOL_SIZE
	int "Memory pool size"
	default 2048
	depends on LV_Z_MEM_POOL_SYS_HEAP
	help
	  Size of the memory pool in bytes

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

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

config LV_Z_FULL_REFRESH
	bool "Force full refresh mode"
	help
	  Force full refresh of display on update. When combined with
	  LV_Z_VDB_SIZE, this setting can improve performance for display
	  controllers that require a framebuffer to be present in system memory,
	  since the controller can render the LVGL framebuffer directly

config LV_Z_VDB_ALIGN
	int "Rending buffer alignment"
	default 4
	depends on LV_Z_BUFFER_ALLOC_STATIC
	help
	  Rendering buffer alignment. Depending on chosen color depth,
	  buffer may be accessed as a uint8_t *, uint16_t *, or uint32_t *,
	  so buffer must be aligned to prevent unaligned memory access

config LV_Z_VBD_CUSTOM_SECTION
	bool "Link rendering buffers to custom section"
	depends on LV_Z_BUFFER_ALLOC_STATIC
	help
	  Place LVGL rendering buffers in custom section, with tag ".lvgl_buf".
	  This can be used by custom linker scripts to relocate the LVGL
	  rendering buffers to a custom location, such as tightly coupled or
	  external memory.

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

config LV_Z_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 LV_Z_BUFFER_ALLOC_DYNAMIC
	bool "Dynamic"
	help
	  Rendering buffers are dynamically allocated based on the actual
	  display parameters

endchoice

endmenu
