diff options
author | Szymon Janc <szymon.janc@codecoup.pl> | 2019-05-22 11:24:02 +0200 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2019-05-24 11:48:49 +0300 |
commit | 5441a5b91a0863104e071185f0927bd0d18da809 (patch) | |
tree | 2e2a71b0ce062706e32f736e7a838ca87cfeb133 /monitor/packet.c | |
parent | 9285a4e3388224b4dba73d46b310b6dd94dfe4ec (diff) | |
download | bluez-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.c | 46 |
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", |