# Copyright (c) 2018-2020 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 IMG_ENABLE_IMAGE_CHECK
	select BOOTLOADER_MCUBOOT
	select MPU_ALLOW_FLASH_WRITE
	select NETWORKING
	select REQUIRES_FULL_LIBC
	select NET_UDP
	select NET_SOCKETS
	select NET_SOCKETS_POSIX_NAMES
	select COAP
	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.

if UPDATEHUB
config UPDATEHUB_POLL_INTERVAL
	int "Time to poll interval (in minutes)"
	default 1440
	range 0 43200
	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)"
	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
	help
	  Configure the max number of supported hardware
	  by the same image.

config UPDATEHUB_CE
	bool "Use UpdateHub Community Edition Sever"
	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 SHELL
	select KERNEL_SHELL
	help
	  Activate shell module that provides UpdateHub commands like

config UPDATEHUB_DTLS
	bool"Activate communication CoAPS/DTLS"
	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

config UPDATEHUB_COAP_CONN_TIMEOUT
	int "CoAP connection timeout in seconds"
	default 10
	range 1 360
	help
	  Set the CoAP connection timeout value.

config UPDATEHUB_COAP_MAX_RETRY
	int "Maximum retries attempts to download a packet"
	default 10
	range 3 10
	help
	  Set the maximum number of retries attempts to download a packet
	  before abort a current update.

config UPDATEHUB_COAP_BLOCK_SIZE_EXP
	int "Max CoAP block size defined as 2^(4 + EXP)"
	default 6
	range 0 6
	help
	  Configure the max size of a data payload were value:
	    0 - COAP_BLOCK_16
	    1 - COAP_BLOCK_32
	    2 - COAP_BLOCK_64
	    3 - COAP_BLOCK_128
	    4 - COAP_BLOCK_256
	    5 - COAP_BLOCK_512
	    6 - COAP_BLOCK_1024

	  This value is mapped directly to enum coap_block_size.

choice
	prompt "Firmware verification"
	default UPDATEHUB_DOWNLOAD_STORAGE_SHA256_VERIFICATION

config UPDATEHUB_DOWNLOAD_SHA256_VERIFICATION
	bool "SHA-256 on download"
	help
	  Enables SHA-256 verification of data stream while downloading.
	  Notice that it does not check whether the image written to a
	  storage is still valid, it only confirms that what has been
	  downloaded matches the server side SHA.

	  To check if the data written to permanent storage matches the SHA
	  simultaneously, enable "Both download and flash verifications"
	  option.

config UPDATEHUB_STORAGE_SHA256_VERIFICATION
	bool "SHA-256 from flash"
	help
	  Enables SHA-256 verification of stored data stream.  When this
	  option is enabled, the data stream will be read back from the
	  storage and verified with SHA to make sure that it has been
	  correctly written.

	  To check if the download data stream matches the SHA simultaneously,
	  enable "Both download and flash verifications" option.

config UPDATEHUB_DOWNLOAD_STORAGE_SHA256_VERIFICATION
	bool "SHA-256 from both download and flash"
	help
	  Enables SHA-256 verification on both data stream while downloading
	  and stored data stream on flash.

	  It is advised to leave this option enabled.

endchoice

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

endif
