# Copyright (c) 2020 Linumiz
# SPDX -License-Identifier: Apache-2.0

menuconfig HAWKBIT
	bool "Hawkbit Firmware Over-the-Air support"
	select NVS
	select FLASH
	select REBOOT
	select HWINFO
	select MBEDTLS
	select MBEDTLS_ENABLE_HEAP
	select NET_TCP
	select NET_SOCKETS
	select IMG_MANAGER
	select NETWORKING
	select HTTP_CLIENT
	select DNS_RESOLVER
	select JSON_LIBRARY
	select BOOTLOADER_MCUBOOT
	select MPU_ALLOW_FLASH_WRITE
	select IMG_ERASE_PROGRESSIVELY
	select NET_SOCKETS_POSIX_NAMES
	help
	  Hawkbit is a domain independent back-end framework for polling out
	  software updates to constrained edge devices as well as more powerful
	  controllers and gateways connected to IP based networking infrastructure.

if HAWKBIT
config HAWKBIT_POLL_INTERVAL
	int "Time to poll interval (in minutes)"
	default 5
	range 1 43200
	help
	  Set the interval that the hawkbit update server will be polled.
	  This time interval is zero and 43200 minutes(30 days).

config HAWKBIT_SHELL
	bool "Enable Hawkbit shell utilities"
	depends on SHELL
	help
	  Activate shell module that provides Hawkbit commands.

config HAWKBIT_SERVER
	string "User address for the hawkbit server"
	default ""
	help
	  Configure the hawkbit server address.

config HAWKBIT_PORT
	string "Port address for the hawkbit server"
	default "8080"
	help
	  Configure the hawkbit port number.

choice
	prompt "Hawkbit DDI API authentication modes"
	default HAWKBIT_DDI_NO_SECURITY

config HAWKBIT_DDI_NO_SECURITY
	bool "No authentication security"
	help
	  No authentication security for the Hawkbit DDI API.

config HAWKBIT_DDI_TARGET_SECURITY
	bool "Use target security token authentication"
	help
	  Use target security token authentication for the Hawkbit DDI API.

config HAWKBIT_DDI_GATEWAY_SECURITY
	bool "Use gateway security token authentication"
	help
	  Use gateway security token authentication for the Hawkbit DDI API.

endchoice

config HAWKBIT_DDI_SECURITY_TOKEN
	string "Authentication security token"
	depends on HAWKBIT_DDI_TARGET_SECURITY || HAWKBIT_DDI_GATEWAY_SECURITY
	default ""
	help
	  Authentication security token for the configured Hawkbit DDI
	  authentication mode.

module = HAWKBIT
module-str = Log Level for hawkbit
module-help = Enables logging for Hawkbit code.
source "subsys/logging/Kconfig.template.log_config"

endif
