# 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.

endchoice

config MODEM_GSM_UART_NAME
	string "UART device name the modem is connected to"

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_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
