# Copyright (c) 2018-2023 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 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 "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

choice FLASH_AREA_CHECK_INTEGRITY_BACKEND
	default FLASH_AREA_CHECK_INTEGRITY_MBEDTLS
endchoice

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

endif
