Skip to content
Snippets Groups Projects
Commit 5ff83972 authored by Jan David Mol's avatar Jan David Mol
Browse files

Resolve L2SS-1499 "Add frequency band default"

parent ee829eb4
Branches
Tags
1 merge request!725Resolve L2SS-1499 "Add frequency band default"
Showing
with 651 additions and 221 deletions
......@@ -419,12 +419,6 @@
"DigitalBeam": {
"STAT/DigitalBeam/HBA0": {
"properties": {
"AntennaField_Device": [
"STAT/AntennaField/HBA0"
],
"Beamlet_Device": [
"STAT/Beamlet/HBA0"
],
"Beam_tracking_interval": [
"1.0"
],
......@@ -438,12 +432,6 @@
},
"STAT/DigitalBeam/HBA1": {
"properties": {
"AntennaField_Device": [
"STAT/AntennaField/HBA1"
],
"Beamlet_Device": [
"STAT/Beamlet/HBA1"
],
"Beam_tracking_interval": [
"1.0"
],
......@@ -457,12 +445,6 @@
},
"STAT/DigitalBeam/LBA": {
"properties": {
"AntennaField_Device": [
"STAT/AntennaField/LBA"
],
"Beamlet_Device": [
"STAT/Beamlet/LBA"
],
"Beam_tracking_interval": [
"1.0"
],
......@@ -488,7 +470,7 @@
],
"Control_Children": [
"STAT/SDPFirmware/LBA",
"STAT/digitalbeam/LBA",
"STAT/DigitalBeam/LBA",
"STAT/RECVL/L0",
"STAT/RECVL/L1"
],
......@@ -593,108 +575,108 @@
"3826989.173", "460890.761", "5064596.467",
"3826990.269", "460895.632", "5064595.204"
],
"HBAT_PQR_rotation_angles_deg": [
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24",
"24"
],
"PQR_to_ETRS_rotation_matrix": [
"-0.1195951054", "-0.7919544517", "0.5987530018",
" 0.9928227484", "-0.0954186800", "0.0720990002",
" 0.0000330969", " 0.6030782884", "0.7976820024"
],
"Frequency_Band_RW_default": [
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90",
"LBA_30_90", "LBA_30_90"
]
}
},
......@@ -911,6 +893,104 @@
"-0.1195951054", "-0.7919544517", "0.5987530018",
" 0.9928227484", "-0.0954186800", "0.0720990002",
" 0.0000330969", " 0.6030782884", "0.7976820024"
],
"Frequency_Band_RW_default": [
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190"
]
}
},
......@@ -1127,6 +1207,104 @@
"-0.1195951054", "-0.7919544517", "0.5987530018",
" 0.9928227484", "-0.0954186800", "0.0720990002",
" 0.0000330969", " 0.6030782884", "0.7976820024"
],
"Frequency_Band_RW_default": [
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190"
]
}
}
......
......@@ -169,6 +169,32 @@
"5", "5", "3", "13", "10", "3",
"12", "2", "7", "15", "6", "14",
"7", "5", "7", "9", "0", "15"
],
"Frequency_Band_RW_default": [
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190"
]
}
},
......@@ -194,6 +220,32 @@
"5", "5", "3", "13", "10", "3",
"12", "2", "7", "15", "6", "14",
"7", "5", "7", "9", "0", "15"
],
"Frequency_Band_RW_default": [
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190"
]
}
}
......
......@@ -110,6 +110,56 @@
"8", "2", "12", "13", "9", "13",
"4", "5", "5", "12", "5", "5",
"9", "11", "15", "12", "2", "15"
],
"Frequency_Band_RW_default": [
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190",
"HBA_110_190", "HBA_110_190"
]
}
}
......
......@@ -89,6 +89,104 @@
],
"Antenna_Type": [
"LBA"
],
"Frequency_Band_RW_default": [
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90",
"LBA_10_90", "LBA_10_90"
]
}
}
......
......@@ -41,9 +41,15 @@ services:
- ..:/opt/lofar/tango:rw
entrypoint: ''
command: >
sh -c "mc alias set object-storage http://object-storage:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
sh -c "until [ \"$(curl -s -w '%{http_code}' -o /dev/null http://object-storage:9000/minio/health/live)\" -eq \"200\" ]
do
sleep 1
done
mc alias set object-storage http://object-storage:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
mc mb --with-versioning object-storage/caltables
mc cp --recursive /opt/lofar/tango/docker-compose/object-storage/caltables/ object-storage/caltables/"
mc cp --recursive /opt/lofar/tango/docker-compose/object-storage/caltables/ object-storage/caltables/
date +'%F %T'
echo 'Initialisation completed'"
volumes:
object-storage:
......@@ -27,13 +27,21 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
def setUp(self):
self.stationmanager_proxy = self.setup_stationmanager_proxy()
super().setUp("STAT/AntennaField/HBA0")
# Typical tests emulate 'CS001_TILES' number of antennas in
# the AntennaField. 'MAX_ANTENNA' is the number of inputs
# offered by a backing RECV device. Each antenna has
# N_pol (2) inputs.
self.proxy.put_property(
{
"Power_to_RECV_mapping": numpy.array(
[[1, x * 2 + 0] for x in range(MAX_ANTENNA // 2)]
[[1, x * 2 + 0] for x in range(CS001_TILES)]
).flatten(),
"Control_to_RECV_mapping": numpy.array(
[[1, x * 2 + 1] for x in range(MAX_ANTENNA // 2)]
[[1, x * 2 + 1] for x in range(CS001_TILES)]
).flatten(),
"Frequency_Band_RW_default": numpy.array(
[["HBA_110_190", "HBA_110_190"]] * CS001_TILES
).flatten(),
}
)
......@@ -105,9 +113,9 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
numpy.array([[True] * N_rcu_inp] * N_rcu), self.recv_proxy.ANT_mask_RW
)
antenna_qualities = numpy.array([AntennaQuality.OK] * MAX_ANTENNA)
antenna_qualities = numpy.array([AntennaQuality.OK] * CS001_TILES)
antenna_use = numpy.array(
[AntennaUse.ON] + [AntennaUse.AUTO] * (MAX_ANTENNA - 1)
[AntennaUse.ON] + [AntennaUse.AUTO] * (CS001_TILES - 1)
)
antenna_properties = {
"Antenna_Quality": antenna_qualities,
......@@ -127,7 +135,7 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
# Verify all antennas are indicated to work
numpy.testing.assert_equal(
numpy.array([True] * MAX_ANTENNA), antennafield_proxy.Antenna_Usage_Mask_R
numpy.array([True] * CS001_TILES), antennafield_proxy.Antenna_Usage_Mask_R
)
# Verify only connected inputs + Antenna_Usage_Mask_R are true
......@@ -154,9 +162,9 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
antenna_qualities = numpy.array(
[AntennaQuality.BROKEN]
+ [AntennaQuality.OK]
+ [AntennaQuality.BROKEN] * (MAX_ANTENNA - 2)
+ [AntennaQuality.BROKEN] * (CS001_TILES - 2)
)
antenna_use = numpy.array([AntennaUse.AUTO] * MAX_ANTENNA)
antenna_use = numpy.array([AntennaUse.AUTO] * CS001_TILES)
antenna_properties = {
"Antenna_Quality": antenna_qualities,
"Antenna_Use": antenna_use,
......@@ -167,7 +175,7 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
"Power_to_RECV_mapping": [-1, -1] * CS001_TILES,
"Control_to_RECV_mapping":
# [1, 0, 1, 1, 1, 2, 1, x ... 1, 95]
numpy.array([[1, x] for x in range(0, MAX_ANTENNA)]).flatten(),
numpy.array([[1, x] for x in range(CS001_TILES)]).flatten(),
}
# Cycle device and set properties
......@@ -179,18 +187,23 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
# Antenna_Usage_Mask_R should be false except one
numpy.testing.assert_equal(
numpy.array([False] + [True] + [False] * (MAX_ANTENNA - 2)),
numpy.array([False] + [True] + [False] * (CS001_TILES - 2)),
antennafield_proxy.Antenna_Usage_Mask_R,
)
# device.power_hardware_on() writes Antenna_Usage_Mask_R to ANT_mask_RW
numpy.testing.assert_equal(
numpy.array([False] + [True] + [False] * (MAX_ANTENNA - 2)),
numpy.array([False] + [True] + [False] * (CS001_TILES - 2)),
antennafield_proxy.ANT_mask_RW,
)
# ANT_mask_RW on antennafield writes to configured recv devices for all
# mapped inputs
# mapped inputs. Unmapped values at the end remain at True.
numpy.testing.assert_equal(
numpy.array([False] + [True] + [False] * (MAX_ANTENNA - 2)),
numpy.array(
[False]
+ [True]
+ [False] * (CS001_TILES - 2)
+ [True] * (MAX_ANTENNA - CS001_TILES)
),
self.recv_proxy.ANT_mask_RW.flatten(),
)
......@@ -272,7 +285,7 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
"Power_to_RECV_mapping": [-1, -1] * CS001_TILES,
"Control_to_RECV_mapping":
# [1, 0, 1, 1, 1, 2, 1, x ... 1, 95]
numpy.array([[1, x] for x in range(0, MAX_ANTENNA)]).flatten(),
numpy.array([[1, x] for x in range(CS001_TILES)]).flatten(),
}
antennafield_proxy = self.proxy
......@@ -286,11 +299,20 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
try:
antennafield_proxy.write_attribute(
"HBAT_PWR_on_RW", [[True] * N_elements * N_pol] * MAX_ANTENNA
"HBAT_PWR_on_RW", [[True] * N_elements * N_pol] * CS001_TILES
)
# Mapped values went to True
numpy.testing.assert_equal(
numpy.array([[True] * N_elements * N_pol] * MAX_ANTENNA),
self.recv_proxy.read_attribute("HBAT_PWR_on_RW").value,
numpy.array([[True] * N_elements * N_pol] * CS001_TILES),
self.recv_proxy.read_attribute("HBAT_PWR_on_RW").value[:CS001_TILES],
)
# Unmapped values went to False
numpy.testing.assert_equal(
numpy.array(
[[False] * N_elements * N_pol] * (MAX_ANTENNA - CS001_TILES)
),
self.recv_proxy.read_attribute("HBAT_PWR_on_RW").value[CS001_TILES:],
)
finally:
# Always restore recv again
......@@ -306,10 +328,10 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
mapping_properties = {
"Power_to_RECV_mapping": numpy.array( # X maps on power
[[1, x * 2 + 1] for x in range(MAX_ANTENNA // 2)]
[[1, x * 2 + 1] for x in range(CS001_TILES)]
).flatten(),
"Control_to_RECV_mapping": numpy.array( # Y maps on control
[[1, x * 2 + 0] for x in range(MAX_ANTENNA // 2)]
[[1, x * 2 + 0] for x in range(CS001_TILES)]
).flatten(),
}
......@@ -324,12 +346,24 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
antennafield_proxy.write_attribute(
# [X, Y]
"RCU_band_select_RW",
[[1, 2]] * MAX_ANTENNA,
[[1, 2]] * CS001_TILES,
)
# Mapped values were overwritten
numpy.testing.assert_equal(
# [Power, Control]
numpy.array([2, 1] * CS001_TILES),
self.recv_proxy.read_attribute("RCU_band_select_RW").value.flatten()[
: (CS001_TILES * 2)
],
)
# Unmapped values remain at 0
numpy.testing.assert_equal(
# [Power, Control]
numpy.array([2, 1] * (MAX_ANTENNA // 2)),
self.recv_proxy.read_attribute("RCU_band_select_RW").value.flatten(),
numpy.array([0] * (MAX_ANTENNA - CS001_TILES * 2)),
self.recv_proxy.read_attribute("RCU_band_select_RW").value.flatten()[
(CS001_TILES * 2) :
],
)
finally:
# Always restore recv again
......
......@@ -70,21 +70,30 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
def setUp(self):
self.stationmanager_proxy = self.setup_stationmanager_proxy()
super().setUp("STAT/Calibration/1")
self.recv_proxy = self.setup_recv_proxy()
self.sdpfirmware_proxy = self.setup_sdpfirmware_proxy()
self.sdp_proxy = self.setup_sdp_proxy()
self.antennafield_proxy = self.setup_proxy("STAT/AntennaField/HBA0")
# make sure we restore any properties we modify
self.original_antennafield_properties = self.antennafield_proxy.get_property(
self.antennafield_proxy.get_property_list("*")
)
self.addCleanup(self.restore_antennafield)
self.antennafield_proxy.put_property(
{
"Power_to_RECV_mapping": [1, 1, 1, 0]
+ [-1] * ((DEFAULT_N_HBA_TILES * 2) - 4),
"Antenna_Sets": ["ALL"],
"Antenna_Set_Masks": ["1" * DEFAULT_N_HBA_TILES],
"Frequency_Band_RW_default": ["HBA_110_190"]
* (DEFAULT_N_HBA_TILES * 2),
}
)
self.recv_proxy = self.setup_recv_proxy()
self.sdpfirmware_proxy = self.setup_sdpfirmware_proxy()
self.sdp_proxy = self.setup_sdp_proxy()
self.addCleanup(self.shutdown_recv)
self.addCleanup(self.shutdown_sdp)
self.antennafield_proxy.boot()
# configure the frequencies, which allows access
# to the calibration attributes and commands
......@@ -92,22 +101,7 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
self.recv_proxy.RCU_band_select_RW = [[1] * N_rcu_inp] * N_rcu
def restore_antennafield(self):
self.proxy.put_property(
{
"Power_to_RECV_mapping": [-1, -1] * DEFAULT_N_HBA_TILES,
"Control_to_RECV_mapping": [-1, -1] * DEFAULT_N_HBA_TILES,
}
)
@staticmethod
def shutdown_recv():
recv_proxy = TestDeviceProxy("STAT/RECVH/H0")
recv_proxy.off()
@staticmethod
def shutdown_sdp():
sdp_proxy = TestDeviceProxy("STAT/SDP/HBA0")
sdp_proxy.off()
self.proxy.put_property(self.original_antennafield_properties)
@staticmethod
def shutdown(device: str):
......@@ -119,38 +113,31 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
def setup_recv_proxy(self):
# setup RECV
recv_proxy = TestDeviceProxy("STAT/RECVH/H0")
recv_proxy.off()
recv_proxy = self.setup_proxy("STAT/RECVH/H0")
recv_proxy.boot()
recv_proxy.set_defaults()
return recv_proxy
def setup_sdpfirmware_proxy(self):
# setup SDP
sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA0")
sdpfirmware_proxy.off()
sdpfirmware_proxy = self.setup_proxy("STAT/SDPFirmware/HBA0")
sdpfirmware_proxy.boot()
return sdpfirmware_proxy
def setup_sdp_proxy(self):
# setup SDP
sdp_proxy = TestDeviceProxy("STAT/SDP/HBA0")
sdp_proxy.off()
sdp_proxy = self.setup_proxy("STAT/SDP/HBA0")
sdp_proxy.boot()
return sdp_proxy
def setup_proxy(self, dev: str):
# setup SDP
proxy = TestDeviceProxy(dev)
proxy.off()
proxy.boot()
self.addCleanup(self.shutdown(dev))
return proxy
def setup_stationmanager_proxy(self):
"""Setup StationManager"""
stationmanager_proxy = TestDeviceProxy("STAT/StationManager/1")
stationmanager_proxy.off()
stationmanager_proxy = self.setup_proxy("STAT/StationManager/1")
stationmanager_proxy.boot()
self.assertEqual(stationmanager_proxy.state(), DevState.ON)
return stationmanager_proxy
......@@ -168,15 +155,14 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
# [1, 48, 1, 49, x ... 1, 95]
}
self.antennafield_proxy = self.setup_proxy("STAT/AntennaField/HBA0")
self.antennafield_proxy.off()
self.antennafield_proxy = self.setup_proxy("STAT/AntennaField/LBA")
self.antennafield_proxy.put_property(calibration_properties)
self.antennafield_proxy.boot()
self.proxy.boot()
# calibrate
self.proxy.calibrate_recv("STAT/AntennaField/HBA0")
self.proxy.calibrate_recv("STAT/AntennaField/LBA")
# check the results
rcu_attenuator_db_pwr = self.antennafield_proxy.RCU_attenuator_dB_RW[:, 0]
......@@ -230,7 +216,6 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
}
self.antennafield_proxy = self.setup_proxy("STAT/AntennaField/HBA0")
self.antennafield_proxy.off()
self.antennafield_proxy.put_property(calibration_properties)
self.antennafield_proxy.boot()
......
......@@ -107,6 +107,7 @@ class TestDeviceDigitalBeam(AbstractTestBases.TestDeviceBase):
"1" + ("0" * (NR_TILES - 1)),
"1" * NR_TILES,
],
"Antenna_Type": "HBA",
}
)
antennafield_proxy.off()
......
......@@ -54,19 +54,21 @@ class TestDigitalbeamPerformance(base.IntegrationTestCase):
proxy.off()
self.assertTrue(proxy.state() is DevState.OFF)
proxy.boot()
proxy.set_defaults()
self.assertTrue(proxy.state() is DevState.ON)
for n in range(1, 3):
proxy = antenna_field_proxies[n - 1]
for proxy in antenna_field_proxies:
# setup AntennaField
control_mapping = [[1, i] for i in range(MAX_ANTENNA)]
power_mapping = [[1, i] for i in range(MAX_ANTENNA)]
sdp_mapping = [[i // 6, i % 6] for i in range(MAX_ANTENNA)]
antenna_qualities = numpy.array([AntennaQuality.OK] * MAX_ANTENNA)
antenna_use = numpy.array([AntennaUse.AUTO] * MAX_ANTENNA)
antenna_set_mask = "1" * MAX_ANTENNA
proxy.put_property(
{
"Control_to_RECV_mapping": numpy.array(control_mapping).flatten(),
"Power_to_RECV_mapping": numpy.array(power_mapping).flatten(),
"Antenna_to_SDP_Mapping": numpy.array(sdp_mapping).flatten(),
"Antenna_Quality": antenna_qualities,
"Antenna_Use": antenna_use,
"Antenna_Sets": ["ALL"],
......@@ -82,9 +84,9 @@ class TestDigitalbeamPerformance(base.IntegrationTestCase):
proxy.off()
self.assertTrue(proxy.state() is DevState.OFF)
proxy.boot()
proxy.set_defaults()
proxy.Tracking_enabled_RW = tracking
self.assertTrue(proxy.state() is DevState.ON)
self.assertEqual(MAX_ANTENNA, proxy.nr_antennas_R)
# Insert verify that all attributes have been set across
# one another~
......
......@@ -53,7 +53,7 @@ class CalibrationManager:
self._url = url
self._station_name = station_name
self._tmp_dir = tempfile.TemporaryDirectory(ignore_cleanup_errors=True)
self.bucket_name = "caltabules"
self.bucket_name = "caltables"
self.prefix = self._station_name
self._init_minio()
self.sync_calibration_tables()
......@@ -66,6 +66,8 @@ class CalibrationManager:
if len(bucket_name) > 0:
self.bucket_name = bucket_name
logger.info(f"Derived {self.prefix=} {self.bucket_name=} from {self._url=}")
self._storage = Minio(
result.netloc,
access_key=os.getenv("MINIO_ROOT_USER"),
......@@ -82,11 +84,18 @@ class CalibrationManager:
objects = self._storage.list_objects(self.bucket_name, prefix=f"{self.prefix}/")
for obj in objects:
filename = os.path.basename(obj.object_name)
try:
self._storage.fget_object(
self.bucket_name,
obj.object_name,
os.path.join(self._tmp_dir.name, filename),
)
except Exception as ex:
raise IOError(
f"Failed to download {self.bucket=} {obj.object_name=}"
) from ex
logger.info(f"Downloaded {filename} from {obj.object_name}")
@staticmethod
def _band_to_reference_frequency(is_hba, rcu_band):
......
......@@ -355,6 +355,13 @@ class AntennaField(LOFARDevice):
default_value=[-1] * MAX_ANTENNA * 2,
)
# ----- Defaults
Frequency_Band_RW_default = device_property(
dtype=(str,),
mandatory=False,
)
# ----- Generic information
Antenna_Type_R = attribute(
......
......@@ -469,6 +469,13 @@ class LOFARDevice(Device):
try:
default_value = getattr(self, f"{name}_default")
if default_value is None:
# Attribute allows a default setting, but none
# is configured (f.e. because mandatory=False
# and no useful default exists that can be
# provided in the code). Just skip this attribute.
continue
# properties are always 0D or 1D, but arrays can be 2D.
# in the latter case, we need to reshape the default.
attr = getattr(self, name)
......@@ -476,9 +483,12 @@ class LOFARDevice(Device):
if max_dim_y > 1:
# 2D array -> reshape 1D default
default_value = numpy.array(default_value).reshape(
max_dim_y, max_dim_x
)
# This is needed because Tango properties cannot be 2D, so we
# cannot specify them in their actual shape.
#
# We assume the length of the y dimension to be variable,
# as some attributes (and thus defaults) have a varying size.
default_value = numpy.array(default_value).reshape(-1, max_dim_x)
# set the attribute to the configured default. Shorten after 150 characters
logger.debug(
......
......@@ -16,6 +16,7 @@ from tangostationcontrol.common.calibration import (
calibrate_RCU_attenuator_dB,
calibrate_input_samples_delay,
)
from tangostationcontrol.common.case_insensitive_dict import CaseInsensitiveDict
from tangostationcontrol.common.entrypoint import entry
from tangostationcontrol.common.lofar_logging import (
device_logging_to_python,
......@@ -41,29 +42,31 @@ class Calibration(LOFARDevice):
def __init__(self, cl, name):
self._calibration_manager: CalibrationManager = None
self.event_subscriptions: list = []
self.sdpfirmware_proxies: dict = {}
self.sdp_proxies: dict = {}
self.ant_proxies: dict = {}
self.last_ant_calibration_timestamp: dict[str, datetime.datetime | None] = {}
self.sdpfirmware_proxies: CaseInsensitiveDict = CaseInsensitiveDict()
self.sdp_proxies: CaseInsensitiveDict = CaseInsensitiveDict()
self.ant_proxies: CaseInsensitiveDict = CaseInsensitiveDict()
self.last_ant_calibration_timestamp: CaseInsensitiveDict[
str, datetime.datetime | None
] = CaseInsensitiveDict()
# Super must be called after variable assignment due to executing init_device!
super().__init__(cl, name)
def _calibrate_antenna_field(self, ant_proxy):
def _calibrate_antenna_field(self, device):
"""Recalibrate a specific AntennaField."""
ant_proxy = self.ant_proxies[device]
if ant_proxy.state() not in DEFAULT_COMMAND_STATES:
logger.warning(
f"Device {ant_proxy.name()} not active. Forgoing calibration."
)
logger.warning(f"Device {device} not active. Forgoing calibration.")
return
logger.info("Re-calibrate antenna field %s", ant_proxy.name())
logger.info("Re-calibrate antenna field %s", device)
self.last_ant_calibration_timestamp[ant_proxy] = datetime.datetime.now()
self.last_ant_calibration_timestamp[device] = datetime.datetime.now()
self.calibrate_recv(ant_proxy)
self.calibrate_sdp(ant_proxy)
self.calibrate_recv(device)
self.calibrate_sdp(device)
@log_exceptions()
def _antennafield_changed_event(self, event):
......@@ -86,7 +89,7 @@ class Calibration(LOFARDevice):
return
# frequencies changed, so we need to recalibrate
self._calibrate_antenna_field(event.device)
self._calibrate_antenna_field(event.device.name())
@log_exceptions()
def _clock_changed_event(self, event):
......@@ -109,7 +112,7 @@ class Calibration(LOFARDevice):
for k, ant in self.ant_proxies.items():
# Recalibrate associated AntennaFields
sdpfirmware_device = ant.SDPFirmware_device_R.casefold()
sdpfirmware_device = ant.SDPFirmware_device_R
sdp_device = self.sdpfirmware_proxies[sdpfirmware_device].SDP_device_R
if device_name_matches(sdp_device, event.device.name()):
......@@ -172,9 +175,6 @@ class Calibration(LOFARDevice):
antennafield.RCU_band_select_RW
"""
# sanitize device name
device = device.casefold()
# -----------------------------------------------------------
# Set signal-input attenuation to compensate for
# differences in cable length.
......@@ -196,14 +196,11 @@ class Calibration(LOFARDevice):
antennafield.RCU_band_select_RW
"""
# sanitize device name
device = device.casefold()
if device not in self.ant_proxies:
raise ValueError(f"Could not find {device} in {self.ant_proxies}")
ant_proxy = self.ant_proxies[device]
sdpfirmware_device = str(ant_proxy.SDPFirmware_device_R).casefold()
sdpfirmware_device = ant_proxy.SDPFirmware_device_R
if sdpfirmware_device not in self.sdpfirmware_proxies:
raise ValueError(
......@@ -212,7 +209,7 @@ class Calibration(LOFARDevice):
sdpfirmware_proxy = self.sdpfirmware_proxies[sdpfirmware_device]
sdp_device = str(sdpfirmware_proxy.SDP_device_R).casefold()
sdp_device = sdpfirmware_proxy.SDP_device_R
if sdp_device not in self.sdp_proxies:
raise ValueError(f"Could not find {sdp_device} in {self.sdp_proxies}")
......@@ -248,21 +245,22 @@ class Calibration(LOFARDevice):
db = Database()
devices = db.get_device_exported_for_class(AntennaField.__name__)
for d in devices:
logger.debug("found antenna field device %s", str(d))
self.ant_proxies = {d.casefold(): create_device_proxy(d) for d in devices}
self.last_ant_calibration_timestamp = {d.casefold(): None for d in devices}
logger.debug(f"Found antenna field device {d}")
self.ant_proxies[d] = create_device_proxy(d)
self.last_ant_calibration_timestamp[d] = None
devices = db.get_device_exported_for_class(SDPFirmware.__name__)
for d in devices:
logger.debug("found SDP firmware device %s", str(d))
self.sdpfirmware_proxies = {
d.casefold(): create_device_proxy(d) for d in devices
}
logger.debug(f"Dound SDP firmware device {d}")
self.sdpfirmware_proxies[d] = create_device_proxy(d)
devices = db.get_device_exported_for_class(SDP.__name__)
for d in devices:
logger.debug("found SDP device %s", str(d))
self.sdp_proxies = {d.casefold(): create_device_proxy(d) for d in devices}
logger.debug(f"Found SDP device {d}")
self.sdp_proxies[d] = create_device_proxy(d)
# subscribe to events to notice setting changes in SDP that determine the
# input frequency
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment