-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bluetooth: shell: Add CS to BT shell with set default settings command
Use a new file and command for this where all CS commands can live. Added support for bt_cs_set_default_settings command. Added test case where shell is built with CS to ensure code is built in CI. Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
- Loading branch information
1 parent
4bd0219
commit 0b93c5c
Showing
3 changed files
with
150 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
/** @file | ||
* @brief Bluetooth Channel Sounding (CS) shell | ||
* | ||
*/ | ||
|
||
/* | ||
* Copyright (c) 2024 Nordic Semiconductor ASA | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
#include <stdlib.h> | ||
#include <stdbool.h> | ||
#include <stdint.h> | ||
#include <zephyr/kernel.h> | ||
#include <zephyr/shell/shell.h> | ||
#include <zephyr/sys/byteorder.h> | ||
#include <zephyr/sys/util.h> | ||
|
||
#include <zephyr/bluetooth/hci.h> | ||
#include <zephyr/bluetooth/bluetooth.h> | ||
#include <zephyr/bluetooth/conn.h> | ||
#include <zephyr/bluetooth/iso.h> | ||
#include <zephyr/bluetooth/cs.h> | ||
#include <errno.h> | ||
|
||
#include "bt.h" | ||
|
||
static int check_cs_sync_antenna_selection_input(uint16_t input) | ||
{ | ||
if (input != BT_CS_ANTENNA_SELECTION_OPT_ONE && input != BT_CS_ANTENNA_SELECTION_OPT_TWO && | ||
input != BT_CS_ANTENNA_SELECTION_OPT_THREE && | ||
input != BT_CS_ANTENNA_SELECTION_OPT_FOUR && | ||
input != BT_CS_ANTENNA_SELECTION_OPT_REPETITIVE && | ||
input != BT_CS_ANTENNA_SELECTION_OPT_NO_RECOMMENDATION) { | ||
return -EINVAL; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static int check_max_tx_power_input(int16_t input) | ||
{ | ||
if (input < BT_HCI_OP_LE_CS_MIN_MAX_TX_POWER || input > BT_HCI_OP_LE_CS_MAX_MAX_TX_POWER) { | ||
return -EINVAL; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static int cmd_set_default_settings(const struct shell *sh, size_t argc, char *argv[]) | ||
{ | ||
int err = 0; | ||
struct bt_cs_set_default_settings_param params; | ||
uint16_t antenna_input; | ||
int16_t tx_power_input; | ||
|
||
if (default_conn == NULL) { | ||
shell_error(sh, "Conn handle error, at least one connection is required."); | ||
return -ENOEXEC; | ||
} | ||
|
||
params.enable_initiator_role = shell_strtobool(argv[1], 10, &err); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "Could not parse input 1, Enable initiator role"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
params.enable_reflector_role = shell_strtobool(argv[2], 10, &err); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "Could not parse input 2, Enable reflector role"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
antenna_input = shell_strtoul(argv[3], 16, &err); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "Could not parse input 3, CS_SYNC antenna selection"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
err = check_cs_sync_antenna_selection_input(antenna_input); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "CS_SYNC antenna selection input invalid"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
tx_power_input = shell_strtol(argv[4], 10, &err); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "Could not parse input 4, Max TX power"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
err = check_max_tx_power_input(tx_power_input); | ||
if (err) { | ||
shell_help(sh); | ||
shell_error(sh, "Max TX power input invalid"); | ||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
params.cs_sync_antenna_selection = antenna_input; | ||
params.max_tx_power = tx_power_input; | ||
|
||
err = bt_cs_set_default_settings(default_conn, ¶ms); | ||
if (err) { | ||
shell_error(sh, "bt_cs_set_default_settings returned error %d", err); | ||
return -ENOEXEC; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
SHELL_STATIC_SUBCMD_SET_CREATE( | ||
cs_cmds, | ||
SHELL_CMD_ARG( | ||
set_default_settings, NULL, | ||
"<Enable initiator role: true, false> <Enable reflector role: true, false> " | ||
" <CS_SYNC antenna selection: 0x01 - 0x04, 0xFE, 0xFF> <Max TX power: -127 - 20>", | ||
cmd_set_default_settings, 1, 4), | ||
SHELL_SUBCMD_SET_END); | ||
|
||
static int cmd_cs(const struct shell *sh, size_t argc, char **argv) | ||
{ | ||
if (argc == 1) { | ||
shell_help(sh); | ||
|
||
return SHELL_CMD_HELP_PRINTED; | ||
} | ||
|
||
shell_error(sh, "%s unknown parameter: %s", argv[0], argv[1]); | ||
|
||
return -EINVAL; | ||
} | ||
|
||
SHELL_CMD_ARG_REGISTER(cs, &cs_cmds, "Bluetooth CS shell commands", cmd_cs, 1, 1); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters