def _to_pack(self): '''Produces a tuple ready to be packed with pack_val() according to its internal value ''' if not self.get_trans(): # expand uint28 value to uint32 format dec = decompose_uint(1<<7, self.get_val()) if len(dec) < 4: dec.extend( [0]*(4-len(dec)) ) exp = reduce(lambda x,y: (x<<8)+y, reversed(dec)) return [(TYPE_UINT, exp, self.get_bl())] else: return []
def _from_char(self, char): '''Consume the charpy intance and set its internal value according to it ''' if not self.get_trans(): try: exp = char.get_uint(32) except CharpyErr as err: raise(CharpyErr('{0} [_from_char]: {1}'.format(self._name, err))) else: # get uint32 value, zero all 8'th bit of each byte # and pack it to an uint28 value dec = decompose_uint(1<<8, exp) if len(dec) < 4: dec.extend( [0]*(4-len(dec)) ) val = reduce(lambda x,y: ((x&0x7f)<<7)+(y&0x7f), reversed(dec)) try: self.set_val(val) except Exception as err: raise(EltErr('{0} [_from_char]: {1}'\ .format(self._name, err)))