cgse 2023.38.0__py3-none-any.whl → 2024.1.4__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-2024.1.4.dist-info/METADATA +38 -0
- cgse-2024.1.4.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.4.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- 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 -234
- egse/alert/alertman_ui.py +0 -603
- 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 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- 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 -129
- 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 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- 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 -1247
- 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 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- 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/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- 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 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- 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 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- 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 -135
- 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 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- 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 -138
- 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 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- 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 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- 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 -69
- 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/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +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 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- 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 -163
- 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 -811
- 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 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- 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 -69
- 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 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- 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 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- 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 -904
- 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 -111
- 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 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- 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 -177
- 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 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- 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 -78
- 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 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- 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 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- 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 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- 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 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- 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 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- 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 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- 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 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- 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 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- 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/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/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/tm_gen/tm_gen_agilent.py +0 -38
- 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/dsi/rmapci.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# RMAP Configuration Interface
|
|
2
|
-
#
|
|
3
|
-
# This file implements functions to easily create the packets send over the RMAP protocol
|
|
4
|
-
# for the DPU-FEE interface.
|
|
5
|
-
#
|
|
6
|
-
# Please check the document PLATO-DLR-PL-IC-0002 v1.0 [25/09/2018] for reference.
|
|
7
|
-
# The RMAP Verified Write Request Packet STructure is defined on page 26 with req. FEE-DPU-IF-582.
|
|
8
|
-
|
|
9
|
-
import egse.dsi.rmap
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# FIXME: We could just use the rmap_write(..) command for this, but that currently doesn't have verify before write etc.
|
|
13
|
-
# It more looks like the RMAP interface to the device can also (better) be implemented in Python.
|
|
14
|
-
|
|
15
|
-
def write_critical_configuration_data(rmap_link, buf, tid, addr, data):
|
|
16
|
-
buf[0] = egse.dsi.rmap.rmap_get_target_logical_address(rmap_link)
|
|
17
|
-
buf[1] = egse.dsi.constants.RMAP_PROTOCOL_ID
|
|
18
|
-
buf[2] = 0x7C # Instruction: RMAP Request, write, incrementing address, verify before write, and send reply, reply addr length=0
|
|
19
|
-
buf[3] = 0xD1 # Key:
|
|
20
|
-
buf[4] = egse.dsi.rmap.rmap_get_initiator_logical_address(rmap_link)
|
|
21
|
-
buf[5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
22
|
-
buf[6] = (tid) & 0xFF # LSB of the Transition ID
|
|
23
|
-
buf[7] = (addr >> 32) & 0xFF # Extended address
|
|
24
|
-
buf[8] = (addr >> 24) & 0xFF # address (MSB)
|
|
25
|
-
buf[9] = (addr >> 16) & 0xFF # address
|
|
26
|
-
buf[10] = (addr >> 8) & 0xFF # address
|
|
27
|
-
buf[11] = (addr ) & 0xFF # address (LSB)
|
|
28
|
-
buf[12] = 0x00 # data length (MSB)
|
|
29
|
-
buf[13] = 0x00 # data length, fixed to 4 bytes for critical configuration parameters
|
|
30
|
-
buf[14] = 0x04 # data length (LSB)
|
|
31
|
-
buf[15] = egse.dsi.rmap.rmap_crc_check(buf, 0, 15)
|
|
32
|
-
buf[16] = (data >> 24) & 0xFF # data (MSB)
|
|
33
|
-
buf[17] = (data >> 16) & 0xFF # data
|
|
34
|
-
buf[18] = (data >> 8) & 0xFF # data
|
|
35
|
-
buf[19] = (data ) & 0xFF # data (LSB)
|
|
36
|
-
buf[20] = egse.dsi.rmap.rmap_crc_check(buf, 16, 4)
|
|
37
|
-
return buf
|
egse/dsi/spw.py
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module contains functions to handle SpaceWire communication.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from typing import Tuple
|
|
7
|
-
|
|
8
|
-
from egse.dsi import constants
|
|
9
|
-
from egse.dsi.esl import esl_close_connection
|
|
10
|
-
from egse.dsi.esl import esl_configure
|
|
11
|
-
from egse.dsi.esl import esl_flush
|
|
12
|
-
from egse.dsi.esl import esl_open_connection
|
|
13
|
-
from egse.dsi.esl import esl_read_packet
|
|
14
|
-
from egse.dsi.esl import esl_send_timecode
|
|
15
|
-
from egse.dsi.esl import esl_write_packet
|
|
16
|
-
from egse.dsi.rmap import rmap_configure
|
|
17
|
-
from egse.dsi.rmap import rmap_open_connection
|
|
18
|
-
from egse.dsi.rmap import rmap_read_request
|
|
19
|
-
from egse.dsi.rmap import rmap_write_request
|
|
20
|
-
from egse.settings import Settings
|
|
21
|
-
from egse.spw import SpaceWireInterface
|
|
22
|
-
from egse.spw import SpaceWirePacket
|
|
23
|
-
|
|
24
|
-
logger = logging.getLogger(__name__)
|
|
25
|
-
|
|
26
|
-
DSI_SETTINGS = Settings.load("DSI")
|
|
27
|
-
|
|
28
|
-
# Naming conventions:
|
|
29
|
-
#
|
|
30
|
-
# rx_buffer:
|
|
31
|
-
# is used for any buffer (of type bytes) that is or was received over the SpaceWire interface.
|
|
32
|
-
# tx_buffer:
|
|
33
|
-
# is used for any buffer (of type bytes) that will be transmitted over the SpaceWire interface.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def handle_extension_packet(rx_buffer: bytes, bytes_received: int):
|
|
37
|
-
"""
|
|
38
|
-
Decide how to handle the extension packet that was received over the SpaceWire.
|
|
39
|
-
|
|
40
|
-
The following extension packets are supported:
|
|
41
|
-
|
|
42
|
-
* a timecode packet
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
rx_buffer (bytes): the packet that was received as a bytes object
|
|
46
|
-
bytes_received (int): the length of the rx_buffer (allocated space might be larger)
|
|
47
|
-
|
|
48
|
-
Returns:
|
|
49
|
-
Nothing: yet.
|
|
50
|
-
|
|
51
|
-
"""
|
|
52
|
-
logger.debug("*" * 80)
|
|
53
|
-
logger.debug("Extension Packet returned by DSI")
|
|
54
|
-
logger.debug(
|
|
55
|
-
f"extension packet: {bin(int.from_bytes(rx_buffer, 'big'))} (length={bytes_received})"
|
|
56
|
-
)
|
|
57
|
-
logger.debug("*" * 80)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def handle_special_packet(rx_buffer: bytes, bytes_received: int):
|
|
61
|
-
"""
|
|
62
|
-
|
|
63
|
-
Args:
|
|
64
|
-
rx_buffer (bytes): the packet that was received as a bytes object
|
|
65
|
-
bytes_received (int): the length of the rx_buffer (allocated space might be larger)
|
|
66
|
-
|
|
67
|
-
Returns:
|
|
68
|
-
Nothing: yet.
|
|
69
|
-
|
|
70
|
-
"""
|
|
71
|
-
logger.debug("Special Packet returned by DSI")
|
|
72
|
-
logger.debug(f"extension packet: {rx_buffer}")
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class SpaceWireOverDSI(SpaceWireInterface):
|
|
76
|
-
"""
|
|
77
|
-
The SpaceWireOverDSI implements the SpaceWire communication/transport over a Diagnostic
|
|
78
|
-
SpaceWire Interface (DSI).
|
|
79
|
-
"""
|
|
80
|
-
|
|
81
|
-
def __init__(self, dsi_address, dsi_port):
|
|
82
|
-
self.dsi_address = dsi_address
|
|
83
|
-
self.dsi_port = dsi_port
|
|
84
|
-
self.esl_link = None
|
|
85
|
-
self.rmap_link = None
|
|
86
|
-
|
|
87
|
-
def connect(self):
|
|
88
|
-
self.esl_link = esl_open_connection(self.dsi_address)
|
|
89
|
-
self.rmap_link = rmap_open_connection(self.esl_link)
|
|
90
|
-
# esl_print_info(self.esl_link)
|
|
91
|
-
|
|
92
|
-
def disconnect(self):
|
|
93
|
-
esl_close_connection(self.esl_link)
|
|
94
|
-
|
|
95
|
-
def configure(self):
|
|
96
|
-
esl_configure(
|
|
97
|
-
self.esl_link,
|
|
98
|
-
active_link=self.dsi_port,
|
|
99
|
-
speed=DSI_SETTINGS.LINK_SPEED,
|
|
100
|
-
mode=constants.ESL_LINK_MODE_NORMAL,
|
|
101
|
-
report=constants.ESL_ER_REPORT_PARITY_ERROR
|
|
102
|
-
| constants.ESL_ER_REPORT_TIME_CODE
|
|
103
|
-
| constants.ESL_ER_REPORT_ESC_EOP
|
|
104
|
-
| constants.ESL_ER_REPORT_ESC_EEP
|
|
105
|
-
| constants.ESL_ER_REPORT_ESC_ESC
|
|
106
|
-
| constants.ESL_ER_REPORT_TIMEOUT,
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
rmap_configure(
|
|
110
|
-
self.rmap_link,
|
|
111
|
-
target_key=constants.RMAP_TARGET_KEY,
|
|
112
|
-
initiator_logical_address=DSI_SETTINGS.INITIATOR_LOGICAL_ADDRESS,
|
|
113
|
-
target_logical_address=DSI_SETTINGS.TARGET_LOGICAL_ADDRESS,
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
# esl_print_summary_of_structure(self.esl_link)
|
|
117
|
-
|
|
118
|
-
def flush(self):
|
|
119
|
-
esl_flush(self.esl_link)
|
|
120
|
-
|
|
121
|
-
def send_timecode(self, timecode: int):
|
|
122
|
-
esl_send_timecode(self.esl_link, timecode)
|
|
123
|
-
|
|
124
|
-
def read_packet(self, timeout: int = None) -> Tuple[int, bytes]:
|
|
125
|
-
return esl_read_packet(self.esl_link, timeout=timeout)
|
|
126
|
-
|
|
127
|
-
def write_packet(self, packet: bytes):
|
|
128
|
-
esl_write_packet(self.esl_link, packet, len(packet), constants.ESL_EOP)
|
|
129
|
-
|
|
130
|
-
def read_register(self, address: int, length: int = 4, strict: bool = True) -> bytes:
|
|
131
|
-
terminator, rx_buffer = rmap_read_request(self.rmap_link, address, length)
|
|
132
|
-
|
|
133
|
-
packet = SpaceWirePacket.create_packet(rx_buffer)
|
|
134
|
-
rx_data = packet.data
|
|
135
|
-
|
|
136
|
-
return rx_data
|
|
137
|
-
|
|
138
|
-
def write_register(self, address: int, data: bytes):
|
|
139
|
-
terminator, rx_buffer = rmap_write_request(self.rmap_link, address, data)
|
|
140
|
-
|
|
141
|
-
# FIXME:
|
|
142
|
-
# So, what do we need to do with the terminator value and the rx_buffer?
|
|
143
|
-
# Is there some error checking needed here and what should than be the
|
|
144
|
-
# return value?
|
|
145
|
-
|
|
146
|
-
return 0
|
|
147
|
-
|
|
148
|
-
def read_memory_map(self, address: int, size: int):
|
|
149
|
-
terminator, rx_buffer = rmap_read_request(self.rmap_link, address, size)
|
|
150
|
-
|
|
151
|
-
packet = SpaceWirePacket.create_packet(rx_buffer)
|
|
152
|
-
rx_data = packet.data
|
|
153
|
-
|
|
154
|
-
return rx_data
|
egse/dsi/spw_state.py
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
class SpaceWireLinkState:
|
|
2
|
-
def __init__(self):
|
|
3
|
-
self.linkDisabled = True
|
|
4
|
-
self.linkStart = False
|
|
5
|
-
self.autoStart = False
|
|
6
|
-
self.gotNULL = False
|
|
7
|
-
|
|
8
|
-
def isEnabled(self):
|
|
9
|
-
return not self.linkDisabled and (self.linkStart or self.autoStart and self.gotNULL)
|
|
10
|
-
|
|
11
|
-
def setAutoStart(self):
|
|
12
|
-
self.autoStart = True
|
|
13
|
-
|
|
14
|
-
def unsetAutoStart(self):
|
|
15
|
-
self.autoStart = False
|
|
16
|
-
|
|
17
|
-
def setGotNull(self):
|
|
18
|
-
self.gotNULL = True
|
|
19
|
-
|
|
20
|
-
def unsetGotNULL(self):
|
|
21
|
-
self.gotNULL = False
|
|
22
|
-
|
|
23
|
-
def setLinkDisabled(self):
|
|
24
|
-
self.linkDisabled = True
|
|
25
|
-
|
|
26
|
-
def unsetLinkDisabled(self):
|
|
27
|
-
self.linkDisabled = False
|
|
28
|
-
|
|
29
|
-
|
egse/dummy.py
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides dummy implementation for classes of the Commanding chain.
|
|
3
|
-
"""
|
|
4
|
-
import logging
|
|
5
|
-
import pickle
|
|
6
|
-
import random
|
|
7
|
-
import sys
|
|
8
|
-
|
|
9
|
-
import click
|
|
10
|
-
import zmq
|
|
11
|
-
|
|
12
|
-
from egse.command import ClientServerCommand
|
|
13
|
-
from egse.control import ControlServer
|
|
14
|
-
from egse.control import is_control_server_active
|
|
15
|
-
from egse.decorators import dynamic_interface
|
|
16
|
-
from egse.protocol import CommandProtocol
|
|
17
|
-
from egse.proxy import Proxy
|
|
18
|
-
from egse.settings import Settings
|
|
19
|
-
from egse.system import AttributeDict
|
|
20
|
-
from egse.system import format_datetime
|
|
21
|
-
from egse.zmq_ser import bind_address
|
|
22
|
-
from egse.zmq_ser import connect_address
|
|
23
|
-
|
|
24
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
25
|
-
LOGGER = logging.getLogger("egse.dummy")
|
|
26
|
-
|
|
27
|
-
# Especially DummyCommand and DummyController need to be defined in a known module
|
|
28
|
-
# because those objects are pickled and when de-pickled at the clients side the class
|
|
29
|
-
# definition must be known.
|
|
30
|
-
|
|
31
|
-
# We use AttributeDict here to define the settings, because that is how the Settings.load() returns
|
|
32
|
-
# settings loaded from a YAML file.
|
|
33
|
-
|
|
34
|
-
ctrl_settings = AttributeDict(
|
|
35
|
-
{
|
|
36
|
-
'HOSTNAME': 'localhost',
|
|
37
|
-
'COMMANDING_PORT': 4443,
|
|
38
|
-
'SERVICE_PORT': 4444,
|
|
39
|
-
'MONITORING_PORT': 4445,
|
|
40
|
-
'PROTOCOL': 'tcp',
|
|
41
|
-
'TIMEOUT': 10,
|
|
42
|
-
'HK_DELAY': 1.0,
|
|
43
|
-
}
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
commands = AttributeDict(
|
|
47
|
-
{
|
|
48
|
-
'info': {
|
|
49
|
-
'description': 'Info on the Dummy Controller',
|
|
50
|
-
'response': 'handle_device_method'
|
|
51
|
-
},
|
|
52
|
-
'response': {
|
|
53
|
-
'description': 'send a command to the device and return it\'s response',
|
|
54
|
-
'device_method': 'response',
|
|
55
|
-
'cmd': '{one} {two} {fake}',
|
|
56
|
-
'response': 'handle_device_method'
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
def is_dummy_cs_active():
|
|
62
|
-
return is_control_server_active(
|
|
63
|
-
endpoint=connect_address(ctrl_settings.PROTOCOL, ctrl_settings.HOSTNAME, ctrl_settings.COMMANDING_PORT)
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
class DummyCommand(ClientServerCommand):
|
|
68
|
-
pass
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
class DummyInterface:
|
|
72
|
-
@dynamic_interface
|
|
73
|
-
def info(self):
|
|
74
|
-
...
|
|
75
|
-
@dynamic_interface
|
|
76
|
-
def response(self, *args, **kwargs):
|
|
77
|
-
...
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class DummyProxy(Proxy, DummyInterface):
|
|
81
|
-
def __init__(self,
|
|
82
|
-
protocol=ctrl_settings.PROTOCOL, hostname=ctrl_settings.HOSTNAME, port=ctrl_settings.COMMANDING_PORT):
|
|
83
|
-
"""
|
|
84
|
-
Args:
|
|
85
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
86
|
-
hostname: location of the control server (IP address) [default is taken from settings file]
|
|
87
|
-
port: TCP port on which the control server is listening for commands [default is taken from settings file]
|
|
88
|
-
"""
|
|
89
|
-
super().__init__(connect_address(protocol, hostname, port), timeout=ctrl_settings.TIMEOUT)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
class DummyController(DummyInterface):
|
|
93
|
-
def info(self):
|
|
94
|
-
return "method info() called on DummyController"
|
|
95
|
-
|
|
96
|
-
def response(self, *args, **kwargs):
|
|
97
|
-
return f"response({args}, {kwargs})"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
class DummyProtocol(CommandProtocol):
|
|
101
|
-
|
|
102
|
-
def __init__(self, control_server: ControlServer):
|
|
103
|
-
super().__init__()
|
|
104
|
-
self.control_server = control_server
|
|
105
|
-
|
|
106
|
-
self.device_controller = DummyController()
|
|
107
|
-
|
|
108
|
-
self.load_commands(commands, DummyCommand, DummyController)
|
|
109
|
-
|
|
110
|
-
self.build_device_method_lookup_table(self.device_controller)
|
|
111
|
-
|
|
112
|
-
self._count = 0
|
|
113
|
-
|
|
114
|
-
def get_bind_address(self):
|
|
115
|
-
return bind_address(self.control_server.get_communication_protocol(), self.control_server.get_commanding_port())
|
|
116
|
-
|
|
117
|
-
def get_status(self):
|
|
118
|
-
return super().get_status()
|
|
119
|
-
|
|
120
|
-
def get_housekeeping(self) -> dict:
|
|
121
|
-
|
|
122
|
-
LOGGER.debug(f"Executing get_housekeeping function for {self.__class__.__name__}.")
|
|
123
|
-
|
|
124
|
-
self._count += 1
|
|
125
|
-
|
|
126
|
-
# use the sleep to test the responsiveness of the control server when even this get_housekeeping function takes
|
|
127
|
-
# a lot of time, i.e. up to several minutes in the case of data acquisition devices
|
|
128
|
-
# import time
|
|
129
|
-
# time.sleep(2.0)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
'timestamp': format_datetime(),
|
|
134
|
-
'COUNT': self._count,
|
|
135
|
-
'PI': 3.14159, # just to have a constant parameter
|
|
136
|
-
'Random': random.randint(0, 100), # just to have a variable parameter
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
class DummyControlServer(ControlServer):
|
|
141
|
-
"""
|
|
142
|
-
DummyControlServer - Command and monitor dummy device controllers.
|
|
143
|
-
|
|
144
|
-
The sever binds to the following ZeroMQ sockets:
|
|
145
|
-
|
|
146
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
147
|
-
send a command to the dummy device controller.
|
|
148
|
-
|
|
149
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out status
|
|
150
|
-
information to all the connected clients every DELAY seconds.
|
|
151
|
-
|
|
152
|
-
"""
|
|
153
|
-
|
|
154
|
-
def __init__(self):
|
|
155
|
-
super().__init__()
|
|
156
|
-
|
|
157
|
-
self.device_protocol = DummyProtocol(self)
|
|
158
|
-
|
|
159
|
-
self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
160
|
-
|
|
161
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
162
|
-
|
|
163
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
164
|
-
|
|
165
|
-
self.set_hk_delay(ctrl_settings.HK_DELAY)
|
|
166
|
-
|
|
167
|
-
def get_communication_protocol(self):
|
|
168
|
-
return 'tcp'
|
|
169
|
-
|
|
170
|
-
def get_commanding_port(self):
|
|
171
|
-
return ctrl_settings.COMMANDING_PORT
|
|
172
|
-
|
|
173
|
-
def get_service_port(self):
|
|
174
|
-
return ctrl_settings.SERVICE_PORT
|
|
175
|
-
|
|
176
|
-
def get_monitoring_port(self):
|
|
177
|
-
return ctrl_settings.MONITORING_PORT
|
|
178
|
-
|
|
179
|
-
def get_storage_mnemonic(self):
|
|
180
|
-
return "DUMMY-HK"
|
|
181
|
-
|
|
182
|
-
@click.group()
|
|
183
|
-
def cli():
|
|
184
|
-
pass
|
|
185
|
-
|
|
186
|
-
@click.group()
|
|
187
|
-
def control_server():
|
|
188
|
-
pass
|
|
189
|
-
|
|
190
|
-
cli.add_command(control_server)
|
|
191
|
-
|
|
192
|
-
@control_server.command()
|
|
193
|
-
def start():
|
|
194
|
-
"""Start the dummy control server on localhost."""
|
|
195
|
-
from egse.dummy import DummyControlServer
|
|
196
|
-
|
|
197
|
-
try:
|
|
198
|
-
control_server = DummyControlServer()
|
|
199
|
-
control_server.serve()
|
|
200
|
-
except KeyboardInterrupt:
|
|
201
|
-
print("Shutdown requested...exiting")
|
|
202
|
-
except SystemExit as exit_code:
|
|
203
|
-
print("System Exit with code {}.".format(exit_code))
|
|
204
|
-
sys.exit(exit_code)
|
|
205
|
-
except Exception:
|
|
206
|
-
import traceback
|
|
207
|
-
traceback.print_exc(file=sys.stdout)
|
|
208
|
-
|
|
209
|
-
@control_server.command()
|
|
210
|
-
def stop():
|
|
211
|
-
"""Send a quit service command to the dummy control server."""
|
|
212
|
-
with DummyProxy() as dummy:
|
|
213
|
-
sp = dummy.get_service_proxy()
|
|
214
|
-
sp.quit_server()
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
@cli.command()
|
|
218
|
-
@click.argument('hostname')
|
|
219
|
-
@click.argument('port')
|
|
220
|
-
@click.option('--pickle/--no-pickle', 'use_pickle', default=True)
|
|
221
|
-
def monitoring(use_pickle: bool, hostname: str = 'localhost', port: int = None):
|
|
222
|
-
"""Monitor the status of a control server on hostname.
|
|
223
|
-
|
|
224
|
-
The port number shall correspond to the port number on which the server is publishing
|
|
225
|
-
information with the ZeroMQ PUB-SUB protocol.
|
|
226
|
-
|
|
227
|
-
The response from the server (the data or string that was published) is logged at INFO level.
|
|
228
|
-
|
|
229
|
-
Arguments:
|
|
230
|
-
|
|
231
|
-
hostname: the IP address or hostname of the server
|
|
232
|
-
|
|
233
|
-
port: the port to connect to (this is the port to which the server binds)
|
|
234
|
-
|
|
235
|
-
Options:
|
|
236
|
-
|
|
237
|
-
--pickle or --no-pickle: use pickle to de-serialize the response
|
|
238
|
-
"""
|
|
239
|
-
context = zmq.Context()
|
|
240
|
-
|
|
241
|
-
receiver = context.socket(zmq.SUB)
|
|
242
|
-
receiver.connect(f"tcp://{hostname}:{port}")
|
|
243
|
-
receiver.setsockopt_string(zmq.SUBSCRIBE, "")
|
|
244
|
-
|
|
245
|
-
while True:
|
|
246
|
-
try:
|
|
247
|
-
response = receiver.recv()
|
|
248
|
-
if use_pickle:
|
|
249
|
-
response = pickle.loads(response)
|
|
250
|
-
|
|
251
|
-
LOGGER.info(response)
|
|
252
|
-
except KeyboardInterrupt:
|
|
253
|
-
LOGGER.info("KeyboardInterrupt caught!")
|
|
254
|
-
break
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
if __name__ == "__main__":
|
|
258
|
-
cli()
|
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()
|