# 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 non-HCI nRF51 firmware [DEPRECATED]"
	select UART_INTERRUPT_DRIVEN
	select NANO_TIMEOUTS
	select NET_BUF
	depends on SERIAL
	help
	  Note: This feature is deprecated and will be removed in a
	  future Zephyr version.

	  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 y

config BLUETOOTH_CENTRAL
	bool
	default y

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 y

config BLUETOOTH_SMP
	bool
	default y

config	BLUETOOTH_MAX_CONN
	int
	default 6

config	BLUETOOTH_MAX_PAIRED
	int
	default 7

config BLUETOOTH_RX_STACK_SIZE
	int "Size of the receiving thread stack"
	default 1024
	range 1024 65536
	help
	  Size of the receiving thread 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_HCI_DRIVER
	bool "Bluetooth driver debug"
	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"
	help
	  This option enables debug support for the Bluetooth
	  Generic Attribute Profile (GATT).

config NBLE_DEBUG_GAP
	bool "NBLE Generic Access Profile (GAP) debug"
	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"
	help
	  This option enables debug support for Bluetooth
	  connections in the nble driver.

config NBLE_DEBUG_RPC
	bool "NBLE RPC debug"
	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
