# 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"
	depends on SERIAL_SUPPORT_INTERRUPT
	select UART_INTERRUPT_DRIVEN
	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"
	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
