def _update_vdata(self, axis = None): """Update internal data vector for the given axis object""" # TODO: axis trajectory already defined # append an axis trajectory if axis is None: log.trace("updating parameter") # append mandatory parameter data self._vdata.append( self._param_range, int(libvdata.ADDRUNSET), libvdata.PARAMETER) else: log.trace("updating trajectory for axis: %s" % axis.name()) # append mandatory position data self._vdata.append( self._pos_columns[axis], int(axis.address()), libvdata.POSITION) # optional slope data if(axis in self._drv_columns): self._vdata.append( self._drv_columns[axis], int(axis.address()), libvdata.SLOPE) # normal end self._vdata.loginfo()
def loginfo(self): """Print out on log information about the data vector""" # brute dump of bytes # TODO: replace the test by a log.istrace() if log.level() >= log.DBG_DATA: log.trace("data vector contains:") n = self.bin() print ' '.join('0x{0:02x}'.format(x & 0xff) for x in n) # minimum check header_size = struct.calcsize(self.__header_format) if len(self._bytearray) < header_size: return # loop over all slices of data vector idx = 0 cpt = 1 while len(self._bytearray[idx:]) >= header_size: # extract header information ( signature, version, header_sz, full_sz, data_len, data_type, compression, flags, firstval ) = struct.unpack_from( self.__header_format, bytes(self._bytearray[idx:])) # minium check if signature != self.__signature: raise ValueError('corrupted data vector, missing signature') # convert size from DWORD to bytes full_sz *= 4 # log.trace("#%d: data vector type: %s" % (cpt, self.type_to_str(flags))) log.trace("#%d: destination addr: %d" % (cpt, self.addr_to_str(flags))) log.trace("#%d: number of data : %d" % (cpt, data_len)) log.trace("#%d: data vector size: %dbytes" % (cpt, full_sz)) # jump to next slice idx += full_sz cpt += 1