From 7f99097a0e4275a84e8eb474f1109fe6c148db9e Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:14:52 -0600 Subject: [PATCH 1/8] Add enable_match_fail_combination --- docs/nidigital/class.rst | 13 +++ generated/nidigital/nidigital/_library.py | 9 +++ .../nidigital/_library_interpreter.py | 8 ++ generated/nidigital/nidigital/session.py | 7 ++ .../nidigital/unit_tests/_mock_helper.py | 9 +++ src/nidigital/metadata/functions_addon.py | 81 +++++++++++++++++++ .../enable_match_fail_combination.py.mako | 0 .../enable_match_fail_combination.py.mako | 8 ++ ...ancy_enable_match_fail_combination.py.mako | 10 +++ 9 files changed, 145 insertions(+) create mode 100644 src/nidigital/templates/_grpc_stub_interpreter.py/enable_match_fail_combination.py.mako create mode 100644 src/nidigital/templates/_library_interpreter.py/enable_match_fail_combination.py.mako create mode 100644 src/nidigital/templates/session.py/fancy_enable_match_fail_combination.py.mako 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..ceeb5b0ea 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(self._vi) # 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..adff1c300 100644 --- a/generated/nidigital/nidigital/session.py +++ b/generated/nidigital/nidigital/session.py @@ -3430,6 +3430,13 @@ 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/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/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..e69de29bb 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..0f30e54c4 --- /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(self._vi) # 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..6d12b03a0 --- /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) \ No newline at end of file From 44f70abdde80179a1ecfe743219bbf5511486f3f Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:56:42 -0600 Subject: [PATCH 2/8] Add a system test --- build/templates/tox-system_tests.ini.mako | 3 +++ generated/nidigital/tox-system_tests.ini | 1 + src/nidigital/system_tests/test_system_nidigital.py | 11 +++++++++++ 3 files changed, 15 insertions(+) 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/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/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 34ae3562d..8d812ca94 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -1330,6 +1330,17 @@ class TestLibrary(SystemTests): def session_creation_kwargs(self): return {} + def test_enable_match_fail_combination(self, multi_instrument_session): + import nisync + + test_files_folder = 'simple_pattern' + multi_instrument_session.load_pin_map(self.get_test_file_path(test_files_folder, "pin_map.pinmap")) + multi_instrument_session.load_pattern(self.get_test_file_path(test_files_folder, 'pattern.digipat')) + with nisync.Sesssion('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') From a1502c40edfd7ee83a92cd5978ca25064facdd53 Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:59:41 -0600 Subject: [PATCH 3/8] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) 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) From 01bb742e7bc09b66e6a3c2bcc15c5fb5d923c475 Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Sun, 2 Feb 2025 10:30:29 -0600 Subject: [PATCH 4/8] Fix typo --- src/nidigital/system_tests/test_system_nidigital.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 8d812ca94..270861131 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -1336,7 +1336,7 @@ def test_enable_match_fail_combination(self, multi_instrument_session): test_files_folder = 'simple_pattern' multi_instrument_session.load_pin_map(self.get_test_file_path(test_files_folder, "pin_map.pinmap")) multi_instrument_session.load_pattern(self.get_test_file_path(test_files_folder, 'pattern.digipat')) - with nisync.Sesssion('6674T') as sync_session: + 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) From 126ad16563d01db357d84de8d64edd50480fa948 Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:47:29 -0600 Subject: [PATCH 5/8] Use pattern and spec files from LabVIEW example and apply levels and timing before calling method --- .../pattern.digipat | Bin 0 -> 4662 bytes .../pin_levels.digilevels | 15 ++++++++ .../pin_map.pinmap | 35 ++++++++++++++++++ .../specifications.specs | 9 +++++ .../timing.digitiming | 23 ++++++++++++ .../system_tests/test_system_nidigital.py | 11 ++++-- 6 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pattern.digipat create mode 100644 src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_levels.digilevels create mode 100644 src/nidigital/system_tests/test_files/test_enable_match_fail_combination/pin_map.pinmap create mode 100644 src/nidigital/system_tests/test_files/test_enable_match_fail_combination/specifications.specs create mode 100644 src/nidigital/system_tests/test_files/test_enable_match_fail_combination/timing.digitiming 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 0000000000000000000000000000000000000000..4a41bca92198524f154c580785515a5bed8c3c6d GIT binary patch literal 4662 zcmcgwU2hvj6y3By`3|2F5{M2@7E)z9P(&*}sx}G5r7aP0`x>ox$MKZiS$B6fPM^pl zZ-{@u|KJDlGs-!$bIm4=r8tqf(#=`V&fI(E&fGgY8E)<7uS8K~-ix9UkRrH-XKL>` zF^I%8t1v_t|!(&}mp!y(wQk0wtJDuBzv5gTrZX5ZA4G_T> zn0$(t4~#W=oo^O7=3+*f-YU(3E(1YwgRHg9_M5gykY-q1*^ z<29Gu04ahT_C9oOtJeXuTwB-q1kDP{E+^#@8WwnCb8U^=t6XX9z6wLz6WR!Eg7ok@ zwAUG$T<>bP%#8MfF+m!8_n5I>=OOm+3g#n0y%Q+h40t9A5>~FHh|i!(yM8-bvh0E! z*ew4bpBCj(!5Rlog0%GxwATr?Ru(JP0&YNAb3rm_)_%v>fz$aiYyT?-Qv_-3Lujuf z#{ARWvZ$vkTz^R>LDKkm0gWGuGLK#71H5KP*j40wNhO=`UNG}rz%$1}D7+;+fZSgQ zp%2_fyMBoEc8ObJs^W{TM!t3m{U>aK2(l-GbYdx2oXHs}Km^HxMf(&MJ~jiJ>O;Sn zm(i;|yNfO61lB0uHsCFvB^o?3DRQRrnMVqv%*0?#-+DB}(rz^HMFU?paJ{|M57C$M zeFL7ua<|H5lX?F#r-0Qv-|N#XDd$J+*64nL6W%&MdF@9hP3$Qx`NCt0}(+IVb-;YY#;L6 z{y)NE0~tVop0VLYF=p?^ZJz@dTu z0sR~L57ggGRGek1u5_w0V|Armq5AxzZH1btjCC4^V5&xX5+4{`^@_1_6Rq@NoKG{| z9ZpQ84t!};m`m4jQQ58|xGwnDP4IDU1Cw&K0iUxv_ru%wU%P#Z4mF z?=I7~eYEUyPe5b`V;3xwC$h14rx0NxzY6tJ#a?N57|$IQ(!eY<$o${UT~Y1Vlxb8 hZUkJ0fmDPr6!6#j&(YD + + + + + 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 @@ + + +
+ + 1 µs + +
+ +
\ 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 270861131..8e48f7714 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -1333,9 +1333,14 @@ def session_creation_kwargs(self): def test_enable_match_fail_combination(self, multi_instrument_session): import nisync - test_files_folder = 'simple_pattern' - multi_instrument_session.load_pin_map(self.get_test_file_path(test_files_folder, "pin_map.pinmap")) - multi_instrument_session.load_pattern(self.get_test_file_path(test_files_folder, 'pattern.digipat')) + 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') From 18e9f8c2280b0734148d18756dafdb472e12eff2 Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:17:53 -0600 Subject: [PATCH 6/8] Correct mistake in library_interpreter method --- generated/nidigital/nidigital/_library_interpreter.py | 2 +- .../enable_match_fail_combination.py.mako | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/generated/nidigital/nidigital/_library_interpreter.py b/generated/nidigital/nidigital/_library_interpreter.py index ceeb5b0ea..e830756ab 100644 --- a/generated/nidigital/nidigital/_library_interpreter.py +++ b/generated/nidigital/nidigital/_library_interpreter.py @@ -369,7 +369,7 @@ def disable_sites(self, site_list): # noqa: N802 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(self._vi) # case S110 + 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/_library_interpreter.py/enable_match_fail_combination.py.mako b/src/nidigital/templates/_library_interpreter.py/enable_match_fail_combination.py.mako index 0f30e54c4..79bff50cb 100644 --- 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 @@ -2,7 +2,7 @@ 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(self._vi) # case S110 + 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 From e2a041d84a0d649bc439422068b74eb4efcd795c Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:19:51 -0600 Subject: [PATCH 7/8] Fix flake8 failure --- generated/nidigital/nidigital/session.py | 1 + .../session.py/fancy_enable_match_fail_combination.py.mako | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/generated/nidigital/nidigital/session.py b/generated/nidigital/nidigital/session.py index adff1c300..3678e5dc3 100644 --- a/generated/nidigital/nidigital/session.py +++ b/generated/nidigital/nidigital/session.py @@ -3436,6 +3436,7 @@ def enable_match_fail_combination(self, sync_session): 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/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 index 6d12b03a0..de0e68749 100644 --- 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 @@ -7,4 +7,4 @@ ${helper.get_function_docstring(f, False, config, indent=8)} ''' - self._interpreter.enable_match_fail_combination([self._interpreter.get_session_handle()], sync_session.session_handle) \ No newline at end of file + self._interpreter.enable_match_fail_combination([self._interpreter.get_session_handle()], sync_session.session_handle) From 6219cb8edac78c4c9901526f3a52cc2168886584 Mon Sep 17 00:00:00 2001 From: Jay Fitzgerald <34140133+ni-jfitzger@users.noreply.github.com> Date: Wed, 19 Feb 2025 16:28:04 -0600 Subject: [PATCH 8/8] Added the requested comment --- .../enable_match_fail_combination.py.mako | 5 +++++ 1 file changed, 5 insertions(+) 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 index e69de29bb..7e0404ed2 100644 --- 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 @@ -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