# 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 n
	select BLUETOOTH_PERIPHERAL
	select BLUETOOTH_CENTRAL
	select BLUETOOTH_GATT_CLIENT
	select BLUETOOTH_SMP
	select UART_INTERRUPT_DRIVEN
	select NANO_TIMEOUTS
	select NET_BUF
	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 !BLUETOOTH && 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.

config NBLE_UART_IRQ
	int "IRQ of UART Device for Nordic BLE"
	depends on NBLE
	help
	  This option specifies the IRQ of UART device to be used
	  for Nordic BLE.

config  NBLE_UART_IRQ_PRI
	int "IRQ Priority of UART Device for Nordic BLE"
	depends on NBLE
	help
	  This option specifies the IRQ priority of UART device to be used
	  for Nordic BLE.

endif
