diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24b51fb89..ec708faa7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,6 +52,8 @@ All notable changes to this project will be documented in this file.
* #### Removed
* ### `nidigital` (NI-Digital Pattern Driver)
* #### Added
+ * Methods Added:
+ * `enable_match_fail_combination`
* #### Changed
* #### Removed
* ### `nidmm` (NI-DMM)
diff --git a/build/templates/tox-system_tests.ini.mako b/build/templates/tox-system_tests.ini.mako
index cd3f27d5a..07c97bd6f 100644
--- a/build/templates/tox-system_tests.ini.mako
+++ b/build/templates/tox-system_tests.ini.mako
@@ -73,6 +73,9 @@ deps =
% if uses_other_wheel:
${wheel_env_no_py}: build
+% endif
+% if module_name == 'nidigital':
+ ${module_name}-system_tests: nisync
% endif
${module_name}-system_tests: pytest
${module_name}-system_tests: coverage
diff --git a/docs/nidigital/class.rst b/docs/nidigital/class.rst
index e7738482e..757baeb72 100644
--- a/docs/nidigital/class.rst
+++ b/docs/nidigital/class.rst
@@ -1326,6 +1326,19 @@ disable_sites
Example: :py:meth:`my_session.disable_sites`
+enable_match_fail_combination
+-----------------------------
+
+ .. py:currentmodule:: nidigital.Session
+
+ .. py:method:: enable_match_fail_combination()
+
+ Configures digital pattern instruments and the PXIe-6674T timing and synchronization instrument to combine pattern comparison results and control subsequent pattern execution across digital pattern instruments based on those results. You must initialize the PXIe-6674T using NI-Sync and call this method from a multi-instrument session.
+
+
+
+
+
enable_sites
------------
diff --git a/generated/nidigital/nidigital/_library.py b/generated/nidigital/nidigital/_library.py
index f37419372..1f1d78ed1 100644
--- a/generated/nidigital/nidigital/_library.py
+++ b/generated/nidigital/nidigital/_library.py
@@ -49,6 +49,7 @@ def __init__(self, ctypes_library):
self.niDigital_CreateTimeSet_cfunc = None
self.niDigital_DeleteAllTimeSets_cfunc = None
self.niDigital_DisableSites_cfunc = None
+ self.niDigital_EnableMatchFailCombination_cfunc = None
self.niDigital_EnableSites_cfunc = None
self.niDigital_FetchCaptureWaveformU32_cfunc = None
self.niDigital_FetchHistoryRAMCycleInformation_cfunc = None
@@ -346,6 +347,14 @@ def niDigital_DisableSites(self, vi, site_list): # noqa: N802
self.niDigital_DisableSites_cfunc.restype = ViStatus # noqa: F405
return self.niDigital_DisableSites_cfunc(vi, site_list)
+ def niDigital_EnableMatchFailCombination(self, session_count, sessions, sync_session): # noqa: N802
+ with self._func_lock:
+ if self.niDigital_EnableMatchFailCombination_cfunc is None:
+ self.niDigital_EnableMatchFailCombination_cfunc = self._get_library_function('niDigital_EnableMatchFailCombination')
+ self.niDigital_EnableMatchFailCombination_cfunc.argtypes = [ViUInt32, ctypes.POINTER(ViSession), ViSession] # noqa: F405
+ self.niDigital_EnableMatchFailCombination_cfunc.restype = ViStatus # noqa: F405
+ return self.niDigital_EnableMatchFailCombination_cfunc(session_count, sessions, sync_session)
+
def niDigital_EnableSites(self, vi, site_list): # noqa: N802
with self._func_lock:
if self.niDigital_EnableSites_cfunc is None:
diff --git a/generated/nidigital/nidigital/_library_interpreter.py b/generated/nidigital/nidigital/_library_interpreter.py
index 9d85229bf..e830756ab 100644
--- a/generated/nidigital/nidigital/_library_interpreter.py
+++ b/generated/nidigital/nidigital/_library_interpreter.py
@@ -366,6 +366,14 @@ def disable_sites(self, site_list): # noqa: N802
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
+ def enable_match_fail_combination(self, sessions, sync_session): # noqa: N802
+ session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
+ sessions_ctype = _get_ctypes_pointer_for_buffer(value=sessions, library_type=_visatype.ViSession) # case B550
+ sync_session_ctype = _visatype.ViSession(sync_session) # case S110
+ error_code = self._library.niDigital_EnableMatchFailCombination(session_count_ctype, sessions_ctype, sync_session_ctype)
+ errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
+ return
+
def enable_sites(self, site_list): # noqa: N802
vi_ctype = _visatype.ViSession(self._vi) # case S110
site_list_ctype = ctypes.create_string_buffer(site_list.encode(self._encoding)) # case C010
diff --git a/generated/nidigital/nidigital/session.py b/generated/nidigital/nidigital/session.py
index 8a5d2edfc..3678e5dc3 100644
--- a/generated/nidigital/nidigital/session.py
+++ b/generated/nidigital/nidigital/session.py
@@ -3429,6 +3429,14 @@ def delete_all_time_sets(self):
'''
self._interpreter.delete_all_time_sets()
+ @ivi_synchronized
+ def enable_match_fail_combination(self, sync_session):
+ '''enable_match_fail_combination
+
+ Configures digital pattern instruments and the PXIe-6674T timing and synchronization instrument to combine pattern comparison results and control subsequent pattern execution across digital pattern instruments based on those results. You must initialize the PXIe-6674T using NI-Sync and call this method from a multi-instrument session.
+ '''
+ self._interpreter.enable_match_fail_combination([self._interpreter.get_session_handle()], sync_session.session_handle)
+
@ivi_synchronized
def load_specifications_levels_and_timing(self, specifications_file_paths=None, levels_file_paths=None, timing_file_paths=None):
'''load_specifications_levels_and_timing
diff --git a/generated/nidigital/nidigital/unit_tests/_mock_helper.py b/generated/nidigital/nidigital/unit_tests/_mock_helper.py
index 8f2e25132..5a5e111dc 100644
--- a/generated/nidigital/nidigital/unit_tests/_mock_helper.py
+++ b/generated/nidigital/nidigital/unit_tests/_mock_helper.py
@@ -72,6 +72,8 @@ def __init__(self):
self._defaults['DeleteAllTimeSets']['return'] = 0
self._defaults['DisableSites'] = {}
self._defaults['DisableSites']['return'] = 0
+ self._defaults['EnableMatchFailCombination'] = {}
+ self._defaults['EnableMatchFailCombination']['return'] = 0
self._defaults['EnableSites'] = {}
self._defaults['EnableSites']['return'] = 0
self._defaults['FetchCaptureWaveformU32'] = {}
@@ -407,6 +409,11 @@ def niDigital_DisableSites(self, vi, site_list): # noqa: N802
return self._defaults['DisableSites']['return']
return self._defaults['DisableSites']['return']
+ def niDigital_EnableMatchFailCombination(self, session_count, sessions, sync_session): # noqa: N802
+ if self._defaults['EnableMatchFailCombination']['return'] != 0:
+ return self._defaults['EnableMatchFailCombination']['return']
+ return self._defaults['EnableMatchFailCombination']['return']
+
def niDigital_EnableSites(self, vi, site_list): # noqa: N802
if self._defaults['EnableSites']['return'] != 0:
return self._defaults['EnableSites']['return']
@@ -1179,6 +1186,8 @@ def set_side_effects_and_return_values(self, mock_library):
mock_library.niDigital_DeleteAllTimeSets.return_value = 0
mock_library.niDigital_DisableSites.side_effect = MockFunctionCallError("niDigital_DisableSites")
mock_library.niDigital_DisableSites.return_value = 0
+ mock_library.niDigital_EnableMatchFailCombination.side_effect = MockFunctionCallError("niDigital_EnableMatchFailCombination")
+ mock_library.niDigital_EnableMatchFailCombination.return_value = 0
mock_library.niDigital_EnableSites.side_effect = MockFunctionCallError("niDigital_EnableSites")
mock_library.niDigital_EnableSites.return_value = 0
mock_library.niDigital_FetchCaptureWaveformU32.side_effect = MockFunctionCallError("niDigital_FetchCaptureWaveformU32")
diff --git a/generated/nidigital/tox-system_tests.ini b/generated/nidigital/tox-system_tests.ini
index 4bcef3a22..8c3ee95c4 100644
--- a/generated/nidigital/tox-system_tests.ini
+++ b/generated/nidigital/tox-system_tests.ini
@@ -39,6 +39,7 @@ commands =
deps =
nidigital-wheel_dep: build
+ nidigital-system_tests: nisync
nidigital-system_tests: pytest
nidigital-system_tests: coverage
nidigital-system_tests: numpy
diff --git a/src/nidigital/metadata/functions_addon.py b/src/nidigital/metadata/functions_addon.py
index f738d04a5..ef43e2fab 100644
--- a/src/nidigital/metadata/functions_addon.py
+++ b/src/nidigital/metadata/functions_addon.py
@@ -535,3 +535,84 @@
],
},
}
+
+functions_additional_enable_match_fail_combination = {
+ 'EnableMatchFailCombination': {
+ 'codegen_method': 'yes',
+ 'method_templates': [
+ {
+ 'documentation_filename': 'default_method',
+ 'library_interpreter_filename': 'enable_match_fail_combination',
+ 'method_python_name_suffix': '',
+ 'session_filename': 'none',
+ }
+ ],
+ 'documentation': {
+ 'description': 'Configures digital pattern instruments and the PXIe-6674T timing and synchronization instrument to combine pattern comparison results and control subsequent pattern execution across digital pattern instruments based on those results. You must initialize the PXIe-6674T using NI-Sync and use the niTClk Synchronize function to synchronize instruments before calling the niDigital_EnableMatchFailCombination function.\n'
+ },
+ 'included_in_proto': False,
+ 'parameters': [
+ {
+ 'direction': 'in',
+ 'documentation': {
+ 'description': 'Number of sessions.\n'
+ },
+ 'name': 'sessionCount',
+ 'type': 'ViUInt32'
+ },
+ {
+ 'direction': 'in',
+ 'documentation': {
+ 'description': 'The specified array of sessions synchronized using NI-TClk.\n'
+ },
+ 'name': 'sessions',
+ 'size': {
+ 'mechanism': 'passed-in',
+ 'value': 'sessionCount'
+ },
+ 'type': 'ViSession[]'
+ },
+ {
+ 'direction': 'in',
+ 'documentation': {
+ 'description': 'The specified NI-Sync session.\n'
+ },
+ 'name': 'syncSession',
+ 'type': 'ViSession'
+ }
+ ],
+ 'returns': 'ViStatus'
+ },
+ 'FancyEnableMatchFailCombination': {
+ 'python_name': 'enable_match_fail_combination',
+ 'codegen_method': 'python-only',
+ 'method_templates': [
+ {
+ 'documentation_filename': 'default_method',
+ 'library_interpreter_filename': 'none',
+ 'method_python_name_suffix': '',
+ 'session_filename': 'fancy_enable_match_fail_combination',
+ }
+ ],
+ 'documentation': {
+ 'description': 'Configures digital pattern instruments and the PXIe-6674T timing and synchronization instrument to combine pattern comparison results and control subsequent pattern execution across digital pattern instruments based on those results. You must initialize the PXIe-6674T using NI-Sync and call this method from a multi-instrument session.\n'
+ },
+ 'included_in_proto': True,
+ 'parameters': [
+ {
+ 'direction': 'in',
+ 'name': 'vi',
+ 'type': 'ViSession'
+ },
+ {
+ 'direction': 'in',
+ 'documentation': {
+ 'description': 'The specified NI-Sync session.\n'
+ },
+ 'name': 'syncSession',
+ 'type': 'ViSession'
+ }
+ ],
+ 'returns': 'ViStatus'
+ },
+}
\ No newline at end of file
diff --git a/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pattern.digipat b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pattern.digipat
new file mode 100644
index 000000000..4a41bca92
Binary files /dev/null and b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pattern.digipat differ
diff --git a/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_levels.digilevels b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_levels.digilevels
new file mode 100644
index 000000000..35dc1d186
--- /dev/null
+++ b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_levels.digilevels
@@ -0,0 +1,15 @@
+
+
+
+
+
+ 0
+ 3.3
+ 0.8
+ 2
+ 0
+ HighZ
+
+
+
+
\ No newline at end of file
diff --git a/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_map.pinmap b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_map.pinmap
new file mode 100644
index 000000000..9ae95d34f
--- /dev/null
+++ b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_map.pinmap
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/specifications.specs b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/specifications.specs
new file mode 100644
index 000000000..51ba58bb5
--- /dev/null
+++ b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/specifications.specs
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/timing.digitiming b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/timing.digitiming
new file mode 100644
index 000000000..1a44a993e
--- /dev/null
+++ b/src/nidigital/system_tests/test_files/test_enable_match_fail_combination/timing.digitiming
@@ -0,0 +1,23 @@
+
+
+
+
+
+ timing.period
+
+
+
+ 0 ns
+ timing.period / 2
+ timing.period
+
+
+ (3 * timing.period) / 4
+
+ Pattern
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py
index 34ae3562d..8e48f7714 100644
--- a/src/nidigital/system_tests/test_system_nidigital.py
+++ b/src/nidigital/system_tests/test_system_nidigital.py
@@ -1330,6 +1330,22 @@ class TestLibrary(SystemTests):
def session_creation_kwargs(self):
return {}
+ def test_enable_match_fail_combination(self, multi_instrument_session):
+ import nisync
+
+ test_name = self.test_enable_match_fail_combination.__name__
+ multi_instrument_session.load_pin_map(self.get_test_file_path(test_name, 'pin_map.pinmap'))
+ multi_instrument_session.load_pattern(self.get_test_file_path(test_name, 'pattern.digipat'))
+ multi_instrument_session.load_specifications_levels_and_timing(
+ specifications_file_paths=self.get_test_file_path(test_name, 'specifications.specs'),
+ levels_file_paths=self.get_test_file_path(test_name, 'pin_levels.digilevels'),
+ timing_file_paths=self.get_test_file_path(test_name, 'timing.digitiming'))
+ multi_instrument_session.apply_levels_and_timing(levels_sheet='pin_levels', timing_sheet='timing')
+ with nisync.Session('6674T') as sync_session:
+ multi_instrument_session.enable_match_fail_combination(sync_session)
+ multi_instrument_session.burst_pattern(start_label='new_pattern')
+ multi_instrument_session.read_sequencer_flag(nidigital.SequencerFlag.FLAG0)
+
class TestGrpc(SystemTests):
@pytest.fixture(scope='class')
diff --git a/src/nidigital/templates/_grpc_stub_interpreter.py/enable_match_fail_combination.py.mako b/src/nidigital/templates/_grpc_stub_interpreter.py/enable_match_fail_combination.py.mako
new file mode 100644
index 000000000..7e0404ed2
--- /dev/null
+++ b/src/nidigital/templates/_grpc_stub_interpreter.py/enable_match_fail_combination.py.mako
@@ -0,0 +1,5 @@
+## This file is empty. We won't support gRPC, for now.
+## Even though gRPC Device supports the function, the nisync Python API lacks gRPC support, so there's no point.
+## If a user tries to call enable_match_fail_combination with a session runing on a gRPC Device Server, they will get an error
+## because the method does not exist in _grpc_stub_interpreter.py.
+## Most likely it will be an AttributeError, though it hasn't been tested.
\ No newline at end of file
diff --git a/src/nidigital/templates/_library_interpreter.py/enable_match_fail_combination.py.mako b/src/nidigital/templates/_library_interpreter.py/enable_match_fail_combination.py.mako
new file mode 100644
index 000000000..79bff50cb
--- /dev/null
+++ b/src/nidigital/templates/_library_interpreter.py/enable_match_fail_combination.py.mako
@@ -0,0 +1,8 @@
+
+ def enable_match_fail_combination(self, sessions, sync_session): # noqa: N802
+ session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
+ sessions_ctype = _get_ctypes_pointer_for_buffer(value=sessions, library_type=_visatype.ViSession) # case B550
+ sync_session_ctype = _visatype.ViSession(sync_session) # case S110
+ error_code = self._library.niDigital_EnableMatchFailCombination(session_count_ctype, sessions_ctype, sync_session_ctype)
+ errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
+ return
diff --git a/src/nidigital/templates/session.py/fancy_enable_match_fail_combination.py.mako b/src/nidigital/templates/session.py/fancy_enable_match_fail_combination.py.mako
new file mode 100644
index 000000000..de0e68749
--- /dev/null
+++ b/src/nidigital/templates/session.py/fancy_enable_match_fail_combination.py.mako
@@ -0,0 +1,10 @@
+<%page args="f, config, method_template"/>\
+<%
+ import build.helper as helper
+%>\
+ def ${f['python_name']}(self, sync_session):
+ '''${f['python_name']}
+
+ ${helper.get_function_docstring(f, False, config, indent=8)}
+ '''
+ self._interpreter.enable_match_fail_combination([self._interpreter.get_session_handle()], sync_session.session_handle)