# nRF52840 Dongle NRF52840 board configuration
#
# Copyright (c) 2018-2023 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

if BOARD_NRF52840DONGLE_NRF52840

config BOARD
	default "nrf52840dongle_nrf52840"

# To let the nRF5 bootloader load an application, the application
# must be linked after Nordic MBR, that is factory-programmed on the board.

# Nordic nRF5 bootloader exists outside of the partitions specified in the
# DTS file, so we manually override FLASH_LOAD_OFFSET to link the application
# correctly, after Nordic MBR.

# When building MCUBoot, MCUBoot itself will select USE_DT_CODE_PARTITION
# which will make it link into the correct partition specified in DTS file,
# so no override is necessary.

config FLASH_LOAD_OFFSET
	default 0x1000
	depends on BOARD_HAS_NRF5_BOOTLOADER && !USE_DT_CODE_PARTITION

if BOARD_SERIAL_BACKEND_CDC_ACM

config USB_DEVICE_STACK
	default y

config USB_CDC_ACM
	default y

config UART_CONSOLE
	default CONSOLE

config USB_DEVICE_INITIALIZE_AT_BOOT
	default y if !MCUBOOT

config SHELL_BACKEND_SERIAL_CHECK_DTR
	default SHELL

config USB_DEVICE_REMOTE_WAKEUP
	default n

if LOG

# Logger cannot use itself to log
choice USB_CDC_ACM_LOG_LEVEL_CHOICE
	default USB_CDC_ACM_LOG_LEVEL_OFF
endchoice

# Set USB log level to error only
choice USB_DEVICE_LOG_LEVEL_CHOICE
	default USB_DEVICE_LOG_LEVEL_ERR
endchoice

# Wait 4000ms at startup for logging
config LOG_PROCESS_THREAD_STARTUP_DELAY_MS
	default 4000

endif # LOG

if USB_DEVICE_STACK

# Enable UART driver, needed for CDC ACM
config SERIAL
	default y

endif # USB_DEVICE_STACK

endif # BOARD_SERIAL_BACKEND_CDC_ACM

config BT_CTLR
	default BT

endif # BOARD_NRF52840DONGLE_NRF52840
