示例#1
0
    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()
示例#2
0
文件: vdata.py 项目: ESRF-BCU/emotion
    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