blob: 93effaa225b60ac562bf54ceaab7272ffe47ea47 [file] [log] [blame]
/*
* 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 <zephyr/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_ */