# Kconfig - OpenThread driver configuration options
#
#
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

#
# OpenThread options
#
menuconfig NET_L2_OPENTHREAD
	bool "OpenThread L2"
	depends on FLASH
	depends on FLASH_PAGE_LAYOUT
	depends on CPLUSPLUS
	depends on REBOOT
	select OPENTHREAD_PLAT

if NET_L2_OPENTHREAD

config OPENTHREAD_PLAT
	bool
	help
	  This option enables OpenThread platform

if OPENTHREAD_PLAT

menuconfig OPENTHREAD_DEBUG
	bool "OpenThread stack log support"
	help
	  This option enables log support for OpenThread

if OPENTHREAD_DEBUG

choice
	prompt "OpenThread stack log level"
	help
	  This option selects log level for OpenThread stack.

config OPENTHREAD_LOG_LEVEL_ERROR
	bool "Error"
config OPENTHREAD_LOG_LEVEL_WARNING
	bool "Warning"
config OPENTHREAD_LOG_LEVEL_INFO
	bool "Info"
config OPENTHREAD_LOG_LEVEL_DEBUG
	bool "Debug"
endchoice

endif

endif

config OPENTHREAD_LOG_LEVEL
	int
	default 1 if OPENTHREAD_LOG_LEVEL_ERROR
	default 2 if OPENTHREAD_LOG_LEVEL_WARNING
	default 3 if OPENTHREAD_LOG_LEVEL_INFO
	default 4 if OPENTHREAD_LOG_LEVEL_DEBUG
	default 0

menuconfig OPENTHREAD_L2_DEBUG
	bool "OpenThread L2 log support"
	help
	  This option enables log support for OpenThread

if OPENTHREAD_L2_DEBUG
config OPENTHREAD_L2_DEBUG_DUMP_15_4
	bool "Dump 802.15.4 packets"
	help
	  This option enables dumping of 802.15.4 packets

config OPENTHREAD_L2_DEBUG_DUMP_IPV6
	bool "Dump IPv6 packets"
	help
	  This option enables dumping of IPv6 packets

endif

module = OPENTHREAD_L2
module-dep = NET_LOG
module-str = Log level for OpenThread driver
module-help = Enables OpenThread driver to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

config OPENTHREAD_THREAD_PRIORITY
	int "OpenThread thread priority"
	default 8

config OPENTHREAD_THREAD_STACK_SIZE
	int "OpenThread thread stack size"
	default 6144 if OPENTHREAD_COMMISSIONER
	default 3072

config OPENTHREAD_PKT_LIST_SIZE
	int "List size for Ip6 packet buffering"
	default 10

config OPENTHREAD_PANID
	int "Default PAN ID"
	default 43981

config OPENTHREAD_CHANNEL
	int "Default Channel"
	default 11

config OPENTHREAD_NETWORK_NAME
	string "Default network name"
	default "ot_zephyr"
	help
	  Network name for OpenThread

config OPENTHREAD_XPANID
	string "Default Extended PAN ID"
	default "de:ad:00:be:ef:00:ca:fe"
	help
	  Extended PAN ID for OpenThread with
	  format "de:ad:00:be:ef:00:ca:fe"

choice
	prompt "OpenThread device type"
	help
	  This option selects Thread network device type

config OPENTHREAD_FTD
	bool "FTD - Full Thread Device"
config OPENTHREAD_MTD
	bool "MTD - Minimal Thread Device"
endchoice

config OPENTHREAD_SHELL
	bool "Enable OpenThread shell"
	select SHELL
	default y

config OPENTHREAD_DIAG
	bool "Diagnostic functions support"
	help
	  Enable OpenThread CLI diagnostic commands

config OPENTHREAD_COMMISSIONER
	bool "Commissioner functions support"
	help
	  Enable commissioner capability in OpenThread stack

config OPENTHREAD_JOINER
	bool "Joiner functions support"
	help
	  Enable joiner capability in OpenThread stack

config OPENTHREAD_JOINER_AUTOSTART
	bool "Support for automatic joiner start"
	depends on OPENTHREAD_JOINER
	help
	  Enable automatic joiner start

config OPENTHREAD_JOINER_PSKD
	string "Default Pre Shared key for the Device to start joiner"
	depends on OPENTHREAD_JOINER_AUTOSTART
	default "J01NME"
	help
	  Pre Shared Key for the Device to start joiner

config OPENTHREAD_DHCP6_CLIENT
       bool "DHCPv6 client support"
       help
         Enable DHCPv6 client capability in OpenThread stack

config OPENTHREAD_DHCP6_SERVER
       bool "DHCPv6 server support"
       help
         Enable DHCPv6 server capability in OpenThread stack

config OPENTHREAD_PLATFORM_INFO
	string "Platform information for OpenThread"
	default "ZEPHYR"
	help
	  Platform information for OpenThread

config OPENTHREAD_JAM_DETECTION
	bool "Jam detection support"
	help
	  Enable jam detection in OpenThread stack

config OT_PLAT_FLASH_PAGES_COUNT
	int "Flash pages count used by OpenThread platform"
	default 4
	help
	  This option sets flash pages count used by OpenThread to store its settings. They are located at the end of flash.

endif
