diff mbox series

[BlueZ] mcp: Implement Next Track and Previous Track commands

Message ID 20240607121522.1255175-1-yauhen.kharuzhy@softeq.com
State New
Headers show
Series [BlueZ] mcp: Implement Next Track and Previous Track commands | expand

Commit Message

Yauhen Kharuzhy June 7, 2024, 12:15 p.m. UTC
Add implementation of Next/Previous Track commands to audio/mcp profile
and shared/mcp.{c,h} code.
---
 profiles/audio/mcp.c | 18 ++++++++++++++++--
 src/shared/mcp.c     | 20 ++++++++++++++++++++
 src/shared/mcp.h     |  2 ++
 3 files changed, 38 insertions(+), 2 deletions(-)

Comments

Luiz Augusto von Dentz June 7, 2024, 2:03 p.m. UTC | #1
Hi Yauhen,

On Fri, Jun 7, 2024 at 8:15 AM Yauhen Kharuzhy
<yauhen.kharuzhy@softeq.com> wrote:
>
> Add implementation of Next/Previous Track commands to audio/mcp profile
> and shared/mcp.{c,h} code.
> ---
>  profiles/audio/mcp.c | 18 ++++++++++++++++--
>  src/shared/mcp.c     | 20 ++++++++++++++++++++
>  src/shared/mcp.h     |  2 ++

Please have the changes to src/shared split from other changes, they
have different licenses and shared may actually be subject to unit
testing.

>  3 files changed, 38 insertions(+), 2 deletions(-)
>
> diff --git a/profiles/audio/mcp.c b/profiles/audio/mcp.c
> index b410b3d2a..8d1b7588e 100644
> --- a/profiles/audio/mcp.c
> +++ b/profiles/audio/mcp.c
> @@ -224,13 +224,27 @@ static int ct_stop(struct media_player *mp, void *user_data)
>         return bt_mcp_stop(mcp);
>  }
>
> +static int ct_next(struct media_player *mp, void *user_data)
> +{
> +       struct bt_mcp *mcp = user_data;
> +
> +       return bt_mcp_next_track(mcp);
> +}
> +
> +static int ct_previous(struct media_player *mp, void *user_data)
> +{
> +       struct bt_mcp *mcp = user_data;
> +
> +       return bt_mcp_previous_track(mcp);
> +}
> +
>  static const struct media_player_callback ct_cbs = {
>         .set_setting    = NULL,
>         .play           = &ct_play,
>         .pause          = &ct_pause,
>         .stop           = &ct_stop,
> -       .next           = NULL,
> -       .previous       = NULL,
> +       .next           = &ct_next,
> +       .previous       = &ct_previous,
>         .fast_forward   = NULL,
>         .rewind         = NULL,
>         .press          = NULL,
> diff --git a/src/shared/mcp.c b/src/shared/mcp.c
> index b3726ebae..71fc2d151 100644
> --- a/src/shared/mcp.c
> +++ b/src/shared/mcp.c
> @@ -628,6 +628,26 @@ unsigned int bt_mcp_stop(struct bt_mcp *mcp)
>         return mcp_send(mcp, BT_MCS_CMD_STOP);
>  }
>
> +unsigned int bt_mcp_next_track(struct bt_mcp *mcp)
> +{
> +       if (!(mcp->session.cp_op_supported & BT_MCS_CMD_NEXT_TRACK_SUPPORTED))
> +               return -ENOTSUP;
> +
> +       DBG(mcp, "mcp %p", mcp);
> +
> +       return mcp_send(mcp, BT_MCS_CMD_NEXT_TRACK);
> +}
> +
> +unsigned int bt_mcp_previous_track(struct bt_mcp *mcp)
> +{
> +       if (!(mcp->session.cp_op_supported & BT_MCS_CMD_PREV_TRACK_SUPPORTED))
> +               return -ENOTSUP;
> +
> +       DBG(mcp, "mcp %p", mcp);
> +
> +       return mcp_send(mcp, BT_MCS_CMD_PREV_TRACK);
> +}
> +
>  static void mcp_mp_set_player_name(struct bt_mcp *mcp, const uint8_t *value,
>                                         uint16_t length)
>  {
> diff --git a/src/shared/mcp.h b/src/shared/mcp.h
> index a2cd6fc45..ee57ed4bf 100644
> --- a/src/shared/mcp.h
> +++ b/src/shared/mcp.h
> @@ -59,3 +59,5 @@ void *bt_mcp_get_user_data(struct bt_mcp *mcp);
>  unsigned int bt_mcp_play(struct bt_mcp *mcp);
>  unsigned int bt_mcp_pause(struct bt_mcp *mcp);
>  unsigned int bt_mcp_stop(struct bt_mcp *mcp);
> +unsigned int bt_mcp_next_track(struct bt_mcp *mcp);
> +unsigned int bt_mcp_previous_track(struct bt_mcp *mcp);
> --
> 2.45.1
>
>
diff mbox series

Patch

diff --git a/profiles/audio/mcp.c b/profiles/audio/mcp.c
index b410b3d2a..8d1b7588e 100644
--- a/profiles/audio/mcp.c
+++ b/profiles/audio/mcp.c
@@ -224,13 +224,27 @@  static int ct_stop(struct media_player *mp, void *user_data)
 	return bt_mcp_stop(mcp);
 }
 
