cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/dyndummy.py
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides dummy implementation for classes of the Commanding chain.
|
|
3
|
-
"""
|
|
4
|
-
import logging
|
|
5
|
-
import sys
|
|
6
|
-
|
|
7
|
-
import click
|
|
8
|
-
import zmq
|
|
9
|
-
|
|
10
|
-
from egse.control import ControlServer
|
|
11
|
-
from egse.device import DeviceTransport
|
|
12
|
-
from egse.mixin import DynamicCommandMixin
|
|
13
|
-
from egse.mixin import dynamic_command
|
|
14
|
-
from egse.protocol import DynamicCommandProtocol
|
|
15
|
-
from egse.proxy import DynamicProxy
|
|
16
|
-
from egse.settings import Settings
|
|
17
|
-
from egse.system import AttributeDict
|
|
18
|
-
from egse.system import format_datetime
|
|
19
|
-
from egse.zmq_ser import bind_address
|
|
20
|
-
from egse.zmq_ser import connect_address
|
|
21
|
-
|
|
22
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
23
|
-
logger = logging.getLogger("egse.dyndummy")
|
|
24
|
-
|
|
25
|
-
# We use AttributeDict here to define the settings, because that is how the Settings.load() returns
|
|
26
|
-
# settings loaded from a YAML file.
|
|
27
|
-
|
|
28
|
-
ctrl_settings = AttributeDict(
|
|
29
|
-
{
|
|
30
|
-
'HOSTNAME': 'localhost',
|
|
31
|
-
'COMMANDING_PORT': 5553,
|
|
32
|
-
'SERVICE_PORT': 5554,
|
|
33
|
-
'MONITORING_PORT': 5555,
|
|
34
|
-
'PROTOCOL': 'tcp'
|
|
35
|
-
}
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class DummyDeviceInterface(DeviceTransport):
|
|
40
|
-
def __init__(self):
|
|
41
|
-
self._read_counter = 0
|
|
42
|
-
self._write_counter = 0
|
|
43
|
-
self._trans_counter = 0
|
|
44
|
-
|
|
45
|
-
def read(self) -> bytes:
|
|
46
|
-
self._read_counter += 1
|
|
47
|
-
logger.info(f"executing read() – [read count = {self._read_counter}]")
|
|
48
|
-
return f"read count = {self._read_counter}".encode()
|
|
49
|
-
|
|
50
|
-
def trans(self, command: str) -> bytes:
|
|
51
|
-
self._trans_counter += 1
|
|
52
|
-
logger.info(f"executing trans('{command}') – [trans count = {self._trans_counter}]")
|
|
53
|
-
|
|
54
|
-
self.write(command)
|
|
55
|
-
self.read()
|
|
56
|
-
|
|
57
|
-
return f"trans count = {self._trans_counter}".encode()
|
|
58
|
-
|
|
59
|
-
def write(self, command: str):
|
|
60
|
-
self._write_counter += 1
|
|
61
|
-
logger.info(f"executing write('{command}') – [write count = {self._write_counter}]")
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
class DummyInterface:
|
|
65
|
-
@dynamic_command(cmd_type="query", cmd_string="INFO?")
|
|
66
|
-
def info(self) -> str:
|
|
67
|
-
"""Return an info string from the device."""
|
|
68
|
-
raise NotImplementedError
|
|
69
|
-
|
|
70
|
-
@dynamic_command(cmd_type='transaction', cmd_string="RESPONSE:${msg}")
|
|
71
|
-
def response(self, msg: str) -> str:
|
|
72
|
-
"""Return a response to the message sent."""
|
|
73
|
-
raise NotImplementedError
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
class DummyController(DummyInterface, DynamicCommandMixin):
|
|
77
|
-
def __init__(self):
|
|
78
|
-
self.transport = DummyDeviceInterface()
|
|
79
|
-
super().__init__()
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class DummyProtocol(DynamicCommandProtocol):
|
|
83
|
-
|
|
84
|
-
def __init__(self, control_server: ControlServer):
|
|
85
|
-
super().__init__(control_server)
|
|
86
|
-
self.control_server = control_server
|
|
87
|
-
|
|
88
|
-
self.device_controller = DummyController()
|
|
89
|
-
|
|
90
|
-
def get_device(self):
|
|
91
|
-
return self.device_controller
|
|
92
|
-
|
|
93
|
-
def get_bind_address(self):
|
|
94
|
-
return bind_address(self.control_server.get_communication_protocol(), self.control_server.get_commanding_port())
|
|
95
|
-
|
|
96
|
-
def get_status(self):
|
|
97
|
-
return super().get_status()
|
|
98
|
-
|
|
99
|
-
def get_housekeeping(self) -> dict:
|
|
100
|
-
return {
|
|
101
|
-
'timestamp': format_datetime(),
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class DummyControlServer(ControlServer):
|
|
106
|
-
"""
|
|
107
|
-
DummyControlServer - Command and monitor dummy device controllers.
|
|
108
|
-
|
|
109
|
-
The sever binds to the following ZeroMQ sockets:
|
|
110
|
-
|
|
111
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
112
|
-
send a command to the dummy device controller.
|
|
113
|
-
|
|
114
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out status
|
|
115
|
-
information to all the connected clients every DELAY seconds.
|
|
116
|
-
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
def __init__(self):
|
|
120
|
-
super().__init__()
|
|
121
|
-
|
|
122
|
-
self.device_protocol = DummyProtocol(self)
|
|
123
|
-
|
|
124
|
-
self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
125
|
-
|
|
126
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
127
|
-
|
|
128
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
129
|
-
|
|
130
|
-
def get_communication_protocol(self):
|
|
131
|
-
return 'tcp'
|
|
132
|
-
|
|
133
|
-
def get_commanding_port(self):
|
|
134
|
-
return ctrl_settings.COMMANDING_PORT
|
|
135
|
-
|
|
136
|
-
def get_service_port(self):
|
|
137
|
-
return ctrl_settings.SERVICE_PORT
|
|
138
|
-
|
|
139
|
-
def get_monitoring_port(self):
|
|
140
|
-
return ctrl_settings.MONITORING_PORT
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
class DummyProxy(DynamicProxy, DummyInterface):
|
|
144
|
-
def __init__(self,
|
|
145
|
-
protocol=ctrl_settings.PROTOCOL, hostname=ctrl_settings.HOSTNAME, port=ctrl_settings.COMMANDING_PORT):
|
|
146
|
-
"""
|
|
147
|
-
Args:
|
|
148
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
149
|
-
hostname: location of the control server (IP address) [default is taken from settings file]
|
|
150
|
-
port: TCP port on which the control server is listening for commands [default is taken from settings file]
|
|
151
|
-
"""
|
|
152
|
-
super().__init__(connect_address(protocol, hostname, port))
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
@click.group()
|
|
156
|
-
def cli():
|
|
157
|
-
pass
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
@cli.command()
|
|
161
|
-
def control_server():
|
|
162
|
-
"""Start the dummy control server on localhost."""
|
|
163
|
-
from egse.dyndummy import DummyControlServer
|
|
164
|
-
|
|
165
|
-
try:
|
|
166
|
-
control_server = DummyControlServer()
|
|
167
|
-
control_server.serve()
|
|
168
|
-
except KeyboardInterrupt:
|
|
169
|
-
print("Shutdown requested...exiting")
|
|
170
|
-
except SystemExit as exit_code:
|
|
171
|
-
print(f"System Exit with code ({exit_code})")
|
|
172
|
-
sys.exit(exit_code)
|
|
173
|
-
except Exception:
|
|
174
|
-
import traceback
|
|
175
|
-
traceback.print_exc(file=sys.stdout)
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if __name__ == "__main__":
|
|
179
|
-
cli()
|
egse/env.py
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides functionality to work with and check your Python environment.
|
|
3
|
-
"""
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
|
|
6
|
-
from egse.system import all_logging_disabled
|
|
7
|
-
from egse.system import ignore_m_warning
|
|
8
|
-
|
|
9
|
-
ENV_PLATO_COMMON_EGSE = "PLATO_COMMON_EGSE_PATH"
|
|
10
|
-
ENV_PLATO_INSTALL = "PLATO_INSTALL_LOCATION"
|
|
11
|
-
ENV_PLATO_CONF_DATA = "PLATO_CONF_DATA_LOCATION"
|
|
12
|
-
ENV_PLATO_CONF_REPO = "PLATO_CONF_REPO_LOCATION"
|
|
13
|
-
ENV_PLATO_STORAGE_DATA = "PLATO_DATA_STORAGE_LOCATION"
|
|
14
|
-
ENV_PLATO_LOG_DATA = "PLATO_LOG_FILE_LOCATION"
|
|
15
|
-
ENV_PLATO_LOCAL_SETTINGS = "PLATO_LOCAL_SETTINGS"
|
|
16
|
-
|
|
17
|
-
PLATO_ENV_VARIABLES = [globals()[x] for x in globals() if x.startswith('ENV_PLATO_')]
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
"get_data_storage_location",
|
|
21
|
-
"get_conf_data_location",
|
|
22
|
-
"get_log_file_location",
|
|
23
|
-
*PLATO_ENV_VARIABLES
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def get_data_storage_location(setup=None, site_id: str = None) -> str:
|
|
28
|
-
"""
|
|
29
|
-
Returns the full path of the data storage location for the Site as
|
|
30
|
-
in the given Setup. If the Setup is not given, it is requested from the
|
|
31
|
-
configuration manager unless the `site_id` argument is given.
|
|
32
|
-
|
|
33
|
-
Note: when you specify the `site_id` as an argument, it takes precedence
|
|
34
|
-
over the site_id that is specified in the Setup.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
setup: the Setup from which the Camera name and Site ID are taken
|
|
38
|
-
site_id: the site identifier (to be used instead of the site_id in the Setup)
|
|
39
|
-
|
|
40
|
-
Returns:
|
|
41
|
-
The full path of data storage location as a string.
|
|
42
|
-
|
|
43
|
-
Raises:
|
|
44
|
-
A ValueError when no Setup can be loaded.
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
import os
|
|
48
|
-
from egse.setup import load_setup
|
|
49
|
-
|
|
50
|
-
if site_id is None:
|
|
51
|
-
|
|
52
|
-
from egse.setup import Setup
|
|
53
|
-
setup: Setup = setup or load_setup()
|
|
54
|
-
|
|
55
|
-
if setup is None:
|
|
56
|
-
raise ValueError("Could not determine Setup, which is None, even after loading from the configuration manager.")
|
|
57
|
-
|
|
58
|
-
site = setup.site_id
|
|
59
|
-
else:
|
|
60
|
-
site = site_id
|
|
61
|
-
|
|
62
|
-
data_root = os.environ[ENV_PLATO_STORAGE_DATA]
|
|
63
|
-
data_root = data_root.rstrip('/')
|
|
64
|
-
|
|
65
|
-
return data_root if data_root.endswith(site) else f"{data_root}/{site}"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def get_conf_data_location(setup=None) -> str:
|
|
69
|
-
"""
|
|
70
|
-
Returns the full path of the location of the Setups for the Site.
|
|
71
|
-
If the Setup is not given, it is requested from the configuration manager.
|
|
72
|
-
|
|
73
|
-
Args:
|
|
74
|
-
setup: the Setup from which the Camera name and Site ID are taken
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
The full path of location of the Setups as a string.
|
|
78
|
-
|
|
79
|
-
Raises:
|
|
80
|
-
A ValueError when no Setup can be loaded.
|
|
81
|
-
"""
|
|
82
|
-
|
|
83
|
-
data_root = get_data_storage_location(setup=setup)
|
|
84
|
-
|
|
85
|
-
return f"{data_root}/conf"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def get_log_file_location() -> str:
|
|
89
|
-
"""
|
|
90
|
-
Returns the full path of the location of the log files. The log file location is read from the environment
|
|
91
|
-
variable PLATO_LOG_FILE_LOCATION. The location shall be independent of the Setup, Camera ID or any other
|
|
92
|
-
setting that is subject to change.
|
|
93
|
-
|
|
94
|
-
If the environment variable is not set, a default log file location is created from the data storage location as
|
|
95
|
-
follows: $PLATO_DATA_STORAGE_LOCATION/<SITE_ID>/log.
|
|
96
|
-
|
|
97
|
-
Returns:
|
|
98
|
-
The full path of location of the log files as a string.
|
|
99
|
-
|
|
100
|
-
"""
|
|
101
|
-
import os
|
|
102
|
-
|
|
103
|
-
try:
|
|
104
|
-
log_data_root = os.environ[ENV_PLATO_LOG_DATA]
|
|
105
|
-
except KeyError:
|
|
106
|
-
data_root = os.environ[ENV_PLATO_STORAGE_DATA]
|
|
107
|
-
data_root = data_root.rstrip('/')
|
|
108
|
-
|
|
109
|
-
from egse.settings import get_site_id
|
|
110
|
-
site = get_site_id()
|
|
111
|
-
|
|
112
|
-
log_data_root = f"{data_root}/{site}/log"
|
|
113
|
-
|
|
114
|
-
return log_data_root
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
ignore_m_warning('egse.env')
|
|
118
|
-
|
|
119
|
-
if __name__ == "__main__":
|
|
120
|
-
|
|
121
|
-
import argparse
|
|
122
|
-
import os
|
|
123
|
-
import sys
|
|
124
|
-
import rich
|
|
125
|
-
|
|
126
|
-
from egse.config import get_common_egse_root
|
|
127
|
-
|
|
128
|
-
parser = argparse.ArgumentParser()
|
|
129
|
-
parser.add_argument(
|
|
130
|
-
"--full",
|
|
131
|
-
default=False,
|
|
132
|
-
action="store_true",
|
|
133
|
-
help="Print a full report on environment variables and paths.",
|
|
134
|
-
)
|
|
135
|
-
parser.add_argument(
|
|
136
|
-
"--doc",
|
|
137
|
-
default=False,
|
|
138
|
-
action="store_true",
|
|
139
|
-
help="Print help on the environment variables and paths.",
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
args = parser.parse_args()
|
|
143
|
-
|
|
144
|
-
def check_env_dir(env_var: str):
|
|
145
|
-
|
|
146
|
-
value = os.environ.get(env_var)
|
|
147
|
-
|
|
148
|
-
if value is None:
|
|
149
|
-
value = "[bold red]not set"
|
|
150
|
-
elif not value.startswith('/'):
|
|
151
|
-
value = f"[default]{value} [bold orange3](this is a relative path!)"
|
|
152
|
-
elif not os.path.exists(value):
|
|
153
|
-
value = f"[default]{value} [bold red](location doesn't exist!)"
|
|
154
|
-
elif not os.path.isdir(value):
|
|
155
|
-
value = f"[default]{value} [bold red](location is not a directory!)"
|
|
156
|
-
else:
|
|
157
|
-
value = f"[default]{value}"
|
|
158
|
-
return value
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def check_env_file(env_var: str):
|
|
162
|
-
|
|
163
|
-
value = os.environ.get(env_var)
|
|
164
|
-
|
|
165
|
-
if value is None:
|
|
166
|
-
value = "[bold red]not set"
|
|
167
|
-
elif not os.path.exists(value):
|
|
168
|
-
value = f"[default]{value} [bold red](location doesn't exist!)"
|
|
169
|
-
else:
|
|
170
|
-
value = f"[default]{value}"
|
|
171
|
-
return value
|
|
172
|
-
|
|
173
|
-
rich.print("Environment variables:")
|
|
174
|
-
|
|
175
|
-
for var in PLATO_ENV_VARIABLES:
|
|
176
|
-
if var.endswith("_SETTINGS"):
|
|
177
|
-
rich.print(f" {var} = {check_env_file(var)}")
|
|
178
|
-
else:
|
|
179
|
-
rich.print(f" {var} = {check_env_dir(var)}")
|
|
180
|
-
|
|
181
|
-
rich.print()
|
|
182
|
-
rich.print("Generated locations and filenames")
|
|
183
|
-
|
|
184
|
-
with all_logging_disabled():
|
|
185
|
-
try:
|
|
186
|
-
rich.print(f" {get_common_egse_root() = !s}", flush=True)
|
|
187
|
-
location = get_common_egse_root()
|
|
188
|
-
if not Path(location).exists():
|
|
189
|
-
rich.print("[red]ERROR: The generated Common-EGSE location doesn't exist![/]")
|
|
190
|
-
except ValueError as exc:
|
|
191
|
-
rich.print(f" get_common_egse_path() = [red]{exc}[/]")
|
|
192
|
-
|
|
193
|
-
try:
|
|
194
|
-
rich.print(f" {get_data_storage_location() = }", flush=True)
|
|
195
|
-
location = get_data_storage_location()
|
|
196
|
-
if not Path(location).exists():
|
|
197
|
-
rich.print("[red]ERROR: The generated data storage location doesn't exist![/]")
|
|
198
|
-
except ValueError as exc:
|
|
199
|
-
rich.print(f" get_data_storage_location() = [red]{exc}[/]")
|
|
200
|
-
|
|
201
|
-
try:
|
|
202
|
-
rich.print(f" {get_conf_data_location() = }", flush=True)
|
|
203
|
-
location = get_conf_data_location()
|
|
204
|
-
if not Path(location).exists():
|
|
205
|
-
rich.print("[red]ERROR: The generated configuration data location doesn't exist![/]")
|
|
206
|
-
except ValueError as exc:
|
|
207
|
-
rich.print(f" get_conf_data_location() = [red]{exc}[/]")
|
|
208
|
-
|
|
209
|
-
try:
|
|
210
|
-
rich.print(f" {get_log_file_location() = }", flush=True)
|
|
211
|
-
location = get_log_file_location()
|
|
212
|
-
if not Path(location).exists():
|
|
213
|
-
rich.print("[red]ERROR: The generated log files location doesn't exist![/]")
|
|
214
|
-
except ValueError as exc:
|
|
215
|
-
rich.print(f" get_log_file_location() = [red]{exc}[/]")
|
|
216
|
-
|
|
217
|
-
if args.full:
|
|
218
|
-
rich.print()
|
|
219
|
-
rich.print(f" PYTHONPATH=[default]{os.environ.get('PYTHONPATH')}")
|
|
220
|
-
rich.print(f" PYTHONSTARTUP=[default]{os.environ.get('PYTHONSTARTUP')}")
|
|
221
|
-
rich.print()
|
|
222
|
-
python_path_msg = "\n ".join(sys.path)
|
|
223
|
-
rich.print(f" sys.path=[\n {python_path_msg}\n ]")
|
|
224
|
-
path_msg = "\n ".join(os.environ.get("PATH").split(":"))
|
|
225
|
-
rich.print(f" PATH=[\n {path_msg}\n ]")
|
|
226
|
-
|
|
227
|
-
help_msg = f"""
|
|
228
|
-
[bold]{ENV_PLATO_COMMON_EGSE}[/bold]:
|
|
229
|
-
This variable should point to the root of the working copy of the 'plato-common-egse'
|
|
230
|
-
project. Its value is usually '~/git/plato-common-egse' which is considered the default
|
|
231
|
-
location.
|
|
232
|
-
|
|
233
|
-
[bold]{ENV_PLATO_INSTALL}[/bold]:
|
|
234
|
-
This variable shall point to the location where the CGSE will be installed and is
|
|
235
|
-
usually set to `/cgse`. The variable is used by the [blue]update_cgse[/blue] script.
|
|
236
|
-
|
|
237
|
-
[bold]{ENV_PLATO_CONF_DATA}[/bold]:
|
|
238
|
-
This directory is the root folder for all the Setups of the site, the site is part
|
|
239
|
-
of the name. By default, this directory is located in the overall data storage folder.
|
|
240
|
-
|
|
241
|
-
[bold]{ENV_PLATO_CONF_REPO}[/bold]:
|
|
242
|
-
This variable is the root of the working copy of the 'plato-cgse-conf' project.
|
|
243
|
-
The value is usually set to `~/git/plato-cgse-conf`.
|
|
244
|
-
|
|
245
|
-
[bold]{ENV_PLATO_STORAGE_DATA}[/bold]:
|
|
246
|
-
This directory contains all the data files from the control servers and other
|
|
247
|
-
components. This folder is the root folder for all data from all cameras and
|
|
248
|
-
all sites. Below this folder shall be a folder for each of the cameras and in
|
|
249
|
-
there a sub-folder for each of the sites where that camera was tested. The
|
|
250
|
-
hierarchy is therefore: `$PLATO_DATA_STORAGE_LOCATION/<camera name>/<site id>.
|
|
251
|
-
Each of those folder shall contain at least the sub-folder [blue]daily[/blue], and [blue]obs[/blue].
|
|
252
|
-
|
|
253
|
-
There is also a file called [blue]obsid-table-<site id>.txt[/blue] which is maintained by
|
|
254
|
-
the configuration manager and contains information about the observations that
|
|
255
|
-
were run and the commands to start those observation.
|
|
256
|
-
|
|
257
|
-
[bold]{ENV_PLATO_LOG_DATA}[/bold]:
|
|
258
|
-
This directory contains the log files with all messages that were sent to the
|
|
259
|
-
logger control server. The log files are rotated on a daily basis at midnight UTC.
|
|
260
|
-
By default, this directory is also located in the overall data storage folder.
|
|
261
|
-
|
|
262
|
-
[bold]{ENV_PLATO_LOCAL_SETTINGS}[/bold]:
|
|
263
|
-
This file is used for local site-specific settings. When the environment
|
|
264
|
-
variable is not set, no local settings will be loaded. By default, this variable
|
|
265
|
-
is assumed to be '/cgse/local_settings.yaml'.
|
|
266
|
-
"""
|
|
267
|
-
|
|
268
|
-
if args.doc:
|
|
269
|
-
rich.print(help_msg)
|
|
270
|
-
|
|
271
|
-
if not args.full:
|
|
272
|
-
rich.print()
|
|
273
|
-
rich.print("use the '--full' flag to get a more detailed report, '--doc' for help on the variables.")
|
|
274
|
-
|
|
275
|
-
# Do we still use these environment variables?
|
|
276
|
-
#
|
|
277
|
-
# PLATO_WORKDIR
|
|
278
|
-
# PLATO_COMMON_EGSE_PATH - YES
|
egse/exceptions.py
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The Exception Hierarchy:
|
|
3
|
-
|
|
4
|
-
Exception
|
|
5
|
-
+-- CommonEGSEException
|
|
6
|
-
+-- Warning
|
|
7
|
-
+-- Error
|
|
8
|
-
+-- InvalidOperationError
|
|
9
|
-
+-- DeviceNotFoundError (should move to sub class of DeviceError)
|
|
10
|
-
+-- InternalStateError
|
|
11
|
-
+-- DeviceError
|
|
12
|
-
+-- DeviceControllerError
|
|
13
|
-
+-- DeviceConnectionError
|
|
14
|
-
+-- DeviceTimeoutError
|
|
15
|
-
+-- DeviceInterfaceError
|
|
16
|
-
+-- Failure
|
|
17
|
-
+-- HexapodError
|
|
18
|
-
+-- PMACError
|
|
19
|
-
+-- OGSEError
|
|
20
|
-
+-- ESLError
|
|
21
|
-
+-- FilterWheelError
|
|
22
|
-
+-- FilterWheel8smc4Error
|
|
23
|
-
+-- ShutterKSC1010Error
|
|
24
|
-
+-- WindowSizeError
|
|
25
|
-
+-- SettingsError
|
|
26
|
-
+-- StagesError
|
|
27
|
-
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class CommonEGSEException(Exception):
|
|
32
|
-
"""The base exception for all errors and warnings in the Common-EGSE."""
|
|
33
|
-
|
|
34
|
-
pass
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class Error(CommonEGSEException):
|
|
38
|
-
"""The base class for all Common-EGSE Errors."""
|
|
39
|
-
|
|
40
|
-
pass
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class Warning(CommonEGSEException):
|
|
44
|
-
"""The base class for all Common-EGSE Warnings."""
|
|
45
|
-
|
|
46
|
-
pass
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class FileIsEmptyError(Error):
|
|
50
|
-
"""Raised when a file is empty and that is unexpected."""
|
|
51
|
-
pass
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class InvalidOperationError(Error):
|
|
55
|
-
"""
|
|
56
|
-
Raised when a certain operation is not valid in the given state,
|
|
57
|
-
circumstances or environment.
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
pass
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class InvalidInputError(Error):
|
|
64
|
-
""" Exception raised when the input is invalid after editing."""
|
|
65
|
-
|
|
66
|
-
pass
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
class DeviceNotFoundError(Error):
|
|
70
|
-
"""Raised when a device could not be located, or loaded."""
|
|
71
|
-
|
|
72
|
-
pass
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class InternalStateError(Error):
|
|
76
|
-
"""Raised when an object encounters an internal state inconsistency."""
|
|
77
|
-
|
|
78
|
-
pass
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class InternalError(Error):
|
|
82
|
-
"""Raised when an internal inconsistency occurred in a function, method or class."""
|
|
83
|
-
|
|
84
|
-
pass
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class Abort(RuntimeError):
|
|
88
|
-
"""Internal Exception to signal a process to abort."""
|
egse/fdir/__init__.py
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from egse.control import Response
|
|
2
|
-
from PyQt5.QtWidgets import QMessageBox, QApplication
|
|
3
|
-
|
|
4
|
-
def generate_popup(code: str, actions: str, success: bool) -> Response:
|
|
5
|
-
app = QApplication([])
|
|
6
|
-
msg = QMessageBox()
|
|
7
|
-
msg.setModal(False)
|
|
8
|
-
msg.setWindowModality(0)
|
|
9
|
-
msg.setWindowTitle("FDIR signal notification")
|
|
10
|
-
msg.setIcon(QMessageBox.Critical)
|
|
11
|
-
msg.setText(f"<h1><bold>An FDIR signal with code:<br><blockquote>{code}</blockquote><br> has fired!</bold></h1>")
|
|
12
|
-
if success:
|
|
13
|
-
msg.setInformativeText(f"The associated recovery script was executed: <br><h2> succesfully! </h2><br> \n\nPlease press OK to clear FDIR signal")
|
|
14
|
-
else:
|
|
15
|
-
msg.setInformativeText(f"The associated recovery script has: <br> <h2>FAILED!</h2> <br> Please take action to recover the system\n\nAfter recovery press OK to clear FDIR signal")
|
|
16
|
-
|
|
17
|
-
msg.setDetailedText(f"Required actions:\n\n {actions}")
|
|
18
|
-
msg.setStandardButtons(QMessageBox.Ok)
|
|
19
|
-
msg.setDefaultButton(QMessageBox.Ok)
|
|
20
|
-
|
|
21
|
-
ret = msg.exec_()
|
|
22
|
-
|
|
23
|
-
if ret == QMessageBox.Ok:
|
|
24
|
-
pass
|
|
25
|
-
else:
|
|
26
|
-
pass
|
egse/fdir/fdir_manager.py
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.command import ClientServerCommand
|
|
6
|
-
from egse.control import ControlServer
|
|
7
|
-
from egse.proxy import Proxy
|
|
8
|
-
from egse.protocol import CommandProtocol
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.zmq_ser import connect_address, bind_address
|
|
11
|
-
from egse.system import format_datetime
|
|
12
|
-
from egse.fdir.fdir_manager_interface import FdirManagerInterface
|
|
13
|
-
from egse.fdir.fdir_manager_controller import FdirManagerController
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
CTRL_SETTINGS = Settings.load("FDIR Manager Control Server")
|
|
18
|
-
DEVICE_SETTINGS = Settings.load(filename="fdir_manager.yaml")
|
|
19
|
-
SITE_ID = Settings.load("SITE").ID
|
|
20
|
-
|
|
21
|
-
gauge_state = Gauge(f"G{SITE_ID}_FDIR_STATE", "")
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class FdirManagerCommand(ClientServerCommand):
|
|
25
|
-
pass
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class FdirManagerProxy(Proxy, FdirManagerInterface):
|
|
30
|
-
""" The FDIR Manager Proxy class is used to connect to the FDIR Manager
|
|
31
|
-
control server and send commands and requests for the FDIR manager.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
def __init__(
|
|
35
|
-
self,
|
|
36
|
-
protocol=CTRL_SETTINGS.PROTOCOL,
|
|
37
|
-
hostname=CTRL_SETTINGS.HOSTNAME,
|
|
38
|
-
port=CTRL_SETTINGS.COMMANDING_PORT,
|
|
39
|
-
):
|
|
40
|
-
super().__init__(connect_address(protocol, hostname, port))
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class FdirManagerProtocol(CommandProtocol):
|
|
44
|
-
|
|
45
|
-
def __init__(self, control_server: ControlServer):
|
|
46
|
-
|
|
47
|
-
super().__init__()
|
|
48
|
-
|
|
49
|
-
self.control_server = control_server
|
|
50
|
-
self.controller = FdirManagerController()
|
|
51
|
-
|
|
52
|
-
self.load_commands(
|
|
53
|
-
DEVICE_SETTINGS.Commands,
|
|
54
|
-
FdirManagerCommand,
|
|
55
|
-
FdirManagerController,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
self.build_device_method_lookup_table(self.controller)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def get_bind_address(self):
|
|
62
|
-
|
|
63
|
-
return bind_address(
|
|
64
|
-
self.control_server.get_communication_protocol(),
|
|
65
|
-
self.control_server.get_commanding_port(),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def get_status(self):
|
|
70
|
-
|
|
71
|
-
status = super().get_status()
|
|
72
|
-
status.update({"state": self.controller.get_state()})
|
|
73
|
-
|
|
74
|
-
return status
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def get_housekeeping(self):
|
|
78
|
-
|
|
79
|
-
state = self.controller.get_state()
|
|
80
|
-
gauge_state.set(state)
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
"timestamp": format_datetime(),
|
|
84
|
-
f"G{SITE_ID}_FDIR_STATE": state,
|
|
85
|
-
}
|
egse/fdir/fdir_manager.yaml
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.fdir.FdirManagerInterface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.fdir.FdirManagerProxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.alert.FdirManagerControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.fdir.fdir_manager_cs
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Commands:
|
|
15
|
-
is_connected:
|
|
16
|
-
description:
|
|
17
|
-
args:
|
|
18
|
-
cmd: ""
|
|
19
|
-
|
|
20
|
-
is_simulator:
|
|
21
|
-
descripton:
|
|
22
|
-
args:
|
|
23
|
-
cmd: ""
|
|
24
|
-
|
|
25
|
-
signal_fdir:
|
|
26
|
-
description: Alert the CS that an FDIR situation occured
|
|
27
|
-
args:
|
|
28
|
-
fdir_code: str | Predefined FDIR code.
|
|
29
|
-
script_args: list | optional arguments for recovery script.
|
|
30
|
-
cmd: "{fdir_code}{kwargs}"
|
|
31
|
-
|
|
32
|
-
clear_fdir:
|
|
33
|
-
description: Clear all asserted FDIR codes. The CS will return to it's initial state.
|
|
34
|
-
|
|
35
|
-
get_state:
|
|
36
|
-
description: Check if the CS is in it's idle or some FDIR code was triggered.
|
|
37
|
-
returns: str | active FDIR code (empty string if idle)
|