This page describes the Zodiac-Cortex-CRT device driver and its device window. The Zodiac-Cortex-CRT device driver uses the following tables: the Cortex CRT, Global Cortex CRT and Noise Table.
It allows controlling units general settings, the if inputs and noise generator and shows main status as well as the TMU mapping and available modules.
Individual modules as IFR, IFM, TMU, TMS, TCU,... use a separate driver which has to be added to the same thread in the device setup. It is based on the STI 100013_CRT remote protocol document v 3.31, dated Jan. 10., 2020
Beside this base unit multiple instances of the various functional elements may be configured in the sat-nms M&C to handle all features of the unit. All devices referring to the same physical device must be configured at the same device thread / interface to ensure that TCP requests and commands to the device do not overlap.
The different available module drivers for the CRT are:
The CRT requires two separate IP connection for monitoring and commanding the device. The device driver establishes the connection to the monitoring port (usually 3000) by terminal server like TTY connection. This connection is permanently active. Address and port are set in the vlc.setup configuration file as for a terminal server serial port.
How to use TLS connection is described below.
Steps to configure the Zodiac-CRT drivers / devices for TLS communication
1. Create a PKCS12 keystore from the cert files read from the BBU:
openssl pkcs12 -export -out bbu.p12 \
-inkey CRT-Services-Client-v2.key -in CRT-Services-Client-v2.cert.pem
openssl prompts to select a password for keystore. e.g. crt
2. Copy the keystore file to /home/satnms/certs/ at the M&C
3. Edit the device configuration (client) to tell the M&C about the protocol and port.
PORT "TLS:192.168.2.202:53000" PROTOCOL CortexNT
IDLE 1000
DEVICE BBU-1 IS Zodiac-Cortex-CRT
DEVICE BBU-1-IFR-1 IS Zodiac-Cortex-CRT-IFR
DEVICE BBU-1-IFR-2 IS Zodiac-Cortex-CRT-IFR
DEVICE BBU-1-IFR-3 IS Zodiac-Cortex-CRT-IFR
DEVICE BBU-1-IFR-4 IS Zodiac-Cortex-CRT-IFR
DEVICE BBU-1-IFM-1 IS Zodiac-Cortex-CRT-IFM
DEVICE BBU-1-IFM-2 IS Zodiac-Cortex-CRT-IFM
DEVICE BBU-1-TMU-A IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-B IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-C IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-D IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-E IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-F IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-G IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TMU-H IS Zodiac-Cortex-CRT-TMU
DEVICE BBU-1-TCU-1 IS Zodiac-Cortex-CRT-TCU
DEVICE BBU-1-TCU-2 IS Zodiac-Cortex-CRT-TCU
DEVICE BBU-1-TMS-1 IS Zodiac-Cortex-CRT-TMS
DEVICE BBU-1-TMS-2 IS Zodiac-Cortex-CRT-TMS
DEVICE BBU-1-PRJ IS Zodiac-Cortex-CRT-PRJ
Important is the TLS in front of the IP address and the port number to use with TLS communication.
4. Restart the M&C and for each BBU-* device edit these setup parameters.
config.cmdPort = 53001
address = certs/bbu.p12 crt
Device window pages
The following table shows which device window pages are available with this individual device type. Tool-bar functions not mentioned here are described at the general description of device windows .
--- Global unit settings and status.
--- Overview of installed modules
--- The faults page.
--- The device info page.
--- The maintenance page. The configuration parameters described below are set at this page.Configuration parameters
At the maintenance page of the device window there are a couple of configuration parameters which must be set to make the software talk to the device.
Variables defined by this device driver
| name | type | flags | range |
|---|---|---|---|
| info.driver | TEXT | R/O | StringRange R/O |
| lowLevel.cmd | TEXT | StringRange | |
| lowLevel.reply | TEXT | R/O | StringRange R/O |
| faults.99 | ALARM | R/O | AlarmFlagRange R/O (Communication) |
| faults.commstat | TEXT | R/O | StringRange R/O |
| info.type | TEXT | R/O | StringRange R/O |
| info.port | TEXT | R/O | StringRange R/O |
| info.frame | TEXT | R/O | StringRange R/O |
| info.revision | TEXT | R/O | StringRange R/O |
| info.softwareId | TEXT | R/O | StringRange R/O |
| info.model | TEXT | R/O | StringRange R/O |
| info.serial | TEXT | R/O | StringRange R/O |
| info.temp.masterBoard | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| info.temp.masterFPGA | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| info.temp.slaveBoard | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| info.temp.slaveFPGA | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| config.cmdPort | INTEGER | SAVE SETUP | IntegerRange (0 .. 0) |
| config.deviceComment | TEXT | SAVE SETUP | StringRange |
| config.readBackDelay | INTEGER | SAVE SETUP | IntegerRange (100 .. 10000) |
| internal.cmd | TEXT | R/O | StringRange R/O |
| internal.type | TEXT | R/O | StringRange R/O |
| internal.ver | TEXT | R/O | StringRange R/O |
| internal.rev | TEXT | R/O | StringRange R/O |
| internal.softwareId1 | TEXT | R/O | StringRange R/O |
| internal.softwareId2 | TEXT | R/O | StringRange R/O |
| internal.softwareId3 | TEXT | R/O | StringRange R/O |
| internal.model | HEX | R/O | HexRange R/O (0 .. 0) |
| internal.shelfId | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.day.c1 | HEX | R/O | HexRange R/O (0 .. 0) |
| internal.day.c4h | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.day.c4 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.hour | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.hour.c1 | HEX | R/O | HexRange R/O (0 .. 0) |
| internal.secs | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.msecs.c1 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.msecs.c2 | FLOAT | R/O | DoubleRange R/O (0.000 .. 0.000) |
| internal.msecs | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.usecs | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.nsecs | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.min | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.sec | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| internal.tag | FLOAT | R/O | DoubleRange R/O (0.000 .. 0.000) |
| days | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| hours | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| minutes | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| seconds | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| cmdstat | TEXT | R/O | StringRange R/O |
| upload.doppler.file | TEXT | NOCOMPARE | StringRange |
| module.hasTcu1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTcu2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTms1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTms2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTms3 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfm1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfm2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfm3 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfmX1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfmX2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfmX3 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasRau | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasRauE | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfr1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfr2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfr3 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfr4 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfr5 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfrX1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfrX2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfrX3 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfrX4 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasIfrX5 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasDcu1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasDcu2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuA | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuB | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuC | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuD | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuE | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuF | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuG | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmuH | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxA | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxB | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxC | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxD | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxE | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxF | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxG | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasTmxH | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasNoise | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasEfc | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasAit1 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.hasAit2 | BOOLEAN | R/O | BooleanRange R/O (true false) |
| module.ifrTmuA | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuB | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuC | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuD | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuE | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuF | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuG | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| module.ifrTmuH | CHOICE | R/O | EnumRange R/O (IFR-1 IFR-2 IFR-3 IFR-4) |
| dataflowMon | HEX | HexRange (0 .. 0) | |
| dataflowLog | HEX | HexRange (0 .. 0) | |
| reference | CHOICE | EnumRange (INT 1+INT 2+INT 1+2+INT) | |
| leap | INTEGER | IntegerRange (0 .. 0) | |
| leap.mode | CHOICE | EnumRange (AUTOMATIC MANUAL) | |
| leap.year | CHOICE | EnumRange (YES NO) | |
| leap.second | CHOICE | EnumRange (OFF POSITIVE NEGATIVE) | |
| time.offset | INTEGER | IntegerRange (0 .. 0) | |
| time.nextOffsetDate.1 | INTEGER | IntegerRange (0 .. 0) | |
| time.nextOffset.1 | INTEGER | IntegerRange (0 .. 0) | |
| time.nextOffsetDate.2 | INTEGER | IntegerRange (0 .. 0) | |
| time.nextOffset.2 | INTEGER | IntegerRange (0 .. 0) | |
| time.code | CHOICE | EnumRange (IRIG-B NASA-36 NTP) | |
| video.testpoint.1 | CHOICE | EnumRange (OFF IFM-1 IFM-2 TCU-1 TCU-2 RAU TMS-1 TMS-2 IFR-1 IFR-2 IFR-3 IFR-4 IFR-5 DCU-1 DCU-2 INTERNAL-1 INTERNAL-2) | |
| video.testpoint.2 | CHOICE | EnumRange (OFF IFM-1 IFM-2 TCU-1 TCU-2 RAU TMS-1 TMS-2 IFR-1 IFR-2 IFR-3 IFR-4 IFR-5 DCU-1 DCU-2 INTERNAL-1 INTERNAL-2) | |
| input.1 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.2 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.3 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.4 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.5 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.6 | CHOICE | EnumRange (NOMINAL ALTERNATE) | |
| input.1.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| input.2.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| input.3.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| input.4.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| input.5.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| input.6.agc | CHOICE | EnumRange (0.1ms 1ms 10ms 100ms 1000ms) | |
| time.tag | CHOICE | R/O | EnumRange R/O (CODE-0 CODE-1 CODE-2 CODE-3 CODE-4 CODE-5) |
| crtGlobalTimeTag | FLOAT | R/O | DoubleRange R/O (0.000 .. 0.000) |
| crtGlobalTimeTag2 | TEXT | R/O | StringRange R/O |
| ctx.document | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| ctx.loadSave | BOOLEAN | R/O | BooleanRange R/O (true false) |
| state.refFreq | TEXT | R/O | StringRange R/O |
| state.refInput | TEXT | R/O | StringRange R/O |
| state.decoder | TEXT | R/O | StringRange R/O |
| flags.extPps | BOOLEAN | R/O | BooleanRange R/O (true false) |
| clients.mon | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.ctl | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tms1 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tms2 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tms3 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tcu1 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tcu2 | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.rng | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.meas | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.log | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.spec | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.dopp | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.vect | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.other | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuA | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuB | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuC | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuD | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuE | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuF | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuG | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| clients.tmuH | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| neuronFlows | INTEGER | R/O | IntegerRange R/O (0 .. 0) |
| noise.1.on | CHOICE | EnumRange (OFF ON) | |
| noise.2.on | CHOICE | EnumRange (OFF ON) | |
| noise.3.on | CHOICE | EnumRange (OFF ON) | |
| noise.1 | FLOAT | DoubleRange (15.0 .. 100.0) | |
| noise.2 | FLOAT | DoubleRange (15.0 .. 100.0) | |
| noise.3 | FLOAT | DoubleRange (15.0 .. 100.0) | |
| reloadDefault | TEXT | NOPRESET | StringRange |
| setWinTimeToIrig | TEXT | NOPRESET | StringRange |
| faults.01 | ALARM | R/O | AlarmFlagRange R/O (Remote Access) |
| faults.02 | ALARM | R/O | AlarmFlagRange R/O (External PPS) |
| faults.03 | ALARM | R/O | AlarmFlagRange R/O (Time) |
| faults.04 | ALARM | R/O | AlarmFlagRange R/O (Emulation Mode) |
| faults.05 | ALARM | R/O | AlarmFlagRange R/O (Flash Memory) |
| faults.06 | ALARM | R/O | AlarmFlagRange R/O (Licenses) |
| faults.07 | ALARM | R/O | AlarmFlagRange R/O (Menu Configuration) |
| faults.08 | ALARM | R/O | AlarmFlagRange R/O (FPGA Configuration) |
| faults.09 | ALARM | R/O | AlarmFlagRange R/O (MSP Init) |
| faults.10 | ALARM | R/O | AlarmFlagRange R/O (FPGA Temperature) |
| faults.11 | ALARM | R/O | AlarmFlagRange R/O (Temperature) |
| faults.12 | ALARM | R/O | AlarmFlagRange R/O (Plugin extension) |
| faults.13 | ALARM | R/O | AlarmFlagRange R/O (Driver init) |
| faults.14 | ALARM | R/O | AlarmFlagRange R/O (Memory init) |
| faults.15 | ALARM | R/O | AlarmFlagRange R/O (DL FPGA Init) |
| faults.16 | ALARM | R/O | AlarmFlagRange R/O (UL FPGA Init) |
| faults.17 | ALARM | R/O | AlarmFlagRange R/O (PLL) |
| faults.18 | ALARM | R/O | AlarmFlagRange R/O (IRIG-B/NASA Unlock) |
| faults.20 | ALARM | R/O | AlarmFlagRange R/O (TCU-1) |
| faults.21 | ALARM | R/O | AlarmFlagRange R/O (TCU-2) |
| faults.22 | ALARM | R/O | AlarmFlagRange R/O (TMS-1) |
| faults.23 | ALARM | R/O | AlarmFlagRange R/O (TMS-2) |
| faults.24 | ALARM | R/O | AlarmFlagRange R/O (TMS-3) |
| faults.25 | ALARM | R/O | AlarmFlagRange R/O (IFM-1) |
| faults.26 | ALARM | R/O | AlarmFlagRange R/O (IFM-2) |
| faults.27 | ALARM | R/O | AlarmFlagRange R/O (IFM-3) |
| faults.28 | ALARM | R/O | AlarmFlagRange R/O (IFR-1) |
| faults.29 | ALARM | R/O | AlarmFlagRange R/O (IFR-2) |
| faults.30 | ALARM | R/O | AlarmFlagRange R/O (IFR-3) |
| faults.31 | ALARM | R/O | AlarmFlagRange R/O (IFR-4) |
| faults.32 | ALARM | R/O | AlarmFlagRange R/O (IFR-5) |
| faults.33 | ALARM | R/O | AlarmFlagRange R/O (TMU-A) |
| faults.34 | ALARM | R/O | AlarmFlagRange R/O (TMU-B) |
| faults.35 | ALARM | R/O | AlarmFlagRange R/O (TMU-C) |
| faults.36 | ALARM | R/O | AlarmFlagRange R/O (TMU-D) |
| faults.37 | ALARM | R/O | AlarmFlagRange R/O (TMU-E) |
| faults.38 | ALARM | R/O | AlarmFlagRange R/O (TMU-F) |
| faults.39 | ALARM | R/O | AlarmFlagRange R/O (TMU-G) |
| faults.40 | ALARM | R/O | AlarmFlagRange R/O (TMU-H) |
| faults.41 | ALARM | R/O | AlarmFlagRange R/O (TMU-A Program) |
| faults.42 | ALARM | R/O | AlarmFlagRange R/O (TMU-B Program) |
| faults.43 | ALARM | R/O | AlarmFlagRange R/O (TMU-C Program) |
| faults.44 | ALARM | R/O | AlarmFlagRange R/O (TMU-D Program) |
| faults.45 | ALARM | R/O | AlarmFlagRange R/O (TMU-E Program) |
| faults.46 | ALARM | R/O | AlarmFlagRange R/O (TMU-F Program) |
| faults.47 | ALARM | R/O | AlarmFlagRange R/O (TMU-G Program) |
| faults.48 | ALARM | R/O | AlarmFlagRange R/O (TMU-H Program) |
| faults.49 | ALARM | R/O | AlarmFlagRange R/O (Noise Generator) |
| faults.50 | ALARM | R/O | AlarmFlagRange R/O (Noise Channel 1) |
| faults.51 | ALARM | R/O | AlarmFlagRange R/O (Noise Channel 2) |
| faults.52 | ALARM | R/O | AlarmFlagRange R/O (Noise Channel 3) |