"""Defines a root class which is used to identify and control Gsm signal configuration."""
import functools
import math
import nirfmxgsm.attributes as attributes
import nirfmxgsm.enums as enums
import nirfmxgsm.errors as errors
import nirfmxgsm.internal._helper as _helper
import nirfmxgsm.modacc as modacc
import nirfmxgsm.orfs as orfs
import nirfmxgsm.pvt as pvt
import nirfmxinstr
from nirfmxgsm.internal._helper import SignalConfiguration
class _GsmSignalConfiguration:
"""Contains static methods to create and delete Gsm signal."""
@staticmethod
def get_gsm_signal_configuration(instr_session, signal_name="", cloning=False):
updated_signal_name = signal_name
if signal_name:
updated_signal_name = _helper.validate_and_remove_signal_qualifier(
signal_name, "signal_name"
)
_helper.validate_signal_not_empty(updated_signal_name, "signal_name")
return _GsmSignalConfiguration.init(instr_session, updated_signal_name, cloning) # type: ignore
@staticmethod
def init(instr_session, signal_name, cloning):
with instr_session._signal_lock:
if signal_name.lower() == Gsm._default_signal_name_user_visible.lower():
signal_name = Gsm._default_signal_name
existing_signal = instr_session._signal_manager.find_signal_configuration(
Gsm._signal_configuration_type, signal_name
)
if existing_signal is None:
signal_configuration = Gsm(instr_session, signal_name, cloning) # type: ignore
instr_session._signal_manager.add_signal_configuration(signal_configuration)
else:
signal_configuration = existing_signal
# Checking if signal exists in C layer
if signal_configuration._interpreter.check_if_current_signal_exists() is False:
if not signal_configuration.signal_configuration_name.lower():
instr_session._interpreter.create_default_signal_configuration(
Gsm._default_signal_name_user_visible,
int(math.log(nirfmxinstr.Personalities.GSM.value, 2.0)) + 1,
)
else:
signal_configuration._interpreter.create_signal_configuration(signal_name)
return signal_configuration
@staticmethod
def remove_signal_configuration(instr_session, signal_configuration):
with instr_session._signal_lock:
instr_session._signal_manager.remove_signal_configuration(signal_configuration)
def _raise_if_disposed(f):
"""From https://stackoverflow.com/questions/5929107/decorators-with-parameters."""
@functools.wraps(f)
def aux(*xs, **kws):
signal = xs[0] # parameter 0 is 'self' which is the signal object
if signal.is_disposed:
raise Exception("Cannot access a disposed Gsm signal configuration")
return f(*xs, **kws)
return aux
class _GsmBase(SignalConfiguration):
"""Defines a base class for Gsm."""
_default_signal_name = ""
_default_signal_name_user_visible = "default@GSM"
_signal_configuration_type = "<'nirfmxgsm.gsm.Gsm'>"
def __init__(self, session, signal_name="", cloning=False):
self.is_disposed = False
self._rfmxinstrsession = session
self._rfmxinstrsession_interpreter = session._interpreter
self.signal_configuration_name = signal_name
self.signal_configuration_type = type(self) # type: ignore
self._signal_configuration_mode = "Signal"
if session._is_remote_session:
import nirfmxgsm.internal._grpc_stub_interpreter as _grpc_stub_interpreter
interpreter = _grpc_stub_interpreter.GrpcStubInterpreter(session._grpc_options, session, self) # type: ignore
else:
from nirfmxgsm.internal._library_interpreter import LibraryInterpreter
interpreter = LibraryInterpreter("windows-1251", session, self) # type: ignore
self._interpreter = interpreter
self._interpreter.set_session_handle(self._rfmxinstrsession_interpreter._vi) # type: ignore
self._session_function_lock = _helper.SessionFunctionLock()
# Measurements object
self.pvt = pvt.Pvt(self) # type: ignore
self.orfs = orfs.Orfs(self) # type: ignore
self.modacc = modacc.ModAcc(self) # type: ignore
if not signal_name and not cloning:
signal_exists, personality, _ = (
self._rfmxinstrsession_interpreter.check_if_signal_exists(
self._default_signal_name_user_visible
)
)
if not (signal_exists and personality.value == nirfmxinstr.Personalities.GSM.value):
self._rfmxinstrsession_interpreter.create_default_signal_configuration(
self._default_signal_name_user_visible,
int(math.log(nirfmxinstr.Personalities.GSM.value, 2.0)) + 1,
)
elif signal_name and not cloning:
signal_exists, personality, _ = (
self._rfmxinstrsession_interpreter.check_if_signal_exists(signal_name)
)
if not (signal_exists and personality.value == nirfmxinstr.Personalities.GSM.value):
self._interpreter.create_signal_configuration(signal_name) # type: ignore
def __enter__(self):
"""Enters the context of the Gsm signal configuration."""
return self
def __exit__(self, exc_type, exc_value, traceback):
"""Exits the context of the Gsm signal configuration."""
self.dispose() # type: ignore
pass
def dispose(self):
r"""Deletes the signal configuration if it is not the default signal configuration
and clears any trace of the current signal configuration, if any.
.. note::
You can call this function safely more than once, even if the signal is already deleted.
"""
if not self.is_disposed:
if self.signal_configuration_name == self._default_signal_name:
self.is_disposed = True
return
else:
_ = self._delete_signal_configuration(True) # type: ignore
self.is_disposed = True
@_raise_if_disposed
def delete_signal_configuration(self):
r"""Deletes the current instance of a signal.
Returns:
error_code:
Returns the status code of this method.
The status code either indicates success or describes a warning condition.
"""
error_code = self._delete_signal_configuration(False) # type: ignore
return error_code
def _delete_signal_configuration(self, ignore_driver_error):
error_code = 0
try:
if not self.is_disposed:
self._session_function_lock.enter_write_lock()
error_code = self._interpreter.delete_signal_configuration(ignore_driver_error) # type: ignore
_GsmSignalConfiguration.remove_signal_configuration(self._rfmxinstrsession, self) # type: ignore
self.is_disposed = True
finally:
self._session_function_lock.exit_write_lock()
return error_code
@_raise_if_disposed
def get_warning(self):
r"""Retrieves and then clears the warning information for the session.
Returns:
Tuple (warning_code, warning_message):
warning_code (int):
Contains the latest warning code.
warning_message (string):
Contains the latest warning description.
"""
try:
self._session_function_lock.enter_read_lock()
warning_code, warning_message = self._interpreter.get_error() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return warning_code, warning_message
@_raise_if_disposed
def get_error_string(self, error_code):
r"""Gets the description of a driver error code.
Args:
error_code (int):
Specifies an error or warning code.
Returns:
string:
Contains the error description.
"""
try:
self._session_function_lock.enter_read_lock()
error_message = self._interpreter.get_error_string(error_code) # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return error_message
@_raise_if_disposed
def reset_attribute(self, selector_string, attribute_id):
r"""Resets the attribute to its default value.
Args:
selector_string (string):
Specifies the selector string for the property being reset.
attribute_id (PropertyId):
Specifies an attribute identifier.
Returns:
int:
Returns the status code of this method.
The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attribute_id = (
attribute_id.value if type(attribute_id) is attributes.AttributeID else attribute_id
)
error_code = self._interpreter.reset_attribute( # type: ignore
updated_selector_string, attribute_id
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_selected_ports(self, selector_string):
r"""Gets the instrument port to be configured to acquire a signal. Use
:py:meth:`nirfmxinstr.session.Session.get_available_ports` method to get the valid port names.
You do not need to use a selector string to configure or read this attribute for the default signal instance.
Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for
information about the string syntax for named signals.
**Valid values**
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (value) | Description |
+================+==========================================================================================================================+
| PXIe-5830 | if0, if1 |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| PXIe-5831/5832 | if0, if1, rf<0-1>/port<x>, where 0-1 indicates one (0) or two (1) mmRH-5582 connections and x is the port number on the |
| | mmRH-5582 front panel |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| Other devices | "" (empty string) |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
**Default values**
+---------------------+-------------------+
| Name (value) | Description |
+=====================+===================+
| PXIe-5830/5831/5832 | if1 |
+---------------------+-------------------+
| Other devices | "" (empty string) |
+---------------------+-------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (string):
Specifies the instrument port to be configured to acquire a signal. Use
:py:meth:`nirfmxinstr.session.Session.get_available_ports` method to get the valid port names.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_string( # type: ignore
updated_selector_string, attributes.AttributeID.SELECTED_PORTS.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_selected_ports(self, selector_string, value):
r"""Sets the instrument port to be configured to acquire a signal. Use
:py:meth:`nirfmxinstr.session.Session.get_available_ports` method to get the valid port names.
You do not need to use a selector string to configure or read this attribute for the default signal instance.
Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for
information about the string syntax for named signals.
**Valid values**
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (value) | Description |
+================+==========================================================================================================================+
| PXIe-5830 | if0, if1 |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| PXIe-5831/5832 | if0, if1, rf<0-1>/port<x>, where 0-1 indicates one (0) or two (1) mmRH-5582 connections and x is the port number on the |
| | mmRH-5582 front panel |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
| Other devices | "" (empty string) |
+----------------+--------------------------------------------------------------------------------------------------------------------------+
**Default values**
+---------------------+-------------------+
| Name (value) | Description |
+=====================+===================+
| PXIe-5830/5831/5832 | if1 |
+---------------------+-------------------+
| Other devices | "" (empty string) |
+---------------------+-------------------+
Args:
selector_string (string):
Pass an empty string.
value (string):
Specifies the instrument port to be configured to acquire a signal. Use
:py:meth:`nirfmxinstr.session.Session.get_available_ports` method to get the valid port names.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
_helper.validate_not_none(value, "value")
error_code = self._interpreter.set_attribute_string( # type: ignore
updated_selector_string, attributes.AttributeID.SELECTED_PORTS.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_center_frequency(self, selector_string):
r"""Gets the expected carrier frequency of the acquired RF signal. This value is expressed in Hz. The signal analyzer
tunes to this frequency.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the expected carrier frequency of the acquired RF signal. This value is expressed in Hz. The signal analyzer
tunes to this frequency.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.CENTER_FREQUENCY.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_center_frequency(self, selector_string, value):
r"""Sets the expected carrier frequency of the acquired RF signal. This value is expressed in Hz. The signal analyzer
tunes to this frequency.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the expected carrier frequency of the acquired RF signal. This value is expressed in Hz. The signal analyzer
tunes to this frequency.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.CENTER_FREQUENCY.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_reference_level(self, selector_string):
r"""Gets the reference level that represents the maximum expected power of the RF input signal. This value is
expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the reference level that represents the maximum expected power of the RF input signal. This value is
expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.REFERENCE_LEVEL.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_reference_level(self, selector_string, value):
r"""Sets the reference level that represents the maximum expected power of the RF input signal. This value is
expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the reference level that represents the maximum expected power of the RF input signal. This value is
expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.REFERENCE_LEVEL.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_external_attenuation(self, selector_string):
r"""Gets the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer. This value is
expressed in dB. For more information about attenuation, refer to the RF Attenuation and Signal Levels topic for your
device in the *NI RF Vector Signal Analyzers Help*.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer. This value is
expressed in dB. For more information about attenuation, refer to the RF Attenuation and Signal Levels topic for your
device in the *NI RF Vector Signal Analyzers Help*.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.EXTERNAL_ATTENUATION.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_external_attenuation(self, selector_string, value):
r"""Sets the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer. This value is
expressed in dB. For more information about attenuation, refer to the RF Attenuation and Signal Levels topic for your
device in the *NI RF Vector Signal Analyzers Help*.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer. This value is
expressed in dB. For more information about attenuation, refer to the RF Attenuation and Signal Levels topic for your
device in the *NI RF Vector Signal Analyzers Help*.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.EXTERNAL_ATTENUATION.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_reference_level_headroom(self, selector_string):
r"""Gets the margin RFmx adds to the :py:attr:`~nirfmxgsm.attributes.AttributeID.REFERENCE_LEVEL` attribute. The
margin avoids clipping and overflow warnings if the input signal exceeds the configured reference level.
RFmx configures the input gain to avoid clipping and associated overflow warnings provided the instantaneous
power of the input signal remains within the Reference Level plus the Reference Level Headroom. If you know the input
power of the signal precisely or previously included the margin in the Reference Level, you could improve the
signal-to-noise ratio by reducing the Reference Level Headroom.
You do not need to use a selector string to configure or read this attribute for the default signal instance.
Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for
information about the string syntax for named signals.
**Supported devices: **PXIe-5668R, PXIe-5830/5831/5832/5840/5841/5842/5860.
**Default values**
+------------------------------------+-------------+
| Name (value) | Description |
+====================================+=============+
| PXIe-5668 | 6 dB |
+------------------------------------+-------------+
| PXIe-5830/5831/5832/5841/5842/5860 | 1 dB |
+------------------------------------+-------------+
| PXIe-5840 | 0 dB |
+------------------------------------+-------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the margin RFmx adds to the :py:attr:`~nirfmxgsm.attributes.AttributeID.REFERENCE_LEVEL` attribute. The
margin avoids clipping and overflow warnings if the input signal exceeds the configured reference level.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.REFERENCE_LEVEL_HEADROOM.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_reference_level_headroom(self, selector_string, value):
r"""Sets the margin RFmx adds to the :py:attr:`~nirfmxgsm.attributes.AttributeID.REFERENCE_LEVEL` attribute. The
margin avoids clipping and overflow warnings if the input signal exceeds the configured reference level.
RFmx configures the input gain to avoid clipping and associated overflow warnings provided the instantaneous
power of the input signal remains within the Reference Level plus the Reference Level Headroom. If you know the input
power of the signal precisely or previously included the margin in the Reference Level, you could improve the
signal-to-noise ratio by reducing the Reference Level Headroom.
You do not need to use a selector string to configure or read this attribute for the default signal instance.
Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for
information about the string syntax for named signals.
**Supported devices: **PXIe-5668R, PXIe-5830/5831/5832/5840/5841/5842/5860.
**Default values**
+------------------------------------+-------------+
| Name (value) | Description |
+====================================+=============+
| PXIe-5668 | 6 dB |
+------------------------------------+-------------+
| PXIe-5830/5831/5832/5841/5842/5860 | 1 dB |
+------------------------------------+-------------+
| PXIe-5840 | 0 dB |
+------------------------------------+-------------+
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the margin RFmx adds to the :py:attr:`~nirfmxgsm.attributes.AttributeID.REFERENCE_LEVEL` attribute. The
margin avoids clipping and overflow warnings if the input signal exceeds the configured reference level.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.REFERENCE_LEVEL_HEADROOM.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_trigger_type(self, selector_string):
r"""Gets the trigger type.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **IQ Power Edge**.
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===================+==========================================================================================================================+
| None (0) | No Reference Trigger is configured. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Digital Edge (1) | The Reference Trigger is not asserted until a digital edge is detected. The source of the digital edge is specified |
| | using the Digital Edge Source attribute. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| IQ Power Edge (2) | The Reference Trigger is asserted when the signal changes past the level specified by the slope (rising or falling), |
| | which is configured using the IQ Power Edge Slope attribute. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Software (3) | The Reference Trigger is not asserted until a software trigger occurs. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.TriggerType):
Specifies the trigger type.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TRIGGER_TYPE.value
)
attr_val = enums.TriggerType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_trigger_type(self, selector_string, value):
r"""Sets the trigger type.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **IQ Power Edge**.
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===================+==========================================================================================================================+
| None (0) | No Reference Trigger is configured. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Digital Edge (1) | The Reference Trigger is not asserted until a digital edge is detected. The source of the digital edge is specified |
| | using the Digital Edge Source attribute. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| IQ Power Edge (2) | The Reference Trigger is asserted when the signal changes past the level specified by the slope (rising or falling), |
| | which is configured using the IQ Power Edge Slope attribute. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| Software (3) | The Reference Trigger is not asserted until a software trigger occurs. |
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.TriggerType, int):
Specifies the trigger type.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.TriggerType else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TRIGGER_TYPE.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_digital_edge_trigger_source(self, selector_string):
r"""Gets the source terminal for the digital edge trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (string):
Specifies the source terminal for the digital edge trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_string( # type: ignore
updated_selector_string, attributes.AttributeID.DIGITAL_EDGE_TRIGGER_SOURCE.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_digital_edge_trigger_source(self, selector_string, value):
r"""Sets the source terminal for the digital edge trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (string):
Specifies the source terminal for the digital edge trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
_helper.validate_not_none(value, "value")
error_code = self._interpreter.set_attribute_string( # type: ignore
updated_selector_string,
attributes.AttributeID.DIGITAL_EDGE_TRIGGER_SOURCE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_digital_edge_trigger_edge(self, selector_string):
r"""Gets the active edge for the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Rising Edge**.
+------------------+--------------------------------------------------------+
| Name (Value) | Description |
+==================+========================================================+
| Rising Edge (0) | The trigger asserts on the rising edge of the signal. |
+------------------+--------------------------------------------------------+
| Falling Edge (1) | The trigger asserts on the falling edge of the signal. |
+------------------+--------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.DigitalEdgeTriggerEdge):
Specifies the active edge for the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.DIGITAL_EDGE_TRIGGER_EDGE.value
)
attr_val = enums.DigitalEdgeTriggerEdge(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_digital_edge_trigger_edge(self, selector_string, value):
r"""Sets the active edge for the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Rising Edge**.
+------------------+--------------------------------------------------------+
| Name (Value) | Description |
+==================+========================================================+
| Rising Edge (0) | The trigger asserts on the rising edge of the signal. |
+------------------+--------------------------------------------------------+
| Falling Edge (1) | The trigger asserts on the falling edge of the signal. |
+------------------+--------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.DigitalEdgeTriggerEdge, int):
Specifies the active edge for the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.DigitalEdgeTriggerEdge else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.DIGITAL_EDGE_TRIGGER_EDGE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_iq_power_edge_trigger_source(self, selector_string):
r"""Gets the channel from which the device monitors the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (string):
Specifies the channel from which the device monitors the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_string( # type: ignore
updated_selector_string, attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SOURCE.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_iq_power_edge_trigger_source(self, selector_string, value):
r"""Sets the channel from which the device monitors the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (string):
Specifies the channel from which the device monitors the trigger. This attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
_helper.validate_not_none(value, "value")
error_code = self._interpreter.set_attribute_string( # type: ignore
updated_selector_string,
attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SOURCE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_iq_power_edge_trigger_level(self, selector_string):
r"""Gets the power level at which the device triggers. This value is expressed in dB when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE` attribute to **Relative** and in dBm when
you set the IQ Power Edge Level Type attribute to **Absolute**. The device asserts the trigger when the signal exceeds
the level specified by the value of this attribute, taking into consideration the specified slope. This attribute is
used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the power level at which the device triggers. This value is expressed in dB when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE` attribute to **Relative** and in dBm when
you set the IQ Power Edge Level Type attribute to **Absolute**. The device asserts the trigger when the signal exceeds
the level specified by the value of this attribute, taking into consideration the specified slope. This attribute is
used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_iq_power_edge_trigger_level(self, selector_string, value):
r"""Sets the power level at which the device triggers. This value is expressed in dB when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE` attribute to **Relative** and in dBm when
you set the IQ Power Edge Level Type attribute to **Absolute**. The device asserts the trigger when the signal exceeds
the level specified by the value of this attribute, taking into consideration the specified slope. This attribute is
used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the power level at which the device triggers. This value is expressed in dB when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE` attribute to **Relative** and in dBm when
you set the IQ Power Edge Level Type attribute to **Absolute**. The device asserts the trigger when the signal exceeds
the level specified by the value of this attribute, taking into consideration the specified slope. This attribute is
used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_iq_power_edge_trigger_level_type(self, selector_string):
r"""Gets the reference for the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute. The
IQ Power Edge Level Type attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Relative**.
+--------------+-----------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+===========================================================================================================+
| Relative (0) | The value of the IQ Power Edge Level attribute is relative to the value of the Reference Level attribute. |
+--------------+-----------------------------------------------------------------------------------------------------------+
| Absolute (1) | The IQ Power Edge Level attribute specifies the absolute power. |
+--------------+-----------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.IQPowerEdgeTriggerLevelType):
Specifies the reference for the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute. The
IQ Power Edge Level Type attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE.value,
)
attr_val = enums.IQPowerEdgeTriggerLevelType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_iq_power_edge_trigger_level_type(self, selector_string, value):
r"""Sets the reference for the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute. The
IQ Power Edge Level Type attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Relative**.
+--------------+-----------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+===========================================================================================================+
| Relative (0) | The value of the IQ Power Edge Level attribute is relative to the value of the Reference Level attribute. |
+--------------+-----------------------------------------------------------------------------------------------------------+
| Absolute (1) | The IQ Power Edge Level attribute specifies the absolute power. |
+--------------+-----------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.IQPowerEdgeTriggerLevelType, int):
Specifies the reference for the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute. The
IQ Power Edge Level Type attribute is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ Power Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.IQPowerEdgeTriggerLevelType else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL_TYPE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_iq_power_edge_trigger_slope(self, selector_string):
r"""Gets whether the device asserts the trigger when the signal power is rising or when it is falling. The device
asserts the trigger when the signal power exceeds the level that you specify in the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute with the slope you specify. This
attribute is used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ
Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Rising Slope**.
+-------------------+-------------------------------------------------------+
| Name (Value) | Description |
+===================+=======================================================+
| Rising Slope (0) | The trigger asserts when the signal power is rising. |
+-------------------+-------------------------------------------------------+
| Falling Slope (1) | The trigger asserts when the signal power is falling. |
+-------------------+-------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.IQPowerEdgeTriggerSlope):
Specifies whether the device asserts the trigger when the signal power is rising or when it is falling. The device
asserts the trigger when the signal power exceeds the level that you specify in the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute with the slope you specify. This
attribute is used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ
Power Edge**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SLOPE.value
)
attr_val = enums.IQPowerEdgeTriggerSlope(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_iq_power_edge_trigger_slope(self, selector_string, value):
r"""Sets whether the device asserts the trigger when the signal power is rising or when it is falling. The device
asserts the trigger when the signal power exceeds the level that you specify in the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute with the slope you specify. This
attribute is used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ
Power Edge**.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Rising Slope**.
+-------------------+-------------------------------------------------------+
| Name (Value) | Description |
+===================+=======================================================+
| Rising Slope (0) | The trigger asserts when the signal power is rising. |
+-------------------+-------------------------------------------------------+
| Falling Slope (1) | The trigger asserts when the signal power is falling. |
+-------------------+-------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.IQPowerEdgeTriggerSlope, int):
Specifies whether the device asserts the trigger when the signal power is rising or when it is falling. The device
asserts the trigger when the signal power exceeds the level that you specify in the
:py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_LEVEL` attribute with the slope you specify. This
attribute is used only when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **IQ
Power Edge**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.IQPowerEdgeTriggerSlope else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SLOPE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_trigger_delay(self, selector_string):
r"""Gets the trigger delay time. This value is expressed in seconds.
If the delay is negative, the measurement acquires pretrigger samples. If the delay is positive, the
measurement acquires post-trigger samples.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the trigger delay time. This value is expressed in seconds.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.TRIGGER_DELAY.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_trigger_delay(self, selector_string, value):
r"""Sets the trigger delay time. This value is expressed in seconds.
If the delay is negative, the measurement acquires pretrigger samples. If the delay is positive, the
measurement acquires post-trigger samples.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the trigger delay time. This value is expressed in seconds.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.TRIGGER_DELAY.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_trigger_minimum_quiet_time_mode(self, selector_string):
r"""Gets whether the measurement computes the minimum quiet time used for triggering.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Auto**.
+--------------+---------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+=============================================================================================+
| Manual (0) | The minimum quiet time for triggering is the value of the Trigger Min Quiet Time attribute. |
+--------------+---------------------------------------------------------------------------------------------+
| Auto (1) | The measurement computes the minimum quiet time used for triggering. |
+--------------+---------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.TriggerMinimumQuietTimeMode):
Specifies whether the measurement computes the minimum quiet time used for triggering.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.TRIGGER_MINIMUM_QUIET_TIME_MODE.value,
)
attr_val = enums.TriggerMinimumQuietTimeMode(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_trigger_minimum_quiet_time_mode(self, selector_string, value):
r"""Sets whether the measurement computes the minimum quiet time used for triggering.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Auto**.
+--------------+---------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+=============================================================================================+
| Manual (0) | The minimum quiet time for triggering is the value of the Trigger Min Quiet Time attribute. |
+--------------+---------------------------------------------------------------------------------------------+
| Auto (1) | The measurement computes the minimum quiet time used for triggering. |
+--------------+---------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.TriggerMinimumQuietTimeMode, int):
Specifies whether the measurement computes the minimum quiet time used for triggering.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.TriggerMinimumQuietTimeMode else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.TRIGGER_MINIMUM_QUIET_TIME_MODE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_trigger_minimum_quiet_time_duration(self, selector_string):
r"""Gets the time duration for which the signal must be quiet before the signal analyzer arms the I/Q power edge
trigger. This value is expressed in seconds.
If you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SLOPE` attribute to **Rising
Slope**, the signal is quiet below the trigger level. If you set the IQ Power Edge Slope attribute to **Falling
Slope**, the signal is quiet above the trigger level.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the time duration for which the signal must be quiet before the signal analyzer arms the I/Q power edge
trigger. This value is expressed in seconds.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.TRIGGER_MINIMUM_QUIET_TIME_DURATION.value,
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_trigger_minimum_quiet_time_duration(self, selector_string, value):
r"""Sets the time duration for which the signal must be quiet before the signal analyzer arms the I/Q power edge
trigger. This value is expressed in seconds.
If you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.IQ_POWER_EDGE_TRIGGER_SLOPE` attribute to **Rising
Slope**, the signal is quiet below the trigger level. If you set the IQ Power Edge Slope attribute to **Falling
Slope**, the signal is quiet above the trigger level.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default of this attribute is hardware dependent.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the time duration for which the signal must be quiet before the signal analyzer arms the I/Q power edge
trigger. This value is expressed in seconds.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.TRIGGER_MINIMUM_QUIET_TIME_DURATION.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_link_direction(self, selector_string):
r"""Gets the source of the signal to be measured.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Uplink**.
+--------------+-------------------------------------------+
| Name (Value) | Description |
+==============+===========================================+
| Downlink (0) | The source is a base transceiver station. |
+--------------+-------------------------------------------+
| Uplink (1) | The source is a mobile station. |
+--------------+-------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.LinkDirection):
Specifies the source of the signal to be measured.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.LINK_DIRECTION.value
)
attr_val = enums.LinkDirection(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_link_direction(self, selector_string, value):
r"""Sets the source of the signal to be measured.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Uplink**.
+--------------+-------------------------------------------+
| Name (Value) | Description |
+==============+===========================================+
| Downlink (0) | The source is a base transceiver station. |
+--------------+-------------------------------------------+
| Uplink (1) | The source is a mobile station. |
+--------------+-------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.LinkDirection, int):
Specifies the source of the signal to be measured.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.LinkDirection else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.LINK_DIRECTION.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_band(self, selector_string):
r"""Gets the operation band.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **PGSM**.
+--------------+------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================+
| PGSM (0) | The operation band is Primary GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| EGSM (1) | The operation band is Extended GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| RGSM (2) | The operation band is Railway GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| DCS1800 (3) | The operation band is GSM in the 1800 MHz band. |
+--------------+------------------------------------------------------------+
| PCS1900 (4) | The operation band is GSM in the 1900 MHz band. |
+--------------+------------------------------------------------------------+
| GSM450 (5) | The operation band is GSM in the 450 MHz band. |
+--------------+------------------------------------------------------------+
| GSM480 (6) | The operation band is GSM in the 480 MHz band. |
+--------------+------------------------------------------------------------+
| GSM850 (7) | The operation band is GSM in the 850 MHz band. |
+--------------+------------------------------------------------------------+
| GSM750 (8) | The operation band is GSM in the 750 MHz band. |
+--------------+------------------------------------------------------------+
| TGSM810 (9) | The operation band is terrestrial GSM in the 810 MHz band. |
+--------------+------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.Band):
Specifies the operation band.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.BAND.value
)
attr_val = enums.Band(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_band(self, selector_string, value):
r"""Sets the operation band.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **PGSM**.
+--------------+------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================+
| PGSM (0) | The operation band is Primary GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| EGSM (1) | The operation band is Extended GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| RGSM (2) | The operation band is Railway GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| DCS1800 (3) | The operation band is GSM in the 1800 MHz band. |
+--------------+------------------------------------------------------------+
| PCS1900 (4) | The operation band is GSM in the 1900 MHz band. |
+--------------+------------------------------------------------------------+
| GSM450 (5) | The operation band is GSM in the 450 MHz band. |
+--------------+------------------------------------------------------------+
| GSM480 (6) | The operation band is GSM in the 480 MHz band. |
+--------------+------------------------------------------------------------+
| GSM850 (7) | The operation band is GSM in the 850 MHz band. |
+--------------+------------------------------------------------------------+
| GSM750 (8) | The operation band is GSM in the 750 MHz band. |
+--------------+------------------------------------------------------------+
| TGSM810 (9) | The operation band is terrestrial GSM in the 810 MHz band. |
+--------------+------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.Band, int):
Specifies the operation band.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.Band else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.BAND.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_signal_structure(self, selector_string):
r"""Gets whether the signal is bursted or continuous. For bursted signal and continuous signals, set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` to **IQ Power Edge** and **None**, respectively.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Bursted**.
+----------------+---------------------------+
| Name (Value) | Description |
+================+===========================+
| Bursted (0) | The signal is bursted. |
+----------------+---------------------------+
| Continuous (1) | The signal is continuous. |
+----------------+---------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.SignalStructure):
Specifies whether the signal is bursted or continuous. For bursted signal and continuous signals, set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` to **IQ Power Edge** and **None**, respectively.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.SIGNAL_STRUCTURE.value
)
attr_val = enums.SignalStructure(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_signal_structure(self, selector_string, value):
r"""Sets whether the signal is bursted or continuous. For bursted signal and continuous signals, set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` to **IQ Power Edge** and **None**, respectively.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **Bursted**.
+----------------+---------------------------+
| Name (Value) | Description |
+================+===========================+
| Bursted (0) | The signal is bursted. |
+----------------+---------------------------+
| Continuous (1) | The signal is continuous. |
+----------------+---------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.SignalStructure, int):
Specifies whether the signal is bursted or continuous. For bursted signal and continuous signals, set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` to **IQ Power Edge** and **None**, respectively.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.SignalStructure else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.SIGNAL_STRUCTURE.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_number_of_timeslots(self, selector_string):
r"""Gets the number of time slots to be measured.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 1.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the number of time slots to be measured.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.NUMBER_OF_TIMESLOTS.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_number_of_timeslots(self, selector_string, value):
r"""Sets the number of time slots to be measured.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 1.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the number of time slots to be measured.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.NUMBER_OF_TIMESLOTS.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_modulation_type(self, selector_string):
r"""Gets the modulation scheme used for the signal.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **8PSK**.
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+==========================================================================================================================+
| GMSK (0) | The modulation type is Gaussian minimum shift keying. This value is valid only when you set the Burst Type attribute to |
| | **NB** or **AB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 8PSK (1) | The modulation type is 8-PSK. This value is valid only when you set the Burst Type attribute to **NB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| QPSK (2) | The modulation type is QPSK. This value is valid only when you set the Burst Type attribute to **HB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 16QAM (3) | The modulation type is 16-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 32QAM (4) | The modulation type is 32-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.ModulationType):
Specifies the modulation scheme used for the signal.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.MODULATION_TYPE.value
)
attr_val = enums.ModulationType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_modulation_type(self, selector_string, value):
r"""Sets the modulation scheme used for the signal.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **8PSK**.
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+==========================================================================================================================+
| GMSK (0) | The modulation type is Gaussian minimum shift keying. This value is valid only when you set the Burst Type attribute to |
| | **NB** or **AB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 8PSK (1) | The modulation type is 8-PSK. This value is valid only when you set the Burst Type attribute to **NB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| QPSK (2) | The modulation type is QPSK. This value is valid only when you set the Burst Type attribute to **HB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 16QAM (3) | The modulation type is 16-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 32QAM (4) | The modulation type is 32-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.ModulationType, int):
Specifies the modulation scheme used for the signal.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.ModulationType else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.MODULATION_TYPE.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_burst_type(self, selector_string):
r"""Gets the burst type.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **NB**.
+--------------+---------------------------------------------+
| Name (Value) | Description |
+==============+=============================================+
| NB (0) | The burst type is Normal Burst. |
+--------------+---------------------------------------------+
| HB (1) | The burst type is Higher Symbol Rate Burst. |
+--------------+---------------------------------------------+
| AB (2) | The burst type is Access Burst. |
+--------------+---------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.BurstType):
Specifies the burst type.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.BURST_TYPE.value
)
attr_val = enums.BurstType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_burst_type(self, selector_string, value):
r"""Sets the burst type.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **NB**.
+--------------+---------------------------------------------+
| Name (Value) | Description |
+==============+=============================================+
| NB (0) | The burst type is Normal Burst. |
+--------------+---------------------------------------------+
| HB (1) | The burst type is Higher Symbol Rate Burst. |
+--------------+---------------------------------------------+
| AB (2) | The burst type is Access Burst. |
+--------------+---------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.BurstType, int):
Specifies the burst type.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.BurstType else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.BURST_TYPE.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_hb_filter_width(self, selector_string):
r"""Gets the filter width when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_TYPE` attribute to
**HB**.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **Narrow**.
+--------------+---------------------------------------+
| Name (Value) | Description |
+==============+=======================================+
| Narrow (0) | The measurement uses a narrow filter. |
+--------------+---------------------------------------+
| Wide (1) | The measurement uses a wide filter. |
+--------------+---------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.HBFilterWidth):
Specifies the filter width when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_TYPE` attribute to
**HB**.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.HB_FILTER_WIDTH.value
)
attr_val = enums.HBFilterWidth(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_hb_filter_width(self, selector_string, value):
r"""Sets the filter width when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_TYPE` attribute to
**HB**.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **Narrow**.
+--------------+---------------------------------------+
| Name (Value) | Description |
+==============+=======================================+
| Narrow (0) | The measurement uses a narrow filter. |
+--------------+---------------------------------------+
| Wide (1) | The measurement uses a wide filter. |
+--------------+---------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.HBFilterWidth, int):
Specifies the filter width when you set the :py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_TYPE` attribute to
**HB**.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.HBFilterWidth else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.HB_FILTER_WIDTH.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_auto_tsc_detection_enabled(self, selector_string):
r"""Gets whether the measurement automatically detects the training sequence code (TSC).
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **True**.
+--------------+----------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================================+
| False (0) | The measurement uses the value that you configure using the TSC attribute. |
+--------------+----------------------------------------------------------------------------+
| True (1) | The measurement detects the TSC in the burst. |
+--------------+----------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.AutoTscDetectionEnabled):
Specifies whether the measurement automatically detects the training sequence code (TSC).
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED.value
)
attr_val = enums.AutoTscDetectionEnabled(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_auto_tsc_detection_enabled(self, selector_string, value):
r"""Sets whether the measurement automatically detects the training sequence code (TSC).
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **True**.
+--------------+----------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================================+
| False (0) | The measurement uses the value that you configure using the TSC attribute. |
+--------------+----------------------------------------------------------------------------+
| True (1) | The measurement detects the TSC in the burst. |
+--------------+----------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.AutoTscDetectionEnabled, int):
Specifies whether the measurement automatically detects the training sequence code (TSC).
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.AutoTscDetectionEnabled else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_tsc(self, selector_string):
r"""Gets the training sequence code (TSC) to use. This attribute is applicable only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE` attribute to **TSC** and the
:py:attr:`~nirfmxgsm.attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED` attribute to **False**. For access burst
**TSC0**, **TSC1**, and **TSC2** are applicable.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **TSC0**.
+--------------+------------------------------------------------+
| Name (Value) | Description |
+==============+================================================+
| TSC0 (0) | The measurement uses training sequence code 0. |
+--------------+------------------------------------------------+
| TSC1 (1) | The measurement uses training sequence code 1. |
+--------------+------------------------------------------------+
| TSC2 (2) | The measurement uses training sequence code 2. |
+--------------+------------------------------------------------+
| TSC3 (3) | The measurement uses training sequence code 3. |
+--------------+------------------------------------------------+
| TSC4 (4) | The measurement uses training sequence code 4. |
+--------------+------------------------------------------------+
| TSC5 (5) | The measurement uses training sequence code 5. |
+--------------+------------------------------------------------+
| TSC6 (6) | The measurement uses training sequence code 6. |
+--------------+------------------------------------------------+
| TSC7 (7) | The measurement uses training sequence code 7. |
+--------------+------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.Tsc):
Specifies the training sequence code (TSC) to use. This attribute is applicable only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE` attribute to **TSC** and the
:py:attr:`~nirfmxgsm.attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED` attribute to **False**. For access burst
**TSC0**, **TSC1**, and **TSC2** are applicable.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TSC.value
)
attr_val = enums.Tsc(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_tsc(self, selector_string, value):
r"""Sets the training sequence code (TSC) to use. This attribute is applicable only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE` attribute to **TSC** and the
:py:attr:`~nirfmxgsm.attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED` attribute to **False**. For access burst
**TSC0**, **TSC1**, and **TSC2** are applicable.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is **TSC0**.
+--------------+------------------------------------------------+
| Name (Value) | Description |
+==============+================================================+
| TSC0 (0) | The measurement uses training sequence code 0. |
+--------------+------------------------------------------------+
| TSC1 (1) | The measurement uses training sequence code 1. |
+--------------+------------------------------------------------+
| TSC2 (2) | The measurement uses training sequence code 2. |
+--------------+------------------------------------------------+
| TSC3 (3) | The measurement uses training sequence code 3. |
+--------------+------------------------------------------------+
| TSC4 (4) | The measurement uses training sequence code 4. |
+--------------+------------------------------------------------+
| TSC5 (5) | The measurement uses training sequence code 5. |
+--------------+------------------------------------------------+
| TSC6 (6) | The measurement uses training sequence code 6. |
+--------------+------------------------------------------------+
| TSC7 (7) | The measurement uses training sequence code 7. |
+--------------+------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.Tsc, int):
Specifies the training sequence code (TSC) to use. This attribute is applicable only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE` attribute to **TSC** and the
:py:attr:`~nirfmxgsm.attributes.AttributeID.AUTO_TSC_DETECTION_ENABLED` attribute to **False**. For access burst
**TSC0**, **TSC1**, and **TSC2** are applicable.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.Tsc else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TSC.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_power_control_level(self, selector_string):
r"""Gets the power control level corresponding to the transmitted power, as defined in section 4.1 of the *3GPP TS
45.005 v8.0.0 specifications*.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is 0. Valid values are 0 to 31, inclusive.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the power control level corresponding to the transmitted power, as defined in section 4.1 of the *3GPP TS
45.005 v8.0.0 specifications*.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.POWER_CONTROL_LEVEL.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_power_control_level(self, selector_string, value):
r"""Sets the power control level corresponding to the transmitted power, as defined in section 4.1 of the *3GPP TS
45.005 v8.0.0 specifications*.
Use "slot<*n*>" as the selector string to configure or read this attribute.
The default value is 0. Valid values are 0 to 31, inclusive.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the power control level corresponding to the transmitted power, as defined in section 4.1 of the *3GPP TS
45.005 v8.0.0 specifications*.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.POWER_CONTROL_LEVEL.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_timing_advance(self, selector_string):
r"""Gets the timing advance value as specified in the 3GPP TS 45.010 specification for GSM access burst.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the timing advance value as specified in the 3GPP TS 45.010 specification for GSM access burst.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TIMING_ADVANCE.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_timing_advance(self, selector_string, value):
r"""Sets the timing advance value as specified in the 3GPP TS 45.010 specification for GSM access burst.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 0.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the timing advance value as specified in the 3GPP TS 45.010 specification for GSM access burst.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.TIMING_ADVANCE.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_burst_synchronization_type(self, selector_string):
r"""Gets the method used to synchronize the burst.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **TSC**.
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===============+==========================================================================================================================+
| TSC (0) | Synchronizes the measurement to the timing of the demodulated training sequence in the burst. The measurement requires |
| | a burst with a valid training sequence code (TSC). The measurement determines the *T0* point by demodulating the burst |
| | and identifying the TSC. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Amplitude (1) | Synchronizes the measurement based on the RF envelope of the received signal. The measurement sets the *T0* point as |
| | the center of the RF envelope. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| None (2) | Sets the *T0* point to 273.23 microseconds after the trigger. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.BurstSynchronizationType):
Specifies the method used to synchronize the burst.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE.value
)
attr_val = enums.BurstSynchronizationType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_burst_synchronization_type(self, selector_string, value):
r"""Sets the method used to synchronize the burst.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is **TSC**.
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===============+==========================================================================================================================+
| TSC (0) | Synchronizes the measurement to the timing of the demodulated training sequence in the burst. The measurement requires |
| | a burst with a valid training sequence code (TSC). The measurement determines the *T0* point by demodulating the burst |
| | and identifying the TSC. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Amplitude (1) | Synchronizes the measurement based on the RF envelope of the received signal. The measurement sets the *T0* point as |
| | the center of the RF envelope. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| None (2) | Sets the *T0* point to 273.23 microseconds after the trigger. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.BurstSynchronizationType, int):
Specifies the method used to synchronize the burst.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.BurstSynchronizationType else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.BURST_SYNCHRONIZATION_TYPE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_auto_level_initial_reference_level(self, selector_string):
r"""Gets the initial reference level the :py:meth:`auto_level` method uses to estimate the peak power of the input
signal. This value is expressed in dBm.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 30.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the initial reference level the :py:meth:`auto_level` method uses to estimate the peak power of the input
signal. This value is expressed in dBm.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.AUTO_LEVEL_INITIAL_REFERENCE_LEVEL.value,
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_auto_level_initial_reference_level(self, selector_string, value):
r"""Sets the initial reference level the :py:meth:`auto_level` method uses to estimate the peak power of the input
signal. This value is expressed in dBm.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 30.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the initial reference level the :py:meth:`auto_level` method uses to estimate the peak power of the input
signal. This value is expressed in dBm.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string,
attributes.AttributeID.AUTO_LEVEL_INITIAL_REFERENCE_LEVEL.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_limited_configuration_change(self, selector_string):
r"""Gets the set of attributes that are considered by RFmx in the locked signal configuration state.
If your test system performs the same measurement at different selected ports, multiple frequencies and/or
power levels repeatedly, enabling this attribute can help achieve faster measurements. When you set this attribute to a
value other than **Disabled**, the RFmx driver will use an optimized code path and skip some checks. Because RFmx skips
some checks when you use this attribute, you need to be aware of the limitations of this feature, which are listed in
the `Limitations of the Limited Configuration Change Property
<https://www.ni.com/docs/en-US/bundle/rfmx-wcdma-prop/page/rfmxwcdmaprop/limitations.html>`_ topic.
You can also use this attribute to lock a specific instrument configuration for a signal so that every time
that you initiate the signal, RFmx applies the RFmxInstr attributes from a locked configuration.
NI recommends you use this attribute in conjunction with named signal configurations. Create named signal
configurations for each measurement configuration in your test program and set this attribute to a value other than
**Disabled** for one or more of the named signal configurations. This allows RFmx to precompute the acquisition
settings for your measurement configurations and re-use the precomputed settings each time you initiate the
measurement. You do not need to use this attribute if you create named signals for all the measurement configurations
in your test program during test sequence initialization and do not change any RFInstr or personality attributes while
testing each device under test. RFmx automatically optimizes that use case.
Specify the named signal configuration you are setting this attribute in the selector string input. You do not
need to use a selector string to configure or read this attribute for the default signal instance. Refer to the
Selector String topic for information about the string syntax for named signals.
The default value is **Disabled**.
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+========================================+==========================================================================================================================+
| Disabled (0) | This is the normal mode of RFmx operation. All configuration changes in RFmxInstr attributes or in personality |
| | attributes will be applied during RFmx Commit. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| No Change (1) | Signal configuration is locked after the first Commit of the named signal configuration. Any configuration change |
| | thereafter either in RFmxInstr attributes or personality attributes will not be considered by subsequent RFmx Commits |
| | or Initiates of this signal. Use **No Change** if you have created named signal configurations for all measurement |
| | configurations but are setting some RFmxInstr attributes. Refer to the Limitations of the Limited Configuration Change |
| | Property topic for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Frequency (2) | Signal configuration, other than center frequency and external attenuation, is locked after first Commit of the named |
| | signal configuration. Thereafter, only the Center Frequency and External Attenuation attribute value changes will be |
| | considered by subsequent driver Commits or Initiates of this signal. Refer to the Limitations of the Limited |
| | Configuration Change Property topic for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Reference Level (3) | Signal configuration, other than the reference level, is locked after first Commit of the named signal configuration. |
| | Thereafter only the Reference Level attribute value change will be considered by subsequent driver Commits or Initiates |
| | of this signal. If you have configured this signal to use an IQ Power Edge Trigger, NI recommends that you set the IQ |
| | Power Edge Level Type to **Relative** so that the trigger level is automatically adjusted as you adjust the reference |
| | level. Refer to the Limitations of the Limited Configuration Change Property topic for more details about the |
| | limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Freq and Ref Level (4) | Signal configuration, other than center frequency, reference level, and external attenuation, is locked after first |
| | Commit of the named signal configuration. Thereafter only Center Frequency, Reference Level, and External Attenuation |
| | attribute value changes will be considered by subsequent driver Commits or Initiates of this signal. If you have |
| | configured this signal to use an IQ Power Edge Trigger, NI recommends you set the IQ Power Edge Level Type to |
| | **Relative** so that the trigger level is automatically adjusted as you adjust the reference level. Refer to the |
| | Limitations of the Limited Configuration Change Property topic for more details about the limitations of using this |
| | mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Selected Ports, Freq and Ref Level (5) | Signal configuration, other than selected ports, center frequency, reference level, external attenuation, and RFInstr |
| | configuration, is locked after first Commit or Initiate of the named signal configuration. Thereafter only Selected |
| | Ports, Center Frequency, Reference Level, and External Attenuation attribute value changes will be considered by |
| | subsequent driver Commits or Initiates of this signal. If you have configured this signal to use an IQ Power Edge |
| | Trigger, NI recommends you set the IQ Power Edge Level Type to **Relative** so that the trigger level is automatically |
| | adjusted as you adjust the reference level. Refer to the Limitations of the Limited Configuration Change Property topic |
| | for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.LimitedConfigurationChange):
Specifies the set of attributes that are considered by RFmx in the locked signal configuration state.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_i32( # type: ignore
updated_selector_string, attributes.AttributeID.LIMITED_CONFIGURATION_CHANGE.value
)
attr_val = enums.LimitedConfigurationChange(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_limited_configuration_change(self, selector_string, value):
r"""Sets the set of attributes that are considered by RFmx in the locked signal configuration state.
If your test system performs the same measurement at different selected ports, multiple frequencies and/or
power levels repeatedly, enabling this attribute can help achieve faster measurements. When you set this attribute to a
value other than **Disabled**, the RFmx driver will use an optimized code path and skip some checks. Because RFmx skips
some checks when you use this attribute, you need to be aware of the limitations of this feature, which are listed in
the `Limitations of the Limited Configuration Change Property
<https://www.ni.com/docs/en-US/bundle/rfmx-wcdma-prop/page/rfmxwcdmaprop/limitations.html>`_ topic.
You can also use this attribute to lock a specific instrument configuration for a signal so that every time
that you initiate the signal, RFmx applies the RFmxInstr attributes from a locked configuration.
NI recommends you use this attribute in conjunction with named signal configurations. Create named signal
configurations for each measurement configuration in your test program and set this attribute to a value other than
**Disabled** for one or more of the named signal configurations. This allows RFmx to precompute the acquisition
settings for your measurement configurations and re-use the precomputed settings each time you initiate the
measurement. You do not need to use this attribute if you create named signals for all the measurement configurations
in your test program during test sequence initialization and do not change any RFInstr or personality attributes while
testing each device under test. RFmx automatically optimizes that use case.
Specify the named signal configuration you are setting this attribute in the selector string input. You do not
need to use a selector string to configure or read this attribute for the default signal instance. Refer to the
Selector String topic for information about the string syntax for named signals.
The default value is **Disabled**.
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+========================================+==========================================================================================================================+
| Disabled (0) | This is the normal mode of RFmx operation. All configuration changes in RFmxInstr attributes or in personality |
| | attributes will be applied during RFmx Commit. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| No Change (1) | Signal configuration is locked after the first Commit of the named signal configuration. Any configuration change |
| | thereafter either in RFmxInstr attributes or personality attributes will not be considered by subsequent RFmx Commits |
| | or Initiates of this signal. Use **No Change** if you have created named signal configurations for all measurement |
| | configurations but are setting some RFmxInstr attributes. Refer to the Limitations of the Limited Configuration Change |
| | Property topic for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Frequency (2) | Signal configuration, other than center frequency and external attenuation, is locked after first Commit of the named |
| | signal configuration. Thereafter, only the Center Frequency and External Attenuation attribute value changes will be |
| | considered by subsequent driver Commits or Initiates of this signal. Refer to the Limitations of the Limited |
| | Configuration Change Property topic for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Reference Level (3) | Signal configuration, other than the reference level, is locked after first Commit of the named signal configuration. |
| | Thereafter only the Reference Level attribute value change will be considered by subsequent driver Commits or Initiates |
| | of this signal. If you have configured this signal to use an IQ Power Edge Trigger, NI recommends that you set the IQ |
| | Power Edge Level Type to **Relative** so that the trigger level is automatically adjusted as you adjust the reference |
| | level. Refer to the Limitations of the Limited Configuration Change Property topic for more details about the |
| | limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Freq and Ref Level (4) | Signal configuration, other than center frequency, reference level, and external attenuation, is locked after first |
| | Commit of the named signal configuration. Thereafter only Center Frequency, Reference Level, and External Attenuation |
| | attribute value changes will be considered by subsequent driver Commits or Initiates of this signal. If you have |
| | configured this signal to use an IQ Power Edge Trigger, NI recommends you set the IQ Power Edge Level Type to |
| | **Relative** so that the trigger level is automatically adjusted as you adjust the reference level. Refer to the |
| | Limitations of the Limited Configuration Change Property topic for more details about the limitations of using this |
| | mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Selected Ports, Freq and Ref Level (5) | Signal configuration, other than selected ports, center frequency, reference level, external attenuation, and RFInstr |
| | configuration, is locked after first Commit or Initiate of the named signal configuration. Thereafter only Selected |
| | Ports, Center Frequency, Reference Level, and External Attenuation attribute value changes will be considered by |
| | subsequent driver Commits or Initiates of this signal. If you have configured this signal to use an IQ Power Edge |
| | Trigger, NI recommends you set the IQ Power Edge Level Type to **Relative** so that the trigger level is automatically |
| | adjusted as you adjust the reference level. Refer to the Limitations of the Limited Configuration Change Property topic |
| | for more details about the limitations of using this mode. |
+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.LimitedConfigurationChange, int):
Specifies the set of attributes that are considered by RFmx in the locked signal configuration state.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
value = value.value if type(value) is enums.LimitedConfigurationChange else value
error_code = self._interpreter.set_attribute_i32( # type: ignore
updated_selector_string,
attributes.AttributeID.LIMITED_CONFIGURATION_CHANGE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def get_result_fetch_timeout(self, selector_string):
r"""Gets the time to wait before results are available in the RFmxGSM Attribute. This value is expressed in seconds.
Set this value to a time longer than expected for fetching the measurement. A value of -1 specifies that the
RFmxGSM Attribute waits until the measurement is complete.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 10.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Specifies the time to wait before results are available in the RFmxGSM Attribute. This value is expressed in seconds.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
attr_val, error_code = self._interpreter.get_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.RESULT_FETCH_TIMEOUT.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
@_raise_if_disposed
def set_result_fetch_timeout(self, selector_string, value):
r"""Sets the time to wait before results are available in the RFmxGSM Attribute. This value is expressed in seconds.
Set this value to a time longer than expected for fetching the measurement. A value of -1 specifies that the
RFmxGSM Attribute waits until the measurement is complete.
You do not need to use a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to configure or read this attribute for
the default signal instance. Refer to the Selector String topic for information about the string syntax for named
signals.
The default value is 10.
Args:
selector_string (string):
Pass an empty string.
value (float):
Specifies the time to wait before results are available in the RFmxGSM Attribute. This value is expressed in seconds.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.set_attribute_f64( # type: ignore
updated_selector_string, attributes.AttributeID.RESULT_FETCH_TIMEOUT.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def abort_measurements(self, selector_string):
r"""Stops acquisition and measurements associated with the signal instance that you specify in the **Selector String**
parameter. This acquisition and measurements were previously initiated by the :py:meth:`initiate` method. Calling this
method is optional, unless you want to stop a measurement before it is complete. This method executes even if there is
an incoming error.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.abort_measurements( # type: ignore
updated_selector_string
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_rf(
self, selector_string, center_frequency, reference_level, external_attenuation
):
r"""Configures the RF attributes of the signal specified by the selector string.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
center_frequency (float):
This parameter specifies the expected center frequency of the RF signal to acquire. This value is expressed in Hz. The
signal analyzer tunes to this frequency. The default of this attribute is hardware dependent.
reference_level (float):
This parameter specifies the reference level, which represents the maximum expected power of the RF input signal. This
value is expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices. The default of this attribute is
hardware dependent.
external_attenuation (float):
This parameter specifies the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer.
This value is expressed in dB. For more information about attenuation, refer to the External Attenuation and Signal
Levels topic for your device in the *NI RF Vector Signal Analyzers Help*. The default value is 0.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_rf( # type: ignore
updated_selector_string, center_frequency, reference_level, external_attenuation
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_reference_level(self, selector_string, reference_level):
r"""Configures the reference level, which represents the maximum expected power of an RF input signal.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
reference_level (float):
This parameter specifies the reference level, which represents the maximum expected power of the RF input signal. This
value is expressed in dBm for RF devices and V\ :sub:`pk-pk`\ for baseband devices. The default of this attribute is
hardware dependent.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_reference_level( # type: ignore
updated_selector_string, reference_level
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_external_attenuation(self, selector_string, external_attenuation):
r"""Specifies the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
external_attenuation (float):
This parameter specifies the attenuation of a switch or cable connected to the RF IN connector of the signal analyzer.
This value is expressed in dB. For more information about attenuation, refer to the External Attenuation and Signal
Levels topic for your device in the *NI RF Vector Signal Analyzers Help*. The default value is 0.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_external_attenuation( # type: ignore
updated_selector_string, external_attenuation
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_frequency(self, selector_string, center_frequency):
r"""Configures the center frequency of the RF signal to acquire.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
center_frequency (float):
This parameter specifies the expected center frequency of the RF signal to acquire. This value is expressed in Hz. The
signal analyzer tunes to this frequency. The default of this attribute is hardware dependent.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_frequency( # type: ignore
updated_selector_string, center_frequency
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_number_of_timeslots(self, selector_string, number_of_timeslots):
r"""Configures the number of time slots to be measured.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
number_of_timeslots (int):
This parameter specifies the number of time slots to be measured. The default value is 1.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_number_of_timeslots( # type: ignore
updated_selector_string, number_of_timeslots
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_auto_tsc_detection_enabled(self, selector_string, auto_tsc_detection_enabled):
r"""Configures whether to auto detect the training sequence code (TSC).
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
auto_tsc_detection_enabled (enums.AutoTscDetectionEnabled, int):
This parameter specifies whether to auto detect the TSC. The default value is **True**.
+--------------+-----------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+=============================================================================+
| False (0) | The measurement uses the value which you configure using the TSC attribute. |
+--------------+-----------------------------------------------------------------------------+
| True (1) | The measurement detects the TSC in the burst. |
+--------------+-----------------------------------------------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
auto_tsc_detection_enabled = (
auto_tsc_detection_enabled.value
if type(auto_tsc_detection_enabled) is enums.AutoTscDetectionEnabled
else auto_tsc_detection_enabled
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_auto_tsc_detection_enabled( # type: ignore
updated_selector_string, auto_tsc_detection_enabled
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_signal_type(self, selector_string, modulation_type, burst_type, hb_filter_width):
r"""Configures the signal type.
Use "slot<*n*>" as the selector string to configure this method.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of slot
number.
Example:
"slot0"
"slot::all"
You can use the :py:meth:`build_slot_string` method to build the selector string.
modulation_type (enums.ModulationType, int):
This parameter specifies the modulation type of the signal. The default value is **8PSK**.
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+==========================================================================================================================+
| GMSK (0) | The modulation type is Gaussian MSK. This value is valid only when you set the **Burst Type** parameter to **NB** or |
| | **AB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 8PSK (1) | The modulation type is 8-PSK. This value is valid only when you set the**Burst Type** parameter to **NB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| QPSK (2) | The modulation type is QPSK. This value is valid only when you set the **Burst Type** parameter to **HB**. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 16QAM (3) | The modulation type is 16-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
| 32QAM (4) | The modulation type is 32-QAM. |
+--------------+--------------------------------------------------------------------------------------------------------------------------+
burst_type (enums.BurstType, int):
This parameter specifies the burst type. The default value is **NB**.
+--------------+---------------------------------------------+
| Name (Value) | Description |
+==============+=============================================+
| NB (0) | The burst type is Normal Burst. |
+--------------+---------------------------------------------+
| HB (1) | The burst type is Higher Symbol Rate Burst. |
+--------------+---------------------------------------------+
| AB (2) | The burst type is Access Burst. |
+--------------+---------------------------------------------+
hb_filter_width (enums.HBFilterWidth, int):
This parameter specifies the filter width when you set the **Burst Type** parameter to **HB**. The default value is
**Narrow**.
+--------------+---------------------------------------+
| Name (Value) | Description |
+==============+=======================================+
| Narrow (0) | The measurement uses a narrow filter. |
+--------------+---------------------------------------+
| Wide (1) | The measurement uses a wide filter. |
+--------------+---------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
modulation_type = (
modulation_type.value
if type(modulation_type) is enums.ModulationType
else modulation_type
)
burst_type = burst_type.value if type(burst_type) is enums.BurstType else burst_type
hb_filter_width = (
hb_filter_width.value
if type(hb_filter_width) is enums.HBFilterWidth
else hb_filter_width
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_signal_type( # type: ignore
updated_selector_string, modulation_type, burst_type, hb_filter_width
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_tsc(self, selector_string, tsc):
r"""Configures the training sequence code (TSC) in the burst.
Use "slot<*n*>" as the selector string to configure this method.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of slot
number.
Example:
"slot0"
"slot::all"
You can use the :py:meth:`build_slot_string` method to build the selector string.
tsc (enums.Tsc, int):
This parameter specifies the training sequence code in the burst. For access burst **TSC0**, **TSC1**, and **TSC2** are
applicable. The default value is **TSC0**.
+--------------+------------------------------------------------+
| Name (Value) | Description |
+==============+================================================+
| TSC0 (0) | The measurement uses training sequence code 0. |
+--------------+------------------------------------------------+
| TSC1 (1) | The measurement uses training sequence code 1. |
+--------------+------------------------------------------------+
| TSC2 (2) | The measurement uses training sequence code 2. |
+--------------+------------------------------------------------+
| TSC3 (3) | The measurement uses training sequence code 3. |
+--------------+------------------------------------------------+
| TSC4 (4) | The measurement uses training sequence code 4. |
+--------------+------------------------------------------------+
| TSC5 (5) | The measurement uses training sequence code 5. |
+--------------+------------------------------------------------+
| TSC6 (6) | The measurement uses training sequence code 6. |
+--------------+------------------------------------------------+
| TSC7 (7) | The measurement uses training sequence code 7. |
+--------------+------------------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
tsc = tsc.value if type(tsc) is enums.Tsc else tsc
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_tsc( # type: ignore
updated_selector_string, tsc
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_band(self, selector_string, band):
r"""Configures the band of operation.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
band (enums.Band, int):
This parameter specifies the band of operation. The default value is **PGSM**.
+--------------+------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================+
| PGSM (0) | The operation band is Primary GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| EGSM (1) | The operation band is Extended GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| RGSM (2) | The operation band is Railway GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| DCS1800 (3) | The operation band is GSM in the 1800 MHz band. |
+--------------+------------------------------------------------------------+
| PCS1900 (4) | The operation band is GSM in the 1900 MHz band. |
+--------------+------------------------------------------------------------+
| GSM450 (5) | The operation band is GSM in the 450 MHz band. |
+--------------+------------------------------------------------------------+
| GSM480 (6) | The operation band is GSM in the 480 MHz band. |
+--------------+------------------------------------------------------------+
| GSM850 (7) | The operation band is GSM in the 850 MHz band. |
+--------------+------------------------------------------------------------+
| GSM750 (8) | The operation band is GSM in the 750 MHz band. |
+--------------+------------------------------------------------------------+
| T-GSM810 (9) | The operation band is terrestrial GSM in the 810 MHz band. |
+--------------+------------------------------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
band = band.value if type(band) is enums.Band else band
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_band( # type: ignore
updated_selector_string, band
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_burst_synchronization_type(self, selector_string, burst_synchronization_type):
r"""Configures the burst synchronization type.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
burst_synchronization_type (enums.BurstSynchronizationType, int):
This parameter specifies the method used to synchronize the burst. The default value is **TSC**.
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===============+==========================================================================================================================+
| TSC (0) | Synchronizes the measurement to the timing of the demodulated training sequence in the burst. The measurement requires |
| | a burst with a valid training sequence code (TSC). The measurement determines the *T0* point by demodulating the burst |
| | and identifying the TSC. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Amplitude (1) | Synchronizes the measurement based on the RF envelope of the received signal. The measurement sets the *T0* point as |
| | the center of the RF Envelope. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| None (2) | Sets the *T0* point to 273.23 µsec after the trigger. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
burst_synchronization_type = (
burst_synchronization_type.value
if type(burst_synchronization_type) is enums.BurstSynchronizationType
else burst_synchronization_type
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_burst_synchronization_type( # type: ignore
updated_selector_string, burst_synchronization_type
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_link_direction(self, selector_string, link_direction):
r"""Configures the source of the signal to be measured.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
link_direction (enums.LinkDirection, int):
This parameter specifies the source of the signal to be measured. The default value is **Uplink**.
+--------------+-------------------------------------------+
| Name (Value) | Description |
+==============+===========================================+
| Downlink (0) | The source is a base transceiver station. |
+--------------+-------------------------------------------+
| Uplink (1) | The source is a mobile station. |
+--------------+-------------------------------------------+
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
link_direction = (
link_direction.value
if type(link_direction) is enums.LinkDirection
else link_direction
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_link_direction( # type: ignore
updated_selector_string, link_direction
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_power_control_level(self, selector_string, power_control_level):
r"""Configures the power control level corresponding to the transmitted power.
Use "slot<*n*>" as the selector string to configure this method.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of slot
number.
Example:
"slot0"
"slot::all"
You can use the :py:meth:`build_slot_string` method to build the selector string.
power_control_level (int):
This parameter specifies the power control level corresponding to the transmitted power, as defined in section 4.1 of
the *3GPP TS 45.005 v8.0.0* specifications. The default value is 0.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_power_control_level( # type: ignore
updated_selector_string, power_control_level
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_frequency_arfcn(self, selector_string, link_direction, band, arfcn):
r"""Configures the center frequency from the absolute RF channel number (ARFCN), band, and the link direction.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
link_direction (enums.LinkDirection, int):
This parameter specifies the source of the signal to be measured. The default value is **Uplink**.
+--------------+-------------------------------------------+
| Name (Value) | Description |
+==============+===========================================+
| Downlink (0) | The source is a base transceiver station. |
+--------------+-------------------------------------------+
| Uplink (1) | The source is a mobile station. |
+--------------+-------------------------------------------+
band (enums.Band, int):
This parameter specifies the band of operation. The default value is **PGSM**.
+--------------+------------------------------------------------------------+
| Name (Value) | Description |
+==============+============================================================+
| PGSM (0) | The operation band is Primary GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| EGSM (1) | The operation band is Extended GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| RGSM (2) | The operation band is Railway GSM in the 900 MHz band. |
+--------------+------------------------------------------------------------+
| DCS1800 (3) | The operation band is GSM in the 1800 MHz band. |
+--------------+------------------------------------------------------------+
| PCS1900 (4) | The operation band is GSM in the 1900 MHz band. |
+--------------+------------------------------------------------------------+
| GSM450 (5) | The operation band is GSM in the 450 MHz band. |
+--------------+------------------------------------------------------------+
| GSM480 (6) | The operation band is GSM in the 480 MHz band. |
+--------------+------------------------------------------------------------+
| GSM850 (7) | The operation band is GSM in the 850 MHz band. |
+--------------+------------------------------------------------------------+
| GSM750 (8) | The operation band is GSM in the 750 MHz band. |
+--------------+------------------------------------------------------------+
| T-GSM810 (9) | The operation band is terrestrial GSM in the 810 MHz band. |
+--------------+------------------------------------------------------------+
arfcn (int):
This parameter specifies the ARFCN. The default value is 1.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
link_direction = (
link_direction.value
if type(link_direction) is enums.LinkDirection
else link_direction
)
band = band.value if type(band) is enums.Band else band
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_frequency_arfcn( # type: ignore
updated_selector_string, link_direction, band, arfcn
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def reset_to_default(self, selector_string):
r"""Resets a signal to the default values.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.reset_to_default(updated_selector_string) # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def select_measurements(self, selector_string, measurements, enable_all_traces):
r"""Enables all the measurements that you specify in the **Measurements** parameter and disables all other measurements.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
measurements (enums.MeasurementTypes, int):
This parameter specifies the measurement to perform. You can specify one or more of the following measurements. The
default is an empty array.
+--------------+-----------------------------------------------------------------+
| Name (Value) | Description |
+==============+=================================================================+
| ModAcc (0) | Enables the modulation accuracy (ModAcc) measurement. |
+--------------+-----------------------------------------------------------------+
| ORFS (1) | Enables the output radio frequency spectrum (ORFS) measurement. |
+--------------+-----------------------------------------------------------------+
| PVT (2) | Enables the power versus time (PVT) measurement. |
+--------------+-----------------------------------------------------------------+
enable_all_traces (bool):
This parameter specifies whether to enable all traces for the selected measurement. The default value is FALSE.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
measurements = (
measurements.value if type(measurements) is enums.MeasurementTypes else measurements
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.select_measurements( # type: ignore
updated_selector_string, measurements, int(enable_all_traces)
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def check_measurement_status(self, selector_string):
r"""Checks the status of the measurement. Use this method to check for any errors that may occur during measurement or to
check whether the measurement is complete and results are available.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. The default is "" (empty string).
Example:
"result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
Returns:
Tuple (done, error_code):
done (bool):
This parameter indicates whether the measurement is complete.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
done, error_code = self._interpreter.check_measurement_status( # type: ignore
updated_selector_string
)
finally:
self._session_function_lock.exit_read_lock()
return done, error_code
@_raise_if_disposed
def wait_for_measurement_complete(self, selector_string, timeout):
r"""Waits for the specified number for seconds for all the measurements to complete.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. The default is "" (empty string).
Example:
"result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
timeout (float):
This parameter specifies the time for which the method waits for the measurement to complete. This value is expressed
in seconds. A value of -1 specifies that the method waits until the measurement is complete.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.wait_for_measurement_complete( # type: ignore
updated_selector_string, timeout
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def initiate(self, selector_string, result_name):
r"""Initiates all enabled measurements. Call this method after configuring the signal and measurement. This method
asynchronously launches measurements in the background and immediately returns to the caller program. You can fetch
measurement results using the Fetch methods or result attributes in the attribute node. To get the status of
measurements, use the :py:meth:`wait_for_measurement_complete` method or :py:meth:`check_measurement_status` method.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. The result name can either be specified through this input or the **Result Name** parameter. If you do not specify the result name in this parameter,
either the result name specified by the **Result Name** parameter or the default result instance is used. The
default value is "" (empty string).
Example:
""
"result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
result_name (string):
This parameter specifies the name to be associated with measurement results. Provide a unique name, such as "r1" to
enable fetching of multiple measurement results and traces. This input accepts the result name with or without the
"result::" prefix. The default value is "" (empty string), which refers to the default result instance.
Example:
""
"result::r1"
"r1"
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
_helper.validate_not_none(result_name, "result_name")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.initiate( # type: ignore
updated_selector_string, result_name
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def auto_level(self, selector_string, measurement_interval):
r"""Examines the input signal to calculate the peak power level and sets it as the value of the
:py:attr:`~nirfmxgsm.attributes.AttributeID.REFERENCE_LEVEL` attribute. Use this method to help calculate an
approximate setting for the reference level.
The RFmxGSM Auto Level method performs the following tasks:
#. Resets the mixer level, mixer level offset, and IF output power offset.
#. Sets the starting reference level to the maximum reference level supported by the device based on the current RF attenuation, mechanical attenuation, and preamplifier enabled settings.
#. Iterates to adjust the reference level based on the input signal peak power.
#. Uses immediate triggering and restores the trigger settings back to user setting after completing execution.
You can also specify the starting reference level using the
:py:attr:`~nirfmxgsm.attributes.AttributeID.AUTO_LEVEL_INITIAL_REFERENCE_LEVEL` attribute. Call this method after
configuring all signal attributes.
When using NI 5663, 5665, or 5668R devices, NI recommends that you set an appropriate value for mechanical
attenuation before calling the RFmx GSM Auto Level method. Setting an appropriate value for mechanical attenuation
reduces the number of times the attenuator settings are changed by this method, thus reducing wear and tear, and
maximizing the life time of the attenuator.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
measurement_interval (float):
This parameter specifies the acquisition length. Use this value to compute the number of samples to acquire from the
signal analyzer. This value is expressed in seconds. The default value is 4.6 ms.
Auto Level method does not use any trigger for acquisition. It ignores the user-configured trigger attributes.
NI recommends that you set a sufficiently high measurement interval to ensure that the acquired waveform is at least as
long as one period of the signal.
Returns:
Tuple (reference_level, error_code):
reference_level (float):
This parameter returns the estimated peak power level of the input signal. This value is expressed in dBm for RF
devices and V\ :sub:`pk-pk`\ for baseband devices.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
reference_level, error_code = self._interpreter.auto_level( # type: ignore
updated_selector_string, measurement_interval
)
finally:
self._session_function_lock.exit_read_lock()
return reference_level, error_code
@_raise_if_disposed
def clear_all_named_results(self, selector_string):
r"""Clears all results for the signal that you specify in the **Selector String** parameter.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.clear_all_named_results( # type: ignore
updated_selector_string
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def clear_named_result(self, selector_string):
r"""Clears a result instance specified by the result name in the **Selector String** parameter.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. The default is "" (empty string).
Example:
"result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.clear_named_result( # type: ignore
updated_selector_string
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def commit(self, selector_string):
r"""Commits settings to the hardware. Calling this method is optional. RFmxGSM commits settings to the hardware when you
call the :py:meth:`initiate` method.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.commit(updated_selector_string) # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def disable_trigger(self, selector_string):
r"""Configures the device to not wait for a trigger to mark a reference point within a record. This method defines the
signal triggering as immediate.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.disable_trigger(updated_selector_string) # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_digital_edge_trigger(
self, selector_string, digital_edge_source, digital_edge, trigger_delay, enable_trigger
):
r"""Configures the device to wait for a digital edge trigger and then marks a reference point within the record.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
digital_edge_source (string):
This parameter specifies the source terminal for the digital-edge trigger. The default of this attribute is hardware
dependent.
+-----------------------+-------------------------------------------------------+
| Name (Value) | Description |
+=======================+=======================================================+
| PFI0 (PFI0) | The trigger is received on PFI 0. |
+-----------------------+-------------------------------------------------------+
| PFI1 (PFI1) | The trigger is received on PFI 1. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig0 (PXI_Trig0) | The trigger is received on PXI trigger line 0. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig1 (PXI_Trig1) | The trigger is received on PXI trigger line 1. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig2 (PXI_Trig2) | The trigger is received on PXI trigger line 2. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig3 (PXI_Trig3) | The trigger is received on PXI trigger line 3. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig4 (PXI_Trig4) | The trigger is received on PXI trigger line 4. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig5 (PXI_Trig5) | The trigger is received on PXI trigger line 5. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig6 (PXI_Trig6) | The trigger is received on PXI trigger line 6. |
+-----------------------+-------------------------------------------------------+
| PXI_Trig7 (PXI_Trig7) | The trigger is received on PXI trigger line 7. |
+-----------------------+-------------------------------------------------------+
| PXI_STAR (PXI_STAR) | The trigger is received on the PXI star trigger line. |
+-----------------------+-------------------------------------------------------+
digital_edge (enums.DigitalEdgeTriggerEdge, int):
This parameter specifies the active edge for the trigger. This parameter is used only when you set the
:py:attr:`~nirfmxgsm.attributes.AttributeID.TRIGGER_TYPE` attribute to **Digital Edge**. The default value is **Rising
Edge**.
+------------------+--------------------------------------------------------+
| Name (Value) | Description |
+==================+========================================================+
| Rising Edge (0) | The trigger asserts on the rising edge of the signal. |
+------------------+--------------------------------------------------------+
| Falling Edge (1) | The trigger asserts on the falling edge of the signal. |
+------------------+--------------------------------------------------------+
trigger_delay (float):
This parameter specifies the trigger delay time, in seconds. The default value is 0.
enable_trigger (bool):
This parameter specifies whether to enable the trigger. The default value is TRUE.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
_helper.validate_not_none(digital_edge_source, "digital_edge_source")
digital_edge = (
digital_edge.value
if type(digital_edge) is enums.DigitalEdgeTriggerEdge
else digital_edge
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_digital_edge_trigger( # type: ignore
updated_selector_string,
digital_edge_source,
digital_edge,
trigger_delay,
int(enable_trigger),
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_iq_power_edge_trigger(
self,
selector_string,
iq_power_edge_source,
iq_power_edge_slope,
iq_power_edge_level,
trigger_delay,
minimum_quiet_time_mode,
minimum_quiet_time,
iq_power_edge_level_type,
enable_trigger,
):
r"""Configures the device to wait for the complex power of the I/Q data to cross the specified threshold and then marks a
reference point within the record.
To trigger on bursty signals, specify a minimum quiet time, which ensures that the trigger does not occur in
the middle of the burst signal. The quiet time must be set to a value smaller than the time between bursts, but large
enough to ignore power changes within a burst.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
iq_power_edge_source (string):
This parameter specifies the channel from which the device monitors the trigger. The default of this attribute is
hardware dependent.
iq_power_edge_slope (enums.IQPowerEdgeTriggerSlope, int):
This parameter specifies whether the device asserts the trigger when the signal power is rising or when it is falling.
The device asserts the trigger when the signal power exceeds the level that you specify in the **IQ Power Edge Level**
parameter with the slope you specify. The default value is **Rising Slope**.
+-------------------+-------------------------------------------------------+
| Name (Value) | Description |
+===================+=======================================================+
| Rising Slope (0) | The trigger asserts when the signal power is rising. |
+-------------------+-------------------------------------------------------+
| Falling Slope (1) | The trigger asserts when the signal power is falling. |
+-------------------+-------------------------------------------------------+
iq_power_edge_level (float):
This parameter specifies the power level at which the device triggers. This value is expressed in dB when you set the
**IQ Power Edge Level Type** parameter to **Relative**; and is expressed in dBm when you set the **IQ Power Edge Level
Type** parameter to **Absolute**. The device asserts the trigger when the signal exceeds the level specified by the
value of this parameter, taking into consideration the specified slope. The default of this attribute is hardware
dependent.
trigger_delay (float):
This parameter specifies the trigger delay time, in seconds. The default value is 0.
minimum_quiet_time_mode (enums.TriggerMinimumQuietTimeMode, int):
This parameter specifies whether the measurement computes the minimum quiet time used for triggering. The default value
is **Auto**.
+--------------+---------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+=============================================================================================+
| Manual (0) | The minimum quiet time for triggering is the value of the **Minimum Quiet Time** parameter. |
+--------------+---------------------------------------------------------------------------------------------+
| Auto (1) | The measurement computes the minimum quiet time used for triggering. |
+--------------+---------------------------------------------------------------------------------------------+
minimum_quiet_time (float):
This parameter specifies the time duration for which the signal must be quiet before the signal analyzer arms the I/Q
power edge trigger. This value is expressed in seconds. If you set the **IQ Power Edge Slope** parameter to **Rising
Slope**, the signal is quiet below the trigger level. If you set the **IQ Power Edge Slope** parameter to **Falling
Slope**, the signal is quiet above the trigger level. The default value is 582 µs.
iq_power_edge_level_type (enums.IQPowerEdgeTriggerLevelType, int):
This parameter specifies the reference for the **IQ Power Edge Level** parameter. The default value is **Relative**.
+--------------+---------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+==============+===============================================================================================================+
| Relative (0) | The value of the **IQ Power Edge Level** parameter is relative to the value of the Reference Level attribute. |
+--------------+---------------------------------------------------------------------------------------------------------------+
| Absolute (1) | The **IQ Power Edge Level** parameter specifies the absolute power. |
+--------------+---------------------------------------------------------------------------------------------------------------+
enable_trigger (bool):
This parameter specifies whether to enable the trigger. The default value is TRUE.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
_helper.validate_not_none(iq_power_edge_source, "iq_power_edge_source")
iq_power_edge_slope = (
iq_power_edge_slope.value
if type(iq_power_edge_slope) is enums.IQPowerEdgeTriggerSlope
else iq_power_edge_slope
)
minimum_quiet_time_mode = (
minimum_quiet_time_mode.value
if type(minimum_quiet_time_mode) is enums.TriggerMinimumQuietTimeMode
else minimum_quiet_time_mode
)
iq_power_edge_level_type = (
iq_power_edge_level_type.value
if type(iq_power_edge_level_type) is enums.IQPowerEdgeTriggerLevelType
else iq_power_edge_level_type
)
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_iq_power_edge_trigger( # type: ignore
updated_selector_string,
iq_power_edge_source,
iq_power_edge_slope,
iq_power_edge_level,
trigger_delay,
minimum_quiet_time_mode,
minimum_quiet_time,
iq_power_edge_level_type,
int(enable_trigger),
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def configure_software_edge_trigger(self, selector_string, trigger_delay, enable_trigger):
r"""Configures the device to wait for a software trigger and then marks a reference point within the record.
Args:
selector_string (string):
Pass an empty string.
The signal name that is passed when creating the signal configuration is used.
trigger_delay (float):
This parameter specifies the trigger delay time, in seconds. The default value is 0.
enable_trigger (bool):
This parameter specifies whether to enable the trigger. The default value is TRUE.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.configure_software_edge_trigger( # type: ignore
updated_selector_string, trigger_delay, int(enable_trigger)
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
@staticmethod
def build_result_string(result_name):
r"""Creates selector string for use with configuration or fetch.
Args:
result_name (string):
Specifies the result name for building the selector string.
This input accepts the result name with or without the "result::" prefix.
Example: "", "result::r1", "r1".
Returns:
string:
Contains the selector string created by this method.
"""
_helper.validate_not_none(result_name, "result_name")
return _helper.build_result_string(result_name)
@staticmethod
def build_slot_string(selector_string, slot_number):
r"""Creates a slot string to be used as the selector string with configuration or fetch attributes and methods.
Args:
selector_string (string):
Specifies the result name for building the selector string.
slot_number (int):
This parameter specifies the slot number for building the selector string.
Returns:
string:
Contains the selector string created by this method.
"""
_helper.validate_not_none(selector_string, "selector_string")
return _helper.build_slot_string(selector_string, slot_number) # type: ignore
@staticmethod
def build_offset_string(selector_string, offset_number):
r"""Creates an offset string to be used as the selector string with configuration or fetch attributes and methods.
Args:
selector_string (string):
Specifies the result name for building the selector string.
offset_number (int):
This parameter specifies the offset number for building the selector string.
Returns:
string:
Contains the selector string created by this method.
"""
_helper.validate_not_none(selector_string, "selector_string")
return _helper.build_offset_string(selector_string, offset_number) # type: ignore
@_raise_if_disposed
def clone_signal_configuration(self, new_signal_name):
r"""Creates a new instance of a signal by copying all the properties from an existing signal instance.
Args:
new_signal_name (string):
This parameter specifies the name of the new signal. This parameter accepts the signal name with or without the \"signal::\" prefix.
Example:
\"signal::NewSigName\"
\"NewSigName\"
Returns:
Tuple (cloned_signal, error_code):
cloned_signal (Gsm):
Contains a new GSM signal instance.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(new_signal_name, "new_signal_name")
updated_new_signal_name = _helper.validate_and_remove_signal_qualifier(
new_signal_name, self
)
cloned_signal, error_code = self._interpreter.clone_signal_configuration( # type: ignore
self.signal_configuration_name, updated_new_signal_name
)
finally:
self._session_function_lock.exit_read_lock()
return cloned_signal, error_code
@_raise_if_disposed
def send_software_edge_trigger(self):
r"""Sends a trigger to the device when you use the RFmxGSM Configure Trigger function to choose a software version of a trigger and the device is waiting for the trigger to be sent. You can also use this function to override a hardware trigger.
This function returns an error in the following situations:
- You configure an invalid trigger.
- You have not previously called the initiate function.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
error_code = self._interpreter.send_software_edge_trigger() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return error_code
@_raise_if_disposed
def analyze_iq_1_waveform(self, selector_string, result_name, x0, dx, iq, reset):
r"""Performs the enabled measurements on the I/Q complex waveform that you specify in the **IQ** parameter. Call this
method after you configure the signal and measurement attributes. You can fetch measurement results using the Fetch
methods or result attributes in the attribute node.
Use this method only if the :py:attr:`~nirfmxinstr.attribute.AttributeID.RECOMMENDED_ACQUISITION_TYPE` attribute value
is either **IQ** or **IQ or Spectral**.
.. note::
Query the Recommended Acquisition Type attribute from the RFmxInstr Attribute after calling the :py:meth:`commit`
method.
Args:
selector_string (string):
This parameter specifies the signal name and result name. The result name can either be specified through this input
or the **Result Name** parameter. If you do
not specify the result name in this parameter, either the result name specified by the **Result Name** parameter or
the default result instance is used.
Example:
""
"result::r1"
You can use the :py:meth:`build_result_string` method to build the `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_.
result_name (string):
This parameter specifies the name to be associated with measurement results. Provide a unique name, such as "r1" to
enable fetching of multiple measurement results and traces. This input accepts the result name with or without the
"result::" prefix. The default value is "" (empty string), which refers to the default result instance.
Example:
""
"result::r1"
"r1"
x0 (float):
This parameter specifies the start time of the input **y** array. This value is expressed in seconds.
dx (float):
This parameter specifies the time interval between the samples in the input **y** array. This value is expressed in
seconds. The reciprocal of **dx** indicates the I/Q rate of the input signal.
iq (numpy.complex64):
This parameter specifies an array of complex-valued time domain data. The real and imaginary parts of this complex data
array correspond to the in-phase (I) and quadrature-phase (Q) data, respectively.
reset (bool):
This parameter resets measurement averaging. If you enable averaging, set this parameter to TRUE for the first record
and FALSE for the subsequent records.
Returns:
int:
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
_helper.validate_not_none(result_name, "result_name")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self
)
error_code = self._interpreter.analyze_iq_1_waveform( # type: ignore
updated_selector_string, result_name, x0, dx, iq, int(reset)
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
class Gsm(_GsmBase):
"""Defines a root class which is used to identify and control Gsm signal configuration."""
def __init__(self, session, signal_name="", cloning=False):
"""Initializes a Gsm signal configuration."""
super(Gsm, self).__init__(
session=session,
signal_name=signal_name,
cloning=cloning,
) # type: ignore
def __enter__(self):
"""Enters the context of the Gsm signal configuration."""
return self
def __exit__(self, exc_type, exc_value, traceback):
"""Exits the context of the Gsm signal configuration."""
self.dispose() # type: ignore
pass