diff --git a/nixnet/nx.py b/nixnet/nx.py index 855948a5..eb3d3380 100644 --- a/nixnet/nx.py +++ b/nixnet/nx.py @@ -885,12 +885,6 @@ def convert_signals_to_frames_single_point( raise NotImplementedError("Placeholder") -def blink( - interface_ref, - modifier): - _funcs.nx_blink(interface_ref, modifier) - - def clear( session_ref): _funcs.nx_clear(session_ref) @@ -927,15 +921,6 @@ def stop( _funcs.nx_stop(session_ref, scope) -def system_open(): - return _funcs.nx_system_open() - - -def system_close( - system_ref): - _funcs.nx_system_open(system_ref) - - def wait( session_ref, condition, diff --git a/nixnet/system/__init__.py b/nixnet/system/__init__.py new file mode 100644 index 00000000..57c942ea --- /dev/null +++ b/nixnet/system/__init__.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + + +from nixnet.system.device import Device +from nixnet.system.interface import Interface +from nixnet.system.system import System + + +__all__ = ["System", "Device", "Interface"] diff --git a/nixnet/system/device.py b/nixnet/system/device.py new file mode 100644 index 00000000..fd913ef1 --- /dev/null +++ b/nixnet/system/device.py @@ -0,0 +1,63 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from nixnet import _props +from nixnet import constants + + +class Device(object): + + def __init__(self, handle): + self._handle = handle + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self._handle == other._handle + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._handle) + + def __repr__(self): + return 'Device(handle={0})'.format(self._handle) + + @property + def form_fac(self): + return constants.DevForm(_props.get_device_form_fac(self._handle)) + + @property + def intf_refs(self): + return _props.get_device_intf_refs(self._handle) + + @property + def name(self): + return _props.get_device_name(self._handle) + + @property + def num_ports(self): + return _props.get_device_num_ports(self._handle) + + @property + def product_num(self): + return _props.get_device_product_num(self._handle) + + @property + def ser_num(self): + return _props.get_device_ser_num(self._handle) + + @property + def slot_num(self): + return _props.get_device_slot_num(self._handle) + + @property + def num_ports_all(self): + return _props.get_device_num_ports_all(self._handle) + + @property + def intf_refs_all(self): + return _props.get_device_intf_refs_all(self._handle) diff --git a/nixnet/system/interface.py b/nixnet/system/interface.py new file mode 100644 index 00000000..1e220fd7 --- /dev/null +++ b/nixnet/system/interface.py @@ -0,0 +1,83 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from nixnet import _funcs +from nixnet import _props +from nixnet import constants + + +class Interface(object): + + def __init__(self, handle): + self._handle = handle + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self._handle == other._handle + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._handle) + + def __repr__(self): + return 'Interface(handle={0})'.format(self._handle) + + @property + def dev_ref(self): + return _props.get_interface_dev_ref(self._handle) + + @property + def name(self): + return _props.get_interface_name(self._handle) + + @property + def num(self): + return _props.get_interface_num(self._handle) + + @property + def port_num(self): + return _props.get_interface_port_num(self._handle) + + @property + def protocol(self): + return constants.Protocol(_props.get_interface_protocol(self._handle)) + + @property + def can_term_cap(self): + return constants.CanTermCap(_props.get_interface_can_term_cap(self._handle)) + + @property + def can_tcvr_cap(self): + return constants.CanTcvrCap(_props.get_interface_can_tcvr_cap(self._handle)) + + @property + def dongle_state(self): + return constants.DongleState(_props.get_interface_dongle_state(self._handle)) + + @property + def dongle_id(self): + return constants.DongleId(_props.get_interface_dongle_id(self._handle)) + + @property + def dongle_revision(self): + return _props.get_interface_dongle_revision(self._handle) + + @property + def dongle_firmware_version(self): + return _props.get_interface_dongle_firmware_version(self._handle) + + @property + def dongle_compatible_revision(self): + return _props.get_interface_dongle_compatible_revision(self._handle) + + @property + def dongle_compatible_firmware_version(self): + return _props.get_interface_dongle_compatible_firmware_version(self._handle) + + def blink(self, modifier): + _funcs.nx_blink(self._handle, modifier) diff --git a/nixnet/system/system.py b/nixnet/system/system.py new file mode 100644 index 00000000..3b7eb8c5 --- /dev/null +++ b/nixnet/system/system.py @@ -0,0 +1,107 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import warnings + +from nixnet import _funcs +from nixnet import _props +from nixnet import constants +from nixnet import errors + + +class System(object): + + def __init__(self): + self._handle = _funcs.nx_system_open() + + 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): + self.close() + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self._handle == other._handle + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._handle) + + def __repr__(self): + return 'System(handle={0})'.format(self._handle) + + def close(self): + 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 dev_refs(self): + return _props.get_system_dev_refs(self._handle) + + @property + def intf_refs(self): + return _props.get_system_intf_refs(self._handle) + + @property + def intf_refs_can(self): + return _props.get_system_intf_refs_can(self._handle) + + @property + def intf_refs_flex_ray(self): + return _props.get_system_intf_refs_flex_ray(self._handle) + + @property + def intf_refs_lin(self): + return _props.get_system_intf_refs_lin(self._handle) + + @property + def ver_build(self): + return _props.get_system_ver_build(self._handle) + + @property + def ver_major(self): + return _props.get_system_ver_major(self._handle) + + @property + def ver_minor(self): + return _props.get_system_ver_minor(self._handle) + + @property + def ver_phase(self): + return constants.Phase(_props.get_system_ver_phase(self._handle)) + + @property + def ver_update(self): + return _props.get_system_ver_update(self._handle) + + @property + def cdaq_pkt_time(self): + return _props.get_system_cdaq_pkt_time(self._handle) + + @cdaq_pkt_time.setter + def cdaq_pkt_time(self, value): + _props.set_system_cdaq_pkt_time(self._handle, value) + + @property + def intf_refs_all(self): + return _props.get_system_intf_refs_all(self._handle)