# Quectel BG9x driver options

# Copyright (c) 2020 Analog Life LLC
# SPDX-License-Identifier: Apache-2.0

config MODEM_QUECTEL_BG9X
	bool "Enable quectel modem driver"
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	select MODEM_SOCKET
	select NET_SOCKETS_OFFLOAD
	help
	  Choose this setting to enable quectel BG9x LTE-CatM1/NB-IoT modem
	  driver.

if MODEM_QUECTEL_BG9X

config MODEM_QUECTEL_BG9X_RX_STACK_SIZE
	int "Stack size for the quectel BG9X modem driver RX thread"
	default 1028
	help
	  This stack is used by the quectel BG9X RX thread.

config MODEM_QUECTEL_BG9X_RX_WORKQ_STACK_SIZE
	int "Stack size for the quectel BG9X 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_QUECTEL_BG9X_APN
	string "APN for establishing network connection"
	default "internet"
	help
	  This setting is used 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_QUECTEL_BG9X_USERNAME
	string "Username for establishing network connection"
	default ""
	help
	  This setting is used to set the User name for the network connection
	  context.  This value is specific to the network provider and may
	  need to be changed.

config MODEM_QUECTEL_BG9X_PASSWORD
	string "Password for establishing network connection"
	default ""
	help
	  This setting is used to set the Password for the network connection
	  context.  This value is specific to the network provider and may
	  need to be changed.

config MODEM_QUECTEL_BG9X_INIT_PRIORITY
	int "quectel BG9X driver init priority"
	default 80
	help
	  quectel BG9X 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.

endif
