From f45ee9ff351880f673a5ce7f7644477e0a7df826 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 22 Oct 2012 13:01:12 +0300 Subject: [PATCH] btmgmt: Add basic EIR parsing --- Makefile.tools | 2 +- tools/btmgmt.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Makefile.tools b/Makefile.tools index e1f693c7e..ec79cea68 100644 --- a/Makefile.tools +++ b/Makefile.tools @@ -43,7 +43,7 @@ tools_hcieventmask_LDADD = lib/libbluetooth-private.la noinst_PROGRAMS += tools/btmgmt monitor/btmon emulator/btvirt emulator/b1ee -tools_btmgmt_SOURCES = tools/btmgmt.c src/glib-helper.c +tools_btmgmt_SOURCES = tools/btmgmt.c src/glib-helper.c src/eir.c tools_btmgmt_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \ diff --git a/tools/btmgmt.c b/tools/btmgmt.c index f06f0bff0..2084b59f5 100644 --- a/tools/btmgmt.c +++ b/tools/btmgmt.c @@ -43,6 +43,7 @@ #include #include "glib-helper.h" +#include "eir.h" static bool monitor = false; static bool discovery = false; @@ -462,6 +463,7 @@ static int mgmt_device_found(int mgmt_sk, uint16_t index, { uint32_t flags; uint16_t eir_len; + struct eir_data eir; if (len < sizeof(*ev)) { fprintf(stderr, @@ -478,14 +480,24 @@ static int mgmt_device_found(int mgmt_sk, uint16_t index, return -EINVAL; } + memset(&eir, 0, sizeof(eir)); + eir_parse(&eir, ev->eir, eir_len); + if (monitor || discovery) { char addr[18]; ba2str(&ev->addr.bdaddr, addr); printf("hci%u dev_found: %s type %s rssi %d " - "flags 0x%04x eir_len %u\n", index, addr, - typestr(ev->addr.type), ev->rssi, flags, eir_len); + "flags 0x%04x ", index, addr, + typestr(ev->addr.type), ev->rssi, flags); + + if (eir.name) + printf("name %s\n", eir.name); + else + printf("eir_len %u\n", eir_len); } + eir_data_free(&eir); + if (discovery && (flags & MGMT_DEV_FOUND_CONFIRM_NAME)) { struct mgmt_cp_confirm_name cp; -- 2.47.3