# Kconfig - Modem configuration options

#
# Copyright (c) 2018 Foundries.io
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig MODEM
	bool "Modem Drivers"
	help
	  Enable config options for modem drivers.

if MODEM

config MODEM_RECEIVER
	bool "Enable modem receiver helper driver"
	help
	  This driver allows modem drivers to communicate over UART with custom
	  defined protocols. Driver doesn't inspect received data and all
	  aspects of received protocol data are handled by application via
	  work method provided.  This driver differs from the pipe UART driver
	  in that callbacks are executed in a different work queue and data is
	  passed around in k_pipe structures.

config MODEM_RECEIVER_MAX_CONTEXTS
	int "Maximum number of modem receiver contexts"
	depends on MODEM_RECEIVER
	range 1 10
	default 1
	help
	  Maximum number of modem receiver contexts to handle.  For most
	  purposes this should stay at 1.

config MODEM_SHELL
	bool "Enable modem shell utilities"
	select SHELL
	help
	  Activate shell module that provides modem utilities like
	  sending a command to the modem UART.

config MODEM_WNCM14A2A
	bool "Enable Wistron LTE-M modem driver"
	depends on UART_INTERRUPT_DRIVEN
	select MODEM_RECEIVER
	select NET_OFFLOAD
	select UART_MCUX_2 if BOARD_FRDM_K64F
	select GPIO_NRF_P1 if SOC_NRF52840
	select UART_1_NRF_UARTE if SOC_NRF52840
	select UART_1_NRF_FLOW_CONTROL if SOC_NRF52840
	help
	  Choose this setting to enable Wistron WNC-M14A2A LTE-M modem driver.
	  NOTE: Currently the pin settings only work with FRDM K64F shield.

config MODEM_WNCM14A2A_RX_STACK_SIZE
	int "Size of the stack for the WNC-M14A2A modem driver RX thread"
	depends on MODEM_WNCM14A2A
	default 1028
	help
	  This stack is used by the WNCM14A2A RX thread.

config MODEM_WNCM14A2A_RX_WORKQ_STACK_SIZE
	int "Size of the stack for the WNC-M14A2A modem driver work queue"
	depends on MODEM_WNCM14A2A
	default 2048
	help
	  This stack is used by the work queue to pass off net_pkt data
	  to the rest of the network stack, letting the rx thread continue
	  processing data.

config MODEM_WNCM14A2A_APN_NAME
	string "APN name for establishing network connection"
	depends on MODEM_WNCM14A2A
	default "m2m.com.attz"
	help
	  This setting is used in the AT%PDNSET command to set the APN name
	  for the network connection context.  Normally, don't need to change
	  this value.

config MODEM_WNCM14A2A_INIT_PRIORITY
	int "WNC-M14A2A driver init priority"
	depends on MODEM_WNCM14A2A
	default 80
	help
	  WNC-M14A2A device driver initialization priority.
	  Do not mess with it unless you know what you are doing.
	  Note that the priority needs to be lower than the net stack
	  so that it can start before the networking sub-system.

module = MODEM
module-str = modem
source "subsys/logging/Kconfig.template.log_config"

endif # MODEM
