|
4 | 4 | import array |
5 | 5 | import ctypes |
6 | 6 | import hightime # noqa: F401 |
| 7 | +import platform |
| 8 | + |
7 | 9 | import nifgen._library_singleton as _library_singleton |
8 | 10 | import nifgen._visatype as _visatype |
9 | 11 | import nifgen.enums as enums # noqa: F401 |
10 | 12 | import nifgen.errors as errors |
11 | 13 |
|
12 | 14 |
|
| 15 | +_was_runtime_environment_set = None |
| 16 | + |
| 17 | + |
13 | 18 | # Helper functions for creating ctypes needed for calling into the driver DLL |
14 | 19 | def _get_ctypes_pointer_for_buffer(value=None, library_type=None, size=None): |
15 | 20 | if isinstance(value, array.array): |
@@ -56,6 +61,21 @@ class LibraryInterpreter(object): |
56 | 61 | def __init__(self, encoding): |
57 | 62 | self._encoding = encoding |
58 | 63 | self._library = _library_singleton.get() |
| 64 | + global _was_runtime_environment_set |
| 65 | + if _was_runtime_environment_set is None: |
| 66 | + try: |
| 67 | + runtime_env = platform.python_implementation() |
| 68 | + version = platform.python_version() |
| 69 | + self.set_runtime_environment( |
| 70 | + runtime_env, |
| 71 | + version, |
| 72 | + '', |
| 73 | + '' |
| 74 | + ) |
| 75 | + except errors.DriverTooOldError: |
| 76 | + pass |
| 77 | + finally: |
| 78 | + _was_runtime_environment_set = True |
59 | 79 | # Initialize _vi to 0 for now. |
60 | 80 | # Session will directly update it once the driver runtime init function has been called and |
61 | 81 | # we have a valid session handle. |
@@ -616,6 +636,15 @@ def set_named_waveform_next_write_position(self, channel_name, waveform_name, re |
616 | 636 | errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) |
617 | 637 | return |
618 | 638 |
|
| 639 | + def set_runtime_environment(self, environment, environment_version, reserved1, reserved2): # noqa: N802 |
| 640 | + environment_ctype = ctypes.create_string_buffer(environment.encode(self._encoding)) # case C020 |
| 641 | + environment_version_ctype = ctypes.create_string_buffer(environment_version.encode(self._encoding)) # case C020 |
| 642 | + reserved1_ctype = ctypes.create_string_buffer(reserved1.encode(self._encoding)) # case C020 |
| 643 | + reserved2_ctype = ctypes.create_string_buffer(reserved2.encode(self._encoding)) # case C020 |
| 644 | + error_code = self._library.niFgen_SetRuntimeEnvironment(environment_ctype, environment_version_ctype, reserved1_ctype, reserved2_ctype) |
| 645 | + errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) |
| 646 | + return |
| 647 | + |
619 | 648 | def set_waveform_next_write_position(self, channel_name, waveform_handle, relative_to, offset): # noqa: N802 |
620 | 649 | vi_ctype = _visatype.ViSession(self._vi) # case S110 |
621 | 650 | channel_name_ctype = ctypes.create_string_buffer(channel_name.encode(self._encoding)) # case C010 |
|
0 commit comments