# 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
	imply GPIO
	help
	  Choose this setting to enable quectel BG9x LTE-CatM1/NB-IoT modem
	  driver.

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.
