zephyr/subsys/bluetooth/mesh/shell/sar.c

136 lines
4.1 KiB
C

/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdlib.h>
#include <zephyr/shell/shell.h>
#include <zephyr/bluetooth/mesh.h>
#include <zephyr/bluetooth/mesh/shell.h>
#include "utils.h"
#include "../sar_cfg_internal.h"
static int cmd_tx_get(const struct shell *sh, size_t argc, char *argv[])
{
struct bt_mesh_sar_tx rsp;
int err;
err = bt_mesh_sar_cfg_cli_transmitter_get(bt_mesh_shell_target_ctx.net_idx,
bt_mesh_shell_target_ctx.dst, &rsp);
if (err) {
shell_error(sh,
"Failed to send SAR Transmitter Get (err %d)", err);
return 0;
}
shell_print(sh, "Transmitter Get: %u %u %u %u %u %u %u",
rsp.seg_int_step, rsp.unicast_retrans_count,
rsp.unicast_retrans_without_prog_count,
rsp.unicast_retrans_int_step, rsp.unicast_retrans_int_inc,
rsp.multicast_retrans_count, rsp.multicast_retrans_int);
return 0;
}
static int cmd_tx_set(const struct shell *sh, size_t argc, char *argv[])
{
struct bt_mesh_sar_tx set, rsp;
int err = 0;
set.seg_int_step = shell_strtoul(argv[1], 0, &err);
set.unicast_retrans_count = shell_strtoul(argv[2], 0, &err);
set.unicast_retrans_without_prog_count = shell_strtoul(argv[3], 0, &err);
set.unicast_retrans_int_step = shell_strtoul(argv[4], 0, &err);
set.unicast_retrans_int_inc = shell_strtoul(argv[5], 0, &err);
set.multicast_retrans_count = shell_strtoul(argv[6], 0, &err);
set.multicast_retrans_int = shell_strtoul(argv[7], 0, &err);
if (err) {
shell_warn(sh, "Unable to parse input string argument");
return err;
}
err = bt_mesh_sar_cfg_cli_transmitter_set(bt_mesh_shell_target_ctx.net_idx,
bt_mesh_shell_target_ctx.dst, &set, &rsp);
if (err) {
shell_error(sh, "Failed to send SAR Transmitter Set (err %d)", err);
return 0;
}
shell_print(sh, "Transmitter Set: %u %u %u %u %u %u %u",
rsp.seg_int_step, rsp.unicast_retrans_count,
rsp.unicast_retrans_without_prog_count,
rsp.unicast_retrans_int_step, rsp.unicast_retrans_int_inc,
rsp.multicast_retrans_count, rsp.multicast_retrans_int);
return 0;
}
static int cmd_rx_get(const struct shell *sh, size_t argc, char *argv[])
{
struct bt_mesh_sar_rx rsp;
int err;
err = bt_mesh_sar_cfg_cli_receiver_get(bt_mesh_shell_target_ctx.net_idx,
bt_mesh_shell_target_ctx.dst, &rsp);
if (err) {
shell_error(sh, "Failed to send SAR Receiver Get (err %d)", err);
return 0;
}
shell_print(sh, "Receiver Get: %u %u %u %u %u", rsp.seg_thresh,
rsp.ack_delay_inc, rsp.ack_retrans_count,
rsp.discard_timeout, rsp.rx_seg_int_step);
return 0;
}
static int cmd_rx_set(const struct shell *sh, size_t argc, char *argv[])
{
struct bt_mesh_sar_rx set, rsp;
int err = 0;
set.seg_thresh = shell_strtoul(argv[1], 0, &err);
set.ack_delay_inc = shell_strtoul(argv[2], 0, &err);
set.ack_retrans_count = shell_strtoul(argv[3], 0, &err);
set.discard_timeout = shell_strtoul(argv[4], 0, &err);
set.rx_seg_int_step = shell_strtoul(argv[5], 0, &err);
if (err) {
shell_warn(sh, "Unable to parse input string argument");
return err;
}
err = bt_mesh_sar_cfg_cli_receiver_set(bt_mesh_shell_target_ctx.net_idx,
bt_mesh_shell_target_ctx.dst, &set, &rsp);
if (err) {
shell_error(sh, "Failed to send SAR Receiver Set (err %d)", err);
return 0;
}
shell_print(sh, "Receiver Set: %u %u %u %u %u", rsp.seg_thresh,
rsp.ack_delay_inc, rsp.ack_retrans_count,
rsp.discard_timeout, rsp.rx_seg_int_step);
return 0;
}
SHELL_STATIC_SUBCMD_SET_CREATE(
sar_cfg_cli_cmds, SHELL_CMD_ARG(tx-get, NULL, NULL, cmd_tx_get, 1, 0),
SHELL_CMD_ARG(tx-set, NULL,
"<SegIntStep> <UniRetransCnt> <UniRetransWithoutProgCnt> "
"<UniRetransIntStep> <UniRetransIntInc> <MultiRetransCnt> "
"<MultiRetransInt>",
cmd_tx_set, 8, 0),
SHELL_CMD_ARG(rx-get, NULL, NULL, cmd_rx_get, 1, 0),
SHELL_CMD_ARG(rx-set, NULL,
"<SegThresh> <AckDelayInc> <DiscardTimeout> "
"<RxSegIntStep> <AckRetransCount>",
cmd_rx_set, 6, 0),
SHELL_SUBCMD_SET_END);
SHELL_SUBCMD_ADD((mesh, models), sar, &sar_cfg_cli_cmds, "Sar Cfg Cli commands",
bt_mesh_shell_mdl_cmds_help, 1, 1);