Public fields added:
values contains a list of (name, value) tuples. value is empty, or a number.
+ bits contains a list of (name, bitnum) tuples. items only appear if specified as a bit. bitnum is a number.
'''
def __init__(self, name, elt):
SimpleType.__init__(self, name, 4)
self.values = []
+ self.bits = []
for item in list(elt):
# First check if we're using a default value
if len(list(item)) == 0:
if value.tag == 'value':
self.values.append((item.get('name'), value.text))
elif value.tag == 'bit':
- self.values.append((item.get('name'), '%u' % (1 << int(value.text))))
+ self.values.append((item.get('name'), '%u' % (1 << int(value.text, 0))))
+ self.bits.append((item.get('name'), value.text))
def resolve(self, module):
self.resolved = True
def fixed_size(self):
return True
-class SizedPadType(Type):
+class PadType(Type):
'''
- Derived class which represents a padding field of given size.
+ Derived class which represents a padding field.
'''
- def __init__(self, size):
+ def __init__(self, elt):
Type.__init__(self, tcard8.name)
self.is_pad = True
self.size = 1
- self.nmemb = int(size)
+ self.nmemb = 1 if (elt == None) else int(elt.get('bytes'), 0)
def resolve(self, module):
self.resolved = True
def fixed_size(self):
return True
-class PadType(SizedPadType):
- '''
- Derived class which represents a padding field of given type.
- '''
- def __init__(self, elt):
- self.nmemb = "1" if (elt == None) else elt.get('bytes')
- SizedPadType.__init__(self, self.nmemb)
class ComplexType(Type):
'''
# Resolve all of our field datatypes.
for child in list(self.elt):
- value_mask_pad = None
if child.tag == 'pad':
field_name = 'pad' + str(pads)
fkey = 'CARD8'
fkey = 'CARD32'
type = ListType(child, module.get_type(fkey), self)
visible = True
- value_mask_pad = child.get('value-mask-pad')
else:
# Hit this on Reply
continue
# Recursively resolve the type (could be another structure, list)
type.resolve(module)
- # Add a value-mask-pad if necessary
- if value_mask_pad != None:
- vmp_field_name = 'pad' + str(pads)
- vmp_fkey = 'CARD8'
- vmp_type = SizedPadType(value_mask_pad)
- pads = pads + 1
- vmp_visible = False
- vmp_field_type = module.get_type_name(vmp_fkey)
- vmp_type.make_member_of(module, self, vmp_field_type, vmp_field_name, vmp_visible, True, False)
- vmp_type.resolve(module)
-
self.calc_size() # Figure out how big we are
self.resolved = True