/** * @brief Bluetooth Media Control Client (MCC) interface * * Updated to the Media Control Profile specification revision 1.0 * * @defgroup bt_gatt_mcc Media Control Client (MCC) * * @ingroup bluetooth * @{ * * [Experimental] Users should note that the APIs can change * as a part of ongoing development. */ /* * Copyright (c) 2019 - 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCC_ #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCC_ #include #include #include #include #ifdef __cplusplus extern "C" { #endif /**** Callback functions ******************************************************/ /** * @brief Callback function for bt_mcc_discover_mcs() * * Called when a media control server is discovered * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail */ typedef void (*bt_mcc_discover_mcs_cb)(struct bt_conn *conn, int err); /** * @brief Callback function for bt_mcc_read_player_name() * * Called when the player name is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param name Player name */ typedef void (*bt_mcc_read_player_name_cb)(struct bt_conn *conn, int err, const char *name); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Callback function for bt_mcc_read_icon_obj_id() * * Called when the icon object ID is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param icon_id The ID of the Icon Object. This is a UINT48 in a uint64_t */ typedef void (*bt_mcc_read_icon_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Callback function for bt_mcc_read_icon_url() * * Called when the icon URL is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param icon_url The URL of the Icon */ typedef void (*bt_mcc_read_icon_url_cb)(struct bt_conn *conn, int err, const char *icon_url); /** * @brief Callback function for track changed notifications * * Called when a track change is notified. * * The track changed characteristic is a special case. It can not be read or * set, it can only be notified. * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail */ typedef void (*bt_mcc_track_changed_ntf_cb)(struct bt_conn *conn, int err); /** * @brief Callback function for bt_mcc_read_track_title() * * Called when the track title is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param title The title of the track */ typedef void (*bt_mcc_read_track_title_cb)(struct bt_conn *conn, int err, const char *title); /** * @brief Callback function for bt_mcc_read_track_duration() * * Called when the track duration is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param dur The duration of the track */ typedef void (*bt_mcc_read_track_duration_cb)(struct bt_conn *conn, int err, int32_t dur); /** * @brief Callback function for bt_mcc_read_track_position() * * Called when the track position is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param pos The Track Position */ typedef void (*bt_mcc_read_track_position_cb)(struct bt_conn *conn, int err, int32_t pos); /** * @brief Callback function for bt_mcc_set_track_position() * * Called when the track position is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param pos The Track Position set (or attempted to set) */ typedef void (*bt_mcc_set_track_position_cb)(struct bt_conn *conn, int err, int32_t pos); /** * @brief Callback function for bt_mcc_read_playback_speed() * * Called when the playback speed is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param speed The Playback Speed */ typedef void (*bt_mcc_read_playback_speed_cb)(struct bt_conn *conn, int err, int8_t speed); /** * @brief Callback function for bt_mcc_set_playback_speed() * * Called when the playback speed is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param speed The Playback Speed set (or attempted to set) */ typedef void (*bt_mcc_set_playback_speed_cb)(struct bt_conn *conn, int err, int8_t speed); /** * @brief Callback function for bt_mcc_read_seeking_speed() * * Called when the seeking speed is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param speed The Seeking Speed */ typedef void (*bt_mcc_read_seeking_speed_cb)(struct bt_conn *conn, int err, int8_t speed); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Callback function for bt_mcc_read_segments_obj_id() * * Called when the track segments object ID is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Track Segments Object ID (UINT48) */ typedef void (*bt_mcc_read_segments_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_read_current_track_obj_id() * * Called when the current track object ID is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Current Track Object ID (UINT48) */ typedef void (*bt_mcc_read_current_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_set_current_track_obj_id() * * Called when the current track object ID is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Object ID (UINT48) set (or attempted to set) */ typedef void (*bt_mcc_set_current_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_read_next_track_obj_id_obj() * * Called when the next track object ID is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Next Track Object ID (UINT48) */ typedef void (*bt_mcc_read_next_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_set_next_track_obj_id() * * Called when the next track object ID is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Object ID (UINT48) set (or attempted to set) */ typedef void (*bt_mcc_set_next_track_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_read_parent_group_obj_id() * * Called when the parent group object ID is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Parent Group Object ID (UINT48) */ typedef void (*bt_mcc_read_parent_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_read_current_group_obj_id() * * Called when the current group object ID is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Current Group Object ID (UINT48) */ typedef void (*bt_mcc_read_current_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); /** * @brief Callback function for bt_mcc_set_current_group_obj_id() * * Called when the current group object ID is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Object ID (UINT48) set (or attempted to set) */ typedef void (*bt_mcc_set_current_group_obj_id_cb)(struct bt_conn *conn, int err, uint64_t obj_id); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Callback function for bt_mcc_read_playing_order() * * Called when the playing order is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param order The playback order */ typedef void (*bt_mcc_read_playing_order_cb)(struct bt_conn *conn, int err, uint8_t order); /** * @brief Callback function for bt_mcc_set_playing_order() * * Called when the playing order is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param order The Playing Order set (or attempted to set) */ typedef void (*bt_mcc_set_playing_order_cb)(struct bt_conn *conn, int err, uint8_t order); /** * @brief Callback function for bt_mcc_read_playing_orders_supported() * * Called when the supported playing orders are read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param orders The playing orders supported (bitmap) */ typedef void (*bt_mcc_read_playing_orders_supported_cb)(struct bt_conn *conn, int err, uint16_t orders); /** * @brief Callback function for bt_mcc_read_media_state() * * Called when the media state is read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param state The Media State */ typedef void (*bt_mcc_read_media_state_cb)(struct bt_conn *conn, int err, uint8_t state); /** * @brief Callback function for bt_mcc_send_cmd() * * Called when a command is sent, i.e. when the media control point is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param cmd The command sent */ typedef void (*bt_mcc_send_cmd_cb)(struct bt_conn *conn, int err, const struct mpl_cmd *cmd); /** * @brief Callback function for command notifications * * Called when the media control point is notified * * Notifications for commands (i.e. for writes to the media control point) use a * different parameter structure than what is used for sending commands (writing * to the media control point) * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param ntf The command notification */ typedef void (*bt_mcc_cmd_ntf_cb)(struct bt_conn *conn, int err, const struct mpl_cmd_ntf *ntf); /** * @brief Callback function for bt_mcc_read_opcodes_supported() * * Called when the supported opcodes (commands) are read or notified * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param opcodes The supported opcodes */ typedef void (*bt_mcc_read_opcodes_supported_cb)(struct bt_conn *conn, int err, uint32_t opcodes); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Callback function for bt_mcc_send_search() * * Called when a search is sent, i.e. when the search control point is set * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param search The search set (or attempted to set) */ typedef void (*bt_mcc_send_search_cb)(struct bt_conn *conn, int err, const struct mpl_search *search); /** * @brief Callback function for search notifications * * Called when the search control point is notified * * Notifications for searches (i.e. for writes to the search control point) use a * different parameter structure than what is used for sending searches (writing * to the search control point) * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param ntf The search notification */ typedef void (*bt_mcc_search_ntf_cb)(struct bt_conn *conn, int err, uint8_t result_code); /** * @brief Callback function for bt_mcc_read_search_results_obj_id() * * Called when the search results object ID is read or notified * * Note that the Search Results Object ID value may be zero, in case the * characteristic does not exist on the server. (This will be the case if * there has not been a successful search.) * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param id The Search Results Object ID (UINT48) */ typedef void (*bt_mcc_read_search_results_obj_id_cb)(struct bt_conn *conn, int err, uint64_t id); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Callback function for bt_mcc_read_content_control_id() * * Called when the content control ID is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param ccid The Content Control ID */ typedef void (*bt_mcc_read_content_control_id_cb)(struct bt_conn *conn, int err, uint8_t ccid); #ifdef CONFIG_BT_OTS_CLIENT /**** Callback functions for the included Object Transfer service *************/ /** * @brief Callback function for object selected * * Called when an object is selected * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail */ typedef void (*bt_mcc_otc_obj_selected_cb)(struct bt_conn *conn, int err); /** * @brief Callback function for bt_mcc_otc_read_object_meatadata() * * Called when object metadata is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail */ typedef void (*bt_mcc_otc_obj_metadata_cb)(struct bt_conn *conn, int err); /** * @brief Callback function for bt_mcc_otc_read_icon_object() * * Called when the icon object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_icon_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); /** * @brief Callback function for bt_mcc_otc_read_track_segments_object() * * Called when the track segments object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_track_segments_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); /** * @brief Callback function for bt_mcc_otc_read_current_track_object() * * Called when the current track object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_current_track_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); /** * @brief Callback function for bt_mcc_otc_read_next_track_object() * * Called when the next track object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_next_track_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); /** * @brief Callback function for bt_mcc_otc_read_parent_group_object() * * Called when the parent group object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_parent_group_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); /** * @brief Callback function for bt_mcc_otc_read_current_group_object() * * Called when the current group object is read * * @param conn The connection that was used to initialise the media control client * @param err Error value. 0 on success, GATT error or errno on fail * @param buf Buffer containing the object contents * * If err is EMSGSIZE, the object contents have been truncated. */ typedef void (*bt_mcc_otc_read_current_group_object_cb)(struct bt_conn *conn, int err, struct net_buf_simple *buf); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Media control client callbacks */ struct bt_mcc_cb { bt_mcc_discover_mcs_cb discover_mcs; bt_mcc_read_player_name_cb read_player_name; #ifdef CONFIG_BT_OTS_CLIENT bt_mcc_read_icon_obj_id_cb read_icon_obj_id; #endif /* CONFIG_BT_OTS_CLIENT */ bt_mcc_read_icon_url_cb read_icon_url; bt_mcc_track_changed_ntf_cb track_changed_ntf; bt_mcc_read_track_title_cb read_track_title; bt_mcc_read_track_duration_cb read_track_duration; bt_mcc_read_track_position_cb read_track_position; bt_mcc_set_track_position_cb set_track_position; bt_mcc_read_playback_speed_cb read_playback_speed; bt_mcc_set_playback_speed_cb set_playback_speed; bt_mcc_read_seeking_speed_cb read_seeking_speed; #ifdef CONFIG_BT_OTS_CLIENT bt_mcc_read_segments_obj_id_cb read_segments_obj_id; bt_mcc_read_current_track_obj_id_cb read_current_track_obj_id; bt_mcc_set_current_track_obj_id_cb set_current_track_obj_id; bt_mcc_read_next_track_obj_id_cb read_next_track_obj_id; bt_mcc_set_next_track_obj_id_cb set_next_track_obj_id; bt_mcc_read_current_group_obj_id_cb read_current_group_obj_id; bt_mcc_set_current_group_obj_id_cb set_current_group_obj_id; bt_mcc_read_parent_group_obj_id_cb read_parent_group_obj_id; #endif /* CONFIG_BT_OTS_CLIENT */ bt_mcc_read_playing_order_cb read_playing_order; bt_mcc_set_playing_order_cb set_playing_order; bt_mcc_read_playing_orders_supported_cb read_playing_orders_supported; bt_mcc_read_media_state_cb read_media_state; bt_mcc_send_cmd_cb send_cmd; bt_mcc_cmd_ntf_cb cmd_ntf; bt_mcc_read_opcodes_supported_cb read_opcodes_supported; #ifdef CONFIG_BT_OTS_CLIENT bt_mcc_send_search_cb send_search; bt_mcc_search_ntf_cb search_ntf; bt_mcc_read_search_results_obj_id_cb read_search_results_obj_id; #endif /* CONFIG_BT_OTS_CLIENT */ bt_mcc_read_content_control_id_cb read_content_control_id; #ifdef CONFIG_BT_OTS_CLIENT bt_mcc_otc_obj_selected_cb otc_obj_selected; bt_mcc_otc_obj_metadata_cb otc_obj_metadata; bt_mcc_otc_read_icon_object_cb otc_icon_object; bt_mcc_otc_read_track_segments_object_cb otc_track_segments_object; bt_mcc_otc_read_current_track_object_cb otc_current_track_object; bt_mcc_otc_read_next_track_object_cb otc_next_track_object; bt_mcc_otc_read_current_group_object_cb otc_current_group_object; bt_mcc_otc_read_parent_group_object_cb otc_parent_group_object; #endif /* CONFIG_BT_OTS_CLIENT */ }; /**** Functions ***************************************************************/ /** * @brief Initialize Media Control Client * * @param cb Callbacks to be used * * @return 0 if success, errno on failure. */ int bt_mcc_init(struct bt_mcc_cb *cb); /** * @brief Discover Media Control Service * * Discover Media Control Service (MCS) on the server given by the connection * Optionally subscribe to notifications. * * Shall be called once, after media control client initialization and before * using other media control client functionality. * * @param conn Connection to the peer device * @param subscribe Whether to subscribe to notifications * * @return 0 if success, errno on failure. */ int bt_mcc_discover_mcs(struct bt_conn *conn, bool subscribe); /** * @brief Read Media Player Name * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_player_name(struct bt_conn *conn); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Read Icon Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_icon_obj_id(struct bt_conn *conn); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Read Icon Object URL * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_icon_url(struct bt_conn *conn); /** * @brief Read Track Title * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_track_title(struct bt_conn *conn); /** * @brief Read Track Duration * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_track_duration(struct bt_conn *conn); /** * @brief Read Track Position * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_track_position(struct bt_conn *conn); /** * @brief Set Track position * * @param conn Connection to the peer device * @param pos Track position * * @return 0 if success, errno on failure. */ int bt_mcc_set_track_position(struct bt_conn *conn, int32_t pos); /** * @brief Read Playback speed * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_playback_speed(struct bt_conn *conn); /** * @brief Set Playback Speed * * @param conn Connection to the peer device * @param speed Playback speed * * @return 0 if success, errno on failure. */ int bt_mcc_set_playback_speed(struct bt_conn *conn, int8_t speed); /** * @brief Read Seeking speed * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_seeking_speed(struct bt_conn *conn); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Read Track Segments Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_segments_obj_id(struct bt_conn *conn); /** * @brief Read Current Track Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_current_track_obj_id(struct bt_conn *conn); /** * @brief Set Current Track Object ID * * Set the Current Track to the the track given by the @p id parameter * * @param conn Connection to the peer device * @param id Object Transfer Service ID (UINT48) of the track to set as the current track * * @return 0 if success, errno on failure. */ int bt_mcc_set_current_track_obj_id(struct bt_conn *conn, uint64_t id); /** * @brief Read Next Track Object ID * * @param conn Connection to the peer device * @param id Object Transfer Service ID (UINT48) of the track to set as the current track * * @return 0 if success, errno on failure. */ int bt_mcc_read_next_track_obj_id(struct bt_conn *conn); /** * @brief Set Next Track Object ID * * Set the Next Track to the the track given by the @p id parameter * * @param conn Connection to the peer device * @param id Object Transfer Service ID (UINT48) of the track to set as the next track * * @return 0 if success, errno on failure. */ int bt_mcc_set_next_track_obj_id(struct bt_conn *conn, uint64_t id); /** * @brief Read Current Group Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_current_group_obj_id(struct bt_conn *conn); /** * @brief Set Current Group Object ID * * Set the Current Group to the the group given by the @p id parameter * * @param conn Connection to the peer device * @param id Object Transfer Service ID (UINT48) of the group to set as the current group * * @return 0 if success, errno on failure. */ int bt_mcc_set_current_group_obj_id(struct bt_conn *conn, uint64_t id); /** * @brief Read Parent Group Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_parent_group_obj_id(struct bt_conn *conn); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Read Playing Order * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_playing_order(struct bt_conn *conn); /** * @brief Set Playing Order * * @param conn Connection to the peer device * @param order Playing order * * @return 0 if success, errno on failure. */ int bt_mcc_set_playing_order(struct bt_conn *conn, uint8_t order); /** * @brief Read Playing Orders Supported * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_playing_orders_supported(struct bt_conn *conn); /** * @brief Read Media State * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_media_state(struct bt_conn *conn); /** * @brief Send a command * * Write a command (e.g. "play", "pause") to the server's media control point. * * @param conn Connection to the peer device * @param cmd The command to send * * @return 0 if success, errno on failure. */ int bt_mcc_send_cmd(struct bt_conn *conn, const struct mpl_cmd *cmd); /** * @brief Read Opcodes Supported * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_opcodes_supported(struct bt_conn *conn); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Send a Search command * * Write a search to the server's search control point. * * @param conn Connection to the peer device * @param search The search * * @return 0 if success, errno on failure. */ int bt_mcc_send_search(struct bt_conn *conn, const struct mpl_search *search); /** * @brief Search Results Group Object ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_search_results_obj_id(struct bt_conn *conn); #endif /* CONFIG_BT_OTS_CLIENT */ /** * @brief Read Content Control ID * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_read_content_control_id(struct bt_conn *conn); #ifdef CONFIG_BT_OTS_CLIENT /** * @brief Read the current object metadata * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_object_metadata(struct bt_conn *conn); /** * @brief Read the Icon Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_icon_object(struct bt_conn *conn); /** * @brief Read the Track Segments Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_track_segments_object(struct bt_conn *conn); /** * @brief Read the Current Track Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_current_track_object(struct bt_conn *conn); /** * @brief Read the Next Track Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_next_track_object(struct bt_conn *conn); /** * @brief Read the Current Group Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_current_group_object(struct bt_conn *conn); /** * @brief Read the Parent Group Object * * @param conn Connection to the peer device * * @return 0 if success, errno on failure. */ int bt_mcc_otc_read_parent_group_object(struct bt_conn *conn); #if defined(CONFIG_BT_MCC_SHELL) struct bt_ots_client *bt_mcc_otc_inst(struct bt_conn *conn); #endif /* defined(CONFIG_BT_MCC_SHELL) */ #endif /* CONFIG_BT_OTS_CLIENT */ #ifdef __cplusplus } #endif /** * @} */ #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_MCC__ */