Exemple #1
0
 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 []
Exemple #2
0
 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)))