blob: eed0b5beb7a4b9d26281ccf510227ceb37323a33 [file] [log] [blame]
/**
* @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_*/