# Kconfig - NBLE configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

config NBLE
	bool "Support for custom Nordic Semiconductor BLE protocol"
	default y if BLUETOOTH_STACK_NBLE
	default n
	select BLUETOOTH_PERIPHERAL
	select BLUETOOTH_CENTRAL
	select BLUETOOTH_GATT_CLIENT
	select BLUETOOTH_SMP
	select SERIAL
	select UART_INTERRUPT_DRIVEN
	select NANO_TIMEOUTS
	select NET_BUF
	select NANO_WORKQUEUE
	select SYSTEM_WORKQUEUE
	depends on BLUETOOTH_STACK_NBLE
	help
	  Enables support for using Nordic Semiconductor nRF51 Bluetooth
	  LE chips with a custom firmware. The API for this is a subset of
	  the normal Bluetooth API (include/bluetooth/). This driver can
	  only be enabled if CONFIG_BLUETOOTH has not been enabled.

	  A fundamental assumption that the driver makes is that it is
	  run on an architecture with the same ABI (e.g. struct packing
	  & endianess) as the nRF51 chip. The driver cannot be used on
	  any architecture that doesn't fulfill this requirement.

if NBLE
config BLUETOOTH_PERIPHERAL
	bool
	default n

config BLUETOOTH_CENTRAL
	bool
	default n

config BLUETOOTH_ATT_PREPARE_COUNT
	int "Number of ATT prepare write buffers"
	default 2
	range 0 64
	help
	  Number of buffers available for ATT prepare write, setting
	  this to 0 disables GATT long/reliable writes.

config BLUETOOTH_GATT_CLIENT
	bool
	default n

config BLUETOOTH_SMP
	bool
	default n

config	BLUETOOTH_MAX_CONN
	int
	default 6

config	BLUETOOTH_MAX_PAIRED
	int
	default 7

config BLUETOOTH_RX_STACK_SIZE
	int "Size of the receiving fiber stack"
	default 1024
	range 1024 65536
	help
	  Size of the receiving fiber stack. This is the context from
	  which all event callbacks to the application occur. The
	  default value is sufficient for basic operation, but if the
	  application needs to do advanced things in its callbacks that
	  require extra stack space, this value can be increased to
	  accomodate for that.

if BLUETOOTH_DEBUG

config	BLUETOOTH_DEBUG_DRIVER
	bool "Bluetooth driver debug"
	default n
	help
	  This option enables debug support for the chosen
	  Bluetooth UART driver to Nordic chip.

config BLUETOOTH_DEBUG_GATT
	bool "Bluetooth Generic Attribute Profile (GATT) debug"
	default n
	help
	  This option enables debug support for the Bluetooth
	  Generic Attribute Profile (GATT).

config NBLE_DEBUG_GAP
	bool "NBLE Generic Access Profile (GAP) debug"
	default n
	help
	  This option enables debug support for the Bluetooth
	  Generic Access Profile (GAP) in the interfaces to the
	  Nordic chip.

config NBLE_DEBUG_CONN
	bool "NBLE connection debug"
	default n
	help
	  This option enables debug support for Bluetooth
	  connections in the nble driver.

config NBLE_DEBUG_RPC
	bool "NBLE RPC debug"
	default n
	help
	  This option enables debug for RPC interface to the Nordic
	  Bluetooth LE chip.

endif # BLUETOOTH_DEBUG

config NBLE_UART_ON_DEV_NAME
	string "Device Name of UART Device for Nordic BLE"
	default "UART_0"
	depends on NBLE
	help
	  This option specifies the name of UART device to be used
	  for Nordic BLE.

endif
