cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/rmap.py
DELETED
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.bits import crc_calc
|
|
4
|
-
from egse.decorators import static_vars
|
|
5
|
-
from egse.exceptions import Error
|
|
6
|
-
|
|
7
|
-
# RMAP Error Codes and Constants -------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
RMAP_PROTOCOL_ID = 0x01
|
|
10
|
-
RMAP_TARGET_LOGICAL_ADDRESS_DEFAULT = 0xFE
|
|
11
|
-
RMAP_TARGET_KEY = 0xD1
|
|
12
|
-
|
|
13
|
-
# Error and Status Codes
|
|
14
|
-
|
|
15
|
-
RMAP_SUCCESS = 0
|
|
16
|
-
RMAP_GENERAL_ERROR = 1
|
|
17
|
-
RMAP_UNUSED_PACKET_TYPE_COMMAND_CODE = 2
|
|
18
|
-
RMAP_INVALID_KEY = 3
|
|
19
|
-
RMAP_INVALID_DATA_CRC = 4
|
|
20
|
-
RMAP_EARLY_EOP = 5
|
|
21
|
-
RMAP_TOO_MUCH_DATA = 6
|
|
22
|
-
RMAP_EEP = 7
|
|
23
|
-
RMAP_RESERVED = 8
|
|
24
|
-
RMAP_VERIFY_BUFFER_OVERRUN = 9
|
|
25
|
-
RMAP_NOT_IMPLEMENTED_AUTHORISED = 10
|
|
26
|
-
RMAP_RMW_DATA_LENGTH_ERROR = 11
|
|
27
|
-
RMAP_INVALID_TARGET_LOGICAL_ADDRESS = 12
|
|
28
|
-
|
|
29
|
-
# Memory Map layout --------------------------------------------------------------------------------
|
|
30
|
-
|
|
31
|
-
# NOTE: These memory areas are currently equal for N-FEE and F-FEE. Don't know if this will
|
|
32
|
-
# change in the future.
|
|
33
|
-
|
|
34
|
-
CRITICAL_AREA_START = 0x0000_0000
|
|
35
|
-
CRITICAL_AREA_END = 0x0000_00FC
|
|
36
|
-
GENERAL_AREA_START = 0x0000_0100
|
|
37
|
-
GENERAL_AREA_END = 0x0000_06FC
|
|
38
|
-
HK_AREA_START = 0x0000_0700
|
|
39
|
-
HK_AREA_END = 0x0000_07FC
|
|
40
|
-
WINDOWING_AREA_START = 0x0080_0000
|
|
41
|
-
WINDOWING_AREA_END = 0x00FF_FFFC
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class RMAPError(Error):
|
|
45
|
-
"""An RMAP specific Error."""
|
|
46
|
-
pass
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
_LOGGER = logging.getLogger(__name__)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def create_rmap_read_request_packet(address: int, length: int, tid: int, strict: bool = True) -> bytes:
|
|
53
|
-
"""
|
|
54
|
-
Creates an RMAP Read Request SpaceWire packet.
|
|
55
|
-
|
|
56
|
-
The read request is an RMAP command that read a number of bytes from the FEE register memory.
|
|
57
|
-
|
|
58
|
-
The function returns a ``ctypes`` character array (which is basically a bytes array) that
|
|
59
|
-
can be passed into the EtherSpaceLink library function ``esl_write_packet()``.
|
|
60
|
-
|
|
61
|
-
Address shall be within the 0x0000_0000 and 0x00FF_FFFC. The memory map (register) is divided
|
|
62
|
-
in the following areas:
|
|
63
|
-
|
|
64
|
-
0x0000_0000 - 0x0000_00FC Critical Configuration Area (verified write)
|
|
65
|
-
0x0000_0100 - 0x0000_06FC General Configuration Area (unverified write)
|
|
66
|
-
0x0000_0700 - 0x0000_07FC Housekeeping area
|
|
67
|
-
0x0000_0800 - 0x007F_FFFC Not Supported
|
|
68
|
-
0x0080_0000 - 0x00FF_FFFC Windowing Area (unverified write)
|
|
69
|
-
0x0010_0000 - 0xFFFF_FFFC Not Supported
|
|
70
|
-
|
|
71
|
-
All read requests to the critical area shall have a fixed data length of 4 bytes.
|
|
72
|
-
All read requests to a general area shall have a maximum data length of 256 bytes.
|
|
73
|
-
All read requests to the housekeeping area shall have a maximum data length of 256 bytes.
|
|
74
|
-
All read requests to the windowing area shall have a maximum data length of 4096 bytes.
|
|
75
|
-
|
|
76
|
-
The transaction identifier shall be incremented for each read request. This shall be done by
|
|
77
|
-
the calling function!
|
|
78
|
-
|
|
79
|
-
Args:
|
|
80
|
-
address (int): the FEE register memory address
|
|
81
|
-
length (int): the data length
|
|
82
|
-
tid (int): transaction identifier
|
|
83
|
-
strict (bool): perform strict checking of address and length
|
|
84
|
-
|
|
85
|
-
Returns:
|
|
86
|
-
a bytes object containing the full RMAP Read Request packet.
|
|
87
|
-
"""
|
|
88
|
-
from egse.spw import update_transaction_identifier
|
|
89
|
-
|
|
90
|
-
check_address_and_data_length(address, length, strict=strict)
|
|
91
|
-
|
|
92
|
-
tid = update_transaction_identifier(tid)
|
|
93
|
-
|
|
94
|
-
buf = bytearray(16)
|
|
95
|
-
|
|
96
|
-
# NOTE: The first bytes would each carry the target SpW address or a destination port,
|
|
97
|
-
# but this is not used for point-to-point connections, so we're safe.
|
|
98
|
-
|
|
99
|
-
buf[0] = 0x51 # Target N-FEE or F-FEE
|
|
100
|
-
buf[1] = 0x01 # RMAP Protocol ID
|
|
101
|
-
buf[2] = 0x4C # Instruction: 0b1001100, RMAP Request, Read, Incrementing address, reply address
|
|
102
|
-
buf[3] = 0xD1 # Destination Key
|
|
103
|
-
buf[4] = 0x50 # Initiator is always the DPU
|
|
104
|
-
buf[5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
105
|
-
buf[6] = tid & 0xFF # LSB of the Transition ID
|
|
106
|
-
buf[7] = 0x00 # Extended address is not used
|
|
107
|
-
buf[8] = (address >> 24) & 0xFF # address (MSB)
|
|
108
|
-
buf[9] = (address >> 16) & 0xFF # address
|
|
109
|
-
buf[10] = (address >> 8) & 0xFF # address
|
|
110
|
-
buf[11] = address & 0xFF # address (LSB)
|
|
111
|
-
buf[12] = (length >> 16) & 0xFF # data length (MSB)
|
|
112
|
-
buf[13] = (length >> 8) & 0xFF # data length
|
|
113
|
-
buf[14] = length & 0xFF # data length (LSB)
|
|
114
|
-
buf[15] = rmap_crc_check(buf, 0, 15) & 0xFF
|
|
115
|
-
|
|
116
|
-
return bytes(buf)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def create_rmap_read_request_reply_packet(
|
|
120
|
-
instruction_field: int, tid: int, status: int, buffer: bytes, buffer_length: int) -> bytes:
|
|
121
|
-
"""
|
|
122
|
-
Creates an RMAP Reply to a RMAP Read Request packet.
|
|
123
|
-
|
|
124
|
-
The function returns a ``ctypes`` character array (which is basically a bytes array) that
|
|
125
|
-
can be passed into the EtherSpaceLink library function ``esl_write_packet()``.
|
|
126
|
-
|
|
127
|
-
Args:
|
|
128
|
-
instruction_field (int): the instruction field of the RMAP read request packet
|
|
129
|
-
tid (int): the transaction identifier of the read request packet
|
|
130
|
-
status (int): shall be 0 if the read request was successful, contain an error code otherwise.
|
|
131
|
-
buffer (bytes): the data that was read as indicated by the read request
|
|
132
|
-
buffer_length (int): the data length
|
|
133
|
-
|
|
134
|
-
Returns:
|
|
135
|
-
packet: a bytes object containing the full RMAP Reply packet.
|
|
136
|
-
"""
|
|
137
|
-
|
|
138
|
-
buf = bytearray(12 + buffer_length + 1)
|
|
139
|
-
|
|
140
|
-
buf[0] = 0x50 # Initiator address N-DPU or F-DPU
|
|
141
|
-
buf[1] = 0x01 # RMAP Protocol ID
|
|
142
|
-
buf[2] = instruction_field & 0x3F # Clear the command bit as this is a reply
|
|
143
|
-
buf[3] = status & 0xFF # Status field: 0 on success
|
|
144
|
-
buf[4] = 0x51 # Target address is always the N-FEE or F-FEE
|
|
145
|
-
buf[5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
146
|
-
buf[6] = tid & 0xFF # LSB of the Transition ID
|
|
147
|
-
buf[7] = 0x00 # Reserved
|
|
148
|
-
buf[8] = (buffer_length >> 16) & 0xFF # data length (MSB)
|
|
149
|
-
buf[9] = (buffer_length >> 8) & 0xFF # data length
|
|
150
|
-
buf[10] = buffer_length & 0xFF # data length (LSB)
|
|
151
|
-
buf[11] = rmap_crc_check(buf, 0, 11) & 0xFF # Header CRC
|
|
152
|
-
|
|
153
|
-
# Note that we assume here that len(buffer) == buffer_length.
|
|
154
|
-
|
|
155
|
-
if len(buffer) != buffer_length:
|
|
156
|
-
_LOGGER.warning(
|
|
157
|
-
f"While creating an RMAP read reply packet, the length of the buffer ({len(buffer)}) "
|
|
158
|
-
f"not equals the buffer_length ({buffer_length})"
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
for idx, value in enumerate(buffer):
|
|
162
|
-
buf[12 + idx] = value
|
|
163
|
-
|
|
164
|
-
buf[12 + buffer_length] = rmap_crc_check(buffer, 0, buffer_length) & 0xFF # data CRC
|
|
165
|
-
|
|
166
|
-
return bytes(buf)
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
def create_rmap_verified_write_packet(address: int, data: bytes, tid: int) -> bytes:
|
|
170
|
-
"""
|
|
171
|
-
Create an RMAP packet for a verified write request on the FEE. The length of the data is
|
|
172
|
-
by convention always 4 bytes and therefore not passed as an argument.
|
|
173
|
-
|
|
174
|
-
Args:
|
|
175
|
-
address: the start memory address on the FEE register map
|
|
176
|
-
data: the data to be written in the register map at address [4 bytes]
|
|
177
|
-
tid (int): transaction identifier
|
|
178
|
-
|
|
179
|
-
Returns:
|
|
180
|
-
packet: a bytes object containing the SpaceWire packet.
|
|
181
|
-
"""
|
|
182
|
-
from egse.spw import update_transaction_identifier
|
|
183
|
-
|
|
184
|
-
if len(data) < 4:
|
|
185
|
-
raise ValueError(
|
|
186
|
-
f"The data argument should be at least 4 bytes, but it is only {len(data)} bytes: {data=}.")
|
|
187
|
-
|
|
188
|
-
if address > CRITICAL_AREA_END:
|
|
189
|
-
raise ValueError("The address range for critical configuration is [0x00 - 0xFC].")
|
|
190
|
-
|
|
191
|
-
tid = update_transaction_identifier(tid)
|
|
192
|
-
|
|
193
|
-
# Buffer length is fixed at 24 bytes since the data length is fixed
|
|
194
|
-
# at 4 bytes (32 bit addressing)
|
|
195
|
-
|
|
196
|
-
buf = bytearray(21)
|
|
197
|
-
|
|
198
|
-
# The values below are taken from the PLATO N-FEE to N-DPU
|
|
199
|
-
# Interface Requirements Document [PLATO-DLR-PL-ICD-0010]
|
|
200
|
-
|
|
201
|
-
buf[0] = 0x51 # Logical Address
|
|
202
|
-
buf[1] = 0x01 # Protocol ID
|
|
203
|
-
buf[2] = 0x7C # Instruction
|
|
204
|
-
buf[3] = 0xD1 # Key
|
|
205
|
-
buf[4] = 0x50 # Initiator Address
|
|
206
|
-
buf[5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
207
|
-
buf[6] = tid & 0xFF # LSB of the Transition ID
|
|
208
|
-
buf[7] = 0x00 # Extended address
|
|
209
|
-
buf[8] = (address >> 24) & 0xFF # address (MSB)
|
|
210
|
-
buf[9] = (address >> 16) & 0xFF # address
|
|
211
|
-
buf[10] = (address >> 8) & 0xFF # address
|
|
212
|
-
buf[11] = address & 0xFF # address (LSB)
|
|
213
|
-
buf[12] = 0x00 # data length (MSB)
|
|
214
|
-
buf[13] = 0x00 # data length
|
|
215
|
-
buf[14] = 0x04 # data length (LSB)
|
|
216
|
-
buf[15] = rmap_crc_check(buf, 0, 15) & 0xFF # header CRC
|
|
217
|
-
buf[16] = data[0]
|
|
218
|
-
buf[17] = data[1]
|
|
219
|
-
buf[18] = data[2]
|
|
220
|
-
buf[19] = data[3]
|
|
221
|
-
buf[20] = rmap_crc_check(buf, 16, 4) & 0xFF # data CRC
|
|
222
|
-
|
|
223
|
-
return bytes(buf)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
def create_rmap_unverified_write_packet(address: int, data: bytes, length: int, tid: int) -> bytes:
|
|
227
|
-
"""
|
|
228
|
-
Create an RMAP packet for a unverified write request on the FEE.
|
|
229
|
-
|
|
230
|
-
Args:
|
|
231
|
-
address: the start memory address on the FEE register map
|
|
232
|
-
data: the data to be written in the register map at address
|
|
233
|
-
length: the length of the data
|
|
234
|
-
tid (int): transaction identifier
|
|
235
|
-
|
|
236
|
-
Returns:
|
|
237
|
-
packet: a bytes object containing the SpaceWire packet.
|
|
238
|
-
"""
|
|
239
|
-
from egse.spw import update_transaction_identifier
|
|
240
|
-
|
|
241
|
-
# We can only handle data for which the length >= the given length argument.
|
|
242
|
-
|
|
243
|
-
if len(data) < length:
|
|
244
|
-
raise ValueError(
|
|
245
|
-
f"The length of the data argument ({len(data)}) is smaller than "
|
|
246
|
-
f"the given length argument ({length})."
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
if len(data) > length:
|
|
250
|
-
_LOGGER.warning(
|
|
251
|
-
f"The length of the data argument ({len(data)}) is larger than "
|
|
252
|
-
f"the given length argument ({length}). The data will be truncated "
|
|
253
|
-
f"when copied into the packet."
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
if address <= CRITICAL_AREA_END:
|
|
257
|
-
raise ValueError(
|
|
258
|
-
f"The given address (0x{address:08X}) is in the range for critical configuration is "
|
|
259
|
-
f"[0x00 - 0xFC]. Use the verified write function for this."
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
tid = update_transaction_identifier(tid)
|
|
263
|
-
|
|
264
|
-
# Buffer length is fixed at 24 bytes since the data length
|
|
265
|
-
# is fixed at 4 bytes (32 bit addressing)
|
|
266
|
-
|
|
267
|
-
buf = bytearray(16 + length + 1)
|
|
268
|
-
offset = 0
|
|
269
|
-
|
|
270
|
-
buf[offset + 0] = 0x51 # Logical Address
|
|
271
|
-
buf[offset + 1] = 0x01 # Protocol ID
|
|
272
|
-
buf[offset + 2] = 0x6C # Instruction
|
|
273
|
-
buf[offset + 3] = 0xD1 # Key
|
|
274
|
-
buf[offset + 4] = 0x50 # Initiator Address
|
|
275
|
-
buf[offset + 5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
276
|
-
buf[offset + 6] = tid & 0xFF # LSB of the Transition ID
|
|
277
|
-
buf[offset + 7] = 0x00 # Extended address
|
|
278
|
-
buf[offset + 8] = (address >> 24) & 0xFF # address (MSB)
|
|
279
|
-
buf[offset + 9] = (address >> 16) & 0xFF # address
|
|
280
|
-
buf[offset + 10] = (address >> 8) & 0xFF # address
|
|
281
|
-
buf[offset + 11] = address & 0xFF # address (LSB)
|
|
282
|
-
buf[offset + 12] = (length >> 16) & 0xFF # data length (MSB)
|
|
283
|
-
buf[offset + 13] = (length >> 8) & 0xFF # data length
|
|
284
|
-
buf[offset + 14] = length & 0xFF # data length (LSB)
|
|
285
|
-
buf[offset + 15] = rmap_crc_check(buf, 0, 15) & 0xFF # header CRC
|
|
286
|
-
|
|
287
|
-
offset += 16
|
|
288
|
-
|
|
289
|
-
for idx, value in enumerate(data):
|
|
290
|
-
buf[offset + idx] = value
|
|
291
|
-
|
|
292
|
-
buf[offset + length] = rmap_crc_check(buf, offset, length) & 0xFF # data CRC
|
|
293
|
-
|
|
294
|
-
return bytes(buf)
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
def create_rmap_write_request_reply_packet(instruction_field: int, tid: int, status: int) -> bytes:
|
|
298
|
-
buf = bytearray(8)
|
|
299
|
-
|
|
300
|
-
buf[0] = 0x50 # Initiator address N-DPU or F-DPU
|
|
301
|
-
buf[1] = 0x01 # RMAP Protocol ID
|
|
302
|
-
buf[2] = instruction_field & 0x3F # Clear the command bit as this is a reply
|
|
303
|
-
buf[3] = status & 0xFF # Status field: 0 on success
|
|
304
|
-
buf[4] = 0x51 # Target address is always the N-FEE or F-FEE
|
|
305
|
-
buf[5] = (tid >> 8) & 0xFF # MSB of the Transition ID
|
|
306
|
-
buf[6] = tid & 0xFF # LSB of the Transition ID
|
|
307
|
-
buf[7] = rmap_crc_check(buf, 0, 7) & 0xFF # Header CRC
|
|
308
|
-
|
|
309
|
-
return bytes(buf)
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
@static_vars(warning_count=0, stride=100)
|
|
313
|
-
def check_address_and_data_length(address: int, length: int, strict: bool = True) -> None:
|
|
314
|
-
"""
|
|
315
|
-
Checks the address and length in the range of memory areas used by the FEE.
|
|
316
|
-
|
|
317
|
-
The ranges are taken from the PLATO-DLR-PL-ICD-0010 N-FEE to N-DPU IRD.
|
|
318
|
-
|
|
319
|
-
Args:
|
|
320
|
-
address (int): the memory address of the FEE Register
|
|
321
|
-
length (int): the number of bytes requested
|
|
322
|
-
strict (bool): strictly apply the rules
|
|
323
|
-
|
|
324
|
-
Raises:
|
|
325
|
-
RMAPError: when address + length fall outside any specified area.
|
|
326
|
-
"""
|
|
327
|
-
|
|
328
|
-
if not strict:
|
|
329
|
-
# All these restrictions have been relaxed on the N-FEE.
|
|
330
|
-
# We are returning here immediately instead of removing or commenting out the code.
|
|
331
|
-
# The reason is that we can then bring back restriction easier and gradually.
|
|
332
|
-
|
|
333
|
-
# A warning is sent out
|
|
334
|
-
|
|
335
|
-
if not check_address_and_data_length.warning_count % check_address_and_data_length.stride:
|
|
336
|
-
check_address_and_data_length.warning_count = 1
|
|
337
|
-
_LOGGER.warning(
|
|
338
|
-
"Address and data length checks have been disabled, because the N-FEE "
|
|
339
|
-
"does not enforce restrictions in the critical memory area.")
|
|
340
|
-
|
|
341
|
-
check_address_and_data_length.warning_count += 1
|
|
342
|
-
|
|
343
|
-
return
|
|
344
|
-
|
|
345
|
-
if length % 4:
|
|
346
|
-
raise RMAPError(
|
|
347
|
-
"The requested data length shall be a multiple of 4 bytes.", address, length
|
|
348
|
-
)
|
|
349
|
-
|
|
350
|
-
if address % 4:
|
|
351
|
-
raise RMAPError("The address shall be a multiple of 4 bytes.", address, length)
|
|
352
|
-
|
|
353
|
-
# Note that when checking the given data length, at the defined area end,
|
|
354
|
-
# we can still read 4 bytes.
|
|
355
|
-
|
|
356
|
-
if CRITICAL_AREA_START <= address <= CRITICAL_AREA_END:
|
|
357
|
-
if length != 4:
|
|
358
|
-
raise RMAPError(
|
|
359
|
-
"Read requests to the critical area have a fixed data length of 4 bytes.",
|
|
360
|
-
address, length
|
|
361
|
-
)
|
|
362
|
-
elif GENERAL_AREA_START <= address <= GENERAL_AREA_END:
|
|
363
|
-
if length > 256:
|
|
364
|
-
raise RMAPError(
|
|
365
|
-
"Read requests to the general area have a maximum data length of 256 bytes.",
|
|
366
|
-
address, length
|
|
367
|
-
)
|
|
368
|
-
if address + length > GENERAL_AREA_END + 4:
|
|
369
|
-
raise RMAPError(
|
|
370
|
-
"The requested data length for the general area is too large. "
|
|
371
|
-
"The address + length exceeds the general area boundaries.",
|
|
372
|
-
address, length
|
|
373
|
-
)
|
|
374
|
-
|
|
375
|
-
elif HK_AREA_START <= address <= HK_AREA_END:
|
|
376
|
-
if length > 256:
|
|
377
|
-
raise RMAPError(
|
|
378
|
-
"Read requests to the housekeeping area have a maximum data length of 256 bytes.",
|
|
379
|
-
address, length
|
|
380
|
-
)
|
|
381
|
-
if address + length > HK_AREA_END + 4:
|
|
382
|
-
raise RMAPError(
|
|
383
|
-
"The requested data length for the housekeeping area is too large. "
|
|
384
|
-
"The address + length exceeds the housekeeping area boundaries.",
|
|
385
|
-
address, length
|
|
386
|
-
)
|
|
387
|
-
|
|
388
|
-
elif WINDOWING_AREA_START <= address <= WINDOWING_AREA_END:
|
|
389
|
-
if length > 4096:
|
|
390
|
-
raise RMAPError(
|
|
391
|
-
"Read requests to the windowing area have a maximum data length of 4096 bytes.",
|
|
392
|
-
address, length
|
|
393
|
-
)
|
|
394
|
-
if address + length > WINDOWING_AREA_END + 4:
|
|
395
|
-
raise RMAPError(
|
|
396
|
-
"The requested data length for the windowing area is too large. "
|
|
397
|
-
"The address + length exceeds the windowing area boundaries.", address, length
|
|
398
|
-
)
|
|
399
|
-
|
|
400
|
-
else:
|
|
401
|
-
raise RMAPError("Register address for RMAP read requests is invalid.", address, length)
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
def rmap_crc_check(data, start, length) -> int:
|
|
405
|
-
"""Calculate the checksum for the given data."""
|
|
406
|
-
return crc_calc(data, start, length)
|
egse/rst.py
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import yaml
|
|
2
|
-
import logging
|
|
3
|
-
import inspect
|
|
4
|
-
import textwrap
|
|
5
|
-
|
|
6
|
-
module_logger = logging.getLogger(__name__)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def create_args_list(cmd):
|
|
10
|
-
s = ""
|
|
11
|
-
if 'args' not in cmd:
|
|
12
|
-
return s
|
|
13
|
-
for arg_name in cmd['args'].keys():
|
|
14
|
-
s += f"{arg_name}, "
|
|
15
|
-
if 'kwargs' not in cmd:
|
|
16
|
-
return s[:-2]
|
|
17
|
-
for arg_name in cmd['kwargs'].keys():
|
|
18
|
-
s += f"{arg_name}={cmd['kwargs'][arg_name].split('|')[1].strip()}, "
|
|
19
|
-
return s[:-2]
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def handle_description(d):
|
|
23
|
-
s = textwrap.indent(inspect.cleandoc(d), " ")
|
|
24
|
-
return s + "\n\n"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def handle_args(d):
|
|
28
|
-
s = ""
|
|
29
|
-
for arg_name in d:
|
|
30
|
-
arg_type, arg_desc = [x.strip() for x in d[arg_name].split('|', 1)]
|
|
31
|
-
s += f" :param {arg_type} {arg_name}: {arg_desc}\n"
|
|
32
|
-
return s + "\n\n"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def handle_kwargs(d):
|
|
36
|
-
s = ""
|
|
37
|
-
for arg_name in d:
|
|
38
|
-
arg_type, arg_default, arg_desc = [x.strip() for x in d[arg_name].split('|', 2)]
|
|
39
|
-
s += f" :param {arg_type} {arg_name}: {arg_desc} [default: {arg_default}]"
|
|
40
|
-
return s + "\n\n"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def handle_returns(d):
|
|
44
|
-
s = ""
|
|
45
|
-
if d == "None":
|
|
46
|
-
return s
|
|
47
|
-
return_type, return_desc = [x.strip() for x in d.split('|', 2)]
|
|
48
|
-
s += f" :returns: (*{return_type}*) {return_desc}\n"
|
|
49
|
-
# s += f" :rtype: {return_type}\n"
|
|
50
|
-
return s + "\n"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def handle_todos(d):
|
|
54
|
-
return f" .. todo:: {d}\n\n"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def handle_notes(d):
|
|
58
|
-
return f" .. note:: {d}\n\n"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def handle_class_description(d):
|
|
62
|
-
s = textwrap.indent(inspect.cleandoc(d), " ")
|
|
63
|
-
return s + "\n\n"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
class RSTError(Exception):
|
|
67
|
-
pass
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
class ReStructuredText(object):
|
|
71
|
-
"""
|
|
72
|
-
.. todo:: implement proper indentation though a instance variable or something
|
|
73
|
-
.. todo:: there should also be overall class documentation loaded from the YAML file
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
def __init__(self):
|
|
77
|
-
pass
|
|
78
|
-
|
|
79
|
-
def _read_yaml(self, filename):
|
|
80
|
-
with open(filename, 'r') as stream:
|
|
81
|
-
try:
|
|
82
|
-
yaml_document = yaml.load(stream)
|
|
83
|
-
except yaml.YAMLError as exc:
|
|
84
|
-
module_logger.error(exc)
|
|
85
|
-
raise RSTError(f"Error loading YAML document {filename}") from exc
|
|
86
|
-
return yaml_document
|
|
87
|
-
|
|
88
|
-
def create_auto_class_from_yaml(self, yaml_file):
|
|
89
|
-
|
|
90
|
-
yaml_document = self._read_yaml(yaml_file)
|
|
91
|
-
|
|
92
|
-
class_name = yaml_document['ProxyClass']
|
|
93
|
-
|
|
94
|
-
rst_msg = f".. class:: {class_name}\n\n"
|
|
95
|
-
|
|
96
|
-
if 'ClassDescription' in yaml_document:
|
|
97
|
-
rst_msg += handle_class_description(yaml_document['ClassDescription'])
|
|
98
|
-
|
|
99
|
-
cmd_tag = "Commands"
|
|
100
|
-
|
|
101
|
-
for cmd in yaml_document[cmd_tag]:
|
|
102
|
-
rst_msg += self.create_command(yaml_document[cmd_tag], cmd)
|
|
103
|
-
rst_msg += "\n"
|
|
104
|
-
|
|
105
|
-
return rst_msg
|
|
106
|
-
|
|
107
|
-
def create_command(self, d, cmd):
|
|
108
|
-
|
|
109
|
-
rst_msg = f" .. method:: {cmd}({create_args_list(d[cmd])})\n\n"
|
|
110
|
-
|
|
111
|
-
d = d[cmd]
|
|
112
|
-
|
|
113
|
-
if 'description' in d:
|
|
114
|
-
rst_msg += handle_description(d['description'])
|
|
115
|
-
|
|
116
|
-
if 'args' in d:
|
|
117
|
-
rst_msg += handle_args(d['args'])
|
|
118
|
-
|
|
119
|
-
if 'kwargs' in d:
|
|
120
|
-
rst_msg += handle_kwargs(d['kwargs'])
|
|
121
|
-
|
|
122
|
-
if 'returns' in d:
|
|
123
|
-
rst_msg += handle_returns(d['returns'])
|
|
124
|
-
|
|
125
|
-
if 'todo' in d:
|
|
126
|
-
rst_msg += handle_todos(d['todo'])
|
|
127
|
-
|
|
128
|
-
if 'note' in d:
|
|
129
|
-
rst_msg += handle_notes(d['note'])
|
|
130
|
-
|
|
131
|
-
return rst_msg
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if __name__ == "__main__":
|
|
135
|
-
pass
|