This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit ef6afc456f3acd952f3206830c94424fa1378723
Author: Mariusz Skamra <[email protected]>
AuthorDate: Mon Nov 18 09:29:22 2024 +0100

    btshell: Add 'broadcast-sink-set-sync-params' command
    
    This adds 'broadcast-sink-set-sync-params' commands to be used to set
    the PA Sync parameters to be used.
---
 apps/btshell/src/cmd.c         |  7 +++++
 apps/btshell/src/cmd_leaudio.c | 60 ++++++++++++++++++++++++++++++++++--------
 apps/btshell/src/cmd_leaudio.h |  2 ++
 3 files changed, 58 insertions(+), 11 deletions(-)

diff --git a/apps/btshell/src/cmd.c b/apps/btshell/src/cmd.c
index aad564a1a..87f5d9f1d 100644
--- a/apps/btshell/src/cmd.c
+++ b/apps/btshell/src/cmd.c
@@ -4965,6 +4965,13 @@ static const struct shell_cmd btshell_commands[] = {
         .sc_cmd_func = cmd_leaudio_broadcast_sink_metadata_update,
 #if MYNEWT_VAL(SHELL_CMD_HELP)
         .help = &cmd_leaudio_broadcast_sink_metadata_update_help,
+#endif
+    },
+    {
+        .sc_cmd = "broadcast-sink-set-sync-params",
+        .sc_cmd_func = cmd_leaudio_broadcast_sink_sync_params_set,
+#if MYNEWT_VAL(SHELL_CMD_HELP)
+        .help = &cmd_leaudio_broadcast_sink_sync_params_set_help,
 #endif
     },
 #endif /* BLE_AUDIO_BROADCAST_SINK */
diff --git a/apps/btshell/src/cmd_leaudio.c b/apps/btshell/src/cmd_leaudio.c
index 8cc3e5457..3e3a685e0 100644
--- a/apps/btshell/src/cmd_leaudio.c
+++ b/apps/btshell/src/cmd_leaudio.c
@@ -392,17 +392,14 @@ cmd_leaudio_broadcast_stop(int argc, char **argv)
 #if (MYNEWT_VAL(BLE_AUDIO_BROADCAST_SINK))
 #include "audio/ble_audio_broadcast_sink.h"
 
-#define BROADCAST_SINK_PA_SYNC_TIMEOUT_DEFAULT  0x07D0
+#define BROADCAST_SINK_PA_SYNC_SKIP_DFLT    0x0000
+#define BROADCAST_SINK_PA_SYNC_TIMEOUT_DFLT 0x07D0
 
-static int
-broadcast_sink_pa_sync_params_get(struct ble_gap_periodic_sync_params *params)
-{
-    params->skip = 0;
-    params->sync_timeout = BROADCAST_SINK_PA_SYNC_TIMEOUT_DEFAULT;
-    params->reports_disabled = false;
-
-    return 0;
-}
+static struct ble_gap_periodic_sync_params broadcast_sink_periodic_sync_params 
= {
+    .skip = BROADCAST_SINK_PA_SYNC_SKIP_DFLT,
+    .sync_timeout = BROADCAST_SINK_PA_SYNC_TIMEOUT_DFLT,
+    .reports_disabled = false
+};
 
 static void
 codec_specific_config_printf(const struct ble_audio_codec_id *unused, const 
uint8_t *data,
@@ -479,7 +476,8 @@ broadcast_sink_action_fn(struct 
ble_audio_broadcast_sink_action *action, void *a
     switch (action->type) {
     case BLE_AUDIO_BROADCAST_SINK_ACTION_PA_SYNC:
         console_printf("PA Sync:\n");
-        return broadcast_sink_pa_sync_params_get(action->pa_sync.out_params);
+        *action->pa_sync.out_params = broadcast_sink_periodic_sync_params;
+        break;
     case BLE_AUDIO_BROADCAST_SINK_ACTION_BIG_SYNC:
         console_printf("BIG Sync:\nsource_id=0x%02x iso_interval=0x%04x"
                        " presentation_delay=%" PRIu32 "[us]\n",
@@ -648,6 +646,46 @@ cmd_leaudio_broadcast_sink_metadata_update(int argc, char 
**argv)
     return rc;
 }
 
+#if MYNEWT_VAL(SHELL_CMD_HELP)
+static const struct shell_param 
cmd_leaudio_broadcast_sink_sync_params_set_params[] = {
+    {"skip",         "usage: =[0x0000-0x01F3], default: 0x0000"},
+    {"sync_timeout", "usage: =[0x000A-0x4000], default: 0x07D0"},
+    {NULL, NULL}
+};
+
+const struct shell_cmd_help cmd_leaudio_broadcast_sink_sync_params_set_help = {
+    .summary = "Set Broadcast Sink sync parameters",
+    .usage = NULL,
+    .params = cmd_leaudio_broadcast_sink_sync_params_set_params
+};
+#endif /* SHELL_CMD_HELP */
+
+int
+cmd_leaudio_broadcast_sink_sync_params_set(int argc, char **argv)
+{
+    int rc;
+
+    rc = parse_arg_init(argc - 1, argv + 1);
+    if (rc != 0) {
+        return rc;
+    }
+
+    broadcast_sink_periodic_sync_params.skip = parse_arg_uint16_dflt("skip", 
BROADCAST_SINK_PA_SYNC_SKIP_DFLT, &rc);
+    if (rc != 0) {
+        console_printf("invalid 'skip' parameter\n");
+        return rc;
+    }
+
+    broadcast_sink_periodic_sync_params.sync_timeout = 
parse_arg_time_dflt("sync_timeout", 10000,
+                                                                           
BROADCAST_SINK_PA_SYNC_TIMEOUT_DFLT, &rc);
+    if (rc != 0) {
+        console_printf("invalid 'sync_timeout' parameter\n");
+        return rc;
+    }
+
+    return rc;
+}
+
 static int
 broadcast_sink_audio_event_handler(struct ble_audio_event *event, void *arg)
 {
diff --git a/apps/btshell/src/cmd_leaudio.h b/apps/btshell/src/cmd_leaudio.h
index 477b33a21..1704c6f4d 100644
--- a/apps/btshell/src/cmd_leaudio.h
+++ b/apps/btshell/src/cmd_leaudio.h
@@ -46,10 +46,12 @@ int cmd_leaudio_broadcast_stop(int argc, char **argv);
 extern const struct shell_cmd_help cmd_leaudio_broadcast_sink_start_help;
 extern const struct shell_cmd_help cmd_leaudio_broadcast_sink_stop_help;
 extern const struct shell_cmd_help 
cmd_leaudio_broadcast_sink_metadata_update_help;
+extern const struct shell_cmd_help 
cmd_leaudio_broadcast_sink_sync_params_set_help;
 
 int cmd_leaudio_broadcast_sink_start(int argc, char **argv);
 int cmd_leaudio_broadcast_sink_stop(int argc, char **argv);
 int cmd_leaudio_broadcast_sink_metadata_update(int argc, char **argv);
+int cmd_leaudio_broadcast_sink_sync_params_set(int argc, char **argv);
 
 extern const struct shell_cmd_help 
cmd_leaudio_scan_delegator_receive_state_add_help;
 extern const struct shell_cmd_help 
cmd_leaudio_scan_delegator_receive_state_remove_help;

Reply via email to