def explain_r(reg, value, length): for i in regmap: if (reg & 0xff00) == regmap[i]: s = None try: s = getattr(fwtypes, "%s%s" % (i, "_regs")) except: return i for m in range(len(s._fields_)): name = s._fields_[m][0] typ = s._fields_[m][1] offset = getattr(s, name).offset size = fwtypes.sizeof(s._fields_[m][1]) if (offset <= (reg & 0xff)) and ((offset + size) > (reg & 0xff)): if length != size: try: for n in range(len(typ._fields_)): tname = typ._fields_[n][0] ttyp = typ._fields_[n][1] toffset = getattr(typ, tname).offset tsize = fwtypes.sizeof(ttyp) if (offset + toffset) == (reg & 0xff) and tsize == length: name = "%s.%s" % (name, tname) typ = ttyp break except: print "WARNING (read %x, %s is %x in length)" % (length, s._fields_[m], size) try: return "%s.%s: %s" % (i, name, fdump(typ, value)) except: return "%s.%s (%d)" % (i, name, length) return "(beyond %s)" % i return "(unknown)"
def fdump(typ, value): ct = None if fwtypes.sizeof(typ) == 2: #nval = 0 #for i in range(16): # nval = (nval << 1) | (value & 1) # value >>= 1 #ct = fwtypes.c_short(nval) ct = fwtypes.c_short(flip(value, 16)) else: #nval = 0 #for i in range(32): # nval = (nval << 1) | (value & 1) # value >>= 1 #ct = fwtypes.c_long(nval) ct = fwtypes.c_long(flip(value, 32)) cp = fwtypes.pointer(ct) c = fwtypes.cast(cp, fwtypes.POINTER(typ)) o = c.contents desc = "" for i in o._fields_: fname = i[0] if fname.startswith("reserved") and getattr(o, fname) == 0: continue blen = 0 try: blen = i[2] except: blen = fwtypes.sizeof(i[1]) * 8 desc += "%s: %x, " % (i[0], flip(getattr(o, i[0]), blen)) desc = desc[:-2] return "{" + desc + "}"
def explain_r(reg, value, length): for i in regmap: if (reg & 0xff00) == regmap[i]: s = None try: s = getattr(fwtypes, "%s%s" % (i, "_regs")) except: return i for m in range(len(s._fields_)): name = s._fields_[m][0] typ = s._fields_[m][1] offset = getattr(s, name).offset size = fwtypes.sizeof(s._fields_[m][1]) if (offset <= (reg & 0xff)) and ((offset + size) > (reg & 0xff)): if length != size: try: for n in range(len(typ._fields_)): tname = typ._fields_[n][0] ttyp = typ._fields_[n][1] toffset = getattr(typ, tname).offset tsize = fwtypes.sizeof(ttyp) if (offset + toffset) == ( reg & 0xff) and tsize == length: name = "%s.%s" % (name, tname) typ = ttyp break except: print "WARNING (read %x, %s is %x in length)" % ( length, s._fields_[m], size) try: return "%s.%s: %s" % (i, name, fdump(typ, value)) except: return "%s.%s (%d)" % (i, name, length) return "(beyond %s)" % i return "(unknown)"