summaryrefslogtreecommitdiff
path: root/monitor/packet.c
diff options
context:
space:
mode:
authorSzymon Janc <szymon.janc@codecoup.pl>2019-05-22 11:24:02 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2019-05-24 11:48:49 +0300
commit5441a5b91a0863104e071185f0927bd0d18da809 (patch)
tree2e2a71b0ce062706e32f736e7a838ca87cfeb133 /monitor/packet.c
parent9285a4e3388224b4dba73d46b310b6dd94dfe4ec (diff)
downloadbluez-5441a5b91a0863104e071185f0927bd0d18da809.tar.gz
monitor: Decode LE Periodic Advertising Report Event
> HCI Event: LE Meta Event (0x3e) plen 18 LE Periodic Advertising Report (0x0f) Sync handle: 0 TX power: -4 dbm (0xfc) RSSI: -55 dBm (0xc9) Unused: (0xff) Data status: Complete Data length: 0x0a b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
Diffstat (limited to 'monitor/packet.c')
-rw-r--r--monitor/packet.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/monitor/packet.c b/monitor/packet.c
index 3235ad004..8b2671edb 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9631,6 +9631,49 @@ static void le_per_adv_sync(const void *data, uint8_t size)
print_field("Advertiser clock accuracy: 0x%2.2x", evt->clock_accuracy);
}
+static void le_per_adv_report_evt(const void *data, uint8_t size)
+{
+ const struct bt_hci_le_per_adv_report *evt = data;
+ const char *color_on;
+ const char *str;
+
+ print_field("Sync handle: %d", evt->handle);
+ print_power_level(evt->tx_power, NULL);
+ if (evt->rssi == 127)
+ print_field("RSSI: not available (0x%2.2x)",
+ (uint8_t) evt->rssi);
+ else if (evt->rssi >= -127 && evt->rssi <= 20)
+ print_field("RSSI: %d dBm (0x%2.2x)",
+ evt->rssi, (uint8_t) evt->rssi);
+ else
+ print_field("RSSI: reserved (0x%2.2x)",
+ (uint8_t) evt->rssi);
+ print_field("Unused: (0x%2.2x)", evt->unused);
+
+ switch (evt->data_status) {
+ case 0x00:
+ str = "Complete";
+ color_on = COLOR_GREEN;
+ break;
+ case 0x01:
+ str = "Incomplete, more data to come";
+ color_on = COLOR_YELLOW;
+ break;
+ case 0x02:
+ str = "Incomplete, data truncated, no more to come";
+ color_on = COLOR_RED;
+ break;
+ default:
+ str = "Reserved";
+ color_on = COLOR_RED;
+ break;
+ }
+
+ print_field("Data status: %s%s%s", color_on, str, COLOR_OFF);
+ print_field("Data length: 0x%2.2x", evt->data_len);
+ packet_hexdump(evt->data, evt->data_len);
+}
+
static void le_adv_set_term_evt(const void *data, uint8_t size)
{
const struct bt_hci_evt_le_adv_set_term *evt = data;
@@ -9746,7 +9789,8 @@ static const struct subevent_data le_meta_event_table[] = {
le_ext_adv_report_evt, 1, false},
{ 0x0e, "LE Periodic Advertising Sync Established",
le_per_adv_sync, 15, true },
- { 0x0f, "LE Periodic Advertising Report" },
+ { 0x0f, "LE Periodic Advertising Report",
+ le_per_adv_report_evt, 7, false},
{ 0x10, "LE Periodic Advertising Sync Lost" },
{ 0x11, "LE Scan Timeout" },
{ 0x12, "LE Advertising Set Terminated",