# Copyright (c) 2020 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config MODEM_GSM_PPP
	bool "Support GSM modems"
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	help
	  Enable GSM modems that support standard AT commands and PPP.

if MODEM_GSM_PPP

choice
	prompt "Modem type"
	default MODEM_GSM_GENERIC
	help
	  Type/manufacturer of the GSM modem

config MODEM_GSM_GENERIC
	bool "Generic GSM modem"
	help
	  The modem does not need any special handling etc.

config MODEM_GSM_SIMCOM
	bool "SIMCOM modem"
	help
	  Use this if you have SIMCOM based modem like SIM800 etc.

config MODEM_GSM_QUECTEL
	bool "Quectel modem"
	help
	  Use this if you have Quectel based modem like EC2X etc.

endchoice

config MODEM_GSM_RX_STACK_SIZE
	int "Size of the stack allocated for receiving data from modem"
	default 512
	help
	  Sets the stack size which will be used by the GSM RX thread.

config MODEM_GSM_INIT_PRIORITY
	int "Init priority for the GSM modem driver"
	default 42
	range 0 99
	help
	  The GSM modem is initialized in POST_KERNEL using priority in
	  the range 0-99.

config MODEM_GSM_APN
	string "Access Point Name"
	default "internet"
	help
	  Specify Access Point Name, i.e. the name to identify Internet IP
	  GPRS cellular data context.

config GSM_PPP_AUTOSTART
	bool "Auto-start PPP at boot"
	default y
	help
	  This setting lets driver connect to network and initialize PPP at
	  boot. Unselect this if you want to run application code before
	  modem connects to network. See contents of "drivers/gsm_ppp.h"
	  to get an idea of the API.

config MODEM_GSM_ATTACH_TIMEOUT
	int "Timeout for attaching to packet service"
	default 30
	help
	  Before activating PPP, attachment to packet service is checked
	  using AT+CGATT. This setting dictates how much time in seconds
	  we give the modem before giving up.

config MODEM_GSM_MANUAL_MCCMNO
	string "MCC/MNO for establishing network connection"
	help
	  This setting is used in the AT+COPS command to set the MCC/MNO
	  for the network connection context.  This value is specific to
	  the network provider and may need to be changed if auto is not
	  selected.

config MODEM_GSM_RSSI_POLLING_PERIOD
	int "Configure RSSI polling period (in seconds)"
	default 30
	help
	  This settings is used to configure the period of RSSI polling

config MODEM_GSM_ENABLE_CESQ_RSSI
	bool "Enable +CESQ RSSI measurement"
	help
	   If this is enabled, RSRP, RSCP and RXREL values are read from the
	   modem with +CESQ. Otherwise only RSSI value is read with +CSQ
	   from the modem.

config MODEM_GSM_FACTORY_RESET_AT_BOOT
	bool "Factory reset modem at boot"
	help
	  If this is enabled, the modem will be reset to factory default
	  settings first thing in the initialization sequence. This is
	  helpful if your modem has a tendency to get stuck due to cached
	  state.

endif
