From c6d476c7df9e575582fd07ca90c8f45fdddf1139 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 6 Apr 2021 17:39:18 +0200 Subject: [PATCH] tools: Print list of controller capabilities Signed-off-by: Anuj Jain Signed-off-by: Ayush Garg --- tools/btmgmt.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/tools/btmgmt.c b/tools/btmgmt.c index 4071a24..e5b2169 100755 --- a/tools/btmgmt.c +++ b/tools/btmgmt.c @@ -1514,6 +1514,41 @@ static void cmd_extinfo(int argc, char **argv) } } +static void print_cap(const uint8_t *cap, uint16_t cap_len) +{ + uint16_t parsed = 0; + + while (parsed < cap_len - 1) { + uint8_t field_len = cap[0]; + + if (field_len == 0) + break; + + parsed += field_len + 1; + + if (parsed > cap_len) + break; + + switch (cap[1]) { + case 0x01: + print("\tFlags: 0x%02x", cap[2]); + break; + case 0x02: + print("\tMax Key Size (BR/EDR): %u", cap[2]); + break; + case 0x03: + print("\tMax Key Size (LE): %u", cap[2]); + break; + default: + print("\tType %u: %u byte%s", cap[1], field_len - 1, + (field_len - 1) == 1 ? "" : "s"); + break; + } + + cap += field_len + 1; + } +} + static void sec_info_rsp(uint8_t status, uint16_t len, const void *param, void *user_data) { @@ -1532,7 +1567,8 @@ static void sec_info_rsp(uint8_t status, uint16_t len, const void *param, } print("Primary controller (hci%u)", index); - print("\tSecurity info length: %u", le16_to_cpu(rp->cap_len)); + print("\tInfo length: %u", le16_to_cpu(rp->cap_len)); + print_cap(rp->cap, le16_to_cpu(rp->cap_len)); done: pending_index--; -- 2.7.4