# Bluetooth mesh shell configuration options

# Copyright (c) 2022 Nordic Semiconductor
# SPDX-License-Identifier: Apache-2.0

menuconfig BT_MESH_SHELL
	bool "Bluetooth mesh shell"
	select SHELL
	help
	  Activate shell module that provides Bluetooth mesh commands to
	  the console.

if BT_MESH_SHELL

config BT_MESH_SHELL_PROV
	bool "Support for provisioning shell commands"
	depends on BT_MESH_PROV
	default y
	help
	  This options enables support for provisioning shell commands.

config BT_MESH_SHELL_PROV_CTX_INSTANCE
	bool "Support for Shell provisioning context instance"
	depends on BT_MESH_SHELL_PROV
	help
	  This option enables the provisioning context instance in the
	  Bluetooth mesh shell module together with several provisioning
	  commands and target utility features. To use the provisioning
	  context instance, use bt_mesh_shell_prov in the
	  initialization of mesh.

config BT_MESH_SHELL_CDB
	bool "Support for CDB shell commands"
	depends on BT_MESH_CDB
	default y
	help
	  This options enables support for CDB shell commands.

config BT_MESH_SHELL_LOW_POWER
	bool "Support for Low Power node shell commands"
	depends on BT_MESH_LOW_POWER
	default y
	help
	  This option enables support for Low Power node shell commands.

config BT_MESH_SHELL_TEST
	bool "Support for test shell commands"
	default y
	help
	  This option enables support for test mesh shell commands.

config BT_MESH_SHELL_HEALTH_SRV_INSTANCE
	bool "Support for Shell Health Server model instance"
	depends on BT_MESH_SHELL_TEST
	help
	  This option enables Health Server model instance in the
	  Bluetooth mesh shell module together with fault controlling
	  shell commands. To use the model instance, add bt_mesh_shell_health_srv
	  to the device composition data. Use BT_MESH_SHELL_HEALTH_PUB_DEFINE to
	  instantiate publication context.

config BT_MESH_SHELL_GATT_PROXY
	bool "Support for GATT Proxy shell commands"
	depends on BT_MESH_GATT_PROXY || BT_MESH_PROXY_CLIENT
	default y
	help
	  This option enables support for GATT Proxy shell commands.

config BT_MESH_SHELL_HEALTH_CLI
	bool "Support for Health Client Model shell commands"
	depends on BT_MESH_HEALTH_CLI
	default y
	help
	  This option enables support of Health Client shell commands.

config BT_MESH_SHELL_CFG_CLI
	bool "Support for Configuration Client Model shell commands"
	depends on BT_MESH_CFG_CLI
	default y
	help
	  This option enables support of Configuration Client shell commands.

endif # BT_MESH_SHELL
