LCOV - code coverage report
Current view: top level - zephyr/bluetooth/audio - media_proxy.h Coverage Total Hit
Test: new.info Lines: 100.0 % 219 219
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            1 : /**
       2              :  * @file
       3              :  * @brief Bluetooth Media Proxy APIs
       4              :  */
       5              : 
       6              : /*
       7              :  * Copyright (c) 2019 - 2024 Nordic Semiconductor ASA
       8              :  *
       9              :  * SPDX-License-Identifier: Apache-2.0
      10              :  */
      11              : 
      12              : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MEDIA_PROXY_H_
      13              : #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MEDIA_PROXY_H_
      14              : 
      15              : /**
      16              :  * @brief Media proxy module
      17              :  *
      18              :  * @defgroup bt_media_proxy Media Proxy
      19              :  *
      20              :  * @since 3.0
      21              :  * @version 0.8.0
      22              :  *
      23              :  * @ingroup bluetooth
      24              :  * @{
      25              :  *
      26              :  * The media proxy module is the connection point between media players
      27              :  * and media controllers.
      28              :  *
      29              :  * A media player has (access to) media content and knows how to
      30              :  * navigate and play this content. A media controller reads or gets
      31              :  * information from a player and controls the player by setting player
      32              :  * parameters and giving the player commands.
      33              :  *
      34              :  * The media proxy module allows media player implementations to make
      35              :  * themselves available to media controllers. And it allows
      36              :  * controllers to access, and get updates from, any player.
      37              :  *
      38              :  * The media proxy module allows both local and remote control of
      39              :  * local player instances: A media controller may be a local
      40              :  * application, or it may be a Media Control Service relaying requests
      41              :  * from a remote Media Control Client. There may be either local or
      42              :  * remote control, or both, or even multiple instances of each.
      43              :  */
      44              : 
      45              : #include <stdint.h>
      46              : #include <stdbool.h>
      47              : 
      48              : #include <zephyr/bluetooth/bluetooth.h>
      49              : #include <zephyr/sys/util_macro.h>
      50              : 
      51              : /* TODO: Remove dependency on mcs.h */
      52              : #include "mcs.h"
      53              : 
      54              : #ifdef __cplusplus
      55              : extern "C" {
      56              : #endif
      57              : 
      58              : /**
      59              :  * @brief Media player command
      60              :  */
      61            1 : struct mpl_cmd {
      62              :         /** The opcode. See the MEDIA_PROXY_OP_* values */
      63            1 :         uint8_t  opcode;
      64              :         /** Whether or not the @ref mpl_cmd.param is used */
      65            1 :         bool  use_param;
      66              :         /** A 32-bit signed parameter. The parameter value depends on the @ref mpl_cmd.opcode */
      67            1 :         int32_t param;
      68              : };
      69              : 
      70              : /**
      71              :  * @brief Media command notification
      72              :  */
      73            1 : struct mpl_cmd_ntf {
      74              :         /** The opcode that was sent */
      75            1 :         uint8_t requested_opcode;
      76              :         /** The result of the operation  */
      77            1 :         uint8_t result_code;
      78              : };
      79              : 
      80              : /**
      81              :  * @brief Search control item
      82              :  */
      83            1 : struct mpl_sci {
      84            1 :         uint8_t len;                     /**< Length of type and parameter */
      85            1 :         uint8_t type;                    /**< MEDIA_PROXY_SEARCH_TYPE_<...> */
      86            1 :         char    param[SEARCH_PARAM_MAX]; /**< Search parameter */
      87              : };
      88              : 
      89              : /**
      90              :  * @brief Search
      91              :  */
      92            1 : struct mpl_search {
      93              :         /** The length of the @ref mpl_search.search value */
      94            1 :         uint8_t len;
      95              :         /** Concatenated search control items - (type, length, param) */
      96            1 :         char search[SEARCH_LEN_MAX];
      97              : };
      98              : 
      99              : /**
     100              :  * @name Playback speed parameters
     101              :  *
     102              :  * All values from -128 to 127 allowed, only some defined
     103              :  * @{
     104              :  */
     105              : /** Minimum playback speed, resulting in 25 % speed */
     106            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_MIN     -128
     107              : /** Quarter playback speed, resulting in 25 % speed */
     108            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_QUARTER -128
     109              : /** Half playback speed, resulting in 50 % speed */
     110            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_HALF    -64
     111              : /** Unity playback speed, resulting in 100 % speed */
     112            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_UNITY   0
     113              : /** Double playback speed, resulting in 200 % speed */
     114            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_DOUBLE  64
     115              : /** Max playback speed, resulting in 395.7 % speed (nearly 400 %) */
     116            1 : #define MEDIA_PROXY_PLAYBACK_SPEED_MAX     127
     117              : /** @} */
     118              : 
     119              : /**
     120              :  * @name Seeking speed factors
     121              :  *
     122              :  * The allowed values for seeking speed are the range -64 to -4
     123              :  * (endpoints included), the value 0, and the range 4 to 64
     124              :  * (endpoints included).
     125              :  * @{
     126              :  */
     127              : /** Maximum seeking speed - Can be negated */
     128            1 : #define MEDIA_PROXY_SEEKING_SPEED_FACTOR_MAX  64
     129              : /** Minimum seeking speed - Can be negated */
     130            1 : #define MEDIA_PROXY_SEEKING_SPEED_FACTOR_MIN  4
     131              : /** No seeking */
     132            1 : #define MEDIA_PROXY_SEEKING_SPEED_FACTOR_ZERO 0
     133              : /** @} */
     134              : 
     135              : /**
     136              :  * @name Playing orders
     137              :  * @{
     138              :  */
     139              : /** A single track is played once; there is no next track. */
     140            1 : #define MEDIA_PROXY_PLAYING_ORDER_SINGLE_ONCE    0x01
     141              : /** A single track is played repeatedly; the next track is the current track. */
     142            1 : #define MEDIA_PROXY_PLAYING_ORDER_SINGLE_REPEAT  0x02
     143              : /** The tracks within a group are played once in track order. */
     144            1 : #define MEDIA_PROXY_PLAYING_ORDER_INORDER_ONCE   0x03
     145              : /** The tracks within a group are played in track order repeatedly. */
     146            1 : #define MEDIA_PROXY_PLAYING_ORDER_INORDER_REPEAT 0x04
     147              : /** The tracks within a group are played once only from the oldest first. */
     148            1 : #define MEDIA_PROXY_PLAYING_ORDER_OLDEST_ONCE    0x05
     149              : /** The tracks within a group are played from the oldest first repeatedly. */
     150            1 : #define MEDIA_PROXY_PLAYING_ORDER_OLDEST_REPEAT  0x06
     151              : /** The tracks within a group are played once only from the newest first. */
     152            1 : #define MEDIA_PROXY_PLAYING_ORDER_NEWEST_ONCE    0x07
     153              : /** The tracks within a group are played from the newest first repeatedly. */
     154            1 : #define MEDIA_PROXY_PLAYING_ORDER_NEWEST_REPEAT  0x08
     155              : /** The tracks within a group are played in random order once. */
     156            1 : #define MEDIA_PROXY_PLAYING_ORDER_SHUFFLE_ONCE   0x09
     157              : /** The tracks within a group are played in random order repeatedly. */
     158            1 : #define MEDIA_PROXY_PLAYING_ORDER_SHUFFLE_REPEAT 0x0a
     159              : /** @} */
     160              : 
     161              : /**
     162              :  * @name Playing orders supported
     163              :  *
     164              :  * A bitmap, in the same order as the playing orders above.
     165              :  * Note that playing order 1 corresponds to bit 0, and so on.
     166              :  * @{
     167              :  */
     168              : /** A single track is played once; there is no next track. */
     169            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_SINGLE_ONCE    BIT(0)
     170              : /** A single track is played repeatedly; the next track is the current track. */
     171            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_SINGLE_REPEAT  BIT(1)
     172              : /** The tracks within a group are played once in track order. */
     173            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_INORDER_ONCE   BIT(2)
     174              : /** The tracks within a group are played in track order repeatedly. */
     175            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_INORDER_REPEAT BIT(3)
     176              : /** The tracks within a group are played once only from the oldest first. */
     177            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_OLDEST_ONCE    BIT(4)
     178              : /** The tracks within a group are played from the oldest first repeatedly. */
     179            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_OLDEST_REPEAT  BIT(5)
     180              : /** The tracks within a group are played once only from the newest first. */
     181            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_NEWEST_ONCE    BIT(6)
     182              : /** The tracks within a group are played from the newest first repeatedly. */
     183            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_NEWEST_REPEAT  BIT(7)
     184              : /** The tracks within a group are played in random order once. */
     185            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_SHUFFLE_ONCE   BIT(8)
     186              : /** The tracks within a group are played in random order repeatedly. */
     187            1 : #define MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_SHUFFLE_REPEAT BIT(9)
     188              : /** @} */
     189              : 
     190              : /**
     191              :  * @name Media player states
     192              :  * @{
     193              :  */
     194              : /** The current track is invalid, and no track has been selected. */
     195            1 : #define MEDIA_PROXY_STATE_INACTIVE 0x00
     196              : /** The media player is playing the current track. */
     197            1 : #define MEDIA_PROXY_STATE_PLAYING  0x01
     198              : /** The current track is paused. The media player has a current track, but it is not being played */
     199            1 : #define MEDIA_PROXY_STATE_PAUSED   0x02
     200              : /** The current track is fast forwarding or fast rewinding. */
     201            1 : #define MEDIA_PROXY_STATE_SEEKING  0x03
     202              : /** Used internally as the last state value */
     203            1 : #define MEDIA_PROXY_STATE_LAST     0x04
     204              : /** @} */
     205              : 
     206              : /**
     207              :  * @name Media player command opcodes
     208              :  * @{
     209              :  */
     210              : /** Start playing the current track. */
     211            1 : #define MEDIA_PROXY_OP_PLAY         0x01
     212              : /** Pause playing the current track. */
     213            1 : #define MEDIA_PROXY_OP_PAUSE        0x02
     214              : /** Fast rewind the current track. */
     215            1 : #define MEDIA_PROXY_OP_FAST_REWIND  0x03
     216              : /** Fast forward the current track. */
     217            1 : #define MEDIA_PROXY_OP_FAST_FORWARD 0x04
     218              : /**
     219              :  * Stop current activity and return to the paused state and set the current track position to the
     220              :  * start of the current track.
     221              :  */
     222            1 : #define MEDIA_PROXY_OP_STOP         0x05
     223              : 
     224              : /** Set a new current track position relative to the current track position. */
     225            1 : #define MEDIA_PROXY_OP_MOVE_RELATIVE 0x10
     226              : 
     227              : /**
     228              :  * Set the current track position to the starting position of the previous segment of the current
     229              :  * track.
     230              :  */
     231            1 : #define MEDIA_PROXY_OP_PREV_SEGMENT  0x20
     232              : /**
     233              :  * Set the current track position to the starting position of
     234              :  * the next segment of the current track.
     235              :  */
     236            1 : #define MEDIA_PROXY_OP_NEXT_SEGMENT  0x21
     237              : /**
     238              :  * Set the current track position to the starting position of
     239              :  * the first segment of the current track.
     240              :  */
     241            1 : #define MEDIA_PROXY_OP_FIRST_SEGMENT 0x22
     242              : /**
     243              :  * Set the current track position to the starting position of
     244              :  * the last segment of the current track.
     245              :  */
     246            1 : #define MEDIA_PROXY_OP_LAST_SEGMENT  0x23
     247              : /**
     248              :  * Set the current track position to the starting position of
     249              :  * the nth segment of the current track.
     250              :  */
     251            1 : #define MEDIA_PROXY_OP_GOTO_SEGMENT  0x24
     252              : 
     253              : /** Set the current track to the previous track based on the playing order. */
     254            1 : #define MEDIA_PROXY_OP_PREV_TRACK  0x30
     255              : /** Set the current track to the next track based on the playing order. */
     256            1 : #define MEDIA_PROXY_OP_NEXT_TRACK  0x31
     257              : /** Set the current track to the first track based on the playing order. */
     258            1 : #define MEDIA_PROXY_OP_FIRST_TRACK 0x32
     259              : /** Set the current track to the last track based on the playing order. */
     260            1 : #define MEDIA_PROXY_OP_LAST_TRACK  0x33
     261              : /** Set the current track to the nth track based on the playing order. */
     262            1 : #define MEDIA_PROXY_OP_GOTO_TRACK  0x34
     263              : 
     264              : /** Set the current group to the previous group in the sequence of groups. */
     265            1 : #define MEDIA_PROXY_OP_PREV_GROUP  0x40
     266              : /** Set the current group to the next group in the sequence of groups. */
     267            1 : #define MEDIA_PROXY_OP_NEXT_GROUP  0x41
     268              : /** Set the current group to the first group in the sequence of groups. */
     269            1 : #define MEDIA_PROXY_OP_FIRST_GROUP 0x42
     270              : /** Set the current group to the last group in the sequence of groups. */
     271            1 : #define MEDIA_PROXY_OP_LAST_GROUP  0x43
     272              : /** Set the current group to the nth group in the sequence of groups. */
     273            1 : #define MEDIA_PROXY_OP_GOTO_GROUP  0x44
     274              : /** @} */
     275              : 
     276              : /**
     277              :  * @brief Media player supported opcodes length
     278              :  */
     279            1 : #define MEDIA_PROXY_OPCODES_SUPPORTED_LEN 4
     280              : 
     281              : /**
     282              :  * @brief Media player supported command opcodes
     283              :  * @{
     284              :  */
     285              : /** Support the Play opcode */
     286            1 : #define MEDIA_PROXY_OP_SUP_PLAY         BIT(0)
     287              : /** Support the Pause opcode */
     288            1 : #define MEDIA_PROXY_OP_SUP_PAUSE        BIT(1)
     289              : /** Support the Fast Rewind opcode */
     290            1 : #define MEDIA_PROXY_OP_SUP_FAST_REWIND  BIT(2)
     291              : /** Support the Fast Forward opcode */
     292            1 : #define MEDIA_PROXY_OP_SUP_FAST_FORWARD BIT(3)
     293              : /** Support the Stop opcode */
     294            1 : #define MEDIA_PROXY_OP_SUP_STOP         BIT(4)
     295              : 
     296              : /** Support the Move Relative opcode */
     297            1 : #define MEDIA_PROXY_OP_SUP_MOVE_RELATIVE BIT(5)
     298              : 
     299              : /** Support the Previous Segment opcode */
     300            1 : #define MEDIA_PROXY_OP_SUP_PREV_SEGMENT  BIT(6)
     301              : /** Support the Next Segment opcode */
     302            1 : #define MEDIA_PROXY_OP_SUP_NEXT_SEGMENT  BIT(7)
     303              : /** Support the First Segment opcode */
     304            1 : #define MEDIA_PROXY_OP_SUP_FIRST_SEGMENT BIT(8)
     305              : /** Support the Last Segment opcode */
     306            1 : #define MEDIA_PROXY_OP_SUP_LAST_SEGMENT  BIT(9)
     307              : /** Support the Goto Segment opcode */
     308            1 : #define MEDIA_PROXY_OP_SUP_GOTO_SEGMENT  BIT(10)
     309              : 
     310              : /** Support the Previous Track opcode */
     311            1 : #define MEDIA_PROXY_OP_SUP_PREV_TRACK  BIT(11)
     312              : /** Support the Next Track opcode */
     313            1 : #define MEDIA_PROXY_OP_SUP_NEXT_TRACK  BIT(12)
     314              : /** Support the First Track opcode */
     315            1 : #define MEDIA_PROXY_OP_SUP_FIRST_TRACK BIT(13)
     316              : /** Support the Last Track opcode */
     317            1 : #define MEDIA_PROXY_OP_SUP_LAST_TRACK  BIT(14)
     318              : /** Support the Goto Track opcode */
     319            1 : #define MEDIA_PROXY_OP_SUP_GOTO_TRACK  BIT(15)
     320              : 
     321              : /** Support the Previous Group opcode */
     322            1 : #define MEDIA_PROXY_OP_SUP_PREV_GROUP  BIT(16)
     323              : /** Support the Next Group opcode */
     324            1 : #define MEDIA_PROXY_OP_SUP_NEXT_GROUP  BIT(17)
     325              : /** Support the First Group opcode */
     326            1 : #define MEDIA_PROXY_OP_SUP_FIRST_GROUP BIT(18)
     327              : /** Support the Last Group opcode */
     328            1 : #define MEDIA_PROXY_OP_SUP_LAST_GROUP  BIT(19)
     329              : /** Support the Goto Group opcode */
     330            1 : #define MEDIA_PROXY_OP_SUP_GOTO_GROUP  BIT(20)
     331              : /** @} */
     332              : 
     333              : /**
     334              :  * @name Media player command result codes
     335              :  * @{
     336              :  */
     337              : /** Action requested by the opcode write was completed successfully. */
     338            1 : #define MEDIA_PROXY_CMD_SUCCESS             0x01
     339              : /** An invalid or unsupported opcode was used for the Media Control Point write. */
     340            1 : #define MEDIA_PROXY_CMD_NOT_SUPPORTED       0x02
     341              : /**
     342              :  * The Media Player State characteristic value is Inactive when the opcode is received or the
     343              :  * result of the requested action of the opcode results in the Media Player State characteristic
     344              :  * being set to Inactive.
     345              :  */
     346            1 : #define MEDIA_PROXY_CMD_PLAYER_INACTIVE     0x03
     347              : /**
     348              :  * The requested action of any Media Control Point write cannot be completed successfully because of
     349              :  * a condition within the player.
     350              :  */
     351            1 : #define MEDIA_PROXY_CMD_CANNOT_BE_COMPLETED 0x04
     352              : /** @} */
     353              : 
     354              : /**
     355              :  * @name Search operation type values
     356              :  * @{
     357              :  */
     358              : /** Search for Track Name */
     359            1 : #define MEDIA_PROXY_SEARCH_TYPE_TRACK_NAME    0x01
     360              : /** Search for Artist Name */
     361            1 : #define MEDIA_PROXY_SEARCH_TYPE_ARTIST_NAME   0x02
     362              : /** Search for Album Name */
     363            1 : #define MEDIA_PROXY_SEARCH_TYPE_ALBUM_NAME    0x03
     364              : /** Search for Group Name */
     365            1 : #define MEDIA_PROXY_SEARCH_TYPE_GROUP_NAME    0x04
     366              : /** Search for Earliest Year */
     367            1 : #define MEDIA_PROXY_SEARCH_TYPE_EARLIEST_YEAR 0x05
     368              : /** Search for Latest Year */
     369            1 : #define MEDIA_PROXY_SEARCH_TYPE_LATEST_YEAR   0x06
     370              : /** Search for Genre */
     371            1 : #define MEDIA_PROXY_SEARCH_TYPE_GENRE         0x07
     372              : /** Search for Tracks only */
     373            1 : #define MEDIA_PROXY_SEARCH_TYPE_ONLY_TRACKS   0x08
     374              : /** Search for Groups only */
     375            1 : #define MEDIA_PROXY_SEARCH_TYPE_ONLY_GROUPS   0x09
     376              : /** @} */
     377              : 
     378              : /**
     379              :  * @name Search notification result codes
     380              :  *
     381              :  * @{
     382              :  */
     383              : /** Search request was accepted; search has started. */
     384            1 : #define MEDIA_PROXY_SEARCH_SUCCESS 0x01
     385              : /** Search request was invalid; no search started. */
     386            1 : #define MEDIA_PROXY_SEARCH_FAILURE 0x02
     387              : /** @} */
     388              : 
     389              : /**
     390              :  * @name Group object object types
     391              :  *
     392              :  * @{
     393              :  */
     394              : /** Group object type is track */
     395            1 : #define MEDIA_PROXY_GROUP_OBJECT_TRACK_TYPE 0x00
     396              : /** Group object type is group */
     397            1 : #define MEDIA_PROXY_GROUP_OBJECT_GROUP_TYPE 0x01
     398              : /** @} */
     399              : 
     400              : /**
     401              :  * @brief Opaque media player instance
     402              :  */
     403              : struct media_player;
     404              : 
     405              : /* PUBLIC API FOR CONTROLLERS */
     406              : 
     407              : /**
     408              :  * @brief Callbacks to a controller, from the media proxy
     409              :  *
     410              :  * Given by a controller when registering
     411              :  */
     412            1 : struct media_proxy_ctrl_cbs {
     413              : 
     414              :         /**
     415              :          * @brief Media Player Instance callback
     416              :          *
     417              :          * Called when the local Media Player instance is registered or read (TODO).
     418              :          * Also called if the local player instance is already registered when
     419              :          * the controller is registered.
     420              :          * Provides the controller with the pointer to the local player instance.
     421              :          *
     422              :          * @param player   Media player instance pointer
     423              :          * @param err      Error value. 0 on success, or errno on negative value.
     424              :          */
     425            1 :         void (*local_player_instance)(struct media_player *player, int err);
     426              : 
     427              : #ifdef CONFIG_MCTL_REMOTE_PLAYER_CONTROL
     428              :         /**
     429              :          * @brief Discover Player Instance callback
     430              :          *
     431              :          * Called when a remote player instance has been discovered.
     432              :          * The instance has been discovered, and will be accessed, using Bluetooth,
     433              :          * via media control client and a remote media control service.
     434              :          *
     435              :          * @param player   Instance pointer to the remote player
     436              :          * @param err      Error value. 0 on success, GATT error on positive value
     437              :          *                 or errno on negative value.
     438              :          */
     439              :         void (*discover_player)(struct media_player *player, int err);
     440              : #endif /* CONFIG_MCTL_REMOTE_PLAYER_CONTROL */
     441              : 
     442              :         /**
     443              :          * @brief Media Player Name receive callback
     444              :          *
     445              :          * Called when the Media Player Name is read or changed
     446              :          * See also media_proxy_ctrl_name_get()
     447              :          *
     448              :          * @param player   Media player instance pointer
     449              :          * @param err      Error value. 0 on success, GATT error on positive value
     450              :          *                 or errno on negative value.
     451              :          * @param name     The name of the media player
     452              :          */
     453            1 :         void (*player_name_recv)(struct media_player *player, int err, const char *name);
     454              : 
     455              :         /**
     456              :          * @brief Media Player Icon Object ID receive callback
     457              :          *
     458              :          * Called when the Media Player Icon Object ID is read
     459              :          * See also media_proxy_ctrl_get_icon_id()
     460              :          *
     461              :          * @param player   Media player instance pointer
     462              :          * @param err      Error value. 0 on success, GATT error on positive value
     463              :          *                 or errno on negative value.
     464              :          * @param id       The ID of the Icon object in the Object Transfer Service (48 bits)
     465              :          */
     466            1 :         void (*icon_id_recv)(struct media_player *player, int err, uint64_t id);
     467              : 
     468              :         /**
     469              :          * @brief Media Player Icon URL receive callback
     470              :          *
     471              :          * Called when the Media Player Icon URL is read
     472              :          * See also media_proxy_ctrl_get_icon_url()
     473              :          *
     474              :          * @param player   Media player instance pointer
     475              :          * @param err      Error value. 0 on success, GATT error on positive value
     476              :          *                 or errno on negative value.
     477              :          * @param url      The URL of the icon
     478              :          */
     479            1 :         void (*icon_url_recv)(struct media_player *player, int err, const char *url);
     480              : 
     481              :         /**
     482              :          * @brief Track changed receive callback
     483              :          *
     484              :          * Called when the Current Track is changed
     485              :          *
     486              :          * @param player   Media player instance pointer
     487              :          * @param err      Error value. 0 on success, GATT error on positive value
     488              :          *                 or errno on negative value.
     489              :          */
     490            1 :         void (*track_changed_recv)(struct media_player *player, int err);
     491              : 
     492              :         /**
     493              :          * @brief Track Title receive callback
     494              :          *
     495              :          * Called when the Track Title is read or changed
     496              :          * See also media_proxy_ctrl_get_track_title()
     497              :          *
     498              :          * @param player   Media player instance pointer
     499              :          * @param err      Error value. 0 on success, GATT error on positive value
     500              :          *                 or errno on negative value.
     501              :          * @param title    The title of the current track
     502              :          */
     503            1 :         void (*track_title_recv)(struct media_player *player, int err, const char *title);
     504              : 
     505              :         /**
     506              :          * @brief Track Duration receive callback
     507              :          *
     508              :          * Called when the Track Duration is read or changed
     509              :          * See also media_proxy_ctrl_get_track_duration()
     510              :          *
     511              :          * @param player     Media player instance pointer
     512              :          * @param err        Error value. 0 on success, GATT error on positive value
     513              :          *                   or errno on negative value.
     514              :          * @param duration   The duration of the current track
     515              :          */
     516            1 :         void (*track_duration_recv)(struct media_player *player, int err, int32_t duration);
     517              : 
     518              :         /**
     519              :          * @brief Track Position receive callback
     520              :          *
     521              :          * Called when the Track Position is read or changed
     522              :          * See also media_proxy_ctrl_get_track_position() and
     523              :          * media_proxy_ctrl_set_track_position()
     524              :          *
     525              :          * @param player     Media player instance pointer
     526              :          * @param err        Error value. 0 on success, GATT error on positive value
     527              :          *                   or errno on negative value.
     528              :          * @param position   The player's position in the track
     529              :          */
     530            1 :         void (*track_position_recv)(struct media_player *player, int err, int32_t position);
     531              : 
     532              :         /**
     533              :          * @brief Track Position write callback
     534              :          *
     535              :          * Called when the Track Position is written
     536              :          * See also media_proxy_ctrl_set_track_position().
     537              :          *
     538              :          * @param player     Media player instance pointer
     539              :          * @param err        Error value. 0 on success, GATT error on positive value
     540              :          *                   or errno on negative value.
     541              :          * @param position   The position given attempted to write
     542              :          */
     543            1 :         void (*track_position_write)(struct media_player *player, int err, int32_t position);
     544              : 
     545              :         /**
     546              :          * @brief Playback Speed receive callback
     547              :          *
     548              :          * Called when the Playback Speed is read or changed
     549              :          * See also media_proxy_ctrl_get_playback_speed() and
     550              :          * media_proxy_ctrl_set_playback_speed()
     551              :          *
     552              :          * @param player   Media player instance pointer
     553              :          * @param err      Error value. 0 on success, GATT error on positive value
     554              :          *                 or errno on negative value.
     555              :          * @param speed    The playback speed parameter
     556              :          */
     557            1 :         void (*playback_speed_recv)(struct media_player *player, int err, int8_t speed);
     558              : 
     559              :         /**
     560              :          * @brief Playback Speed write callback
     561              :          *
     562              :          * Called when the Playback Speed is written
     563              :          * See also media_proxy_ctrl_set_playback_speed()
     564              :          *
     565              :          * @param player   Media player instance pointer
     566              :          * @param err      Error value. 0 on success, GATT error on positive value
     567              :          *                 or errno on negative value.
     568              :          * @param speed    The playback speed parameter attempted to write
     569              :          */
     570            1 :         void (*playback_speed_write)(struct media_player *player, int err, int8_t speed);
     571              : 
     572              :         /**
     573              :          * @brief Seeking Speed receive callback
     574              :          *
     575              :          * Called when the Seeking Speed is read or changed
     576              :          * See also media_proxy_ctrl_get_seeking_speed()
     577              :          *
     578              :          * @param player   Media player instance pointer
     579              :          * @param err      Error value. 0 on success, GATT error on positive value
     580              :          *                 or errno on negative value.
     581              :          * @param speed    The seeking speed factor
     582              :          */
     583            1 :         void (*seeking_speed_recv)(struct media_player *player, int err, int8_t speed);
     584              : 
     585              :         /**
     586              :          * @brief Track Segments Object ID receive callback
     587              :          *
     588              :          * Called when the Track Segments Object ID is read
     589              :          * See also media_proxy_ctrl_get_track_segments_id()
     590              :          *
     591              :          * @param player   Media player instance pointer
     592              :          * @param err      Error value. 0 on success, GATT error on positive value
     593              :          *                 or errno on negative value.
     594              :          * @param id       The ID of the track segments object in Object Transfer Service (48 bits)
     595              :          */
     596            1 :         void (*track_segments_id_recv)(struct media_player *player, int err, uint64_t id);
     597              : 
     598              :         /**
     599              :          * @brief Current Track Object ID receive callback
     600              :          *
     601              :          * Called when the Current Track Object ID is read or changed
     602              :          * See also media_proxy_ctrl_get_current_track_id() and
     603              :          * media_proxy_ctrl_set_current_track_id()
     604              :          *
     605              :          * @param player   Media player instance pointer
     606              :          * @param err      Error value. 0 on success, GATT error on positive value
     607              :          *                 or errno on negative value.
     608              :          * @param id       The ID of the current track object in Object Transfer Service (48 bits)
     609              :          */
     610            1 :         void (*current_track_id_recv)(struct media_player *player, int err, uint64_t id);
     611              : 
     612              :         /**
     613              :          * @brief Current Track Object ID write callback
     614              :          *
     615              :          * Called when the Current Track Object ID is written
     616              :          * See also media_proxy_ctrl_set_current_track_id()
     617              :          *
     618              :          * @param player   Media player instance pointer
     619              :          * @param err      Error value. 0 on success, GATT error on positive value
     620              :          *                 or errno on negative value.
     621              :          * @param id       The ID (48 bits) attempted to write
     622              :          */
     623            1 :         void (*current_track_id_write)(struct media_player *player, int err, uint64_t id);
     624              : 
     625              :         /**
     626              :          * @brief Next Track Object ID receive callback
     627              :          *
     628              :          * Called when the Next Track Object ID is read or changed
     629              :          * See also media_proxy_ctrl_get_next_track_id() and
     630              :          * media_proxy_ctrl_set_next_track_id()
     631              :          *
     632              :          * @param player   Media player instance pointer
     633              :          * @param err      Error value. 0 on success, GATT error on positive value
     634              :          *                 or errno on negative value.
     635              :          * @param id       The ID of the next track object in Object Transfer Service (48 bits)
     636              :          */
     637            1 :         void (*next_track_id_recv)(struct media_player *player, int err, uint64_t id);
     638              : 
     639              :         /**
     640              :          * @brief Next Track Object ID write callback
     641              :          *
     642              :          * Called when the Next Track Object ID is written
     643              :          * See also media_proxy_ctrl_set_next_track_id()
     644              :          *
     645              :          * @param player   Media player instance pointer
     646              :          * @param err      Error value. 0 on success, GATT error on positive value
     647              :          *                 or errno on negative value.
     648              :          * @param id       The ID (48 bits) attempted to write
     649              :          */
     650            1 :         void (*next_track_id_write)(struct media_player *player, int err, uint64_t id);
     651              : 
     652              :         /**
     653              :          * @brief Parent Group Object ID receive callback
     654              :          *
     655              :          * Called when the Parent Group Object ID is read or changed
     656              :          * See also media_proxy_ctrl_get_parent_group_id()
     657              :          *
     658              :          * @param player   Media player instance pointer
     659              :          * @param err      Error value. 0 on success, GATT error on positive value
     660              :          *                 or errno on negative value.
     661              :          * @param id       The ID of the parent group object in Object Transfer Service (48 bits)
     662              :          */
     663            1 :         void (*parent_group_id_recv)(struct media_player *player, int err, uint64_t id);
     664              : 
     665              :         /**
     666              :          * @brief Current Group Object ID receive callback
     667              :          *
     668              :          * Called when the Current Group Object ID is read or changed
     669              :          * See also media_proxy_ctrl_get_current_group_id() and
     670              :          * media_proxy_ctrl_set_current_group_id()
     671              :          *
     672              :          * @param player   Media player instance pointer
     673              :          * @param err      Error value. 0 on success, GATT error on positive value
     674              :          *                 or errno on negative value.
     675              :          * @param id       The ID of the current group object in Object Transfer Service (48 bits)
     676              :          */
     677            1 :         void (*current_group_id_recv)(struct media_player *player, int err, uint64_t id);
     678              : 
     679              :         /**
     680              :          * @brief Current Group Object ID write callback
     681              :          *
     682              :          * Called when the Current Group Object ID is written
     683              :          * See also media_proxy_ctrl_set_current_group_id()
     684              :          *
     685              :          * @param player   Media player instance pointer
     686              :          * @param err      Error value. 0 on success, GATT error on positive value
     687              :          *                 or errno on negative value.
     688              :          * @param id       The ID (48 bits) attempted to write
     689              :          */
     690            1 :         void (*current_group_id_write)(struct media_player *player, int err, uint64_t id);
     691              : 
     692              :         /**
     693              :          * @brief Playing Order receive callback
     694              :          *
     695              :          * Called when the Playing Order is read or changed
     696              :          * See also media_proxy_ctrl_get_playing_order() and
     697              :          * media_proxy_ctrl_set_playing_order()
     698              :          *
     699              :          * @param player   Media player instance pointer
     700              :          * @param err      Error value. 0 on success, GATT error on positive value
     701              :          *                 or errno on negative value.
     702              :          * @param order    The playing order
     703              :          */
     704            1 :         void (*playing_order_recv)(struct media_player *player, int err, uint8_t order);
     705              : 
     706              :         /**
     707              :          * @brief Playing Order write callback
     708              :          *
     709              :          * Called when the Playing Order is written
     710              :          * See also media_proxy_ctrl_set_playing_order()
     711              :          *
     712              :          * @param player   Media player instance pointer
     713              :          * @param err      Error value. 0 on success, GATT error on positive value
     714              :          *                 or errno on negative value.
     715              :          * @param order    The playing order attempted to write
     716              :          */
     717            1 :         void (*playing_order_write)(struct media_player *player, int err, uint8_t order);
     718              : 
     719              :         /**
     720              :          * @brief Playing Orders Supported receive callback
     721              :          *
     722              :          * Called when the Playing Orders Supported is read
     723              :          * See also media_proxy_ctrl_get_playing_orders_supported()
     724              :          *
     725              :          * @param player   Media player instance pointer
     726              :          * @param err      Error value. 0 on success, GATT error on positive value
     727              :          *                 or errno on negative value.
     728              :          * @param orders   The playing orders supported
     729              :          */
     730            1 :         void (*playing_orders_supported_recv)(struct media_player *player, int err,
     731              :                                               uint16_t orders);
     732              : 
     733              :         /**
     734              :          * @brief Media State receive callback
     735              :          *
     736              :          * Called when the Media State is read or changed
     737              :          * See also media_proxy_ctrl_get_media_state() and
     738              :          * media_proxy_ctrl_send_command()
     739              :          *
     740              :          * @param player   Media player instance pointer
     741              :          * @param err      Error value. 0 on success, GATT error on positive value
     742              :          *                 or errno on negative value.
     743              :          * @param state    The media player state
     744              :          */
     745            1 :         void (*media_state_recv)(struct media_player *player, int err, uint8_t state);
     746              : 
     747              :         /**
     748              :          * @brief Command send callback
     749              :          *
     750              :          * Called when a command has been sent
     751              :          * See also media_proxy_ctrl_send_command()
     752              :          *
     753              :          * @param player   Media player instance pointer
     754              :          * @param err      Error value. 0 on success, GATT error on positive value
     755              :          *                 or errno on negative value.
     756              :          * @param cmd      The command sent
     757              :          */
     758            1 :         void (*command_send)(struct media_player *player, int err, const struct mpl_cmd *cmd);
     759              : 
     760              :         /**
     761              :          * @brief Command result receive callback
     762              :          *
     763              :          * Called when a command result has been received
     764              :          * See also media_proxy_ctrl_send_command()
     765              :          *
     766              :          * @param player   Media player instance pointer
     767              :          * @param err      Error value. 0 on success, GATT error on positive value
     768              :          *                 or errno on negative value.
     769              :          * @param result   The result received
     770              :          */
     771            1 :         void (*command_recv)(struct media_player *player, int err,
     772              :                              const struct mpl_cmd_ntf *result);
     773              : 
     774              :         /**
     775              :          * @brief Commands supported receive callback
     776              :          *
     777              :          * Called when the Commands Supported is read or changed
     778              :          * See also media_proxy_ctrl_get_commands_supported()
     779              :          *
     780              :          * @param player       Media player instance pointer
     781              :          * @param err          Error value. 0 on success, GATT error on positive value
     782              :          *                     or errno on negative value.
     783              :          * @param opcodes      The supported command opcodes (bitmap)
     784              :          */
     785            1 :         void (*commands_supported_recv)(struct media_player *player, int err, uint32_t opcodes);
     786              : 
     787              :         /**
     788              :          * @brief Search send callback
     789              :          *
     790              :          * Called when a search has been sent
     791              :          * See also media_proxy_ctrl_send_search()
     792              :          *
     793              :          * @param player        Media player instance pointer
     794              :          * @param err           Error value. 0 on success, GATT error on positive value
     795              :          *                      or errno on negative value.
     796              :          * @param search        The search sent
     797              :          */
     798            1 :         void (*search_send)(struct media_player *player, int err, const struct mpl_search *search);
     799              : 
     800              :         /**
     801              :          * @brief Search result code receive callback
     802              :          *
     803              :          * Called when a search result code has been received
     804              :          * See also media_proxy_ctrl_send_search()
     805              :          *
     806              :          * The search result code tells whether the search was successful or not.
     807              :          * For a successful search, the actual results of the search (i.e. what was found
     808              :          * as a result of the search)can be accessed using the Search Results Object ID.
     809              :          * The Search Results Object ID has a separate callback - search_results_id_recv().
     810              :          *
     811              :          * @param player        Media player instance pointer
     812              :          * @param err           Error value. 0 on success, GATT error on positive value
     813              :          *                      or errno on negative value.
     814              :          * @param result_code   Search result code
     815              :          */
     816            1 :         void (*search_recv)(struct media_player *player, int err, uint8_t result_code);
     817              : 
     818              :         /**
     819              :          * @brief Search Results Object ID receive callback
     820              :          * See also media_proxy_ctrl_get_search_results_id()
     821              :          *
     822              :          * Called when the Search Results Object ID is read or changed
     823              :          *
     824              :          * @param player   Media player instance pointer
     825              :          * @param err      Error value. 0 on success, GATT error on positive value
     826              :          *                 or errno on negative value.
     827              :          * @param id       The ID of the search results object in Object Transfer Service (48 bits)
     828              :          */
     829            1 :         void (*search_results_id_recv)(struct media_player *player, int err, uint64_t id);
     830              : 
     831              :         /**
     832              :          * @brief Content Control ID receive callback
     833              :          *
     834              :          * Called when the Content Control ID is read
     835              :          * See also media_proxy_ctrl_get_content_ctrl_id()
     836              :          *
     837              :          * @param player   Media player instance pointer
     838              :          * @param err      Error value. 0 on success, GATT error on positive value
     839              :          *                 or errno on negative value.
     840              :          * @param ccid     The content control ID
     841              :          */
     842            1 :         void (*content_ctrl_id_recv)(struct media_player *player, int err, uint8_t ccid);
     843              : };
     844              : 
     845              : /**
     846              :  * @brief Register a controller with the media_proxy
     847              :  *
     848              :  * @param ctrl_cbs   Callbacks to the controller
     849              :  *
     850              :  * @return 0 if success, errno on failure
     851              :  */
     852            1 : int media_proxy_ctrl_register(struct media_proxy_ctrl_cbs *ctrl_cbs);
     853              : 
     854              : /**
     855              :  * @brief Discover a remote media player
     856              :  *
     857              :  * Discover a remote media player instance.
     858              :  * The remote player instance will be discovered, and accessed, using Bluetooth,
     859              :  * via the media control client and a remote media control service.
     860              :  * This call will start a GATT discovery of the Media Control Service on the peer,
     861              :  * and setup handles and subscriptions.
     862              :  *
     863              :  * This shall be called once before any other actions can be executed for the
     864              :  * remote player. The remote player instance will be returned in the
     865              :  * discover_player() callback.
     866              :  *
     867              :  * @param conn   The connection to do discovery for
     868              :  *
     869              :  * @return 0 if success, errno on failure
     870              :  */
     871            1 : int media_proxy_ctrl_discover_player(struct bt_conn *conn);
     872              : 
     873              : /**
     874              :  * @brief Read Media Player Name
     875              :  *
     876              :  * @param player   Media player instance pointer
     877              :  *
     878              :  * @return 0 if success, errno on failure.
     879              :  */
     880            1 : int media_proxy_ctrl_get_player_name(struct media_player *player);
     881              : 
     882              : /**
     883              :  * @brief Read Icon Object ID
     884              :  *
     885              :  * Get an ID (48 bit) that can be used to retrieve the Icon
     886              :  * Object from an Object Transfer Service
     887              :  *
     888              :  * See the Media Control Service spec v1.0 sections 3.2 and
     889              :  * 4.1 for a description of the Icon Object.
     890              :  *
     891              :  * Requires Object Transfer Service
     892              :  *
     893              :  * @param player   Media player instance pointer
     894              :  *
     895              :  * @return 0 if success, errno on failure.
     896              :  */
     897            1 : int media_proxy_ctrl_get_icon_id(struct media_player *player);
     898              : 
     899              : /**
     900              :  * @brief Read Icon URL
     901              :  *
     902              :  * Get a URL to the media player's icon.
     903              :  *
     904              :  * @param player   Media player instance pointer
     905              :  */
     906            1 : int media_proxy_ctrl_get_icon_url(struct media_player *player);
     907              : 
     908              : /**
     909              :  * @brief Read Track Title
     910              :  *
     911              :  * @param player   Media player instance pointer
     912              :  *
     913              :  * @return 0 if success, errno on failure.
     914              :  */
     915            1 : int media_proxy_ctrl_get_track_title(struct media_player *player);
     916              : 
     917              : /**
     918              :  * @brief Read Track Duration
     919              :  *
     920              :  * The duration of a track is measured in hundredths of a
     921              :  * second.
     922              :  *
     923              :  * @param player   Media player instance pointer
     924              :  *
     925              :  * @return 0 if success, errno on failure.
     926              :  */
     927            1 : int media_proxy_ctrl_get_track_duration(struct media_player *player);
     928              : 
     929              : /**
     930              :  * @brief Read Track Position
     931              :  *
     932              :  * The position of the player (the playing position) is
     933              :  * measured in hundredths of a second from the beginning of
     934              :  * the track
     935              :  *
     936              :  * @param player   Media player instance pointer
     937              :  *
     938              :  * @return 0 if success, errno on failure.
     939              :  */
     940            1 : int media_proxy_ctrl_get_track_position(struct media_player *player);
     941              : 
     942              : /**
     943              :  * @brief Set Track Position
     944              :  *
     945              :  * Set the playing position of the media player in the current
     946              :  * track. The position is given in hundredths of a second,
     947              :  * from the beginning of the track of the track for positive
     948              :  * values, and (backwards) from the end of the track for
     949              :  * negative values.
     950              :  *
     951              :  * @param player     Media player instance pointer
     952              :  * @param position   The track position to set
     953              :  *
     954              :  * @return 0 if success, errno on failure.
     955              :  */
     956            1 : int media_proxy_ctrl_set_track_position(struct media_player *player, int32_t position);
     957              : 
     958              : /**
     959              :  * @brief Get Playback Speed
     960              :  *
     961              :  * The playback speed parameter is related to the actual
     962              :  * playback speed as follows:
     963              :  * actual playback speed = 2^(speed_parameter/64)
     964              :  *
     965              :  * A speed parameter of 0 corresponds to unity speed playback
     966              :  * (i.e. playback at "normal" speed). A speed parameter of
     967              :  * -128 corresponds to playback at one fourth of normal speed,
     968              :  * 127 corresponds to playback at almost four times the normal
     969              :  * speed.
     970              :  *
     971              :  * @param player   Media player instance pointer
     972              :  *
     973              :  * @return 0 if success, errno on failure.
     974              :  */
     975            1 : int media_proxy_ctrl_get_playback_speed(struct media_player *player);
     976              : 
     977              : /**
     978              :  * @brief Set Playback Speed
     979              :  *
     980              :  * See the get_playback_speed() function for an explanation of
     981              :  * the playback speed parameter.
     982              :  *
     983              :  * Note that the media player may not support all possible
     984              :  * values of the playback speed parameter. If the value given
     985              :  * is not supported, and is higher than the current value, the
     986              :  * player should set the playback speed to the next higher
     987              :  * supported value. (And correspondingly to the next lower
     988              :  * supported value for given values lower than the current
     989              :  * value.)
     990              :  *
     991              :  * @param player   Media player instance pointer
     992              :  * @param speed    The playback speed parameter to set
     993              :  *
     994              :  * @return 0 if success, errno on failure.
     995              :  */
     996            1 : int media_proxy_ctrl_set_playback_speed(struct media_player *player, int8_t speed);
     997              : 
     998              : /**
     999              :  * @brief Get Seeking Speed
    1000              :  *
    1001              :  * The seeking speed gives the speed with which the player is
    1002              :  * seeking. It is a factor, relative to real-time playback
    1003              :  * speed - a factor four means seeking happens at four times
    1004              :  * the real-time playback speed. Positive values are for
    1005              :  * forward seeking, negative values for backwards seeking.
    1006              :  *
    1007              :  * The seeking speed is not settable - a non-zero seeking speed
    1008              :  * is the result of "fast rewind" of "fast forward" commands.
    1009              :  *
    1010              :  * @param player   Media player instance pointer
    1011              :  *
    1012              :  * @return 0 if success, errno on failure.
    1013              :  */
    1014            1 : int media_proxy_ctrl_get_seeking_speed(struct media_player *player);
    1015              : 
    1016              : /**
    1017              :  * @brief Read Current Track Segments Object ID
    1018              :  *
    1019              :  * Get an ID (48 bit) that can be used to retrieve the Current
    1020              :  * Track Segments Object from an Object Transfer Service
    1021              :  *
    1022              :  * See the Media Control Service spec v1.0 sections 3.10 and
    1023              :  * 4.2 for a description of the Track Segments Object.
    1024              :  *
    1025              :  * Requires Object Transfer Service
    1026              :  *
    1027              :  * @param player   Media player instance pointer
    1028              :  *
    1029              :  * @return 0 if success, errno on failure.
    1030              :  */
    1031            1 : int media_proxy_ctrl_get_track_segments_id(struct media_player *player);
    1032              : 
    1033              : /**
    1034              :  * @brief Read Current Track Object ID
    1035              :  *
    1036              :  * Get an ID (48 bit) that can be used to retrieve the Current
    1037              :  * Track Object from an Object Transfer Service
    1038              :  *
    1039              :  * See the Media Control Service spec v1.0 sections 3.11 and
    1040              :  * 4.3 for a description of the Current Track Object.
    1041              :  *
    1042              :  * Requires Object Transfer Service
    1043              :  *
    1044              :  * @param player   Media player instance pointer
    1045              :  *
    1046              :  * @return 0 if success, errno on failure.
    1047              :  */
    1048            1 : int media_proxy_ctrl_get_current_track_id(struct media_player *player);
    1049              : 
    1050              : /**
    1051              :  * @brief Set Current Track Object ID
    1052              :  *
    1053              :  * Change the player's current track to the track given by the ID.
    1054              :  * (Behaves similarly to the goto track command.)
    1055              :  *
    1056              :  * Requires Object Transfer Service
    1057              :  *
    1058              :  * @param player   Media player instance pointer
    1059              :  * @param id       The ID of a track object
    1060              :  *
    1061              :  * @return 0 if success, errno on failure.
    1062              :  */
    1063            1 : int media_proxy_ctrl_set_current_track_id(struct media_player *player, uint64_t id);
    1064              : 
    1065              : /**
    1066              :  * @brief Read Next Track Object ID
    1067              :  *
    1068              :  * Get an ID (48 bit) that can be used to retrieve the Next
    1069              :  * Track Object from an Object Transfer Service
    1070              :  *
    1071              :  * Requires Object Transfer Service
    1072              :  *
    1073              :  * @param player   Media player instance pointer
    1074              :  *
    1075              :  * @return 0 if success, errno on failure.
    1076              :  */
    1077            1 : int media_proxy_ctrl_get_next_track_id(struct media_player *player);
    1078              : 
    1079              : /**
    1080              :  * @brief Set Next Track Object ID
    1081              :  *
    1082              :  * Change the player's next track to the track given by the ID.
    1083              :  *
    1084              :  * Requires Object Transfer Service
    1085              :  *
    1086              :  * @param player   Media player instance pointer
    1087              :  * @param id       The ID of a track object
    1088              :  *
    1089              :  * @return 0 if success, errno on failure.
    1090              :  */
    1091            1 : int media_proxy_ctrl_set_next_track_id(struct media_player *player, uint64_t id);
    1092              : 
    1093              : /**
    1094              :  * @brief Read Parent Group Object ID
    1095              :  *
    1096              :  * Get an ID (48 bit) that can be used to retrieve the Parent
    1097              :  * Track Object from an Object Transfer Service
    1098              :  *
    1099              :  * The parent group is the parent of the current group.
    1100              :  *
    1101              :  * See the Media Control Service spec v1.0 sections 3.14 and
    1102              :  * 4.4 for a description of the Current Track Object.
    1103              :  *
    1104              :  * Requires Object Transfer Service
    1105              :  *
    1106              :  * @param player   Media player instance pointer
    1107              :  *
    1108              :  * @return 0 if success, errno on failure.
    1109              :  */
    1110            1 : int media_proxy_ctrl_get_parent_group_id(struct media_player *player);
    1111              : 
    1112              : /**
    1113              :  * @brief Read Current Group Object ID
    1114              :  *
    1115              :  * Get an ID (48 bit) that can be used to retrieve the Current
    1116              :  * Track Object from an Object Transfer Service
    1117              :  *
    1118              :  * See the Media Control Service spec v1.0 sections 3.14 and
    1119              :  * 4.4 for a description of the Current Group Object.
    1120              :  *
    1121              :  * Requires Object Transfer Service
    1122              :  *
    1123              :  * @param player   Media player instance pointer
    1124              :  *
    1125              :  * @return 0 if success, errno on failure.
    1126              :  */
    1127            1 : int media_proxy_ctrl_get_current_group_id(struct media_player *player);
    1128              : 
    1129              : /**
    1130              :  * @brief Set Current Group Object ID
    1131              :  *
    1132              :  * Change the player's current group to the group given by the
    1133              :  * ID, and the current track to the first track in that group.
    1134              :  *
    1135              :  * Requires Object Transfer Service
    1136              :  *
    1137              :  * @param player   Media player instance pointer
    1138              :  * @param id       The ID of a group object
    1139              :  *
    1140              :  * @return 0 if success, errno on failure.
    1141              :  */
    1142            1 : int media_proxy_ctrl_set_current_group_id(struct media_player *player, uint64_t id);
    1143              : 
    1144              : /**
    1145              :  * @brief Read Playing Order
    1146              :  *
    1147              :  * @param player   Media player instance pointer
    1148              :  *
    1149              :  * @return 0 if success, errno on failure.
    1150              :  */
    1151            1 : int media_proxy_ctrl_get_playing_order(struct media_player *player);
    1152              : 
    1153              : /**
    1154              :  * @brief Set Playing Order
    1155              :  *
    1156              :  * Set the media player's playing order
    1157              :  *
    1158              :  * @param player   Media player instance pointer
    1159              :  * @param order    The playing order to set
    1160              :  *
    1161              :  * @return 0 if success, errno on failure.
    1162              :  */
    1163            1 : int media_proxy_ctrl_set_playing_order(struct media_player *player, uint8_t order);
    1164              : 
    1165              : /**
    1166              :  * @brief Read Playing Orders Supported
    1167              :  *
    1168              :  * Read a bitmap containing the media player's supported
    1169              :  * playing orders.
    1170              :  *
    1171              :  * @param player   Media player instance pointer
    1172              :  *
    1173              :  * @return 0 if success, errno on failure.
    1174              :  */
    1175            1 : int media_proxy_ctrl_get_playing_orders_supported(struct media_player *player);
    1176              : 
    1177              : /**
    1178              :  * @brief Read Media State
    1179              :  *
    1180              :  * Read the media player's state
    1181              :  *
    1182              :  * @param player   Media player instance pointer
    1183              :  *
    1184              :  * @return 0 if success, errno on failure.
    1185              :  */
    1186            1 : int media_proxy_ctrl_get_media_state(struct media_player *player);
    1187              : 
    1188              : /**
    1189              :  * @brief Send Command
    1190              :  *
    1191              :  * Send a command to the media player.
    1192              :  * Commands may cause the media player to change its state
    1193              :  * May result in two callbacks - one for the actual sending of the command to the
    1194              :  * player, one for the result of the command from the player.
    1195              :  *
    1196              :  * @param player      Media player instance pointer
    1197              :  * @param command     The command to send
    1198              :  *
    1199              :  * @return 0 if success, errno on failure.
    1200              :  */
    1201            1 : int media_proxy_ctrl_send_command(struct media_player *player, const struct mpl_cmd *command);
    1202              : 
    1203              : /**
    1204              :  * @brief Read Commands Supported
    1205              :  *
    1206              :  * Read a bitmap containing the media player's supported
    1207              :  * command opcodes.
    1208              :  *
    1209              :  * @param player   Media player instance pointer
    1210              :  *
    1211              :  * @return 0 if success, errno on failure.
    1212              :  */
    1213            1 : int media_proxy_ctrl_get_commands_supported(struct media_player *player);
    1214              : 
    1215              : /**
    1216              :  * @brief Set Search
    1217              :  *
    1218              :  * Write a search to the media player.
    1219              :  * If the search is successful, the search results will be available as a group object
    1220              :  * in the Object Transfer Service (OTS).
    1221              :  *
    1222              :  * May result in up to three callbacks
    1223              :  * - one for the actual sending of the search to the player
    1224              :  * - one for the result code for the search from the player
    1225              :  * - if the search is successful, one for the search results object ID in the OTs
    1226              :  *
    1227              :  * Requires Object Transfer Service
    1228              :  *
    1229              :  * @param player   Media player instance pointer
    1230              :  * @param search   The search to write
    1231              :  *
    1232              :  * @return 0 if success, errno on failure.
    1233              :  */
    1234            1 : int media_proxy_ctrl_send_search(struct media_player *player, const struct mpl_search *search);
    1235              : 
    1236              : /**
    1237              :  * @brief Read Search Results Object ID
    1238              :  *
    1239              :  * Get an ID (48 bit) that can be used to retrieve the Search
    1240              :  * Results Object from an Object Transfer Service
    1241              :  *
    1242              :  * The search results object is a group object.
    1243              :  * The search results object only exists if a successful
    1244              :  * search operation has been done.
    1245              :  *
    1246              :  * Requires Object Transfer Service
    1247              :  *
    1248              :  * @param player   Media player instance pointer
    1249              :  *
    1250              :  * @return 0 if success, errno on failure.
    1251              :  */
    1252            1 : int media_proxy_ctrl_get_search_results_id(struct media_player *player);
    1253              : 
    1254              : /**
    1255              :  * @brief Read Content Control ID
    1256              :  *
    1257              :  * The content control ID identifies a content control service
    1258              :  * on a device, and links it to the corresponding audio
    1259              :  * stream.
    1260              :  *
    1261              :  * @param player   Media player instance pointer
    1262              :  *
    1263              :  * @return 0 if success, errno on failure.
    1264              :  */
    1265            1 : uint8_t media_proxy_ctrl_get_content_ctrl_id(struct media_player *player);
    1266              : 
    1267              : /**
    1268              :  * @brief Available calls in a player, that the media proxy can call
    1269              :  *
    1270              :  * Given by a player when registering.
    1271              :  */
    1272            1 : struct media_proxy_pl_calls {
    1273              : 
    1274              :         /**
    1275              :          * @brief Read Media Player Name
    1276              :          *
    1277              :          * @return The name of the media player
    1278              :          */
    1279            1 :         const char *(*get_player_name)(void);
    1280              : 
    1281              :         /**
    1282              :          * @brief Read Icon Object ID
    1283              :          *
    1284              :          * Get an ID (48 bit) that can be used to retrieve the Icon
    1285              :          * Object from an Object Transfer Service
    1286              :          *
    1287              :          * See the Media Control Service spec v1.0 sections 3.2 and
    1288              :          * 4.1 for a description of the Icon Object.
    1289              :          *
    1290              :          * @return The Icon Object ID
    1291              :          */
    1292            1 :         uint64_t (*get_icon_id)(void);
    1293              : 
    1294              :         /**
    1295              :          * @brief Read Icon URL
    1296              :          *
    1297              :          * Get a URL to the media player's icon.
    1298              :          *
    1299              :          * @return The URL of the Icon
    1300              :          */
    1301            1 :         const char *(*get_icon_url)(void);
    1302              : 
    1303              :         /**
    1304              :          * @brief Read Track Title
    1305              :          *
    1306              :          * @return The title of the current track
    1307              :          */
    1308            1 :         const char *(*get_track_title)(void);
    1309              : 
    1310              :         /**
    1311              :          * @brief Read Track Duration
    1312              :          *
    1313              :          * The duration of a track is measured in hundredths of a
    1314              :          * second.
    1315              :          *
    1316              :          * @return The duration of the current track
    1317              :          */
    1318            1 :         int32_t (*get_track_duration)(void);
    1319              : 
    1320              :         /**
    1321              :          * @brief Read Track Position
    1322              :          *
    1323              :          * The position of the player (the playing position) is
    1324              :          * measured in hundredths of a second from the beginning of
    1325              :          * the track
    1326              :          *
    1327              :          * @return The position of the player in the current track
    1328              :          */
    1329            1 :         int32_t (*get_track_position)(void);
    1330              : 
    1331              :         /**
    1332              :          * @brief Set Track Position
    1333              :          *
    1334              :          * Set the playing position of the media player in the current
    1335              :          * track. The position is given in hundredths of a second,
    1336              :          * from the beginning of the track of the track for positive
    1337              :          * values, and (backwards) from the end of the track for
    1338              :          * negative values.
    1339              :          *
    1340              :          * @param position    The player position to set
    1341              :          */
    1342            1 :         void (*set_track_position)(int32_t position);
    1343              : 
    1344              :         /**
    1345              :          * @brief Get Playback Speed
    1346              :          *
    1347              :          * The playback speed parameter is related to the actual
    1348              :          * playback speed as follows:
    1349              :          * actual playback speed = 2^(speed_parameter/64)
    1350              :          *
    1351              :          * A speed parameter of 0 corresponds to unity speed playback
    1352              :          * (i.e. playback at "normal" speed). A speed parameter of
    1353              :          * -128 corresponds to playback at one fourth of normal speed,
    1354              :          * 127 corresponds to playback at almost four times the normal
    1355              :          * speed.
    1356              :          *
    1357              :          * @return The playback speed parameter
    1358              :          */
    1359            1 :         int8_t (*get_playback_speed)(void);
    1360              : 
    1361              :         /**
    1362              :          * @brief Set Playback Speed
    1363              :          *
    1364              :          * See the get_playback_speed() function for an explanation of
    1365              :          * the playback speed parameter.
    1366              :          *
    1367              :          * Note that the media player may not support all possible
    1368              :          * values of the playback speed parameter. If the value given
    1369              :          * is not supported, and is higher than the current value, the
    1370              :          * player should set the playback speed to the next higher
    1371              :          * supported value. (And correspondingly to the next lower
    1372              :          * supported value for given values lower than the current
    1373              :          * value.)
    1374              :          *
    1375              :          * @param speed The playback speed parameter to set
    1376              :          */
    1377            1 :         void (*set_playback_speed)(int8_t speed);
    1378              : 
    1379              :         /**
    1380              :          * @brief Get Seeking Speed
    1381              :          *
    1382              :          * The seeking speed gives the speed with which the player is
    1383              :          * seeking. It is a factor, relative to real-time playback
    1384              :          * speed - a factor four means seeking happens at four times
    1385              :          * the real-time playback speed. Positive values are for
    1386              :          * forward seeking, negative values for backwards seeking.
    1387              :          *
    1388              :          * The seeking speed is not settable - a non-zero seeking speed
    1389              :          * is the result of "fast rewind" of "fast forward" commands.
    1390              :          *
    1391              :          * @return The seeking speed factor
    1392              :          */
    1393            1 :         int8_t (*get_seeking_speed)(void);
    1394              : 
    1395              :         /**
    1396              :          * @brief Read Current Track Segments Object ID
    1397              :          *
    1398              :          * Get an ID (48 bit) that can be used to retrieve the Current
    1399              :          * Track Segments Object from an Object Transfer Service
    1400              :          *
    1401              :          * See the Media Control Service spec v1.0 sections 3.10 and
    1402              :          * 4.2 for a description of the Track Segments Object.
    1403              :          *
    1404              :          * @return Current The Track Segments Object ID
    1405              :          */
    1406            1 :         uint64_t (*get_track_segments_id)(void);
    1407              : 
    1408              :         /**
    1409              :          * @brief Read Current Track Object ID
    1410              :          *
    1411              :          * Get an ID (48 bit) that can be used to retrieve the Current
    1412              :          * Track Object from an Object Transfer Service
    1413              :          *
    1414              :          * See the Media Control Service spec v1.0 sections 3.11 and
    1415              :          * 4.3 for a description of the Current Track Object.
    1416              :          *
    1417              :          * @return The Current Track Object ID
    1418              :          */
    1419            1 :         uint64_t (*get_current_track_id)(void);
    1420              : 
    1421              :         /**
    1422              :          * @brief Set Current Track Object ID
    1423              :          *
    1424              :          * Change the player's current track to the track given by the ID.
    1425              :          * (Behaves similarly to the goto track command.)
    1426              :          *
    1427              :          * @param id    The ID of a track object
    1428              :          */
    1429            1 :         void (*set_current_track_id)(uint64_t id);
    1430              : 
    1431              :         /**
    1432              :          * @brief Read Next Track Object ID
    1433              :          *
    1434              :          * Get an ID (48 bit) that can be used to retrieve the Next
    1435              :          * Track Object from an Object Transfer Service
    1436              :          *
    1437              :          * @return The Next Track Object ID
    1438              :          */
    1439            1 :         uint64_t (*get_next_track_id)(void);
    1440              : 
    1441              :         /**
    1442              :          * @brief Set Next Track Object ID
    1443              :          *
    1444              :          * Change the player's next track to the track given by the ID.
    1445              :          *
    1446              :          * @param id    The ID of a track object
    1447              :          */
    1448            1 :         void (*set_next_track_id)(uint64_t id);
    1449              : 
    1450              :         /**
    1451              :          * @brief Read Parent Group Object ID
    1452              :          *
    1453              :          * Get an ID (48 bit) that can be used to retrieve the Parent
    1454              :          * Track Object from an Object Transfer Service
    1455              :          *
    1456              :          * The parent group is the parent of the current group.
    1457              :          *
    1458              :          * See the Media Control Service spec v1.0 sections 3.14 and
    1459              :          * 4.4 for a description of the Current Track Object.
    1460              :          *
    1461              :          * @return The Current Group Object ID
    1462              :          */
    1463            1 :         uint64_t (*get_parent_group_id)(void);
    1464              : 
    1465              :         /**
    1466              :          * @brief Read Current Group Object ID
    1467              :          *
    1468              :          * Get an ID (48 bit) that can be used to retrieve the Current
    1469              :          * Track Object from an Object Transfer Service
    1470              :          *
    1471              :          * See the Media Control Service spec v1.0 sections 3.14 and
    1472              :          * 4.4 for a description of the Current Group Object.
    1473              :          *
    1474              :          * @return The Current Group Object ID
    1475              :          */
    1476            1 :         uint64_t (*get_current_group_id)(void);
    1477              : 
    1478              :         /**
    1479              :          * @brief Set Current Group Object ID
    1480              :          *
    1481              :          * Change the player's current group to the group given by the
    1482              :          * ID, and the current track to the first track in that group.
    1483              :          *
    1484              :          * @param id    The ID of a group object
    1485              :          */
    1486            1 :         void (*set_current_group_id)(uint64_t id);
    1487              : 
    1488              :         /**
    1489              :          * @brief Read Playing Order
    1490              :          *
    1491              :          * return The media player's current playing order
    1492              :          */
    1493            1 :         uint8_t (*get_playing_order)(void);
    1494              : 
    1495              :         /**
    1496              :          * @brief Set Playing Order
    1497              :          *
    1498              :          * Set the media player's playing order.
    1499              :          * See the MEDIA_PROXY_PLAYING_ORDER_* defines.
    1500              :          *
    1501              :          * @param order The playing order to set
    1502              :          */
    1503            1 :         void (*set_playing_order)(uint8_t order);
    1504              : 
    1505              :         /**
    1506              :          * @brief Read Playing Orders Supported
    1507              :          *
    1508              :          * Read a bitmap containing the media player's supported
    1509              :          * playing orders.
    1510              :          * See the MEDIA_PROXY_PLAYING_ORDERS_SUPPORTED_* defines.
    1511              :          *
    1512              :          * @return The media player's supported playing orders
    1513              :          */
    1514            1 :         uint16_t (*get_playing_orders_supported)(void);
    1515              : 
    1516              :         /**
    1517              :          * @brief Read Media State
    1518              :          *
    1519              :          * Read the media player's state
    1520              :          * See the MEDIA_PROXY_MEDIA_STATE_* defines.
    1521              :          *
    1522              :          * @return The media player's state
    1523              :          */
    1524            1 :         uint8_t (*get_media_state)(void);
    1525              : 
    1526              :         /**
    1527              :          * @brief Send Command
    1528              :          *
    1529              :          * Send a command to the media player.
    1530              :          * For command opcodes (play, pause, ...) - see the MEDIA_PROXY_OP_*
    1531              :          * defines.
    1532              :          *
    1533              :          * @param command       The command to send
    1534              :          */
    1535            1 :         void (*send_command)(const struct mpl_cmd *command);
    1536              : 
    1537              :         /**
    1538              :          * @brief Read Commands Supported
    1539              :          *
    1540              :          * Read a bitmap containing the media player's supported
    1541              :          * command opcodes.
    1542              :          * See the MEDIA_PROXY_OP_SUP_* defines.
    1543              :          *
    1544              :          * @return The media player's supported command opcodes
    1545              :          */
    1546            1 :         uint32_t (*get_commands_supported)(void);
    1547              : 
    1548              :         /**
    1549              :          * @brief Set Search
    1550              :          *
    1551              :          * Write a search to the media player.
    1552              :          * (For the formatting of a search, see the Media Control
    1553              :          * Service spec and the mcs.h file.)
    1554              :          *
    1555              :          * @param search        The search to write
    1556              :          */
    1557            1 :         void (*send_search)(const struct mpl_search *search);
    1558              : 
    1559              :         /**
    1560              :          * @brief Read Search Results Object ID
    1561              :          *
    1562              :          * Get an ID (48 bit) that can be used to retrieve the Search
    1563              :          * Results Object from an Object Transfer Service
    1564              :          *
    1565              :          * The search results object is a group object.
    1566              :          * The search results object only exists if a successful
    1567              :          * search operation has been done.
    1568              :          *
    1569              :          * @return The Search Results Object ID
    1570              :          */
    1571            1 :         uint64_t (*get_search_results_id)(void);
    1572              : 
    1573              :         /**
    1574              :          * @brief Read Content Control ID
    1575              :          *
    1576              :          * The content control ID identifies a content control service
    1577              :          * on a device, and links it to the corresponding audio
    1578              :          * stream.
    1579              :          *
    1580              :          * @return The content control ID for the media player
    1581              :          */
    1582            1 :         uint8_t (*get_content_ctrl_id)(void);
    1583              : };
    1584              : 
    1585              : /**
    1586              :  * @brief Register a player with the media proxy
    1587              :  *
    1588              :  * Register a player with the media proxy module, for use by media
    1589              :  * controllers.
    1590              :  *
    1591              :  * The media proxy may call any non-NULL function pointers in the
    1592              :  * supplied media_proxy_pl_calls structure.
    1593              :  *
    1594              :  * @param pl_calls      Function pointers to the media player's calls
    1595              :  *
    1596              :  * @return 0 if success, errno on failure
    1597              :  */
    1598            1 : int media_proxy_pl_register(struct media_proxy_pl_calls *pl_calls);
    1599              : 
    1600              : /**
    1601              :  * @brief Initialize player
    1602              :  *
    1603              :  * TODO: Move to player header file
    1604              :  */
    1605            1 : int media_proxy_pl_init(void);
    1606              : 
    1607              : /**
    1608              :  * @brief Get the pointer of the Object Transfer Service used by the Media Control Service
    1609              :  *
    1610              :  * TODO: Find best location for this call, and move this one also
    1611              :  */
    1612            1 : struct bt_ots *bt_mcs_get_ots(void);
    1613              : 
    1614              : /**
    1615              :  * @brief Player name changed callback
    1616              :  *
    1617              :  * To be called when the player's name is changed.
    1618              :  *
    1619              :  * @param name The name of the player
    1620              :  */
    1621            1 : void media_proxy_pl_name_cb(const char *name);
    1622              : 
    1623              : /**
    1624              :  * @brief Player icon URL changed callback
    1625              :  *
    1626              :  * To be called when the player's icon URL is changed.
    1627              :  *
    1628              :  * @param url The URL of the player's icon
    1629              :  */
    1630            1 : void media_proxy_pl_icon_url_cb(const char *url);
    1631              : 
    1632              : /**
    1633              :  * @brief Track changed callback
    1634              :  *
    1635              :  * To be called when the player's current track is changed
    1636              :  */
    1637            1 : void media_proxy_pl_track_changed_cb(void);
    1638              : 
    1639              : /**
    1640              :  * @brief Track title callback
    1641              :  *
    1642              :  * To be called when the player's current track is changed
    1643              :  *
    1644              :  * @param title The title of the track
    1645              :  */
    1646            1 : void media_proxy_pl_track_title_cb(char *title);
    1647              : 
    1648              : /**
    1649              :  * @brief Track duration callback
    1650              :  *
    1651              :  * To be called when the current track's duration is changed (e.g. due
    1652              :  * to a track change)
    1653              :  *
    1654              :  * The track duration is given in hundredths of a second.
    1655              :  *
    1656              :  * @param duration      The track duration
    1657              :  */
    1658            1 : void media_proxy_pl_track_duration_cb(int32_t duration);
    1659              : 
    1660              : /**
    1661              :  * @brief Track position callback
    1662              :  *
    1663              :  * To be called when the media player's position in the track is
    1664              :  * changed, or when the player is paused or similar.
    1665              :  *
    1666              :  * Exception: This callback should not be called when the position
    1667              :  * changes during regular playback, i.e. while the player is playing
    1668              :  * and playback happens at a constant speed.
    1669              :  *
    1670              :  * The track position is given in hundredths of a second from the
    1671              :  * start of the track.
    1672              :  *
    1673              :  *  @param position     The media player's position in the track
    1674              :  */
    1675            1 : void media_proxy_pl_track_position_cb(int32_t position);
    1676              : 
    1677              : /**
    1678              :  * @brief Playback speed callback
    1679              :  *
    1680              :  * To be called when the playback speed is changed.
    1681              :  *
    1682              :  * @param speed The playback speed parameter
    1683              :  */
    1684            1 : void media_proxy_pl_playback_speed_cb(int8_t speed);
    1685              : 
    1686              : /**
    1687              :  * @brief Seeking speed callback
    1688              :  *
    1689              :  * To be called when the seeking speed is changed.
    1690              :  *
    1691              :  * @param speed The seeking speed factor
    1692              :  */
    1693            1 : void media_proxy_pl_seeking_speed_cb(int8_t speed);
    1694              : 
    1695              : /**
    1696              :  * @brief Current track object ID callback
    1697              :  *
    1698              :  * To be called when the ID of the current track is changed (e.g. due
    1699              :  * to a track change).
    1700              :  *
    1701              :  * @param id The ID of the current track object in the OTS
    1702              :  */
    1703            1 : void media_proxy_pl_current_track_id_cb(uint64_t id);
    1704              : 
    1705              : /**
    1706              :  * @brief Next track object ID callback
    1707              :  *
    1708              :  * To be called when the ID of the current track is changes
    1709              :  *
    1710              :  * @param id The ID of the next track object in the OTS
    1711              :  */
    1712            1 : void media_proxy_pl_next_track_id_cb(uint64_t id);
    1713              : 
    1714              : /**
    1715              :  * @brief Parent group object ID callback
    1716              :  *
    1717              :  * To be called when the ID of the parent group is changed
    1718              :  *
    1719              :  * @param id The ID of the parent group object in the OTS
    1720              :  */
    1721            1 : void media_proxy_pl_parent_group_id_cb(uint64_t id);
    1722              : 
    1723              : /**
    1724              :  * @brief Current group object ID callback
    1725              :  *
    1726              :  * To be called when the ID of the current group is changed
    1727              :  *
    1728              :  * @param id The ID of the current group object in the OTS
    1729              :  */
    1730            1 : void media_proxy_pl_current_group_id_cb(uint64_t id);
    1731              : 
    1732              : /**
    1733              :  * @brief Playing order callback
    1734              :  *
    1735              :  * To be called when the playing order is changed
    1736              :  *
    1737              :  * @param order The playing order
    1738              :  */
    1739            1 : void media_proxy_pl_playing_order_cb(uint8_t order);
    1740              : 
    1741              : /**
    1742              :  * @brief Media state callback
    1743              :  *
    1744              :  * To be called when the media state is changed
    1745              :  *
    1746              :  * @param state The media player's state
    1747              :  */
    1748            1 : void media_proxy_pl_media_state_cb(uint8_t state);
    1749              : 
    1750              : /**
    1751              :  * @brief Command callback
    1752              :  *
    1753              :  * To be called when a command has been sent, to notify whether the
    1754              :  * command was successfully performed or not.
    1755              :  * See the MEDIA_PROXY_CMD_* result code defines.
    1756              :  *
    1757              :  * @param cmd_ntf       The result of the command
    1758              :  */
    1759            1 : void media_proxy_pl_command_cb(const struct mpl_cmd_ntf *cmd_ntf);
    1760              : 
    1761              : /**
    1762              :  * @brief Commands supported callback
    1763              :  *
    1764              :  * To be called when the set of commands supported is changed
    1765              :  *
    1766              :  * @param opcodes   The supported commands opcodes
    1767              :  */
    1768            1 : void media_proxy_pl_commands_supported_cb(uint32_t opcodes);
    1769              : 
    1770              : /**
    1771              :  * @brief Search callback
    1772              :  *
    1773              :  * To be called when a search has been set to notify whether the
    1774              :  * search was successfully performed or not.
    1775              :  * See the MEDIA_PROXY_SEARCH_* result code defines.
    1776              :  *
    1777              :  * The actual results of the search, if successful, can be found in
    1778              :  * the search results object.
    1779              :  *
    1780              :  * @param result_code   The result (success or failure) of the search
    1781              :  */
    1782            1 : void media_proxy_pl_search_cb(uint8_t result_code);
    1783              : 
    1784              : /**
    1785              :  * @brief Search Results object ID callback
    1786              :  *
    1787              :  * To be called when the ID of the search results is changed
    1788              :  * (typically as the result of a new successful search).
    1789              :  *
    1790              :  * @param id    The ID of the search results object in the OTS
    1791              :  */
    1792            1 : void media_proxy_pl_search_results_id_cb(uint64_t id);
    1793              : 
    1794              : #ifdef __cplusplus
    1795              : }
    1796              : #endif
    1797              : 
    1798              : /** @} */ /* End of group bt_media_proxy */
    1799              : 
    1800              : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MEDIA_PROXY_H_ */
        

Generated by: LCOV version 2.0-1