# 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
	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/*.h). 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_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_DEBUG
	bool "Enable Debug"
	default n
	select STDOUT_CONSOLE

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