diff --git a/docker-compose/recv-sim.yml b/docker-compose/recv-sim.yml index f6332a33ac01e6cdbc8bb4c1cc1c61cdffbb6a51..3d14da48dc9e258402dd1fd9820ed981f7c09fca 100644 --- a/docker-compose/recv-sim.yml +++ b/docker-compose/recv-sim.yml @@ -23,5 +23,5 @@ services: max-file: "10" networks: - control - entrypoint: hwtr --simulator --port 4840 --config RECVTR + entrypoint: hwtr --simulator --port 4840 --config RECVTR_HB,RECVTR_LB,PPS restart: on-failure diff --git a/tangostationcontrol/tangostationcontrol/devices/antennafield.py b/tangostationcontrol/tangostationcontrol/devices/antennafield.py index d1c410321bdef9cc11152cfb46eb0ea84fb89de6..888ff9c399df82898feab4d733525cc542f54c66 100644 --- a/tangostationcontrol/tangostationcontrol/devices/antennafield.py +++ b/tangostationcontrol/tangostationcontrol/devices/antennafield.py @@ -615,6 +615,34 @@ class AntennaField(LOFARDevice): dtype=(bool,), max_dim_x=MAX_ANTENNA, ) + RCU_DTH_PWR_R = MappedAttribute( + "RCU_DTH_PWR_R", + dtype=(numpy.float64,), + max_dim_x=MAX_ANTENNA, + doc="RCU Dither source power (dBm). Range -25 to -4.", + min_value=-25, + max_value=-4, + ) + RCU_DTH_PWR_RW = MappedAttribute( + "RCU_DTH_PWR_RW", + dtype=(numpy.float64,), + max_dim_x=MAX_ANTENNA, + access=AttrWriteType.READ_WRITE, + doc="RCU Dither source power (dBm). Range -25 to -4.", + min_value=-25, + max_value=-4, + ) + RCU_DAB_filter_on_R = MappedAttribute( + "RCU_DAB_filter_on_R", + dtype=(bool,), + max_dim_x=MAX_ANTENNA, + ) + RCU_DAB_filter_on_RW = MappedAttribute( + "RCU_DAB_filter_on_RW", + dtype=(bool,), + max_dim_x=MAX_ANTENNA, + access=AttrWriteType.READ_WRITE, + ) RCU_PCB_ID_R = MappedAttribute( "RCU_PCB_ID_R", dtype=((numpy.int64,),), @@ -627,7 +655,6 @@ class AntennaField(LOFARDevice): max_dim_x=2, max_dim_y=MAX_ANTENNA, ) - # ----- Attributes mapped on SDP FPGA_sdp_info_observation_id_R = MappedAttribute( @@ -1565,6 +1592,10 @@ class AntennaToRecvMapper(object): "RCU_DTH_on_R": [self._control_mapping], "RCU_PCB_ID_R": [self._control_mapping, self._power_mapping], "RCU_PCB_version_R": [self._control_mapping, self._power_mapping], + "RCU_DTH_PWR_R": [self._control_mapping], + "RCU_DTH_PWR_RW": [self._control_mapping], + "RCU_DAB_filter_on_R": [self._control_mapping], + "RCU_DAB_filter_on_RW": [self._control_mapping], } self._default_value_mapping_read = { "ANT_mask_RW": value_map_ant_bool, @@ -1585,6 +1616,10 @@ class AntennaToRecvMapper(object): "RCU_DTH_freq_R": numpy.zeros(number_of_antennas, dtype=numpy.float64), "RCU_DTH_freq_RW": numpy.zeros(number_of_antennas, dtype=numpy.float64), "RCU_DTH_on_R": value_map_ant_bool, + "RCU_DTH_PWR_R": numpy.zeros(number_of_antennas, dtype=numpy.float64), + "RCU_DTH_PWR_RW": numpy.zeros(number_of_antennas, dtype=numpy.float64), + "RCU_DAB_filter_on_R": value_map_ant_bool, + "RCU_DAB_filter_on_RW": value_map_ant_bool, "RCU_PCB_ID_R": numpy.zeros((number_of_antennas, 2), dtype=numpy.int64), "RCU_PCB_version_R": numpy.full((number_of_antennas, 2), "", dtype=str), } @@ -1599,6 +1634,8 @@ class AntennaToRecvMapper(object): "RCU_attenuator_dB_R": AntennaToRecvMapper._VALUE_MAP_NONE_96, "RCU_attenuator_dB_RW": AntennaToRecvMapper._VALUE_MAP_NONE_96, "RCU_DTH_freq_RW": AntennaToRecvMapper._VALUE_MAP_NONE_96, + "RCU_DTH_PWR_RW": AntennaToRecvMapper._VALUE_MAP_NONE_96, + "RCU_DAB_filter_on_RW": AntennaToRecvMapper._VALUE_MAP_NONE_96, "RCU_PCB_ID_R": AntennaToRecvMapper._VALUE_MAP_NONE_96_2, "RCU_PCB_version_R": AntennaToRecvMapper._VALUE_MAP_NONE_96_2, } @@ -1614,6 +1651,10 @@ class AntennaToRecvMapper(object): "RCU_DTH_freq_R": (MAX_ANTENNA,), "RCU_DTH_freq_RW": (MAX_ANTENNA,), "RCU_DTH_on_R": (MAX_ANTENNA,), + "RCU_DTH_PWR_R": (MAX_ANTENNA,), + "RCU_DTH_PWR_RW": (MAX_ANTENNA,), + "RCU_DAB_filter_on_R": (MAX_ANTENNA,), + "RCU_DAB_filter_on_RW": (MAX_ANTENNA,), "RCU_PCB_ID_R": (MAX_ANTENNA,), "RCU_PCB_version_R": (MAX_ANTENNA,), } @@ -1629,6 +1670,10 @@ class AntennaToRecvMapper(object): "RCU_DTH_freq_R": (N_rcu, N_rcu_inp), "RCU_DTH_freq_RW": (N_rcu, N_rcu_inp), "RCU_DTH_on_R": (N_rcu, N_rcu_inp), + "RCU_DTH_PWR_R": (N_rcu, N_rcu_inp), + "RCU_DTH_PWR_RW": (N_rcu, N_rcu_inp), + "RCU_DAB_filter_on_R": (N_rcu, N_rcu_inp), + "RCU_DAB_filter_on_RW": (N_rcu, N_rcu_inp), "RCU_PCB_ID_R": (N_rcu,), "RCU_PCB_version_R": (N_rcu,), } diff --git a/tangostationcontrol/tangostationcontrol/devices/recv.py b/tangostationcontrol/tangostationcontrol/devices/recv.py index 26b57caa6023c3353a861bd07b82f303d7f50bea..afbd472178e63938e31590bd77de0a4de19373cf 100644 --- a/tangostationcontrol/tangostationcontrol/devices/recv.py +++ b/tangostationcontrol/tangostationcontrol/devices/recv.py @@ -251,6 +251,23 @@ class RECV(OPCUADevice): RCU_DTH_on_R = AttributeWrapper( comms_annotation=["RCU_DTH_on_R"], datatype=bool, dims=(N_rcu, N_rcu_inp) ) + RCU_DTH_PWR_R = AttributeWrapper( + comms_annotation=["RCU_DTH_PWR_R"], + datatype=numpy.float64, + dims=(N_rcu, N_rcu_inp), + doc="RCU Dither source power (dBm). Range -25 to -4.", + min_value=-25, + max_value=-4, + ) + RCU_DTH_PWR_RW = AttributeWrapper( + comms_annotation=["RCU_DTH_PWR_RW"], + datatype=numpy.float64, + access=AttrWriteType.READ_WRITE, + dims=(N_rcu, N_rcu_inp), + doc="RCU Dither source power (dBm). Range -25 to -4.", + min_value=-25, + max_value=-4, + ) RCU_LED_green_on_R = AttributeWrapper( comms_annotation=["RCU_LED_green_on_R"], datatype=bool, dims=(N_rcu,) ) @@ -341,6 +358,18 @@ class RECV(OPCUADevice): comms_annotation=["RECVTR_translator_busy_R"], datatype=bool ) + RCU_DAB_filter_on_R = AttributeWrapper( + comms_annotation=["RCU_DAB_filter_on_R"], + datatype=bool, + dims=(N_rcu, N_rcu_inp), + ) + RCU_DAB_filter_on_RW = AttributeWrapper( + comms_annotation=["RCU_DAB_filter_on_RW"], + datatype=bool, + access=AttrWriteType.READ_WRITE, + dims=(N_rcu, N_rcu_inp), + ) + # ---------- # Summarising Attributes # ----------