# Bluetooth Audio - Call control configuration options
#
# Copyright (c) 2020 Bose Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

if BT_AUDIO

#####################  Telephone Bearer Service #####################

config BT_TBS
	bool "Telephone Bearer Service Support"
	select BT_CCID
	help
	  This option enables support for Telephone Bearer Service.

if BT_TBS

# TODO: BT_GTBS is mandatory if you support the call control server role.
# Need to enforce this.
config BT_GTBS
	bool "Generic Telephone Bearer Service Support"
	default y
	help
	  This option enables support for Generic Telephone Bearer Service.

config BT_TBS_PROVIDER_NAME
	string "Telephone Bearer Service Provider Name"
	default "Unknown"
	help
	  Sets the name of the service provider for the bearer.

config BT_TBS_UCI
	string "Telephone Bearer Service Uniform Caller Identifier (UCI)"
	default "un000"
	help
	  Sets the UCI of the bearer. See
		https://www.bluetooth.com/specifications/assigned-numbers/uniform-caller-identifiers/
		for a table of valid UCIs.

config BT_TBS_TECHNOLOGY
	int "Telephone Bearer Service Technology"
	range 1 10
	help
	  Sets the technology used for the bearer, e.g. GSM, LTE and 5G.
	  1 : 3G
	  2 : 4G
	  3 : LTE
	  4 : Wi-Fi
	  5 : 5G
	  6 : GSM
	  7 : CDMA
	  8 : 2G
	  9 : WCDMA
	  10: IP

config BT_TBS_URI_SCHEMES_LIST
	string "Telephone Bearer Service URI schemes Supported List"
	default "tel,skype"
	help
	  Sets a list of URI schemes that are supported by the bearer,
	  e.g. "tel" or "skype".
	  Multiple values shall be comma (,) separated, e.g. "tel,skype".

config BT_TBS_SIGNAL_STRENGTH_INTERVAL
	int "Telephone Bearer Service Signal Strength Reporting Interval"
	default 0
	range 0 255
	help
	  Sets the interval of reporting the signal strength in seconds.
		If the value is 0, the signal will not be reported.

config BT_TBS_STATUS_FLAGS
	int "Telephone Bearer Service Features and Status value"
	default 0
	range 0 3
	help
	  Bitfield to set feature and status flags.
	  	Bit 0: In-band ringtone
		Bit 1: Silent mode
		Bits 2-15: Reserved for future use

config BT_TBS_SUPPORTED_FEATURES
	int "Telephone Bearer Service Supported Features"
	default 1
	range 0 3
	help
	  Bitfield to set supported features of the bearer.
		Bit 0: Local Hold and Retrieve
		Bit 1: Join calls within Telephone Bearer Service

config BT_TBS_MAX_CALLS
	int "Telephone Bearer Service Maximum Number Of Calls Supported"
	default 3
	range 1 16
	help
	  Sets the maximum number of calls the service supports per bearer.

config BT_TBS_BEARER_COUNT
	int "How many bearer instances the device instantiates"
	default 1
	range 1 255
	help
	  Sets the number of TBS instances that are instantiated

config BT_TBS_SERVICE_COUNT
	int "Number of instantiated bearer service instances"
	default BT_TBS_BEARER_COUNT
	range 0 BT_TBS_BEARER_COUNT if BT_GTBS
	range BT_TBS_BEARER_COUNT BT_TBS_BEARER_COUNT
	help
	  Sets the number of TBS service instances that are instantiated

config BT_TBS_MAX_SCHEME_LIST_LENGTH
	int "The maximum length of the URI scheme list"
	default 30
	range 0 512
	help
	  Sets the maximum length of the URI scheme list. If BT_GTBS is enabled,
	  then the maximum length should be maximum 512 / BT_TBS_BEARER_COUNT.

config BT_TBS_AUTHORIZATION
	bool "TBS authorization requirement"
	help
	  If set to true, then any writable characteristics will require
	  authorization per connection.

config BT_TBS_MAX_URI_LENGTH
	int "The maximum length of the call URI supported"
	default 30
	range 4 253
	help
	  Sets the maximum length of the call URI supported. Note that if this
	  value is lower than a call URI, the call request will be rejected.

config BT_TBS_MAX_PROVIDER_NAME_LENGTH
	int "The maximum length of the bearer provider name"
	default 30
	range 0 512
	help
	  Sets the maximum length of the bearer provider name.

############# DEBUG #############

config BT_DEBUG_TBS
	bool "Telephone Bearer Service debug"
	help
	  Use this option to enable Telephone Bearer Service debug logs for the
	  Bluetooth Audio functionality.

endif # BT_TBS


##################### Call Control Client #####################

config BT_TBS_CLIENT
	bool "Telephone Bearer Service client"
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	help
	  This option enables support for Telephone Bearer Service client.

if BT_TBS_CLIENT

config BT_TBS_CLIENT_GTBS
	bool "Telephone Bearer Service client GTBS support"
	default y
	help
	  This option enables support for the generic TBS for the
	  Call Control client.

config BT_TBS_CLIENT_MAX_CALLS
	int "Maximum Number Of Calls Supported"
	default 1
	help
	  Sets the maximum number of calls the client supports per TBS instance.

config BT_TBS_CLIENT_MAX_TBS_INSTANCES
	int "Maximum number of TBS instances to setup"
	default 1
	range 1 3
	help
	  Sets the maximum number of Telephone Bearer Service (TBS)
	  instances to setup and use.

config BT_TBS_CLIENT_MAX_URI_LENGTH
	int "The maximum length of the call URI supported"
	default 30
	range 4 253
	help
	  Sets the maximum length of the call URI supported. Note that if this
	  value is lower than a call URI, the call request will be rejected.

config BT_TBS_CLIENT_MAX_PROVIDER_NAME_LENGTH
	int "The maximum length of the bearer provider name"
	default 30
	range 0 512
	help
	  Sets the maximum length of the bearer provider name.

############# DEBUG #############

config BT_DEBUG_TBS_CLIENT
	bool "Telephone Bearer Service client debug"
	help
	  Use this option to enable Telephone Bearer Service client debug logs
	  for the Bluetooth Audio functionality.

endif # BT_TBS_CLIENT

endif # BT_AUDIO
