# -*- coding: utf-8 -*-
"""High level wrapper for RegisterBased Instruments.
This file is part of PyVISA.
:copyright: 2014-2022 by PyVISA Authors, see AUTHORS for more details.
:license: MIT, see LICENSE for more details.
"""
from typing import Iterable, List
from .. import constants
from .resource import Resource
[docs]
class RegisterBasedResource(Resource):
"""Base class for resources that use register based communication."""
[docs]
def read_memory(
self,
space: constants.AddressSpace,
offset: int,
width: constants.DataWidth,
extended: bool = False,
) -> int:
"""Read a value from the specified memory space and offset.
Parameters
----------
space : constants.AddressSpace
Specifies the address space from which to read.
offset : int
Offset (in bytes) of the address or register from which to read.
width : Union[Literal[8, 16, 32, 64], constants.DataWidth]
Number of bits to read (8, 16, 32 or 64).
extended : bool, optional
Use 64 bits offset independent of the platform.
Returns
-------
data : int
Data read from memory
Raises
------
ValueError
Raised if an invalid width is specified.
"""
return self.visalib.read_memory(self.session, space, offset, width, extended)[0]
[docs]
def write_memory(
self,
space: constants.AddressSpace,
offset: int,
data: int,
width: constants.DataWidth,
extended: bool = False,
) -> constants.StatusCode:
"""Write a value to the specified memory space and offset.
Parameters
----------
space : constants.AddressSpace
Specifies the address space.
offset : int
Offset (in bytes) of the address or register from which to read.
data : int
Data to write to bus.
width : Union[Literal[8, 16, 32, 64], constants.DataWidth]
Number of bits to read.
extended : bool, optional
Use 64 bits offset independent of the platform, by default False.
Returns
-------
constants.StatusCode
Return value of the library call.
Raises
------
ValueError
Raised if an invalid width is specified.
"""
return self.visalib.write_memory(
self.session, space, offset, data, width, extended
)
[docs]
def move_in(
self,
space: constants.AddressSpace,
offset: int,
length: int,
width: constants.DataWidth,
extended: bool = False,
) -> List[int]:
"""Move a block of data to local memory from the given address space and offset.
Corresponds to viMoveIn* functions of the VISA library.
Parameters
----------
space : constants.AddressSpace
Address space from which to move the data.
offset : int
Offset (in bytes) of the address or register from which to read.
length : int
Number of elements to transfer, where the data width of
the elements to transfer is identical to the source data width.
width : Union[Literal[8, 16, 32, 64], constants.DataWidth]
Number of bits to read per element.
extended : bool, optional
Use 64 bits offset independent of the platform, by default False.
Returns
-------
data : List[int]
Data read from the bus
status_code : constants.StatusCode
Return value of the library call.
Raises
------
ValueError
Raised if an invalid width is specified.
"""
return self.visalib.move_in(
self.session, space, offset, length, width, extended
)[0]
[docs]
def move_out(
self,
space: constants.AddressSpace,
offset: int,
length: int,
data: Iterable[int],
width: constants.DataWidth,
extended: bool = False,
) -> constants.StatusCode:
"""Move a block of data from local memory to the given address space and offset.
Corresponds to viMoveOut* functions of the VISA library.
Parameters
----------
space : constants.AddressSpace
Address space into which move the data.
offset : int
Offset (in bytes) of the address or register from which to read.
length : int
Number of elements to transfer, where the data width of
the elements to transfer is identical to the source data width.
data : Iterable[int]
Data to write to bus.
width : Union[Literal[8, 16, 32, 64], constants.DataWidth]
Number of bits to per element.
extended : bool, optional
Use 64 bits offset independent of the platform, by default False.
Returns
-------
constants.StatusCode
Return value of the library call.
Raises
------
ValueError
Raised if an invalid width is specified.
"""
return self.visalib.move_out(
self.session, space, offset, length, data, width, extended
)