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