# 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_HAS_PRESET_SUPPORT && 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.
