monitor/intel: Skip packet/error counters if 0
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 9 May 2023 21:07:42 +0000 (14:07 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 10:41:34 +0000 (16:11 +0530)
This skips printing TLVs related to packet/error count if they are 0 and
also update the missing TLVs:

> HCI Event: Vendor (0xff) plen 188
        Vendor Prefix (0x8780)
      Intel Extended Telemetry (0x03)
        Extended event type (0x01): Perform Stats (0x05)
        ACL connection handle (0x4a): 0x0100
        Rx HEC errors (0x4b): 3
        Packets from host (0x4d): 375
        Tx packets (0x4e): 375
        Tx packets 0 retries (0x4f): 354
        Tx packets 1 retries (0x50): 20
        Tx packets 3 retries (0x52): 1
        Tx 3DH5 packets (0x5c): 375
        Rx packets (0x5d): 400
        ACL link throughput (bps) (0x5e): 533419
        ACL max packet latency (us) (0x5f): 36875
        ACL avg packet latency (us) (0x60): 19441
        ACL RX RSSI moving avg (0x61): 65329
        ACL RX SNR Bad Margin Counter (0x62): 1M 59 2M 0 3M 0
        ACL RX RSSI Bad Counter (0x63): 1M 1711 2M 0 3M 0
        ACL TX RSSI Bad Counter (0x64): 1M 1024 2M 0 3M 0

monitor/intel.c

index 4bf4ed9..8f8eff2 100755 (executable)
@@ -1256,11 +1256,9 @@ static void ext_evt_type(const struct intel_tlv *tlv)
                str = "Disconnection Event";
                break;
        case 0x05:
-               str = "Audio Link Quality Report Type";
-               break;
-       case 0x06:
-               str = "Stats for BR/EDR Link Type";
+               str = "Performance Stats";
                break;
+
        default:
                print_text(COLOR_UNKNOWN_EXT_EVENT,
                        "Unknown extended telemetry event type (0x%2.2x)",
@@ -1286,6 +1284,10 @@ static void ext_acl_evt_hec_errors(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Rx HEC errors (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1293,6 +1295,10 @@ static void ext_acl_evt_crc_errors(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Rx CRC errors (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1300,6 +1306,10 @@ static void ext_acl_evt_num_pkt_from_host(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Packets from host (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
@@ -1308,6 +1318,10 @@ static void ext_acl_evt_num_tx_pkt_to_air(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Tx packets (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1316,6 +1330,10 @@ static void ext_acl_evt_num_tx_pkt_retry(const struct intel_tlv *tlv)
        char *subevent_str;
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        switch (tlv->subevent_id) {
        case 0x4f:
                subevent_str = "Tx packets 0 retries";
@@ -1345,6 +1363,10 @@ static void ext_acl_evt_num_tx_pkt_type(const struct intel_tlv *tlv)
        char *packet_type_str;
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        switch (tlv->subevent_id) {
        case 0x54:
                packet_type_str = "DH1";
@@ -1386,6 +1408,10 @@ static void ext_acl_evt_num_rx_pkt_from_air(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Rx packets (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
@@ -1394,7 +1420,11 @@ static void ext_acl_evt_link_throughput(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
-       print_field("ACL link throughput (KBps) (0x%2.2x): %d",
+       /* Skip if 0 */
+       if (!num)
+               return;
+
+       print_field("ACL link throughput (bps) (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
 
@@ -1402,7 +1432,11 @@ static void ext_acl_evt_max_packet_latency(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
-       print_field("ACL max packet latency (ms) (0x%2.2x): %d",
+       /* Skip if 0 */
+       if (!num)
+               return;
+
+       print_field("ACL max packet latency (us) (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
 
@@ -1410,10 +1444,55 @@ static void ext_acl_evt_avg_packet_latency(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
-       print_field("ACL avg packet latency (ms) (0x%2.2x): %d",
+       /* Skip if 0 */
+       if (!num)
+               return;
+
+       print_field("ACL avg packet latency (us) (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
 
+static void ext_acl_evt_rssi_moving_avg(const struct intel_tlv *tlv)
+{
+       uint32_t num = get_le16(tlv->value);
+
+       /* Skip if 0 */
+       if (!num)
+               return;
+
+       print_field("ACL RX RSSI moving avg (0x%2.2x): %d",
+                       tlv->subevent_id, num);
+}
+
+static void ext_acl_evt_bad_cnt(const char *prefix, const struct intel_tlv *tlv)
+{
+       uint32_t c_1m = get_le32(tlv->value);
+       uint32_t c_2m = get_le32(tlv->value + 4);
+       uint32_t c_3m = get_le32(tlv->value + 8);
+
+       /* Skip if all 0 */
+       if (!c_1m && !c_2m && !c_3m)
+               return;
+
+       print_field("%s (0x%2.2x): 1M %d 2M %d 3M %d",
+                       prefix, tlv->subevent_id, c_1m, c_2m, c_3m);
+}
+
+static void ext_acl_evt_snr_bad_cnt(const struct intel_tlv *tlv)
+{
+       ext_acl_evt_bad_cnt("ACL RX SNR Bad Margin Counter", tlv);
+}
+
+static void ext_acl_evt_rx_rssi_bad_cnt(const struct intel_tlv *tlv)
+{
+       ext_acl_evt_bad_cnt("ACL RX RSSI Bad Counter", tlv);
+}
+
+static void ext_acl_evt_tx_rssi_bad_cnt(const struct intel_tlv *tlv)
+{
+       ext_acl_evt_bad_cnt("ACL TX RSSI Bad Counter", tlv);
+}
+
 static void ext_sco_evt_conn_handle(const struct intel_tlv *tlv)
 {
        uint16_t conn_handle = get_le16(tlv->value);
@@ -1426,6 +1505,10 @@ static void ext_sco_evt_num_rx_pkt_from_air(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Packets from host (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1433,6 +1516,10 @@ static void ext_sco_evt_num_tx_pkt_to_air(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Tx packets (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1440,6 +1527,10 @@ static void ext_sco_evt_num_rx_payloads_lost(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Rx payload lost (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1448,6 +1539,10 @@ static void ext_sco_evt_num_tx_payloads_lost(const struct intel_tlv *tlv)
 
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Tx payload lost (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1507,6 +1602,10 @@ static void ext_sco_evt_samples_inserted(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Late samples inserted based on CDC (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
@@ -1515,6 +1614,10 @@ static void ext_sco_evt_samples_dropped(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Samples dropped (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1522,6 +1625,10 @@ static void ext_sco_evt_mute_samples(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("Mute samples sent at initial connection (0x%2.2x): %d",
                        tlv->subevent_id, num);
 }
@@ -1530,6 +1637,10 @@ static void ext_sco_evt_plc_injection_data(const struct intel_tlv *tlv)
 {
        uint32_t num = get_le32(tlv->value);
 
+       /* Skip if 0 */
+       if (!num)
+               return;
+
        print_field("PLC injection data (0x%2.2x): %d", tlv->subevent_id, num);
 }
 
@@ -1564,6 +1675,10 @@ static const struct intel_ext_subevent {
        { 0x5e, 4, ext_acl_evt_link_throughput },
        { 0x5f, 4, ext_acl_evt_max_packet_latency },
        { 0x60, 4, ext_acl_evt_avg_packet_latency },
+       { 0x61, 2, ext_acl_evt_rssi_moving_avg },
+       { 0x62, 12, ext_acl_evt_snr_bad_cnt },
+       { 0x63, 12, ext_acl_evt_rx_rssi_bad_cnt },
+       { 0x64, 12, ext_acl_evt_tx_rssi_bad_cnt },
 
        /* SCO/eSCO audio link quality subevents */
        { 0x6a, 2, ext_sco_evt_conn_handle },