# Bluetooth Audio - Media control configuration options

#
# Copyright (c) 2020-2022 Nordic Semiconductor
#
# SPDX-License-Identifier: Apache-2.0
#

#### Media Control Service ################################

config BT_MCS
	bool "Media Control Service Support"
	depends on MCTL_LOCAL_PLAYER_REMOTE_CONTROL
	depends on UTF8
	select BT_CCID
	select EXPERIMENTAL
	select BT_GATT_DYNAMIC_DB
	help
	  This option enables support for the Media Control Service.

#### Media Control Client ################################

config BT_MCC
	bool "Media Control Client Support"
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select EXPERIMENTAL
	help
	  This option enables support for the Media Control Client.

if BT_MCC

config BT_MCC_MEDIA_PLAYER_NAME_MAX
	int "Max length of media player name"
	default 20
	range 1 255
	help
	  Sets the maximum number of bytes (including the null termination) of
	  the name of the media player. If the name is longer, the media
	  control client will truncate the name when reading it.

config BT_MCC_ICON_URL_MAX
	int "Max length of media player icon URL"
	default 40
	range 1 255
	help
	  Sets the maximum number of bytes (including the null termination) of
	  the media player icon URL. If the URL is longer, the media control
	  client will truncate the name when reading it.

config BT_MCC_TRACK_TITLE_MAX
	int "Max length of the title of a track"
	default 40
	range 1 255
	help
	  Sets the maximum number of bytes (including the null termination) of
	  the title of any track in the media player. If the title is longer,
	  the media control client will truncate the title when reading it.

config BT_MCC_SEGMENT_NAME_MAX
	int "Max length of the name of a track segment"
	default 25
	range 1 255
	help
	  Sets the the maximum number of bytes (including the null termination)
	  of the name of any track segment in the media player. If the name is
	  longer, the media control client will truncate the name when reading
	  it.

config BT_MCC_OTS
	bool "Media Control Client support for Object Transfer Service"
	depends on BT_OTS_CLIENT
	help
	  Use this option to configure support in the Media Control Client for
	  an included Object Transfer Service in the Media Control Service.

if BT_MCC_OTS

config BT_MCC_OTC_OBJ_BUF_SIZE
	int "The size of the buffer used for OTC object in MCC"
	default 512
	range 1 65536
	help
	  Sets the size (in octets) of the buffer used for receiving the content
	  of objects.
	  Should be set large enough to fit any expected object.

config BT_MCC_TOTAL_OBJ_CONTENT_MEM
	int "Total memory size to use for storing the content of objects"
	default 1
	range 0 65536
	help
	  Sets the total memory size (in octets) to use for storing the content
	  of objects.
	  This is used for the total memory pool buffer size from which memory
	  is allocated when reading object content.

config BT_MCC_TRACK_SEGS_MAX_CNT
	int "Maximum number of tracks segments in a track segment object"
	default 25
	range 0 500
	help
	  Sets the maximum number of tracks segments in a track segment object.
	  If the received object is bigger, the remaining data in the object
	  will be ignored.

config BT_MCC_GROUP_RECORDS_MAX
	int "Maximum number of records in a group object"
	default 25
	range 0 500
	help
	  Sets the maximum number of records in a group object. If the received
	  group object has more records than this, the remaining records in the
	  object will be ignored.

endif # BT_MCC_OTS

config BT_MCC_SHELL
	bool "Media Control Client Shell Support"
	default y if BT_SHELL
	help
	  This option enables shell support for the Media Control Client.

config BT_MCC_MINIMAL
	bool "Minimal Media Control Client without optional procedures"
	help
	  This option disables all optional procedures in the Media Control Client.

config BT_MCC_READ_MEDIA_PLAYER_ICON_URL
	bool "Support reading Media Player Icon URL"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for Read Media Information procedure
	  optionally read the Media Player Icon URL.

config BT_MCC_READ_TRACK_TITLE
	bool "Support reading Track Title"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Track Title.

config BT_MCC_READ_TRACK_TITLE_ENABLE_SUBSCRIPTION
	bool "Support to enable or disable the subscription of Track Title"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for the subscription of Track Title.

config BT_MCC_READ_TRACK_DURATION
	bool "Support reading Track Duration"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Track Duration.

config BT_MCC_READ_TRACK_POSITION
	bool "Support reading Track Position"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Track Position.

config BT_MCC_SET_TRACK_POSITION
	bool "Support setting Track Position"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for setting Track Position.

config BT_MCC_READ_PLAYBACK_SPEED
	bool "Support reading Playback Speed"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Playback Speed.

config BT_MCC_SET_PLAYBACK_SPEED
	bool "Support setting Playback Speed"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for setting Playback Speed.

config BT_MCC_READ_SEEKING_SPEED
	bool "Support reading Seeking Speed"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Seeking Speed.

config BT_MCC_READ_PLAYING_ORDER
	bool "Support reading Playing Order"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Playing Order.

config BT_MCC_SET_PLAYING_ORDER
	bool "Support setting Playing Order"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for setting Playing Order.

config BT_MCC_READ_PLAYING_ORDER_SUPPORTED
	bool "Support reading Playing Order Supported"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Playing Order Supported.

config BT_MCC_READ_MEDIA_STATE
	bool "Support reading Media State"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Media State.

config BT_MCC_SET_MEDIA_CONTROL_POINT
	bool "Support setting Media Control Point"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for setting Media Control Point.

config BT_MCC_READ_MEDIA_CONTROL_POINT_OPCODES_SUPPORTED
	bool "Support reading Media Control Point Opcodes Supported"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Media Control Point Opcodes Supported.

config BT_MCC_READ_CONTENT_CONTROL_ID
	bool "Support reading Content Control ID"
	default !BT_MCC_MINIMAL
	help
	  This option enables support for reading Content Control ID.

endif # BT_MCC
