LCOV - code coverage report
Current view: top level - zephyr/bluetooth/audio - mcc.h Hit Total Coverage
Test: new.info Lines: 117 117 100.0 %
Date: 2024-12-21 18:13:37

          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 1.14