Bluetooth: host: periodic adv shell support
Added shell support for periodic advertisement params, data and enable. Signed-off-by: Emil Gydesen <emil_gydesen@bose.com>
This commit is contained in:
parent
8cf01ab590
commit
d5801316d7
1 changed files with 123 additions and 0 deletions
|
@ -1245,6 +1245,122 @@ static int cmd_adv_info(const struct shell *shell, size_t argc, char *argv[])
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BT_PER_ADV)
|
||||
static int cmd_per_adv(const struct shell *shell, size_t argc, char *argv[])
|
||||
{
|
||||
struct bt_le_ext_adv *adv = adv_sets[selected_adv];
|
||||
|
||||
if (!adv) {
|
||||
shell_error(shell, "No extended advertisement set selected");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[1], "off")) {
|
||||
if (bt_le_per_adv_stop(adv) < 0) {
|
||||
shell_error(shell,
|
||||
"Failed to stop periodic advertising");
|
||||
} else {
|
||||
shell_print(shell, "Periodic advertising stopped");
|
||||
}
|
||||
} else if (!strcmp(argv[1], "on")) {
|
||||
if (bt_le_per_adv_start(adv) < 0) {
|
||||
shell_error(shell,
|
||||
"Failed to start periodic advertising");
|
||||
} else {
|
||||
shell_print(shell, "Periodic advertising started");
|
||||
}
|
||||
} else {
|
||||
shell_error(shell, "Invalid argument: %s", argv[1]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_per_adv_param(const struct shell *shell, size_t argc,
|
||||
char *argv[])
|
||||
{
|
||||
struct bt_le_ext_adv *adv = adv_sets[selected_adv];
|
||||
struct bt_le_per_adv_param param;
|
||||
int err;
|
||||
|
||||
if (!adv) {
|
||||
shell_error(shell, "No extended advertisement set selected");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (argc > 1) {
|
||||
param.interval_min = strtol(argv[1], NULL, 16);
|
||||
} else {
|
||||
param.interval_min = BT_GAP_ADV_SLOW_INT_MIN;
|
||||
}
|
||||
|
||||
if (argc > 2) {
|
||||
param.interval_max = strtol(argv[2], NULL, 16);
|
||||
} else {
|
||||
param.interval_max = param.interval_min * 1.2;
|
||||
|
||||
}
|
||||
|
||||
if (param.interval_min > param.interval_max) {
|
||||
shell_error(shell,
|
||||
"Min interval shall be less than max interval");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (argc > 3 && !strcmp(argv[3], "tx-power")) {
|
||||
param.options = BT_LE_ADV_OPT_USE_TX_POWER;
|
||||
} else {
|
||||
param.options = 0;
|
||||
}
|
||||
|
||||
err = bt_le_per_adv_set_param(adv, ¶m);
|
||||
if (err) {
|
||||
shell_error(shell, "Failed to set periodic advertisement "
|
||||
"parameters (%d)", err);
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_per_adv_data(const struct shell *shell, size_t argc,
|
||||
char *argv[])
|
||||
{
|
||||
struct bt_le_ext_adv *adv = adv_sets[selected_adv];
|
||||
static struct bt_data ad;
|
||||
static uint8_t hex_data[256];
|
||||
uint8_t ad_len = 0;
|
||||
int err;
|
||||
|
||||
if (!adv) {
|
||||
shell_error(shell, "No extended advertisement set selected");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ad_len = hex2bin(argv[1], strlen(argv[1]), hex_data, sizeof(hex_data));
|
||||
|
||||
if (!ad_len) {
|
||||
shell_error(shell, "Could not parse adv data");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
ad.data_len = hex_data[0];
|
||||
ad.type = hex_data[1];
|
||||
ad.data = &hex_data[2];
|
||||
|
||||
err = bt_le_per_adv_set_data(adv, &ad, ad_len);
|
||||
if (err) {
|
||||
shell_error(shell,
|
||||
"Failed to set periodic advertising data (%d)",
|
||||
err);
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_BT_PER_ADV */
|
||||
#endif /* CONFIG_BT_EXT_ADV */
|
||||
#endif /* CONFIG_BT_BROADCASTER */
|
||||
|
||||
|
@ -2478,6 +2594,13 @@ SHELL_STATIC_SUBCMD_SET_CREATE(bt_cmds,
|
|||
SHELL_CMD_ARG(adv-select, NULL, "[adv]", cmd_adv_select, 1, 1),
|
||||
SHELL_CMD_ARG(adv-oob, NULL, HELP_NONE, cmd_adv_oob, 1, 0),
|
||||
SHELL_CMD_ARG(adv-info, NULL, HELP_NONE, cmd_adv_info, 1, 0),
|
||||
#if defined(CONFIG_BT_PER_ADV)
|
||||
SHELL_CMD_ARG(per-adv, NULL, "<type: off, on>", cmd_per_adv, 2, 0),
|
||||
SHELL_CMD_ARG(per-adv-param, NULL,
|
||||
"[<interval-min> [<interval-max> [tx_power]]]",
|
||||
cmd_per_adv_param, 1, 3),
|
||||
SHELL_CMD_ARG(per-adv-data, NULL, "<data>", cmd_per_adv_data, 2, 0),
|
||||
#endif
|
||||
#endif
|
||||
#endif /* CONFIG_BT_BROADCASTER */
|
||||
#if defined(CONFIG_BT_CONN)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue