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.
Files changed (664) hide show
  1. README.md +27 -0
  2. bump.py +85 -0
  3. cgse-2025.0.2.dist-info/METADATA +38 -0
  4. cgse-2025.0.2.dist-info/RECORD +5 -0
  5. {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
  6. cgse-2024.7.0.dist-info/COPYING +0 -674
  7. cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
  8. cgse-2024.7.0.dist-info/METADATA +0 -144
  9. cgse-2024.7.0.dist-info/RECORD +0 -660
  10. cgse-2024.7.0.dist-info/entry_points.txt +0 -75
  11. cgse-2024.7.0.dist-info/top_level.txt +0 -2
  12. egse/__init__.py +0 -12
  13. egse/__main__.py +0 -32
  14. egse/aeu/aeu.py +0 -5238
  15. egse/aeu/aeu_awg.yaml +0 -265
  16. egse/aeu/aeu_crio.yaml +0 -273
  17. egse/aeu/aeu_cs.py +0 -627
  18. egse/aeu/aeu_devif.py +0 -321
  19. egse/aeu/aeu_main_ui.py +0 -903
  20. egse/aeu/aeu_metrics.py +0 -131
  21. egse/aeu/aeu_protocol.py +0 -463
  22. egse/aeu/aeu_psu.yaml +0 -204
  23. egse/aeu/aeu_ui.py +0 -873
  24. egse/aeu/arbdata/FccdRead.arb +0 -2
  25. egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
  26. egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
  27. egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
  28. egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
  29. egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
  30. egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
  31. egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
  32. egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
  33. egse/aeu/arbdata/ccdRead25.arb +0 -2
  34. egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
  35. egse/aeu/arbdata/ccdRead31_25.arb +0 -2
  36. egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
  37. egse/aeu/arbdata/ccdRead37_50.arb +0 -2
  38. egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
  39. egse/aeu/arbdata/ccdRead43_75.arb +0 -2
  40. egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
  41. egse/aeu/arbdata/ccdRead50.arb +0 -2
  42. egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
  43. egse/alert/__init__.py +0 -1049
  44. egse/alert/alertman.yaml +0 -37
  45. egse/alert/alertman_cs.py +0 -233
  46. egse/alert/alertman_ui.py +0 -600
  47. egse/alert/gsm/beaglebone.py +0 -138
  48. egse/alert/gsm/beaglebone.yaml +0 -51
  49. egse/alert/gsm/beaglebone_cs.py +0 -108
  50. egse/alert/gsm/beaglebone_devif.py +0 -122
  51. egse/alert/gsm/beaglebone_protocol.py +0 -46
  52. egse/bits.py +0 -318
  53. egse/camera.py +0 -44
  54. egse/collimator/__init__.py +0 -0
  55. egse/collimator/fcul/__init__.py +0 -0
  56. egse/collimator/fcul/ogse.py +0 -1077
  57. egse/collimator/fcul/ogse.yaml +0 -14
  58. egse/collimator/fcul/ogse_cs.py +0 -154
  59. egse/collimator/fcul/ogse_devif.py +0 -358
  60. egse/collimator/fcul/ogse_protocol.py +0 -132
  61. egse/collimator/fcul/ogse_sim.py +0 -431
  62. egse/collimator/fcul/ogse_ui.py +0 -1108
  63. egse/command.py +0 -699
  64. egse/config.py +0 -410
  65. egse/confman/__init__.py +0 -1058
  66. egse/confman/confman.yaml +0 -70
  67. egse/confman/confman_cs.py +0 -240
  68. egse/confman/confman_ui.py +0 -381
  69. egse/confman/setup_ui.py +0 -565
  70. egse/control.py +0 -632
  71. egse/coordinates/__init__.py +0 -534
  72. egse/coordinates/avoidance.py +0 -100
  73. egse/coordinates/cslmodel.py +0 -127
  74. egse/coordinates/laser_tracker_to_dict.py +0 -122
  75. egse/coordinates/point.py +0 -707
  76. egse/coordinates/pyplot.py +0 -194
  77. egse/coordinates/referenceFrame.py +0 -1279
  78. egse/coordinates/refmodel.py +0 -737
  79. egse/coordinates/rotationMatrix.py +0 -85
  80. egse/coordinates/transform3d_addon.py +0 -419
  81. egse/csl/__init__.py +0 -50
  82. egse/csl/commanding.py +0 -78
  83. egse/csl/icons/hexapod-connected-selected.svg +0 -30
  84. egse/csl/icons/hexapod-connected.svg +0 -30
  85. egse/csl/icons/hexapod-homing-selected.svg +0 -68
  86. egse/csl/icons/hexapod-homing.svg +0 -68
  87. egse/csl/icons/hexapod-retract-selected.svg +0 -56
  88. egse/csl/icons/hexapod-retract.svg +0 -51
  89. egse/csl/icons/hexapod-zero-selected.svg +0 -56
  90. egse/csl/icons/hexapod-zero.svg +0 -56
  91. egse/csl/icons/logo-puna.svg +0 -92
  92. egse/csl/icons/stop.svg +0 -1
  93. egse/csl/initialisation.py +0 -102
  94. egse/csl/mech_pos_settings.yaml +0 -18
  95. egse/das.py +0 -1240
  96. egse/das.yaml +0 -7
  97. egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
  98. egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
  99. egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
  100. egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
  101. egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
  102. egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
  103. egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
  104. egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
  105. egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
  106. egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
  107. egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
  108. egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
  109. egse/decorators.py +0 -514
  110. egse/device.py +0 -269
  111. egse/dpu/__init__.py +0 -2698
  112. egse/dpu/ccd_ui.py +0 -514
  113. egse/dpu/dpu.py +0 -783
  114. egse/dpu/dpu.yaml +0 -153
  115. egse/dpu/dpu_cs.py +0 -272
  116. egse/dpu/dpu_ui.py +0 -671
  117. egse/dpu/fitsgen.py +0 -2096
  118. egse/dpu/fitsgen_ui.py +0 -399
  119. egse/dpu/hdf5_model.py +0 -332
  120. egse/dpu/hdf5_ui.py +0 -277
  121. egse/dpu/hdf5_viewer.py +0 -506
  122. egse/dpu/hk_ui.py +0 -468
  123. egse/dpu_commands.py +0 -81
  124. egse/dsi/__init__.py +0 -33
  125. egse/dsi/_libesl.py +0 -232
  126. egse/dsi/constants.py +0 -296
  127. egse/dsi/esl.py +0 -630
  128. egse/dsi/rmap.py +0 -444
  129. egse/dsi/rmapci.py +0 -39
  130. egse/dsi/spw.py +0 -335
  131. egse/dsi/spw_state.py +0 -29
  132. egse/dummy.py +0 -318
  133. egse/dyndummy.py +0 -179
  134. egse/env.py +0 -278
  135. egse/exceptions.py +0 -88
  136. egse/fdir/__init__.py +0 -26
  137. egse/fdir/fdir_manager.py +0 -85
  138. egse/fdir/fdir_manager.yaml +0 -37
  139. egse/fdir/fdir_manager_controller.py +0 -136
  140. egse/fdir/fdir_manager_cs.py +0 -164
  141. egse/fdir/fdir_manager_interface.py +0 -15
  142. egse/fdir/fdir_remote.py +0 -73
  143. egse/fdir/fdir_remote.yaml +0 -30
  144. egse/fdir/fdir_remote_controller.py +0 -30
  145. egse/fdir/fdir_remote_cs.py +0 -94
  146. egse/fdir/fdir_remote_interface.py +0 -9
  147. egse/fdir/fdir_remote_popup.py +0 -26
  148. egse/fee/__init__.py +0 -106
  149. egse/fee/f_fee_register.yaml +0 -43
  150. egse/fee/feesim.py +0 -914
  151. egse/fee/n_fee_hk.py +0 -768
  152. egse/fee/nfee.py +0 -188
  153. egse/filterwheel/__init__.py +0 -4
  154. egse/filterwheel/eksma/__init__.py +0 -49
  155. egse/filterwheel/eksma/fw8smc4.py +0 -657
  156. egse/filterwheel/eksma/fw8smc4.yaml +0 -121
  157. egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
  158. egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
  159. egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
  160. egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
  161. egse/filterwheel/eksma/fw8smc5.py +0 -115
  162. egse/filterwheel/eksma/fw8smc5.yaml +0 -105
  163. egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
  164. egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
  165. egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
  166. egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
  167. egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
  168. egse/filterwheel/eksma/testpythonfw.py +0 -215
  169. egse/fov/__init__.py +0 -65
  170. egse/fov/fov_hk.py +0 -710
  171. egse/fov/fov_ui.py +0 -859
  172. egse/fov/fov_ui_controller.py +0 -140
  173. egse/fov/fov_ui_model.py +0 -200
  174. egse/fov/fov_ui_view.py +0 -345
  175. egse/gimbal/__init__.py +0 -32
  176. egse/gimbal/symetrie/__init__.py +0 -26
  177. egse/gimbal/symetrie/alpha.py +0 -586
  178. egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
  179. egse/gimbal/symetrie/gimbal.py +0 -877
  180. egse/gimbal/symetrie/gimbal.yaml +0 -168
  181. egse/gimbal/symetrie/gimbal_cs.py +0 -183
  182. egse/gimbal/symetrie/gimbal_protocol.py +0 -138
  183. egse/gimbal/symetrie/gimbal_ui.py +0 -361
  184. egse/gimbal/symetrie/pmac.py +0 -1006
  185. egse/gimbal/symetrie/pmac_regex.py +0 -83
  186. egse/graph.py +0 -132
  187. egse/gui/__init__.py +0 -47
  188. egse/gui/buttons.py +0 -378
  189. egse/gui/focalplane.py +0 -1285
  190. egse/gui/formatter.py +0 -10
  191. egse/gui/led.py +0 -162
  192. egse/gui/limitswitch.py +0 -143
  193. egse/gui/mechanisms.py +0 -587
  194. egse/gui/states.py +0 -148
  195. egse/gui/stripchart.py +0 -729
  196. egse/gui/styles.qss +0 -48
  197. egse/gui/switch.py +0 -112
  198. egse/h5.py +0 -274
  199. egse/help/__init__.py +0 -0
  200. egse/help/help_ui.py +0 -126
  201. egse/hexapod/__init__.py +0 -32
  202. egse/hexapod/symetrie/__init__.py +0 -137
  203. egse/hexapod/symetrie/alpha.py +0 -874
  204. egse/hexapod/symetrie/dynalpha.py +0 -1387
  205. egse/hexapod/symetrie/hexapod_ui.py +0 -1516
  206. egse/hexapod/symetrie/pmac.py +0 -1010
  207. egse/hexapod/symetrie/pmac_regex.py +0 -83
  208. egse/hexapod/symetrie/puna.py +0 -1167
  209. egse/hexapod/symetrie/puna.yaml +0 -193
  210. egse/hexapod/symetrie/puna_cs.py +0 -195
  211. egse/hexapod/symetrie/puna_protocol.py +0 -134
  212. egse/hexapod/symetrie/puna_ui.py +0 -433
  213. egse/hexapod/symetrie/punaplus.py +0 -107
  214. egse/hexapod/symetrie/zonda.py +0 -872
  215. egse/hexapod/symetrie/zonda.yaml +0 -337
  216. egse/hexapod/symetrie/zonda_cs.py +0 -172
  217. egse/hexapod/symetrie/zonda_devif.py +0 -414
  218. egse/hexapod/symetrie/zonda_protocol.py +0 -123
  219. egse/hexapod/symetrie/zonda_ui.py +0 -449
  220. egse/hk.py +0 -791
  221. egse/icons/aeu-cs-start.svg +0 -117
  222. egse/icons/aeu-cs-stop.svg +0 -118
  223. egse/icons/aeu-cs.svg +0 -107
  224. egse/icons/aeu_cs-started.svg +0 -112
  225. egse/icons/aeu_cs-stopped.svg +0 -112
  226. egse/icons/aeu_cs.svg +0 -55
  227. egse/icons/alert.svg +0 -1
  228. egse/icons/arrow-double-left.png +0 -0
  229. egse/icons/arrow-double-right.png +0 -0
  230. egse/icons/arrow-up.svg +0 -11
  231. egse/icons/backward.svg +0 -1
  232. egse/icons/busy.svg +0 -1
  233. egse/icons/cleaning.svg +0 -115
  234. egse/icons/color-scheme.svg +0 -1
  235. egse/icons/cs-connected-alert.svg +0 -91
  236. egse/icons/cs-connected-disabled.svg +0 -43
  237. egse/icons/cs-connected.svg +0 -89
  238. egse/icons/cs-not-connected.svg +0 -44
  239. egse/icons/double-left-arrow.svg +0 -1
  240. egse/icons/double-right-arrow.svg +0 -1
  241. egse/icons/erase-disabled.svg +0 -19
  242. egse/icons/erase.svg +0 -59
  243. egse/icons/fitsgen-start.svg +0 -47
  244. egse/icons/fitsgen-stop.svg +0 -48
  245. egse/icons/fitsgen.svg +0 -1
  246. egse/icons/forward.svg +0 -1
  247. egse/icons/fov-hk-start.svg +0 -33
  248. egse/icons/fov-hk-stop.svg +0 -37
  249. egse/icons/fov-hk.svg +0 -1
  250. egse/icons/front-desk.svg +0 -1
  251. egse/icons/home-actioned.svg +0 -15
  252. egse/icons/home-disabled.svg +0 -15
  253. egse/icons/home.svg +0 -13
  254. egse/icons/info.svg +0 -1
  255. egse/icons/invalid.png +0 -0
  256. egse/icons/led-green.svg +0 -20
  257. egse/icons/led-grey.svg +0 -20
  258. egse/icons/led-orange.svg +0 -20
  259. egse/icons/led-red.svg +0 -20
  260. egse/icons/led-square-green.svg +0 -134
  261. egse/icons/led-square-grey.svg +0 -134
  262. egse/icons/led-square-orange.svg +0 -134
  263. egse/icons/led-square-red.svg +0 -134
  264. egse/icons/limit-switch-all-green.svg +0 -115
  265. egse/icons/limit-switch-all-red.svg +0 -117
  266. egse/icons/limit-switch-el+.svg +0 -116
  267. egse/icons/limit-switch-el-.svg +0 -117
  268. egse/icons/location-marker.svg +0 -1
  269. egse/icons/logo-dpu.svg +0 -48
  270. egse/icons/logo-gimbal.svg +0 -112
  271. egse/icons/logo-huber.svg +0 -23
  272. egse/icons/logo-ogse.svg +0 -31
  273. egse/icons/logo-puna.svg +0 -92
  274. egse/icons/logo-tcs.svg +0 -29
  275. egse/icons/logo-zonda.svg +0 -66
  276. egse/icons/maximize.svg +0 -1
  277. egse/icons/meter.svg +0 -1
  278. egse/icons/more.svg +0 -45
  279. egse/icons/n-fee-hk-start.svg +0 -24
  280. egse/icons/n-fee-hk-stop.svg +0 -25
  281. egse/icons/n-fee-hk.svg +0 -83
  282. egse/icons/observing-off.svg +0 -46
  283. egse/icons/observing-on.svg +0 -46
  284. egse/icons/open-document-hdf5.png +0 -0
  285. egse/icons/open-document-hdf5.svg +0 -21
  286. egse/icons/ops-mode.svg +0 -1
  287. egse/icons/play-green.svg +0 -17
  288. egse/icons/plugged-disabled.svg +0 -27
  289. egse/icons/plugged.svg +0 -21
  290. egse/icons/pm_ui.svg +0 -1
  291. egse/icons/power-button-green.svg +0 -27
  292. egse/icons/power-button-red.svg +0 -27
  293. egse/icons/power-button.svg +0 -27
  294. egse/icons/radar.svg +0 -1
  295. egse/icons/radioactive.svg +0 -2
  296. egse/icons/reload.svg +0 -1
  297. egse/icons/remote-control-off.svg +0 -28
  298. egse/icons/remote-control-on.svg +0 -28
  299. egse/icons/repeat-blue.svg +0 -15
  300. egse/icons/repeat.svg +0 -1
  301. egse/icons/settings.svg +0 -1
  302. egse/icons/shrink.svg +0 -1
  303. egse/icons/shutter.svg +0 -1
  304. egse/icons/sign-off.svg +0 -1
  305. egse/icons/sign-on.svg +0 -1
  306. egse/icons/sim-mode.svg +0 -1
  307. egse/icons/small-buttons-go.svg +0 -20
  308. egse/icons/small-buttons-minus.svg +0 -51
  309. egse/icons/small-buttons-plus.svg +0 -51
  310. egse/icons/sponge.svg +0 -220
  311. egse/icons/start-button-disabled.svg +0 -84
  312. egse/icons/start-button.svg +0 -50
  313. egse/icons/stop-button-disabled.svg +0 -84
  314. egse/icons/stop-button.svg +0 -50
  315. egse/icons/stop-red.svg +0 -17
  316. egse/icons/stop.svg +0 -1
  317. egse/icons/switch-disabled-square.svg +0 -87
  318. egse/icons/switch-disabled.svg +0 -15
  319. egse/icons/switch-off-square.svg +0 -87
  320. egse/icons/switch-off.svg +0 -72
  321. egse/icons/switch-on-square.svg +0 -87
  322. egse/icons/switch-on.svg +0 -61
  323. egse/icons/temperature-control.svg +0 -44
  324. egse/icons/th_ui_logo.svg +0 -1
  325. egse/icons/unplugged.svg +0 -23
  326. egse/icons/unvalid.png +0 -0
  327. egse/icons/user-interface.svg +0 -1
  328. egse/icons/vacuum.svg +0 -1
  329. egse/icons/valid.png +0 -0
  330. egse/icons/zoom-to-pixel-dark.svg +0 -64
  331. egse/icons/zoom-to-pixel-white.svg +0 -36
  332. egse/images/big-rotation-stage.png +0 -0
  333. egse/images/connected-100.png +0 -0
  334. egse/images/cross.svg +0 -6
  335. egse/images/disconnected-100.png +0 -0
  336. egse/images/gui-icon.png +0 -0
  337. egse/images/home.svg +0 -6
  338. egse/images/info-icon.png +0 -0
  339. egse/images/led-black.svg +0 -89
  340. egse/images/led-green.svg +0 -85
  341. egse/images/led-orange.svg +0 -85
  342. egse/images/led-red.svg +0 -85
  343. egse/images/load-icon.png +0 -0
  344. egse/images/load-setup.png +0 -0
  345. egse/images/load.png +0 -0
  346. egse/images/pause.png +0 -0
  347. egse/images/play-button.svg +0 -8
  348. egse/images/play.png +0 -0
  349. egse/images/process-status.png +0 -0
  350. egse/images/restart.png +0 -0
  351. egse/images/search.png +0 -0
  352. egse/images/sma.png +0 -0
  353. egse/images/start.png +0 -0
  354. egse/images/stop-button.svg +0 -8
  355. egse/images/stop.png +0 -0
  356. egse/images/switch-off.svg +0 -48
  357. egse/images/switch-on.svg +0 -48
  358. egse/images/undo.png +0 -0
  359. egse/images/update-button.svg +0 -11
  360. egse/imageviewer/exposureselection.py +0 -475
  361. egse/imageviewer/imageviewer.py +0 -198
  362. egse/imageviewer/matchfocalplane.py +0 -179
  363. egse/imageviewer/subfieldposition.py +0 -133
  364. egse/lampcontrol/__init__.py +0 -4
  365. egse/lampcontrol/beaglebone/beaglebone.py +0 -178
  366. egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
  367. egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
  368. egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
  369. egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
  370. egse/lampcontrol/energetiq/__init__.py +0 -22
  371. egse/lampcontrol/energetiq/eq99.yaml +0 -98
  372. egse/lampcontrol/energetiq/lampEQ99.py +0 -283
  373. egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
  374. egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
  375. egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
  376. egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
  377. egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
  378. egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
  379. egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
  380. egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
  381. egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
  382. egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
  383. egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
  384. egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
  385. egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
  386. egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
  387. egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
  388. egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
  389. egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
  390. egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
  391. egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
  392. egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
  393. egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
  394. egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
  395. egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
  396. egse/lib/ximc/libximc.framework/libbindy.so +0 -0
  397. egse/lib/ximc/libximc.framework/libximc +0 -0
  398. egse/lib/ximc/libximc.framework/libximc.so +0 -0
  399. egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
  400. egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
  401. egse/lib/ximc/pyximc.py +0 -922
  402. egse/listener.py +0 -179
  403. egse/logger/__init__.py +0 -243
  404. egse/logger/log_cs.py +0 -321
  405. egse/metrics.py +0 -102
  406. egse/mixin.py +0 -464
  407. egse/monitoring.py +0 -95
  408. egse/ni/alarms/__init__.py +0 -26
  409. egse/ni/alarms/cdaq9375.py +0 -300
  410. egse/ni/alarms/cdaq9375.yaml +0 -89
  411. egse/ni/alarms/cdaq9375_cs.py +0 -130
  412. egse/ni/alarms/cdaq9375_devif.py +0 -183
  413. egse/ni/alarms/cdaq9375_protocol.py +0 -48
  414. egse/obs_inspection.py +0 -165
  415. egse/observer.py +0 -41
  416. egse/obsid.py +0 -163
  417. egse/powermeter/__init__.py +0 -0
  418. egse/powermeter/ni/__init__.py +0 -38
  419. egse/powermeter/ni/cdaq9184.py +0 -224
  420. egse/powermeter/ni/cdaq9184.yaml +0 -73
  421. egse/powermeter/ni/cdaq9184_cs.py +0 -130
  422. egse/powermeter/ni/cdaq9184_devif.py +0 -201
  423. egse/powermeter/ni/cdaq9184_protocol.py +0 -48
  424. egse/powermeter/ni/cdaq9184_ui.py +0 -544
  425. egse/powermeter/thorlabs/__init__.py +0 -25
  426. egse/powermeter/thorlabs/pm100a.py +0 -380
  427. egse/powermeter/thorlabs/pm100a.yaml +0 -132
  428. egse/powermeter/thorlabs/pm100a_cs.py +0 -136
  429. egse/powermeter/thorlabs/pm100a_devif.py +0 -127
  430. egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
  431. egse/powermeter/thorlabs/pm100a_ui.py +0 -725
  432. egse/process.py +0 -451
  433. egse/procman/__init__.py +0 -834
  434. egse/procman/cannot_start_process_popup.py +0 -43
  435. egse/procman/procman.yaml +0 -49
  436. egse/procman/procman_cs.py +0 -201
  437. egse/procman/procman_ui.py +0 -2081
  438. egse/protocol.py +0 -605
  439. egse/proxy.py +0 -531
  440. egse/randomwalk.py +0 -140
  441. egse/reg.py +0 -585
  442. egse/reload.py +0 -122
  443. egse/reprocess.py +0 -693
  444. egse/resource.py +0 -333
  445. egse/rmap.py +0 -406
  446. egse/rst.py +0 -135
  447. egse/search.py +0 -182
  448. egse/serialdevice.py +0 -190
  449. egse/services.py +0 -247
  450. egse/services.yaml +0 -68
  451. egse/settings.py +0 -379
  452. egse/settings.yaml +0 -980
  453. egse/setup.py +0 -1181
  454. egse/shutter/__init__.py +0 -0
  455. egse/shutter/thorlabs/__init__.py +0 -19
  456. egse/shutter/thorlabs/ksc101.py +0 -205
  457. egse/shutter/thorlabs/ksc101.yaml +0 -105
  458. egse/shutter/thorlabs/ksc101_cs.py +0 -136
  459. egse/shutter/thorlabs/ksc101_devif.py +0 -201
  460. egse/shutter/thorlabs/ksc101_protocol.py +0 -71
  461. egse/shutter/thorlabs/ksc101_ui.py +0 -548
  462. egse/shutter/thorlabs/sc10.py +0 -82
  463. egse/shutter/thorlabs/sc10.yaml +0 -52
  464. egse/shutter/thorlabs/sc10_controller.py +0 -81
  465. egse/shutter/thorlabs/sc10_cs.py +0 -108
  466. egse/shutter/thorlabs/sc10_interface.py +0 -25
  467. egse/shutter/thorlabs/sc10_simulator.py +0 -30
  468. egse/simulator.py +0 -41
  469. egse/slack.py +0 -61
  470. egse/socketdevice.py +0 -218
  471. egse/sockets.py +0 -218
  472. egse/spw.py +0 -1401
  473. egse/stages/__init__.py +0 -12
  474. egse/stages/aerotech/ensemble.py +0 -245
  475. egse/stages/aerotech/ensemble.yaml +0 -205
  476. egse/stages/aerotech/ensemble_controller.py +0 -275
  477. egse/stages/aerotech/ensemble_cs.py +0 -110
  478. egse/stages/aerotech/ensemble_interface.py +0 -132
  479. egse/stages/aerotech/ensemble_parameters.py +0 -433
  480. egse/stages/aerotech/ensemble_simulator.py +0 -27
  481. egse/stages/aerotech/mgse_sim.py +0 -188
  482. egse/stages/arun/smd3.py +0 -110
  483. egse/stages/arun/smd3.yaml +0 -68
  484. egse/stages/arun/smd3_controller.py +0 -470
  485. egse/stages/arun/smd3_cs.py +0 -112
  486. egse/stages/arun/smd3_interface.py +0 -53
  487. egse/stages/arun/smd3_simulator.py +0 -27
  488. egse/stages/arun/smd3_stop.py +0 -16
  489. egse/stages/huber/__init__.py +0 -49
  490. egse/stages/huber/smc9300.py +0 -920
  491. egse/stages/huber/smc9300.yaml +0 -63
  492. egse/stages/huber/smc9300_cs.py +0 -178
  493. egse/stages/huber/smc9300_devif.py +0 -345
  494. egse/stages/huber/smc9300_protocol.py +0 -113
  495. egse/stages/huber/smc9300_sim.py +0 -547
  496. egse/stages/huber/smc9300_ui.py +0 -973
  497. egse/state.py +0 -173
  498. egse/statemachine.py +0 -274
  499. egse/storage/__init__.py +0 -1067
  500. egse/storage/persistence.py +0 -2295
  501. egse/storage/storage.yaml +0 -79
  502. egse/storage/storage_cs.py +0 -231
  503. egse/styles/dark.qss +0 -343
  504. egse/styles/default.qss +0 -48
  505. egse/synoptics/__init__.py +0 -417
  506. egse/synoptics/syn.yaml +0 -9
  507. egse/synoptics/syn_cs.py +0 -195
  508. egse/system.py +0 -1611
  509. egse/tcs/__init__.py +0 -14
  510. egse/tcs/tcs.py +0 -879
  511. egse/tcs/tcs.yaml +0 -14
  512. egse/tcs/tcs_cs.py +0 -202
  513. egse/tcs/tcs_devif.py +0 -292
  514. egse/tcs/tcs_protocol.py +0 -180
  515. egse/tcs/tcs_sim.py +0 -177
  516. egse/tcs/tcs_ui.py +0 -543
  517. egse/tdms.py +0 -171
  518. egse/tempcontrol/__init__.py +0 -23
  519. egse/tempcontrol/agilent/agilent34970.py +0 -109
  520. egse/tempcontrol/agilent/agilent34970.yaml +0 -44
  521. egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
  522. egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
  523. egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
  524. egse/tempcontrol/agilent/agilent34972.py +0 -111
  525. egse/tempcontrol/agilent/agilent34972.yaml +0 -44
  526. egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
  527. egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
  528. egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
  529. egse/tempcontrol/beaglebone/beaglebone.py +0 -341
  530. egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
  531. egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
  532. egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
  533. egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
  534. egse/tempcontrol/digalox/digalox.py +0 -115
  535. egse/tempcontrol/digalox/digalox.yaml +0 -36
  536. egse/tempcontrol/digalox/digalox_cs.py +0 -108
  537. egse/tempcontrol/digalox/digalox_protocol.py +0 -56
  538. egse/tempcontrol/keithley/__init__.py +0 -33
  539. egse/tempcontrol/keithley/daq6510.py +0 -662
  540. egse/tempcontrol/keithley/daq6510.yaml +0 -105
  541. egse/tempcontrol/keithley/daq6510_cs.py +0 -163
  542. egse/tempcontrol/keithley/daq6510_devif.py +0 -343
  543. egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
  544. egse/tempcontrol/keithley/daq6510_sim.py +0 -186
  545. egse/tempcontrol/lakeshore/__init__.py +0 -33
  546. egse/tempcontrol/lakeshore/lsci.py +0 -361
  547. egse/tempcontrol/lakeshore/lsci.yaml +0 -162
  548. egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
  549. egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
  550. egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
  551. egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
  552. egse/tempcontrol/ni/__init__.py +0 -0
  553. egse/tempcontrol/spid/spid.py +0 -109
  554. egse/tempcontrol/spid/spid.yaml +0 -81
  555. egse/tempcontrol/spid/spid_controller.py +0 -279
  556. egse/tempcontrol/spid/spid_cs.py +0 -136
  557. egse/tempcontrol/spid/spid_protocol.py +0 -107
  558. egse/tempcontrol/spid/spid_ui.py +0 -723
  559. egse/tempcontrol/srs/__init__.py +0 -22
  560. egse/tempcontrol/srs/ptc10.py +0 -867
  561. egse/tempcontrol/srs/ptc10.yaml +0 -227
  562. egse/tempcontrol/srs/ptc10_cs.py +0 -128
  563. egse/tempcontrol/srs/ptc10_devif.py +0 -116
  564. egse/tempcontrol/srs/ptc10_protocol.py +0 -39
  565. egse/tempcontrol/srs/ptc10_ui.py +0 -906
  566. egse/ups/apc/apc.py +0 -236
  567. egse/ups/apc/apc.yaml +0 -45
  568. egse/ups/apc/apc_cs.py +0 -101
  569. egse/ups/apc/apc_protocol.py +0 -125
  570. egse/user.yaml +0 -7
  571. egse/vacuum/beaglebone/beaglebone.py +0 -149
  572. egse/vacuum/beaglebone/beaglebone.yaml +0 -44
  573. egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
  574. egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
  575. egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
  576. egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
  577. egse/vacuum/instrutech/igm402.py +0 -91
  578. egse/vacuum/instrutech/igm402.yaml +0 -90
  579. egse/vacuum/instrutech/igm402_controller.py +0 -124
  580. egse/vacuum/instrutech/igm402_cs.py +0 -108
  581. egse/vacuum/instrutech/igm402_interface.py +0 -49
  582. egse/vacuum/instrutech/igm402_simulator.py +0 -36
  583. egse/vacuum/keller/kellerBus.py +0 -256
  584. egse/vacuum/keller/leo3.py +0 -100
  585. egse/vacuum/keller/leo3.yaml +0 -38
  586. egse/vacuum/keller/leo3_controller.py +0 -81
  587. egse/vacuum/keller/leo3_cs.py +0 -101
  588. egse/vacuum/keller/leo3_interface.py +0 -33
  589. egse/vacuum/mks/evision.py +0 -86
  590. egse/vacuum/mks/evision.yaml +0 -75
  591. egse/vacuum/mks/evision_cs.py +0 -101
  592. egse/vacuum/mks/evision_devif.py +0 -313
  593. egse/vacuum/mks/evision_interface.py +0 -60
  594. egse/vacuum/mks/evision_simulator.py +0 -24
  595. egse/vacuum/mks/evision_ui.py +0 -701
  596. egse/vacuum/pfeiffer/acp40.py +0 -87
  597. egse/vacuum/pfeiffer/acp40.yaml +0 -60
  598. egse/vacuum/pfeiffer/acp40_controller.py +0 -117
  599. egse/vacuum/pfeiffer/acp40_cs.py +0 -109
  600. egse/vacuum/pfeiffer/acp40_interface.py +0 -40
  601. egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
  602. egse/vacuum/pfeiffer/tc400.py +0 -87
  603. egse/vacuum/pfeiffer/tc400.yaml +0 -83
  604. egse/vacuum/pfeiffer/tc400_controller.py +0 -136
  605. egse/vacuum/pfeiffer/tc400_cs.py +0 -109
  606. egse/vacuum/pfeiffer/tc400_interface.py +0 -70
  607. egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
  608. egse/vacuum/pfeiffer/tpg261.py +0 -80
  609. egse/vacuum/pfeiffer/tpg261.yaml +0 -66
  610. egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
  611. egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
  612. egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
  613. egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
  614. egse/version.py +0 -174
  615. egse/visitedpositions.py +0 -398
  616. egse/windowing.py +0 -213
  617. egse/zmq/__init__.py +0 -28
  618. egse/zmq/spw.py +0 -160
  619. egse/zmq_ser.py +0 -41
  620. scripts/alerts/cold.yaml +0 -278
  621. scripts/alerts/example_alerts.yaml +0 -54
  622. scripts/alerts/transition.yaml +0 -14
  623. scripts/alerts/warm.yaml +0 -49
  624. scripts/analyse_n_fee_hk_data.py +0 -52
  625. scripts/check_hdf5_files.py +0 -192
  626. scripts/check_register_sync.py +0 -47
  627. scripts/check_tcs_calib_coef.py +0 -90
  628. scripts/correct_ccd_cold_temperature_cal.py +0 -157
  629. scripts/create_hdf5_report.py +0 -293
  630. scripts/csl_model.py +0 -420
  631. scripts/csl_restore_setup.py +0 -229
  632. scripts/export-grafana-dashboards.py +0 -49
  633. scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
  634. scripts/fdir/fdir_table.yaml +0 -70
  635. scripts/fdir/fdir_test_recovery.py +0 -10
  636. scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
  637. scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
  638. scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
  639. scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
  640. scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
  641. scripts/fix_csv.py +0 -80
  642. scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
  643. scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
  644. scripts/ias/correct_trp_swap_achel.py +0 -199
  645. scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
  646. scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
  647. scripts/n_fee_supply_voltage_calculation.py +0 -92
  648. scripts/playground.py +0 -30
  649. scripts/print_hdf5_hk_data.py +0 -68
  650. scripts/print_register_map.py +0 -43
  651. scripts/remove_lines_between_matches.py +0 -188
  652. scripts/sron/commanding/control_heaters.py +0 -44
  653. scripts/sron/commanding/pumpdown.py +0 -46
  654. scripts/sron/commanding/set_pid_setpoint.py +0 -19
  655. scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
  656. scripts/sron/commanding/shutdown_pumps.py +0 -33
  657. scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
  658. scripts/sron/correct_trp_swap_brigand.py +0 -204
  659. scripts/sron/gimbal_conversions.py +0 -75
  660. scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
  661. scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
  662. scripts/sron/tm_gen/tm_gen_spid.py +0 -13
  663. scripts/update_operational_cgse.py +0 -268
  664. scripts/update_operational_cgse_old.py +0 -273
egse/dsi/spw.py DELETED
@@ -1,335 +0,0 @@
1
- """
2
- This module contains functions to handle SpaceWire communication.
3
- """
4
- from __future__ import annotations
5
-
6
- import logging
7
- import socket
8
- import textwrap
9
- from typing import Tuple
10
-
11
- import egse.rmap
12
- import egse.spw
13
- from egse.dsi import constants
14
- from egse.dsi.constants import esl_rmap_error_codes
15
- from egse.dsi.esl import ESLError
16
- from egse.dsi.esl import esl_close_connection
17
- from egse.dsi.esl import esl_configure
18
- from egse.dsi.esl import esl_flush
19
- from egse.dsi.esl import esl_get_active_link
20
- from egse.dsi.esl import esl_get_hwa
21
- from egse.dsi.esl import esl_get_manufacturer_string
22
- from egse.dsi.esl import esl_get_number_of_links
23
- from egse.dsi.esl import esl_get_product_string
24
- from egse.dsi.esl import esl_get_serial_number
25
- from egse.dsi.esl import esl_open_connection
26
- from egse.dsi.esl import esl_read_packet
27
- from egse.dsi.esl import esl_send_timecode
28
- from egse.dsi.esl import esl_set_active_link
29
- from egse.dsi.esl import esl_write_packet
30
- from egse.dsi.rmap import rmap_configure
31
- from egse.dsi.rmap import rmap_open_connection
32
- from egse.settings import Settings
33
- from egse.spw import SpaceWireInterface
34
- from egse.spw import SpaceWirePacket
35
- from egse.spw import WriteRequestReply
36
- from egse.spw import ReadRequestReply
37
-
38
- LOGGER = logging.getLogger(__name__)
39
-
40
- DSI_SETTINGS = Settings.load("DSI")
41
-
42
- # Naming conventions:
43
- #
44
- # rx_buffer:
45
- # is used for any buffer (of type bytes) that is or was received over the SpaceWire interface.
46
- # tx_buffer:
47
- # is used for any buffer (of type bytes) that will be transmitted over the SpaceWire interface.
48
-
49
-
50
- def handle_extension_packet(rx_buffer: bytes, bytes_received: int):
51
- """
52
- Decide how to handle the extension packet that was received over the SpaceWire.
53
-
54
- The following extension packets are supported:
55
-
56
- * a timecode packet
57
-
58
- Args:
59
- rx_buffer (bytes): the packet that was received as a bytes object
60
- bytes_received (int): the length of the rx_buffer (allocated space might be larger)
61
-
62
- Returns:
63
- Nothing: yet.
64
-
65
- """
66
- LOGGER.debug("*" * 80)
67
- LOGGER.debug("Extension Packet returned by DSI")
68
- LOGGER.debug(
69
- f"extension packet: {bin(int.from_bytes(rx_buffer, 'big'))} (length={bytes_received})"
70
- )
71
- LOGGER.debug("*" * 80)
72
-
73
-
74
- def handle_special_packet(rx_buffer: bytes, bytes_received: int):
75
- """
76
- Decide how to handle a special packet that was received over the SpaceWire interface.
77
-
78
- Args:
79
- rx_buffer (bytes): the packet that was received as a bytes object
80
- bytes_received (int): the length of the rx_buffer (allocated space might be larger)
81
-
82
- Returns:
83
- Nothing: yet.
84
-
85
- """
86
- LOGGER.debug("*" * 80)
87
- LOGGER.debug("Special Packet returned by DSI")
88
- LOGGER.debug(f"Special packet: {rx_buffer} (length={bytes_received})")
89
- LOGGER.debug("*" * 80)
90
-
91
-
92
- class SpaceWireOverDSI(SpaceWireInterface):
93
- """
94
- The SpaceWireOverDSI implements the SpaceWire communication/transport over a Diagnostic
95
- SpaceWire Interface (DSI).
96
- """
97
-
98
- def __init__(self, dsi_address, dsi_port, esl_link=None, rmap_link=None):
99
- self.dsi_address = dsi_address
100
- self.dsi_port = dsi_port
101
- self.esl_link = esl_link
102
- self.rmap_link = rmap_link
103
- self.socket = None
104
-
105
- def __str__(self):
106
- hwa = esl_get_hwa(self.esl_link)
107
- serial_number = esl_get_serial_number(self.esl_link)
108
-
109
- msg = textwrap.dedent(f"""\
110
- Info on SpaceWire Interface:
111
- Manufacturer {esl_get_manufacturer_string(self.esl_link)}
112
- Product {esl_get_product_string(self.esl_link)}
113
- Number of links {esl_get_number_of_links(self.esl_link)} [active port={esl_get_active_link(self.esl_link)}]
114
- Serial number {serial_number}
115
- Hardware Address 0x{hwa[0]:02X}-{hwa[1]:02X}-{hwa[2]:02X}-{hwa[3]:02X}-{hwa[4]:02X}-{hwa[5]:02X}
116
- """
117
- )
118
-
119
- return msg
120
-
121
- def connect(self):
122
- if self.esl_link is None:
123
- self.esl_link = esl_open_connection(self.dsi_address)
124
- if self.rmap_link is None:
125
- self.rmap_link = rmap_open_connection(self.esl_link)
126
- # esl_print_info(self.esl_link)
127
-
128
- def disconnect(self):
129
- esl_close_connection(self.esl_link)
130
-
131
- def configure(self):
132
- esl_configure(
133
- self.esl_link,
134
- active_link=self.dsi_port,
135
- speed=DSI_SETTINGS.LINK_SPEED,
136
- mode=constants.ESL_LINK_MODE_NORMAL,
137
- report=constants.ESL_ER_REPORT_PARITY_ERROR
138
- | constants.ESL_ER_REPORT_TIME_CODE
139
- | constants.ESL_ER_REPORT_ESC_EOP
140
- | constants.ESL_ER_REPORT_ESC_EEP
141
- | constants.ESL_ER_REPORT_ESC_ESC
142
- | constants.ESL_ER_REPORT_TIMEOUT,
143
- )
144
-
145
- rmap_configure(
146
- self.rmap_link,
147
- target_key=constants.RMAP_TARGET_KEY,
148
- initiator_logical_address=DSI_SETTINGS.INITIATOR_LOGICAL_ADDRESS,
149
- target_logical_address=DSI_SETTINGS.TARGET_LOGICAL_ADDRESS,
150
- )
151
-
152
- # esl_print_summary_of_structure(self.esl_link)
153
-
154
- def get_socket(self):
155
- """
156
- Returns the TCP socket that is associated with this transport.
157
-
158
- Returns:
159
- A TCP socket or None when the transport has not been initialized or connected.
160
- """
161
- # This 'trick' of getting the socket from the `fileno` works only once, so, if we have already
162
- # requested the socket for this `fileno`, don't do it again. It will either result in a
163
- # `OSError: [Errno 9] Bad file descriptor` or I've seen that a new socket created with the same
164
- # family and type will reuse the same `fileno` down the line...
165
-
166
- if self.socket is None and self.esl_link is not None:
167
- sock_fd = self.esl_link.contents.sock
168
- self.socket = socket.socket(fileno=sock_fd) # This is how to get the socket from the esl_connection.
169
-
170
- return self.socket
171
-
172
- def set_active_link(self, port: int):
173
- """
174
- Sets the active SpW port on the DSI.
175
-
176
- Raises:
177
- An ESLError when an invalid link is provided.
178
-
179
- Returns:
180
- The return code of the library call.
181
- """
182
- rc = esl_set_active_link(self.esl_link, port)
183
- if rc == constants.ESL_API_INVALID_LINK: # noqa
184
- raise ESLError(
185
- f"Could not set active link {port}, ESL error: Invalid Link selected [-45]."
186
- )
187
-
188
- return rc
189
-
190
- def get_active_link(self):
191
- """Return the number of the currently active SpW port on the DSI."""
192
- return esl_get_active_link(self.esl_link)
193
-
194
- def flush(self):
195
- esl_flush(self.esl_link)
196
-
197
- def send_timecode(self, timecode: int) -> int:
198
- return esl_send_timecode(self.esl_link, timecode)
199
-
200
- def read_packet(self, timeout: int = None) -> Tuple[int, bytes]:
201
- return esl_read_packet(self.esl_link, timeout=timeout)
202
-
203
- def write_packet(self, packet: bytes) -> int:
204
- return esl_write_packet(self.esl_link, packet, len(packet), constants.ESL_EOP) # noqa
205
-
206
- def read_register(self, address: int, length: int = 4, strict: bool = True) -> bytes:
207
- reply_packet = self.rmap_read_request(address, length, strict=strict)
208
-
209
- if reply_packet is None:
210
- LOGGER.critical(f"read_register() failed: An error occurred in the rmap_read_request() call.")
211
- return bytes()
212
-
213
- return reply_packet.data
214
-
215
- def write_register(self, address: int, data: bytes) -> int:
216
- reply_packet = self.rmap_write_request(address, data)
217
-
218
- if reply_packet is None:
219
- LOGGER.critical(f"write_register() failed: An error occurred in the rmap_write_request() call.")
220
- return -1
221
-
222
- if reply_packet.status:
223
- LOGGER.warning(f"write_register() failed: An error occurred in the rmap_write_request() call: "
224
- f"{reply_packet.status = }")
225
-
226
- return reply_packet.status
227
-
228
- def read_memory_map(self, address: int, size: int) -> bytes:
229
- reply_packet = self.rmap_read_request(address, size, strict=False)
230
-
231
- if reply_packet is None:
232
- LOGGER.critical(f"read_memory_map(): An error occurred in the rmap_read_request() call.")
233
- return bytes()
234
-
235
- return reply_packet.data
236
-
237
- def rmap_read_request(
238
- self, address: int, length: int, timeout: int = 1000, strict: bool = True) -> ReadRequestReply | None:
239
- """
240
- Read `length` bytes from the remote memory starting at `address`.
241
-
242
- Args:
243
- address: the start address (32-bit aligned) in the remote memory
244
- length: the number of bytes to read from the remote memory
245
- timeout: timeout in milliseconds
246
- strict: perform strict checking of read areas
247
-
248
- Returns:
249
- A tuple containing the terminator value and the RMAP Reply packet with the data read from
250
- the remote memory.
251
-
252
- """
253
- # TODO:
254
- # the timeout parameter is currently not implemented
255
-
256
- self.rmap_link.transaction_identifier = egse.spw.update_transaction_identifier(self.rmap_link.transaction_identifier)
257
-
258
- buffer = egse.rmap.create_rmap_read_request_packet(
259
- address, length, self.rmap_link.transaction_identifier, strict=strict)
260
-
261
- result = esl_write_packet(self.rmap_link.spw_device, buffer, len(buffer), constants.ESL_EOP) # noqa
262
- if result:
263
- raise egse.rmap.RMAPError(
264
- f"Couldn't send data within timeout of {timeout} ms, "
265
- f"ESL RMAP Error Code = {esl_rmap_error_codes[self.rmap_link.ESL_RMAP_error]} ["
266
- f"{self.rmap_link.ESL_RMAP_error}]")
267
-
268
- result = esl_flush(self.rmap_link.spw_device)
269
- if result:
270
- raise egse.rmap.RMAPError(
271
- f"Couldn't send data or clear buffers, "
272
- f"ESL RMAP Error Code = {esl_rmap_error_codes[self.rmap_link.ESL_RMAP_error]} ["
273
- f"{self.rmap_link.ESL_RMAP_error}]")
274
-
275
- # Read the read request reply packet
276
-
277
- _, rx_buffer = esl_read_packet(self.rmap_link.spw_device, timeout=timeout)
278
-
279
- if rx_buffer:
280
- reply_packet = SpaceWirePacket.create_packet(rx_buffer)
281
- return reply_packet if isinstance(reply_packet, ReadRequestReply) else None
282
-
283
- return None
284
-
285
- def rmap_write_request(
286
- self, address: int, data: bytes, length: int = 4, timeout: int = 1000) -> WriteRequestReply | None:
287
- """
288
- Sends an RMAP write command over the SpaceWire link.
289
-
290
- Based on the address this function will decided to send a verified or unverified write request.
291
-
292
- TODO: the timeout parameter is currently not implemented.
293
-
294
- Args:
295
- address: the starting memory address to which the data from buffer will be written
296
- data: the data that will be written into the targets memory
297
- length: the number of bytes to write (the buffer maybe longer) [default=4]
298
- timeout: timeout in milliseconds [default=1000]
299
-
300
- Returns:
301
- The Write Request Reply packet.
302
-
303
- Raises:
304
- egse.rmap.RMAPError: when data can not be written on the target.
305
-
306
- """
307
-
308
- self.rmap_link.transaction_identifier = egse.spw.update_transaction_identifier(
309
- self.rmap_link.transaction_identifier
310
- )
311
-
312
- if egse.rmap.CRITICAL_AREA_START <= address <= egse.rmap.CRITICAL_AREA_END:
313
- buffer = egse.rmap.create_rmap_verified_write_packet(
314
- address, data, self.rmap_link.transaction_identifier)
315
- else:
316
- buffer = egse.rmap.create_rmap_unverified_write_packet(
317
- address, data, length, self.rmap_link.transaction_identifier)
318
-
319
- result = esl_write_packet(self.esl_link, buffer, len(buffer), constants.ESL_EOP) # noqa
320
- if result:
321
- raise egse.rmap.RMAPError(f"Couldn't send data ({len(buffer)} bytes) within timeout of {timeout} ms.")
322
-
323
- result = esl_flush(self.esl_link)
324
- if result:
325
- raise egse.rmap.RMAPError(f"Couldn't send data or flush buffers.")
326
-
327
- # Read the write request reply message
328
-
329
- _, rx_buffer = esl_read_packet(self.esl_link)
330
-
331
- if rx_buffer:
332
- reply_packet = SpaceWirePacket.create_packet(rx_buffer)
333
- return reply_packet if isinstance(reply_packet, WriteRequestReply) else None
334
-
335
- return None
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,318 +0,0 @@
1
- """
2
- This module provides dummy implementation for classes of the Commanding chain.
3
- """
4
- import logging
5
- import multiprocessing
6
- import pickle
7
- import random
8
- import sys
9
- import threading
10
- import time
11
- from functools import partial
12
-
13
- import click
14
- import zmq
15
-
16
- from egse.command import ClientServerCommand
17
- from egse.confman import is_configuration_manager_active
18
- from egse.control import ControlServer
19
- from egse.control import is_control_server_active
20
- from egse.decorators import dynamic_interface
21
- from egse.listener import Event
22
- from egse.listener import EventInterface
23
- from egse.protocol import CommandProtocol
24
- from egse.proxy import Proxy
25
- from egse.settings import Settings
26
- from egse.system import AttributeDict
27
- from egse.system import format_datetime
28
- from egse.zmq_ser import bind_address
29
- from egse.zmq_ser import connect_address
30
-
31
- logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
32
- LOGGER = logging.getLogger("egse.dummy")
33
-
34
- # Especially DummyCommand and DummyController need to be defined in a known module
35
- # because those objects are pickled and when de-pickled at the clients side the class
36
- # definition must be known.
37
-
38
- # We use AttributeDict here to define the settings, because that is how the Settings.load() returns
39
- # settings loaded from a YAML file.
40
-
41
- ctrl_settings = AttributeDict(
42
- {
43
- 'HOSTNAME': 'localhost',
44
- 'COMMANDING_PORT': 4443,
45
- 'SERVICE_PORT': 4444,
46
- 'MONITORING_PORT': 4445,
47
- 'PROTOCOL': 'tcp',
48
- 'TIMEOUT': 10,
49
- 'HK_DELAY': 1.0,
50
- }
51
- )
52
-
53
- commands = AttributeDict(
54
- {
55
- 'info': {
56
- 'description': 'Info on the Dummy Controller',
57
- 'response': 'handle_device_method'
58
- },
59
- 'response': {
60
- 'description': 'send a command to the device and return it\'s response',
61
- 'device_method': 'response',
62
- 'cmd': '{one} {two} {fake}',
63
- 'response': 'handle_device_method'
64
- },
65
- 'handle_event': {
66
- 'description': "Notification of an event",
67
- 'device_method': 'handle_event',
68
- 'cmd': '{event}',
69
- 'response': 'handle_device_method'
70
- },
71
- }
72
- )
73
-
74
- def is_dummy_cs_active():
75
- return is_control_server_active(
76
- endpoint=connect_address(ctrl_settings.PROTOCOL, ctrl_settings.HOSTNAME, ctrl_settings.COMMANDING_PORT)
77
- )
78
-
79
-
80
- class DummyCommand(ClientServerCommand):
81
- pass
82
-
83
-
84
- class DummyInterface:
85
- @dynamic_interface
86
- def info(self):
87
- ...
88
- @dynamic_interface
89
- def response(self, *args, **kwargs):
90
- ...
91
-
92
-
93
- class DummyProxy(Proxy, DummyInterface, EventInterface):
94
- def __init__(self,
95
- protocol=ctrl_settings.PROTOCOL, hostname=ctrl_settings.HOSTNAME, port=ctrl_settings.COMMANDING_PORT):
96
- """
97
- Args:
98
- protocol: the transport protocol [default is taken from settings file]
99
- hostname: location of the control server (IP address) [default is taken from settings file]
100
- port: TCP port on which the control server is listening for commands [default is taken from settings file]
101
- """
102
- super().__init__(connect_address(protocol, hostname, port), timeout=ctrl_settings.TIMEOUT)
103
-
104
-
105
- class DummyController(DummyInterface, EventInterface):
106
- def __init__(self, control_server):
107
- self._cs = control_server
108
-
109
- def info(self):
110
- return "method info() called on DummyController"
111
-
112
- def response(self, *args, **kwargs):
113
- return f"response({args}, {kwargs})"
114
-
115
- def handle_event(self, event: Event) -> str:
116
-
117
- _exec_in_thread = False
118
-
119
- def _handle_event(event):
120
- LOGGER.info(f"An event is received, {event=}")
121
- LOGGER.info(f"CM CS active? {is_configuration_manager_active()}")
122
- time.sleep(5.0)
123
- LOGGER.info(f"CM CS active? {is_configuration_manager_active()}")
124
- LOGGER.info(f"An event is processed, {event=}")
125
-
126
- if _exec_in_thread:
127
- # We execute this function in a daemon thread so the acknowledgment is
128
- # sent back immediately (the ACK means 'command received and will be
129
- # executed).
130
-
131
- retry_thread = threading.Thread(target=_handle_event, args=(event,))
132
- retry_thread.daemon = True
133
- retry_thread.start()
134
- else:
135
- # An alternative to the daemon thread is to create a scheduled task that will be executed
136
- # after the event is acknowledged.
137
-
138
- self._cs.schedule_task(partial(_handle_event, event))
139
-
140
- return "ACK"
141
-
142
-
143
- class DummyProtocol(CommandProtocol):
144
-
145
- def __init__(self, control_server: ControlServer):
146
- super().__init__()
147
- self.control_server = control_server
148
-
149
- self.device_controller = DummyController(control_server)
150
-
151
- self.load_commands(commands, DummyCommand, DummyController)
152
-
153
- self.build_device_method_lookup_table(self.device_controller)
154
-
155
- self._count = 0
156
-
157
- def get_bind_address(self):
158
- return bind_address(self.control_server.get_communication_protocol(), self.control_server.get_commanding_port())
159
-
160
- def get_status(self):
161
- return super().get_status()
162
-
163
- def get_housekeeping(self) -> dict:
164
-
165
- # LOGGER.debug(f"Executing get_housekeeping function for {self.__class__.__name__}.")
166
-
167
- self._count += 1
168
-
169
- # use the sleep to test the responsiveness of the control server when even this get_housekeeping function takes
170
- # a lot of time, i.e. up to several minutes in the case of data acquisition devices
171
- # import time
172
- # time.sleep(2.0)
173
-
174
-
175
- return {
176
- 'timestamp': format_datetime(),
177
- 'COUNT': self._count,
178
- 'PI': 3.14159, # just to have a constant parameter
179
- 'Random': random.randint(0, 100), # just to have a variable parameter
180
- }
181
-
182
-
183
- class DummyControlServer(ControlServer):
184
- """
185
- DummyControlServer - Command and monitor dummy device controllers.
186
-
187
- The sever binds to the following ZeroMQ sockets:
188
-
189
- * a REQ-REP socket that can be used as a command server. Any client can connect and
190
- send a command to the dummy device controller.
191
-
192
- * a PUB-SUP socket that serves as a monitoring server. It will send out status
193
- information to all the connected clients every DELAY seconds.
194
-
195
- """
196
-
197
- def __init__(self):
198
- multiprocessing.current_process().name = "dummy_cs"
199
-
200
- super().__init__()
201
-
202
- self.device_protocol = DummyProtocol(self)
203
-
204
- self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
205
-
206
- self.device_protocol.bind(self.dev_ctrl_cmd_sock)
207
-
208
- self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
209
-
210
- self.set_hk_delay(ctrl_settings.HK_DELAY)
211
-
212
- from egse.confman import ConfigurationManagerProxy
213
- from egse.listener import EVENT_ID
214
-
215
- self.register_as_listener(
216
- proxy=ConfigurationManagerProxy,
217
- listener={'name': 'Dummy CS', 'proxy': DummyProxy, 'event_id': EVENT_ID.SETUP}
218
- )
219
-
220
-
221
- def get_communication_protocol(self):
222
- return 'tcp'
223
-
224
- def get_commanding_port(self):
225
- return ctrl_settings.COMMANDING_PORT
226
-
227
- def get_service_port(self):
228
- return ctrl_settings.SERVICE_PORT
229
-
230
- def get_monitoring_port(self):
231
- return ctrl_settings.MONITORING_PORT
232
-
233
- def get_storage_mnemonic(self):
234
- return "DUMMY-HK"
235
-
236
- def after_serve(self):
237
- from egse.confman import ConfigurationManagerProxy
238
-
239
- self.unregister_as_listener(proxy=ConfigurationManagerProxy, listener={'name': 'Dummy CS'})
240
-
241
-
242
- @click.group()
243
- def cli():
244
- pass
245
-
246
- @click.group()
247
- def control_server():
248
- pass
249
-
250
- cli.add_command(control_server)
251
-
252
- @control_server.command()
253
- def start():
254
- """Start the dummy control server on localhost."""
255
- from egse.dummy import DummyControlServer
256
-
257
- try:
258
- control_server = DummyControlServer()
259
- control_server.serve()
260
- except KeyboardInterrupt:
261
- print("Shutdown requested...exiting")
262
- except SystemExit as exit_code:
263
- print("System Exit with code {}.".format(exit_code))
264
- sys.exit(exit_code)
265
- except Exception:
266
- import traceback
267
- traceback.print_exc(file=sys.stdout)
268
-
269
- @control_server.command()
270
- def stop():
271
- """Send a quit service command to the dummy control server."""
272
- with DummyProxy() as dummy:
273
- sp = dummy.get_service_proxy()
274
- sp.quit_server()
275
-
276
-
277
- @cli.command()
278
- @click.argument('hostname')
279
- @click.argument('port')
280
- @click.option('--pickle/--no-pickle', 'use_pickle', default=True)
281
- def monitoring(use_pickle: bool, hostname: str = 'localhost', port: int = None):
282
- """Monitor the status of a control server on hostname.
283
-
284
- The port number shall correspond to the port number on which the server is publishing
285
- information with the ZeroMQ PUB-SUB protocol.
286
-
287
- The response from the server (the data or string that was published) is logged at INFO level.
288
-
289
- Arguments:
290
-
291
- hostname: the IP address or hostname of the server
292
-
293
- port: the port to connect to (this is the port to which the server binds)
294
-
295
- Options:
296
-
297
- --pickle or --no-pickle: use pickle to de-serialize the response
298
- """
299
- context = zmq.Context()
300
-
301
- receiver = context.socket(zmq.SUB)
302
- receiver.connect(f"tcp://{hostname}:{port}")
303
- receiver.setsockopt_string(zmq.SUBSCRIBE, "")
304
-
305
- while True:
306
- try:
307
- response = receiver.recv()
308
- if use_pickle:
309
- response = pickle.loads(response)
310
-
311
- LOGGER.info(response)
312
- except KeyboardInterrupt:
313
- LOGGER.info("KeyboardInterrupt caught!")
314
- break
315
-
316
-
317
- if __name__ == "__main__":
318
- cli()