From 6cdc8935c28b7e73ecbe9484a0b07b89ba66afce Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Wed, 22 May 2019 11:24:01 +0200 Subject: [PATCH] monitor: Decode LE Periodic Advertising Sync Established Event > HCI Event: LE Meta Event (0x3e) plen 16 LE Periodic Advertising Sync Established (0x0e) Status: Success (0x00) Sync handle: 0 Advertising SID: 0x06 Advertiser address type: Random (0x01) Advertiser address: FF:00:00:00:00:AA (Static) Advertiser PHY: LE 1M (0x01) Periodic advertising invteral: 50.00 msec (0x0028) Advertiser clock accuracy: 0x04 Change-Id: I1932b8818abaa7acb029362beb7bc2c4d46c4d23 Signed-off-by: himanshu --- monitor/bt.h | 12 ++++++++++++ monitor/packet.c | 21 ++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/monitor/bt.h b/monitor/bt.h index d32d3a1..6494c92 100755 --- a/monitor/bt.h +++ b/monitor/bt.h @@ -3091,6 +3091,18 @@ struct bt_hci_le_ext_adv_report { uint8_t data[0]; } __attribute__ ((packed)); +#define BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED 0x0e +struct bt_hci_evt_le_per_sync_established { + uint8_t status; + uint16_t handle; + uint8_t sid; + uint8_t addr_type; + uint8_t addr[6]; + uint8_t phy; + uint16_t interval; + uint8_t clock_accuracy; +} __attribute__ ((packed)); + #define BT_HCI_EVT_LE_ADV_SET_TERM 0x12 struct bt_hci_evt_le_adv_set_term { uint8_t status; diff --git a/monitor/packet.c b/monitor/packet.c index 5b41241..8e411d8 100755 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -9812,6 +9812,24 @@ static void le_ext_adv_report_evt(const void *data, uint8_t size) } } +static void le_per_adv_sync(const void *data, uint8_t size) +{ + const struct bt_hci_evt_le_per_sync_established *evt = data; + + print_status(evt->status); + print_field("Sync handle: %d", evt->handle); + if (evt->sid > 0x0f) + print_field("Advertising SID: Reserved (0x%2.2x)", evt->sid); + else + print_field("Advertising SID: 0x%2.2x", evt->sid); + + print_peer_addr_type("Advertiser address type", evt->addr_type); + print_addr("Advertiser address", evt->addr, evt->addr_type); + print_le_phy("Advertiser PHY", evt->phy); + print_slot_125("Periodic advertising invteral", evt->interval); + print_field("Advertiser clock accuracy: 0x%2.2x", evt->clock_accuracy); +} + static void le_adv_set_term_evt(const void *data, uint8_t size) { const struct bt_hci_evt_le_adv_set_term *evt = data; @@ -9925,7 +9943,8 @@ static const struct subevent_data le_meta_event_table[] = { le_phy_update_complete_evt, 5, true}, { 0x0d, "LE Extended Advertising Report", le_ext_adv_report_evt, 1, false}, - { 0x0e, "LE Periodic Advertising Sync Established" }, + { 0x0e, "LE Periodic Advertising Sync Established", + le_per_adv_sync, 15, true }, { 0x0f, "LE Periodic Advertising Report" }, { 0x10, "LE Periodic Advertising Sync Lost" }, { 0x11, "LE Scan Timeout" }, -- 2.7.4