#!/usr/bin/env python3 import binascii import struct import sys from collections import namedtuple fh_out0 = open('/tmp/out0.xlaw', 'wb') fh_out1 = open('/tmp/out1.xlaw', 'wb') class Header(namedtuple('Header', 'magic ts_sec ts_usec len ep')): sd = struct.Struct('=LQQhB') size = sd.size @classmethod def unpack(kls, data): return kls(*kls.sd.unpack(data)) def process_frame(ep, frame): #print("%02x %s" % (ep, binascii.b2a_hex(frame).decode('utf-8'))) if False: if ep == 0x81: ts = 1 fh_out0.write(frame[ts:ts+1]) elif ep == 0x82: ts = 1 fh_out1.write(frame[ts:ts+1]) with open(sys.argv[1], 'rb') as fh_in: while True: hdr_data = fh_in.read(Header.size) if len(hdr_data) != Header.size: break hdr = Header.unpack(hdr_data) if hdr.magic != 0xe115600d: print("Bad header %r" % (hdr,)) break if hdr.len < 0: print("Error %r" % (hdr,)) continue if hdr.len > 0: data = fh_in.read(hdr.len) print(hdr.ep, binascii.b2a_hex(data[0:4]).decode('utf-8'), hdr.len) nf = (len(data) - 4) // 32 for i in range(nf): process_frame(hdr.ep, data[4+32*i:4+32*(i+1)]) #print(hdr)