OSDN Git Service

Fix v2 format decoding in btsnooz.py
authorNeil Mayhew <neil@mayhew.name>
Thu, 10 Dec 2020 03:14:15 +0000 (20:14 -0700)
committerMartin Brabham <optedoblivion@google.com>
Wed, 13 Jan 2021 19:07:33 +0000 (19:07 +0000)
The delta_time_ms field now seems to be 64 bits instead of 32. Without
this change, dumps fail to decode and the script exits with a TypeError
because type_to_hci encounters an unknown packet type.

Bug: 175283029
Test: ./btsnooz.py bugreport-WXYZ.txt
Tag: #refactor
Sponsor: optedoblivion@
Change-Id: Ib893ee63abacf5335a4cbabb1dbdfc1702da77e6

tools/scripts/btsnooz.py

index 5f68f01..95d59ce 100755 (executable)
@@ -61,6 +61,7 @@ def type_to_hci(type):
         return '\x03'
     if type == TYPE_IN_EVT:
         return '\x04'
+    raise RuntimeError("type_to_hci: unknown type (0x{:02x})".format(type))
 
 
 def decode_snooz(snooz):
@@ -120,16 +121,16 @@ def decode_snooz_v2(decompressed, last_timestamp_ms):
     first_timestamp_ms = last_timestamp_ms + 0x00dcddb30f2f8000
     offset = 0
     while offset < len(decompressed):
-        length, packet_length, delta_time_ms, snooz_type = struct.unpack_from('=HHIb', decompressed, offset)
-        offset += 9 + length - 1
+        length, packet_length, delta_time_ms, snooz_type = struct.unpack_from('=HHQb', decompressed, offset)
+        offset += 13 + length - 1
         first_timestamp_ms -= delta_time_ms
 
     # Second pass does the actual writing out to stdout.
     offset = 0
     while offset < len(decompressed):
-        length, packet_length, delta_time_ms, snooz_type = struct.unpack_from('=HHIb', decompressed, offset)
+        length, packet_length, delta_time_ms, snooz_type = struct.unpack_from('=HHQb', decompressed, offset)
         first_timestamp_ms += delta_time_ms
-        offset += 9
+        offset += 13
         sys.stdout.write(struct.pack('>II', packet_length, length))
         sys.stdout.write(struct.pack('>II', type_to_direction(snooz_type), 0))
         sys.stdout.write(struct.pack('>II', (first_timestamp_ms >> 32), (first_timestamp_ms & 0xFFFFFFFF)))