#!/usr/bin/env python3
import struct
from datetime import datetime
from collections import Counter

with open('/tmp/FS/data/misc/bluetooth/logs/btsnooz_hci.log', 'rb') as f:
    f.read(16)
    opcodes = Counter()
    op_examples = {}

    while True:
        pkt_hdr = f.read(24)
        if len(pkt_hdr) < 24:
            break
        orig_len, inc_len, flags, drops, ts = struct.unpack('>IIIIq', pkt_hdr)
        data = f.read(inc_len)
        if len(data) < inc_len:
            break
        pkt_type = flags & 0x0F
        ts_sec = ts / 1000000.0

        if pkt_type == 0 and len(data) >= 3:
            opcode = struct.unpack('<H', data[:2])[0]
            opcodes[opcode] += 1
            if opcode not in op_examples:
                op_examples[opcode] = (ts_sec, data)

print("HCI Command opcodes seen:")
for op, cnt in opcodes.most_common():
    ts, data = op_examples[op]
    ts_str = datetime.fromtimestamp(ts).strftime('%H:%M:%S.%f')[:-3]
    print(f"  0x{op:04x} ({cnt:3d}x) ex: {ts_str} {data.hex()}")
