# Copyright 2023 Google LLC
# SPDX-License-Identifier: Apache-2.0

menuconfig INPUT
	bool "Input"
	help
	  Include input subsystem and drivers in the system config.

if INPUT

module = INPUT
module-str = input
source "subsys/logging/Kconfig.template.log_config"

config INPUT_INIT_PRIORITY
	int "Input subsystem and drivers init priority"
	default 90
	help
	  Input subsystem and drivers initialization priority.

choice INPUT_MODE
	prompt "Input event processing mode"
	default INPUT_MODE_THREAD

config INPUT_MODE_SYNCHRONOUS
	bool "Process input events synchronously"
	help
	  Input events callbacks are processed synchronously in the context of
	  the code that is reporting the event.

config INPUT_MODE_THREAD
	bool "Process input events in a dedicated thread"
	depends on MULTITHREADING
	help
	  Input events are added to a message queue and the callbacks are
	  processed asynchronously in a dedicated thread.

endchoice

if INPUT_MODE_THREAD

config INPUT_THREAD_PRIORITY_OVERRIDE
	bool "Override default input thread priority"
	help
	  Option to change the default value of input thread priority.

if INPUT_THREAD_PRIORITY_OVERRIDE
config INPUT_THREAD_PRIORITY
	int "Input thread priority"
	default 0
	help
	  Set thread priority of the input
endif

config INPUT_QUEUE_MAX_MSGS
	int "Input queue max messages"
	default 16
	help
	  Maximum number of messages in the input event queue.

config INPUT_THREAD_STACK_SIZE
	int "Input thread stack size"
	default 512
	help
	  Stack size for the thread processing the input events, must have
	  enough space for executing the registered callbacks.

endif # INPUT_MODE_THREAD

config INPUT_LONGPRESS
	bool "Input longpress"
	default y
	depends on DT_HAS_ZEPHYR_INPUT_LONGPRESS_ENABLED

endif # INPUT