+static int ct_next(struct media_player *mp, void *user_data)
+{
+	struct bt_mcp *mcp = user_data;
+
+	return bt_mcp_next_track(mcp);
+}
+
+static int ct_previous(struct media_player *mp, void *user_data)
+{
+	struct bt_mcp *mcp = user_data;
+
+	return bt_mcp_previous_track(mcp);
+}
+
 static const struct media_player_callback ct_cbs = {
 	.set_setting	= NULL,
 	.play		= &ct_play,
 	.pause		= &ct_pause,
 	.stop		= &ct_stop,
-	.next		= NULL,
-	.previous	= NULL,
+	.next		= &ct_next,
+	.previous	= &ct_previous,
 	.fast_forward	= NULL,
 	.rewind		= NULL,
 	.press		= NULL,
diff --git a/src/shared/mcp.c b/src/shared/mcp.c
index b3726ebae..71fc2d151 100644
--- a/src/shared/mcp.c
+++ b/src/shared/mcp.c
@@ -628,6 +628,26 @@  unsigned int bt_mcp_stop(struct bt_mcp *mcp)
 	return mcp_send(mcp, BT_MCS_CMD_STOP);
 }
 
+unsigned int bt_mcp_next_track(struct bt_mcp *mcp)
+{
+	if (!(mcp->session.cp_op_supported & BT_MCS_CMD_NEXT_TRACK_SUPPORTED))
+		return -ENOTSUP;
+
+	DBG(mcp, "mcp %p", mcp);
+
+	return mcp_send(mcp, BT_MCS_CMD_NEXT_TRACK);
+}
+
+unsigned int bt_mcp_previous_track(struct bt_mcp *mcp)
+{
+	if (!(mcp->session.cp_op_supported & BT_MCS_CMD_PREV_TRACK_SUPPORTED))
+		return -ENOTSUP;
+
+	DBG(mcp, "mcp %p", mcp);
+
+	return mcp_send(mcp, BT_MCS_CMD_PREV_TRACK);
+}
+
 static void mcp_mp_set_player_name(struct bt_mcp *mcp, const uint8_t *value,
 					uint16_t length)
 {
diff --git a/src/shared/mcp.h b/src/shared/mcp.h
index a2cd6fc45..ee57ed4bf 100644
--- a/src/shared/mcp.h
+++ b/src/shared/mcp.h
@@ -59,3 +59,5 @@  void *bt_mcp_get_user_data(struct bt_mcp *mcp);
 unsigned int bt_mcp_play(struct bt_mcp *mcp);
 unsigned int bt_mcp_pause(struct bt_mcp *mcp);
 unsigned int bt_mcp_stop(struct bt_mcp *mcp);
+unsigned int bt_mcp_next_track(struct bt_mcp *mcp);
+unsigned int bt_mcp_previous_track(struct bt_mcp *mcp);