#
# Copyright (c) 2018, 2019 O.S.Systems
#
# SPDX -License-Identifier: Apache-2.0
#

menuconfig UPDATEHUB
	bool"UpdateHub Firmware Over-the-Air support"
	select FLASH
	select REBOOT
	select IMG_MANAGER
	select BOOTLOADER_MCUBOOT
	select MPU_ALLOW_FLASH_WRITE
	select NETWORKING
	select NEWLIB_LIBC
	select NET_UDP
	select NET_SOCKETS
	select NET_SOCKETS_POSIX_NAMES
	select COAP
	select NET_CONFIG_SETTINGS
	select DNS_RESOLVER
	select JSON_LIBRARY
	select TINYCRYPT
	select TINYCRYPT_SHA256
	select HWINFO
	help
	  UpdateHub is an enterprise-grade solution which makes simple to
	  remotely update all your embedded devices in the field. It
	  handles all aspects related to sending Firmware Over-the-Air
	  (FOTA) updates with maximum security and efficiency, while you
	  focus in adding value to your product.

config UPDATEHUB_POLL_INTERVAL
	int "Time to poll interval (in minutes)"
	default 1440
	range 0 43200
	depends on UPDATEHUB
	help
	  Set the interval that the UpdateHub update server will be polled.
	  This time interval is zero and 43200 minutes(30 days).

config UPDATEHUB_PRODUCT_UID
	string "Product Unique Identifier (UID)"
	depends on UPDATEHUB
	help
	  The product unique identifier is used when communicating
	  with the UpdateHub server.

config UPDATEHUB_SUPPORTED_HARDWARE_MAX
	int "Max number of supported hardware"
	default 1
	range 1 100
	depends on UPDATEHUB
	help
	  Configure the max number of supported hardware
	  by the same image.

config UPDATEHUB_CE
	bool "Use UpdateHub Community Edition Sever"
	depends on UPDATEHUB
	help
	  Allow the use of UpdateHub Community
	  Server (updatehub-ce) as alternative to the
	  updatehub.io enterprise server.

config UPDATEHUB_SERVER
	string "User address for the updatehub-ce-server"
	depends on UPDATEHUB_CE
	help
	  This configuration is default, if need to use
	  other address, must be set on the UpdateHub shell

config UPDATEHUB_SHELL
	bool "Enable UpdateHub shell utilities"
	depends on UPDATEHUB
	depends on SHELL
	select KERNEL_SHELL
	help
	  Activate shell module that provides UpdateHub commands like

config UPDATEHUB_DTLS
	bool"Activate communication CoAPS/DTLS"
	depends on UPDATEHUB
	select MBEDTLS
	select MBEDTLS_ENABLE_HEAP
	select NET_SOCKETS_SOCKOPT_TLS
	select NET_SOCKETS_ENABLE_DTLS
	help
	  Enables DTLS communication between the UpdateHub
	  client and the server

module = UPDATEHUB
module-str = Log level for UpdateHub
module-help = Enables logging for UpdateHub code.
source "subsys/logging/Kconfig.template.log_config"
