/*
 * Copyright (c) 2019 - 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCS_H_
#define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCS_H_

/**
 * @brief Media Control Service (MCS)
 *
 * @defgroup bt_mcs Media Control Service (MCS)
 *
 * @ingroup bluetooth
 * @{
 *
 * [Experimental] Users should note that the APIs can change
 * as a part of ongoing development.
 *
 * Definitions and types related to the Media Control Service and Media Control
 * Profile specifications.
 */

#include <sys/util.h>

#ifdef __cplusplus
extern "C" {
#endif


/** @brief Playback speeds
 *
 * All values from -128 to 127 allowed, only some defined
 */
#define BT_MCS_PLAYBACK_SPEED_MIN     -128
#define BT_MCS_PLAYBACK_SPEED_QUARTER -128
#define BT_MCS_PLAYBACK_SPEED_HALF     -64
#define BT_MCS_PLAYBACK_SPEED_UNITY      0
#define BT_MCS_PLAYBACK_SPEED_DOUBLE    64
#define BT_MCS_PLAYBACK_SPEED_MAX      127

/** @brief Seeking speed
 *
 * The allowed values for seeking speed are the range -64 to -4
 * (endpoints included), the value 0, and the range 4 to 64
 * (endpoints included).
 */
#define BT_MCS_SEEKING_SPEED_FACTOR_MAX  64
#define BT_MCS_SEEKING_SPEED_FACTOR_MIN   4
#define BT_MCS_SEEKING_SPEED_FACTOR_ZERO  0

/** Playing orders */
#define BT_MCS_PLAYING_ORDER_SINGLE_ONCE    0X01
#define BT_MCS_PLAYING_ORDER_SINGLE_REPEAT  0x02
#define BT_MCS_PLAYING_ORDER_INORDER_ONCE   0x03
#define BT_MCS_PLAYING_ORDER_INORDER_REPEAT 0x04
#define BT_MCS_PLAYING_ORDER_OLDEST_ONCE    0x05
#define BT_MCS_PLAYING_ORDER_OLDEST_REPEAT  0x06
#define BT_MCS_PLAYING_ORDER_NEWEST_ONCE    0x07
#define BT_MCS_PLAYING_ORDER_NEWEST_REPEAT  0x08
#define BT_MCS_PLAYING_ORDER_SHUFFLE_ONCE   0x09
#define BT_MCS_PLAYING_ORDER_SHUFFLE_REPEAT 0x0a

/** @brief Playing orders supported
 *
 * A bitmap, in the same order as the playing orders above.
 * Note that playing order 1 corresponds to bit 0, and so on.
 */
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_SINGLE_ONCE    BIT(0)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_SINGLE_REPEAT  BIT(1)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_INORDER_ONCE   BIT(2)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_INORDER_REPEAT BIT(3)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_OLDEST_ONCE    BIT(4)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_OLDEST_REPEAT  BIT(5)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_NEWEST_ONCE    BIT(6)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_NEWEST_REPEAT  BIT(7)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_SHUFFLE_ONCE   BIT(8)
#define BT_MCS_PLAYING_ORDERS_SUPPORTED_SHUFFLE_REPEAT BIT(9)

/** Media states */
#define BT_MCS_MEDIA_STATE_INACTIVE 0x00
#define BT_MCS_MEDIA_STATE_PLAYING  0x01
#define BT_MCS_MEDIA_STATE_PAUSED   0x02
#define BT_MCS_MEDIA_STATE_SEEKING  0x03
#define BT_MCS_MEDIA_STATE_LAST     0x04

/** Media control point opcodes */
#define BT_MCS_OPC_PLAY          0x01
#define BT_MCS_OPC_PAUSE         0x02
#define BT_MCS_OPC_FAST_REWIND   0x03
#define BT_MCS_OPC_FAST_FORWARD  0x04
#define BT_MCS_OPC_STOP          0x05

#define BT_MCS_OPC_MOVE_RELATIVE 0x10

#define BT_MCS_OPC_PREV_SEGMENT  0x20
#define BT_MCS_OPC_NEXT_SEGMENT  0x21
#define BT_MCS_OPC_FIRST_SEGMENT 0x22
#define BT_MCS_OPC_LAST_SEGMENT  0x23
#define BT_MCS_OPC_GOTO_SEGMENT  0x24

#define BT_MCS_OPC_PREV_TRACK    0x30
#define BT_MCS_OPC_NEXT_TRACK    0x31
#define BT_MCS_OPC_FIRST_TRACK   0x32
#define BT_MCS_OPC_LAST_TRACK    0x33
#define BT_MCS_OPC_GOTO_TRACK    0x34

#define BT_MCS_OPC_PREV_GROUP    0x40
#define BT_MCS_OPC_NEXT_GROUP    0x41
#define BT_MCS_OPC_FIRST_GROUP   0x42
#define BT_MCS_OPC_LAST_GROUP    0x43
#define BT_MCS_OPC_GOTO_GROUP    0x44

/** Media control point supported opcodes length */
#define BT_MCS_OPCODES_SUPPORTED_LEN 4

/** Media control point supported opcodes values */
#define BT_MCS_OPC_SUP_PLAY          BIT(0)
#define BT_MCS_OPC_SUP_PAUSE         BIT(1)
#define BT_MCS_OPC_SUP_FAST_REWIND   BIT(2)
#define BT_MCS_OPC_SUP_FAST_FORWARD  BIT(3)
#define BT_MCS_OPC_SUP_STOP          BIT(4)

#define BT_MCS_OPC_SUP_MOVE_RELATIVE BIT(5)

#define BT_MCS_OPC_SUP_PREV_SEGMENT  BIT(6)
#define BT_MCS_OPC_SUP_NEXT_SEGMENT  BIT(7)
#define BT_MCS_OPC_SUP_FIRST_SEGMENT BIT(8)
#define BT_MCS_OPC_SUP_LAST_SEGMENT  BIT(9)
#define BT_MCS_OPC_SUP_GOTO_SEGMENT  BIT(10)

#define BT_MCS_OPC_SUP_PREV_TRACK    BIT(11)
#define BT_MCS_OPC_SUP_NEXT_TRACK    BIT(12)
#define BT_MCS_OPC_SUP_FIRST_TRACK   BIT(13)
#define BT_MCS_OPC_SUP_LAST_TRACK    BIT(14)
#define BT_MCS_OPC_SUP_GOTO_TRACK    BIT(15)

#define BT_MCS_OPC_SUP_PREV_GROUP    BIT(16)
#define BT_MCS_OPC_SUP_NEXT_GROUP    BIT(17)
#define BT_MCS_OPC_SUP_FIRST_GROUP   BIT(18)
#define BT_MCS_OPC_SUP_LAST_GROUP    BIT(19)
#define BT_MCS_OPC_SUP_GOTO_GROUP    BIT(20)

/** Media control point notification result codes */
#define BT_MCS_OPC_NTF_SUCCESS             0x01
#define BT_MCS_OPC_NTF_NOT_SUPPORTED       0x02
#define BT_MCS_OPC_NTF_PLAYER_INACTIVE     0x03
#define BT_MCS_OPC_NTF_CANNOT_BE_COMPLETED 0x04

/** Search control point type values */
/* Reference: Media Control Service spec v1.0 section 3.20.2 */
#define BT_MCS_SEARCH_TYPE_TRACK_NAME    0x01
#define BT_MCS_SEARCH_TYPE_ARTIST_NAME   0x02
#define BT_MCS_SEARCH_TYPE_ALBUM_NAME    0x03
#define BT_MCS_SEARCH_TYPE_GROUP_NAME    0x04
#define BT_MCS_SEARCH_TYPE_EARLIEST_YEAR 0x05
#define BT_MCS_SEARCH_TYPE_LATEST_YEAR   0x06
#define BT_MCS_SEARCH_TYPE_GENRE         0x07
#define BT_MCS_SEARCH_TYPE_ONLY_TRACKS   0x08
#define BT_MCS_SEARCH_TYPE_ONLY_GROUPS   0x09

/** Search control point values */
#define SEARCH_LEN_MIN 2       /* At least one search control item (SCI),
				* consisting of the length octet and the type
				* octet. (The parameter field may be empty.)
				*/

#define SEARCH_SCI_LEN_MIN 1   /* An SCI length can be as little as one byte,
				* for an SCI that has only the type field.
				* (The SCI len is the length of type + param.)
				*/

#define SEARCH_LEN_MAX 64      /* Max total length of search, defined by spec */

#define SEARCH_PARAM_MAX 62    /* A search may have a single search control item
				* consisting of length, type and parameter
				*/

/** Search notification result codes */
/* Reference: Media Control Service spec v1.0 section 3.20.2 */
#define BT_MCS_SCP_NTF_SUCCESS  0x01
#define BT_MCS_SCP_NTF_FAILURE  0x02

/* Group object object types */
/* Reference: Media Control Service spec v1.0 section 4.4.1 */
#define BT_MCS_GROUP_OBJECT_TRACK_TYPE 0x00
#define BT_MCS_GROUP_OBJECT_GROUP_TYPE 0x01


#ifdef __cplusplus
}
#endif

/**
 * @}
 */

#endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCS_H_ */
