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

            Line data    Source code
       1            1 : /**
       2              :  * @file
       3              :  * @brief Bluetooth Media Control Client (MCC) 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_MCC_
      13              : #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCC_
      14              : 
      15              : /**
      16              :  * @brief Bluetooth Media Control Client (MCC) interface
      17              :  *
      18              :  * Updated to the Media Control Profile specification revision 1.0
      19              :  *
      20              :  * @defgroup bt_mcc Media Control Client (MCC)
      21              :  *
      22              :  * @since 3.0
      23              :  * @version 0.8.0
      24              :  *
      25              :  * @ingroup bluetooth
      26              :  * @{
      27              :  */
      28              : 
      29              : #include <stdint.h>
      30              : #include <stdbool.h>
      31              : 
      32              : #include <zephyr/bluetooth/conn.h>
      33              : #include <zephyr/net_buf.h>
      34              : #include <zephyr/bluetooth/audio/media_proxy.h>
      35              : 
      36              : #ifdef __cplusplus
      37              : extern "C" {
      38              : #endif
      39              : 
      40              : /**** Callback functions ******************************************************/
      41              : 
      42              : /**
      43              :  * @brief Callback function for bt_mcc_discover_mcs()
      44              :  *
      45              :  * Called when a media control server is discovered
      46              :  *
      47              :  * @param conn          The connection that was used to initialise the media control client
      48              :  * @param err           Error value. 0 on success, GATT error or errno on fail
      49              :  */
      50            1 : typedef void (*bt_mcc_discover_mcs_cb)(struct bt_conn *conn, int err);
      51              : 
      52              : /**
      53              :  * @brief Callback function for bt_mcc_read_player_name()
      54              :  *
      55              :  * Called when the player name is read or notified
      56              :  *
      57              :  * @param conn          The connection that was used to initialise the media control client
      58              :  * @param err           Error value. 0 on success, GATT error or errno on fail
      59              :  * @param name          Player name
      60              :  */
      61            1 : typedef void (*bt_mcc_read_player_name_cb)(struct bt_conn *conn, int err, const char *name);
      62              : 
      63              : /**
      64              :  * @brief Callback function for bt_mcc_read_icon_obj_id()
      65              :  *
      66              :  * Called when the icon object ID is read
      67              :  *
      68              :  * @param conn          The connection that was used to initialise the media control client
      69              :  * @param err           Error value. 0 on success, GATT error or errno on fail
      70              :  * @param icon_id       The ID of the Icon Object. This is a UINT48 in a uint64_t
      71              :  */
      72            1 : typedef void (*bt_mcc_read_icon_obj_id_cb)(struct bt_conn *conn, int err, uint64_t icon_id);
      73              : 
      74              : /**
      75              :  * @brief Callback function for bt_mcc_read_icon_url()
      76              :  *
      77              :  * Called when the icon URL is read
      78              :  *
      79              :  * @param conn          The connection that was used to initialise the media control client
      80              :  * @param err           Error value. 0 on success, GATT error or errno on fail
      81              :  * @param icon_url      The URL of the Icon
      82              :  */
      83            1 : typedef void (*bt_mcc_read_icon_url_cb)(struct bt_conn *conn, int err, const char *icon_url);
      84              : 
      85              : /**
      86              :  * @brief Callback function for track changed notifications
      87              :  *
      88              :  * Called when a track change is notified.
      89              :  *
      90              :  * The track changed characteristic is a special case.  It can not be read or
      91              :  * set, it can only be notified.
      92              :  *
      93              :  * @param conn          The connection that was used to initialise the media control client
      94              :  * @param err           Error value. 0 on success, GATT error or errno on fail
      95              :  */
      96            1 : typedef void (*bt_mcc_track_changed_ntf_cb)(struct bt_conn *conn, int err);
      97              : 
      98              : 
      99              : /**
     100              :  * @brief Callback function for bt_mcc_read_track_title()
     101              :  *
     102              :  * Called when the track title is read or notified
     103              :  *
     104              :  * @param conn          The connection that was used to initialise the media control client
     105              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     106              :  * @param title         The title of the track
     107              :  */
     108            1 : typedef void (*bt_mcc_read_track_title_cb)(struct bt_conn *conn, int err, const char *title);
     109              : 
     110              : /**
     111              :  * @brief Callback function for bt_mcc_read_track_duration()
     112              :  *
     113              :  * Called when the track duration is read or notified
     114              :  *
     115              :  * @param conn          The connection that was used to initialise the media control client
     116              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     117              :  * @param dur           The duration of the track
     118              :  */
     119            1 : typedef void (*bt_mcc_read_track_duration_cb)(struct bt_conn *conn, int err, int32_t dur);
     120              : 
     121              : /**
     122              :  * @brief Callback function for bt_mcc_read_track_position()
     123              :  *
     124              :  * Called when the track position is read or notified
     125              :  *
     126              :  * @param conn          The connection that was used to initialise the media control client
     127              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     128              :  * @param pos           The Track Position
     129              :  */
     130            1 : typedef void (*bt_mcc_read_track_position_cb)(struct bt_conn *conn, int err, int32_t pos);
     131              : 
     132              : /**
     133              :  * @brief Callback function for bt_mcc_set_track_position()
     134              :  *
     135              :  * Called when the track position is set
     136              :  *
     137              :  * @param conn          The connection that was used to initialise the media control client
     138              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     139              :  * @param pos           The Track Position set (or attempted to set)
     140              :  */
     141            1 : typedef void (*bt_mcc_set_track_position_cb)(struct bt_conn *conn, int err, int32_t pos);
     142              : 
     143              : /**
     144              :  * @brief Callback function for bt_mcc_read_playback_speed()
     145              :  *
     146              :  * Called when the playback speed is read or notified
     147              :  *
     148              :  * @param conn          The connection that was used to initialise the media control client
     149              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     150              :  * @param speed         The Playback Speed
     151              :  */
     152            1 : typedef void (*bt_mcc_read_playback_speed_cb)(struct bt_conn *conn, int err, int8_t speed);
     153              : 
     154              : /**
     155              :  * @brief Callback function for bt_mcc_set_playback_speed()
     156              :  *
     157              :  * Called when the playback speed is set
     158              :  *
     159              :  * @param conn          The connection that was used to initialise the media control client
     160              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     161              :  * @param speed         The Playback Speed set (or attempted to set)
     162              :  */
     163            1 : typedef void (*bt_mcc_set_playback_speed_cb)(struct bt_conn *conn, int err, int8_t speed);
     164              : 
     165              : /**
     166              :  * @brief Callback function for bt_mcc_read_seeking_speed()
     167              :  *
     168              :  * Called when the seeking speed is read or notified
     169              :  *
     170              :  * @param conn          The connection that was used to initialise the media control client
     171              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     172              :  * @param speed         The Seeking Speed
     173              :  */
     174            1 : typedef void (*bt_mcc_read_seeking_speed_cb)(struct bt_conn *conn, int err, int8_t speed);
     175              : 
     176              : /**
     177              :  * @brief Callback function for bt_mcc_read_segments_obj_id()
     178              :  *
     179              :  * Called when the track segments object ID is read
     180              :  *
     181              :  * @param conn          The connection that was used to initialise the media control client
     182              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     183              :  * @param id            The Track Segments Object ID (UINT48)
     184              :  */
     185            1 : typedef void (*bt_mcc_read_segments_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     186              : 
     187              : /**
     188              :  * @brief Callback function for bt_mcc_read_current_track_obj_id()
     189              :  *
     190              :  * Called when the current track object ID is read or notified
     191              :  *
     192              :  * @param conn          The connection that was used to initialise the media control client
     193              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     194              :  * @param id            The Current Track Object ID (UINT48)
     195              :  */
     196            1 : typedef void (*bt_mcc_read_current_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     197              : 
     198              : /**
     199              :  * @brief Callback function for bt_mcc_set_current_track_obj_id()
     200              :  *
     201              :  * Called when the current track object ID is set
     202              :  *
     203              :  * @param conn          The connection that was used to initialise the media control client
     204              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     205              :  * @param id            The Object ID (UINT48) set (or attempted to set)
     206              :  */
     207            1 : typedef void (*bt_mcc_set_current_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     208              : 
     209              : /**
     210              :  * @brief Callback function for bt_mcc_read_next_track_obj_id_obj()
     211              :  *
     212              :  * Called when the next track object ID is read or notified
     213              :  *
     214              :  * @param conn          The connection that was used to initialise the media control client
     215              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     216              :  * @param id            The Next Track Object ID (UINT48)
     217              :  */
     218            1 : typedef void (*bt_mcc_read_next_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     219              : 
     220              : /**
     221              :  * @brief Callback function for bt_mcc_set_next_track_obj_id()
     222              :  *
     223              :  * Called when the next track object ID is set
     224              :  *
     225              :  * @param conn          The connection that was used to initialise the media control client
     226              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     227              :  * @param id            The Object ID (UINT48) set (or attempted to set)
     228              :  */
     229            1 : typedef void (*bt_mcc_set_next_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     230              : 
     231              : /**
     232              :  * @brief Callback function for bt_mcc_read_parent_group_obj_id()
     233              :  *
     234              :  * Called when the parent group object ID is read or notified
     235              :  *
     236              :  * @param conn          The connection that was used to initialise the media control client
     237              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     238              :  * @param id            The Parent Group Object ID (UINT48)
     239              :  */
     240            1 : typedef void (*bt_mcc_read_parent_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     241              : 
     242              : /**
     243              :  * @brief Callback function for bt_mcc_read_current_group_obj_id()
     244              :  *
     245              :  * Called when the current group object ID is read or notified
     246              :  *
     247              :  * @param conn          The connection that was used to initialise the media control client
     248              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     249              :  * @param id            The Current Group Object ID (UINT48)
     250              :  */
     251            1 : typedef void (*bt_mcc_read_current_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id);
     252              : 
     253              : /**
     254              :  * @brief Callback function for bt_mcc_set_current_group_obj_id()
     255              :  *
     256              :  * Called when the current group object ID is set
     257              :  *
     258              :  * @param conn          The connection that was used to initialise the media control client
     259              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     260              :  * @param obj_id        The Object ID (UINT48) set (or attempted to set)
     261              :  */
     262            1 : typedef void (*bt_mcc_set_current_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t obj_id);
     263              : 
     264              : /**
     265              :  * @brief Callback function for bt_mcc_read_playing_order()
     266              :  *
     267              :  * Called when the playing order is read or notified
     268              :  *
     269              :  * @param conn          The connection that was used to initialise the media control client
     270              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     271              :  * @param order         The playback order
     272              :  */
     273            1 : typedef void (*bt_mcc_read_playing_order_cb)(struct bt_conn *conn, int err, uint8_t order);
     274              : 
     275              : /**
     276              :  * @brief Callback function for bt_mcc_set_playing_order()
     277              :  *
     278              :  * Called when the playing order is set
     279              :  *
     280              :  * @param conn          The connection that was used to initialise the media control client
     281              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     282              :  * @param order         The Playing Order set (or attempted to set)
     283              :  */
     284            1 : typedef void (*bt_mcc_set_playing_order_cb)(struct bt_conn *conn, int err, uint8_t order);
     285              : 
     286              : /**
     287              :  * @brief Callback function for bt_mcc_read_playing_orders_supported()
     288              :  *
     289              :  * Called when the supported playing orders are read or notified
     290              :  *
     291              :  * @param conn          The connection that was used to initialise the media control client
     292              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     293              :  * @param orders        The playing orders supported (bitmap)
     294              :  */
     295            1 : typedef void (*bt_mcc_read_playing_orders_supported_cb)(struct bt_conn *conn, int err,
     296              :                                                         uint16_t orders);
     297              : 
     298              : /**
     299              :  * @brief Callback function for bt_mcc_read_media_state()
     300              :  *
     301              :  * Called when the media state is read or notified
     302              :  *
     303              :  * @param conn          The connection that was used to initialise the media control client
     304              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     305              :  * @param state         The Media State
     306              :  */
     307            1 : typedef void (*bt_mcc_read_media_state_cb)(struct bt_conn *conn, int err, uint8_t state);
     308              : 
     309              : /**
     310              :  * @brief Callback function for bt_mcc_send_cmd()
     311              :  *
     312              :  * Called when a command is sent, i.e. when the media control point is set
     313              :  *
     314              :  * @param conn          The connection that was used to initialise the media control client
     315              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     316              :  * @param cmd           The command sent
     317              :  */
     318            1 : typedef void (*bt_mcc_send_cmd_cb)(struct bt_conn *conn, int err, const struct mpl_cmd *cmd);
     319              : 
     320              : /**
     321              :  * @brief Callback function for command notifications
     322              :  *
     323              :  * Called when the media control point is notified
     324              :  *
     325              :  * Notifications for commands (i.e. for writes to the media control point) use a
     326              :  * different parameter structure than what is used for sending commands (writing
     327              :  * to the media control point)
     328              :  *
     329              :  * @param conn          The connection that was used to initialise the media control client
     330              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     331              :  * @param ntf           The command notification
     332              :  */
     333            1 : typedef void (*bt_mcc_cmd_ntf_cb)(struct bt_conn *conn, int err, const struct mpl_cmd_ntf *ntf);
     334              : 
     335              : /**
     336              :  * @brief Callback function for bt_mcc_read_opcodes_supported()
     337              :  *
     338              :  * Called when the supported opcodes (commands) are read or notified
     339              :  *
     340              :  * @param conn          The connection that was used to initialise the media control client
     341              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     342              :  * @param opcodes       The supported opcodes
     343              :  */
     344            1 : typedef void (*bt_mcc_read_opcodes_supported_cb)(struct bt_conn *conn, int err,
     345              :                                                  uint32_t opcodes);
     346              : 
     347              : /**
     348              :  * @brief Callback function for bt_mcc_send_search()
     349              :  *
     350              :  * Called when a search is sent, i.e. when the search control point is set
     351              :  *
     352              :  * @param conn          The connection that was used to initialise the media control client
     353              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     354              :  * @param search        The search set (or attempted to set)
     355              :  */
     356            1 : typedef void (*bt_mcc_send_search_cb)(struct bt_conn *conn, int err,
     357              :                                       const struct mpl_search *search);
     358              : 
     359              : /**
     360              :  * @brief Callback function for search notifications
     361              :  *
     362              :  * Called when the search control point is notified
     363              :  *
     364              :  * Notifications for searches (i.e. for writes to the search control point) use a
     365              :  * different parameter structure than what is used for sending searches (writing
     366              :  * to the search control point)
     367              :  *
     368              :  * @param conn          The connection that was used to initialise the media control client
     369              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     370              :  * @param result_code   The search notification
     371              :  */
     372            1 : typedef void (*bt_mcc_search_ntf_cb)(struct bt_conn *conn, int err,
     373              :                                      uint8_t result_code);
     374              : 
     375              : /**
     376              :  * @brief Callback function for bt_mcc_read_search_results_obj_id()
     377              :  *
     378              :  * Called when the search results object ID is read or notified
     379              :  *
     380              :  * Note that the Search Results Object ID value may be zero, in case the
     381              :  * characteristic does not exist on the server.  (This will be the case if
     382              :  * there has not been a successful search.)
     383              :  *
     384              :  * @param conn          The connection that was used to initialise the media control client
     385              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     386              :  * @param id            The Search Results Object ID (UINT48)
     387              :  */
     388            1 : typedef void (*bt_mcc_read_search_results_obj_id_cb)(struct bt_conn *conn,
     389              :                                                      int err, uint64_t id);
     390              : 
     391              : /**
     392              :  * @brief Callback function for bt_mcc_read_content_control_id()
     393              :  *
     394              :  * Called when the content control ID is read
     395              :  *
     396              :  * @param conn          The connection that was used to initialise the media control client
     397              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     398              :  * @param ccid          The Content Control ID
     399              :  */
     400            1 : typedef void (*bt_mcc_read_content_control_id_cb)(struct bt_conn *conn,
     401              :                                                   int err, uint8_t ccid);
     402              : 
     403              : /**** Callback functions for the included Object Transfer service *************/
     404              : 
     405              : /**
     406              :  * @brief Callback function for object selected
     407              :  *
     408              :  * Called when an object is selected
     409              :  *
     410              :  * @param conn          The connection that was used to initialise the media control client
     411              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     412              :  */
     413            1 : typedef void (*bt_mcc_otc_obj_selected_cb)(struct bt_conn *conn, int err);
     414              : 
     415              : /**
     416              :  * @brief Callback function for bt_mcc_otc_read_object_metadata()
     417              :  *
     418              :  * Called when object metadata is read
     419              :  *
     420              :  * @param conn          The connection that was used to initialise the media control client
     421              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     422              :  */
     423            1 : typedef void (*bt_mcc_otc_obj_metadata_cb)(struct bt_conn *conn, int err);
     424              : 
     425              : /**
     426              :  * @brief Callback function for bt_mcc_otc_read_icon_object()
     427              :  *
     428              :  * Called when the icon object is read
     429              :  *
     430              :  * @param conn          The connection that was used to initialise the media control client
     431              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     432              :  * @param buf           Buffer containing the object contents
     433              :  *
     434              :  * If err is EMSGSIZE, the object contents have been truncated.
     435              :  */
     436            1 : typedef void (*bt_mcc_otc_read_icon_object_cb)(struct bt_conn *conn, int err,
     437              :                                                struct net_buf_simple *buf);
     438              : 
     439              : /**
     440              :  * @brief Callback function for bt_mcc_otc_read_track_segments_object()
     441              :  *
     442              :  * Called when the track segments object is read
     443              :  *
     444              :  * @param conn          The connection that was used to initialise the media control client
     445              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     446              :  * @param buf           Buffer containing the object contents
     447              :  *
     448              :  * If err is EMSGSIZE, the object contents have been truncated.
     449              :  */
     450            1 : typedef void (*bt_mcc_otc_read_track_segments_object_cb)(struct bt_conn *conn, int err,
     451              :                                                          struct net_buf_simple *buf);
     452              : 
     453              : /**
     454              :  * @brief Callback function for bt_mcc_otc_read_current_track_object()
     455              :  *
     456              :  * Called when the current track object is read
     457              :  *
     458              :  * @param conn          The connection that was used to initialise the media control client
     459              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     460              :  * @param buf           Buffer containing the object contents
     461              :  *
     462              :  * If err is EMSGSIZE, the object contents have been truncated.
     463              :  */
     464            1 : typedef void (*bt_mcc_otc_read_current_track_object_cb)(struct bt_conn *conn, int err,
     465              :                                                         struct net_buf_simple *buf);
     466              : 
     467              : /**
     468              :  * @brief Callback function for bt_mcc_otc_read_next_track_object()
     469              :  *
     470              :  * Called when the next track object is read
     471              :  *
     472              :  * @param conn          The connection that was used to initialise the media control client
     473              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     474              :  * @param buf           Buffer containing the object contents
     475              :  *
     476              :  * If err is EMSGSIZE, the object contents have been truncated.
     477              :  */
     478            1 : typedef void (*bt_mcc_otc_read_next_track_object_cb)(struct bt_conn *conn, int err,
     479              :                                                      struct net_buf_simple *buf);
     480              : 
     481              : /**
     482              :  * @brief Callback function for bt_mcc_otc_read_parent_group_object()
     483              :  *
     484              :  * Called when the parent group object is read
     485              :  *
     486              :  * @param conn          The connection that was used to initialise the media control client
     487              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     488              :  * @param buf           Buffer containing the object contents
     489              :  *
     490              :  * If err is EMSGSIZE, the object contents have been truncated.
     491              :  */
     492            1 : typedef void (*bt_mcc_otc_read_parent_group_object_cb)(struct bt_conn *conn, int err,
     493              :                                                        struct net_buf_simple *buf);
     494              : 
     495              : /**
     496              :  * @brief Callback function for bt_mcc_otc_read_current_group_object()
     497              :  *
     498              :  * Called when the current group object is read
     499              :  *
     500              :  * @param conn          The connection that was used to initialise the media control client
     501              :  * @param err           Error value. 0 on success, GATT error or errno on fail
     502              :  * @param buf           Buffer containing the object contents
     503              :  *
     504              :  * If err is EMSGSIZE, the object contents have been truncated.
     505              :  */
     506            1 : typedef void (*bt_mcc_otc_read_current_group_object_cb)(struct bt_conn *conn, int err,
     507              :                                                         struct net_buf_simple *buf);
     508              : 
     509              : 
     510              : /**
     511              :  * @brief Media control client callbacks
     512              :  */
     513            1 : struct bt_mcc_cb {
     514              :         /** Callback when discovery has finished */
     515            1 :         bt_mcc_discover_mcs_cb                   discover_mcs;
     516              :         /** Callback when reading the player name */
     517            1 :         bt_mcc_read_player_name_cb               read_player_name;
     518              : #if defined(CONFIG_BT_OTS_CLIENT) || defined(__DOXYGEN__)
     519              :         /** Callback when reading the icon object ID */
     520            1 :         bt_mcc_read_icon_obj_id_cb               read_icon_obj_id;
     521              : #endif /* CONFIG_BT_OTS_CLIENT */
     522              : #if defined(CONFIG_BT_MCC_READ_MEDIA_PLAYER_ICON_URL) || defined(__DOXYGEN__)
     523              :         /** Callback when reading the icon URL */
     524            1 :         bt_mcc_read_icon_url_cb                  read_icon_url;
     525              : #endif /* defined(CONFIG_BT_MCC_READ_MEDIA_PLAYER_ICON_URL) */
     526              :         /** Callback when getting a track changed notification */
     527            1 :         bt_mcc_track_changed_ntf_cb              track_changed_ntf;
     528              : #if defined(CONFIG_BT_MCC_READ_TRACK_TITLE) || defined(__DOXYGEN__)
     529              :         /** Callback when reading the track title */
     530            1 :         bt_mcc_read_track_title_cb               read_track_title;
     531              : #endif /* defined(CONFIG_BT_MCC_READ_TRACK_TITLE) */
     532              : #if defined(CONFIG_BT_MCC_READ_TRACK_DURATION) || defined(__DOXYGEN__)
     533              :         /** Callback when reading the track duration */
     534            1 :         bt_mcc_read_track_duration_cb            read_track_duration;
     535              : #endif /* defined(CONFIG_BT_MCC_READ_TRACK_DURATION) */
     536              : #if defined(CONFIG_BT_MCC_READ_TRACK_POSITION) || defined(__DOXYGEN__)
     537              :         /** Callback when reading the track position */
     538            1 :         bt_mcc_read_track_position_cb            read_track_position;
     539              : #endif /* defined(CONFIG_BT_MCC_READ_TRACK_POSITION) */
     540              : #if defined(CONFIG_BT_MCC_SET_TRACK_POSITION) || defined(__DOXYGEN__)
     541              :         /** Callback when setting the track position */
     542            1 :         bt_mcc_set_track_position_cb             set_track_position;
     543              : #endif /* defined(CONFIG_BT_MCC_SET_TRACK_POSITION) */
     544              : #if defined(CONFIG_BT_MCC_READ_PLAYBACK_SPEED) || defined(__DOXYGEN__)
     545              :         /** Callback when reading the playback speed */
     546            1 :         bt_mcc_read_playback_speed_cb            read_playback_speed;
     547              : #endif /* defined (CONFIG_BT_MCC_READ_PLAYBACK_SPEED) */
     548              : #if defined(CONFIG_BT_MCC_SET_PLAYBACK_SPEED) || defined(__DOXYGEN__)
     549              :         /** Callback when setting the playback speed */
     550            1 :         bt_mcc_set_playback_speed_cb             set_playback_speed;
     551              : #endif /* defined (CONFIG_BT_MCC_SET_PLAYBACK_SPEED) */
     552              : #if defined(CONFIG_BT_MCC_READ_SEEKING_SPEED) || defined(__DOXYGEN__)
     553              :         /** Callback when reading the seeking speed */
     554            1 :         bt_mcc_read_seeking_speed_cb             read_seeking_speed;
     555              : #endif /* defined (CONFIG_BT_MCC_READ_SEEKING_SPEED) */
     556              : #if defined(CONFIG_BT_OTS_CLIENT) || defined(__DOXYGEN__)
     557              :         /** Callback when reading the segments object ID */
     558            1 :         bt_mcc_read_segments_obj_id_cb           read_segments_obj_id;
     559              :         /** Callback when reading the current track object ID */
     560            1 :         bt_mcc_read_current_track_obj_id_cb      read_current_track_obj_id;
     561              :         /** Callback when setting the current track object ID */
     562            1 :         bt_mcc_set_current_track_obj_id_cb       set_current_track_obj_id;
     563              :         /** Callback when reading the next track object ID */
     564            1 :         bt_mcc_read_next_track_obj_id_cb         read_next_track_obj_id;
     565              :         /** Callback when setting the next track object ID */
     566            1 :         bt_mcc_set_next_track_obj_id_cb          set_next_track_obj_id;
     567              :         /** Callback when reading the current group object ID */
     568            1 :         bt_mcc_read_current_group_obj_id_cb      read_current_group_obj_id;
     569              :         /** Callback when setting the current group object ID */
     570            1 :         bt_mcc_set_current_group_obj_id_cb       set_current_group_obj_id;
     571              :         /** Callback when reading the parent group object ID */
     572            1 :         bt_mcc_read_parent_group_obj_id_cb       read_parent_group_obj_id;
     573              : #endif /* CONFIG_BT_OTS_CLIENT */
     574              : #if defined(CONFIG_BT_MCC_READ_PLAYING_ORDER) || defined(__DOXYGEN__)
     575              :         /** Callback when reading the playing order */
     576            1 :         bt_mcc_read_playing_order_cb             read_playing_order;
     577              : #endif /* defined(CONFIG_BT_MCC_READ_PLAYING_ORDER) */
     578              : #if defined(CONFIG_BT_MCC_SET_PLAYING_ORDER) || defined(__DOXYGEN__)
     579              :         /** Callback when setting the playing order */
     580            1 :         bt_mcc_set_playing_order_cb              set_playing_order;
     581              : #endif /* defined(CONFIG_BT_MCC_SET_PLAYING_ORDER) */
     582              : #if defined(CONFIG_BT_MCC_READ_PLAYING_ORDER_SUPPORTED) || defined(__DOXYGEN__)
     583              :         /** Callback when reading the supported playing orders */
     584            1 :         bt_mcc_read_playing_orders_supported_cb  read_playing_orders_supported;
     585              : #endif /* defined(CONFIG_BT_MCC_READ_PLAYING_ORDER_SUPPORTED) */
     586              : #if defined(CONFIG_BT_MCC_READ_MEDIA_STATE) || defined(__DOXYGEN__)
     587              :         /** Callback when reading the media state */
     588            1 :         bt_mcc_read_media_state_cb               read_media_state;
     589              : #endif /* defined(CONFIG_BT_MCC_READ_MEDIA_STATE) */
     590              : #if defined(CONFIG_BT_MCC_SET_MEDIA_CONTROL_POINT) || defined(__DOXYGEN__)
     591              :         /** Callback when sending a command */
     592            1 :         bt_mcc_send_cmd_cb                       send_cmd;
     593              : #endif /* defined(CONFIG_BT_MCC_SET_MEDIA_CONTROL_POINT) */
     594              :         /** Callback command notifications */
     595            1 :         bt_mcc_cmd_ntf_cb                        cmd_ntf;
     596              : #if defined(CONFIG_BT_MCC_READ_MEDIA_CONTROL_POINT_OPCODES_SUPPORTED) || defined(__DOXYGEN__)
     597              :         /** Callback when reading the supported opcodes */
     598            1 :         bt_mcc_read_opcodes_supported_cb         read_opcodes_supported;
     599              : #endif /* defined(CONFIG_BT_MCC_READ_MEDIA_CONTROL_POINT_OPCODES_SUPPORTED) */
     600              : #if defined(CONFIG_BT_OTS_CLIENT) || defined(__DOXYGEN__)
     601              :         /** Callback when sending the a search query */
     602            1 :         bt_mcc_send_search_cb                    send_search;
     603              :         /** Callback when receiving a search notification */
     604            1 :         bt_mcc_search_ntf_cb                     search_ntf;
     605              :         /** Callback when reading the search results object ID */
     606            1 :         bt_mcc_read_search_results_obj_id_cb     read_search_results_obj_id;
     607              : #endif /* CONFIG_BT_OTS_CLIENT */
     608              : #if defined(CONFIG_BT_MCC_READ_CONTENT_CONTROL_ID) || defined(__DOXYGEN__)
     609              :         /** Callback when reading the content control ID */
     610            1 :         bt_mcc_read_content_control_id_cb        read_content_control_id;
     611              : #endif /* defined(CONFIG_BT_MCC_READ_CONTENT_CONTROL_ID) */
     612              : #if defined(CONFIG_BT_OTS_CLIENT) || defined(__DOXYGEN__)
     613              :         /** Callback when selecting an object */
     614            1 :         bt_mcc_otc_obj_selected_cb               otc_obj_selected;
     615              :         /** Callback when receiving the current object metadata */
     616            1 :         bt_mcc_otc_obj_metadata_cb               otc_obj_metadata;
     617              :         /** Callback when reading the current icon object */
     618            1 :         bt_mcc_otc_read_icon_object_cb           otc_icon_object;
     619              :         /** Callback when reading the track segments object */
     620            1 :         bt_mcc_otc_read_track_segments_object_cb otc_track_segments_object;
     621              :         /** Callback when reading the current track object */
     622            1 :         bt_mcc_otc_read_current_track_object_cb  otc_current_track_object;
     623              :         /** Callback when reading the next track object */
     624            1 :         bt_mcc_otc_read_next_track_object_cb     otc_next_track_object;
     625              :         /** Callback when reading the current group object */
     626            1 :         bt_mcc_otc_read_current_group_object_cb  otc_current_group_object;
     627              :         /** Callback when reading the parent group object */
     628            1 :         bt_mcc_otc_read_parent_group_object_cb   otc_parent_group_object;
     629              : #endif /* CONFIG_BT_OTS_CLIENT */
     630              : };
     631              : 
     632              : /**** Functions ***************************************************************/
     633              : 
     634              : /**
     635              :  * @brief Initialize Media Control Client
     636              :  *
     637              :  * @param cb    Callbacks to be used
     638              :  *
     639              :  * @return 0 if success, errno on failure.
     640              :  */
     641            1 : int bt_mcc_init(struct bt_mcc_cb *cb);
     642              : 
     643              : 
     644              : /**
     645              :  * @brief Discover Media Control Service
     646              :  *
     647              :  * Discover Media Control Service (MCS) on the server given by the connection
     648              :  * Optionally subscribe to notifications.
     649              :  *
     650              :  * Shall be called once, after media control client initialization and before
     651              :  * using other media control client functionality.
     652              :  *
     653              :  * @param conn  Connection to the peer device
     654              :  * @param subscribe   Whether to subscribe to notifications
     655              :  *
     656              :  * @return 0 if success, errno on failure.
     657              :  */
     658            1 : int bt_mcc_discover_mcs(struct bt_conn *conn, bool subscribe);
     659              : 
     660              : /**
     661              :  * @brief Read Media Player Name
     662              :  *
     663              :  * @param conn  Connection to the peer device
     664              :  *
     665              :  * @return 0 if success, errno on failure.
     666              :  */
     667            1 : int bt_mcc_read_player_name(struct bt_conn *conn);
     668              : 
     669              : /**
     670              :  * @brief Read Icon Object ID
     671              :  *
     672              :  * @param conn  Connection to the peer device
     673              :  *
     674              :  * @return 0 if success, errno on failure.
     675              :  */
     676            1 : int bt_mcc_read_icon_obj_id(struct bt_conn *conn);
     677              : 
     678              : /**
     679              :  * @brief Read Icon Object URL
     680              :  *
     681              :  * @param conn  Connection to the peer device
     682              :  *
     683              :  * @return 0 if success, errno on failure.
     684              :  */
     685            1 : int bt_mcc_read_icon_url(struct bt_conn *conn);
     686              : 
     687              : /**
     688              :  * @brief Read Track Title
     689              :  *
     690              :  * @param conn  Connection to the peer device
     691              :  *
     692              :  * @return 0 if success, errno on failure.
     693              :  */
     694            1 : int bt_mcc_read_track_title(struct bt_conn *conn);
     695              : 
     696              : /**
     697              :  * @brief Read Track Duration
     698              :  *
     699              :  * @param conn  Connection to the peer device
     700              :  *
     701              :  * @return 0 if success, errno on failure.
     702              :  */
     703            1 : int bt_mcc_read_track_duration(struct bt_conn *conn);
     704              : 
     705              : /**
     706              :  * @brief Read Track Position
     707              :  *
     708              :  * @param conn  Connection to the peer device
     709              :  *
     710              :  * @return 0 if success, errno on failure.
     711              :  */
     712            1 : int bt_mcc_read_track_position(struct bt_conn *conn);
     713              : 
     714              : /**
     715              :  * @brief Set Track position
     716              :  *
     717              :  * @param conn  Connection to the peer device
     718              :  * @param pos   Track position
     719              :  *
     720              :  * @return 0 if success, errno on failure.
     721              :  */
     722            1 : int bt_mcc_set_track_position(struct bt_conn *conn, int32_t pos);
     723              : 
     724              : /**
     725              :  * @brief Read Playback speed
     726              :  *
     727              :  * @param conn  Connection to the peer device
     728              :  *
     729              :  * @return 0 if success, errno on failure.
     730              :  */
     731            1 : int bt_mcc_read_playback_speed(struct bt_conn *conn);
     732              : 
     733              : /**
     734              :  * @brief Set Playback Speed
     735              :  *
     736              :  * @param conn  Connection to the peer device
     737              :  * @param speed Playback speed
     738              :  *
     739              :  * @return 0 if success, errno on failure.
     740              :  */
     741            1 : int bt_mcc_set_playback_speed(struct bt_conn *conn, int8_t speed);
     742              : 
     743              : /**
     744              :  * @brief Read Seeking speed
     745              :  *
     746              :  * @param conn  Connection to the peer device
     747              :  *
     748              :  * @return 0 if success, errno on failure.
     749              :  */
     750            1 : int bt_mcc_read_seeking_speed(struct bt_conn *conn);
     751              : 
     752              : /**
     753              :  * @brief Read Track Segments Object ID
     754              :  *
     755              :  * @param conn  Connection to the peer device
     756              :  *
     757              :  * @return 0 if success, errno on failure.
     758              :  */
     759            1 : int bt_mcc_read_segments_obj_id(struct bt_conn *conn);
     760              : 
     761              : /**
     762              :  * @brief Read Current Track Object ID
     763              :  *
     764              :  * @param conn  Connection to the peer device
     765              :  *
     766              :  * @return 0 if success, errno on failure.
     767              :  */
     768            1 : int bt_mcc_read_current_track_obj_id(struct bt_conn *conn);
     769              : 
     770              : /**
     771              :  * @brief Set Current Track Object ID
     772              :  *
     773              :  * Set the Current Track to the track given by the @p id parameter
     774              :  *
     775              :  * @param conn  Connection to the peer device
     776              :  * @param id    Object Transfer Service ID (UINT48) of the track to set as the current track
     777              :  *
     778              :  * @return 0 if success, errno on failure.
     779              :  */
     780            1 : int bt_mcc_set_current_track_obj_id(struct bt_conn *conn, uint64_t id);
     781              : 
     782              : /**
     783              :  * @brief Read Next Track Object ID
     784              :  *
     785              :  * @param conn  Connection to the peer device
     786              :  *
     787              :  * @return 0 if success, errno on failure.
     788              :  */
     789            1 : int bt_mcc_read_next_track_obj_id(struct bt_conn *conn);
     790              : 
     791              : /**
     792              :  * @brief Set Next Track Object ID
     793              :  *
     794              :  * Set the Next Track to the track given by the @p id parameter
     795              :  *
     796              :  * @param conn  Connection to the peer device
     797              :  * @param id   Object Transfer Service ID (UINT48) of the track to set as the next track
     798              :  *
     799              :  * @return 0 if success, errno on failure.
     800              :  */
     801            1 : int bt_mcc_set_next_track_obj_id(struct bt_conn *conn, uint64_t id);
     802              : 
     803              : /**
     804              :  * @brief Read Current Group Object ID
     805              :  *
     806              :  * @param conn  Connection to the peer device
     807              :  *
     808              :  * @return 0 if success, errno on failure.
     809              :  */
     810            1 : int bt_mcc_read_current_group_obj_id(struct bt_conn *conn);
     811              : 
     812              : /**
     813              :  * @brief Set Current Group Object ID
     814              :  *
     815              :  * Set the Current Group to the group given by the @p id parameter
     816              :  *
     817              :  * @param conn  Connection to the peer device
     818              :  * @param id   Object Transfer Service ID (UINT48) of the group to set as the current group
     819              :  *
     820              :  * @return 0 if success, errno on failure.
     821              :  */
     822            1 : int bt_mcc_set_current_group_obj_id(struct bt_conn *conn, uint64_t id);
     823              : 
     824              : /**
     825              :  * @brief Read Parent Group Object ID
     826              :  *
     827              :  * @param conn  Connection to the peer device
     828              :  *
     829              :  * @return 0 if success, errno on failure.
     830              :  */
     831            1 : int bt_mcc_read_parent_group_obj_id(struct bt_conn *conn);
     832              : 
     833              : /**
     834              :  * @brief Read Playing Order
     835              :  *
     836              :  * @param conn  Connection to the peer device
     837              :  *
     838              :  * @return 0 if success, errno on failure.
     839              :  */
     840            1 : int bt_mcc_read_playing_order(struct bt_conn *conn);
     841              : 
     842              : /**
     843              :  * @brief Set Playing Order
     844              :  *
     845              :  * @param conn  Connection to the peer device
     846              :  * @param order Playing order
     847              :  *
     848              :  * @return 0 if success, errno on failure.
     849              :  */
     850            1 : int bt_mcc_set_playing_order(struct bt_conn *conn, uint8_t order);
     851              : 
     852              : /**
     853              :  * @brief Read Playing Orders Supported
     854              :  *
     855              :  * @param conn  Connection to the peer device
     856              :  *
     857              :  * @return 0 if success, errno on failure.
     858              :  */
     859            1 : int bt_mcc_read_playing_orders_supported(struct bt_conn *conn);
     860              : 
     861              : /**
     862              :  * @brief Read Media State
     863              :  *
     864              :  * @param conn  Connection to the peer device
     865              :  *
     866              :  * @return 0 if success, errno on failure.
     867              :  */
     868            1 : int bt_mcc_read_media_state(struct bt_conn *conn);
     869              : 
     870              : /**
     871              :  * @brief Send a command
     872              :  *
     873              :  * Write a command (e.g. "play", "pause") to the server's media control point.
     874              :  *
     875              :  * @param conn  Connection to the peer device
     876              :  * @param cmd   The command to send
     877              :  *
     878              :  * @return 0 if success, errno on failure.
     879              :  */
     880            1 : int bt_mcc_send_cmd(struct bt_conn *conn, const struct mpl_cmd *cmd);
     881              : 
     882              : /**
     883              :  * @brief Read Opcodes Supported
     884              :  *
     885              :  * @param conn  Connection to the peer device
     886              :  *
     887              :  * @return 0 if success, errno on failure.
     888              :  */
     889            1 : int bt_mcc_read_opcodes_supported(struct bt_conn *conn);
     890              : 
     891              : /**
     892              :  * @brief Send a Search command
     893              :  *
     894              :  * Write a search to the server's search control point.
     895              :  *
     896              :  * @param conn   Connection to the peer device
     897              :  * @param search The search
     898              :  *
     899              :  * @return 0 if success, errno on failure.
     900              :  */
     901            1 : int bt_mcc_send_search(struct bt_conn *conn, const struct mpl_search *search);
     902              : 
     903              : /**
     904              :  * @brief Search Results Group Object ID
     905              :  *
     906              :  * @param conn  Connection to the peer device
     907              :  *
     908              :  * @return 0 if success, errno on failure.
     909              :  */
     910            1 : int bt_mcc_read_search_results_obj_id(struct bt_conn *conn);
     911              : 
     912              : /**
     913              :  * @brief Read Content Control ID
     914              :  *
     915              :  * @param conn  Connection to the peer device
     916              :  *
     917              :  * @return 0 if success, errno on failure.
     918              :  */
     919            1 : int bt_mcc_read_content_control_id(struct bt_conn *conn);
     920              : 
     921              : /**
     922              :  * @brief Read the current object metadata
     923              :  *
     924              :  * @param conn  Connection to the peer device
     925              :  *
     926              :  * @return 0 if success, errno on failure.
     927              :  */
     928            1 : int bt_mcc_otc_read_object_metadata(struct bt_conn *conn);
     929              : 
     930              : /**
     931              :  * @brief Read the Icon Object
     932              :  *
     933              :  * @param conn  Connection to the peer device
     934              :  *
     935              :  * @return 0 if success, errno on failure.
     936              :  */
     937            1 : int bt_mcc_otc_read_icon_object(struct bt_conn *conn);
     938              : 
     939              : /**
     940              :  * @brief Read the Track Segments Object
     941              :  *
     942              :  * @param conn  Connection to the peer device
     943              :  *
     944              :  * @return 0 if success, errno on failure.
     945              :  */
     946            1 : int bt_mcc_otc_read_track_segments_object(struct bt_conn *conn);
     947              : 
     948              : /**
     949              :  * @brief Read the Current Track Object
     950              :  *
     951              :  * @param conn  Connection to the peer device
     952              :  *
     953              :  * @return 0 if success, errno on failure.
     954              :  */
     955            1 : int bt_mcc_otc_read_current_track_object(struct bt_conn *conn);
     956              : 
     957              : /**
     958              :  * @brief Read the Next Track Object
     959              :  *
     960              :  * @param conn  Connection to the peer device
     961              :  *
     962              :  * @return 0 if success, errno on failure.
     963              :  */
     964            1 : int bt_mcc_otc_read_next_track_object(struct bt_conn *conn);
     965              : 
     966              : /**
     967              :  * @brief Read the Current Group Object
     968              :  *
     969              :  * @param conn  Connection to the peer device
     970              :  *
     971              :  * @return 0 if success, errno on failure.
     972              :  */
     973            1 : int bt_mcc_otc_read_current_group_object(struct bt_conn *conn);
     974              : 
     975              : /**
     976              :  * @brief Read the Parent Group Object
     977              :  *
     978              :  * @param conn  Connection to the peer device
     979              :  *
     980              :  * @return 0 if success, errno on failure.
     981              :  */
     982            1 : int bt_mcc_otc_read_parent_group_object(struct bt_conn *conn);
     983              : 
     984              : /**
     985              :  * @brief Look up MCC OTC instance
     986              :  *
     987              :  * @param conn  The connection to the MCC server.
     988              :  *
     989              :  * @return Pointer to a MCC OTC instance if found else NULL.
     990              :  *
     991              :  */
     992            1 : struct bt_ots_client *bt_mcc_otc_inst(struct bt_conn *conn);
     993              : 
     994              : #ifdef __cplusplus
     995              : }
     996              : #endif
     997              : 
     998              : /**
     999              :  * @}
    1000              :  */
    1001              : 
    1002              : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCC__ */
        

Generated by: LCOV version 2.0-1