#!/usr/bin/env python import re import sys regfile = sys.argv[1] f = open(regfile, "r") regexp = re.compile("#define[\s]+([0-9A-Z_]+)[\s]+0x([0-9a-fA-F]{4})") regs = {} for line in f.readlines(): m = regexp.match(line) if m: name, reg = m.groups() regs[int(reg, 16)] = name parser = """\ #!/usr/bin/env python # This was magically created by gen_parser.py using %s for registers import sys regs = { """ % regfile keys = regs.keys() keys.sort() longestreg = 0 for key in keys: parser += "%s: \"%s\",\n" % (key, regs[key]) if len(regs[key]) > longestreg: longestreg = len(regs[key]) parser += """\ } def itostr(index): try: return regs[index] except KeyError: return "0x%%4x" %% index f = open(sys.argv[1], "r") line = f.readline() while line: data = int(line,16) ptype = data >> 30 if ptype == 0: # cmdpacket0 index = (data & 0x1FFF) << 2 count = ((data >> 16) & 0xFFFF) + 1 print "cmdpacket0, index %%s, count %%d" %% (itostr(index), count) while count: count -= 1 value = int(f.readline(), 16) print "%%%ds <- 0x%%08x" %% (itostr(index), value) if not (data & (1 << 15)): index += 0x4 print "" elif ptype == 2: # cmdpacket2 print "cmdpacket2" line = f.readline() """ % longestreg print parser