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__ */
|