# -*- coding: utf-8 -*-
"""Descriptor to access VISA attributes.
Not all descriptors are used but they provide a reference regarding the
possible values for each attributes.
This file is part of PyVISA.
:copyright: 2014-2020 by PyVISA Authors, see AUTHORS for more details.
:license: MIT, see LICENSE for more details.
"""
import enum
import sys
from collections import defaultdict
from typing import (
TYPE_CHECKING,
Any,
Dict,
Generic,
List,
Optional,
Set,
SupportsBytes,
SupportsInt,
Tuple,
Type,
TypeVar,
Union,
overload,
)
from typing_extensions import ClassVar, DefaultDict
from . import constants, util
if TYPE_CHECKING:
from .events import Event, IOCompletionEvent # noqa # pragma: no cover
from .resources import Resource # noqa # pragma: no cover
#: Not available value.
NotAvailable = object()
#: Attribute for all session types.
class AllSessionTypes: # We use a class to simplify typing
"""Class used as a placeholder to indicate an attribute exist on all resources."""
pass
#: Map resource to attribute
AttributesPerResource: DefaultDict[
Union[
Tuple[constants.InterfaceType, str], Type[AllSessionTypes], constants.EventType
],
Set[Type["Attribute"]],
] = defaultdict(set)
#: Map id to attribute
AttributesByID: Dict[int, Type["Attribute"]] = dict()
# --- Descriptor classes ---------------------------------------------------------------
T = TypeVar("T")
class Attribute(Generic[T]):
"""Base class for Attributes to be used as properties."""
#: List of resource or event types with this attribute.
#: each element is a tuple (constants.InterfaceType, str)
resources: ClassVar[
Union[
List[Union[Tuple[constants.InterfaceType, str], constants.EventType]],
Type[AllSessionTypes],
]
] = []
#: Name of the Python property to be matched to this attribute.
py_name: ClassVar[str] = "To be specified"
#: Name of the VISA Attribute
visa_name: ClassVar[str] = "To be specified"
#: Type of the VISA attribute
visa_type: ClassVar[str] = ""
#: Numeric constant of the VISA Attribute
attribute_id: ClassVar[int] = 0
#: Default value fo the VISA Attribute
default: ClassVar[Any] = "N/A"
#: Access
read: ClassVar[bool] = False
write: ClassVar[bool] = False
local: ClassVar[bool] = False
__doc__: str
@classmethod
def __init_subclass__(cls, **kwargs):
"""Register the subclass with the supported resources."""
super().__init_subclass__(**kwargs)
if not cls.__name__.startswith("AttrVI_"):
return
cls.attribute_id = getattr(constants, cls.visa_name)
# Check that the docstring are populated before extending them
# Cover the case of running with Python with -OO option
if cls.__doc__ is not None:
cls.redoc()
if cls.resources is AllSessionTypes:
AttributesPerResource[AllSessionTypes].add(cls)
else:
for res in cls.resources:
AttributesPerResource[res].add(cls)
AttributesByID[cls.attribute_id] = cls
@classmethod
def redoc(cls) -> None:
"""Generate a descriptive docstring."""
cls.__doc__ += "\n:VISA Attribute: %s (%s)" % (cls.visa_name, cls.attribute_id)
def post_get(self, value: Any) -> T:
"""Override to check or modify the value returned by the VISA function.
Parameters
----------
value : Any
Value returned by the VISA library.
Returns
-------
T
Equivalent python value.
"""
return value
def pre_set(self, value: T) -> Any:
"""Override to check or modify the value to be passed to the VISA function.
Parameters
----------
value : T
Python value to be passed to VISA library.
Returns
-------
Any
Equivalent value to pass to the VISA library.
"""
return value
@overload
def __get__(self, instance: None, owner) -> "Attribute":
pass
@overload # noqa: F811
def __get__(self, instance: Union["Resource", "Event"], owner) -> T: # noqa: F811
pass
def __get__(self, instance, owner): # noqa: F811
"""Access a VISA attribute and convert to a nice Python representation."""
if instance is None:
return self
if not self.read:
raise AttributeError("can't read attribute")
return self.post_get(instance.get_visa_attribute(self.attribute_id))
def __set__(self, instance: "Resource", value: T) -> None:
"""Set the attribute if writable."""
if not self.write:
raise AttributeError("can't write attribute")
# Here we use the bare integer value of the enumeration hence the type ignore
instance.set_visa_attribute(
self.attribute_id, # type: ignore
self.pre_set(value),
)
@classmethod
def in_resource(cls, session_type: Tuple[constants.InterfaceType, str]) -> bool:
"""Is the attribute part of a given session type.
Parameters
----------
session_type : Tuple[constants.InterfaceType, str]
Type of session for which to check the presence of an attribute.
Returns
-------
bool
Is the attribute present.
"""
if cls.resources is AllSessionTypes:
return True
return session_type in cls.resources # type: ignore
class EnumAttribute(Attribute):
"""Class for attributes with values that map to a PyVISA Enum."""
#: Enum type with valid values.
enum_type: ClassVar[Type[enum.IntEnum]]
@classmethod
def redoc(cls) -> None:
"""Add the enum member to the docstring."""
super(EnumAttribute, cls).redoc()
cls.__doc__ += "\n:type: :class:%s.%s" % (
cls.enum_type.__module__,
cls.enum_type.__name__,
)
def post_get(self, value: Any) -> enum.IntEnum:
"""Convert the VISA value to the proper enum member."""
return self.enum_type(value)
def pre_set(self, value: enum.IntEnum) -> Any:
"""Validate the value passed against the enum."""
# Python 3.8 raise if a non-Enum is used for value
try:
value = self.enum_type(value)
except ValueError:
raise ValueError(
"%r is an invalid value for attribute %s, "
"should be a %r" % (value, self.visa_name, self.enum_type)
)
return value
class IntAttribute(Attribute):
"""Class for attributes with integers values."""
@classmethod
def redoc(cls) -> None:
"""Add the type of the returned value."""
super(IntAttribute, cls).redoc()
cls.__doc__ += "\n:type: int"
def post_get(self, value: SupportsInt) -> int:
"""Convert the returned value to an integer."""
return int(value)
class RangeAttribute(IntAttribute):
"""Class for integer attributes with values within a range."""
#: Range for the value, and iterable of extra values.
min_value: int
max_value: int
values: Optional[List[int]] = None
@classmethod
def redoc(cls) -> None:
"""Specify the range of validity for the attribute."""
super(RangeAttribute, cls).redoc()
cls.__doc__ += "\n:range: %s <= value <= %s" % (cls.min_value, cls.max_value)
if cls.values:
cls.__doc__ += " or in %s" % cls.values
def pre_set(self, value: int) -> int:
"""Check that the value falls in the specified range."""
if not self.min_value <= value <= self.max_value:
if not self.values:
raise ValueError(
"%r is an invalid value for attribute %s, "
"should be between %r and %r"
% (value, self.visa_name, self.min_value, self.max_value)
)
elif value not in self.values:
raise ValueError(
"%r is an invalid value for attribute %s, "
"should be between %r and %r or %r"
% (
value,
self.visa_name,
self.min_value,
self.max_value,
self.values,
)
)
return value
class ValuesAttribute(Attribute):
"""Class for attributes with values in a list."""
#: Valid values
values: list = []
@classmethod
def redoc(cls) -> None:
"""Add the allowed values to teh docs."""
super(ValuesAttribute, cls).redoc()
cls.__doc__ += "\n:values: %s" % cls.values
def pre_set(self, value: int) -> int:
"""Validate the value against the allowed values."""
if value not in self.values:
raise ValueError(
"%r is an invalid value for attribute %s, "
"should be in %s" % (value, self.visa_name, self.values)
)
return value
class BooleanAttribute(Attribute):
"""Class for attributes with boolean values."""
py_type: bool
@classmethod
def redoc(cls) -> None:
"""Add the type to the docs."""
super(BooleanAttribute, cls).redoc()
cls.__doc__ += "\n:type: bool"
def post_get(self, value: constants.VisaBoolean) -> bool:
"""Convert to a Python boolean."""
return value == constants.VisaBoolean.true
def pre_set(self, value: bool) -> constants.VisaBoolean:
"""Convert to a VISA boolean."""
return constants.VisaBoolean.true if value else constants.VisaBoolean.false
class CharAttribute(Attribute):
"""Class for attributes with char values."""
py_type = str
@classmethod
def redoc(cls) -> None:
"""Specify the valid characters."""
super(CharAttribute, cls).redoc()
cls.__doc__ += "\nASCII Character\n:type: str | bytes"
def post_get(self, value: int) -> str:
"""Convert the integer to a character."""
return chr(value)
def pre_set(self, value: Union[str, bytes]) -> int:
"""Convert a character to an integer."""
return ord(value)
# --- Session attributes ---------------------------------------------------------------
# Attributes are in the same order as in the constants.ResourceAttribute enum
# VI_ATTR_RM_SESSION is not implemented as resource property,
# use .resource_manager.session instead
class AttrVI_ATTR_INTF_TYPE(EnumAttribute):
"""Interface type of the given session."""
resources = AllSessionTypes
py_name = "interface_type"
visa_name = "VI_ATTR_INTF_TYPE"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.InterfaceType
class AttrVI_ATTR_INTF_NUM(RangeAttribute):
"""Board number for the given interface."""
resources = AllSessionTypes
py_name = "interface_number"
visa_name = "VI_ATTR_INTF_NUM"
visa_type = "ViUInt16"
default = 0
read, write, local = True, False, False
min_value, max_value, values = 0x0, 0xFFFF, None
class AttrVI_ATTR_INTF_INST_NAME(Attribute):
"""Human-readable text that describes the given interface."""
resources = AllSessionTypes
py_name = ""
visa_name = "VI_ATTR_INTF_INST_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_RSRC_CLASS(Attribute):
"""Resource class as defined by the canonical resource name.
Possible values are: INSTR, INTFC, SOCKET, RAW...
"""
resources = AllSessionTypes
py_name = "resource_class"
visa_name = "VI_ATTR_RSRC_CLASS"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_RSRC_NAME(Attribute):
"""Unique identifier for a resource compliant with the address structure."""
resources = AllSessionTypes
py_name = "resource_name"
visa_name = "VI_ATTR_RSRC_NAME"
visa_type = "ViRsrc"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_RSRC_IMPL_VERSION(RangeAttribute):
"""Resource version that identifies the revisions or implementations of a resource.
This attribute value is defined by the individual manufacturer and increments
with each new revision. The format of the value has the upper 12 bits as
the major number of the version, the next lower 12 bits as the minor number
of the version, and the lowest 8 bits as the sub-minor number of the version.
"""
resources = AllSessionTypes
py_name = "implementation_version"
visa_name = "VI_ATTR_RSRC_IMPL_VERSION"
visa_type = "ViVersion"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 4294967295, None
class AttrVI_ATTR_RSRC_LOCK_STATE(EnumAttribute):
"""Current locking state of the resource.
The resource can be unlocked, locked with an exclusive lock,
or locked with a shared lock.
"""
resources = AllSessionTypes
py_name = "lock_state"
visa_name = "VI_ATTR_RSRC_LOCK_STATE"
visa_type = "ViAccessMode"
default = constants.AccessModes.no_lock
read, write, local = True, False, False
enum_type = constants.AccessModes
class AttrVI_ATTR_RSRC_SPEC_VERSION(RangeAttribute):
"""Version of the VISA specification to which the implementation is compliant.
The format of the value has the upper 12 bits as the major number of the version,
the next lower 12 bits as the minor number of the version, and the lowest 8 bits
as the sub-minor number of the version. The current VISA specification defines
the value to be 00300000h.
"""
resources = AllSessionTypes
py_name = "spec_version"
visa_name = "VI_ATTR_RSRC_SPEC_VERSION"
visa_type = "ViVersion"
default = 0x00300000
read, write, local = True, False, True
min_value, max_value, values = 0, 4294967295, None
class AttrVI_ATTR_RSRC_MANF_NAME(Attribute):
"""Manufacturer name of the vendor that implemented the VISA library.
This attribute is not related to the device manufacturer attributes.
Note The value of this attribute is for display purposes only and not for
programmatic decisions, as the value can differ between VISA implementations
and/or revisions.
"""
resources = AllSessionTypes
py_name = "resource_manufacturer_name"
visa_name = "VI_ATTR_RSRC_MANF_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_RSRC_MANF_ID(RangeAttribute):
"""VXI manufacturer ID of the vendor that implemented the VISA library.
This attribute is not related to the device manufacturer attributes.
"""
resources = AllSessionTypes
py_name = ""
visa_name = "VI_ATTR_RSRC_MANF_ID"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0x3FFF, None
class AttrVI_ATTR_TMO_VALUE(RangeAttribute):
"""Timeout in milliseconds for all resource I/O operations.
This value is used when accessing the device associated with the given
session.
Special values:
- **immediate** (``VI_TMO_IMMEDIATE``): 0
(for convenience, any value smaller than 1 is considered as 0)
- **infinite** (``VI_TMO_INFINITE``): ``float('+inf')``
(for convenience, None is considered as ``float('+inf')``)
To set an **infinite** timeout, you can also use:
>>> del instrument.timeout
A timeout value of VI_TMO_IMMEDIATE means that operations should never
wait for the device to respond. A timeout value of VI_TMO_INFINITE disables
the timeout mechanism.
"""
resources = AllSessionTypes
py_name = "timeout"
visa_name = "VI_ATTR_TMO_VALUE"
visa_type = "ViUInt32"
default = 2000
read, write, local = True, True, True
min_value, max_value, values = 0, 0xFFFFFFFF, None
def pre_set(self, value: Union[int, float]) -> int:
"""Convert the timeout to an integer recognized by the VISA library."""
timeout = util.cleanup_timeout(value)
return timeout
def post_get(self, value: int) -> Union[int, float]: # type: ignore
"""Convert VI_TMO_INFINTE into float("+inf")."""
if value == constants.VI_TMO_INFINITE:
return float("+inf")
return value
def __delete__(self, instance: "Resource") -> None:
"""Set an infinite timeout upon deletion."""
instance.set_visa_attribute(
constants.ResourceAttribute.timeout_value, constants.VI_TMO_INFINITE
)
class AttrVI_ATTR_MAX_QUEUE_LENGTH(RangeAttribute):
"""Maximum number of events that can be queued at any time on the given session.
Events that occur after the queue has become full will be discarded.
"""
resources = AllSessionTypes
py_name = ""
visa_name = "VI_ATTR_MAX_QUEUE_LENGTH"
visa_type = "ViUInt32"
default = 50
read, write, local = True, True, True
min_value, max_value, values = 0x1, 0xFFFFFFFF, None
class AttrVI_ATTR_USER_DATA(RangeAttribute):
"""Maximum number of events that can be queued at any time on the given session.
Events that occur after the queue has become full will be discarded.
"""
resources = AllSessionTypes
py_name = ""
visa_name = "VI_ATTR_USER_DATA"
visa_type = "ViUInt64" if constants.is_64bits else "ViUInt32"
default = 0
read, write, local = True, True, True
min_value, max_value, values = (
0x0,
0xFFFFFFFFFFFFFFFF if constants.is_64bits else 0xFFFFFFFF,
None,
)
class AttrVI_ATTR_TRIG_ID(EnumAttribute):
"""Identifier for the current triggering mechanism."""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "BACKPLANE"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.vxi, "BACKPLANE"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_TRIG_ID"
visa_type = "ViInt16"
default = constants.VI_TRIG_SW
read, write, local = True, True, True
enum_type = constants.TriggerID
class AttrVI_ATTR_SEND_END_EN(BooleanAttribute):
"""Should END be asserted during the transfer of the last byte of the buffer."""
# TODO find out if USB RAW should be listed
resources = [
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = "send_end"
visa_name = "VI_ATTR_SEND_END_EN"
visa_type = "ViBoolean"
default = True
read, write, local = True, True, True
class AttrVI_ATTR_SUPPRESS_END_EN(BooleanAttribute):
"""Whether to suppress the END indicator termination.
Only relevant in viRead and related operations.
"""
resources = [
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = ""
visa_name = "VI_ATTR_SUPPRESS_END_EN"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_TERMCHAR_EN(BooleanAttribute):
"""Should the read operation terminate when a termination character is received.
This attribute is ignored if VI_ATTR_ASRL_END_IN is set to VI_ASRL_END_TERMCHAR.
This attribute is valid for both raw I/O (viRead) and formatted I/O (viScanf).
For message based resource this automatically handled by the `read_termination`
property.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_TERMCHAR_EN"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_TERMCHAR(CharAttribute):
"""VI_ATTR_TERMCHAR is the termination character.
When the termination character is read and VI_ATTR_TERMCHAR_EN is enabled
during a read operation, the read operation terminates.
For message based resource this automatically handled by the `read_termination`
property.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_TERMCHAR"
visa_type = "ViUInt8"
default = 0x0A # (linefeed)
read, write, local = True, True, True
class AttrVI_ATTR_IO_PROT(EnumAttribute):
"""IO protocol to use.
In VXI, you can choose normal word serial or fast data channel (FDC).
In GPIB, you can choose normal or high-speed (HS-488) transfers.
In serial, TCPIP, or USB RAW, you can choose normal transfers or
488.2-defined strings.
In USB INSTR, you can choose normal or vendor-specific transfers.
"""
# Crossing IVI and NI this is correct
resources = [
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = "io_protocol"
visa_name = "VI_ATTR_IO_PROT"
visa_type = "ViUInt16"
default = constants.IOProtocol.normal
read, write, local = True, True, True
enum_type = constants.IOProtocol
class AttrVI_ATTR_FILE_APPEND_EN(BooleanAttribute):
"""Should viReadToFile() overwrite (truncate) or append when opening a file."""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_FILE_APPEND_EN"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_RD_BUF_OPER_MODE(RangeAttribute):
"""Operational mode of the formatted I/O read buffer.
When the operational mode is set to VI_FLUSH_DISABLE (default), the buffer
is flushed only on explicit calls to viFlush(). If the operational mode is
set to VI_FLUSH_ON_ACCESS, the read buffer is flushed every time a
viScanf() (or related) operation completes.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_RD_BUF_OPER_MODE"
visa_type = "ViUInt16"
default = constants.VI_FLUSH_DISABLE
read, write, local = True, True, True
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_RD_BUF_SIZE(RangeAttribute):
"""Current size of the formatted I/O input buffer for this session.
The user can modify this value by calling viSetBuf().
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_RD_BUF_SIZE"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 4294967295, None
class AttrVI_ATTR_WR_BUF_OPER_MODE(RangeAttribute):
"""Operational mode of the formatted I/O write buffer.
When the operational mode is set to VI_FLUSH_WHEN_FULL (default), the buffer
is flushed when an END indicator is written to the buffer, or when the buffer
fills up.
If the operational mode is set to VI_FLUSH_ON_ACCESS, the write
buffer is flushed under the same conditions, and also every time a
viPrintf() (or related) operation completes.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_WR_BUF_OPER_MODE"
visa_type = "ViUInt16"
default = constants.VI_FLUSH_WHEN_FULL
read, write, local = True, True, True
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_WR_BUF_SIZE(RangeAttribute):
"""Current size of the formatted I/O output buffer for this session.
The user can modify this value by calling viSetBuf().
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_WR_BUF_SIZE"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 4294967295, None
class AttrVI_ATTR_DMA_ALLOW_EN(BooleanAttribute):
"""Should I/O accesses use DMA (True) or Programmed I/O (False).
In some implementations, this attribute may have global effects even though
it is documented to be a local attribute. Since this affects performance and not
functionality, that behavior is acceptable.
"""
# TODO find a reliable source to check if USB RAW should be listed
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.asrl, "INSTR"),
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = "allow_dma"
visa_name = "VI_ATTR_DMA_ALLOW_EN"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, True, True
class AttrVI_ATTR_TCPIP_ADDR(Attribute):
"""TCPIP address of the device to which the session is connected.
This string is formatted in dot notation.
"""
resources = [
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
]
py_name = ""
visa_name = "VI_ATTR_TCPIP_ADDR"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_TCPIP_HOSTNAME(Attribute):
"""Host name of the device.
If no host name is available, this attribute returns an empty string.
"""
resources = [
(constants.InterfaceType.tcpip, "INSTR"),
(constants.InterfaceType.tcpip, "SOCKET"),
]
py_name = ""
visa_name = "VI_ATTR_TCPIP_HOSTNAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_TCPIP_PORT(RangeAttribute):
"""Port number for a given TCPIP address.
For a TCPIP SOCKET Resource, this is a required part of the address string.
"""
resources = [(constants.InterfaceType.tcpip, "SOCKET")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_PORT"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFFFF, None
class AttrVI_ATTR_TCPIP_DEVICE_NAME(Attribute):
"""LAN device name used by the VXI-11 or LXI protocol during connection."""
resources = [(constants.InterfaceType.tcpip, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_DEVICE_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_TCPIP_NODELAY(BooleanAttribute):
"""The Nagle algorithm is disabled when this attribute is enabled (and vice versa).
The Nagle algorithm improves network performance by buffering "send" data until a
full-size packet can be sent. This attribute is enabled by default in VISA to
verify that synchronous writes get flushed immediately.
"""
resources = [(constants.InterfaceType.tcpip, "SOCKET")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_NODELAY"
visa_type = "ViBoolean"
default = True
read, write, local = True, True, True
class AttrVI_ATTR_TCPIP_KEEPALIVE(BooleanAttribute):
"""Requests that a TCP/IP provider enable the use of keep-alive packets.
After the system detects that a connection was dropped, VISA returns a lost
connection error code on subsequent I/O calls on the session. The time required
for the system to detect that the connection was dropped is dependent on the
system and is not settable.
"""
resources = [(constants.InterfaceType.tcpip, "SOCKET")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_KEEPALIVE"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_TCPIP_IS_HISLIP(BooleanAttribute):
"""Does this resource use the HiSLIP protocol."""
resources = [(constants.InterfaceType.tcpip, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_IS_HISLIP"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_TCPIP_HISLIP_VERSION(RangeAttribute):
"""HiSLIP protocol version used for a particular HiSLIP connetion.
Currently, HiSLIP version 1.0 would return a ViVersion value of 0x00100000.
"""
resources = [(constants.InterfaceType.tcpip, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_HISLIP_VERSION"
visa_type = "ViVersion"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_TCPIP_HISLIP_OVERLAP_EN(BooleanAttribute):
"""Enables HiSLIP ‘Overlap’ mode.
The value defaults to the mode suggested by the instrument on HiSLIP connection.
If disabled, the connection uses ‘Synchronous’ mode to detect and recover
from interrupted errors. If enabled, the connection uses ‘Overlapped’ mode
to allow overlapped responses. If changed, VISA will do a Device Clear
operation to change the mode.
"""
resources = [(constants.InterfaceType.tcpip, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_HISLIP_OVERLAP_EN"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, True, True
class AttrVI_ATTR_TCPIP_HISLIP_MAX_MESSAGE_KB(RangeAttribute):
"""Maximum HiSLIP message size in kilobytes VISA will accept from a HiSLIP system.
Defaults to 1024 (a 1 MB maximum message size).
"""
resources = [(constants.InterfaceType.tcpip, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_TCPIP_HISLIP_MAX_MESSAGE_KB"
visa_type = "ViUint32"
default = 1024
read, write, local = True, True, True
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_GPIB_PRIMARY_ADDR(RangeAttribute):
"""Primary address of the GPIB device used by the given session.
For the GPIB INTFC Resource, this attribute is Read-Write.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
]
py_name = "primary_address"
visa_name = "VI_ATTR_GPIB_PRIMARY_ADDR"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, True, False
min_value, max_value, values = 0, 30, None
class AttrVI_ATTR_GPIB_SECONDARY_ADDR(RangeAttribute):
"""Secondary address of the GPIB device used by the given session.
For the GPIB INTFC Resource, this attribute is Read-Write.
"""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
]
py_name = "secondary_address"
visa_name = "VI_ATTR_GPIB_SECONDARY_ADDR"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, True, False
min_value, max_value, values = 0, 30, [constants.VI_NO_SEC_ADDR]
class AttrVI_ATTR_GPIB_SYS_CNTRL_STATE(BooleanAttribute):
"""Is the specified GPIB interface currently the system controller.
In some implementations, this attribute may be modified only through a
configuration utility. On these systems this attribute is read-only (RO).
"""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = "is_system_controller"
visa_name = "VI_ATTR_GPIB_SYS_CNTRL_STATE"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, True, False
class AttrVI_ATTR_GPIB_CIC_STATE(BooleanAttribute):
"""Is the specified GPIB interface currently CIC (Controller In Charge)."""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = "is_controller_in_charge"
visa_name = "VI_ATTR_GPIB_CIC_STATE"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_GPIB_REN_STATE(EnumAttribute):
"""Current state of the GPIB REN (Remote ENable) interface line."""
resources = [
(constants.InterfaceType.gpib, "INSTR"),
(constants.InterfaceType.gpib, "INTFC"),
]
py_name = "remote_enabled"
visa_name = "VI_ATTR_GPIB_REN_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_GPIB_ATN_STATE(EnumAttribute):
"""Current state of the GPIB ATN (ATtentioN) interface line."""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = "atn_state"
visa_name = "VI_ATTR_GPIB_ATN_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_GPIB_NDAC_STATE(EnumAttribute):
"""Current state of the GPIB NDAC (Not Data ACcepted) interface line."""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = "ndac_state"
visa_name = "VI_ATTR_GPIB_NDAC_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_GPIB_SRQ_STATE(EnumAttribute):
"""Current state of the GPIB SRQ (Service ReQuest) interface line."""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = ""
visa_name = "VI_ATTR_GPIB_SRQ_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_GPIB_ADDR_STATE(EnumAttribute):
"""Current state of the GPIB interface.
The interface can be addressed to talk or listen, or not addressed.
"""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = "address_state"
visa_name = "VI_ATTR_GPIB_ADDR_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.AddressState
class AttrVI_ATTR_GPIB_UNADDR_EN(BooleanAttribute):
"""Whether to unaddress the device (UNT and UNL) after each read/write operation."""
resources = [(constants.InterfaceType.gpib, "INSTR")]
py_name = "enable_unaddressing"
visa_name = "VI_ATTR_GPIB_UNADDR_EN"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_GPIB_READDR_EN(BooleanAttribute):
"""Whether to use repeat addressing before each read/write operation."""
resources = [(constants.InterfaceType.gpib, "INSTR")]
py_name = "enable_repeat_addressing"
visa_name = "VI_ATTR_GPIB_READDR_EN"
visa_type = "ViBoolean"
default = True
read, write, local = True, True, True
class AttrVI_ATTR_GPIB_HS488_CBL_LEN(RangeAttribute):
"""Total number of meters of GPIB cable used in the specified GPIB interface."""
resources = [(constants.InterfaceType.gpib, "INTFC")]
py_name = ""
visa_name = "VI_ATTR_GPIB_HS488_CBL_LEN"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
min_value, max_value, values = (
1,
15,
[constants.VI_GPIB_HS488_DISABLED, constants.VI_GPIB_HS488_NIMPL],
)
class AttrVI_ATTR_ASRL_AVAIL_NUM(RangeAttribute):
"""Number of bytes available in the low- level I/O receive buffer."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "bytes_in_buffer"
visa_name = "VI_ATTR_ASRL_AVAIL_NUM"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_ASRL_BAUD(RangeAttribute):
"""Baud rate of the interface.
It is represented as an unsigned 32-bit integer so that any baud rate can
be used, but it usually requires a commonly used rate such as 300, 1200,
2400, or 9600 baud.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "baud_rate"
visa_name = "VI_ATTR_ASRL_BAUD"
visa_type = "ViUInt32"
default = 9600
read, write, local = True, True, False
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_ASRL_DATA_BITS(RangeAttribute):
"""Number of data bits contained in each frame (from 5 to 8).
The data bits for each frame are located in the low-order bits of every
byte stored in memory.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "data_bits"
visa_name = "VI_ATTR_ASRL_DATA_BITS"
visa_type = "ViUInt16"
default = 8
read, write, local = True, True, False
min_value, max_value, values = 5, 8, None
class AttrVI_ATTR_ASRL_PARITY(EnumAttribute):
"""Parity used with every frame transmitted and received."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "parity"
visa_name = "VI_ATTR_ASRL_PARITY"
visa_type = "ViUInt16"
default = constants.Parity.none
read, write, local = True, True, False
enum_type = constants.Parity
class AttrVI_ATTR_ASRL_STOP_BITS(EnumAttribute):
"""Number of stop bits used to indicate the end of a frame.
The value VI_ASRL_STOP_ONE5 indicates one-and-one-half (1.5) stop bits.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "stop_bits"
visa_name = "VI_ATTR_ASRL_STOP_BITS"
visa_type = "ViUInt16"
default = constants.StopBits.one
read, write, local = True, True, False
enum_type = constants.StopBits
class AttrVI_ATTR_ASRL_FLOW_CNTRL(EnumAttribute):
"""Indicate the type of flow control used by the transfer mechanism."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "flow_control"
visa_name = "VI_ATTR_ASRL_FLOW_CNTRL"
visa_type = "ViUInt16"
default = constants.VI_ASRL_FLOW_NONE
read, write, local = True, True, False
enum_type = constants.ControlFlow
class AttrVI_ATTR_ASRL_DISCARD_NULL(BooleanAttribute):
"""If set to True, NUL characters are discarded.
Otherwise, they are treated as normal data characters. For binary transfers,
set this attribute to VI_FALSE.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "discard_null"
visa_name = "VI_ATTR_ASRL_DISCARD_NULL"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, False
class AttrVI_ATTR_ASRL_CONNECTED(BooleanAttribute):
"""Whether the port is properly connected to another port or device.
This attribute is valid only with serial drivers developed by National
Instruments and documented to support this feature with the corresponding
National Instruments hardware.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_CONNECTED"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_ASRL_ALLOW_TRANSMIT(BooleanAttribute):
"""Manually control transmission.
If set to False, suspend transmission as if an XOFF character has been received.
If set to True, it resumes transmission as if an XON character has been received.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "allow_transmit"
visa_name = "VI_ATTR_ASRL_ALLOW_TRANSMIT"
visa_type = "ViBoolean"
default = True
read, write, local = True, True, False
class AttrVI_ATTR_ASRL_END_IN(EnumAttribute):
"""Method used to terminate read operations."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "end_input"
visa_name = "VI_ATTR_ASRL_END_IN"
visa_type = "ViUInt16"
default = constants.SerialTermination.termination_char
read, write, local = True, True, True
enum_type = constants.SerialTermination
class AttrVI_ATTR_ASRL_END_OUT(EnumAttribute):
"""Method used to terminate write operations."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "end_output"
visa_name = "VI_ATTR_ASRL_END_OUT"
visa_type = "ViUInt16"
default = constants.SerialTermination.none
read, write, local = True, True, True
enum_type = constants.SerialTermination
class AttrVI_ATTR_ASRL_BREAK_LEN(RangeAttribute):
"""Duration (in milliseconds) of the break signal.
The break signal is asserted when VI_ATTR_ASRL_END_OUT is set to
constants.SerialTermination.termination_break. If you want to control the
assertion state and length of a break signal manually, use the
VI_ATTR_ASRL_BREAK_STATE attribute instead.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "break_length"
visa_name = "VI_ATTR_ASRL_BREAK_LEN"
visa_type = "ViInt16"
default = 250
read, write, local = True, True, True
min_value, max_value, values = -32768, 32767, None
class AttrVI_ATTR_ASRL_BREAK_STATE(EnumAttribute):
"""Manually control the assertion state of the break signal.
If set to constants.LineState.asserted, it suspends character transmission
and places the transmission line in a break state until this attribute
is reset to constants.LineState.unasserted.
If you want VISA to send a break signal after each write operation
automatically, use the VI_ATTR_ASRL_BREAK_LEN and VI_ATTR_ASRL_END_OUT
attributes instead.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "break_state"
visa_name = "VI_ATTR_ASRL_BREAK_STATE"
visa_type = "ViInt16"
default = constants.LineState.unasserted
read, write, local = True, True, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_REPLACE_CHAR(CharAttribute):
"""Character to be used to replace incoming characters that arrive with errors.
This refers for example to character that arrives with parity error.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "replace_char"
visa_name = "VI_ATTR_ASRL_REPLACE_CHAR"
visa_type = "ViUInt8"
default = 0
read, write, local = True, True, True
class AttrVI_ATTR_ASRL_XOFF_CHAR(CharAttribute):
"""XOFF character used for XON/XOFF flow control (both directions).
If XON/XOFF flow control (software handshaking) is not being used, the value of
this attribute is ignored.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "xoff_char"
visa_name = "VI_ATTR_ASRL_XOFF_CHAR"
visa_type = "ViUInt8"
default = 0x13
read, write, local = True, True, True
class AttrVI_ATTR_ASRL_XON_CHAR(CharAttribute):
"""XON character used for XON/XOFF flow control (both directions).
If XON/XOFF flow control (software handshaking) is not being used, the value of
this attribute is ignored.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = "xon_char"
visa_name = "VI_ATTR_ASRL_XON_CHAR"
visa_type = "ViUInt8"
default = 0x11
read, write, local = True, True, True
class AttrVI_ATTR_ASRL_CTS_STATE(EnumAttribute):
"""Current state of the Clear To Send (CTS) input signal."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_CTS_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_DSR_STATE(EnumAttribute):
"""Current state of the Data Set Ready (DSR) input signal."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_DSR_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_DTR_STATE(EnumAttribute):
"""Current state of the Data Terminal Ready (DTR) input signal."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_DTR_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_RTS_STATE(EnumAttribute):
"""Manually assert or unassert the Request To Send (RTS) output signal."""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_RTS_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_WIRE_MODE(EnumAttribute):
"""Current wire/transceiver mode.
For RS-485 hardware, this attribute is valid only with the RS-485 serial
driver developed by National Instruments.
For RS-232 hardware, the values RS232/DCE and RS232/AUTO are valid only
with RS-232 serial drivers developed by National Instruments and documented
to support this feature with the corresponding National Instruments hardware.
When this feature is not supported, RS232/DTE is the only valid value.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_WIRE_MODE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
enum_type = constants.WireMode
class AttrVI_ATTR_ASRL_DCD_STATE(EnumAttribute):
"""Current state of the Data Carrier Detect (DCD) input signal.
The DCD signal is often used by modems to indicate the detection of a
carrier (remote modem) on the telephone line. The DCD signal is also known
as Receive Line Signal Detect (RLSD).
This attribute is Read Only except when the VI_ATTR_ASRL_WIRE_MODE attribute
is set to VI_ASRL_WIRE_232_DCE, or VI_ASRL_WIRE_232_AUTO with the hardware
currently in the DCE state.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_DCD_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
enum_type = constants.LineState
class AttrVI_ATTR_ASRL_RI_STATE(EnumAttribute):
"""Current state of the Ring Indicator (RI) input signal.
The RI signal is often used by modems to indicate that the telephone line
is ringing. This attribute is Read Only except when the VI_ATTR_ASRL_WIRE_MODE
attribute is set to VI_ASRL_WIRE_232_DCE, or VI_ASRL_WIRE_232_AUTO with the
hardware currently in the DCE state.
"""
resources = [(constants.InterfaceType.asrl, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_ASRL_RI_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, False
enum_type = constants.LineState
class AttrVI_ATTR_USB_INTFC_NUM(RangeAttribute):
"""USB interface number used by the given session."""
resources = [
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
]
py_name = "interface_number"
visa_name = "VI_ATTR_USB_INTFC_NUM"
visa_type = "ViInt16"
default = 0
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFE, None
class AttrVI_ATTR_USB_SERIAL_NUM(Attribute):
"""USB serial number of this device."""
resources = [
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
]
py_name = "serial_number"
visa_name = "VI_ATTR_USB_SERIAL_NUM"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_USB_PROTOCOL(RangeAttribute):
"""USB protocol used by this USB interface."""
resources = [
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
]
py_name = "usb_protocol"
visa_name = "VI_ATTR_USB_PROTOCOL"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFF, None
class AttrVI_ATTR_USB_MAX_INTR_SIZE(RangeAttribute):
"""Maximum size of data that will be stored by any given USB interrupt.
If a USB interrupt contains more data than this size, the data in excess of
this size will be lost.
"""
resources = [
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
]
py_name = "maximum_interrupt_size"
visa_name = "VI_ATTR_USB_MAX_INTR_SIZE"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 0, 0xFFFF, None
class AttrVI_ATTR_USB_CLASS(RangeAttribute):
"""USB class used by this USB interface."""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_CLASS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFF, None
class AttrVI_ATTR_USB_SUBCLASS(RangeAttribute):
"""USB subclass used by this USB interface."""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_SUBCLASS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFF, None
class AttrVI_ATTR_USB_BULK_IN_STATUS(RangeAttribute):
"""Status of the USB bulk-in pipe used by the given session is stalled or ready.
This attribute can be set to only VI_USB_PIPE_READY.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_BULK_IN_STATUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = -32768, 32767, None
class AttrVI_ATTR_USB_BULK_IN_PIPE(RangeAttribute):
"""Endpoint address of the USB bulk-in pipe used by the given session.
An initial value of -1 signifies that this resource does not have any
bulk-in pipes. This endpoint is used in viRead and related operations.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_BULK_IN_PIPE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 0x81, 0x8F, [-1]
class AttrVI_ATTR_USB_BULK_OUT_STATUS(RangeAttribute):
"""Status of the USB bulk-out or interrupt-out pipe used by the given session.
The status can be stalled or ready.
This attribute can be set to only VI_USB_PIPE_READY.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_BULK_OUT_STATUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = -32768, 32767, None
class AttrVI_ATTR_USB_BULK_OUT_PIPE(RangeAttribute):
"""Endpoint address of the USB bulk-out or interrupt-out pipe.
An initial value of –1 signifies that this resource does not have any
bulk-out or interrupt-out pipes. This endpoint is used in viWrite
and related operations.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_BULK_OUT_PIPE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 0x01, 0x0F, [-1]
class AttrVI_ATTR_USB_INTR_IN_PIPE(RangeAttribute):
"""Endpoint address of the USB interrupt-in pipe used by the given session.
An initial value of -1 signifies that this resource does not have any
interrupt-in pipes. This endpoint is used in viEnableEvent for VI_EVENT_USB_INTR.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_INTR_IN_PIPE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 0x81, 0x8F, [-1]
class AttrVI_ATTR_USB_ALT_SETTING(RangeAttribute):
"""USB alternate setting used by this USB interface."""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_ALT_SETTING"
visa_type = "ViInt16"
default = 0
read, write, local = True, True, False
min_value, max_value, values = 0, 0xFF, None
class AttrVI_ATTR_USB_END_IN(EnumAttribute):
"""Method used to terminate read operations."""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_END_IN"
visa_type = "ViUInt16"
default = constants.VI_USB_END_SHORT_OR_COUNT
read, write, local = True, True, True
enum_type = constants.USBEndInput
class AttrVI_ATTR_USB_NUM_INTFCS(RangeAttribute):
"""Number of interfaces supported by this USB device."""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_NUM_INTFCS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 1, 0xFF, None
class AttrVI_ATTR_USB_NUM_PIPES(RangeAttribute):
"""Number of pipes supported by this USB interface.
This does not include the default control pipe.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_NUM_PIPES"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 30, None
class AttrVI_ATTR_USB_INTR_IN_STATUS(RangeAttribute):
"""Whether the USB interrupt-in pipe used by the given session is stalled or ready.
This attribute can be set to only VI_USB_PIPE_READY.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_INTR_IN_STATUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = -32768, 32767, None
class AttrVI_ATTR_USB_CTRL_PIPE(RangeAttribute):
"""Endpoint address of the USB control pipe used by the given session.
A value of 0 signifies that the default control pipe will be used.
This endpoint is used in viUsbControlIn and viUsbControlOut operations.
Nonzero values may not be supported on all platforms.
"""
resources = [(constants.InterfaceType.usb, "RAW")]
py_name = ""
visa_name = "VI_ATTR_USB_CTRL_PIPE"
visa_type = "ViInt16"
default = 0x00
read, write, local = True, True, True
min_value, max_value, values = 0x00, 0x0F, None
class AttrVI_ATTR_MANF_NAME(Attribute):
"""Manufacturer name."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "BACKPLANE"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = "manufacturer_name"
visa_name = "VI_ATTR_MANF_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_MANF_ID(RangeAttribute):
"""Manufacturer identification number of the device."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = "manufacturer_id"
visa_name = "VI_ATTR_MANF_ID"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0x0, 0xFFFF, None
class AttrVI_ATTR_MODEL_NAME(Attribute):
"""Model name of the device."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "BACKPLANE"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = "model_name"
visa_name = "VI_ATTR_MODEL_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_MODEL_CODE(RangeAttribute):
"""Model code for the device."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.usb, "RAW"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = "model_code"
visa_name = "VI_ATTR_MODEL_CODE"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0x0, 0xFFFF, None
class AttrVI_ATTR_DEV_STATUS_BYTE(CharAttribute):
"""488-style status byte of the local controller or device for this session."""
resources = [
(constants.InterfaceType.gpib, "INTFC"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_DEV_STATUS_BYTE"
visa_type = "ViUInt8"
default = NotAvailable
read, write, local = True, True, False
class AttrVI_ATTR_4882_COMPLIANT(BooleanAttribute):
"""Whether the device is 488.2 compliant."""
resources = [
(constants.InterfaceType.usb, "INSTR"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = "is_4882_compliant"
visa_name = "VI_ATTR_4882_COMPLIANT"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_SLOT(RangeAttribute):
"""Physical slot location of the device.
If the slot number is not known, VI_UNKNOWN_SLOT is returned.
For VXI resources the maximum value is 12, 18 is the maximum for PXI resources.
"""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.vxi, "INSTR"),
]
py_name = ""
visa_name = "VI_ATTR_SLOT"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 1, 18, [constants.VI_UNKNOWN_SLOT]
class AttrVI_ATTR_WIN_ACCESS(RangeAttribute):
"""Modes in which the current window may be accessed."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "MEMACC"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_WIN_ACCESS"
visa_type = "ViUInt16"
default = constants.VI_NMAPPED
read, write, local = True, False, True
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_WIN_BASE_ADDR(RangeAttribute):
"""Base address of the interface bus to which this window is mapped."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "MEMACC"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_WIN_BASE_ADDR"
visa_type = "ViBusAddress64" if constants.is_64bits else "ViBusAddress"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = (
0,
0xFFFFFFFFFFFFFFFF if constants.is_64bits else 0xFFFFFFFF,
None,
)
class AttrVI_ATTR_WIN_SIZE(RangeAttribute):
"""Base address of the interface bus to which this window is mapped."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "MEMACC"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_WIN_SIZE"
visa_type = "ViBusSize64" if constants.is_64bits else "ViBusSize"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = (
0,
0xFFFFFFFFFFFFFFFF if constants.is_64bits else 0xFFFFFFFF,
None,
)
class AttrVI_ATTR_SRC_INCREMENT(RangeAttribute):
"""Number of elements by which to increment the source offset after a transfer.
The default value of this attribute is 1 (that is, the source address will be
incremented by 1 after each transfer), and the viMoveInXX() operations move from
consecutive elements. If this attribute is set to 0, the viMoveInXX() operations
will always read from the same element, essentially treating the source as a
FIFO register.
"""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "MEMACC"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = "source_increment"
visa_name = "VI_ATTR_SRC_INCREMENT"
visa_type = "ViInt32"
default = 1
read, write, local = True, True, True
min_value, max_value, values = 0, 1, None
class AttrVI_ATTR_DEST_INCREMENT(RangeAttribute):
"""Number of elements by which to increment the destination offset after a transfer.
The default value of this attribute is 1 (that is, the destination address will be
incremented by 1 after each transfer), and the viMoveOutXX() operations move
into consecutive elements. If this attribute is set to 0, the viMoveOutXX()
operations will always write to the same element, essentially treating the
destination as a FIFO register.
"""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "MEMACC"),
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = "destination_increment"
visa_name = "VI_ATTR_DEST_INCREMENT"
visa_type = "ViInt32"
default = 1
read, write, local = True, True, True
min_value, max_value, values = 0, 1, None
class AttrVI_ATTR_FDC_CHNL(RangeAttribute):
"""Which Fast Data Channel (FDC) to use to transfer the buffer."""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_FDC_CHNL"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 0, 7, None
class AttrVI_ATTR_FDC_MODE(RangeAttribute):
"""Which Fast Data Channel (FDC) mode to use (either normal or stream mode)."""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_FDC_MODE"
visa_type = "ViUInt16"
default = constants.VI_FDC_NORMAL
read, write, local = True, True, True
min_value, max_value, values = 0, 65535, None
class AttrVVI_ATTR_FDC_GEN_SIGNAL_EN(BooleanAttribute):
"""Fast Data Channel (FDC) signal enable."""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_FDC_GEN_SIGNAL_EN"
visa_type = "ViBool"
default = NotAvailable
read, write, local = True, True, True
class AttrVI_ATTR_FDC_USE_PAIR(BooleanAttribute):
"""Use a channel pair for transferring data.
If set to False, only one channel will be used.
"""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_FDC_USE_PAIR"
visa_type = "ViBoolean"
default = False
read, write, local = True, True, True
class AttrVI_ATTR_MAINFRAME_LA(RangeAttribute):
"""Lowest logical address in the mainframe.
If the logical address is not known, VI_UNKNOWN_LA is returned.
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "BACKPLANE"),
]
py_name = ""
visa_name = "VI_ATTR_MAINFRAME_LA"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 255, [constants.VI_UNKNOWN_LA]
class AttrVI_ATTR_VXI_LA(RangeAttribute):
"""Logical address of the VXI or VME device.
For a MEMACC or SERVANT session, this attribute specifies the logical
address of the local controller.
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_VXI_LA"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 511, None
class AttrVI_ATTR_CMDR_LA(RangeAttribute):
"""Unique logical address of the commander of the VXI device."""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_CMDR_LA"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 255, [constants.VI_UNKNOWN_LA]
class AttrVI_ATTR_MEM_SPACE(EnumAttribute):
"""VI_ATTR_MEM_SPACE specifies the VXIbus address space used by the device.
The four types are A16, A24, A32 or A64 memory address space.
"""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_MEM_SPACE"
visa_type = "ViUInt16"
default = constants.VI_A16_SPACE
read, write, local = True, False, False
enum_type = constants.AddressSpace
class AttrVI_ATTR_MEM_SIZE(RangeAttribute):
"""Unique logical address of the commander of the VXI device."""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_MEM_SIZE"
visa_type = "ViBusSize64" if constants.is_64bits else "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = (
0,
0xFFFFFFFFFFFFFFFF if constants.is_64bits else 0xFFFFFFFF,
None,
)
class AttrVI_ATTR_MEM_BASE(RangeAttribute):
"""Unique logical address of the commander of the VXI device."""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "SERVANT"),
]
py_name = ""
visa_name = "VI_ATTR_MEM_BASE"
visa_type = "ViBusAddress64" if constants.is_64bits else "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = (
0,
0xFFFFFFFFFFFFFFFF if constants.is_64bits else 0xFFFFFFFF,
None,
)
class AttrVI_ATTR_IMMEDIATE_SERV(BooleanAttribute):
"""Is the device an immediate servant of the controller running VISA."""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_IMMEDIATE_SERV"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_DEST_ACCESS_PRIV(RangeAttribute):
"""Address modifier to be used in high-level write operations.
High level operations are viOutXX() and viMoveOutXX().
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_DEST_ACCESS_PRIV"
visa_type = "ViUInt16"
default = constants.VI_DATA_PRIV
read, write, local = True, True, True
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_DEST_BYTE_ORDER(EnumAttribute):
"""Byte order to be used in high-level write operations.
High level operations are viOutXX() and viMoveOutXX().
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_DEST_BYTE_ORDER"
visa_type = "ViUInt16"
default = constants.VI_BIG_ENDIAN
read, write, local = True, True, True
enum_type = constants.ByteOrder
class AttrVI_ATTR_SRC_ACCESS_PRIV(EnumAttribute):
"""Address modifier to be used in high-level read operations.
High level operations are viInXX() and viMoveinXX().
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_SRC_ACCESS_PRIV"
visa_type = "ViUInt16"
default = constants.VI_DATA_PRIV
read, write, local = True, True, True
enum_type = constants.AddressModifiers
class AttrVI_ATTR_SRC_BYTE_ORDER(EnumAttribute):
"""Byte order to be used in high-level read operations.
High level operations are viOutXX() and viMoveOutXX().
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_SRC_BYTE_ORDER"
visa_type = "ViUInt16"
default = constants.VI_BIG_ENDIAN
read, write, local = True, True, True
enum_type = constants.ByteOrder
class AttrVI_ATTR_WIN_ACCESS_PRIV(EnumAttribute):
"""Address modifier to be used in low-level access operations.
Low-level operation are viMapAddress(), viPeekXX(), and viPokeXX(),
when accessing the mapped window.
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_WIN_ACCESS_PRIV"
visa_type = "ViUInt16"
default = constants.VI_DATA_PRIV
read, write, local = True, True, True
enum_type = constants.AddressModifiers
class AttrVI_ATTR_WIN_BYTE_ORDER(EnumAttribute):
"""Byte order to be used in low- level access operations.
Low-level operation are viMapAddress(), viPeekXX(), and viPokeXX(),
when accessing the mapped window.
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "MEMACC"),
]
py_name = ""
visa_name = "VI_ATTR_WIN_BYTE_ORDER"
visa_type = "ViUInt16"
default = constants.VI_BIG_ENDIAN
read, write, local = True, True, True
enum_type = constants.ByteOrder
class AttrVI_ATTR_VXI_TRIG_SUPPORT(RangeAttribute):
"""VXI trigger lines this implementation supports.
This is a bit vector. Bits 0-7 correspond to VI_TRIG_TTL0 to VI_TRIG_TTL7.
Bits 8-13 correspond to VI_TRIG_ECL0 to VI_TRIG_ECL5. Bits 14-25 correspond
to VI_TRIG_STAR_SLOT1 to VI_TRIG_STAR_SLOT12. Bit 27 corresponds to
VI_TRIG_PANEL_IN and bit 28 corresponds to VI_TRIG_PANEL_OUT. Bits 29-31
correspond to VI_TRIG_STAR_VXI0 to VI_TRIG_STAR_VXI2. VXI does not use
VI_TRIG_TTL8 to VI_TRIG_TTL11.
"""
resources = [
(constants.InterfaceType.vxi, "INSTR"),
(constants.InterfaceType.vxi, "BACKPLANE"),
]
py_name = ""
visa_name = "VI_ATTR_VXI_TRIG_SUPPORT"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 4294967295, None
# GPIB-VXI is not supported
# class AttrVI_ATTR_INTF_PARENT_NUM(RangeAttribute):
# """This attribute shows the current state of the VXI/VME interrupt lines.
# This is a bit vector with bits 0-6 corresponding to interrupt
# lines 1-7.
# """
# resources = [(constants.InterfaceType.vxi, "BACKPLANE")]
# py_name = ""
# visa_name = "VI_ATTR_INTF_PARENT_NUM"
# visa_type = "ViUInt16"
# default = NotAvailable
# read, write, local = True, False, False
# min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_VXI_DEV_CLASS(EnumAttribute):
"""VXI-defined device class to which the resource belongs.
This can be either:
- message based (VI_VXI_CLASS_MESSAGE)
- register based (VI_VXI_CLASS_REGISTER)
- extended (VI_VXI_CLASS_EXTENDED)
- memory (VI_VXI_CLASS_MEMORY)
- other (VI_VXI_CLASS_OTHER)
VME devices are usually either register based or belong to a miscellaneous
class (VI_VXI_CLASS_OTHER).
"""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_VXI_DEV_CLASS"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.VXIClass
class AttrVI_ATTR_VXI_TRIG_DIR(RangeAttribute):
"""Bit map of the directions of the mapped TTL trigger lines.
Bits 0-7 represent TTL triggers 0-7 respectively. A bit's value of 0 means
the line is routed out of the frame, and a value of 1 means into the frame.
In order for a direction to be set, the line must also be enabled using
VI_ATTR_VXI_TRIG_LINES_EN.
"""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_VXI_TRIG_DIR"
visa_type = "ViUInt16"
default = 0
read, write, local = True, True, False
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_VXI_TRIG_LINES_EN(RangeAttribute):
"""Bit map of what VXI TLL triggers have mappings.
Bits 0-7 represent TTL triggers 0-7 respectively. A bit's value of 0 means
the trigger line is unmapped, and 1 means a mapping exists. Use
VI_ATTR_VXI_TRIG_DIR to set an enabled line's direction.
"""
resources = [(constants.InterfaceType.vxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_VXI_TRIG_LINES_EN"
visa_type = "ViUInt16"
default = 0
read, write, local = True, True, False
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_VXI_VME_INTR_STATUS(RangeAttribute):
"""Current state of the VXI/VME interrupt lines.
This is a bit vector with bits 0-6 corresponding to interrupt lines 1-7.
"""
resources = [(constants.InterfaceType.vxi, "BACKPLANE")]
py_name = ""
visa_name = "VI_ATTR_VXI_VME_INTR_STATUS"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 65535, None
class AttrVI_ATTR_VXI_TRIG_STATUS(RangeAttribute):
"""Current state of the VXI trigger lines.
This is a bit vector with bits 0-9 corresponding to VI_TRIG_TTL0
through VI_TRIG_ECL1.
"""
resources = [(constants.InterfaceType.vxi, "BACKPLANE")]
py_name = ""
visa_name = "VI_ATTR_VXI_TRIG_STATUS"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 4294967295, None
class AttrVI_ATTR_VXI_VME_SYSFAIL_STATE(EnumAttribute):
"""Current state of the VXI/VME SYSFAIL (SYStem FAILure) backplane line."""
resources = [(constants.InterfaceType.vxi, "BACKPLANE")]
py_name = ""
visa_name = "VI_ATTR_VXI_VME_SYSFAIL_STATE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.LineState
class AttrVI_ATTR_PXI_DEV_NUM(RangeAttribute):
"""PXI device number."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_DEV_NUM"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 31, None
class AttrVI_ATTR_PXI_FUNC_NUM(RangeAttribute):
"""PCI function number of the PXI/PCI resource.
For most devices, the function number is 0, but a multifunction device may
have a function number up to 7. The meaning of a function number other than
0 is device specific.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_FUNC_NUM"
visa_type = "ViUInt16"
default = 0
read, write, local = True, False, False
min_value, max_value, values = 0, 7, None
class AttrVI_ATTR_PXI_BUS_NUM(RangeAttribute):
"""PCI bus number of this device."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_BUS_NUM"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 255, None
class AttrVI_ATTR_PXI_CHASSIS(RangeAttribute):
"""PXI chassis number of this device.
A value of –1 means the chassis number is unknown.
"""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "BACKPLANE"),
]
py_name = ""
visa_name = "VI_ATTR_PXI_CHASSIS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 255, [-1]
class AttrVI_ATTR_PXI_SLOTPATH(Attribute):
"""Slot path of this device."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_SLOTPATH"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_PXI_SLOT_LBUS_LEFT(RangeAttribute):
"""Slot number or special feature connected to the local bus left lines."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_SLOT_LBUS_LEFT"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = (
1,
18,
[
constants.VI_PXI_LBUS_UNKNOWN,
constants.VI_PXI_LBUS_NONE,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_0,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_1,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_2,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_3,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_4,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_5,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_6,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_7,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_8,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_9,
constants.VI_PXI_STAR_TRIG_CONTROLLER,
constants.VI_PXI_LBUS_SCXI,
],
)
class AttrVI_ATTR_PXI_SLOT_LBUS_RIGHT(RangeAttribute):
"""Slot number or special feature connected to the local bus right lines."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_SLOT_LBUS_RIGHT"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = (
1,
18,
[
constants.VI_PXI_LBUS_UNKNOWN,
constants.VI_PXI_LBUS_NONE,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_0,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_1,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_2,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_3,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_4,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_5,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_6,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_7,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_8,
constants.VI_PXI_LBUS_STAR_TRIG_BUS_9,
constants.VI_PXI_STAR_TRIG_CONTROLLER,
constants.VI_PXI_LBUS_SCXI,
],
)
class AttrVI_ATTR_PXI_IS_EXPRESS(BooleanAttribute):
"""Whether the device is PXI/PCI or PXI/PCI Express."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_IS_EXPRESS"
visa_type = "ViBoolean"
default = NotAvailable
read, write, local = True, False, False
class AttrVI_ATTR_PXI_SLOT_LWIDTH(ValuesAttribute):
"""PCI Express link width of the PXI Express peripheral slot of the device.
A value of –1 indicates that the device is not a PXI Express device.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_SLOT_LWIDTH"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
values = [-1, 1, 4, 8]
class AttrVI_ATTR_PXI_MAX_LWIDTH(ValuesAttribute):
"""Maximum PCI Express link width of the device.
A value of –1 indicates that the device is not a PXI/PCI Express device.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_MAX_LWIDTH"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
values = [-1, 1, 2, 4, 8, 16]
class AttrVI_ATTR_PXI_ACTUAL_LWIDTH(ValuesAttribute):
"""PCI Express link width negotiated between the host controller and the device.
A value of –1 indicates that the device is not a PXI/PCI Express device.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_ACTUAL_LWIDTH"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
values = [-1, 1, 2, 4, 8, 16]
class AttrVI_ATTR_PXI_DSTAR_BUS(RangeAttribute):
"""Differential star bus number of this device.
A value of –1 means the chassis is unidentified or does not have a timing slot.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_DSTAR_BUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = -32768, 32767, None
class AttrVI_ATTR_PXI_DSTAR_SET(RangeAttribute):
"""Set of PXI_DSTAR lines connected to this device."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_DSTAR_SET"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 16, [-1]
class AttrVI_ATTR_PXI_TRIG_BUS(RangeAttribute):
"""The trigger bus number of this device."""
resources = [
(constants.InterfaceType.pxi, "INSTR"),
(constants.InterfaceType.pxi, "BACKPLANE"),
]
py_name = ""
visa_name = "VI_ATTR_PXI_TRIG_BUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, True, True
min_value, max_value, values = 1, 3, [-1]
class AttrVI_ATTR_PXI_STAR_TRIG_BUS(RangeAttribute):
"""The star trigger bus number of this device."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_STAR_TRIG_BUS"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 1, 3, [-1]
class AttrVI_ATTR_PXI_STAR_TRIG_LINE(RangeAttribute):
"""The PXI_STAR line connected to this device."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_name = "VI_ATTR_PXI_STAR_TRIG_LINE"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 32767, None
class AttrVI_ATTR_PXI_SRC_TRIG_BUS(RangeAttribute):
"""VThe segment to use to qualify trigSrc in viMapTrigger."""
resources = [(constants.InterfaceType.pxi, "BACKPLANE")]
py_name = ""
visa_name = "VI_ATTR_PXI_SRC_TRIG_BUS"
visa_type = "ViInt16"
default = -1
read, write, local = True, True, True
min_value, max_value, values = 1, 3, [-1]
class AttrVI_ATTR_PXI_DEST_TRIG_BUS(RangeAttribute):
"""The segment to use to qualify trigDest in viMapTrigger."""
resources = [(constants.InterfaceType.pxi, "BACKPLANE")]
py_name = ""
visa_name = "VI_ATTR_PXI_DEST_TRIG_BUS"
visa_type = "ViInt16"
default = -1
read, write, local = True, True, True
min_value, max_value, values = 1, 3, [-1]
class _AttrVI_ATTR_PXI_MEM_TYPE_BARX(EnumAttribute):
"""Memory type used by the device in the specified BAR (if applicable)."""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, False
enum_type = constants.PXIMemory
class _AttrVI_ATTR_PXI_MEM_BASE_BARX(RangeAttribute):
"""PXI memory base address assigned to the specified BAR.
If the value of the corresponding VI_ATTR_PXI_MEM_TYPE_BARx is
constants.PXIMemory.none, the value of this attribute is meaningless for
the given PXI device.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFFFFFFFF, None
class _AttrVI_ATTR_PXI_MEM_SIZE_BARX(RangeAttribute):
"""Memory size used by the device in the specified BAR.
If the value of the corresponding VI_ATTR_PXI_MEM_TYPE_BARx is
constants.PXIMemory.none, the value of this attribute is meaningless for
the given PXI device.
"""
resources = [(constants.InterfaceType.pxi, "INSTR")]
py_name = ""
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, False
min_value, max_value, values = 0, 0xFFFFFFFF, None
mod = sys.modules[__name__]
for i in range(0, 5):
setattr(
mod,
f"AttrVI_ATTR_PXI_MEM_TYPE_BAR{i}",
type(
f"AttrVI_ATTR_PXI_MEM_TYPE_BAR{i}",
(_AttrVI_ATTR_PXI_MEM_TYPE_BARX,),
{"visa_name": f"VI_ATTR_PXI_MEM_TYPE_BAR{i}"},
),
)
setattr(
mod,
f"AttrVI_ATTR_PXI_MEM_TYPE_BAR{i}",
type(
f"AttrVI_ATTR_PXI_MEM_BASE_BAR{i}",
(_AttrVI_ATTR_PXI_MEM_BASE_BARX,),
{"visa_name": f"VI_ATTR_PXI_MEM_BASE_BAR{i}"},
),
)
setattr(
mod,
f"AttrVI_ATTR_PXI_MEM_TYPE_BAR{i}",
type(
f"AttrVI_ATTR_PXI_MEM_SIZE_BAR{i}",
(_AttrVI_ATTR_PXI_MEM_SIZE_BARX,),
{"visa_name": f"VI_ATTR_PXI_MEM_SIZE_BAR{i}"},
),
)
# --- Event type attributes ------------------------------------------------------------
class AttrVI_ATTR_STATUS(EnumAttribute):
"""Status code of the operation generating this event."""
resources = [constants.EventType.exception, constants.EventType.io_completion]
py_name = "status"
visa_name = "VI_ATTR_STATUS"
visa_type = "ViStatus"
default = NotAvailable
read, write, local = True, False, True
enum_type = constants.StatusCode
class AttrVI_ATTR_OPER_NAME(Attribute):
"""Name of the operation generating this event."""
resources = [constants.EventType.io_completion, constants.EventType.exception]
py_name = "operation_name"
visa_name = "VI_ATTR_OPER_NAME"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_JOB_ID(Attribute):
"""Job ID of the asynchronous operation that has completed."""
resources = [constants.EventType.io_completion]
py_name = "job_id"
visa_name = "VI_ATTR_JOB_ID"
visa_type = "ViJobId"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_RET_COUNT(RangeAttribute):
"""Actual number of elements that were asynchronously transferred."""
resources = [constants.EventType.io_completion]
py_name = "return_count"
visa_name = "VI_ATTR_RET_COUNT"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_BUFFER(Attribute):
"""Buffer that was used in an asynchronous operation."""
resources = [constants.EventType.io_completion]
py_name = "buffer"
visa_name = "VI_ATTR_BUFFER"
visa_type = "ViBuf"
default = NotAvailable
read, write, local = True, False, True
def __get__( # type: ignore
self, instance: Optional["IOCompletionEvent"], owner
) -> Optional[Union[SupportsBytes, "AttrVI_ATTR_BUFFER"]]:
"""Retrieve the buffer stored on the library using the jod Id."""
if instance is None:
return self
# The buffer we need to access has been created in an earlier call
# starting an asynchronous read. When starting that call we stored
# the buffer on the resource and we can now retrieve it
return instance.visalib.get_buffer_from_id(instance.job_id)
class AttrVI_ATTR_RECV_TRIG_ID(EnumAttribute):
"""Id of the trigger that generated the event."""
resources = [constants.EventType.trig]
py_name = "received_trigger_id"
visa_name = "VI_ATTR_RECV_TRIG_ID"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, True
enum_type = constants.TriggerEventID
class AttrVI_ATTR_GPIB_RECV_CIC_STATE(BooleanAttribute):
"""Whether the event by the gain or the loss of the CIC state."""
resources = [constants.EventType.gpib_controller_in_charge]
py_name = "cic_state"
visa_name = "VI_ATTR_GPIB_RECV_CIC_STATE"
visa_type = "ViBool"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_RECV_TCPIP_ADDR(Attribute):
"""Address of the device from which the session received a connection."""
resources = [constants.EventType.tcpip_connect]
py_name = "tcpip_connect"
visa_name = "VI_ATTR_RECV_TCPIP_ADDR"
visa_type = "ViString"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_USB_RECV_INTR_SIZE(RangeAttribute):
"""Size of the data that was received from the USB interrupt-IN pipe."""
resources = [constants.EventType.usb_interrupt]
py_name = "size"
visa_name = "VI_ATTR_USB_RECV_INTR_SIZE"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 0xFFFF, None
class AttrVI_ATTR_USB_RECV_INTR_DATA(Attribute):
"""Actual data that was received from the USB interrupt-IN pipe."""
resources = [constants.EventType.pxi_interrupt]
py_name = "data"
visa_name = "VI_ATTR_USB_RECV_INTR_DATA"
visa_type = "ViBuf"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_SIGP_STATUS_ID(RangeAttribute):
"""16-bit Status/ID retrieved during the IACK cycle or from the Signal register."""
resources = [constants.EventType.vxi_signal_interrupt]
py_name = "signal_register_status_id"
visa_name = "VI_ATTR_SIGP_STATUS_ID"
visa_type = "ViUInt16"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 0xFFFF, None
class AttrVI_ATTR_INTR_STATUS_ID(RangeAttribute):
"""32-bit status/ID retrieved during the IACK cycle."""
resources = [constants.EventType.vxi_vme_interrupt]
py_name = "status_id"
visa_name = "VI_ATTR_INTR_STATUS_ID"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 0, 0xFFFFFFFF, None
class AttrVI_ATTR_RECV_INTR_LEVEL(RangeAttribute):
"""VXI interrupt level on which the interrupt was received."""
resources = [constants.EventType.vxi_vme_interrupt]
py_name = "level"
visa_name = "VI_ATTR_RECV_INTR_LEVEL"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, True
min_value, max_value, values = 1, 7, [constants.VI_UNKNOWN_LEVEL]
class AttrVI_ATTR_PXI_RECV_INTR_SEQ(Attribute):
"""Index of the interrupt sequence that detected the interrupt condition."""
resources = [constants.EventType.pxi_interrupt]
py_name = "sequence"
visa_name = "VI_ATTR_PXI_RECV_INTR_SEQ"
visa_type = "ViInt16"
default = NotAvailable
read, write, local = True, False, True
class AttrVI_ATTR_PXI_RECV_INTR_DATA(Attribute):
"""First PXI/PCI register read in the successful interrupt detection sequence."""
resources = [constants.EventType.pxi_interrupt]
py_name = "data"
visa_name = "VI_ATTR_PXI_RECV_INTR_DATA"
visa_type = "ViUInt32"
default = NotAvailable
read, write, local = True, False, True