# Bluetooth Audio - Hearing Access Service options
#
# Copyright (c) 2022 Codecoup
#
# SPDX-License-Identifier: Apache-2.0

menuconfig BT_HAS
	bool "Hearing Access Service support [EXPERIMENTAL]"
	select EXPERIMENTAL
	select UTF8
	select BT_GATT_DYNAMIC_DB
	depends on BT_BAP_UNICAST_SERVER
	help
	  This option enables support for Hearing Access Service.

if BT_HAS

config BT_HAS_FEATURES_NOTIFIABLE
	bool "Hearing Aid Features Notifiable Support"
	help
	  This option enables support for clients to subscribe for notifications
	  on the Hearing Aid Features characteristic.

config BT_HAS_PRESET_COUNT
	int "Preset record list size"
	default 2
	range 0 255
	help
	  This option sets the number of Hearing Access Service Presets
	  that can be registered. Setting this value to 0 disables Presets support.

config BT_HAS_PRESET_SUPPORT
	def_bool BT_HAS_PRESET_COUNT > 0

if BT_HAS_PRESET_SUPPORT

config BT_HAS_PRESET_NAME_DYNAMIC
	bool "Allow to set preset name on runtime"
	help
	  Enabling this option allows for runtime configuration of preset name.

config BT_HAS_PRESET_CONTROL_POINT_NOTIFIABLE
	bool "Preset Control Point Notifiable support"
	depends on BT_EATT
	help
	  This option enables support for clients to subscribe for notifications
	  on the Hearing Aid Preset Control Point characteristic.

config BT_HAS_ACTIVE_PRESET_INDEX
	def_bool BT_HAS_PRESET_SUPPORT
	help
	  This option enables the Hearing Aid Active Preset Index characteristic.

endif # BT_HAS_PRESET_SUPPORT

endif # BT_HAS

config BT_HAS_CLIENT
	bool "Hearing Access Service Client support [EXPERIMENTAL]"
	select EXPERIMENTAL
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select BT_GATT_AUTO_UPDATE_MTU
	select UTF8
	help
	  This option enables support for Hearing Access Service Client.
