# u-blox SARA R4 driver options

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

config MODEM_UBLOX_SARA
	bool "Enable u-blox SARA modem driver"
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	select MODEM_SOCKET
	select NET_OFFLOAD
	select NET_SOCKETS_OFFLOAD
	imply GPIO
	help
	  Choose this setting to enable u-blox SARA-R4 LTE-CatM1/NB-IoT modem
	  driver.

if MODEM_UBLOX_SARA

choice MODEM_UBLOX_SARA_VARIANT
	bool "u-blox SARA variant selection"
	default MODEM_UBLOX_SARA_R4

config MODEM_UBLOX_SARA_R4
	bool "u-blox SARA-R4"
	help
	  Enable support for SARA-R4 modem

config MODEM_UBLOX_SARA_U2
	bool "u-blox SARA-U2"
	help
	  Enable support for SARA-U2 modem

config MODEM_UBLOX_SARA_AUTODETECT_VARIANT
	bool "detect automatically"
	help
	  Enable automatic detection of modem variant (SARA-R4 or SARA-U2)

endchoice

config MODEM_UBLOX_SARA_R4_NAME
	string "Driver name"
	default "MODEM_SARA"

config MODEM_UBLOX_SARA_R4_RX_STACK_SIZE
	int "Stack size for the u-blox SARA-R4 modem driver RX thread"
	default 1028
	help
	  This stack is used by the u-blox SARA-R4 RX thread.

config MODEM_UBLOX_SARA_R4_RX_WORKQ_STACK_SIZE
	int "Stack size for the u-blox SARA-R4 modem driver work queue"
	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_UBLOX_SARA_R4_APN
	string "APN for establishing network connection"
	default "hologram"
	help
	  This setting is used in the AT+CGDCONT command to set the APN name
	  for the network connection context.  This value is specific to
	  the network provider and may need to be changed.

config MODEM_UBLOX_SARA_AUTODETECT_APN
	bool "detect APN automatically"
	help
	  Enable automatic detection of the APN, based on the IMSI
	  If the detection fails, the configured APN will be used

config MODEM_UBLOX_SARA_AUTODETECT_APN_PROFILES
	string "list of profiles to search when autodetecting APN"
	default "hologram=23450, wm=20601 29505 29509 23450 53703 90143"
	help
	  Set a comma separated list of profiles, each containing of:
	  <apn>=<IMSI_1> ... <IMSI_n>

config MODEM_UBLOX_SARA_R4_MANUAL_MCCMNO
	string "MCC/MNOfor 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_UBLOX_SARA_R4_INIT_PRIORITY
	int "u-blox SARA-R4 driver init priority"
	default 80
	help
	  u-blox SARA-R4 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.

config MODEM_UBLOX_SARA_R4_NET_STATUS
	bool "Enable support for network status indication"
	help
	  Choose this setting to use a modem GPIO pin as network indication.

if MODEM_UBLOX_SARA_R4_NET_STATUS

config MODEM_UBLOX_SARA_R4_NET_STATUS_PIN
	int "Network status indication GPIO ID"
	default 16
	help
	  This setting is used to configure one of the modem's GPIO pins
	  as a network status indication.  See the manual for the gpio ids
	  and how they map to pin numbers.

endif # MODEM_UBLOX_SARA_R4_NET_STATUS

config MODEM_UBLOX_SARA_RSSI_WORK
	bool "Enable RSSI polling work"
	default y
	help
	  u-blox SARA-R4 device is configured to poll for RSSI

config MODEM_UBLOX_SARA_RSSI_WORK_PERIOD
	int "Configure RSSI WORK polling frequency"
	depends on MODEM_UBLOX_SARA_RSSI_WORK
	default 30
	help
	  This settings is used to configure the period of RSSI polling

endif # MODEM_UBLOX_SARA
