Source code for nixnet.system.system

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import typing  # NOQA: F401
import warnings

from nixnet import _cconsts
from nixnet import _funcs
from nixnet import _props
from nixnet import constants
from nixnet import errors
from nixnet import types

from nixnet.system import _collection
from nixnet.system import _databases
from nixnet.system import _device
from nixnet.system import _interface


[docs]class System(object): '''Interact with the NI driver and interface hardware.''' def __init__(self): # type: () -> None self._handle = None # To satisfy `__del__` in case nx_system_open throws self._handle = _funcs.nx_system_open() self._databases = _databases.AliasCollection(self._handle) self._devices = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_DEV_REFS, _device.Device) self._intfs = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_INTF_REFS, _interface.Interface) self._intfs_all = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_INTF_REFS_ALL, _interface.Interface) self._intfs_can = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_INTF_REFS_CAN, _interface.Interface) self._intfs_flex_ray = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_INTF_REFS_FLEX_RAY, _interface.Interface) self._intfs_lin = _collection.SystemCollection( self._handle, _cconsts.NX_PROP_SYS_INTF_REFS_LIN, _interface.Interface) def __del__(self): if self._handle is not None: warnings.warn( 'System was not explicitly closed before it was destructed. ' 'Resources on the device may still be reserved.', errors.XnetResourceWarning) def __enter__(self): return self def __exit__(self, exception_type, exception_value, traceback): self.close() def __eq__(self, other): if isinstance(other, self.__class__): return self._handle == typing.cast(System, other)._handle else: return NotImplemented def __ne__(self, other): result = self.__eq__(other) if result is NotImplemented: return result else: return not result def __hash__(self): return hash(self._handle) def __repr__(self): # type: () -> typing.Text return '{}(handle={})'.format(type(self).__name__, self._handle) def close(self): # type: () -> None if self._handle is None: warnings.warn( 'Attempting to close NI-XNET system but system was already ' 'closed', errors.XnetResourceWarning) return _funcs.nx_system_close(self._handle) self._handle = None @property def databases(self): # type: () -> _databases.AliasCollection """:any:`nixnet.system._databases.AliasCollection`: Operate on systems's database's aliases""" return self._databases @property def dev_refs(self): # type: () -> _collection.SystemCollection '''iter of :any:`nixnet.system._device.Device`: Physical XNET devices in the system.''' return self._devices @property def intf_refs(self): # type: () -> _collection.SystemCollection '''iter of :any:`nixnet.system._interface.Interface`: Available interfaces on the system.''' return self._intfs @property def intf_refs_all(self): # type: () -> _collection.SystemCollection '''iter of :any:`nixnet.system._interface.Interface`: Available interfaces on the system. This Includes those not equipped with a Transceiver Cable. ''' return self._intfs_all @property def intf_refs_can(self): # type: () -> _collection.SystemCollection '''iter of :any:`nixnet.system._interface.Interface`: Available interfaces on the system (CAN Protocol).''' return self._intfs_can @property def intf_refs_flex_ray(self): # type: () -> _collection.SystemCollection return self._intfs_flex_ray @property def intf_refs_lin(self): # type: () -> _collection.SystemCollection '''iter of :any:`nixnet.system._interface.Interface`: Available interfaces on the system (LIN Protocol).''' return self._intfs_lin @property def ver(self): # type: () -> types.DriverVersion ''':any:`nixnet.types.DriverVersion`: The driver version (larger numbers imply a newer version). Use this for: * Determining the driver functionality or release date * Determining upgrade availability ''' return types.DriverVersion( self._ver_major, self._ver_minor, self._ver_update, self._ver_phase, self._ver_build) @property def _ver_build(self): # type: () -> int return _props.get_system_ver_build(self._handle) @property def _ver_major(self): # type: () -> int return _props.get_system_ver_major(self._handle) @property def _ver_minor(self): # type: () -> int return _props.get_system_ver_minor(self._handle) @property def _ver_phase(self): # type: () -> constants.Phase return constants.Phase(_props.get_system_ver_phase(self._handle)) @property def _ver_update(self): # type: () -> int return _props.get_system_ver_update(self._handle)