From 9ee31a41065979c58dfec3c9be5d496558f1c38e Mon Sep 17 00:00:00 2001 From: Joakim Andersson Date: Sun, 2 Feb 2020 23:51:14 +0100 Subject: [PATCH] Bluetooth: shell: Add shell arguments to control scanning phys Add shell arguments to control scanning phys for scanner and initiator. This allows to scan on coded or create connections on coded. Signed-off-by: Joakim Andersson --- subsys/bluetooth/shell/bt.c | 76 +++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/subsys/bluetooth/shell/bt.c b/subsys/bluetooth/shell/bt.c index e5583f1b955..974523c7200 100644 --- a/subsys/bluetooth/shell/bt.c +++ b/subsys/bluetooth/shell/bt.c @@ -617,6 +617,10 @@ static int cmd_scan(const struct shell *shell, size_t argc, char *argv[]) options &= ~BT_LE_SCAN_OPT_FILTER_DUPLICATE; } else if (!strcmp(arg, "wl")) { options |= BT_LE_SCAN_OPT_FILTER_WHITELIST; + } else if (!strcmp(arg, "coded")) { + options |= BT_LE_SCAN_OPT_CODED; + } else if (!strcmp(arg, "no-1m")) { + options |= BT_LE_SCAN_OPT_NO_1M; } else { shell_help(shell); return SHELL_CMD_HELP_PRINTED; @@ -765,6 +769,7 @@ static int cmd_connect_le(const struct shell *shell, size_t argc, char *argv[]) int err; bt_addr_le_t addr; struct bt_conn *conn; + u32_t options = 0; err = bt_addr_le_from_str(argv[1], argv[2], &addr); if (err) { @@ -772,8 +777,30 @@ static int cmd_connect_le(const struct shell *shell, size_t argc, char *argv[]) return err; } - err = bt_conn_le_create(&addr, BT_CONN_LE_CREATE_CONN, - BT_LE_CONN_PARAM_DEFAULT, &conn); +#if defined(CONFIG_BT_EXT_ADV) + for (size_t argn = 3; argn < argc; argn++) { + const char *arg = argv[argn]; + + if (!strcmp(arg, "coded")) { + options |= BT_LE_CONN_OPT_CODED; + } else if (!strcmp(arg, "2m")) { + options |= BT_LE_CONN_OPT_2M; + } else if (!strcmp(arg, "no-1m")) { + options |= BT_LE_CONN_OPT_NO_1M; + } else { + shell_help(shell); + return SHELL_CMD_HELP_PRINTED; + } + } +#endif /* defined(CONFIG_BT_EXT_ADV) */ + + struct bt_conn_le_create_param *create_params = + BT_CONN_LE_CREATE_PARAM(options, + BT_GAP_SCAN_FAST_INTERVAL, + BT_GAP_SCAN_FAST_INTERVAL); + + err = bt_conn_le_create(&addr, create_params, BT_LE_CONN_PARAM_DEFAULT, + &conn); if (err) { shell_error(shell, "Connection failed (%d)", err); return -ENOEXEC; @@ -1681,11 +1708,32 @@ static int cmd_wl_connect(const struct shell *shell, size_t argc, char *argv[]) { int err; const char *action = argv[1]; + u32_t options = 0; + +#if defined(CONFIG_BT_EXT_ADV) + for (size_t argn = 2; argn < argc; argn++) { + const char *arg = argv[argn]; + + if (!strcmp(arg, "coded")) { + options |= BT_LE_CONN_OPT_CODED; + } else if (!strcmp(arg, "2m")) { + options |= BT_LE_CONN_OPT_2M; + } else if (!strcmp(arg, "no-1m")) { + options |= BT_LE_CONN_OPT_NO_1M; + } else { + shell_help(shell); + return SHELL_CMD_HELP_PRINTED; + } + } +#endif /* defined(CONFIG_BT_EXT_ADV) */ + struct bt_conn_le_create_param *create_params = + BT_CONN_LE_CREATE_PARAM(options, + BT_GAP_SCAN_FAST_INTERVAL, + BT_GAP_SCAN_FAST_WINDOW); if (!strcmp(action, "on")) { - err = bt_conn_le_create_auto(BT_CONN_LE_CREATE_CONN_AUTO, + err = bt_conn_le_create_auto(create_params, BT_LE_CONN_PARAM_DEFAULT); - if (err) { shell_error(shell, "Auto connect failed (err %d)", err); return err; @@ -1787,6 +1835,14 @@ static int cmd_auth_oob_tk(const struct shell *shell, size_t argc, char *argv[]) #define HELP_NONE "[none]" #define HELP_ADDR_LE " " +#if defined(CONFIG_BT_EXT_ADV) +#define EXT_ADV_SCAN_OPT " [coded] [no-1m]" +#define EXT_ADV_CONN_OPT " [coded] [2m] [no-1m]" +#else +#define EXT_ADV_SCAN_OPT "" +#define EXT_ADV_CONN_OPT "" +#endif /* defined(CONFIG_BT_EXT_ADV) */ + SHELL_STATIC_SUBCMD_SET_CREATE(bt_cmds, SHELL_CMD_ARG(init, NULL, HELP_NONE, cmd_init, 1, 0), #if defined(CONFIG_BT_HCI) @@ -1800,8 +1856,9 @@ SHELL_STATIC_SUBCMD_SET_CREATE(bt_cmds, SHELL_CMD_ARG(name, NULL, "[name]", cmd_name, 1, 1), #if defined(CONFIG_BT_OBSERVER) SHELL_CMD_ARG(scan, NULL, - " [filter: dups, nodups] [wl]", - cmd_scan, 2, 2), + " [filter: dups, nodups] [wl]" + EXT_ADV_SCAN_OPT, + cmd_scan, 2, 4), #endif /* CONFIG_BT_OBSERVER */ #if defined(CONFIG_BT_BROADCASTER) SHELL_CMD_ARG(advertise, NULL, @@ -1815,7 +1872,8 @@ SHELL_STATIC_SUBCMD_SET_CREATE(bt_cmds, #endif /* CONFIG_BT_BROADCASTER */ #if defined(CONFIG_BT_CONN) #if defined(CONFIG_BT_CENTRAL) - SHELL_CMD_ARG(connect, NULL, HELP_ADDR_LE, cmd_connect_le, 3, 0), + SHELL_CMD_ARG(connect, NULL, HELP_ADDR_LE EXT_ADV_CONN_OPT, + cmd_connect_le, 3, 3), #if !defined(CONFIG_BT_WHITELIST) SHELL_CMD_ARG(auto-conn, NULL, HELP_ADDR_LE, cmd_auto_conn, 3, 0), #endif /* !defined(CONFIG_BT_WHITELIST) */ @@ -1860,8 +1918,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(bt_cmds, SHELL_CMD_ARG(wl-add, NULL, HELP_ADDR_LE, cmd_wl_add, 3, 0), SHELL_CMD_ARG(wl-rem, NULL, HELP_ADDR_LE, cmd_wl_rem, 3, 0), SHELL_CMD_ARG(wl-clear, NULL, HELP_NONE, cmd_wl_clear, 1, 0), + #if defined(CONFIG_BT_CENTRAL) - SHELL_CMD_ARG(wl-connect, NULL, "", cmd_wl_connect, 2, 0), + SHELL_CMD_ARG(wl-connect, NULL, "" EXT_ADV_CONN_OPT, + cmd_wl_connect, 2, 3), #endif /* CONFIG_BT_CENTRAL */ #endif /* defined(CONFIG_BT_WHITELIST) */ #if defined(CONFIG_BT_FIXED_PASSKEY)