# 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 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
	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 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
