# 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 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_ENABLE_IMAGE_CHECK
	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 "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 HAWKBIT_DDI_SECURITY
	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
