from .........Internal.Core import Core
from .........Internal.CommandsGroup import CommandsGroup
from .........Internal import Conversions
from ......... import enums
from ......... import repcap


# noinspection PyPep8Naming,PyAttributeOutsideInit,SpellCheckingInspection
class Data:
	"""Data commands group definition. 1 total commands, 0 Sub-groups, 1 group commands"""

	def __init__(self, core: Core, parent):
		self._core = core
		self._base = CommandsGroup("data", core, parent)

	def set(self, data: enums.EutraDlDataSourceUser, subframeNull=repcap.SubframeNull.Default, allocationNull=repcap.AllocationNull.Default, codeword=repcap.Codeword.Default) -> None:
		"""SCPI: [SOURce<HW>]:BB:EUTRa:DL:[SUBF<ST0>]:ALLoc<CH0>:[CW<USER>]:DATA \n
		Snippet: driver.source.bb.eutra.downlink.subf.alloc.cw.data.set(data = enums.EutraDlDataSourceUser.DLISt, subframeNull = repcap.SubframeNull.Default, allocationNull = repcap.AllocationNull.Default, codeword = repcap.Codeword.Default) \n
		Sets the data source for the selected allocation. For allocations with two codewords, the data source for the second
		codeword is automatically set to the data source set for the first one. \n
			:param data: USER1| USER2| USER3| USER4| PN9| PN11| PN15| PN16| PN20| PN21| PN23| PATTern| DLISt| ZERO| ONE| MIB| MCCH| MTCH MIB (Result parameter) Indicates that the PBCH transmits real MIB data. (See also [:SOURcehw]:BB:EUTRa:DL:PBCH:MIB) MCCH|MTCH (Result parameter) Indicates allocations in the MBSFN subframes, if MBSFN is used. (See also [:SOURcehw]:BB:EUTRa:DL:MBSFn:MODE)
			:param subframeNull: optional repeated capability selector. Default value: Nr0 (settable in the interface 'Subf')
			:param allocationNull: optional repeated capability selector. Default value: Nr0 (settable in the interface 'Alloc')
			:param codeword: optional repeated capability selector. Default value: Nr1 (settable in the interface 'Cw')"""
		param = Conversions.enum_scalar_to_str(data, enums.EutraDlDataSourceUser)
		subframeNull_cmd_val = self._base.get_repcap_cmd_value(subframeNull, repcap.SubframeNull)
		allocationNull_cmd_val = self._base.get_repcap_cmd_value(allocationNull, repcap.AllocationNull)
		codeword_cmd_val = self._base.get_repcap_cmd_value(codeword, repcap.Codeword)
		self._core.io.write(f'SOURce<HwInstance>:BB:EUTRa:DL:SUBF{subframeNull_cmd_val}:ALLoc{allocationNull_cmd_val}:CW{codeword_cmd_val}:DATA {param}')

	# noinspection PyTypeChecker
	def get(self, subframeNull=repcap.SubframeNull.Default, allocationNull=repcap.AllocationNull.Default, codeword=repcap.Codeword.Default) -> enums.EutraDlDataSourceUser:
		"""SCPI: [SOURce<HW>]:BB:EUTRa:DL:[SUBF<ST0>]:ALLoc<CH0>:[CW<USER>]:DATA \n
		Snippet: value: enums.EutraDlDataSourceUser = driver.source.bb.eutra.downlink.subf.alloc.cw.data.get(subframeNull = repcap.SubframeNull.Default, allocationNull = repcap.AllocationNull.Default, codeword = repcap.Codeword.Default) \n
		Sets the data source for the selected allocation. For allocations with two codewords, the data source for the second
		codeword is automatically set to the data source set for the first one. \n
			:param subframeNull: optional repeated capability selector. Default value: Nr0 (settable in the interface 'Subf')
			:param allocationNull: optional repeated capability selector. Default value: Nr0 (settable in the interface 'Alloc')
			:param codeword: optional repeated capability selector. Default value: Nr1 (settable in the interface 'Cw')
			:return: data: USER1| USER2| USER3| USER4| PN9| PN11| PN15| PN16| PN20| PN21| PN23| PATTern| DLISt| ZERO| ONE| MIB| MCCH| MTCH MIB (Result parameter) Indicates that the PBCH transmits real MIB data. (See also [:SOURcehw]:BB:EUTRa:DL:PBCH:MIB) MCCH|MTCH (Result parameter) Indicates allocations in the MBSFN subframes, if MBSFN is used. (See also [:SOURcehw]:BB:EUTRa:DL:MBSFn:MODE)"""
		subframeNull_cmd_val = self._base.get_repcap_cmd_value(subframeNull, repcap.SubframeNull)
		allocationNull_cmd_val = self._base.get_repcap_cmd_value(allocationNull, repcap.AllocationNull)
		codeword_cmd_val = self._base.get_repcap_cmd_value(codeword, repcap.Codeword)
		response = self._core.io.query_str(f'SOURce<HwInstance>:BB:EUTRa:DL:SUBF{subframeNull_cmd_val}:ALLoc{allocationNull_cmd_val}:CW{codeword_cmd_val}:DATA?')
		return Conversions.str_to_scalar_enum(response, enums.EutraDlDataSourceUser)
