From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: Jaganath Kanakkassery <jaganath.k.os@gmail.com>
Cc: "linux-bluetooth@vger.kernel.org"
<linux-bluetooth@vger.kernel.org>,
Jaganath Kanakkassery <jaganathx.kanakkassery@intel.com>
Subject: Re: [PATCH BlueZ v3 04/11] btmgmt: Add PHY configuration get/set commands
Date: Mon, 18 Jun 2018 16:44:27 +0300 [thread overview]
Message-ID: <CABBYNZJKUPnnBcc32PAd2o7mqr3EHiNTWiwMTvotbCqqGPcODA@mail.gmail.com> (raw)
In-Reply-To: <1528978884-3882-5-git-send-email-jaganathx.kanakkassery@intel.com>
Hi Jaganath,
On Thu, Jun 14, 2018 at 3:21 PM, Jaganath Kanakkassery
<jaganath.k.os@gmail.com> wrote:
> ---
> lib/mgmt.h | 33 +++++++++++++++
> tools/btmgmt.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 161 insertions(+)
> mode change 100644 => 100755 tools/btmgmt.c
>
> diff --git a/lib/mgmt.h b/lib/mgmt.h
> index 798a05e..7a25e17 100644
> --- a/lib/mgmt.h
> +++ b/lib/mgmt.h
> @@ -101,6 +101,7 @@ struct mgmt_rp_read_index_list {
> #define MGMT_SETTING_PRIVACY 0x00002000
> #define MGMT_SETTING_CONFIGURATION 0x00004000
> #define MGMT_SETTING_STATIC_ADDRESS 0x00008000
> +#define MGMT_SETTING_PHY_CONFIGURATION 0x00010000
>
> #define MGMT_OP_READ_INFO 0x0004
> struct mgmt_rp_read_info {
> @@ -546,6 +547,30 @@ struct mgmt_cp_set_appearance {
> uint16_t appearance;
> } __packed;
>
> +#define MGMT_OP_GET_PHY_CONFIGURATION 0x0044
> +struct mgmt_rp_get_phy_confguration {
> + uint16_t supported_phys;
> + uint16_t selected_phys;
> +} __packed;
> +
> +#define MGMT_PHY_LE_1M_TX 0x0001
> +#define MGMT_PHY_LE_1M_RX 0x0002
> +#define MGMT_PHY_LE_2M_TX 0x0004
> +#define MGMT_PHY_LE_2M_RX 0x0008
> +#define MGMT_PHY_LE_CODED_TX 0x0010
> +#define MGMT_PHY_LE_CODED_RX 0x0020
> +
> +#define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \
> + MGMT_PHY_LE_CODED_TX)
> +#define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \
> + MGMT_PHY_LE_CODED_RX)
> +
> +#define MGMT_OP_SET_PHY_CONFIGURATION 0x0045
> +struct mgmt_cp_set_phy_confguration {
> + uint16_t default_phys;
> +} __packed;
> +
> +
> #define MGMT_EV_CMD_COMPLETE 0x0001
> struct mgmt_ev_cmd_complete {
> uint16_t opcode;
> @@ -764,6 +789,11 @@ struct mgmt_ev_ext_info_changed {
> uint8_t eir[0];
> } __packed;
>
> +#define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026
> +struct mgmt_ev_phy_configuration_changed {
> + uint16_t selected_phys;
> +} __packed;
> +
> static const char *mgmt_op[] = {
> "<0x0000>",
> "Read Version",
> @@ -833,6 +863,8 @@ static const char *mgmt_op[] = {
> "Start Limited Discovery",
> "Read Extended Controller Information",
> "Set Appearance",
> + "Get PHY Configuration",
> + "Set PHY Configuration",
> };
>
> static const char *mgmt_ev[] = {
> @@ -874,6 +906,7 @@ static const char *mgmt_ev[] = {
> "Advertising Added",
> "Advertising Removed",
> "Extended Controller Information Changed",
> + "PHY Configuration Changed",
> };
>
> static const char *mgmt_status[] = {
> diff --git a/tools/btmgmt.c b/tools/btmgmt.c
> old mode 100644
> new mode 100755
> index ef1a393..5379b11
> --- a/tools/btmgmt.c
> +++ b/tools/btmgmt.c
> @@ -4165,6 +4165,132 @@ static void cmd_appearance(int argc, char **argv)
> }
> }
>
> +static const char *phys_str[] = {
> + "1MTX",
> + "1MRX",
> + "2MTX",
> + "2MRX",
> + "CODEDTX",
> + "CODEDRX",
> +};
> +
> +static const char *phys2str(uint16_t phys)
> +{
> + static char str[256];
> + unsigned i;
> + int off;
> +
> + off = 0;
> + str[0] = '\0';
> +
> + for (i = 0; i < NELEM(phys_str); i++) {
> + if ((phys & (1 << i)) != 0)
> + off += snprintf(str + off, sizeof(str) - off, "%s ",
> + phys_str[i]);
> + }
> +
> + return str;
> +}
> +
> +static void get_phy_rsp(uint8_t status, uint16_t len, const void *param,
> + void *user_data)
> +{
> + const struct mgmt_rp_get_phy_confguration *rp = param;
> + uint16_t supported_flags, selected_phys;
> +
> + if (status != 0) {
> + error("Get PHY Configuration failed with status 0x%02x (%s)",
> + status, mgmt_errstr(status));
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + if (len < sizeof(*rp)) {
> + error("Too small get-phy reply (%u bytes)", len);
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + supported_flags = get_le16(&rp->supported_phys);
> + selected_phys = get_le16(&rp->selected_phys);
> +
> + print("Supported phys: %s", phys2str(supported_flags));
> + print("Selected phys: %s", phys2str(selected_phys));
> +
> + bt_shell_noninteractive_quit(EXIT_SUCCESS);
> +}
> +
> +static void get_phy()
> +{
> + uint16_t index;
> +
> + index = mgmt_index;
> + if (index == MGMT_INDEX_NONE)
> + index = 0;
> +
> + if (mgmt_send(mgmt, MGMT_OP_GET_PHY_CONFIGURATION, index, 0, NULL,
> + get_phy_rsp, NULL, NULL) == 0) {
> + error("Unable to send Get PHY cmd");
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +}
> +
> +static void set_phy_rsp(uint8_t status, uint16_t len, const void *param,
> + void *user_data)
> +{
> + if (status != 0) {
> + error("Could not set PHY Configuration with status 0x%02x (%s)",
> + status, mgmt_errstr(status));
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + print("PHY Configuration successfully set");
> +
> + bt_shell_noninteractive_quit(EXIT_SUCCESS);
> +}
> +
> +static void cmd_phy(int argc, char **argv)
> +{
> + struct mgmt_cp_set_phy_confguration cp;
> + int i;
> + uint16_t phys = 0;
> + uint16_t index;
> +
> + if (argc < 2)
> + return get_phy();
> +
> + for (i = 1; i < argc; i++) {
> + if (strcasecmp(argv[i], "1MTX") == 0)
> + phys |= MGMT_PHY_LE_1M_TX;
> +
> + if (strcasecmp(argv[i], "1MRX") == 0)
> + phys |= MGMT_PHY_LE_1M_RX;
> +
> + if (strcasecmp(argv[i], "2MTX") == 0)
> + phys |= MGMT_PHY_LE_2M_TX;
> +
> + if (strcasecmp(argv[i], "2MRX") == 0)
> + phys |= MGMT_PHY_LE_2M_RX;
> +
> + if (strcasecmp(argv[i], "CODEDTX") == 0)
> + phys |= MGMT_PHY_LE_CODED_TX;
> +
> + if (strcasecmp(argv[i], "CODEDRX") == 0)
> + phys |= MGMT_PHY_LE_CODED_RX;
> + }
> +
> + cp.default_phys = cpu_to_le16(phys);
> +
> + index = mgmt_index;
> + if (index == MGMT_INDEX_NONE)
> + index = 0;
> +
> + if (mgmt_send(mgmt, MGMT_OP_SET_PHY_CONFIGURATION, index, sizeof(cp),
> + &cp, set_phy_rsp, NULL, NULL) == 0) {
> + error("Unable to send %s cmd",
> + mgmt_opstr(MGMT_OP_GET_PHY_CONFIGURATION));
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +}
> +
> static void register_mgmt_callbacks(struct mgmt *mgmt, uint16_t index)
> {
> mgmt_register(mgmt, MGMT_EV_CONTROLLER_ERROR, index, controller_error,
> @@ -4360,6 +4486,8 @@ static const struct bt_shell_menu main_menu = {
> cmd_clr_adv, "Clear advertising instances" },
> { "appearance", "<appearance>",
> cmd_appearance, "Set appearance" },
> + { "phy", "[phys]",
> + cmd_phy, "Get/Set PHY Configuration" },
> {} },
> };
>
> --
> 2.7.4
Applying: btmgmt: Add PHY configuration get/set commands
ERROR:EXECUTE_PERMISSIONS: do not set execute permissions for source files
#75: FILE: tools/btmgmt.c
WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#95: FILE: tools/btmgmt.c:4180:
+ unsigned i;
ERROR:FUNCTION_WITHOUT_ARGS: Bad function definition - void get_phy()
should probably be void get_phy(void)
#136: FILE: tools/btmgmt.c:4221:
+static void get_phy()
total: 2 errors, 1 warnings, 203 lines checked
--
Luiz Augusto von Dentz
next prev parent reply other threads:[~2018-06-18 13:44 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-14 12:21 [PATCH BlueZ v3 00/11] Extended Adv, Scan, Connection and PHY support Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 01/11] doc/mgmt-api: Add support for Set Phy Configuration command Jaganath Kanakkassery
2018-06-21 14:27 ` Marcel Holtmann
2018-06-22 7:25 ` Jaganath K
2018-06-28 8:41 ` Marcel Holtmann
2018-06-14 12:21 ` [PATCH BlueZ v3 02/11] doc/mgmt-api: Add advertising phys support to flags Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 03/11] monitor: Add support PHY management commands and event Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 04/11] btmgmt: Add PHY configuration get/set commands Jaganath Kanakkassery
2018-06-18 13:44 ` Luiz Augusto von Dentz [this message]
2018-06-14 12:21 ` [PATCH BlueZ v3 05/11] monitor: Add support for Secondary PHY flags in Add Advertising Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 06/11] btmgmt: Add support for setting PHY in add-adv Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 07/11] emulator: Add 5.0 feature support Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 08/11] mgmt-tester: Add extended advertising test cases Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 09/11] mgmt-tester: Add PHY Configuration " Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 10/11] mgmt-tester: Add tests for extended scanning and device found Jaganath Kanakkassery
2018-06-14 12:21 ` [PATCH BlueZ v3 11/11] mgmt-tester: Add support ext create connection and enh conn complete Jaganath Kanakkassery
2018-06-18 14:27 ` [PATCH BlueZ v3 00/11] Extended Adv, Scan, Connection and PHY support Luiz Augusto von Dentz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CABBYNZJKUPnnBcc32PAd2o7mqr3EHiNTWiwMTvotbCqqGPcODA@mail.gmail.com \
--to=luiz.dentz@gmail.com \
--cc=jaganath.k.os@gmail.com \
--cc=jaganathx.kanakkassery@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).