From 2af15b1e976fc8479bae40c55dbe172619e7450c Mon Sep 17 00:00:00 2001
From: Peter Barker <pbarker@barker.dropbear.id.au>
Date: Tue, 8 Mar 2022 12:23:27 +1100
Subject: [PATCH] mavmsgstats.py: add capability to parse tlogs

---
 tools/mavmsgstats.py | 48 +++++++++++++++++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 12 deletions(-)

diff --git a/tools/mavmsgstats.py b/tools/mavmsgstats.py
index 34860710..8eb7d6e0 100755
--- a/tools/mavmsgstats.py
+++ b/tools/mavmsgstats.py
@@ -13,6 +13,8 @@ parser.add_argument("logs", metavar="LOG", nargs="+")
 
 args = parser.parse_args()
 
+os.environ['MAVLINK20'] = '1'
+
 from pymavlink import mavutil
 
 categories = {
@@ -32,22 +34,44 @@ def show_stats(logfile):
     '''show stats on a file'''
     print("Processing log %s" % filename)
     mlog = mavutil.mavlink_connection(filename)
+
     sizes = {}
     total_size = 0
-    names = mlog.name_to_id.keys()
     pairs = []
 
-    for name in names:
-        sizes[name] = 0
-
-    for name in names:
-        mid = mlog.name_to_id[name]
-        count = mlog.counts[mid]
-        mlen = mlog.formats[mid].len
-        size = count * mlen
-        total_size += size
-        sizes[name] += size
-        pairs.append((name, count*mlen))
+    if filename.endswith("tlog"):
+        counts = {}
+        names = []
+        while True:
+            m = mlog.recv_match()
+            if m is None:
+                break
+            t = m.get_type()
+            if t not in counts:
+                sizes[t] = m._header.mlen
+                counts[t] = 0
+                names.append(t)
+            counts[t] += 1
+        for (name, size) in sizes.items():
+            size_for_this_message = size * counts[name]
+            pairs.append((name, size_for_this_message))
+            total_size += size_for_this_message
+
+    else:
+
+        names = mlog.name_to_id.keys()
+
+        for name in names:
+            sizes[name] = 0
+
+        for name in names:
+            mid = mlog.name_to_id[name]
+            count = mlog.counts[mid]
+            mlen = mlog.formats[mid].len
+            size = count * mlen
+            total_size += size
+            sizes[name] += size
+            pairs.append((name, count*mlen))
 
     pairs = sorted(pairs, key = lambda p : p[1])
     print("Total size: %u" % total_size)
-- 
GitLab