Bluetooth: Audio: Media control service
This commit adds the Media Control Service, and a dummy media player, from the topic-le-audio branch. This is a part of the upmerge of the le-audio media control files. This service has been developed and maintained over a couple of years now, and is mature. During the development it has passed both IOP-testing and PTS qualification testing. The commit is a pure copy of the files and content in the topic-le-audio branch, with the following exceptions: - files are in bluetooth/audio instead of bluetooth/host/audio, with some include paths updated as a consequence - as a consequence, CMake files and Kconfig files updates are done in other locations - copyrights have been updated Signed-off-by: Asbjørn Sæbø <asbjorn.sabo@nordicsemi.no>
This commit is contained in:
parent
6633af89d0
commit
4d9f516815
6 changed files with 4293 additions and 0 deletions
199
include/bluetooth/audio/mcs.h
Normal file
199
include/bluetooth/audio/mcs.h
Normal file
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* 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_ */
|
Loading…
Add table
Add a link
Reference in a new issue