"""Provides methods to configure the Cda measurement."""
import functools
import nirfmxwcdma.attributes as attributes
import nirfmxwcdma.enums as enums
import nirfmxwcdma.errors as errors
import nirfmxwcdma.internal._helper as _helper
def _raise_if_disposed(f):
"""From https://stackoverflow.com/questions/5929107/decorators-with-parameters."""
@functools.wraps(f)
def aux(*xs, **kws):
meas_obj = xs[0] # parameter 0 is 'self' which is the measurement object
if meas_obj._signal_obj.is_disposed:
raise Exception("Cannot access a disposed Wcdma signal configuration")
return f(*xs, **kws)
return aux
[docs]
class CdaConfiguration(object):
"""Provides methods to configure the Cda measurement."""
def __init__(self, signal_obj):
"""Provides methods to configure the Cda measurement."""
self._signal_obj = signal_obj
self._session_function_lock = signal_obj._session_function_lock
self._interpreter = signal_obj._interpreter
[docs]
@_raise_if_disposed
def get_measurement_enabled(self, selector_string):
r"""Gets whether to enable the CDA measurement.
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.
The default value is FALSE.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (bool):
Specifies whether to enable the CDA measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_ENABLED.value
)
attr_val = bool(attr_val)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_enabled(self, selector_string, value):
r"""Sets whether to enable the CDA measurement.
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.
The default value is FALSE.
Args:
selector_string (string):
Pass an empty string.
value (bool):
Specifies whether to enable the CDA measurement.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_ENABLED.value,
int(value),
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_synchronization_mode(self, selector_string):
r"""Gets whether the measurement is performed from the frame, slot, or symbol boundary.
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.
The default value is **Slot**.
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===============+==========================================================================================================================+
| Frame (0) | The frame boundary is detected and the measurement is performed over the number of slots expressed by the CDA Meas |
| | Length attribute, starting at CDA Meas Offset slots from the frame boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Slot (1) | The slot boundary is detected and the measurement is performed over the number of slots expressed by CDA Meas Length |
| | attribute, starting at CDA Meas Offset slots from the slot boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Arbitrary (2) | The symbol boundary is detected and the measurement is performed over the number of slots expressed by the CDA Meas |
| | Length attribute, starting at CDA Meas Offset slots from the symbol boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaSynchronizationMode):
Specifies whether the measurement is performed from the frame, slot, or symbol boundary.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_SYNCHRONIZATION_MODE.value
)
attr_val = enums.CdaSynchronizationMode(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_synchronization_mode(self, selector_string, value):
r"""Sets whether the measurement is performed from the frame, slot, or symbol boundary.
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.
The default value is **Slot**.
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Name (Value) | Description |
+===============+==========================================================================================================================+
| Frame (0) | The frame boundary is detected and the measurement is performed over the number of slots expressed by the CDA Meas |
| | Length attribute, starting at CDA Meas Offset slots from the frame boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Slot (1) | The slot boundary is detected and the measurement is performed over the number of slots expressed by CDA Meas Length |
| | attribute, starting at CDA Meas Offset slots from the slot boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
| Arbitrary (2) | The symbol boundary is detected and the measurement is performed over the number of slots expressed by the CDA Meas |
| | Length attribute, starting at CDA Meas Offset slots from the symbol boundary. |
+---------------+--------------------------------------------------------------------------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaSynchronizationMode, int):
Specifies whether the measurement is performed from the frame, slot, or symbol boundary.
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._signal_obj
)
value = value.value if type(value) is enums.CdaSynchronizationMode else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_SYNCHRONIZATION_MODE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_offset(self, selector_string):
r"""Gets the measurement offset to skip from the synchronization boundary. This value is expressed in slots. The
synchronization boundary is specified by the :py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_SYNCHRONIZATION_MODE`
attribute.
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.
The default value is 0. Valid values are [0, (15 -
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_LENGTH`)]. The sum of the CDA measurement offset and CDA
measurement length must be less than or equal to 15.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the measurement offset to skip from the synchronization boundary. This value is expressed in slots. The
synchronization boundary is specified by the :py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_SYNCHRONIZATION_MODE`
attribute.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_OFFSET.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_offset(self, selector_string, value):
r"""Sets the measurement offset to skip from the synchronization boundary. This value is expressed in slots. The
synchronization boundary is specified by the :py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_SYNCHRONIZATION_MODE`
attribute.
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.
The default value is 0. Valid values are [0, (15 -
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_LENGTH`)]. The sum of the CDA measurement offset and CDA
measurement length must be less than or equal to 15.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the measurement offset to skip from the synchronization boundary. This value is expressed in slots. The
synchronization boundary is specified by the :py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_SYNCHRONIZATION_MODE`
attribute.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_OFFSET.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_length(self, selector_string):
r"""Gets the duration of the code domain measurement. This value is expressed in slots.
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.
The default value is 1. Valid values are [1, (15 -
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_OFFSET`)]. The sum of the CDA measurement offset and CDA
measurement length must be less than or equal to 15.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the duration of the code domain measurement. This value is expressed in slots.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_LENGTH.value
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_length(self, selector_string, value):
r"""Sets the duration of the code domain measurement. This value is expressed in slots.
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.
The default value is 1. Valid values are [1, (15 -
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_OFFSET`)]. The sum of the CDA measurement offset and CDA
measurement length must be less than or equal to 15.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the duration of the code domain measurement. This value is expressed in slots.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_LENGTH.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_channel_spreading_factor(self, selector_string):
r"""Gets the spreading factor of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is 256. Valid values are 2, 4, 8, 16, 32, 64, 128, and 256.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the spreading factor of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_FACTOR.value,
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_channel_spreading_factor(self, selector_string, value):
r"""Sets the spreading factor of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is 256. Valid values are 2, 4, 8, 16, 32, 64, 128, and 256.
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the spreading factor of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_FACTOR.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_channel_spreading_code(self, selector_string):
r"""Gets the spreading code of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is 0. Valid values are 0 to
(:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_FACTOR` - 1).
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (int):
Specifies the spreading code of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_CODE.value,
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_channel_spreading_code(self, selector_string, value):
r"""Sets the spreading code of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is 0. Valid values are 0 to
(:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_FACTOR` - 1).
Args:
selector_string (string):
Pass an empty string.
value (int):
Specifies the spreading code of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_SPREADING_CODE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_channel_modulation_type(self, selector_string):
r"""Gets the modulation type of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is **BPSK/QPSK**.
+----------------+-------------------------------+
| Name (Value) | Description |
+================+===============================+
| BPSK/QPSK (0) | The modulation type is BPSK. |
+----------------+-------------------------------+
| 4PAM/16QAM (1) | The modulation type is 4-PAM. |
+----------------+-------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaMeasurementChannelModulationType):
Specifies the modulation type of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_MODULATION_TYPE.value,
)
attr_val = enums.CdaMeasurementChannelModulationType(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_channel_modulation_type(self, selector_string, value):
r"""Sets the modulation type of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is **BPSK/QPSK**.
+----------------+-------------------------------+
| Name (Value) | Description |
+================+===============================+
| BPSK/QPSK (0) | The modulation type is BPSK. |
+----------------+-------------------------------+
| 4PAM/16QAM (1) | The modulation type is 4-PAM. |
+----------------+-------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaMeasurementChannelModulationType, int):
Specifies the modulation type of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
value = (
value.value if type(value) is enums.CdaMeasurementChannelModulationType else value
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_MODULATION_TYPE.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_measurement_channel_branch(self, selector_string):
r"""Gets the branch of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is **Q**.
+--------------+---------------------------------------------------------+
| Name (Value) | Description |
+==============+=========================================================+
| I (0) | The signal is modulated on the in-phase branch. |
+--------------+---------------------------------------------------------+
| Q (1) | The signal is modulated on the quadrature-phase branch. |
+--------------+---------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaMeasurementChannelBranch):
Specifies the branch of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_BRANCH.value
)
attr_val = enums.CdaMeasurementChannelBranch(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_measurement_channel_branch(self, selector_string, value):
r"""Sets the branch of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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.
The default value is **Q**.
+--------------+---------------------------------------------------------+
| Name (Value) | Description |
+==============+=========================================================+
| I (0) | The signal is modulated on the in-phase branch. |
+--------------+---------------------------------------------------------+
| Q (1) | The signal is modulated on the quadrature-phase branch. |
+--------------+---------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaMeasurementChannelBranch, int):
Specifies the branch of the measurement channel. This value is used to compute the symbol results of the CDA
measurement.
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._signal_obj
)
value = value.value if type(value) is enums.CdaMeasurementChannelBranch else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_MEASUREMENT_CHANNEL_BRANCH.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_power_unit(self, selector_string):
r"""Gets the measurement unit of all power results, except
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_RESULTS_TOTAL_POWER`.
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.
The default value is **dB**.
+--------------+--------------------------------------------------+
| Name (Value) | Description |
+==============+==================================================+
| dB (0) | Specifies the power relative to the total power. |
+--------------+--------------------------------------------------+
| dBm (1) | Specifies the absolute power measured. |
+--------------+--------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaPowerUnit):
Specifies the measurement unit of all power results, except
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_RESULTS_TOTAL_POWER`.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_POWER_UNIT.value
)
attr_val = enums.CdaPowerUnit(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_power_unit(self, selector_string, value):
r"""Sets the measurement unit of all power results, except
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_RESULTS_TOTAL_POWER`.
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.
The default value is **dB**.
+--------------+--------------------------------------------------+
| Name (Value) | Description |
+==============+==================================================+
| dB (0) | Specifies the power relative to the total power. |
+--------------+--------------------------------------------------+
| dBm (1) | Specifies the absolute power measured. |
+--------------+--------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaPowerUnit, int):
Specifies the measurement unit of all power results, except
:py:attr:`~nirfmxwcdma.attributes.AttributeID.CDA_RESULTS_TOTAL_POWER`.
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._signal_obj
)
value = value.value if type(value) is enums.CdaPowerUnit else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_POWER_UNIT.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_spectrum_inverted(self, selector_string):
r"""Gets whether the spectrum of the signal is inverted.
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.
The default value is **False**.
+--------------+-------------------------------+
| Name (Value) | Description |
+==============+===============================+
| False (0) | The spectrum is not inverted. |
+--------------+-------------------------------+
| True (1) | The spectrum is inverted. |
+--------------+-------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaSpectrumInverted):
Specifies whether the spectrum of the signal is inverted.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_SPECTRUM_INVERTED.value
)
attr_val = enums.CdaSpectrumInverted(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_spectrum_inverted(self, selector_string, value):
r"""Sets whether the spectrum of the signal is inverted.
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.
The default value is **False**.
+--------------+-------------------------------+
| Name (Value) | Description |
+==============+===============================+
| False (0) | The spectrum is not inverted. |
+--------------+-------------------------------+
| True (1) | The spectrum is inverted. |
+--------------+-------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaSpectrumInverted, int):
Specifies whether the spectrum of the signal is inverted.
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._signal_obj
)
value = value.value if type(value) is enums.CdaSpectrumInverted else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_SPECTRUM_INVERTED.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_iq_offset_removal_enabled(self, selector_string):
r"""Gets whether to remove the I/Q offset before the CDA measurement.
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.
The default value is **False**.
+--------------+-----------------------------------------------------------+
| Name (Value) | Description |
+==============+===========================================================+
| False (0) | The I/Q offset is not removed before the CDA measurement. |
+--------------+-----------------------------------------------------------+
| True (1) | the I/Q offset is removed before the CDA measurement. |
+--------------+-----------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaIQOffsetRemovalEnabled):
Specifies whether to remove the I/Q offset before the CDA measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_IQ_OFFSET_REMOVAL_ENABLED.value
)
attr_val = enums.CdaIQOffsetRemovalEnabled(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_iq_offset_removal_enabled(self, selector_string, value):
r"""Sets whether to remove the I/Q offset before the CDA measurement.
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.
The default value is **False**.
+--------------+-----------------------------------------------------------+
| Name (Value) | Description |
+==============+===========================================================+
| False (0) | The I/Q offset is not removed before the CDA measurement. |
+--------------+-----------------------------------------------------------+
| True (1) | the I/Q offset is removed before the CDA measurement. |
+--------------+-----------------------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaIQOffsetRemovalEnabled, int):
Specifies whether to remove the I/Q offset before the CDA measurement.
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._signal_obj
)
value = value.value if type(value) is enums.CdaIQOffsetRemovalEnabled else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_IQ_OFFSET_REMOVAL_ENABLED.value,
value,
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_rrc_filter_enabled(self, selector_string):
r"""Gets whether to enable the RRC filter. Use this attribute to disable the filter if the received signal is already
RRC-filtered.
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.
The default value is **True**.
+--------------+---------------------------------------------+
| Name (Value) | Description |
+==============+=============================================+
| False (0) | Disables the RRC filter in the measurement. |
+--------------+---------------------------------------------+
| True (1) | Enables the RRC filter in the measurement. |
+--------------+---------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (enums.CdaRrcFilterEnabled):
Specifies whether to enable the RRC filter. Use this attribute to disable the filter if the received signal is already
RRC-filtered.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_RRC_FILTER_ENABLED.value
)
attr_val = enums.CdaRrcFilterEnabled(attr_val)
except (KeyError, ValueError):
raise errors.DriverTooNewError() # type: ignore
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_rrc_filter_enabled(self, selector_string, value):
r"""Sets whether to enable the RRC filter. Use this attribute to disable the filter if the received signal is already
RRC-filtered.
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.
The default value is **True**.
+--------------+---------------------------------------------+
| Name (Value) | Description |
+==============+=============================================+
| False (0) | Disables the RRC filter in the measurement. |
+--------------+---------------------------------------------+
| True (1) | Enables the RRC filter in the measurement. |
+--------------+---------------------------------------------+
Args:
selector_string (string):
Pass an empty string.
value (enums.CdaRrcFilterEnabled, int):
Specifies whether to enable the RRC filter. Use this attribute to disable the filter if the received signal is already
RRC-filtered.
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._signal_obj
)
value = value.value if type(value) is enums.CdaRrcFilterEnabled else value
error_code = self._interpreter.set_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_RRC_FILTER_ENABLED.value, value
)
finally:
self._session_function_lock.exit_read_lock()
return error_code
[docs]
@_raise_if_disposed
def get_all_traces_enabled(self, selector_string):
r"""Gets whether to enable the traces after performing the CDA measurement.
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.
The default value is FALSE.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (bool):
Specifies whether to enable the traces after performing the CDA measurement.
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._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_i32(
updated_selector_string, attributes.AttributeID.CDA_ALL_TRACES_ENABLED.value
)
attr_val = bool(attr_val)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def set_all_traces_enabled(self, selector_string, value):
r"""Sets whether to enable the traces after performing the CDA measurement.
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.
The default value is FALSE.
Args:
selector_string (string):
Pass an empty string.
value (bool):
Specifies whether to enable the traces after performing the CDA measurement.
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._signal_obj
)
error_code = self._interpreter.set_attribute_i32(
updated_selector_string,
attributes.AttributeID.CDA_ALL_TRACES_ENABLED.value,
int(value),
)
finally:
self._session_function_lock.exit_read_lock()
return error_code