Esempio n. 1
0
    def set_value(self, value, addr, size, offset, **kwargs):
        '''Writing a value of any arbitrary size (max. unsigned int 64) and offset to a register

        Parameters
        ----------
        value : int, str
            The register value (int, long, bit string) to be written.
        addr : int
            The register address.
        size : int
            Bit size/length of the value to be written to the register.
        offset : int
            Offset of the value to be written to the register (in number of bits).

        Returns
        -------
        nothing
        '''
        div_offset, mod_offset = divmod(offset, 8)
        div_size, mod_size = divmod(size + mod_offset, 8)
        if mod_size:
            div_size += 1
        if mod_offset == 0 and mod_size == 0:
            reg = BitLogic.from_value(0, size=div_size * 8)
        else:
            ret = self._intf.read(self._base_addr + addr + div_offset, size=div_size)
            reg = BitLogic()
            reg.frombytes(ret.tostring())
        reg[size + mod_offset - 1:mod_offset] = value
        self._intf.write(self._base_addr + addr + div_offset, data=array.array('B', reg.tobytes()))
Esempio n. 2
0
    def set_value(self, value, addr, size, offset, **kwargs):
        '''Writing a value of any arbitrary size (max. unsigned int 64) and offset to a register

        Parameters
        ----------
        value : int, str
            The register value (int, long, bit string) to be written.
        addr : int
            The register address.
        size : int
            Bit size/length of the value to be written to the register.
        offset : int
            Offset of the value to be written to the register (in number of bits).

        Returns
        -------
        nothing
        '''
        div_offset, mod_offset = divmod(offset, 8)
        div_size, mod_size = divmod(size + mod_offset, 8)
        if mod_size:
            div_size += 1
        if mod_offset == 0 and mod_size == 0:
            reg = BitLogic.from_value(0, size=div_size * 8)
        else:
            ret = self._intf.read(self._base_addr + addr + div_offset,
                                  size=div_size)
            reg = BitLogic()
            reg.frombytes(tobytes(ret))
        reg[size + mod_offset - 1:mod_offset] = value
        self._intf.write(self._base_addr + addr + div_offset,
                         data=array.array('B', reg.tobytes()))
Esempio n. 3
0
    def set_value(self, value, addr, size, offset, **kwargs):
        '''Writing a value of any arbitrary size (max. unsigned int 64) and offset to a register

        Parameters
        ----------
        value : int, str
            The register value (int, long, bit string) to be written.
        addr : int
            The register address.
        size : int
            Bit size/length of the value to be written to the register.
        offset : int
            Offset of the value to be written to the register (in number of bits).

        Returns
        -------
        nothing
        '''
        if not size and isinstance(value, (int, long)):
            raise ValueError('Size must be greater than zero')
        if isinstance(value, (int, long)) and value.bit_length() > size:
            raise ValueError('Value is too big for given size')
        elif isinstance(value, basestring) and size and len(value) != size:
            raise ValueError('Bit string does not match to the given size')
        div, mod = divmod(size + offset, 8)
        if mod:
            div += 1
        ret = self._intf.read(self._base_addr + addr, size=div)
        reg = BitLogic()
        reg.frombytes(ret.tostring())
        if isinstance(value, (int, long)):
            reg[size + offset - 1:offset] = BitLogic.from_value(value,
                                                                size=size)
        elif isinstance(value, basestring):
            reg[size + offset - 1:offset] = BitLogic(value)
        else:
            raise ValueError('Type not supported: %s' % type(value))
        self._intf.write(self._base_addr + addr,
                         data=array('B', reg.tobytes()))