cgse 2024.7.0__py3-none-any.whl → 2025.0.1__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.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.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/dpu/dpu.yaml
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.dpu.DPUInterface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.dpu.DPUProxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.dpu.dpu_cs.DPUControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.dpu.dpu_cs
|
|
12
|
-
|
|
13
|
-
UserInterface:
|
|
14
|
-
egse.dpu.dpu_ui
|
|
15
|
-
|
|
16
|
-
Commands:
|
|
17
|
-
|
|
18
|
-
# Each of these groups is parsed and used on both the server and the client side.
|
|
19
|
-
# The group name (e.g. is_simulator) will be monkey patched in the Proxy class for the device or service.
|
|
20
|
-
# The other field are:
|
|
21
|
-
# description: Used by the doc_string method to generate a help string
|
|
22
|
-
# cmd: Command string that will eventually be send to the hardware controller for the
|
|
23
|
-
# device.
|
|
24
|
-
# device_method: The name of the method to be called on the device class.
|
|
25
|
-
# These should all be defined by the base class for the device, i.e. HexapodBase.
|
|
26
|
-
# response: The name of the method to be called from the devive protocol.
|
|
27
|
-
# This method should exist in the subclass of the CommandProtocol base class, i.e.
|
|
28
|
-
# in this case it will be the HexapodProtocol class.
|
|
29
|
-
|
|
30
|
-
is_simulator:
|
|
31
|
-
description: Returns True
|
|
32
|
-
|
|
33
|
-
# DPU commands
|
|
34
|
-
|
|
35
|
-
marker:
|
|
36
|
-
description: Send a marker to the DPU
|
|
37
|
-
cmd: "{marker}"
|
|
38
|
-
|
|
39
|
-
get_slicing:
|
|
40
|
-
description: Request the number of cycles to use for slicing as a hint for the FITS generation.
|
|
41
|
-
|
|
42
|
-
set_slicing:
|
|
43
|
-
description: Set a slicing hint for the FITS generation.
|
|
44
|
-
cmd: "{n_cycles}"
|
|
45
|
-
|
|
46
|
-
get_register_map:
|
|
47
|
-
description: Return the current RegisterMap from the DPU Processor
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
# N-FEE commands
|
|
51
|
-
|
|
52
|
-
n_fee_sync_register_map:
|
|
53
|
-
description: Read and sync the register map from the N-FEE on the DPU Processor.
|
|
54
|
-
|
|
55
|
-
n_fee_get_mode:
|
|
56
|
-
description: Request the mode of the N-FEE.
|
|
57
|
-
|
|
58
|
-
n_fee_get_sync_mode:
|
|
59
|
-
description: Request the sync mode of the N-FEE.
|
|
60
|
-
|
|
61
|
-
n_fee_is_dump_mode:
|
|
62
|
-
description: Returns True if the N-FEE is configured for DUMP mode.
|
|
63
|
-
|
|
64
|
-
n_fee_set_immediate_on_mode:
|
|
65
|
-
description: Command the N-FEE to go into IMMEDIATE ON mode.
|
|
66
|
-
|
|
67
|
-
n_fee_set_on_mode:
|
|
68
|
-
description: Command the N-FEE to go into ON mode.
|
|
69
|
-
|
|
70
|
-
This will change the `ccd_mode_config` in register `reg_21_config` to `n_fee_mode.ON_MODE`.
|
|
71
|
-
No other registers will be changed by this command.
|
|
72
|
-
|
|
73
|
-
n_fee_set_standby_mode:
|
|
74
|
-
description: Command the N-FEE to go into STANDBY mode.
|
|
75
|
-
|
|
76
|
-
This will change the `ccd_mode_config` in register `reg_21_config` to `n_fee_mode.STAND_BY_MODE`.
|
|
77
|
-
No other registers will be changed by this command.
|
|
78
|
-
|
|
79
|
-
n_fee_set_dump_mode:
|
|
80
|
-
description: Command the N-FEE to go into DUMP mode.
|
|
81
|
-
cmd: "{n_fee_parameters}"
|
|
82
|
-
|
|
83
|
-
n_fee_set_dump_mode_int_sync:
|
|
84
|
-
description: Command the N-FEE to go into DUMP mode internal sync.
|
|
85
|
-
cmd: "{n_fee_parameters}"
|
|
86
|
-
|
|
87
|
-
n_fee_set_full_image_mode:
|
|
88
|
-
description: Command the N-FEE to go into FULL_IMAGE mode.
|
|
89
|
-
|
|
90
|
-
This will set the `ccd_mode_config` in the `reg_21_config` to the value for FULL_IMAGE_MODE (0x05).
|
|
91
|
-
cmd: "{n_fee_parameters}"
|
|
92
|
-
|
|
93
|
-
n_fee_set_full_image_mode_int_sync:
|
|
94
|
-
description: Command the N-FEE to go into FULL_IMAGE mode and internal sync.
|
|
95
|
-
|
|
96
|
-
This will set the `ccd_mode_config` in the `reg_21_config` to the value for FULL_IMAGE_MODE (0x05).
|
|
97
|
-
cmd: "{n_fee_parameters}"
|
|
98
|
-
|
|
99
|
-
n_fee_set_full_image_pattern_mode:
|
|
100
|
-
description: Command the N-FEE to go into FULL_IMAGE_PATTERN mode.
|
|
101
|
-
|
|
102
|
-
This will set the `ccd_mode_config` in the `reg_21_config` to the value for FULL_IMAGE_PATTERN_MODE (0x01).
|
|
103
|
-
cmd: "{n_fee_parameters}"
|
|
104
|
-
|
|
105
|
-
n_fee_set_internal_sync:
|
|
106
|
-
description: Command the N-FEE to go into internal sync mode. The internal sync Timer will generate 400ms
|
|
107
|
-
sync pulses indefenitly.
|
|
108
|
-
|
|
109
|
-
This will change the `sync_sel` value in the register `reg_5_config` to 1.
|
|
110
|
-
|
|
111
|
-
There is an additional related register setting `int_sync_period` in register `reg_4_config`
|
|
112
|
-
which defines the sync period in milliseconds.
|
|
113
|
-
cmd: "{n_fee_parameters}"
|
|
114
|
-
|
|
115
|
-
n_fee_set_external_sync:
|
|
116
|
-
description: Command the N-FEE to go into external sync mode. The external sync pulses are generated by the
|
|
117
|
-
AEU, which generates one 400ms pulse followed by three 200ms pulses.
|
|
118
|
-
|
|
119
|
-
This will change the `sync_sel` value in the register `reg_5_config` to 0.
|
|
120
|
-
cmd: "{n_fee_parameters}"
|
|
121
|
-
|
|
122
|
-
n_fee_high_precision_hk_mode:
|
|
123
|
-
description: Set the N-FEE in high precision HK mode
|
|
124
|
-
cmd: "{n_fee_parameters}"
|
|
125
|
-
|
|
126
|
-
n_fee_set_register_value:
|
|
127
|
-
description: Set the given register poarameter to the given value
|
|
128
|
-
cmd: "{reg_name} {field_name} {field_value}"
|
|
129
|
-
|
|
130
|
-
n_fee_reset:
|
|
131
|
-
description: Reset the N-FEE to its default settings
|
|
132
|
-
|
|
133
|
-
n_fee_set_clear_error_flags:
|
|
134
|
-
description: Command the N-FEE to clear all error flags for non RMAP/SpW related functions immediately. The
|
|
135
|
-
`clear_error_flag` bit in the register map is set to 1, meaning that all error flags that are
|
|
136
|
-
generated by the N-FEE FPGA for non RMAP-SpW related functions are cleared immediately. This
|
|
137
|
-
bit is cleared automatically, so that any future error flags can be latched again. If the error
|
|
138
|
-
conditions persist and no corrective measures are taken, then error flags would be set again.
|
|
139
|
-
|
|
140
|
-
n_fee_set_reverse_clocking:
|
|
141
|
-
description: Set the N-FEE in reverse clocking mode
|
|
142
|
-
cmd: "{n_fee_parameters}"
|
|
143
|
-
|
|
144
|
-
n_fee_set_charge_injection:
|
|
145
|
-
description: Enable charge injection in the N-FEE
|
|
146
|
-
cmd: "{n_fee_parameters}"
|
|
147
|
-
|
|
148
|
-
n_fee_set_vgd:
|
|
149
|
-
description: Set the VGD config parameter in the N-FEE
|
|
150
|
-
cmd: "{n_fee_parameters}"
|
|
151
|
-
|
|
152
|
-
n_fee_set_fpga_defaults:
|
|
153
|
-
description: Set the default FPGA values in the N-FEE
|
egse/dpu/dpu_cs.py
DELETED
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The DPU Control Server will receive commands from the DPU Proxy and executes those commands via
|
|
3
|
-
the DPU Controller.
|
|
4
|
-
|
|
5
|
-
Start the DPU Control Server from the terminal as follows when you have the real hardware
|
|
6
|
-
connected via a Diagnostic SpaceWire Interface (DSI):
|
|
7
|
-
```bash
|
|
8
|
-
$ dpu_cs start [-a <IP address of DSI>] [-p <dsi port>]
|
|
9
|
-
```
|
|
10
|
-
Alternatively, when you want to run the FEE Simulator, start the DPU Control Server as follows:
|
|
11
|
-
```bash
|
|
12
|
-
$ dpu_cs start --zeromq
|
|
13
|
-
```
|
|
14
|
-
This last command will try to connect to an N-FEE simulator that is also started with the `--zeromq` option.
|
|
15
|
-
See the `feesim` module in `egse.fee` for more information.
|
|
16
|
-
|
|
17
|
-
Please note that software simulators are intended for simple test purposes and will not simulate
|
|
18
|
-
all device behavior correctly, e.g. timing, error conditions, etc.
|
|
19
|
-
|
|
20
|
-
"""
|
|
21
|
-
import getpass
|
|
22
|
-
import logging
|
|
23
|
-
import multiprocessing
|
|
24
|
-
import sys
|
|
25
|
-
import time
|
|
26
|
-
|
|
27
|
-
import click
|
|
28
|
-
import invoke
|
|
29
|
-
import rich
|
|
30
|
-
import sshtunnel
|
|
31
|
-
import zmq
|
|
32
|
-
from prometheus_client import start_http_server
|
|
33
|
-
|
|
34
|
-
from egse.control import ControlServer
|
|
35
|
-
from egse.control import is_control_server_active
|
|
36
|
-
from egse.dpu import DPUProtocol
|
|
37
|
-
from egse.dpu import DPUProxy
|
|
38
|
-
from egse.dsi.spw import SpaceWireOverDSI
|
|
39
|
-
from egse.settings import Settings
|
|
40
|
-
from egse.spw import SpaceWireInterface
|
|
41
|
-
from egse.zmq.spw import SpaceWireOverZeroMQ
|
|
42
|
-
from egse.zmq_ser import connect_address
|
|
43
|
-
|
|
44
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_PROCESS)
|
|
45
|
-
|
|
46
|
-
LOGGER = logging.getLogger(__name__)
|
|
47
|
-
|
|
48
|
-
DPU_SETTINGS = Settings.load("DPU")
|
|
49
|
-
DSI_SETTINGS = Settings.load("DSI")
|
|
50
|
-
SITE_SETTINGS = Settings.load("SITE")
|
|
51
|
-
CTRL_SETTINGS = Settings.load("DPU Control Server")
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def is_dpu_cs_active(timeout: float = 0.5):
|
|
55
|
-
"""
|
|
56
|
-
Checks whether the DPU Control Server is running.
|
|
57
|
-
|
|
58
|
-
Args:
|
|
59
|
-
timeout (float): Timeout when waiting for a reply [seconds, default=0.5]
|
|
60
|
-
|
|
61
|
-
Returns:
|
|
62
|
-
True if the DPU CS is running and replied with the expected answer.
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
endpoint = connect_address(
|
|
66
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
return is_control_server_active(endpoint, timeout)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
class DPUControlServer(ControlServer):
|
|
73
|
-
"""
|
|
74
|
-
The Control Server is the commanding center for the DPU. The CS receives commands from any
|
|
75
|
-
DPU Proxy and puts them on a Queue for processing by the DPU Processor.
|
|
76
|
-
"""
|
|
77
|
-
|
|
78
|
-
def __init__(self, transport: SpaceWireInterface):
|
|
79
|
-
super().__init__()
|
|
80
|
-
|
|
81
|
-
self.device_protocol = DPUProtocol(self, transport)
|
|
82
|
-
|
|
83
|
-
self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
84
|
-
|
|
85
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
86
|
-
|
|
87
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
88
|
-
|
|
89
|
-
def get_communication_protocol(self):
|
|
90
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
91
|
-
|
|
92
|
-
def get_commanding_port(self):
|
|
93
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
94
|
-
|
|
95
|
-
def get_service_port(self):
|
|
96
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
97
|
-
|
|
98
|
-
def get_monitoring_port(self):
|
|
99
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
100
|
-
|
|
101
|
-
def get_storage_mnemonic(self):
|
|
102
|
-
try:
|
|
103
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
104
|
-
except AttributeError:
|
|
105
|
-
return "DPU"
|
|
106
|
-
|
|
107
|
-
def before_serve(self):
|
|
108
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
def start_dpu_simulator(transport: SpaceWireInterface):
|
|
112
|
-
|
|
113
|
-
multiprocessing.current_process().name = "dpu_cs"
|
|
114
|
-
|
|
115
|
-
try:
|
|
116
|
-
dpu_sim = DPUControlServer(transport)
|
|
117
|
-
dpu_sim.serve()
|
|
118
|
-
except KeyboardInterrupt:
|
|
119
|
-
print("Shutdown requested...exiting")
|
|
120
|
-
except SystemExit as exit_code:
|
|
121
|
-
print("System Exit with code {}.".format(exit_code))
|
|
122
|
-
return exit_code
|
|
123
|
-
except Exception:
|
|
124
|
-
import traceback
|
|
125
|
-
|
|
126
|
-
traceback.print_exc(file=sys.stdout)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
@click.group()
|
|
130
|
-
def cli():
|
|
131
|
-
pass
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
@cli.command()
|
|
135
|
-
@click.option("--zeromq", is_flag=True,
|
|
136
|
-
help="use ZeroMQ to connect to the DPU Processor")
|
|
137
|
-
@click.option("--dsi-address", "-a",
|
|
138
|
-
help="the hostname or IP address of the DSI to which this client "
|
|
139
|
-
"will connect (+ tcp socket port)")
|
|
140
|
-
@click.option("--dsi-port", "-p", type=int, default=1,
|
|
141
|
-
help="the DSI port number to which this client needs to connect "
|
|
142
|
-
"(not the port on the socket) [type=int]")
|
|
143
|
-
def start_bg(zeromq, dsi_address, dsi_port):
|
|
144
|
-
"""Start the DPU Control Server in the background."""
|
|
145
|
-
|
|
146
|
-
if zeromq:
|
|
147
|
-
options = "--zeromq"
|
|
148
|
-
else:
|
|
149
|
-
options = f"-a {dsi_address} " if dsi_address else ""
|
|
150
|
-
options += f"-p {dsi_port}"
|
|
151
|
-
|
|
152
|
-
LOGGER.info(f"Starting: dpu_cs start {options}")
|
|
153
|
-
|
|
154
|
-
invoke.run(f"dpu_cs start {options}", disown=True)
|
|
155
|
-
|
|
156
|
-
time.sleep(3.0) # give the DPU CS and the DPU Processor the time to startup
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
@cli.command()
|
|
160
|
-
@click.option("--tunnel", is_flag=True,
|
|
161
|
-
help="use an SSH tunnel to connect to the DSI")
|
|
162
|
-
@click.option("--zeromq", is_flag=True,
|
|
163
|
-
help="use ZeroMQ to connect to the DPU Processor")
|
|
164
|
-
@click.option("--ssh-user", "-u",
|
|
165
|
-
help="the username at the SSH server")
|
|
166
|
-
@click.option("--dsi-address", "-a",
|
|
167
|
-
help="the hostname or IP address of the DSI to which this client "
|
|
168
|
-
"will connect (+ tcp socket port)")
|
|
169
|
-
@click.option("--dsi-port", "-p", type=int, default=1,
|
|
170
|
-
help="the DSI port number to which this client needs to connect "
|
|
171
|
-
"(not the port on the socket) [type=int]")
|
|
172
|
-
def start(tunnel, zeromq, ssh_user, dsi_address, dsi_port):
|
|
173
|
-
"""
|
|
174
|
-
Start the DPU Control Server and the DPU Processor.
|
|
175
|
-
|
|
176
|
-
When --tunnel is specified, DSI_ADDRESS will default to 127.0.0.1
|
|
177
|
-
unless explicitly provided.
|
|
178
|
-
"""
|
|
179
|
-
|
|
180
|
-
if tunnel:
|
|
181
|
-
user = getpass.getuser()
|
|
182
|
-
password = getpass.getpass("Enter SSH passphrase: ")
|
|
183
|
-
|
|
184
|
-
# This is the IP address of the SSH server.
|
|
185
|
-
|
|
186
|
-
server_host = SITE_SETTINGS.SSH_SERVER
|
|
187
|
-
server_port = SITE_SETTINGS.SSH_PORT
|
|
188
|
-
|
|
189
|
-
# The IP address of the DSI, i.e. the EtherSpaceLink device from 4Links and
|
|
190
|
-
# the default port as defined in the Settings configuration file.
|
|
191
|
-
|
|
192
|
-
remote_host = DSI_SETTINGS.DSI_DPU_IP_ADDRESS
|
|
193
|
-
remote_port = DSI_SETTINGS.DSI_DPU_PORT
|
|
194
|
-
|
|
195
|
-
# The host from which the connection will be established. Usually, this
|
|
196
|
-
# is the 'localhost', but can be specified on the commandline if needed.
|
|
197
|
-
|
|
198
|
-
if not dsi_address:
|
|
199
|
-
local_host = "127.0.0.1"
|
|
200
|
-
local_port = 4949 # this number is just an arbitrary choice
|
|
201
|
-
dsi_address = f"{local_host}:{local_port}"
|
|
202
|
-
else:
|
|
203
|
-
local_host, local_port = dsi_address.split(":")
|
|
204
|
-
local_port = int(local_port)
|
|
205
|
-
|
|
206
|
-
LOGGER.debug(
|
|
207
|
-
f"SSH server: {server_host}:{server_port}, "
|
|
208
|
-
f"DSI: {remote_host}:{remote_port}, "
|
|
209
|
-
f"{local_host=}:{local_port=}, "
|
|
210
|
-
f"{dsi_address=}, {dsi_port=}"
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
with sshtunnel.open_tunnel(
|
|
214
|
-
(server_host, server_port),
|
|
215
|
-
ssh_username=user,
|
|
216
|
-
# FIXME: hardcoded info should go into specific user settings or the file should
|
|
217
|
-
# be searched for in the user's home directory.
|
|
218
|
-
ssh_private_key="/Users/rik/.ssh/id_rsa",
|
|
219
|
-
ssh_private_key_password=password,
|
|
220
|
-
remote_bind_address=(remote_host, remote_port),
|
|
221
|
-
local_bind_address=(local_host, local_port),
|
|
222
|
-
) as tunnel:
|
|
223
|
-
transport = SpaceWireOverDSI(dsi_address, dsi_port)
|
|
224
|
-
return start_dpu_simulator(transport)
|
|
225
|
-
else:
|
|
226
|
-
if zeromq:
|
|
227
|
-
transport = SpaceWireOverZeroMQ("tcp://*:5555", "DPU--FEE")
|
|
228
|
-
else:
|
|
229
|
-
if not dsi_address:
|
|
230
|
-
dsi_address = f"{DSI_SETTINGS.DSI_DPU_IP_ADDRESS}:{DSI_SETTINGS.DSI_DPU_PORT}"
|
|
231
|
-
|
|
232
|
-
transport = SpaceWireOverDSI(dsi_address, dsi_port)
|
|
233
|
-
|
|
234
|
-
return start_dpu_simulator(transport)
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
@cli.command()
|
|
238
|
-
def status():
|
|
239
|
-
"""Print the status of the control server."""
|
|
240
|
-
|
|
241
|
-
import rich
|
|
242
|
-
|
|
243
|
-
rich.print('DPU Control Server:')
|
|
244
|
-
if is_dpu_cs_active():
|
|
245
|
-
rich.print(' Status: [green]active')
|
|
246
|
-
with DPUProxy() as proxy:
|
|
247
|
-
rich.print(f" Hostname: {proxy.get_ip_address()}")
|
|
248
|
-
rich.print(f" Monitoring port: {proxy.get_monitoring_port()}")
|
|
249
|
-
rich.print(f" Commanding port: {proxy.get_commanding_port()}")
|
|
250
|
-
rich.print(f" Service port: {proxy.get_service_port()}")
|
|
251
|
-
else:
|
|
252
|
-
rich.print(' Status: [red]not active')
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
@cli.command()
|
|
256
|
-
def stop():
|
|
257
|
-
"""Send a 'quit_server' command to the DPU Control Server."""
|
|
258
|
-
|
|
259
|
-
if not is_dpu_cs_active():
|
|
260
|
-
rich.print('DPU CS: [red]not active')
|
|
261
|
-
return
|
|
262
|
-
|
|
263
|
-
try:
|
|
264
|
-
with DPUProxy() as proxy:
|
|
265
|
-
sp = proxy.get_service_proxy()
|
|
266
|
-
sp.quit_server()
|
|
267
|
-
except ConnectionError:
|
|
268
|
-
rich.print("[red]Couldn't connect to 'dpu_cs', process probably not running. ")
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
if __name__ == "__main__":
|
|
272
|
-
sys.exit(cli())
|