| /** |
| * @file |
| * @brief Internal header for the media player (MPL). |
| * |
| * Copyright (c) 2019 - 2021 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_SUBSYS_BLUETOOTH_AUDIO_MPL_INTERNAL_ |
| #define ZEPHYR_SUBSYS_BLUETOOTH_AUDIO_MPL_INTERNAL_ |
| |
| #include <bluetooth/audio/media_proxy.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| /* Offset into a segment/track before the "previous" command goes to start of */ |
| /* current segment/track instead to previous */ |
| #define PREV_MARGIN 500 /* 500 * 0.01 = 5 seconds */ |
| |
| /* Increase/decrease in seeking sped factor for fast rewind/forward commands |
| * Set this equal to the minimum speed factor, to ensure only valid speed factors |
| * are used when changing to/from zero |
| */ |
| #define MPL_SEEKING_SPEED_FACTOR_STEP BT_MCS_SEEKING_SPEED_FACTOR_MIN |
| |
| |
| /* Track segments */ |
| struct mpl_tseg { |
| uint8_t name_len; |
| char name[CONFIG_BT_MCS_SEGMENT_NAME_MAX]; |
| int32_t pos; |
| struct mpl_tseg *prev; |
| struct mpl_tseg *next; |
| }; |
| |
| /* Tracks */ |
| struct mpl_track { |
| #if defined(CONFIG_BT_OTS) || defined(CONFIG_BT_OTC) |
| uint64_t id; |
| #endif /* CONFIG_BT_OTS || CONFIG_BT_OTC */ |
| char title[CONFIG_BT_MCS_TRACK_TITLE_MAX]; |
| int32_t duration; |
| struct mpl_tseg *segment; |
| #if defined(CONFIG_BT_OTS) || defined(CONFIG_BT_OTC) |
| uint64_t segments_id; |
| #endif /* CONFIG_BT_OTS || CONFIG_BT_OTC */ |
| struct mpl_track *prev; |
| struct mpl_track *next; |
| }; |
| |
| /* Groups */ |
| struct mpl_group { |
| #if defined(CONFIG_BT_OTS) || defined(CONFIG_BT_OTC) |
| uint64_t id; |
| #endif /* CONFIG_BT_OTS || CONFIG_BT_OTC */ |
| char title[CONFIG_BT_MCS_GROUP_TITLE_MAX]; |
| struct mpl_track *track; |
| struct mpl_group *parent; |
| struct mpl_group *prev; |
| struct mpl_group *next; |
| }; |
| |
| /** @brief Media Player */ |
| struct mpl_mediaplayer { |
| char name[CONFIG_BT_MCS_MEDIA_PLAYER_NAME_MAX]; |
| #if defined(CONFIG_BT_OTS) || defined(CONFIG_BT_OTC) |
| uint64_t icon_id; |
| #endif /* CONFIG_BT_OTS || CONFIG_BT_OTC */ |
| char icon_url[CONFIG_BT_MCS_ICON_URL_MAX]; |
| struct mpl_group *group; |
| int32_t track_pos; |
| uint8_t state; |
| int8_t playback_speed_param; |
| int8_t seeking_speed_factor; |
| uint8_t playing_order; |
| uint16_t playing_orders_supported; |
| uint32_t opcodes_supported; |
| #if defined(CONFIG_BT_OTS) || defined(CONFIG_BT_OTC) |
| uint64_t search_results_id; |
| #endif /* CONFIG_BT_OTS || CONFIG_BT_OTC */ |
| uint8_t content_ctrl_id; |
| struct media_proxy_pl_calls calls; |
| |
| bool next_track_set; /* If next track explicitly set */ |
| struct { |
| struct mpl_track *track; /* The track explicitly set as next track */ |
| struct mpl_group *group; /* The group of the set track */ |
| } next; |
| }; |
| |
| |
| /* Special calls for testing */ |
| |
| /* For IOP testing - set current group to be it's own parent */ |
| void mpl_test_unset_parent_group(void); |
| |
| /* Force the media player into a given state */ |
| void mpl_test_media_state_set(uint8_t state); |
| |
| /* Trigger track changed callback */ |
| void mpl_test_track_changed_cb(void); |
| |
| /* Trigger title changed callback */ |
| void mpl_test_title_changed_cb(void); |
| |
| /* Trigger duration changed callback */ |
| void mpl_test_duration_changed_cb(void); |
| |
| /* Trigger position changed callback */ |
| void mpl_test_position_changed_cb(void); |
| |
| /* Trigger playback speed changed callback */ |
| void mpl_test_playback_speed_changed_cb(void); |
| |
| /* Trigger seeking speed changed callback */ |
| void mpl_test_seeking_speed_changed_cb(void); |
| |
| /* Trigger current track id changed callback */ |
| void mpl_test_current_track_id_changed_cb(void); |
| |
| /* Trigger next track id changed callback */ |
| void mpl_test_next_track_id_changed_cb(void); |
| |
| /* Trigger current group id changed callback */ |
| void mpl_test_current_group_id_changed_cb(void); |
| |
| /* Trigger parent group id changed callback */ |
| void mpl_test_parent_group_id_changed_cb(void); |
| |
| /* Trigger playinge order changed callback */ |
| void mpl_test_playing_order_changed_cb(void); |
| |
| /* Trigger media state changed callback */ |
| void mpl_test_media_state_changed_cb(void); |
| |
| /* Trigger operations supported changed callback */ |
| void mpl_test_opcodes_supported_changed_cb(void); |
| |
| /* Trigger search results changed callback */ |
| void mpl_test_search_results_changed_cb(void); |
| |
| /* Output the mediaplayer's state information */ |
| void mpl_debug_dump_state(void); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_SUBSYS_BLUETOOTH_AUDIO_MPL_INTERNAL_*/ |