monitor: Decode LE Periodic Advertising Sync Established Event
authorSzymon Janc <szymon.janc@codecoup.pl>
Wed, 22 May 2019 09:24:01 +0000 (11:24 +0200)
committerhimanshu <h.himanshu@samsung.com>
Tue, 11 Feb 2020 08:57:47 +0000 (14:27 +0530)
> 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 <h.himanshu@samsung.com>
monitor/bt.h
monitor/packet.c

index d32d3a1..6494c92 100755 (executable)
@@ -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;
index 5b41241..8e411d8 100755 (executable)
@@ -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" },