# Copyright (c) 2023 Bjarki Arge Andreasen
# SPDX-License-Identifier: Apache-2.0

config MODEM_CELLULAR
	bool "Generic cellular modem support"
	select MODEM_MODULES
	select MODEM_PPP
	select MODEM_CMUX
	select MODEM_CHAT
	select MODEM_PIPE
	select MODEM_PIPELINK
	select MODEM_BACKEND_UART
	select RING_BUFFER
	select NET_L2_PPP_OPTION_MRU
	select NET_L2_PPP_PAP
	depends on (DT_HAS_QUECTEL_BG95_ENABLED || \
		    DT_HAS_SIMCOM_SIM7080_ENABLED || DT_HAS_U_BLOX_SARA_R4_ENABLED || \
		    DT_HAS_U_BLOX_SARA_R5_ENABLED || DT_HAS_SWIR_HL7800_ENABLED || \
		    DT_HAS_TELIT_ME910G1_ENABLED || DT_HAS_TELIT_ME310G1_ENABLED || \
		    DT_HAS_QUECTEL_EG25_G_ENABLED || DT_HAS_NORDIC_NRF91_SLM_ENABLED || \
		    DT_HAS_SQN_GM02S_ENABLED || DT_HAS_U_BLOX_LARA_R6_ENABLED)
	help
	  This driver uses the generic 3gpp AT commands, along
	  with the standard protocols CMUX and PPP, to configure
	  cellular modems to establish a point-to-point
	  network connection. It is a template for tailored
	  drivers for the ublox, quectel and other modems, which
	  include power management and more complex device specific
	  features.

if MODEM_CELLULAR

config MODEM_CELLULAR_APN
	string "APN"
	default "internet"

config MODEM_CELLULAR_PERIODIC_SCRIPT_MS
	int "Periodic script interval in milliseconds"
	default 2000

config MODEM_CELLULAR_UART_BUFFER_SIZES
	int "The UART receive and transmit buffer sizes in bytes."
	default 512

config MODEM_CELLULAR_CMUX_MAX_FRAME_SIZE
	int "The maximum CMUX frame size in bytes."
	default 32 if DT_HAS_U_BLOX_LARA_R6_ENABLED
	default 128
	help
	  This value affects the size of buffers used to receive and transmit CMUX frames.

config MODEM_CELLULAR_CHAT_BUFFER_SIZES
	int "The size of the buffers used for the chat scripts in bytes."
	default 128

config MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES
	int "The size of the buffers used for each user pipe in bytes."
	default 128

config MODEM_CELLULAR_NEW_BAUDRATE
	int "New baudrate to configure modem to, if supported"
	range 9600 4000000
	default 3000000 if DT_HAS_U_BLOX_LARA_R6_ENABLED
	default 115200

config MODEM_CELLULAR_NEW_BAUDRATE_DELAY
	int "Time modem takes to change baudrate, in milliseconds"
	range 0 1000
	default 100 if DT_HAS_U_BLOX_LARA_R6_ENABLED
	default 300

endif
