Compare commits

..

1089 Commits

Author SHA1 Message Date
muellerr e23b39e652 action reply update
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-05-16 11:03:55 +02:00
muellerr 9a55686a26 Merge pull request 'Some more fixes' (#298) from some-more-fixes-for-tmtccmd-bump into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #298
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-05-13 14:06:00 +02:00
muellerr 067a016040 another small fix
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-05-08 10:56:16 +02:00
muellerr dccbf89da1 some more fixes
EIVE/-/pipeline/head This commit looks good
2024-05-08 10:49:20 +02:00
muellerr 5cf76c07e9 Merge pull request 'Bump tmtccmd and fix CFDP' (#297) from bump-tmtccmd-fix-cfdp into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #297
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-05-07 14:17:40 +02:00
muellerr bc53f7e81a Merge remote-tracking branch 'origin/main' into bump-tmtccmd-fix-cfdp
EIVE/-/pipeline/head Build started...
2024-05-07 14:10:05 +02:00
muellerr d6b879da67 bump tmtccmd and fix CFDP code
EIVE/-/pipeline/head Build started...
2024-05-07 14:07:18 +02:00
muellerr 9a06c64dfa prep v7.0.0
EIVE/-/pipeline/head This commit looks good
2024-05-06 14:18:57 +02:00
muellerr cc7837a55b Merge pull request 'MPSoC Overhaul' (#296) from mpsoc-overhaul into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #296
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-05-06 14:18:02 +02:00
muellerr 9cc4fa702c renaming
EIVE/-/pipeline/pr-main Build started...
2024-05-06 14:10:30 +02:00
muellerr ada099cab1 events
EIVE/-/pipeline/pr-main This commit looks good
2024-05-06 13:48:22 +02:00
muellerr 376f94b167 update events
EIVE/-/pipeline/pr-main This commit looks good
2024-05-06 13:18:27 +02:00
muellerr 86a68e25f7 need to fix action reply handler
EIVE/-/pipeline/head This commit looks good
2024-05-06 11:23:31 +02:00
muellerr 5e1b12fa52 Merge remote-tracking branch 'origin/main' into mpsoc-overhaul
EIVE/-/pipeline/pr-main This commit looks good
2024-04-30 14:36:41 +02:00
muellerr de34952df5 less confusing cmd names 2024-04-30 14:36:11 +02:00
meggert 5da55c3c99 Merge pull request 'PLOC SUPV TM handling' (#293) from ploc-supv-tm-handling into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #293
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-29 11:44:20 +02:00
meggert 3b903e5639 Merge branch 'main' into ploc-supv-tm-handling
EIVE/-/pipeline/pr-main Build queued...
2024-04-29 11:43:14 +02:00
meggert da35c7fdf1 Merge pull request 'added missing act cmd' (#295) from gnss-improv into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #295
2024-04-29 11:42:51 +02:00
meggert 8c7cbd1bd6 changelog
EIVE/-/pipeline/pr-main Build queued...
2024-04-29 11:41:03 +02:00
meggert ba0a3e35d2 cleanup
EIVE/-/pipeline/pr-main Build started...
2024-04-29 11:40:00 +02:00
meggert fc2667c150 Merge branch 'main' into gnss-improv
EIVE/-/pipeline/pr-main Build started...
2024-04-29 11:33:10 +02:00
muellerr f9041f215a how the fuck did that work the last time?
EIVE/-/pipeline/pr-main This commit looks good
2024-04-26 15:27:44 +02:00
muellerr a59aceda75 odd things happening here
EIVE/-/pipeline/pr-main This commit looks good
2024-04-26 14:36:02 +02:00
muellerr c50f8c2ce2 some fixes
EIVE/-/pipeline/pr-main This commit looks good
2024-04-26 13:53:39 +02:00
muellerr dfa45dbdba added some commands for preparing flash
EIVE/-/pipeline/pr-main This commit looks good
2024-04-25 17:26:57 +02:00
muellerr 36d9323b57 added commands for flash formatting
EIVE/-/pipeline/pr-main This commit looks good
2024-04-25 12:11:18 +02:00
muellerr e04b5bf9d7 Merge remote-tracking branch 'origin/main' into mpsoc-overhaul
EIVE/-/pipeline/pr-main This commit looks good
2024-04-25 12:04:37 +02:00
meggert 3c0ac91227 Merge pull request 'CLock Events' (#291) from clock-events into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #291
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-17 16:43:29 +02:00
muellerr f61c485979 Merge branch 'main' into clock-events
EIVE/-/pipeline/pr-main This commit looks good
2024-04-17 16:20:09 +02:00
muellerr 2ebbf750bd handling for new clock events 2024-04-17 16:19:58 +02:00
muellerr 847fccbe66 Merge pull request 'test script' (#294) from bestest-script into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #294
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-17 16:19:24 +02:00
muellerr c8292f4ee1 Merge branch 'main' into bestest-script
EIVE/-/pipeline/pr-main This commit looks good
2024-04-17 15:05:45 +02:00
muellerr 3700769e46 Merge remote-tracking branch 'origin/main' into ploc-supv-tm-handling
EIVE/-/pipeline/head Build queued...
EIVE/-/pipeline/pr-main There was a failure building this commit
2024-04-17 15:04:57 +02:00
muellerr 69fda96d7a bump major version
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-04-17 15:02:20 +02:00
muellerr 0c51cad813 remove old boot verification cmd
EIVE/-/pipeline/head This commit looks good
2024-04-17 14:51:44 +02:00
muellerr 05d5955236 split up in store file and stream file
EIVE/-/pipeline/head This commit looks good
2024-04-17 14:43:15 +02:00
muellerr 18860ec2c6 tricky
EIVE/-/pipeline/head This commit looks good
2024-04-17 13:20:46 +02:00
muellerr fc5fb0eed3 add new submode commands
EIVE/-/pipeline/head This commit looks good
2024-04-17 13:10:13 +02:00
muellerr d5bb6fe6c5 re-run generators
EIVE/-/pipeline/head This commit looks good
2024-04-17 11:22:41 +02:00
muellerr 37eafb722b this should do the job
EIVE/-/pipeline/head This commit looks good
2024-04-11 10:52:14 +02:00
muellerr 1cafdc817f clock events
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-04-10 17:34:54 +02:00
muellerr 5967dede97 add new events for clock handling
EIVE/-/pipeline/head This commit looks good
2024-04-10 17:27:24 +02:00
meggert a8d0143b1e Merge pull request 'Prep v6.2.0' (#290) from prep-v6.2.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #290
2024-04-10 11:51:24 +02:00
meggert a0ad5f8948 reran gens 2024-04-10 11:50:15 +02:00
meggert 20ecef5838 linter
EIVE/-/pipeline/head Build queued...
2024-04-10 11:48:04 +02:00
meggert 6d97841cbf bump version
EIVE/-/pipeline/head Build queued...
2024-04-10 11:47:05 +02:00
meggert 512f0e4530 changelog 2024-04-10 11:46:35 +02:00
meggert e2f0221681 Merge pull request 'GNSS Fixes' (#289) from gnss-fixes into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #289
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2024-04-10 11:34:58 +02:00
meggert e9eb45c088 Merge branch 'main' into gnss-fixes 2024-04-10 11:34:39 +02:00
meggert ea72087d87 Merge pull request 'allow setting health for payload components' (#287) from set-health-cmd-payload into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #287
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-10 11:34:30 +02:00
muellerr d48c029b85 Merge branch 'main' into gnss-fixes
EIVE/-/pipeline/pr-main Build queued...
2024-04-10 11:30:01 +02:00
muellerr b5f4f2ddab changelog
EIVE/-/pipeline/pr-main Build started...
2024-04-10 11:29:19 +02:00
muellerr 64dd19bd12 Merge branch 'main' into set-health-cmd-payload
EIVE/-/pipeline/pr-main Build started...
2024-04-10 11:28:43 +02:00
meggert 102821fc71 Merge pull request 'Some PLOC commanding fixes' (#288) from ploc-tree-test into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #288
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-09 14:41:10 +02:00
meggert 24f3abdd5a Merge branch 'main' into ploc-tree-test 2024-04-09 14:40:36 +02:00
meggert a880db5655 changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-04-09 14:34:23 +02:00
meggert 4e0cbb1034 Merge branch 'main' into gnss-fixes 2024-04-09 14:33:33 +02:00
muellerr 96636d59e9 Merge pull request 'relative timeshift' (#286) from relative-timeshift into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #286
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-04-09 14:32:28 +02:00
muellerr 7dfdd40963 fixed PLOC mode commanding
EIVE/-/pipeline/pr-main Build queued...
2024-04-09 14:31:41 +02:00
meggert 6282686f2f lets just change the tmtc structure he said. everything will still work he said
EIVE/-/pipeline/head This commit looks good
2024-04-09 13:29:01 +02:00
muellerr b160f079b1 small bugfix
EIVE/-/pipeline/head This commit looks good
2024-04-09 13:19:25 +02:00
muellerr 11d7ad0f8d start fixing PLOC tree
EIVE/-/pipeline/head This commit looks good
2024-04-09 11:32:57 +02:00
muellerr 5af69eb14e add supervisor
EIVE/-/pipeline/pr-main This commit looks good
2024-04-08 13:40:37 +02:00
muellerr 5a0edbefa8 fix comment block
EIVE/-/pipeline/pr-main This commit looks good
2024-04-08 13:38:28 +02:00
muellerr 5bdba2dbad update events
EIVE/-/pipeline/pr-main This commit looks good
2024-04-08 13:35:34 +02:00
muellerr 3ae6ccfb77 this should do the job 2024-04-08 13:35:06 +02:00
muellerr de84bf112b changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-04-08 13:25:45 +02:00
muellerr d182a9d5ec re-run black 2024-04-08 13:24:40 +02:00
muellerr c72a04b262 allow setting health for payload components
EIVE/-/pipeline/head This commit looks good
2024-04-08 11:36:25 +02:00
muellerr 492d364246 relative timeshift
EIVE/-/pipeline/head This commit looks good
2024-04-08 11:35:05 +02:00
muellerr 33cf7b1613 Merge pull request 'Fix for Heater Cmd' (#284) from heater-health into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #284
2024-04-02 13:28:06 +02:00
muellerr d8c49aed80 Merge branch 'main' into heater-health 2024-04-02 13:27:56 +02:00
meggert 97afd24e52 Merge pull request 'EPS command bugfix' (#285) from eps-bugfix into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #285
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-03-27 09:01:22 +01:00
muellerr 4704616ca7 changelog
EIVE/-/pipeline/head This commit looks good
2024-03-26 17:52:41 +01:00
muellerr 92c0172b59 bugfix for EPS
EIVE/-/pipeline/head This commit looks good
2024-03-26 17:50:37 +01:00
muellerr 344f16099e test script
EIVE/-/pipeline/head This commit looks good
2024-03-19 11:48:24 +01:00
meggert 49b55f01e3 s
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-03-18 11:11:20 +01:00
muellerr f87095bf68 Merge pull request 'STR Improv' (#283) from str-version into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #283
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2024-03-14 10:55:59 +01:00
meggert 928759d1bc changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-03-13 13:47:02 +01:00
meggert dc17919108 smoll fix
EIVE/-/pipeline/head Build started...
2024-03-13 13:44:15 +01:00
meggert 5f71f27f0e size check
EIVE/-/pipeline/head This commit looks good
2024-03-13 10:18:37 +01:00
meggert f8d63e56cb version set
EIVE/-/pipeline/head This commit looks good
2024-03-13 10:00:45 +01:00
meggert c843356c8a Merge pull request 'Prep v6.1.1' (#282) from prep-v6.1.1 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #282
2024-03-06 11:03:24 +01:00
meggert 49a614db10 cleanup
EIVE/-/pipeline/head Build started...
2024-03-06 11:02:10 +01:00
meggert c90dd92162 bump version 2024-03-06 10:59:31 +01:00
meggert bcb6a8b34e changelog 2024-03-06 10:59:09 +01:00
meggert ed15bcaf35 Merge pull request 'Leap Seconds' (#281) from leap-seconds into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #281
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2024-03-06 10:53:57 +01:00
meggert 89202f2cfe changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-03-06 09:51:03 +01:00
meggert 40c2a4b1f3 remove printout
EIVE/-/pipeline/head This commit looks good
2024-03-05 11:53:00 +01:00
meggert 811786fd78 update leap seconds act cmd
EIVE/-/pipeline/head This commit looks good
2024-03-05 11:43:18 +01:00
meggert baf1b44d23 added missing act cmd
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-03-01 10:20:07 +01:00
meggert 73a4260f33 Merge pull request 'Prep v6.1.0' (#280) from prep-v6.1.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #280
2024-02-29 13:24:27 +01:00
meggert 3358de3e3e changelog
EIVE/-/pipeline/pr-main Build queued...
2024-02-29 13:22:06 +01:00
meggert 211e79c83e bumped version number 2024-02-29 13:20:07 +01:00
meggert 7f10e5c777 Merge branch 'main' into prep-v6.1.0 2024-02-29 13:19:44 +01:00
meggert aab35c26c2 reran gens
EIVE/-/pipeline/pr-main Build queued...
2024-02-29 13:12:30 +01:00
muellerr 6ade001d3d Merge pull request 'New ACS Ctrl Act Cmd' (#278) from acs-ctrl-new-stuff into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #278
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2024-02-29 12:34:50 +01:00
muellerr 098bdcf82b changelog 2024-02-29 12:34:04 +01:00
muellerr b131415ea7 Merge branch 'main' into acs-ctrl-new-stuff 2024-02-29 12:33:44 +01:00
meggert b1dd5aa7d0 Merge pull request 'Add BlobStats TM handling STR' (#279) from add-blob-stats-str into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #279
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-29 12:33:31 +01:00
muellerr 0201eb27c4 changelog
EIVE/-/pipeline/pr-main Build queued...
2024-02-29 12:27:27 +01:00
muellerr c070f18c5d small fix
EIVE/-/pipeline/head Build queued...
2024-02-29 12:26:02 +01:00
muellerr 00876ed0e0 tweak for HK filter feature 2024-02-29 12:09:53 +01:00
muellerr 68ea889d0f added blob stats set for STR
EIVE/-/pipeline/head This commit looks good
2024-02-29 12:07:03 +01:00
meggert 771199e542 added new act cmd
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-02-27 16:26:06 +01:00
meggert 588d7a8079 Merge pull request 'RW commanding fix' (#277) from rw-commanding-fix into main
EIVE/-/pipeline/head Build queued...
Reviewed-on: #277
2024-02-26 14:03:52 +01:00
meggert 83aff8bea5 Merge branch 'main' into rw-commanding-fix 2024-02-26 14:03:22 +01:00
meggert 1d982785e6 Merge pull request 'STR secondary firmware slot commands' (#276) from str-secondary-fw-slot-update into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #276
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-26 14:01:34 +01:00
muellerr d062a22a7a delete old function
EIVE/-/pipeline/pr-main This commit looks good
2024-02-20 11:29:20 +01:00
muellerr f8c3172e7a changelog
EIVE/-/pipeline/head This commit looks good
2024-02-20 11:26:54 +01:00
muellerr 7a56c604a6 RW commanding fixes 2024-02-20 11:26:36 +01:00
muellerr bbde4b5b20 changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-02-19 17:25:06 +01:00
muellerr 85fc106a9b add commanding nodes
EIVE/-/pipeline/head This commit looks good
2024-02-19 15:58:34 +01:00
muellerr d35bc01397 added command to select STR slot
EIVE/-/pipeline/head This commit looks good
2024-02-19 15:27:27 +01:00
muellerr d811735b8d add som enums
EIVE/-/pipeline/head This commit looks good
2024-02-19 12:20:32 +01:00
muellerr 265077a758 add command for second slot update
EIVE/-/pipeline/head This commit looks good
2024-02-19 12:17:34 +01:00
muellerr 1cd566a94c Merge pull request 'Fix the Errors of muellerr' (#275) from tm-store-fix into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #275
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2024-02-12 10:40:34 +01:00
meggert 9aa891ef78 fix the errors of muellerr
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-02-09 12:06:38 +01:00
meggert 329aa76fbf Merge pull request 'prep v6.0.0' (#274) from prep-v6.0.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #274
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-08 13:07:09 +01:00
muellerr 4633e0cb13 prep v6.0.0
EIVE/-/pipeline/head This commit looks good
2024-02-08 12:18:33 +01:00
meggert a5ebac6266 Merge pull request 'Add SUPV latchup report handling, clean up code' (#273) from add-supv-latchup-report into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #273
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-06 13:52:55 +01:00
muellerr f3c6b509ec Merge branch 'main' into add-supv-latchup-report
EIVE/-/pipeline/pr-main This commit looks good
2024-02-06 11:37:39 +01:00
meggert 5aefa436f4 Merge pull request 'v6.0.0-dev' (#269) from v6.0.0-dev into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #269
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-06 10:28:28 +01:00
meggert b0b8118dd5 Merge branch 'main' into v6.0.0-dev
EIVE/-/pipeline/pr-main This commit looks good
2024-02-05 09:58:44 +01:00
meggert db384f8e9c Merge pull request 'print fix STR' (#272) from str-print-fix into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #272
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-02-05 09:05:36 +01:00
muellerr e5fe0ab95a Merge branch 'v6.0.0-dev' into add-supv-latchup-report
EIVE/-/pipeline/pr-main This commit looks good
2024-01-31 17:06:33 +01:00
muellerr 248df1d4df added missing field parsing
EIVE/-/pipeline/head This commit looks good
2024-01-31 16:57:59 +01:00
muellerr f93f713b0e some minor bugfixes
EIVE/-/pipeline/head This commit looks good
2024-01-31 16:49:54 +01:00
muellerr c6b2edf688 removed old commands
EIVE/-/pipeline/head This commit looks good
2024-01-31 15:58:43 +01:00
muellerr 5e3b60b3af cleaned up PLOC SUPV a bit
EIVE/-/pipeline/head This commit looks good
2024-01-31 15:56:03 +01:00
muellerr d69d16c3af add latchup status report handling
EIVE/-/pipeline/head This commit looks good
2024-01-31 15:38:01 +01:00
muellerr 6376585c4e Merge remote-tracking branch 'origin/main' into v6.0.0-dev
EIVE/-/pipeline/pr-main This commit looks good
2024-01-30 10:54:12 +01:00
muellerr 5b4a789c4b print fix
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-01-30 10:39:59 +01:00
meggert d33013ed58 Merge pull request 'Prep v5.13.0' (#271) from prep-v5.13.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #271
2024-01-30 09:25:47 +01:00
meggert 7e39a481bd Merge branch 'main' into prep-v5.13.0
EIVE/-/pipeline/pr-main This commit looks good
2024-01-30 09:24:06 +01:00
meggert 4744de8a54 changelog
EIVE/-/pipeline/head This commit looks good
2024-01-30 09:17:40 +01:00
meggert 916ce92bdc bump version 2024-01-30 09:17:31 +01:00
meggert bb765ac8a0 Merge pull request 'Gens' (#270) from reran-gens into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #270
2024-01-30 09:14:38 +01:00
meggert 84f0f42783 gens
EIVE/-/pipeline/pr-main This commit looks good
2024-01-30 09:10:47 +01:00
meggert ee2dade270 gens
EIVE/-/pipeline/pr-main This commit looks good
2024-01-30 09:07:56 +01:00
meggert 4f26c34c60 gens
EIVE/-/pipeline/head This commit looks good
2024-01-29 17:14:18 +01:00
meggert b5ae7c5f38 Merge pull request 'Add new param command' (#268) from ploc-mpsoc-skip-supv-commanding-param into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #268
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-01-29 10:15:11 +01:00
muellerr 813f92f3d4 some cleaning up and some bugfixes
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 13:27:10 +01:00
muellerr f3eecfa8ac fix TC handler
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 13:03:04 +01:00
muellerr b94c20dab1 changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 11:22:10 +01:00
muellerr 84aeaa4b65 Merge branch 'ploc-mpsoc-skip-supv-commanding-param' into v6.0.0-dev 2024-01-25 11:20:50 +01:00
muellerr caaf937003 changelog
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 11:20:38 +01:00
muellerr bcdd12caf0 basic printout for wrong mode reply
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 11:01:46 +01:00
muellerr 6440048235 get rid of the stupid legacy printer
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 10:39:43 +01:00
muellerr c5dcc0b77d Merge branch 'v6.0.0-dev' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc into v6.0.0-dev
EIVE/-/pipeline/pr-main This commit looks good
2024-01-25 10:36:32 +01:00
muellerr ebd9792fb9 some minor fixes 2024-01-25 10:36:23 +01:00
muellerr 9f1d61c3ef Merge pull request 'Introduce TM DB' (#255) from introduce_tm_db into v6.0.0-dev
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #255
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-01-25 10:26:06 +01:00
muellerr 38eb43cf8d Merge branch 'v6.0.0-dev' into introduce_tm_db
EIVE/-/pipeline/pr-v6.0.0-dev Build started...
2024-01-25 10:25:56 +01:00
muellerr 3d007c32a3 various fixes for ACS subsystem
EIVE/-/pipeline/head This commit looks good
2024-01-25 10:22:04 +01:00
muellerr 202a824d31 scex bug
EIVE/-/pipeline/head This commit looks good
2024-01-25 10:06:10 +01:00
muellerr 79b3c269e6 this works 2024-01-25 10:04:45 +01:00
muellerr 839da7a224 Merge branch 'ploc-mpsoc-skip-supv-commanding-param' into v6.0.0-dev
EIVE/-/pipeline/head This commit looks good
2024-01-25 10:01:39 +01:00
meggert 3a6abe1b62 Merge pull request 'Introduce new command definition tree' (#259) from bump-tmtccmd into v6.0.0-dev
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #259
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2024-01-25 09:43:47 +01:00
muellerr db70b33bd6 bump tmtccmd again
EIVE/-/pipeline/pr-v6.0.0-dev This commit looks good
2024-01-24 17:59:16 +01:00
muellerr d53e9d61b0 Merge remote-tracking branch 'origin/main' into bump-tmtccmd
EIVE/-/pipeline/pr-v6.0.0-dev This commit looks good
2024-01-24 17:49:39 +01:00
muellerr bac4473aa7 Merge branch 'main' into introduce_tm_db
EIVE/-/pipeline/pr-main This commit looks good
2024-01-24 17:40:23 +01:00
muellerr 1831ea8b7a add new param command
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-01-24 14:30:57 +01:00
muellerr 747ad34eec prev v5.12.1
EIVE/-/pipeline/head This commit looks good
2023-12-13 11:30:03 +01:00
meggert 2789453d57 Merge pull request 'the endianness is actually really important here' (#266) from add-cmds-to-test-scheduling into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #266
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-12-13 11:28:09 +01:00
muellerr 5456d79965 the endianness is actually really important here
EIVE/-/pipeline/head This commit looks good
2023-12-13 11:23:55 +01:00
muellerr 342a3bbcc9 update PLOC Supversisor TM handling
EIVE/-/pipeline/head This commit looks good
2023-12-12 15:28:32 +01:00
muellerr 4c54aa7586 Merge pull request 'small fix' (#265) from small-fix into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #265
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-12-07 13:57:49 +01:00
meggert 1a132684a6 small fix
EIVE/-/pipeline/head This commit looks good
2023-12-07 13:54:09 +01:00
muellerr f63a834d9a Merge pull request 'prep v5.12.0' (#264) from prep_v5.12.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #264
2023-12-06 17:23:00 +01:00
muellerr 58def42281 re-run generators
EIVE/-/pipeline/head This commit looks good
2023-12-06 17:19:56 +01:00
muellerr ee955e96fb prepare v5.12.0 2023-12-06 17:19:01 +01:00
meggert 97fb8a166f Merge pull request 'New ACS Stuff' (#263) from acs-stuff into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #263
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-12-06 17:16:55 +01:00
meggert d477242881 strats
EIVE/-/pipeline/head This commit looks good
2023-12-06 14:48:05 +01:00
meggert 451c2c07ee stuff
EIVE/-/pipeline/head This commit looks good
2023-12-05 16:41:29 +01:00
meggert 8de88127c3 this is much better
EIVE/-/pipeline/head This commit looks good
2023-12-05 09:57:07 +01:00
meggert e7e97ff2d3 i never pushed this lul
EIVE/-/pipeline/head This commit looks good
2023-12-01 13:03:38 +01:00
meggert 35e3f8b572 call action reply handling 2023-12-01 13:02:23 +01:00
meggert 77010937b8 tle action reply 2023-12-01 13:01:31 +01:00
meggert c1f4a3f59d more health 2023-12-01 13:01:14 +01:00
meggert 74e55b16dc Merge pull request 'prepare next release' (#262) from prep_v5.11.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #262
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-30 14:34:57 +01:00
muellerr f1f4a1e9a0 prepare next release
EIVE/-/pipeline/head This commit looks good
2023-11-30 10:16:29 +01:00
muellerr 7c3a72f85b Merge branch 'main' into introduce_tm_db
EIVE/-/pipeline/pr-main This commit looks good
2023-11-30 10:12:49 +01:00
muellerr 4e25e2e6ca Merge branch 'main' into bump-tmtccmd
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 18:34:02 +01:00
muellerr eb302e5cf1 use released version of tmtccmd
EIVE/-/pipeline/pr-main There was a failure building this commit
2023-11-29 18:33:09 +01:00
muellerr 3da1c2c262 add some more ACS devices
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 17:27:24 +01:00
muellerr 1660e27ec1 hopefully soon done
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 17:04:30 +01:00
meggert 40aa648e6b Merge pull request 'update returnvalues' (#261) from update-retvals into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #261
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-29 15:49:15 +01:00
muellerr 098843a74f update returnvalues
EIVE/-/pipeline/head This commit looks good
2023-11-29 15:15:06 +01:00
muellerr 6f86e72042 Merge remote-tracking branch 'origin/main' into bump-tmtccmd
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 15:12:48 +01:00
muellerr 507c3e3ff3 Merge branch 'introduce_tm_db' into bump-tmtccmd
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 15:02:33 +01:00
muellerr bca2deae61 Merge branch 'main' into introduce_tm_db
EIVE/-/pipeline/pr-main This commit looks good
2023-11-29 15:00:09 +01:00
muellerr 1ea255d3e8 Merge pull request 'STR reload json cfg cmd' (#257) from str-reload-json-cfg-cmd into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #257
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-29 14:59:58 +01:00
muellerr b1caaff672 Merge remote-tracking branch 'origin/main' into str-reload-json-cfg-cmd
EIVE/-/pipeline/pr-main Build queued...
2023-11-29 14:59:41 +01:00
muellerr 3b047094e6 Merge pull request 'Disable Order Check PL PCDU' (#260) from disable-order-check-plpcdu into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #260
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-29 14:56:34 +01:00
muellerr 56ebfb1000 Merge branch 'main' into disable-order-check-plpcdu
EIVE/-/pipeline/pr-main Build queued...
2023-11-29 14:56:26 +01:00
muellerr a41dc9b691 Merge pull request 'PLOC SUPV Extensions' (#258) from ploc-supv-extensions into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #258
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-29 14:22:40 +01:00
muellerr 1d121c40b2 Merge branch 'main' into ploc-supv-extensions
EIVE/-/pipeline/pr-main Build queued...
2023-11-29 14:18:32 +01:00
muellerr 0a417a89e9 Merge pull request 'Deletion by time range cmd' (#256) from add-deletion-by-time-range-cmd into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #256
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-29 14:09:30 +01:00
muellerr 35e25bf6d0 small fix for STR node
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 17:42:52 +01:00
muellerr d4147d8402 not much missing
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 17:41:46 +01:00
muellerr 3cf312073a continue conversion
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 17:34:34 +01:00
muellerr 76fee820e9 continuing node setup
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 17:24:25 +01:00
muellerr d2fc53c1fa cmd history introduction
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 16:05:19 +01:00
muellerr 7abce63a56 changelog
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 15:39:56 +01:00
muellerr af24a95475 some fixes and improvements for parsing of TM
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 15:35:54 +01:00
muellerr 6ea3312b62 that should do the job
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 14:20:04 +01:00
muellerr d7e61f1395 add new commands to request HK sets
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 12:52:13 +01:00
muellerr 51227100af added PLOC SUPV TM handling
EIVE/-/pipeline/pr-main This commit looks good
2023-11-28 12:43:30 +01:00
muellerr fc243b76cf Merge remote-tracking branch 'origin/main' into disable-order-check-plpcdu
EIVE/-/pipeline/pr-main This commit looks good
2023-11-27 12:20:06 +01:00
muellerr 62b16028e6 small fix and tweak
EIVE/-/pipeline/head This commit looks good
2023-11-27 12:18:39 +01:00
muellerr 4ae659cb4e changelog update
EIVE/-/pipeline/head This commit looks good
2023-11-27 12:01:45 +01:00
muellerr 228065bf3b add new commands to test new feature 2023-11-27 12:01:03 +01:00
muellerr 947bcf57f5 done for today
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 19:44:24 +01:00
muellerr 77c2c91539 health and system cmds
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 19:42:26 +01:00
muellerr 756944cae3 that should be it
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 19:38:04 +01:00
muellerr 2bb917eab7 last bugfixes
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 19:25:04 +01:00
muellerr f756df43a2 last tests 2023-11-22 19:22:51 +01:00
muellerr 688602e486 cleaning up
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 19:13:22 +01:00
muellerr 21a38ae76a use new the new leaf suppression feature
EIVE/-/pipeline/pr-main This commit looks good
2023-11-22 18:39:12 +01:00
muellerr af02c106b9 looking good
EIVE/-/pipeline/head This commit looks good
2023-11-22 16:40:27 +01:00
muellerr ae239031ed removed old service provider API
EIVE/-/pipeline/head This commit looks good
2023-11-22 14:13:00 +01:00
muellerr d640d547bd OOF3
EIVE/-/pipeline/head This commit looks good
2023-11-22 13:51:33 +01:00
muellerr 02d9d6adfc OOF2
EIVE/-/pipeline/head This commit looks good
2023-11-22 11:21:26 +01:00
muellerr ba24faefa9 this is hardcore 2023-11-22 10:51:26 +01:00
muellerr b3920524ab OOF 2023-11-22 10:17:05 +01:00
muellerr 1508acb7ae Merge remote-tracking branch 'origin/main' into ploc-supv-extensions
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-11-21 17:49:01 +01:00
muellerr 2642a772ad update generator scripts
EIVE/-/pipeline/head This commit looks good
2023-11-21 16:45:10 +01:00
muellerr 7c94ab3404 remove old image locations
EIVE/-/pipeline/pr-main This commit looks good
2023-11-21 16:18:12 +01:00
muellerr 38b3166b3f STR reload json cfg cmd
EIVE/-/pipeline/head This commit looks good
2023-11-21 15:23:41 +01:00
muellerr e285ac1c47 add missing op code
EIVE/-/pipeline/pr-main This commit looks good
2023-11-16 11:09:47 +01:00
muellerr 534d0dc1af deletion by time range cmd
EIVE/-/pipeline/head This commit looks good
2023-11-15 15:48:07 +01:00
muellerr 7cb5766a7a added another helper/wrapper type
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 14:50:49 +01:00
muellerr 6e87a0249c no need for file logging here anymore
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 13:51:53 +01:00
muellerr c0ab3351c9 that's a lot of work..
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 13:48:08 +01:00
muellerr 2259d269dd separate function for raw TM insertion
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 13:19:42 +01:00
muellerr 57a225f926 start adding raw TM DB
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 11:37:57 +01:00
muellerr d9e4ff6973 Merge remote-tracking branch 'origin/main' into introduce_tm_db
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 11:15:02 +01:00
muellerr 07b13c153d Merge pull request 'tmtccmd v7.0.0' (#254) from bump_tmtccmd_dependency into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #254
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-13 11:14:46 +01:00
muellerr 02dc6174bf Merge branch 'main' into introduce_tm_db
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 11:13:38 +01:00
muellerr ce363e3785 this seems to work well
EIVE/-/pipeline/head This commit looks good
2023-11-13 11:12:18 +01:00
muellerr b3c3363591 Merge branch 'bump_tmtccmd_dependency' into introduce_tm_db
EIVE/-/pipeline/head This commit looks good
2023-11-13 09:50:01 +01:00
muellerr aad725a4e5 Merge branch 'main' into bump_tmtccmd_dependency
EIVE/-/pipeline/pr-main This commit looks good
2023-11-13 09:07:50 +01:00
muellerr fd714a118d Merge pull request 'Auto Switch Enable / Disable' (#246) from auto-switch-image-feature into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #246
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-11-13 09:06:13 +01:00
muellerr 4446e471d9 CFDP fixes
EIVE/-/pipeline/head This commit looks good
2023-11-13 09:05:34 +01:00
muellerr 3fe51b08a6 let's try a DB
EIVE/-/pipeline/head This commit looks good
2023-11-13 08:50:51 +01:00
muellerr 6a8f48c493 moved high level handler from tmtccmd to EIVE
EIVE/-/pipeline/head This commit looks good
2023-11-10 19:37:03 +01:00
muellerr 0f6e7eb159 thats a lot of import fixes 2023-11-10 19:23:06 +01:00
muellerr c4bd355146 PLOC SUPV extensions
EIVE/-/pipeline/head This commit looks good
2023-11-08 18:18:40 +01:00
muellerr 92fe9d92de Merge remote-tracking branch 'origin/main' into auto-switch-image-feature
EIVE/-/pipeline/pr-main This commit looks good
2023-10-30 14:45:08 +01:00
muellerr 99c6c8bbd0 v5.10.1
EIVE/-/pipeline/head This commit looks good
2023-10-27 15:02:25 +02:00
meggert 26552ebeca Merge pull request 'more cleaning' (#252) from str-cleaning into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #252
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-27 14:37:00 +02:00
meggert 76e80c259c Merge branch 'main' into str-cleaning
EIVE/-/pipeline/pr-main Build queued...
2023-10-27 14:36:50 +02:00
meggert f59c2b9a9e Merge pull request 'improve supv reset cmd' (#251) from improve-supv-reset-cmd into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #251
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-27 14:36:22 +02:00
meggert bf3565f497 Merge branch 'main' into improve-supv-reset-cmd
EIVE/-/pipeline/pr-main Build queued...
2023-10-27 14:36:17 +02:00
meggert 7f119f36d2 Merge pull request 're-run generators' (#250) from update-events into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #250
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-27 14:35:48 +02:00
muellerr 18728731ed Merge branch 'main' into str-cleaning
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 14:26:16 +02:00
muellerr 14334dae92 re-run generators
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 14:24:31 +02:00
muellerr 0aaf63215b Merge pull request 'prep next version' (#249) from prep_v5.10.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #249
2023-10-27 12:33:28 +02:00
muellerr 72460fdb49 date correction
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 12:30:52 +02:00
muellerr b08f9d9af6 more cleaning
EIVE/-/pipeline/head This commit looks good
2023-10-27 12:28:55 +02:00
muellerr 66c1895cd0 prep next version
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 12:25:31 +02:00
muellerr 4e56bd172e Merge pull request 'STR Extensions' (#244) from str-extensions into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #244
2023-10-27 12:24:07 +02:00
muellerr ff73746935 clear filter
EIVE/-/pipeline/pr-main Build started...
2023-10-27 12:22:52 +02:00
muellerr 5821c60eb4 add contrast set
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 11:24:39 +02:00
muellerr 2ca7bc5a70 histogram set working
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 10:36:51 +02:00
muellerr d9530271c3 fixes and improvements
EIVE/-/pipeline/pr-main This commit looks good
2023-10-27 09:58:53 +02:00
muellerr 97b529318d improve TM output
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 20:45:14 +02:00
muellerr c4598ff058 finally added rudimentary HK filter 2023-10-26 19:49:45 +02:00
meggert b3d903115e push
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 17:48:18 +02:00
meggert 6420bd162a smaller fixes
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 17:14:18 +02:00
meggert 9680066d0a missed hk handling
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 16:54:41 +02:00
meggert d5e923233b fixed read type
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 16:52:29 +02:00
muellerr d0b857dfb7 Merge remote-tracking branch 'origin/main' into str-extensions
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 16:11:09 +02:00
meggert 0c4ab25421 lul
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 13:15:51 +02:00
muellerr 84f50bab83 improve supv reset cmd
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 11:18:30 +02:00
meggert 43d6b98695 Merge pull request 'update generated files' (#245) from cfdp-fault-handler-event into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #245
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-26 09:30:51 +02:00
meggert 4b7debacc6 Merge branch 'main' into cfdp-fault-handler-event
EIVE/-/pipeline/pr-main This commit looks good
2023-10-26 09:30:02 +02:00
muellerr 97f99415d6 Merge pull request 'prep v5.9.0' (#248) from prep_v5.9.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #248
2023-10-24 11:58:48 +02:00
muellerr c195d03b2e prep v5.9.0
EIVE/-/pipeline/head Build started...
2023-10-24 11:58:15 +02:00
muellerr 8f8bcde90e Merge pull request 'PL PCDU parameter update' (#247) from pl-pcdu-param-update into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #247
2023-10-24 11:57:09 +02:00
muellerr d38fc53701 Merge remote-tracking branch 'origin/main' into pl-pcdu-param-update
EIVE/-/pipeline/pr-main Build started...
2023-10-24 11:56:12 +02:00
muellerr e4bc424093 Merge pull request 'CFDP file downlink generated files' (#242) from cfdp-file-downlink into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #242
2023-10-24 11:55:16 +02:00
muellerr 5a87a17fa2 Merge branch 'main' into cfdp-file-downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-10-24 11:54:09 +02:00
muellerr 9567146ff8 this should at least compile
EIVE/-/pipeline/pr-main This commit looks good
2023-10-23 17:46:52 +02:00
muellerr b45b0b2271 another small bug
EIVE/-/pipeline/pr-main This commit looks good
2023-10-23 17:20:04 +02:00
muellerr d900a689da bugfixes
EIVE/-/pipeline/pr-main This commit looks good
2023-10-23 17:16:23 +02:00
muellerr 70c3f9dcaa changelog
EIVE/-/pipeline/head This commit looks good
2023-10-23 17:09:30 +02:00
muellerr 9a1a686b9e PL PCDU param update 2023-10-23 16:30:16 +02:00
muellerr e18ec86eca STR start adding some missing cmds
EIVE/-/pipeline/pr-main This commit looks good
2023-10-23 15:47:48 +02:00
muellerr f52f4b1ce2 Merge remote-tracking branch 'origin/main' into str-extensions
EIVE/-/pipeline/pr-main This commit looks good
2023-10-23 13:52:40 +02:00
meggert ad530925d5 should be done
EIVE/-/pipeline/pr-main This commit looks good
2023-10-19 16:52:08 +02:00
meggert c12dfd06d8 oh no where did all the commands go
EIVE/-/pipeline/pr-main This commit looks good
2023-10-19 16:01:50 +02:00
muellerr 728b7c647c changelog
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-19 15:02:50 +02:00
muellerr a5e38a6856 missing log printout 2023-10-19 15:02:24 +02:00
muellerr f400dea799 done
EIVE/-/pipeline/head This commit looks good
2023-10-19 15:01:23 +02:00
muellerr 6bd94cc167 obj ID update
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-19 11:29:42 +02:00
muellerr 7a664eeab8 update generated files
EIVE/-/pipeline/head This commit looks good
2023-10-19 11:24:23 +02:00
meggert dbfe1dc0d5 not finished yet
EIVE/-/pipeline/pr-main This commit looks good
2023-10-18 16:18:46 +02:00
meggert 0747b6aa72 Merge pull request 'pwr ctrl re-export' (#243) from pwr-ctrl-reexport into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #243
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-16 16:26:57 +02:00
muellerr d388676678 pwr ctrl re-export
EIVE/-/pipeline/head This commit looks good
2023-10-16 15:49:46 +02:00
muellerr 4b6887e304 Merge remote-tracking branch 'origin/main' into str-extensions
EIVE/-/pipeline/head This commit looks good
2023-10-16 15:45:24 +02:00
muellerr 60f7ae5453 new retval
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-10-13 15:23:53 +02:00
muellerr 10e163be75 Merge branch 'refactor-fix-ptme' into cfdp-file-downlink
EIVE/-/pipeline/head This commit looks good
2023-10-13 09:45:11 +02:00
muellerr 84df438e9d new retvals
EIVE/-/pipeline/head This commit looks good
2023-10-13 09:18:11 +02:00
muellerr e249f147bc Merge pull request 'Add Xiphos WDT commands' (#241) from add-xiphos-wdt-handling into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #241
2023-10-11 19:34:48 +02:00
muellerr d5118f0f98 Merge remote-tracking branch 'origin/main' into add-xiphos-wdt-handling
EIVE/-/pipeline/pr-main This commit looks good
2023-10-11 19:33:15 +02:00
muellerr 39e6a04889 prep v5.7.1
EIVE/-/pipeline/head This commit looks good
2023-10-11 18:14:19 +02:00
muellerr eb697befe3 changelog
EIVE/-/pipeline/pr-main This commit looks good
2023-10-11 15:05:40 +02:00
muellerr 0bce6a506c Merge branch 'main' into add-xiphos-wdt-handling
EIVE/-/pipeline/pr-main This commit looks good
2023-10-11 15:05:05 +02:00
muellerr dcae930895 disable works
EIVE/-/pipeline/head This commit looks good
2023-10-11 14:59:56 +02:00
muellerr 28716209a3 Merge remote-tracking branch 'origin/main' into str-extensions
EIVE/-/pipeline/head This commit looks good
2023-10-11 13:57:25 +02:00
muellerr 012e9b148e rerun gens
EIVE/-/pipeline/head This commit looks good
2023-10-11 12:59:09 +02:00
muellerr 34a3a67ac7 Merge remote-tracking branch 'origin/main' into cfdp-file-downlink
EIVE/-/pipeline/head This commit looks good
2023-10-11 12:57:32 +02:00
muellerr aba369f11f added WDT enable and disable command
EIVE/-/pipeline/head This commit looks good
2023-10-11 11:38:45 +02:00
muellerr 1123c4d4df WDT
EIVE/-/pipeline/head This commit looks good
2023-10-11 11:37:48 +02:00
muellerr 7cd1b0070a add WDT module 2023-10-11 11:35:57 +02:00
muellerr ec8febf623 add new obj ID 2023-10-11 10:55:08 +02:00
meggert c10a926b9f Merge pull request 'normal mode for SCEX' (#240) from scex-normal-mode into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #240
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-10-11 10:51:49 +02:00
muellerr 9711dd9242 normal mode for SCEX
EIVE/-/pipeline/head This commit looks good
2023-10-10 18:29:07 +02:00
muellerr d82cecbe6e Merge pull request 'prep v5.7.0' (#239) from prep_v5.7.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #239
2023-10-10 14:33:29 +02:00
muellerr 14820d63ac ruff fixes
EIVE/-/pipeline/head This commit looks good
2023-10-10 14:32:04 +02:00
muellerr 3d27711abb prep 5.7.0
EIVE/-/pipeline/head This commit looks good
2023-10-10 14:29:21 +02:00
muellerr 1d5db0951e changelog 2023-10-10 14:29:06 +02:00
muellerr d67987745d Merge pull request 'Power Controller' (#238) from pwr-ctrl into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #238
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-10-10 13:54:20 +02:00
muellerr bde03fc9c0 gens
EIVE/-/pipeline/pr-main This commit looks good
EIVE/-/pipeline/head This commit looks good
2023-10-10 13:51:35 +02:00
meggert be1ac09515 gens
EIVE/-/pipeline/pr-main This commit looks good
2023-10-10 12:08:55 +02:00
muellerr f0860a785d added few TODOs
EIVE/-/pipeline/head This commit looks good
2023-10-09 16:39:09 +02:00
muellerr ead9c20888 STR extensions
EIVE/-/pipeline/head This commit looks good
2023-10-09 16:31:04 +02:00
meggert d1fde6f1e5 not sure why this is here
EIVE/-/pipeline/pr-main This commit looks good
2023-10-09 15:43:16 +02:00
meggert caa843fb1a fixes and subsystem 2023-10-09 15:43:03 +02:00
meggert 11f7ed8436 pwr ctrl init 2023-10-09 11:10:39 +02:00
meggert 88b0c33632 id defs 2023-10-09 11:10:20 +02:00
muellerr 0c4762712b new events
EIVE/-/pipeline/head This commit looks good
2023-10-04 09:51:51 +02:00
meggert dd74f6c3ca ran gens
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-09-29 09:58:21 +02:00
muellerr 783bdd297a do not use deprecated API
EIVE/-/pipeline/head This commit looks good
2023-09-25 17:41:45 +02:00
muellerr bf399c3d91 Merge pull request 'prep v5.6.0' (#237) from prep_v5.6.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #237
2023-09-14 12:21:37 +02:00
muellerr 06a058fc4d README
EIVE/-/pipeline/pr-main This commit looks good
2023-09-14 12:20:35 +02:00
muellerr b464182df7 README 2023-09-14 12:18:21 +02:00
muellerr a30bccc995 move logo
EIVE/-/pipeline/pr-main This commit looks good
2023-09-14 12:12:58 +02:00
muellerr 980242404a switch to ruff
EIVE/-/pipeline/head This commit looks good
2023-09-14 12:09:50 +02:00
muellerr a8545211e8 prep next version
EIVE/-/pipeline/head This commit looks good
2023-09-14 12:07:25 +02:00
muellerr fe439b4d3c Merge pull request 'CFDP file downlink' (#233) from cfdp-file-downlink into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #233
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-09-14 11:44:22 +02:00
muellerr f63f4b9193 bump tmtccmd dependency
EIVE/-/pipeline/pr-main This commit looks good
2023-09-14 11:26:57 +02:00
muellerr 8d28b321d4 update CFDP source code
EIVE/-/pipeline/pr-main This commit looks good
2023-09-13 13:37:10 +02:00
muellerr 8b45dd8bff Merge remote-tracking branch 'origin/main' into cfdp-file-downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-09-12 14:17:39 +02:00
muellerr b20abc5bfb Merge pull request 'eive-tmtc-bugfixes' (#236) from eive-tmtc-bugfixes into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #236
2023-09-12 13:50:25 +02:00
muellerr af1474f10c bump patch version
EIVE/-/pipeline/pr-main This commit looks good
2023-09-12 13:49:27 +02:00
muellerr 66db12796b black preview mode, flake8
EIVE/-/pipeline/head This commit looks good
2023-09-12 13:48:38 +02:00
muellerr 2d08fc0bfa that appears to be all
EIVE/-/pipeline/head This commit looks good
2023-09-12 13:47:27 +02:00
muellerr 9edc819a97 eive-tmtc bugfixes 2023-09-12 13:35:26 +02:00
muellerr d23cc6834a Merge pull request 'Prepare v5.5.0' (#235) from prep_next_release into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #235
2023-09-12 13:06:18 +02:00
muellerr 33cff5e2d2 changelog
EIVE/-/pipeline/head This commit looks good
2023-09-12 13:05:18 +02:00
muellerr acbcbbe98f some fixes for new version
EIVE/-/pipeline/head This commit looks good
2023-09-12 13:03:54 +02:00
muellerr c3b0470aa6 prep next release 2023-09-12 13:01:40 +02:00
muellerr 1860b754ce Merge remote-tracking branch 'origin/main' into cfdp-file-downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-09-12 10:52:40 +02:00
muellerr 68138c6e79 update generates files
EIVE/-/pipeline/pr-main This commit looks good
2023-09-12 10:51:35 +02:00
muellerr e56f8732be Merge pull request 'Relax SUS FDIR' (#205) from relax-sus-fdir-2 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #205
2023-09-12 10:07:12 +02:00
muellerr af5e81158c update events and retvals
EIVE/-/pipeline/pr-main Build started...
2023-09-12 10:06:26 +02:00
muellerr baa1d20556 Merge branch 'cfdp-file-downlink' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc into cfdp-file-downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-09-08 17:50:25 +02:00
muellerr 1faecb09de some more useful printout 2023-09-08 17:49:59 +02:00
muellerr 1ad621e630 use tmtccmd main branch til next release
EIVE/-/pipeline/pr-main This commit looks good
2023-09-07 16:23:28 +02:00
muellerr 5fc3d8de99 run them yet again
EIVE/-/pipeline/pr-main This commit looks good
2023-09-07 16:13:00 +02:00
muellerr 224328cc85 re-run generators 2023-09-07 16:12:37 +02:00
muellerr d285b1caec Merge remote-tracking branch 'origin/main' into relax-sus-fdir-2
EIVE/-/pipeline/pr-main This commit looks good
2023-09-07 16:03:17 +02:00
muellerr 1f49f0c70d new events 2023-09-07 16:03:12 +02:00
muellerr 649deac81b shorter delay for proxy operations
EIVE/-/pipeline/pr-main This commit looks good
2023-09-06 11:45:32 +02:00
muellerr 7fa1196633 run configs
EIVE/-/pipeline/pr-main This commit looks good
2023-09-06 10:44:25 +02:00
muellerr 1b0a7aeabd changelog
EIVE/-/pipeline/pr-main This commit looks good
2023-09-04 16:13:20 +02:00
muellerr 412d67494d bump pyproject.toml 2023-09-04 16:12:42 +02:00
muellerr 25377ccfa2 update retvals
EIVE/-/pipeline/pr-main This commit looks good
2023-09-04 11:20:08 +02:00
muellerr 6657bf072c looking good
EIVE/-/pipeline/pr-main This commit looks good
2023-09-04 11:17:25 +02:00
muellerr 7f79ef6c12 need absolute paths..
EIVE/-/pipeline/pr-main This commit looks good
2023-08-31 15:19:38 +02:00
muellerr d72b7d9d66 smaller tweaks, generator updates
EIVE/-/pipeline/pr-main This commit looks good
2023-08-31 15:10:07 +02:00
muellerr c687b1411c adapt run file for file downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-08-31 09:25:57 +02:00
muellerr c2bed714dc call correct conversion function
EIVE/-/pipeline/pr-main This commit looks good
2023-08-30 11:37:17 +02:00
muellerr f9f8f9481f hmm
EIVE/-/pipeline/pr-main This commit looks good
2023-08-30 11:04:05 +02:00
muellerr 8d6ca602f2 this finally looks correct
EIVE/-/pipeline/pr-main This commit looks good
2023-08-29 23:28:57 +02:00
muellerr c0bd5f572c small fix 2023-08-29 22:56:26 +02:00
muellerr 25c7decb1e add local entity as remote entity cfg 2023-08-29 22:34:57 +02:00
muellerr cc7b1d3331 this is annoying.. 2023-08-29 21:57:10 +02:00
muellerr 948f3a1a41 improve architecture a bit 2023-08-29 21:41:29 +02:00
muellerr 8743f59b56 fix for HK level parsing 2023-08-29 21:31:27 +02:00
muellerr 2cc4a18c1e Merge remote-tracking branch 'origin/main' into cfdp-file-downlink 2023-08-29 21:31:14 +02:00
meggert b1fbad39e3 Merge pull request 'Prep OBSW v6.4.1' (#234) from prep-obsw-v6.4.1 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #234
2023-08-21 18:45:25 +02:00
meggert de57b9da5b events (wherever these changes come from?)
EIVE/-/pipeline/head This commit looks good
2023-08-21 15:59:55 +02:00
muellerr 55624f0447 Merge branch 'cfdp-file-downlink' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc into cfdp-file-downlink
EIVE/-/pipeline/pr-main This commit looks good
2023-08-17 16:44:41 +02:00
muellerr 9841076699 maybe this works better 2023-08-17 16:44:34 +02:00
muellerr f1876681fd Merge branch 'main' into cfdp-file-downlink
EIVE/-/pipeline/pr-main There was a failure building this commit
2023-08-17 16:44:00 +02:00
muellerr 14b558b7f7 prepare file downlink
EIVE/-/pipeline/head There was a failure building this commit
2023-08-17 16:42:53 +02:00
muellerr 54a7c3566f added missing stuff
EIVE/-/pipeline/head This commit looks good
2023-08-17 11:34:54 +02:00
muellerr 011be9837e remove more unused includes
EIVE/-/pipeline/head This commit looks good
2023-08-17 11:34:34 +02:00
muellerr 88161ed125 more cleaning up, new cfdp module
EIVE/-/pipeline/head This commit looks good
2023-08-17 11:33:42 +02:00
muellerr f02230804d Merge pull request 'mini fixes' (#232) from mini-fixes into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #232
2023-08-16 14:04:03 +02:00
meggert 8ddcc37c74 mini fixes
EIVE/-/pipeline/head This commit looks good
2023-08-16 13:25:29 +02:00
muellerr b50c75c13c Merge pull request 'PLOC SUPV HK parsing' (#231) from parse-ploc-supv-hk into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #231
2023-08-15 14:39:09 +02:00
muellerr 36799ef51d v5.4.3
EIVE/-/pipeline/pr-main This commit looks good
2023-08-15 14:38:28 +02:00
muellerr 772ef5b323 changelog
EIVE/-/pipeline/pr-main This commit looks good
2023-08-15 14:35:45 +02:00
muellerr 2f8bed4581 works
EIVE/-/pipeline/head This commit looks good
2023-08-15 14:31:49 +02:00
muellerr 72def77d40 parse ploc supv HK
EIVE/-/pipeline/head This commit looks good
2023-08-15 14:15:06 +02:00
muellerr bc1a1774a6 Merge pull request 'added none entry for new enum' (#230) from submode-enum-none-entry into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #230
2023-08-15 13:58:07 +02:00
muellerr 4b08f5dd5b prep v5.4.2
EIVE/-/pipeline/pr-main Build queued...
2023-08-15 13:57:43 +02:00
muellerr b0562ea9c7 added none entry for new enum
EIVE/-/pipeline/head Build queued...
2023-08-15 13:54:18 +02:00
muellerr f76cd94535 prep v5.4.1
EIVE/-/pipeline/head This commit looks good
2023-08-15 13:28:54 +02:00
muellerr 8a1e5b7b99 changelog
EIVE/-/pipeline/head This commit looks good
2023-08-15 13:21:10 +02:00
muellerr 0e208629b0 subsystem enum is int enum now 2023-08-15 13:20:43 +02:00
muellerr 403657110b prep v5.4.0
EIVE/-/pipeline/head This commit looks good
2023-08-15 13:13:06 +02:00
muellerr 23f21b40eb Merge pull request 'PL PCDU enum' (#229) from new-pl-pcdu-enum into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #229
2023-08-15 13:07:40 +02:00
muellerr a6b3ccb4cc more better names
EIVE/-/pipeline/head This commit looks good
2023-08-15 11:51:41 +02:00
muellerr d7b494a950 better name 2023-08-15 11:51:12 +02:00
muellerr 73bc043538 move enum
EIVE/-/pipeline/head This commit looks good
2023-08-15 11:50:39 +02:00
muellerr 02e7e809de PL PCDU enum
EIVE/-/pipeline/head This commit looks good
2023-08-15 11:47:07 +02:00
muellerr d6f6aff139 Merge pull request 'SGP4 Propagator Prep' (#227) from spg4-propagator into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #227
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-08-15 10:46:27 +02:00
meggert d39a49bd4c Merge branch 'main' into spg4-propagator
EIVE/-/pipeline/pr-main This commit looks good
2023-08-15 09:31:15 +02:00
meggert f42318bc57 deprecated import
EIVE/-/pipeline/pr-main This commit looks good
2023-08-14 15:58:44 +02:00
muellerr fd3a799019 Merge pull request 'new pdec event' (#228) from pdec-config-readback into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #228
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-08-14 15:47:07 +02:00
muellerr 1664e6adb5 Merge branch 'main' into pdec-config-readback
EIVE/-/pipeline/pr-main Build queued...
2023-08-14 15:46:57 +02:00
muellerr 8042f3607d new pdec event
EIVE/-/pipeline/head This commit looks good
2023-08-14 15:09:34 +02:00
muellerr 59278447fd Merge branch 'main' into spg4-propagator
EIVE/-/pipeline/pr-main This commit looks good
2023-08-14 14:13:03 +02:00
meggert b58977fd65 naming
EIVE/-/pipeline/pr-main This commit looks good
2023-08-14 12:50:50 +02:00
muellerr beae6b3f05 Merge pull request 'More GPS TM' (#226) from more-gps-tm into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #226
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-08-14 10:38:16 +02:00
meggert 12c60ac310 goddamnit
EIVE/-/pipeline/pr-main This commit looks good
2023-08-09 14:58:28 +02:00
meggert 1acbb8bb43 less copy-pasta helps sometimes
EIVE/-/pipeline/pr-main This commit looks good
2023-08-08 13:39:36 +02:00
meggert 051e9e6ffb lets be clean about this
EIVE/-/pipeline/pr-main This commit looks good
2023-08-08 10:01:50 +02:00
meggert 6d88746ec3 fix
EIVE/-/pipeline/head This commit looks good
2023-08-08 09:40:37 +02:00
meggert 5571a6852e init 2023-08-07 14:21:58 +02:00
meggert 1ddb93410e wörks
EIVE/-/pipeline/pr-main This commit looks good
2023-08-04 16:24:16 +02:00
meggert b0b186ac1f we need this sed_id thingy
EIVE/-/pipeline/pr-main This commit looks good
2023-08-04 15:39:40 +02:00
meggert f95331742b fix
EIVE/-/pipeline/pr-main This commit looks good
2023-08-04 15:38:32 +02:00
meggert c91ad9e08b bump
EIVE/-/pipeline/pr-main This commit looks good
2023-08-04 15:01:34 +02:00
meggert fcabaa5b09 rework gps data handling
EIVE/-/pipeline/pr-main This commit looks good
2023-08-04 14:51:55 +02:00
meggert bf9ab7edf7 this was the fun part
EIVE/-/pipeline/head This commit looks good
2023-08-04 14:35:09 +02:00
muellerr 957d756d1e Merge remote-tracking branch 'origin/main' into relax-sus-fdir-2
EIVE/-/pipeline/pr-main This commit looks good
2023-08-03 13:36:27 +02:00
meggert 4b054b7628 Merge pull request 'new scex event' (#225) from scex-event into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #225
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-08-02 09:46:09 +02:00
muellerr 9001a28545 new scex event
EIVE/-/pipeline/head Build queued...
2023-08-02 09:41:19 +02:00
meggert 6b2fbc6917 Merge pull request 'SCEX code improvements' (#224) from scex-code-improvements into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #224
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-27 11:21:38 +02:00
muellerr ab770a0057 Merge remote-tracking branch 'origin/main' into scex-code-improvements
EIVE/-/pipeline/head This commit looks good
2023-07-27 09:59:49 +02:00
muellerr 0cbf28f25c scex code improvenemtns
EIVE/-/pipeline/head Build queued...
2023-07-27 09:59:34 +02:00
meggert cbcc06ede7 Merge pull request 'ACS downwards compatibility' (#223) from acs-downwards-compat into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #223
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-26 13:17:35 +02:00
muellerr a55aa4a667 added comments
EIVE/-/pipeline/head This commit looks good
2023-07-26 13:15:08 +02:00
muellerr d2324dace9 changelog and init
EIVE/-/pipeline/head This commit looks good
2023-07-26 13:13:41 +02:00
muellerr 1e4e524f95 update CTRL STATE enum and make it global 2023-07-26 13:12:12 +02:00
muellerr 39d6ec73c2 Merge pull request 'prep v5.3.0' (#222) from prep-v5.3.0 into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #222
2023-07-26 12:56:18 +02:00
muellerr 74cfa2949a flake8 and black
EIVE/-/pipeline/pr-main This commit looks good
2023-07-26 12:54:13 +02:00
muellerr ffdb4451f6 prep v5.3.0
EIVE/-/pipeline/head This commit looks good
2023-07-26 12:51:56 +02:00
muellerr 15716c988b Merge pull request 'new safe mode' (#221) from new-safe into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #221
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-07-26 09:51:26 +02:00
meggert f5ec50b674 guess i added PTG strats in june ...
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-07-24 09:47:52 +02:00
meggert 02b70ee203 Merge branch 'main' into new-safe
EIVE/-/pipeline/head This commit looks good
2023-07-24 09:25:22 +02:00
muellerr 95b6954175 Merge pull request 'new event' (#220) from active-sd-info-event into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #220
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-21 11:49:59 +02:00
muellerr a82cbff5a8 works well
EIVE/-/pipeline/pr-main This commit looks good
2023-07-21 11:47:37 +02:00
muellerr 87b766dfb8 active SD info
EIVE/-/pipeline/pr-main This commit looks good
2023-07-21 11:36:01 +02:00
meggert 09b7a01ff6 init
EIVE/-/pipeline/head This commit looks good
2023-07-21 11:20:20 +02:00
muellerr fd6b76bfdd update events.csv
EIVE/-/pipeline/pr-main This commit looks good
2023-07-21 11:04:32 +02:00
muellerr 40c086086b new event
EIVE/-/pipeline/head This commit looks good
2023-07-21 10:26:37 +02:00
meggert 83e8fe0587 Merge pull request 'TMTC improvements' (#219) from tmtc-improvements into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #219
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-19 14:46:51 +02:00
muellerr 6cffae4397 the name is okay..
EIVE/-/pipeline/head This commit looks good
2023-07-19 14:42:02 +02:00
muellerr d73ef3a314 better name for HK module
EIVE/-/pipeline/head This commit looks good
2023-07-19 14:41:19 +02:00
meggert 0b8bd61e80 Merge pull request 'Update STR Commands' (#218) from update-str-cmds into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #218
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-14 12:24:50 +02:00
muellerr 380a02ee94 add new STR COM error event
EIVE/-/pipeline/pr-main This commit looks good
2023-07-13 21:09:14 +02:00
muellerr c6e2e2de49 Merge branch 'main' into update-str-cmds
EIVE/-/pipeline/pr-main This commit looks good
2023-07-13 18:28:15 +02:00
meggert 6479aeda63 Merge pull request 'STR: time conversion bugfix' (#217) from str-time-conversion-fix into main
EIVE/-/pipeline/head Something is wrong with the build of this commit
Reviewed-on: #217
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-13 14:59:58 +02:00
muellerr 26cf112121 Merge branch 'str-time-conversion-fix' into update-str-cmds
EIVE/-/pipeline/head This commit looks good
2023-07-13 14:59:03 +02:00
muellerr 62bd535622 time conversion bugfix
EIVE/-/pipeline/head This commit looks good
2023-07-13 14:49:03 +02:00
muellerr eea7683581 Merge pull request 'prep v5.2.0' (#216) from prep_v5.2.0 into main
EIVE/-/pipeline/head Something is wrong with the build of this commit
Reviewed-on: #216
2023-07-13 11:55:26 +02:00
muellerr df6aa80169 changelog
EIVE/-/pipeline/head This commit looks good
2023-07-13 11:47:47 +02:00
muellerr 2fd1a46e66 bump tmtccmd to v5.0.0 2023-07-13 11:46:38 +02:00
muellerr 2153aa2842 prep v5.2.0
EIVE/-/pipeline/head This commit looks good
2023-07-13 11:30:43 +02:00
muellerr 1f2f2aac13 update STR commands
EIVE/-/pipeline/head This commit looks good
2023-07-13 10:53:42 +02:00
meggert 9be81f1725 Merge pull request 'max burn time event' (#213) from tcs-heater-upper-limit into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #213
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-11 10:15:55 +02:00
muellerr 601adfc9c2 Merge branch 'main' into tcs-heater-upper-limit
EIVE/-/pipeline/pr-main This commit looks good
2023-07-11 09:45:37 +02:00
meggert ac84ac2c3e Merge pull request 'TCS CTRL Info Set' (#215) from tcs-ctrl-info-set into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #215
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-11 09:31:49 +02:00
meggert 7ed18bd570 Merge pull request 'HK level is a CLI argument now' (#214) from hk-level-as-cli-arg into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #214
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-07-11 09:21:39 +02:00
muellerr e27ad147d4 done
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-07-10 18:29:24 +02:00
muellerr ba47757b50 added way to request new HK set
EIVE/-/pipeline/head This commit looks good
2023-07-10 16:29:54 +02:00
muellerr 7e9c626ec8 add command demultiplexing for tcs ctrl 2023-07-10 16:25:44 +02:00
muellerr 8d6dd97d85 Merge branch 'hk-level-as-cli-arg' into tcs-ctrl-info-set
EIVE/-/pipeline/head This commit looks good
2023-07-10 16:11:18 +02:00
muellerr 2fae5613ce fix
EIVE/-/pipeline/pr-main This commit looks good
2023-07-10 16:09:42 +02:00
muellerr fdb14cbdc5 HK level is a CLI argument now
EIVE/-/pipeline/head There was a failure building this commit
2023-07-10 16:07:01 +02:00
muellerr 0cef3fa924 and now it works
EIVE/-/pipeline/head There was a failure building this commit
2023-07-10 16:04:36 +02:00
muellerr 37a35c4446 cli argument
EIVE/-/pipeline/head There was a failure building this commit
2023-07-10 16:03:08 +02:00
muellerr 15d25b4c5b max burn time event
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-07-07 12:06:27 +02:00
muellerr 069f84d220 Merge pull request 'Add TCS CTRL heater events' (#212) from add-tcs-ctrl-heater-events into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #212
2023-07-07 10:53:32 +02:00
muellerr 627a16d51a Merge branch 'main' into add-tcs-ctrl-heater-events
EIVE/-/pipeline/pr-main This commit looks good
2023-07-06 19:03:27 +02:00
muellerr fcfae1f67f Merge pull request 'add cmd to set max reboot watchdog count' (#210) from rwd-improvements into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #210
2023-07-06 19:03:05 +02:00
muellerr 01ebd356ba Merge branch 'main' into rwd-improvements 2023-07-06 19:02:58 +02:00
muellerr 5785bbd0cc changelog
EIVE/-/pipeline/head This commit looks good
2023-07-06 19:01:15 +02:00
muellerr d3e6101447 add new events 2023-07-06 19:00:39 +02:00
muellerr 6d5bde40db add back TMP1075 health commands
EIVE/-/pipeline/head There was a failure building this commit
2023-07-06 16:00:10 +02:00
muellerr c48f04eed5 add TCS submode
EIVE/-/pipeline/head There was a failure building this commit
2023-07-06 14:15:28 +02:00
muellerr 18304c31fa prep v5.1.0
EIVE/-/pipeline/head There was a failure building this commit
2023-06-28 13:39:20 +02:00
meggert 8caa408cbd Merge pull request 'Internal error reporter' (#211) from internal-error-reporter into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #211
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-06-28 13:16:37 +02:00
muellerr 4a983958bf changelog
EIVE/-/pipeline/pr-main This commit looks good
2023-06-28 13:15:01 +02:00
muellerr 03ec5bdc39 changelog
EIVE/-/pipeline/head This commit looks good
2023-06-28 13:14:07 +02:00
muellerr 9c5d6a15db APP logger should be root logger
EIVE/-/pipeline/head This commit looks good
2023-06-28 13:10:10 +02:00
muellerr ddc80071e0 changelogge
EIVE/-/pipeline/head This commit looks good
2023-06-28 10:43:11 +02:00
muellerr deb0275bb5 add cmd to set max reboot watchdog count
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-06-24 18:36:33 +02:00
muellerr ec0ebc3653 handle FW info event
EIVE/-/pipeline/head There was a failure building this commit
2023-06-23 02:05:04 +02:00
muellerr c9f4a8070d Merge pull request 'v5.0.0' (#209) from v5.0.0-dev into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #209
2023-06-22 17:33:52 +02:00
muellerr b917358b9f prep v5.0.0
EIVE/-/pipeline/head Build started...
2023-06-22 17:33:20 +02:00
meggert 5db9f383a6 Merge pull request 'CP Helper force flag' (#208) from cp-helper-force-flag into v5.0.0-dev
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #208
2023-06-22 16:37:22 +02:00
muellerr fe3accb9ad Merge branch 'main' into cp-helper-force-flag
EIVE/-/pipeline/pr-main Build queued...
2023-06-22 16:27:44 +02:00
muellerr 68d74a4748 fix
EIVE/-/pipeline/head This commit looks good
2023-06-22 16:26:47 +02:00
muellerr b6ec7da7fa force flag cp helper 2023-06-22 16:26:33 +02:00
meggert c7df13fa68 Merge pull request 'Core Controller Extension' (#207) from core-ctrl-extension into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #207
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-06-22 16:25:31 +02:00
muellerr daceb6bc1d remove pass
EIVE/-/pipeline/pr-main Build queued...
2023-06-22 16:18:52 +02:00
muellerr 8239e610cc works
EIVE/-/pipeline/head This commit looks good
2023-06-22 14:52:28 +02:00
muellerr b28d938468 core controller extension 2023-06-22 14:40:46 +02:00
meggert e0457831d7 Merge pull request 'fw info event' (#206) from new-fw-info-event into main
EIVE/-/pipeline/head This commit looks good
Reviewed-on: #206
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-06-22 09:19:31 +02:00
muellerr 96fab88a55 Merge branch 'main' into new-fw-info-event
EIVE/-/pipeline/pr-main This commit looks good
2023-06-21 20:26:31 +02:00
meggert 50f2eb42f3 Merge pull request 'Additions for I2C' (#204) from additions-for-i2c-2 into main
EIVE/-/pipeline/head There was a failure building this commit
Reviewed-on: #204
Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
2023-06-21 19:14:15 +02:00
muellerr 1bb8bea8d9 fw info event
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2023-06-21 19:01:19 +02:00
muellerr 0a05873f4e Squashed commit of the following:
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
commit 2b2ad0a23a
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Tue Jun 13 07:54:41 2023 +0200

    docs for events

commit 00205f0e75
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Tue Jun 13 07:43:12 2023 +0200

    new sus event

commit eae0120643
Merge: 4a990e7 fc3cf48
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 13:36:27 2023 +0200

    Merge pull request 'switched to prebuilt docker image' (#198) from mohr/docker into main

    Reviewed-on: #198

commit fc3cf480dc
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:14:52 2023 +0200

    bump docker version

commit acca981260
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:12:47 2023 +0200

    jenkins user in docker

commit 822eaa4c89
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:01:26 2023 +0200

    removed empty `environment` block in Jenkinsfile which Jenkins does not like

    diva....

commit 252d140b8e
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 11:56:39 2023 +0200

    switched to prebuilt docker image

commit 4a990e704b
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:58:15 2023 +0200

    added basic automation file

commit 522f273c99
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:48:02 2023 +0200

    add date in changelog

commit 1724a90a26
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:46:00 2023 +0200

    add release checklist

commit 7b21070363
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:42:28 2023 +0200

    linter fixes, version bump

commit d390168829
Merge: 238bbd5 a969481
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Sat Jun 10 14:10:42 2023 +0200

    Merge pull request 'v4.0.0-dev' (#197) from v4.0.0-dev into main

    Reviewed-on: #197

commit a969481698
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 18:53:11 2023 +0200

    imtq parsing fixes

commit 8bdba71dc3
Merge: 8804a4e e3800ac
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:44:00 2023 +0200

    Merge pull request 'Rework logging handling' (#194) from rework_logging_handling into v4.0.0-dev

    Reviewed-on: #194

commit e3800ac0c9
Merge: 1548278 8804a4e
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:43:21 2023 +0200

    Merge branch 'v4.0.0-dev' into rework_logging_handling

commit 8804a4e8e9
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:43:08 2023 +0200

    bump tmtccmd to v5.0.0rc0

commit 1548278ad6
Merge: 148a52a ac140ae
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:42:26 2023 +0200

    Merge remote-tracking branch 'origin/v4.0.0-dev' into rework_logging_handling

commit 148a52a69a
Merge: e45072c 238bbd5
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:42:16 2023 +0200

    Merge remote-tracking branch 'origin/main' into rework_logging_handling

commit ac140aeb2c
Merge: c6c4b9a a5a30d3
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:41:55 2023 +0200

    Merge pull request 'moved 2 parameters' (#196) from move-pdu-datavar into v4.0.0-dev

    Reviewed-on: #196

commit a5a30d37eb
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:41:49 2023 +0200

    tweak changelog

commit d9194207a4
Merge: 14d14f1 c6c4b9a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:39:38 2023 +0200

    Merge remote-tracking branch 'origin/v4.0.0-dev' into move-pdu-datavar

commit 14d14f12c0
Merge: 17dd9de 238bbd5
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:27:52 2023 +0200

    Merge branch 'v3.2.0-dev' into move-pdu-datavar

commit 17dd9de51e
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:25:51 2023 +0200

    moved 2 parameters

commit 238bbd5843
Merge: 6182369 de02d81
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:16:37 2023 +0200

    Merge pull request 'better exception handling' (#195) from better-exception-handling into v3.2.0-dev

    Reviewed-on: #195

commit de02d81e1d
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 16:56:43 2023 +0200

    better exception handling

commit e45072c38d
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 25 11:31:06 2023 +0200

    import replacement

commit fe96f115d5
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed May 24 13:50:37 2023 +0200

    that should be all

commit e9e43f03d2
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed May 24 13:44:45 2023 +0200

    more stuff

commit aab093cc0a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Tue May 23 09:54:51 2023 +0200

    rework it

commit c6c4b9a995
Merge: 280c724 5f379bf
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 22 10:42:49 2023 +0200

    Merge pull request 'Bugfix CFDP' (#191) from bugfix-cfdp into v4.0.0-dev

    Reviewed-on: #191

commit 6182369e4f
Merge: d23c0c2 620360c
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 22 10:41:54 2023 +0200

    Merge pull request 'generic systemctl' (#193) from generic_systemctl into main

    Reviewed-on: #193
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit 620360c8e8
Merge: 49dde29 d23c0c2
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 19 11:02:35 2023 +0200

    Merge branch 'main' into generic_systemctl

commit 49dde29847
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 19 11:01:06 2023 +0200

    generic systemctl

commit d23c0c20fc
Merge: 280c724 ef1da1e
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Fri May 19 10:44:01 2023 +0200

    Merge pull request 'new MPSoC events and retvals' (#192) from mpsoc_new_events_retvals into main

    Reviewed-on: #192
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit ef1da1e882
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Wed May 17 19:00:17 2023 +0200

    changelog

commit 6ec0ce20fa
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Wed May 17 17:15:43 2023 +0200

    new event

commit 5f379bf2bb
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 16:43:40 2023 +0200

    changelog

commit 7c1e7226e0
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 16:42:56 2023 +0200

    bugfix CFDP: bump tmtccmd

commit b8e1c7afe9
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 15:20:56 2023 +0200

    new MPSoC events and retvals

commit 280c72439e
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 14:18:18 2023 +0200

    bugfix MPSoC command

commit 14c42a91ff
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 13:43:26 2023 +0200

    rework read and write prompts for MPSoC

commit dd3e4c649b
Merge: 3b16717 0c1bfc6
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 15 09:10:41 2023 +0200

    Merge pull request 'MPSoC flash content reporter' (#190) from mpsoc_action_reply_handler into main

    Reviewed-on: #190
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit 3b16717ce2
Merge: 377e98b f1a0334
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 12 16:27:39 2023 +0200

    Merge pull request 'fixfixfix' (#189) from ploc_pwr_switching_fix into main

    Reviewed-on: #189

commit f1a0334d3d
Merge: f090c3a 377e98b
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 12 16:27:33 2023 +0200

    Merge branch 'main' into ploc_pwr_switching_fix

commit 0c1bfc6fd3
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:27:16 2023 +0200

    bump changelog

commit 04bbe057e7
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:24:45 2023 +0200

    flash c ontent report works now

commit e05a54b076
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:08:57 2023 +0200

    somethings wrong with the format

commit ef0adef04a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 15:51:17 2023 +0200

    start adding action reply handler for MPSoC

commit 377e98b5c2
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 13:22:58 2023 +0200

    bugfix MPSoC HK parsing

commit 87e5abe8eb
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 11:51:47 2023 +0200

    add missing command list of PLOC MPSoC commands

commit f090c3af66
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 11 17:55:15 2023 +0200

    fixfixfix

commit 13fd9a7d84
Merge: 4d921e0 bbcc0f9
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 15:30:49 2023 +0200

    Merge pull request 'impl MPSoC HK parsing' (#188) from mpsoc_commands into main

    Reviewed-on: #188
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit bbcc0f9de7
Merge: a0aa652 1ab8710
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 15:17:12 2023 +0200

    Merge branch 'mpsoc_commands' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc into mpsoc_commands

commit a0aa6525e4
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 15:17:00 2023 +0200

    fix

commit 1ab8710040
Merge: f480d86 4d921e0
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 4 14:51:13 2023 +0200

    Merge branch 'main' into mpsoc_commands

commit f480d86fbd
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 14:50:38 2023 +0200

    impl MPSoC HK parsing

commit 4d921e01af
Merge: e85d1a1 b505524
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 12:01:43 2023 +0200

    Merge pull request 'MPSoC module update' (#187) from mpsoc_commands into main

    Reviewed-on: #187
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit b505524e0b
Merge: e0e9a31 e85d1a1
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 12:01:33 2023 +0200

    Merge branch 'main' into mpsoc_commands

commit e0e9a310b9
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 11:51:50 2023 +0200

    add command to get flash dir content

commit 0e9ebefc87
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 11:27:12 2023 +0200

    new mpsoc commands

commit e85d1a1966
Merge: 60fba8b 4ff50b6
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed May 3 13:36:31 2023 +0200

    Merge pull request 'most important bugfix' (#186) from most-important-bugfix into main

    Reviewed-on: #186

commit 4ff50b6559
Author: meggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed May 3 13:34:14 2023 +0200

    bub

commit 60fba8b6d9
Merge: 5fbd19b 1707f24
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Apr 28 10:25:35 2023 +0200

    Merge pull request 'more system modes' (#185) from more-system-modes into main

    Reviewed-on: #185

commit 1707f24612
Author: meggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed Apr 19 15:10:44 2023 +0200

    more system modes

commit 5fbd19bb6c
Merge: 4083a30 0c6a967
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Mon Apr 17 18:41:08 2023 +0200

    Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc
2023-06-19 18:03:45 +02:00
muellerr 80d231586e Squashed commit of the following:
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
commit 79060acfb6
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Sun Jun 18 16:19:00 2023 +0200

    add enable HK set cmd

commit b9038f1c86
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Sun Jun 18 13:37:21 2023 +0200

    add back PL PCDU 1

commit fd20a9fe3c
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Sun Jun 18 13:30:45 2023 +0200

    add TMP1075 HK handling

commit 936dcdf334
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Thu Jun 15 05:15:05 2023 +0200

    remove sw update, add fake test files

commit 29fc7a5fca
Merge: e106e0b 2202c95
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:46:34 2023 +0200

    Merge pull request 'Some minor tweaks for BPX commands' (#202) from add-bpx-man-heater-cmds into main

    Reviewed-on: #202

commit 2202c95c4c
Merge: b38da20 e106e0b
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:46:23 2023 +0200

    Merge branch 'main' into add-bpx-man-heater-cmds

commit b38da20953
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:46:00 2023 +0200

    some better doc

commit f9a61fa485
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:45:03 2023 +0200

    clean up batt cmds a bit

commit e106e0bc63
Merge: 970c899 d1bd8f1
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:43:19 2023 +0200

    Merge pull request 'added BPX manual heater commands' (#201) from add-bpx-man-heater-cmds into main

    Reviewed-on: #201

commit d1bd8f15d9
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 07:42:12 2023 +0200

    added BPX manual heater commands

commit 970c8998f0
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 06:16:17 2023 +0200

    prep v4.1.0

commit 8a87d83653
Merge: eae0120 cf55b36
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 06:06:58 2023 +0200

    Merge pull request 'Add more heater commands' (#200) from add-heater-cmd-ids into main

    Reviewed-on: #200

commit cf55b3630c
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 05:16:21 2023 +0200

    add set cfg and rst cfg

commit 656e75052b
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 02:59:20 2023 +0200

    fix broken IDs

commit e91bf01daf
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 14 02:03:20 2023 +0200

    add heater cmd IDs

commit eae0120643
Merge: 4a990e7 fc3cf48
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 13:36:27 2023 +0200

    Merge pull request 'switched to prebuilt docker image' (#198) from mohr/docker into main

    Reviewed-on: #198

commit fc3cf480dc
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:14:52 2023 +0200

    bump docker version

commit acca981260
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:12:47 2023 +0200

    jenkins user in docker

commit 822eaa4c89
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 12:01:26 2023 +0200

    removed empty `environment` block in Jenkinsfile which Jenkins does not like

    diva....

commit 252d140b8e
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de>
Date:   Sun Jun 11 11:56:39 2023 +0200

    switched to prebuilt docker image

commit 4a990e704b
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:58:15 2023 +0200

    added basic automation file

commit 522f273c99
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:48:02 2023 +0200

    add date in changelog

commit 1724a90a26
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:46:00 2023 +0200

    add release checklist

commit 7b21070363
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Sat Jun 10 14:42:28 2023 +0200

    linter fixes, version bump

commit d390168829
Merge: 238bbd5 a969481
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Sat Jun 10 14:10:42 2023 +0200

    Merge pull request 'v4.0.0-dev' (#197) from v4.0.0-dev into main

    Reviewed-on: #197

commit a969481698
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 18:53:11 2023 +0200

    imtq parsing fixes

commit 8bdba71dc3
Merge: 8804a4e e3800ac
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:44:00 2023 +0200

    Merge pull request 'Rework logging handling' (#194) from rework_logging_handling into v4.0.0-dev

    Reviewed-on: #194

commit e3800ac0c9
Merge: 1548278 8804a4e
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:43:21 2023 +0200

    Merge branch 'v4.0.0-dev' into rework_logging_handling

commit 8804a4e8e9
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:43:08 2023 +0200

    bump tmtccmd to v5.0.0rc0

commit 1548278ad6
Merge: 148a52a ac140ae
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:42:26 2023 +0200

    Merge remote-tracking branch 'origin/v4.0.0-dev' into rework_logging_handling

commit 148a52a69a
Merge: e45072c 238bbd5
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:42:16 2023 +0200

    Merge remote-tracking branch 'origin/main' into rework_logging_handling

commit ac140aeb2c
Merge: c6c4b9a a5a30d3
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Jun 9 12:41:55 2023 +0200

    Merge pull request 'moved 2 parameters' (#196) from move-pdu-datavar into v4.0.0-dev

    Reviewed-on: #196

commit a5a30d37eb
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:41:49 2023 +0200

    tweak changelog

commit d9194207a4
Merge: 14d14f1 c6c4b9a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri Jun 9 12:39:38 2023 +0200

    Merge remote-tracking branch 'origin/v4.0.0-dev' into move-pdu-datavar

commit 14d14f12c0
Merge: 17dd9de 238bbd5
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:27:52 2023 +0200

    Merge branch 'v3.2.0-dev' into move-pdu-datavar

commit 17dd9de51e
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:25:51 2023 +0200

    moved 2 parameters

commit 238bbd5843
Merge: 6182369 de02d81
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 17:16:37 2023 +0200

    Merge pull request 'better exception handling' (#195) from better-exception-handling into v3.2.0-dev

    Reviewed-on: #195

commit de02d81e1d
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed Jun 7 16:56:43 2023 +0200

    better exception handling

commit e45072c38d
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 25 11:31:06 2023 +0200

    import replacement

commit fe96f115d5
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed May 24 13:50:37 2023 +0200

    that should be all

commit e9e43f03d2
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Wed May 24 13:44:45 2023 +0200

    more stuff

commit aab093cc0a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Tue May 23 09:54:51 2023 +0200

    rework it

commit c6c4b9a995
Merge: 280c724 5f379bf
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 22 10:42:49 2023 +0200

    Merge pull request 'Bugfix CFDP' (#191) from bugfix-cfdp into v4.0.0-dev

    Reviewed-on: #191

commit 6182369e4f
Merge: d23c0c2 620360c
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 22 10:41:54 2023 +0200

    Merge pull request 'generic systemctl' (#193) from generic_systemctl into main

    Reviewed-on: #193
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit 620360c8e8
Merge: 49dde29 d23c0c2
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 19 11:02:35 2023 +0200

    Merge branch 'main' into generic_systemctl

commit 49dde29847
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 19 11:01:06 2023 +0200

    generic systemctl

commit d23c0c20fc
Merge: 280c724 ef1da1e
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Fri May 19 10:44:01 2023 +0200

    Merge pull request 'new MPSoC events and retvals' (#192) from mpsoc_new_events_retvals into main

    Reviewed-on: #192
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit ef1da1e882
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Wed May 17 19:00:17 2023 +0200

    changelog

commit 6ec0ce20fa
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Wed May 17 17:15:43 2023 +0200

    new event

commit 5f379bf2bb
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 16:43:40 2023 +0200

    changelog

commit 7c1e7226e0
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 16:42:56 2023 +0200

    bugfix CFDP: bump tmtccmd

commit b8e1c7afe9
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 15:20:56 2023 +0200

    new MPSoC events and retvals

commit 280c72439e
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 14:18:18 2023 +0200

    bugfix MPSoC command

commit 14c42a91ff
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Mon May 15 13:43:26 2023 +0200

    rework read and write prompts for MPSoC

commit dd3e4c649b
Merge: 3b16717 0c1bfc6
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Mon May 15 09:10:41 2023 +0200

    Merge pull request 'MPSoC flash content reporter' (#190) from mpsoc_action_reply_handler into main

    Reviewed-on: #190
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit 3b16717ce2
Merge: 377e98b f1a0334
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 12 16:27:39 2023 +0200

    Merge pull request 'fixfixfix' (#189) from ploc_pwr_switching_fix into main

    Reviewed-on: #189

commit f1a0334d3d
Merge: f090c3a 377e98b
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri May 12 16:27:33 2023 +0200

    Merge branch 'main' into ploc_pwr_switching_fix

commit 0c1bfc6fd3
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:27:16 2023 +0200

    bump changelog

commit 04bbe057e7
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:24:45 2023 +0200

    flash c ontent report works now

commit e05a54b076
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 16:08:57 2023 +0200

    somethings wrong with the format

commit ef0adef04a
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 15:51:17 2023 +0200

    start adding action reply handler for MPSoC

commit 377e98b5c2
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 13:22:58 2023 +0200

    bugfix MPSoC HK parsing

commit 87e5abe8eb
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Fri May 12 11:51:47 2023 +0200

    add missing command list of PLOC MPSoC commands

commit f090c3af66
Author: Robin Mueller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 11 17:55:15 2023 +0200

    fixfixfix

commit 13fd9a7d84
Merge: 4d921e0 bbcc0f9
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 15:30:49 2023 +0200

    Merge pull request 'impl MPSoC HK parsing' (#188) from mpsoc_commands into main

    Reviewed-on: #188
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit bbcc0f9de7
Merge: a0aa652 1ab8710
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 15:17:12 2023 +0200

    Merge branch 'mpsoc_commands' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc into mpsoc_commands

commit a0aa6525e4
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 15:17:00 2023 +0200

    fix

commit 1ab8710040
Merge: f480d86 4d921e0
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Thu May 4 14:51:13 2023 +0200

    Merge branch 'main' into mpsoc_commands

commit f480d86fbd
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 14:50:38 2023 +0200

    impl MPSoC HK parsing

commit 4d921e01af
Merge: e85d1a1 b505524
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 12:01:43 2023 +0200

    Merge pull request 'MPSoC module update' (#187) from mpsoc_commands into main

    Reviewed-on: #187
    Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>

commit b505524e0b
Merge: e0e9a31 e85d1a1
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Thu May 4 12:01:33 2023 +0200

    Merge branch 'main' into mpsoc_commands

commit e0e9a310b9
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 11:51:50 2023 +0200

    add command to get flash dir content

commit 0e9ebefc87
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Thu May 4 11:27:12 2023 +0200

    new mpsoc commands

commit e85d1a1966
Merge: 60fba8b 4ff50b6
Author: Marius Eggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed May 3 13:36:31 2023 +0200

    Merge pull request 'most important bugfix' (#186) from most-important-bugfix into main

    Reviewed-on: #186

commit 4ff50b6559
Author: meggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed May 3 13:34:14 2023 +0200

    bub

commit 60fba8b6d9
Merge: 5fbd19b 1707f24
Author: Robin Müller <muellerr@irs.uni-stuttgart.de>
Date:   Fri Apr 28 10:25:35 2023 +0200

    Merge pull request 'more system modes' (#185) from more-system-modes into main

    Reviewed-on: #185

commit 1707f24612
Author: meggert <eggertm@irs.uni-stuttgart.de>
Date:   Wed Apr 19 15:10:44 2023 +0200

    more system modes

commit 5fbd19bb6c
Merge: 4083a30 0c6a967
Author: Robin Mueller <robin.mueller.m@gmail.com>
Date:   Mon Apr 17 18:41:08 2023 +0200

    Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc
2023-06-19 17:59:14 +02:00
muellerr 5f44cb96be add back PL PCDU 1
EIVE/-/pipeline/head There was a failure building this commit
2023-06-19 17:16:23 +02:00
muellerr 96136106c7 add TMP1075 HK handling 2023-06-19 17:16:23 +02:00
muellerr 65a2d40614 remove sw update, add fake test files 2023-06-19 17:16:23 +02:00
muellerr 7e5539ee05 some better doc 2023-06-19 17:16:23 +02:00
muellerr 698cdb3e1d clean up batt cmds a bit 2023-06-19 17:16:23 +02:00
muellerr 91ea3669af added BPX manual heater commands 2023-06-19 17:16:23 +02:00
muellerr dcf1483c47 prep v4.1.0 2023-06-19 17:16:23 +02:00
muellerr 0ad0dc391d add set cfg and rst cfg 2023-06-19 17:16:23 +02:00
muellerr 774a291f8c fix broken IDs 2023-06-19 17:16:23 +02:00
muellerr f27333fa0d add heater cmd IDs 2023-06-19 17:16:23 +02:00
mohr 5083c9390c bump docker version 2023-06-19 17:16:23 +02:00
mohr bb4cc59049 jenkins user in docker 2023-06-19 17:16:23 +02:00
mohr 23e38990a3 removed empty environment block in Jenkinsfile which Jenkins does not like
diva....
2023-06-19 17:16:23 +02:00
mohr 8bbd37cf76 switched to prebuilt docker image 2023-06-19 17:16:23 +02:00
muellerr 95511e484e added basic automation file 2023-06-19 17:16:23 +02:00
muellerr 276862fa6e add date in changelog 2023-06-19 17:16:19 +02:00
muellerr 4a5c2cdd4f add release checklist 2023-06-19 17:16:05 +02:00
muellerr be09b3475d linter fixes, version bump 2023-06-19 17:16:00 +02:00
muellerr 8927949c4b imtq parsing fixes 2023-06-19 17:15:30 +02:00
muellerr acc58ebef1 bump tmtccmd to v5.0.0rc0 2023-06-19 17:15:30 +02:00
muellerr 7bc344755f changelog 2023-06-19 17:14:51 +02:00
muellerr bde17600af bugfix CFDP: bump tmtccmd 2023-06-19 17:14:30 +02:00
muellerr 0b1aff220c moved 2 parameters 2023-06-19 17:14:08 +02:00
muellerr cfbff77da8 better exception handling 2023-06-19 17:14:08 +02:00
muellerr 673af7f097 import replacement 2023-06-19 17:14:08 +02:00
muellerr 6f5e70dce2 that should be all 2023-06-19 17:14:08 +02:00
muellerr 9b337d3077 more stuff 2023-06-19 17:14:08 +02:00
muellerr b333ffe707 rework it 2023-06-19 17:14:08 +02:00
muellerr 736c12a2f8 changelog 2023-06-19 17:14:03 +02:00
muellerr 773cf59632 new event 2023-06-19 17:13:32 +02:00
muellerr a3d6fa36e9 new MPSoC events and retvals 2023-06-19 17:13:32 +02:00
muellerr 4043e30d34 bugfix MPSoC command 2023-06-19 17:13:32 +02:00
muellerr 0276d3dab4 rework read and write prompts for MPSoC 2023-06-19 17:13:32 +02:00
muellerr 1c59ff41c1 bump changelog 2023-06-19 17:13:32 +02:00
muellerr 1c1af2c7c7 flash c ontent report works now 2023-06-19 17:13:32 +02:00
muellerr d74c3fc241 somethings wrong with the format 2023-06-19 17:13:32 +02:00
muellerr 2b26f1b106 start adding action reply handler for MPSoC 2023-06-19 17:13:32 +02:00
muellerr 9e87142324 bugfix MPSoC HK parsing 2023-06-19 17:13:32 +02:00
muellerr 5c903d5b02 add missing command list of PLOC MPSoC commands 2023-06-19 17:13:32 +02:00
muellerr 92b0b4189c fixfixfix 2023-06-19 17:13:32 +02:00
muellerr 8b99fbdc81 fix 2023-06-19 17:13:32 +02:00
muellerr 74f090833e impl MPSoC HK parsing 2023-06-19 17:13:32 +02:00
muellerr a89ecbf6d7 add command to get flash dir content 2023-06-19 17:13:32 +02:00
muellerr 5d17a1c2b3 new mpsoc commands 2023-06-19 17:13:32 +02:00
muellerr c7a7ca9f79 generic systemctl 2023-06-19 17:13:32 +02:00
meggert 3b34d70c23 bub 2023-06-19 17:13:32 +02:00
meggert 45bd838a13 more system modes 2023-06-19 17:13:32 +02:00
muellerr ba1bead5ad move add section 2023-06-19 17:13:19 +02:00
muellerr dbbd22960e Merge branch 'v3.1.2-patch' into HEAD 2023-06-19 17:12:34 +02:00
muellerr 4603329cf7 bump patch revision 2023-06-19 17:11:14 +02:00
muellerr 9374e9eaab update generated event file 2023-06-19 17:11:00 +02:00
muellerr b6a88ef08e changelog 2023-06-19 17:07:37 +02:00
muellerr fbe54e1a2b prep v3.1.2 patch 2023-06-19 17:06:49 +02:00
muellerr 4083a3090f added event handler for reboot events 2023-04-17 18:40:27 +02:00
muellerr 0c6a9677e1 bump patch revision 2023-04-17 11:43:43 +02:00
muellerr 7eaf6557eb update generated event file 2023-04-17 11:34:56 +02:00
muellerr 3bb0a08e95 bump tmtc to v3.1.0 2023-04-16 11:53:06 +02:00
muellerr d623e83be8 done 2023-04-16 02:56:14 +02:00
muellerr 5a49c4a6ce that should do the job 2023-04-16 02:00:50 +02:00
muellerr bb463aa05c changelog 2023-04-15 23:12:57 +02:00
muellerr 77e90328a1 some fixes 2023-04-15 21:53:11 +02:00
muellerr 37bb164cc4 add missing return statement 2023-04-15 20:51:19 +02:00
muellerr bebde054f4 add new action commands 2023-04-15 20:51:08 +02:00
muellerr d00e4247f6 v3.0.0 2023-04-14 20:29:26 +02:00
muellerr a07f21329a Merge pull request 'strat' (#184) from acs-updt into main
Reviewed-on: #184
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-04-14 20:25:30 +02:00
meggert 4157b05288 Merge branch 'main' into acs-updt 2023-04-14 20:24:37 +02:00
meggert e9b8d2658d strat 2023-04-14 20:24:21 +02:00
muellerr 07ff920e99 re-run generators 2023-04-14 20:24:13 +02:00
muellerr 1f06ea4590 re-generate files 2023-04-14 20:07:20 +02:00
muellerr 63c584e061 Add new PDEC commands 2023-04-14 19:21:51 +02:00
muellerr 183cd85907 update events.csv 2023-04-14 19:02:03 +02:00
muellerr f57342602d STR bugfixes 2023-04-14 17:42:09 +02:00
muellerr f8da9cff7c add to exposed commands 2023-04-14 00:28:40 +02:00
muellerr 005e15b21b blocking and non-blocking shell cmd exec 2023-04-14 00:21:01 +02:00
muellerr 8993ccdf66 this is missing 2023-04-14 00:08:28 +02:00
muellerr c9c0b3e6ff add new core commands 2023-04-14 00:06:22 +02:00
muellerr 33fd280e51 extend STR fw update cmds 2023-04-13 12:08:00 +02:00
muellerr a5178e2bb0 add command to set preferred SD card 2023-04-12 18:51:38 +02:00
muellerr 01b3a894e6 prep v2.22.1 2023-04-12 13:24:29 +02:00
muellerr f075d28905 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-04-11 22:08:10 +02:00
muellerr 83f6a22a75 bugfixes 2023-04-11 22:08:05 +02:00
muellerr a38bae16cd Merge pull request 'NONE CANNER' (#183) from kranz_none_because_i_can into main
lit
Reviewed-on: #183
2023-04-11 21:10:08 +02:00
mkranz 53666bdeda NONE CANNER 2023-04-11 21:04:09 +02:00
muellerr 00281fdc5e add TCS obj prompt 2023-04-11 20:43:39 +02:00
muellerr 43b530cdb7 typo 2023-04-08 13:23:06 +02:00
muellerr 92ce64cd39 update changelog 2023-04-08 11:40:06 +02:00
muellerr 268c9e3f0b add prompts for custom file name 2023-04-08 11:39:41 +02:00
muellerr 9edbdf1a8d bump minor version 2023-04-07 18:11:45 +02:00
muellerr 004b561b7d new retvals 2023-04-07 17:43:10 +02:00
muellerr 98a9601dd7 add command to test RW TM set retrieval 2023-04-07 17:01:30 +02:00
muellerr 91a8a2e895 missing event definition 2023-04-07 11:06:24 +02:00
muellerr e503450dda re-run generators 2023-04-07 11:03:35 +02:00
muellerr ad08276079 add i2c reboot cmd 2023-04-06 22:25:38 +02:00
muellerr 7e5fa2e61a add RW health cmds 2023-04-06 19:08:04 +02:00
muellerr dcf7d0af71 add SUS0/6 to obj prompt 2023-04-05 14:41:17 +02:00
muellerr 50668ca7a7 fix for syrlinks on cmd 2023-04-04 17:48:39 +02:00
muellerr 6975fae511 re-generate retvals 2023-04-04 13:36:21 +02:00
muellerr ce155e7629 prep v2.21.0 2023-04-04 13:29:43 +02:00
muellerr 1fb50d84c6 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-04-04 11:19:43 +02:00
muellerr 71bc121deb Merge pull request 'Feature: 3V3 stack power switching' (#182) from feature_3v3_stack_switching into main
Reviewed-on: #182
2023-04-04 11:17:37 +02:00
muellerr 0202c93252 add STR assy cmds 2023-04-04 01:24:33 +02:00
muellerr de1188c1bb Merge remote-tracking branch 'origin/main' into feature_3v3_stack_switching 2023-04-03 19:58:29 +02:00
muellerr 5f87092465 add health cmd for gps health dev 2023-04-03 18:54:12 +02:00
muellerr fb7b273485 other small fix 2023-04-03 16:57:58 +02:00
muellerr 8a69507d05 changelog 2023-04-03 16:57:05 +02:00
muellerr 6c367aab32 add handling for 3v3 stack HK 2023-04-03 16:55:22 +02:00
muellerr f899d169b2 missing submode 2023-04-03 15:54:37 +02:00
muellerr 2b2d920540 changelog 2023-04-03 15:54:16 +02:00
muellerr d7e1a69e75 add boot mode command for system 2023-04-03 15:53:51 +02:00
muellerr b72dad49a9 Merge pull request 'update events and retvals' (#170) from thermal_controller into main
Reviewed-on: #170
2023-04-03 15:12:04 +02:00
muellerr cef8d623c9 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-04-01 15:59:56 +02:00
muellerr 0f2daf94df update retvals 2023-04-01 15:27:09 +02:00
muellerr a49ab379af prep v2.20.1 2023-04-01 15:25:29 +02:00
muellerr bc85ccd8ef ACS CTRL fix for MEKF HK handling 2023-04-01 11:48:22 +02:00
muellerr 523dd9b759 event 2023-03-31 19:17:56 +02:00
muellerr ce5ae8a713 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-31 19:17:41 +02:00
muellerr 5b613f98ee update and clean up star tracker commands 2023-03-31 18:43:02 +02:00
muellerr aab50dce5a add object IDs 2023-03-30 17:22:05 +02:00
muellerr c8282453f4 FDIR updates 2023-03-30 17:19:42 +02:00
muellerr 1f491a72a3 add commands to set gps on or off 2023-03-30 15:12:33 +02:00
muellerr e8ccb4700a changelog 2023-03-28 22:23:32 +02:00
muellerr 1d01d27b17 prep v2.20.0 2023-03-28 22:21:01 +02:00
muellerr c3486c26b8 Merge pull request 'regenerate files' (#181) from tweaks_papb_polling into main
Reviewed-on: #181
2023-03-28 22:10:27 +02:00
muellerr 63fda2f970 Merge branch 'main' into tweaks_papb_polling 2023-03-28 22:10:19 +02:00
muellerr de4de87667 Merge pull request 'kranz_fixes for power switch cmd serialization' (#180) from kranz_fixes into main
Reviewed-on: #180
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-28 22:09:55 +02:00
muellerr e0a31cb992 regenerate files 2023-03-28 21:51:07 +02:00
mkranz 6b406b8e9a fixed mgt off cmd to off from on 2023-03-28 16:07:34 +02:00
mkranz 4508b5dd54 heater off cmd changed to off from on, pl camera off cmd changed to off from on 2023-03-28 15:36:14 +02:00
mkranz f2897fa606 Merge pull request 'new enum class for pdu channesl' (#179) from kranz_enum into main
Reviewed-on: #179

verified and merged by @mueller
2023-03-28 14:52:29 +02:00
mkranz 1ecc34800c new enum class for pdu channesl 2023-03-28 14:50:14 +02:00
muellerr 3f3523465a Merge pull request 'added datarate default for ccsds submodes' (#178) from kranz_ccsds_submodes into main
Reviewed-on: #178
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-27 15:17:27 +02:00
mkranz cd75d35229 suzbmode change back to unset 2023-03-27 15:12:44 +02:00
mkranz b7ab257ae5 added datarate default for ccsds submodes 2023-03-27 15:08:40 +02:00
muellerr 333faaa5f7 Merge pull request 'enum for str submodes, added default submode and renamed submode for ccsds handler class' (#177) from kranz_str_enum into main
Reviewed-on: #177
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-27 11:33:06 +02:00
mkranz 3c25af39c6 change d 2023-03-27 11:11:07 +02:00
mkranz 40b2973d9e enum for str submodes and added default submode 2023-03-27 10:30:13 +02:00
muellerr f6fcb2fb28 improvement for syrlinks code 2023-03-26 20:09:19 +02:00
muellerr 4b5c4fecc7 clean up this mess 2023-03-26 20:00:34 +02:00
muellerr be7b3f54c7 re-gen events 2023-03-26 16:47:40 +02:00
muellerr 7fe45d51dd Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-26 16:46:06 +02:00
muellerr 3d25a30a11 file locations changed 2023-03-26 16:41:13 +02:00
muellerr 3a60266774 prep v2.19.4 2023-03-24 21:32:03 +01:00
muellerr 536fd81bf8 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-24 21:14:56 +01:00
muellerr c636c5c3e3 some more file locations changed 2023-03-24 20:58:33 +01:00
muellerr 0bd87497d2 file locations changed 2023-03-24 20:50:53 +01:00
muellerr 9bb9a43d45 more cleaning 2023-03-24 19:52:58 +01:00
muellerr 5074e9d674 file locations changed 2023-03-24 19:48:47 +01:00
muellerr 68cfa92c6a correction for syrlinks submodes 2023-03-24 19:41:14 +01:00
muellerr c2100c2f09 add some more objects 2023-03-24 17:25:10 +01:00
muellerr 5e0d33c9a8 update retvals 2023-03-24 15:01:57 +01:00
muellerr 93ad3ada7d Merge pull request 'new event' (#174) from new-event into main
Reviewed-on: #174
2023-03-24 14:59:45 +01:00
muellerr 64539a2193 Merge branch 'main' into new-event 2023-03-24 14:59:36 +01:00
muellerr 2e34d5c46f Merge pull request 'Refactor Syrlinks COM' (#176) from refactoring_syrlinks_com_if into main
Reviewed-on: #176
2023-03-24 14:59:14 +01:00
muellerr 8115a39d66 remove event 2023-03-24 02:13:53 +01:00
muellerr b17c413e8f update generated files 2023-03-24 01:20:28 +01:00
muellerr 996d102a39 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-03-24 01:19:50 +01:00
mkranz 9f17661f52 Merge pull request 'blub' (#175) from kranz_enum into main
Reviewed-on: #175
2023-03-23 13:59:31 +01:00
mkranz 67d3cebed8 blub 2023-03-23 13:49:11 +01:00
meggert d71f043704 new event 2023-03-23 10:44:26 +01:00
muellerr 2263938b8b update str generated files 2023-03-22 01:14:28 +01:00
muellerr c171654d2b description fix 2023-03-21 23:59:45 +01:00
muellerr 47a5dd4523 update retvals 2023-03-21 23:57:49 +01:00
muellerr e612e086ab Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-21 23:43:13 +01:00
muellerr c5b8831b43 well thats annoying 2023-03-21 23:34:46 +01:00
muellerr 7af0349a87 prep v2.19.3 2023-03-21 23:28:47 +01:00
muellerr 934a147caa re-run generators, black 2023-03-21 23:27:42 +01:00
muellerr c9b269b01a improve STR code 2023-03-21 17:00:53 +01:00
muellerr 7296344730 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-21 14:18:20 +01:00
muellerr b32a9273ae new returnvalues 2023-03-21 12:46:25 +01:00
muellerr e5a09e148b prep v2.19.2 2023-03-17 18:05:15 +01:00
muellerr d3f9a83af8 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-16 17:47:29 +01:00
muellerr 350e5d77b8 add new event 2023-03-16 17:45:08 +01:00
muellerr a93381494a Merge pull request 'enum' (#173) from kranz_another_very_important_enum_really_tho into main
Reviewed-on: #173
2023-03-16 14:46:31 +01:00
mkranz 9b56a3ce06 also really important 2023-03-16 14:41:52 +01:00
mkranz a3bdfe8b04 enum 2023-03-16 14:35:27 +01:00
muellerr 9b503678c9 Merge pull request 'Added action command to ACS Ctrl to restore MEKF automatic recovery' (#171) from acs-ctrl-new-act-cmd into main
Reviewed-on: #171
2023-03-16 11:44:20 +01:00
muellerr 298ecba373 Merge branch 'main' into acs-ctrl-new-act-cmd 2023-03-16 11:44:06 +01:00
muellerr 45aa63b4ab Merge pull request 'tmp enum' (#172) from kranz_enum into main
Reviewed-on: #172
2023-03-16 11:43:55 +01:00
mkranz 5245cbfdd0 tmp enum 2023-03-16 11:21:40 +01:00
muellerr a54e5a8e14 Merge remote-tracking branch 'origin/main' into thermal_controller 2023-03-14 18:50:22 +01:00
muellerr 4f48c25bf7 changelog 2023-03-14 18:11:09 +01:00
muellerr d45c6bce97 unpack and use packet DT 2023-03-14 18:09:52 +01:00
meggert 5692d70de1 Merge branch 'main' into acs-ctrl-new-act-cmd 2023-03-14 17:27:29 +01:00
meggert 3974d4134a added action command to restore mekf automatic recovery 2023-03-14 17:24:21 +01:00
muellerr f0c14e21e4 prep v2.19.1 2023-03-14 17:14:36 +01:00
muellerr fe6390fab3 update csvs 2023-03-14 17:09:47 +01:00
muellerr 5e17ea9bf0 bump retval, ordered now 2023-03-14 15:34:06 +01:00
muellerr e9bf90e366 retval csv update, now sorted 2023-03-14 15:28:12 +01:00
muellerr 99d2c0e0ca update events/retvals again 2023-03-14 14:25:21 +01:00
muellerr 362be2288f update returnvalue csv 2023-03-14 14:22:02 +01:00
muellerr 98617b5ce5 update events and retvals 2023-03-14 14:16:44 +01:00
muellerr 0efd9ca9c6 prep v2.19.0 2023-03-14 14:10:23 +01:00
muellerr f21ee37a01 add RTD HK 2023-03-14 10:11:01 +01:00
muellerr d8367f7e62 Merge pull request 'MPSoC commands' (#169) from meier/mpsoc-commands into main
Reviewed-on: #169
2023-03-13 11:03:26 +01:00
muellerr e862df4d06 some more MPSoC commands 2023-03-13 11:02:57 +01:00
muellerr fb851b93a0 Merge branch 'main' into meier/mpsoc-commands 2023-03-13 11:01:43 +01:00
muellerr 5337ac4517 afmt 2023-03-13 10:57:23 +01:00
muellerr 0ebb237787 Merge pull request 'fixed star tracker bug' (#168) from zink_startracker into main
Reviewed-on: #168
2023-03-13 10:57:03 +01:00
muellerr de0ecb44e4 Merge branch 'main' into zink_startracker 2023-03-13 10:56:58 +01:00
Julia Zink 42c34b310e Merge remote-tracking branch 'origin/main' into zink_startracker
# Conflicts:
#	eive_tmtc/tmtc/acs/star_tracker.py
2023-03-13 10:56:17 +01:00
muellerr c274615aac missing set ID router 2023-03-13 10:53:41 +01:00
Julia Zink e3e74c3f20 fixed star tracker bug 2023-03-13 10:52:31 +01:00
muellerr 10362f7d30 added STR temperature set 2023-03-13 10:51:55 +01:00
muellerr 21a3813643 afmt 2023-03-13 10:45:49 +01:00
muellerr ae2fd8bb37 STR hk handling fix 2023-03-13 10:45:39 +01:00
muellerr ca5b2238bc add RTD ID and SetId enum 2023-03-13 10:35:33 +01:00
muellerr d520a0e2f2 add set ID for RTD 2023-03-13 10:31:27 +01:00
muellerr c99a0701d2 Merge pull request 'str hk bug fix' (#166) from kranz_str_hk_handling into main
Reviewed-on: #166
2023-03-12 14:26:40 +01:00
mkranz 2c7ad5385e str hk bug fix 2023-03-12 12:54:12 +01:00
muellerr a40c881b9f prep v2.18.1
- Add announce boot counts command
2023-03-11 15:23:02 +01:00
muellerr 432a642422 changelog 2023-03-11 15:15:29 +01:00
muellerr abfe923b05 missing heater location fix 2023-03-11 15:15:00 +01:00
muellerr 65ada579d3 prep v2.18.0 2023-03-11 15:07:29 +01:00
muellerr fce0c4400b Merge pull request 'new events, retvals, objects' (#165) from refactor_tm_handling into main
Reviewed-on: #165
2023-03-11 15:02:16 +01:00
muellerr f4e9091484 re-generate files 2023-03-11 15:01:19 +01:00
muellerr e334521e6d Merge remote-tracking branch 'origin/main' into refactor_tm_handling 2023-03-11 15:01:00 +01:00
muellerr cd0fd4d5a7 new events 2023-03-10 21:01:25 +01:00
muellerr 4686550eb9 Merge pull request 'acs-ctrl-updates-v2' (#164) from acs-ctrl-updates-v2 into main
Reviewed-on: #164
2023-03-10 19:07:41 +01:00
muellerr 26cd265e19 new events, retvals, objects 2023-03-10 19:06:28 +01:00
meggert a4984c34c2 lil changelog 2023-03-10 17:53:58 +01:00
meggert 948ad4ef7f Merge branch 'main' into acs-ctrl-updates-v2 2023-03-10 17:43:45 +01:00
muellerr e32a6ded66 object stirng update 2023-03-10 15:36:15 +01:00
muellerr 0add5c6ac5 Merge pull request 'Refactor ACS modes' (#163) from refactor_acs_modes into main
Reviewed-on: #163
2023-03-10 15:00:12 +01:00
muellerr 9f905524b6 small fix 2023-03-10 14:08:31 +01:00
muellerr d5685adb48 Merge branch 'main' into refactor_acs_modes 2023-03-10 13:39:44 +01:00
muellerr 4acae93206 Merge pull request 'added missing str parameters' (#162) from zink_str into main
Reviewed-on: #162
2023-03-10 13:38:32 +01:00
muellerr 05429d2048 run black 2023-03-10 13:38:21 +01:00
muellerr a249d71840 changelog 2023-03-10 13:37:17 +01:00
Julia Zink a5cc03d8a0 added missing str parameters 2023-03-10 13:16:14 +01:00
meggert fd692c901d Merge branch 'main' into acs-ctrl-updates-v2 2023-03-10 09:31:00 +01:00
muellerr b0f51072b2 Merge pull request 'fixed bug in dipoles set' (#161) from zink_imtq into main
Reviewed-on: #161
2023-03-09 17:57:01 +01:00
Julia Zink be5cf32dc8 fixed bug in dipoles set 2023-03-09 17:50:40 +01:00
muellerr cbbb335254 prep v2.17.3 2023-03-09 17:01:50 +01:00
muellerr 42434cbe7e Merge pull request 'obj ID fixes' (#160) from heater_obj_id_fixes into main
Reviewed-on: #160
2023-03-09 16:58:36 +01:00
muellerr bf158bee2d fix for heater names
- Heater 7 HPA -> Syrlinks
2023-03-09 16:40:59 +01:00
muellerr 80539cf897 obj ID fixes 2023-03-09 16:30:24 +01:00
muellerr ffd2eb11f8 Merge pull request 'Add missing HK' (#159) from add_missing_hk into main
Reviewed-on: #159
2023-03-08 19:59:07 +01:00
muellerr ed5cb87cad thats a large set 2023-03-08 19:57:28 +01:00
muellerr 4386b18049 add dipole set handling 2023-03-08 19:36:57 +01:00
muellerr a3e03350fa prep v2.17.2 2023-03-08 19:19:01 +01:00
muellerr d758a1f11a Merge pull request 'STR ASSY' (#158) from str_assy into main
Reviewed-on: #158
2023-03-08 18:10:28 +01:00
muellerr af17e30676 new object ID 2023-03-08 16:45:02 +01:00
muellerr 5652305ee1 Merge pull request 'New events for core controller' (#157) from feature_reboot_flags into main
Reviewed-on: #157
2023-03-08 11:41:50 +01:00
muellerr a3f5c92654 re-generate csvs 2023-03-08 11:30:36 +01:00
meggert 2e21087c6d +rad2deg -opIds +setInterval 2023-03-07 11:07:01 +01:00
muellerr e74e751142 re-run black 2023-03-07 10:11:11 +01:00
muellerr d43badaddf add better assy names, group legacy object IDs 2023-03-07 10:10:14 +01:00
muellerr 26b292f05a prep v2.17.1 2023-03-07 10:08:01 +01:00
muellerr 6f397289ca add MGT_ASSEMBLY object ID as well 2023-03-07 10:06:58 +01:00
muellerr 3d4ef7003c bump changelog 2023-03-07 10:05:15 +01:00
muellerr bf31810f25 prep v2.17.0 2023-03-07 10:03:22 +01:00
muellerr 9462a6e245 add some more objects 2023-03-06 14:25:04 +01:00
muellerr 208d328683 Merge pull request 'imtq_assy' (#156) from imtq_assy into main
Reviewed-on: #156
2023-03-06 14:00:51 +01:00
muellerr 90ea903c0a Merge branch 'main' into imtq_assy 2023-03-06 14:00:39 +01:00
muellerr 2aa1ecd3a7 changelog 2023-03-06 13:58:52 +01:00
muellerr f18a7f49cf add health set and announce health impl 2023-03-06 13:09:28 +01:00
muellerr 7f872c92c4 add object prompt to test assy 2023-03-06 12:03:51 +01:00
muellerr 82352bc5fa add imtq assy 2023-03-06 11:38:34 +01:00
mkranz a5bfee076a Merge pull request 'tmeperature' (#155) from kranz_tmeperature into main
Reviewed-on: #155
2023-03-06 10:36:59 +01:00
mkranz 0c17203825 tmeperature 2023-03-06 10:36:08 +01:00
muellerr beb8e61e2c Merge pull request 'tmeperature' (#154) from kranz_tmeperature into main
Reviewed-on: #154
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-06 10:33:50 +01:00
mkranz e9d10dae1b tmeperature 2023-03-06 10:26:58 +01:00
muellerr b959f60f0a update retvals 2023-03-04 17:18:23 +01:00
muellerr 3e666d76b7 prep v2.16.4 2023-03-04 17:17:04 +01:00
muellerr 7eafefc93b Merge pull request 'IMTQ updates' (#153) from imtq_updates into main
Reviewed-on: #153
2023-03-04 17:10:36 +01:00
muellerr 09c694cf9c IMTQ updates 2023-03-04 17:05:11 +01:00
muellerr 94ae2d16e2 Merge pull request 'prep v2.16.3' (#152) from vprep_2.16.3 into main
Reviewed-on: #152
2023-03-03 16:48:03 +01:00
muellerr 68a4764a56 prep v2.16.3 2023-03-03 16:50:48 +01:00
muellerr a9e59ae42b Merge pull request 'improve some STR code' (#151) from improve_some_str_tmtc_code into main
Reviewed-on: #151
2023-03-03 16:36:56 +01:00
muellerr 3522405e8a improve some STR code 2023-03-03 16:38:17 +01:00
muellerr 783d5a8ed5 Merge pull request 'kranz_revert_mgt_hk' (#150) from kranz_revert_mgt_hk into main
Reviewed-on: #150
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-03 10:53:46 +01:00
mkranz fc9b4efecf imtq fix 2023-03-03 09:57:26 +01:00
mkranz 2468998dbd self test revert 2023-03-03 09:56:16 +01:00
muellerr 74e6d6fe5f Merge pull request 'added all handling for raw mgm datasets' (#149) from imtq-datasets into main
Reviewed-on: #149
2023-03-02 18:38:07 +01:00
meggert cd393a1596 Merge branch 'main' into imtq-datasets 2023-03-02 18:22:53 +01:00
meggert 8747333880 added all handling for raw mgm datasets 2023-03-02 18:20:10 +01:00
muellerr 77fbcede10 Merge pull request 're-gen objects: Syrlinks Assy' (#148) from new_objects into main
Reviewed-on: #148
2023-03-02 17:46:51 +01:00
muellerr ba87c01f66 changelog 2023-03-02 17:50:06 +01:00
muellerr 68c46a299f re-gen objects 2023-03-02 17:08:21 +01:00
muellerr 2dd850f072 Merge pull request 'add some more imtq cmds' (#147) from imtq_use_new_api into main
Reviewed-on: #147
2023-03-02 14:43:50 +01:00
muellerr c83e17bba3 Merge branch 'main' into imtq_use_new_api 2023-03-02 14:43:43 +01:00
muellerr e5eb2e479c add some more imtq cmds 2023-03-02 14:41:23 +01:00
muellerr d2bc142b50 use newer API 2023-03-02 13:57:01 +01:00
muellerr 9115f2519b Merge pull request 'use newer API' (#146) from imtq_use_new_api into main
Reviewed-on: #146
2023-03-02 13:54:34 +01:00
muellerr 54c78d4441 Merge branch 'main' into imtq_use_new_api 2023-03-02 13:54:18 +01:00
muellerr e46f685607 Merge pull request 'enum' (#145) from kranz_another_enum into main
Reviewed-on: #145
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-03-02 13:52:16 +01:00
mkranz b0294e2764 enum 2023-03-02 10:22:48 +01:00
muellerr 350ffda6c6 Merge pull request 'prep v2.16.2' (#144) from regen_csv into main
Reviewed-on: #144
2023-03-01 18:34:46 +01:00
muellerr 9219f5863c prep v2.16.2 2023-03-01 18:36:26 +01:00
muellerr 4dcac73755 regenerate csvs 2023-03-01 18:34:46 +01:00
muellerr 481e57be59 Merge pull request 'acs-ctrl-update' (#140) from acs-ctrl-update into main
Reviewed-on: #140
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-28 11:49:13 +01:00
meggert 039eed1e16 Merge branch 'main' into acs-ctrl-update 2023-02-28 11:04:44 +01:00
meggert 001270a1e5 changelog 2023-02-28 11:03:16 +01:00
meggert b443867512 final fixes 2023-02-28 11:02:59 +01:00
mkranz 9867ee873a Merge pull request 'Feature: MGM base cmds' (#143) from feature_mgm_base_cmds into main
Reviewed-on: #143
2023-02-28 10:11:00 +01:00
Jakob Meier 56630b05c2 bugfix in mpsoc commands 2023-02-28 09:13:14 +01:00
Jakob Meier 64d0ca491a Merge remote-tracking branch 'origin' into meier/mpsoc-commands 2023-02-28 08:02:39 +01:00
muellerr aa427151f5 changelog 2023-02-28 01:27:10 +01:00
muellerr 0ce32521f4 mgm base cmds 2023-02-28 01:24:47 +01:00
muellerr 649c019eb8 Merge pull request 'tmtc faulty gyor cmd' (#142) from kranz_tmtc_faulty_gyro_cmd into main
Reviewed-on: #142
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-27 18:20:58 +01:00
muellerr fa5c24df6b Merge branch 'main' into kranz_tmtc_faulty_gyro_cmd 2023-02-27 18:20:49 +01:00
mkranz a13454851b tmtc faulty gyor cmd 2023-02-27 18:22:57 +01:00
muellerr 78b55f919c Merge pull request 'int enum' (#141) from kranz_enum into main
Reviewed-on: #141
2023-02-27 16:58:18 +01:00
mkranz 3259cf0807 self test intro 2023-02-27 15:24:47 +01:00
mkranz 8919f5c8e9 self test set for easier operator handling 2023-02-27 15:16:20 +01:00
meggert 736bc23fc5 added command to set matrix parameter 2023-02-27 15:04:02 +01:00
mkranz 02797ffc5b int enum 2023-02-27 14:57:57 +01:00
meggert 6a30f6d0ac added commands to change scalar and vector parameters 2023-02-27 14:01:54 +01:00
meggert 11454f6015 Merge branch 'main' into acs-ctrl-update 2023-02-27 09:23:33 +01:00
muellerr 9720fcddec changelog 2023-02-26 14:53:40 +01:00
muellerr 47fef53ac1 corrections and improvements for ACS code 2023-02-26 14:53:01 +01:00
muellerr 13014eb250 prep v2.16.1 2023-02-24 19:11:14 +01:00
muellerr d47e9039a5 update csvs 2023-02-24 16:57:16 +01:00
muellerr 60c88fd21c Merge remote-tracking branch 'origin/main' into mueller/pus-15-tm-storage 2023-02-24 16:56:48 +01:00
muellerr fd649ff1bb add OBSW update test 2023-02-24 15:49:37 +01:00
meggert 3f71475860 uptd 2023-02-24 15:28:58 +01:00
meggert 7120f14601 Merge branch 'main' into acs-ctrl-update 2023-02-24 15:27:55 +01:00
meggert 7a82a77876 changelog 2023-02-24 15:24:57 +01:00
meggert 23aeb8bcf9 added action commands 2023-02-24 15:06:54 +01:00
meggert bc9f13f296 diag datasets and mekf update 2023-02-24 14:53:09 +01:00
meggert 09dbc6b14d updated handle_mekf_data 2023-02-24 14:01:39 +01:00
meggert 31d51e3660 added commands for missing submodes 2023-02-24 13:56:50 +01:00
muellerr da960b5344 Merge remote-tracking branch 'origin/main' into mueller/pus-15-tm-storage 2023-02-23 15:58:48 +01:00
muellerr 24f0d8e1a6 Merge pull request 'PDEC Parameter Commands' (#139) from meier/pdec-ad-frame-param-commands into main
Reviewed-on: #139
2023-02-23 15:45:13 +01:00
muellerr 86c1fc96d1 Merge remote-tracking branch 'origin/main' into meier/pdec-ad-frame-param-commands 2023-02-23 15:45:15 +01:00
muellerr fda044c2ff prep v2.16.0 2023-02-23 15:44:06 +01:00
muellerr 75a8712f91 skip private retval 2023-02-23 15:39:53 +01:00
muellerr 0bb1f57599 prep v2.15.2 2023-02-23 15:28:44 +01:00
Jakob Meier 446e38ed57 Merge branch 'main' into meier/pdec-ad-frame-param-commands 2023-02-23 15:24:36 +01:00
muellerr a04bd8aa73 update csvs 2023-02-23 15:21:58 +01:00
Jakob Meier e47eb577fa parameter command to set negative window for AD frames 2023-02-23 15:20:46 +01:00
muellerr 7e06043df7 changelog bump 2023-02-23 15:19:09 +01:00
muellerr cf342fb14c remove setup.cfg all together 2023-02-23 15:18:36 +01:00
muellerr ddf1900376 prep v2.15.1 2023-02-23 15:18:14 +01:00
muellerr ed640dbbb1 add deprecation comment on setup.cfg 2023-02-23 15:16:35 +01:00
muellerr 4eb470c724 prep v2.15.0 2023-02-23 15:13:35 +01:00
muellerr 1dd667ae25 Merge remote-tracking branch 'origin/main' into mueller/pus-15-tm-storage 2023-02-22 15:14:27 +01:00
muellerr be032ab925 prep v2.14.0 2023-02-22 15:01:48 +01:00
Jakob Meier 24e9c25ba4 parameter commands for pdec handler 2023-02-22 14:50:12 +01:00
muellerr 336ed58272 Merge pull request 'Transmitter Timeout Param Command' (#138) from meier/com-ss into main
Reviewed-on: #138
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-22 14:35:53 +01:00
Jakob Meier 679df9ebe1 removed unused import 2023-02-22 12:59:56 +01:00
Jakob Meier 6228181357 parameter command to change transmitter timeout 2023-02-22 12:56:57 +01:00
Jakob Meier a06f703d6f Merge branch 'main' into meier/com-ss 2023-02-22 09:53:23 +01:00
muellerr fb676dc90f typo 2023-02-22 02:53:56 +01:00
muellerr 4917ddbbe4 Merge remote-tracking branch 'origin/main' into mueller/pus-15-tm-storage 2023-02-21 20:22:16 +01:00
mkranz f409d694aa Merge pull request 'robin fixes' (#137) from kranz_robin_fixes into main
Reviewed-on: #137
2023-02-21 14:30:34 +01:00
mkranz a470484b9e robin fixes 2023-02-21 14:29:40 +01:00
muellerr 4ced2d0b18 changelog update 2023-02-21 11:25:29 +01:00
muellerr 0f5401a2db prep v2.13.0 2023-02-21 11:24:29 +01:00
muellerr 9686701c2e re-run generators 2023-02-21 11:14:43 +01:00
muellerr d87361ae75 Merge remote-tracking branch 'origin/main' into mueller/pus-15-tm-storage 2023-02-21 11:14:06 +01:00
muellerr 5f082cd9fc improve TCS HK handling 2023-02-21 02:28:32 +01:00
muellerr d1f96cb83d add announce mode cmds 2023-02-21 01:30:24 +01:00
muellerr 8f5f7064e9 added retrieval by time range impl 2023-02-20 15:57:38 +01:00
muellerr 6a6d9c0a7a add missing run config 2023-02-20 15:26:04 +01:00
muellerr db1dbe9661 update generates files 2023-02-20 15:05:13 +01:00
muellerr 1bc38ea4b5 better debug facilities for TM debugging 2023-02-20 15:00:31 +01:00
muellerr 37fcdb9a60 some more debug output 2023-02-20 14:29:02 +01:00
muellerr 6e22e3528a Merge pull request 'Refactored IMTQ handling' (#136) from refactor_imtq_handling into main
Reviewed-on: #136
2023-02-19 13:35:39 +01:00
muellerr a57511e725 bump changelog 2023-02-19 13:33:57 +01:00
muellerr 887e76baf8 update changelog 2023-02-19 13:28:49 +01:00
muellerr 335d901451 add missing HK handling 2023-02-19 13:27:59 +01:00
muellerr a2d04b28fd set IMTQ set HK handling 2023-02-19 13:25:12 +01:00
muellerr 802757ba72 re-run generators 2023-02-19 13:18:27 +01:00
muellerr af4ceec4f4 clean up imtq commands 2023-02-19 12:39:25 +01:00
muellerr 4cf131e9c1 Merge pull request 'introduced some enums to classes' (#135) from kranz_enums into main
Reviewed-on: #135
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-19 12:33:55 +01:00
muellerr 1989a37e1e Merge branch 'main' into kranz_enums 2023-02-19 12:33:41 +01:00
muellerr fbf507b2a8 imtq overhaul 2023-02-19 03:48:30 +01:00
muellerr b19d1e8869 rework hk eng printout 2023-02-19 02:22:18 +01:00
muellerr 201e08afe1 better event handling 2023-02-18 13:12:12 +01:00
mkranz 9f8ab3e235 introduced some enums to classes 2023-02-17 20:00:46 +01:00
muellerr 676f851659 added store enum 2023-02-17 19:22:56 +01:00
muellerr ab9f2ca05d better docs 2023-02-17 18:57:14 +01:00
muellerr e51b55811c dry run time is over 2023-02-17 18:56:12 +01:00
muellerr c9f35c3e5c add seconds from now offset time prompt 2023-02-17 18:55:41 +01:00
muellerr d97eb7334b smaller tweaks 2023-02-17 18:43:51 +01:00
muellerr aabfcf83ac that should be the basic delete impl 2023-02-17 18:43:20 +01:00
muellerr 2ef56ae8c4 cotinue tm store front end 2023-02-17 18:35:21 +01:00
muellerr 7433982f6f bump changelog 2023-02-17 18:13:44 +01:00
muellerr 57f2143d79 bump tmtccmd 2023-02-17 18:13:20 +01:00
muellerr 556060a3f3 re-run generators 2023-02-17 13:16:14 +01:00
muellerr d9945d4054 prep v2.12.7 2023-02-17 11:14:30 +01:00
muellerr 1947ebcb1f Merge pull request 'RW Refactoring' (#134) from rw_refactoring into main
Reviewed-on: #134
2023-02-17 11:13:06 +01:00
muellerr cf2b7443d4 re-run generators 2023-02-17 02:12:46 +01:00
muellerr 49521e1661 some more fixes 2023-02-17 02:11:17 +01:00
muellerr 08c315fbf9 small hk parsing fix 2023-02-17 02:04:43 +01:00
muellerr 1e143ea6fa prep v2.12.6 2023-02-14 17:28:11 +01:00
muellerr 8b677041e2 changelog 2023-02-14 16:17:47 +01:00
muellerr ff787f4497 fix 2023-02-14 16:16:20 +01:00
muellerr 7e90d6183c Merge remote-tracking branch 'origin/main' into mueller_new_switcher_hk 2023-02-14 16:10:55 +01:00
muellerr 20e107c7ae Merge pull request 'gps-processed-fix' (#133) from gps-processed-fix into main
Reviewed-on: #133
2023-02-13 15:52:37 +01:00
meggert 4f9c728e51 changelog 2023-02-13 15:49:07 +01:00
meggert bd3b666f8c Merge branch 'main' into gps-processed-fix 2023-02-13 15:46:41 +01:00
meggert 483ebe87ad copy pasta so much fun no errors ever 2023-02-13 15:44:42 +01:00
Jakob Meier 8d036bcd4f Added the following commands (not tested yet):
* TcCamTakePic
* TcSimplexSendFile
* TcDownlinkDataModulate
* TcModeSnapshot
2023-02-13 14:14:56 +01:00
muellerr 9b7471e909 update retvals 2023-02-13 10:08:28 +01:00
muellerr 09cf960350 prep v2.12.5 2023-02-13 10:06:53 +01:00
muellerr d47da4c314 changelog 2023-02-12 18:57:18 +01:00
muellerr 2d79f6f484 add EIVE system cmds 2023-02-12 18:56:59 +01:00
muellerr d99adf55a1 prep v2.12.4 2023-02-12 18:30:04 +01:00
muellerr 6db34aacaa run black 2023-02-10 17:52:09 +01:00
muellerr 654a5a2e13 bump changelog 2023-02-10 16:40:49 +01:00
muellerr 8ec086f778 can reads temp set now 2023-02-10 16:40:19 +01:00
muellerr 8d23f29f94 bugfix tm parsing syrlinks 2023-02-10 16:31:58 +01:00
muellerr 9178251ed7 add remaining parsing for syrlinks HK 2023-02-10 15:51:03 +01:00
muellerr d7c30ba406 add unitest for PL PCDU HK parsing 2023-02-10 15:03:24 +01:00
muellerr 5fa9727375 prep v2.12.3 2023-02-10 13:48:57 +01:00
mkranz 71f2f31fc5 Merge pull request 'added submodes' (#132) from acs_ctrl_submodes into main
Reviewed-on: #132
2023-02-10 12:18:37 +01:00
mkranz d65480dfed off mode 2023-02-10 11:56:00 +01:00
mkranz 0ae3ae294c added submodes 2023-02-10 11:38:08 +01:00
muellerr 841780593e update retvals 2023-02-09 15:51:10 +01:00
muellerr 669e9559b9 update events and objects 2023-02-09 14:24:59 +01:00
muellerr 4a13be1beb changelog 2023-02-08 22:55:52 +01:00
muellerr 1d73bcce00 output format fixes 2023-02-08 22:55:22 +01:00
muellerr aadd6f59b5 bump changelog 2023-02-08 21:10:40 +01:00
muellerr e5bb7f395f ACS control print fix 2023-02-08 21:09:24 +01:00
muellerr 33da498ea8 prep v2.12.2 2023-02-08 18:12:52 +01:00
muellerr 94a82b84e8 use specific tmtccmd rev 2023-02-08 17:46:30 +01:00
muellerr d0c8e20d4f prep v2.12.1 2023-02-08 14:50:07 +01:00
muellerr 9955295dfe regenerate events and retvals 2023-02-08 14:10:02 +01:00
muellerr 4086e7947b this is more pythonic 2023-02-08 11:51:55 +01:00
muellerr ca04b6018b TM parsing for version event 2023-02-08 11:47:37 +01:00
muellerr dedfe1c977 add new events 2023-02-08 11:22:50 +01:00
muellerr ef42b1a179 bump changelog 2023-02-08 11:21:30 +01:00
muellerr 5d3de069a6 add new cmds core core controller 2023-02-08 11:21:00 +01:00
muellerr f16e27b79b bump changelog 2023-02-08 01:30:18 +01:00
muellerr 78c3b7dd93 add mode cmds for COM SS 2023-02-08 01:29:38 +01:00
muellerr 8a96e21d1a bump changelog 2023-02-07 16:48:48 +01:00
muellerr eed6b82353 add some gps cmds 2023-02-07 16:48:23 +01:00
muellerr 2bd6caa3c2 add tm store module 2023-02-07 15:21:48 +01:00
muellerr 2766a5de7b bump changelog 2023-02-07 14:43:16 +01:00
muellerr 895987ebf3 added store object IDS 2023-02-07 14:42:53 +01:00
muellerr d6445d38a8 small tweak 2023-02-06 20:22:36 +01:00
muellerr 8aec6c48a0 prep 2.12.0 2023-02-06 20:16:54 +01:00
muellerr cab0aa027a Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-02-06 20:13:22 +01:00
muellerr 457ccf1ca0 update subsystemIDs 2023-02-06 20:13:15 +01:00
muellerr fbb078784f Merge pull request 'Calibration Aftermath' (#131) from mgm-calibration-processed-data into main
Reviewed-on: #131
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-06 18:14:46 +01:00
meggert f50aac689f changed calibration method to use processed data 2023-02-06 17:15:15 +01:00
muellerr 66867ad9d2 prep v2.11.0 2023-02-06 14:51:32 +01:00
muellerr e617faa4df some tweaks 2023-02-06 14:49:50 +01:00
muellerr fc5e3c88ff update for tmp1075 code 2023-02-06 14:44:37 +01:00
muellerr b474841d69 add TMP1075 dev prompt 2023-02-06 14:27:00 +01:00
muellerr 5e27a22a85 minor gps update 2023-02-05 12:52:43 +01:00
muellerr 04f5a76962 prepare for v2.10.0 2023-02-03 16:41:09 +01:00
muellerr 5ed3cec20b Merge pull request 'update ACS SS commands' (#130) from update_acs_ss_cmds into main
Reviewed-on: #130
2023-02-03 14:21:41 +01:00
muellerr c3c58b95ad minor fixes for ACS SS commanding 2023-02-03 14:21:22 +01:00
muellerr 5b309e4013 acs ctrl bugfix 2023-02-03 13:39:05 +01:00
muellerr a39e94279b update events 2023-02-03 10:53:09 +01:00
muellerr b9f58e0612 bump changelog 2023-02-03 10:50:17 +01:00
muellerr d9c202c68e update ACS SS commands 2023-02-03 10:47:18 +01:00
muellerr 28c367c6fb bump tmtccmd again 2023-02-02 19:24:09 +01:00
muellerr 15adb9bf2e bump tmtccmd 2023-02-02 18:37:08 +01:00
muellerr b4e4228040 bump tmtccmd 2023-02-02 18:20:50 +01:00
muellerr 26ebe9ab67 Merge pull request 'ACS Ctrl fixes' (#129) from acs-ctrl-validitiy-flag-fixes into main
Reviewed-on: #129
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-02-02 17:28:45 +01:00
muellerr a680bf28f0 changelog update 2023-02-02 17:28:51 +01:00
Jakob Meier a3a3aaa883 parameter command to change transmitter timeout 2023-02-02 16:01:56 +01:00
meggert 17486fdca7 updated gps data with new value. fixed validity flag output because someone (me) was to stupid to do it right in the first place 2023-02-02 11:11:22 +01:00
muellerr c633893df4 small fix in event handler 2023-02-01 20:42:21 +01:00
muellerr bf16fa14ad month correction 2023-02-01 20:19:54 +01:00
muellerr d7c66e4ac3 prepare v2.9.0 2023-02-01 20:14:00 +01:00
muellerr 2cb923314b changelog 2023-02-01 20:12:18 +01:00
muellerr ee38f83ec1 i am happy with this output format 2023-02-01 20:11:47 +01:00
muellerr 0399b478f3 import fixes 2023-02-01 19:48:30 +01:00
muellerr 4fa333977a move s200 test mod 2023-02-01 19:47:29 +01:00
muellerr e4ec0689b5 update generates files 2023-02-01 19:43:25 +01:00
muellerr fa23e05971 add time dump command 2023-02-01 19:13:59 +01:00
muellerr bf06dd70f4 prepare v2.8.0 2023-02-01 18:50:51 +01:00
muellerr c8ea75b2ad all import changes 2023-02-01 16:25:17 +01:00
muellerr 6b657b5623 move some modules 2023-02-01 15:58:34 +01:00
muellerr 6c663b473c Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-02-01 11:17:38 +01:00
muellerr 7b5df331ef refactor logging usage 2023-02-01 11:17:04 +01:00
muellerr c6478f05fd bump tmtccmd to version without error file logger 2023-01-31 21:21:08 +01:00
muellerr b95204ef9e update changelog 2023-01-31 15:59:41 +01:00
muellerr f082f05886 better name for heater controller object 2023-01-31 15:58:56 +01:00
muellerr 28b3e4bec7 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-31 15:48:52 +01:00
muellerr dbd2e5d9fc rename enumeration 2023-01-31 15:48:43 +01:00
muellerr 3eeb58182b some more re-ordering 2023-01-31 15:46:49 +01:00
muellerr 48675efe3f re-order some things 2023-01-31 15:44:51 +01:00
muellerr b98fc2f56d import fixes 2023-01-31 15:44:09 +01:00
muellerr 3c20d2ea24 restructure TCS TMTC module 2023-01-31 15:41:51 +01:00
muellerr 2793b354a6 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-31 13:18:12 +01:00
muellerr 72fee20d65 bump tmtccmd 2023-01-31 13:17:01 +01:00
muellerr 98af6a7907 update tmtccmd 2023-01-31 12:56:13 +01:00
muellerr a7f11b3159 update tmtccmd 2023-01-30 17:40:25 +01:00
muellerr 98ba66dba2 disable generic printer 2023-01-30 17:26:48 +01:00
muellerr 28fda7cdbd bump tmtccmd 2023-01-30 14:53:46 +01:00
muellerr 619bd6b71b update event handler for tmtccmd update 2023-01-30 14:47:25 +01:00
muellerr ece20bf177 bump tmtccmd 2023-01-30 14:31:38 +01:00
muellerr 63d7f577b1 this is annoying.. 2023-01-28 15:01:31 +01:00
muellerr 6f783441be retval patch release 2023-01-28 15:00:45 +01:00
muellerr db70b4bd44 update retvals 2023-01-28 14:57:32 +01:00
muellerr a4a4a6b666 this should do the job 2023-01-28 14:52:27 +01:00
muellerr f99a3ab74a bump minor version 2023-01-28 14:51:25 +01:00
muellerr a9c23a4453 bump tmtccmd 2023-01-28 14:50:57 +01:00
muellerr 407163397d update changelog 2023-01-28 14:49:09 +01:00
muellerr 65839f5aec correct and useful 2023-01-28 14:48:36 +01:00
muellerr 14ed2415a4 reworked param TM handling 2023-01-28 14:36:21 +01:00
muellerr fb6d5eeb80 move param cmd to com subsystem 2023-01-28 14:30:51 +01:00
muellerr 39a9497494 add default rate command 2023-01-27 20:23:41 +01:00
muellerr f4702eb701 update objects 2023-01-27 15:56:56 +01:00
muellerr b7e6a79704 bump changelog 2023-01-27 15:42:22 +01:00
muellerr b8376c6f48 add COM subsystem commanding 2023-01-27 15:42:00 +01:00
muellerr 8b6039e15d bump changelog 2023-01-26 20:36:10 +01:00
muellerr e4963fb712 Merge pull request 'fixed mgm proc output' (#128) from mgm-proc-fix into main
Reviewed-on: #128
2023-01-26 20:35:26 +01:00
muellerr feacfeaf65 Merge branch 'main' into mgm-proc-fix 2023-01-26 20:35:04 +01:00
muellerr 47480a7959 bump minor version 2023-01-26 20:34:37 +01:00
muellerr 67c6b86baf update retvals 2023-01-26 19:43:08 +01:00
muellerr df1bbe9ded pack syrlinks command correctly 2023-01-26 17:00:50 +01:00
muellerr 39dfac2520 added new events 2023-01-26 16:44:01 +01:00
muellerr b8a8f4b5a3 event update 2023-01-26 16:21:11 +01:00
muellerr 733fc19d78 update retvals 2023-01-26 16:18:58 +01:00
muellerr 83f10ed253 add command to configure default data rate 2023-01-26 16:16:09 +01:00
muellerr c4329558c9 better op codes 2023-01-26 15:50:19 +01:00
muellerr 72c577e991 update of tmtccmd 2023-01-26 15:47:39 +01:00
muellerr 0fe6cec54c update submodes 2023-01-26 15:45:25 +01:00
muellerr 2ac182e753 add commands to update default data rate 2023-01-26 14:34:21 +01:00
muellerr ffdc6a68bb bump tmtccmd dependency 2023-01-26 14:29:56 +01:00
muellerr 99d5ed014b add new submode for default data rate 2023-01-26 14:00:03 +01:00
muellerr 05f22ae4ce small tweak 2023-01-26 13:45:59 +01:00
muellerr 69e2b82c8e bump changelog 2023-01-26 13:44:58 +01:00
muellerr 8a5e779e23 update syrlinks commands 2023-01-26 13:43:57 +01:00
muellerr c36c7ca5bb move CCSDS handler definitions 2023-01-26 11:31:26 +01:00
muellerr 8a7880bc35 add new CCSDS handler mode commands 2023-01-25 14:51:32 +01:00
muellerr cac68dba7f bump changelog 2023-01-25 14:15:55 +01:00
muellerr 4323b0659d move startracker module into acs folder 2023-01-25 14:15:25 +01:00
muellerr 55cecdf81c move some modules 2023-01-25 14:14:22 +01:00
meggert 82c6b60af2 this should be better 2023-01-25 13:45:11 +01:00
meggert 35a485d79e fixed mgm proc output 2023-01-25 13:43:08 +01:00
muellerr 49ccb4be8d add enable/disable for TX regs as well 2023-01-24 19:07:11 +01:00
muellerr 8341ccc99d better names 2023-01-24 17:49:59 +01:00
muellerr 5998aa12a4 bump changelog 2023-01-24 13:06:36 +01:00
muellerr 5a05eb4825 added command to request switcher set 2023-01-24 13:06:08 +01:00
muellerr f8299b91cd import replacements 2023-01-24 12:41:50 +01:00
muellerr 45253bc9b8 update changelog 2023-01-24 12:39:23 +01:00
muellerr 7537388f6e Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-24 12:38:50 +01:00
muellerr fe19284a8e move str file and add some set IDs 2023-01-24 12:38:32 +01:00
muellerr 49f27c9923 forgot bumping version again 2023-01-23 17:43:22 +01:00
muellerr 0010ac581a always forggetting it.. 2023-01-23 17:42:50 +01:00
muellerr 0a7feff169 bump changelog 2023-01-23 17:40:27 +01:00
muellerr 9b30d290a7 pin tmtccmd on v4.0.0a2 2023-01-23 17:38:14 +01:00
muellerr d23201466c syrlinks cmd updates 2023-01-23 15:35:24 +01:00
muellerr 8bcee7c094 add enable/disable HK syrlinks 2023-01-23 15:04:06 +01:00
muellerr 033c8927c0 update generated files 2023-01-23 11:30:45 +01:00
muellerr 220cb5e9f4 small tweak for TCS system info 2023-01-23 11:25:29 +01:00
muellerr 7387ae3583 bump tmtccmd 2023-01-20 16:28:44 +01:00
muellerr 2f33a43937 changelog 2023-01-20 14:22:54 +01:00
muellerr a2cd9245a2 Merge pull request 'Update SA DEPL commands' (#127) from update_sa_depl_cmds into main
Reviewed-on: #127
2023-01-20 14:21:59 +01:00
muellerr 5a0feff284 add missing cmds 2023-01-20 13:55:13 +01:00
muellerr 912728474a that should do the job 2023-01-20 12:19:57 +01:00
muellerr 2b5ad32fdd Merge pull request 'fixes fixes fixes' (#126) from acs-ctrl-fixes into main
Reviewed-on: #126
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-01-20 11:28:31 +01:00
muellerr b3b98eb2d2 add TCS subsystem commands 2023-01-20 11:28:07 +01:00
muellerr 7d068d85c8 Merge branch 'main' into acs-ctrl-fixes 2023-01-20 10:52:48 +01:00
muellerr d6c35262bf Merge pull request 'Add SUS temps handling' (#124) from mueller_add_sus_temps into main
Reviewed-on: #124
2023-01-20 10:51:40 +01:00
muellerr 1317441c03 Merge branch 'main' into mueller_add_sus_temps 2023-01-20 10:51:30 +01:00
muellerr cd8fdc4865 Merge branch 'main' into acs-ctrl-fixes 2023-01-20 10:51:22 +01:00
muellerr 3a60fd2d6d black 2023-01-20 10:35:30 +01:00
meggert d77ccbf8e9 fixes fixes fixes
- improved cmd OpCodes naming
- removed normal mode without submode which gets rejected anyways
- added normal mode with submodes
- fixed bugs in sus hk handling
2023-01-20 09:44:51 +01:00
muellerr f3c0b7567a Merge pull request 'rtd command to rewrite config' (#125) from meier/rtd into main
Reviewed-on: #125
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-01-19 16:49:22 +01:00
muellerr 485f0015d7 Merge branch 'main' into meier/rtd 2023-01-19 16:49:08 +01:00
muellerr a3eb34a73d some ACS sets are diagnostic now 2023-01-19 16:41:49 +01:00
muellerr dfa5cad8a6 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-19 16:28:30 +01:00
muellerr 1cab6dc065 bump used tmtccmd version 2023-01-19 16:28:22 +01:00
muellerr a5337b5293 replace deprecated API 2023-01-19 13:29:01 +01:00
Jakob Meier 887312371b rtd command to rewrite config 2023-01-19 13:21:12 +01:00
muellerr c2f43c90fb hmm this command disappeared 2023-01-19 13:11:28 +01:00
muellerr b9b1769bc5 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-19 09:19:27 +01:00
muellerr 118b439272 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-18 16:51:31 +01:00
muellerr 612383ade1 bump installed tmtccmd again 2023-01-18 16:50:56 +01:00
muellerr 2e40e31c15 bump changelog 2023-01-18 16:31:47 +01:00
muellerr aba0dd8ebb add SUS temp handling 2023-01-18 16:30:11 +01:00
muellerr c9790911ef make syrlinks hk a bit more readable 2023-01-18 15:52:35 +01:00
muellerr 8001156a02 move and improve syrlinks module 2023-01-18 15:43:02 +01:00
muellerr db0cbf620e bugfix for syrlinks HK code 2023-01-18 15:36:09 +01:00
muellerr 43e6f0cefa re-run generators 2023-01-18 14:03:05 +01:00
muellerr 0c67ce5b08 bump release 2023-01-18 11:50:40 +01:00
muellerr 24f6a59cf9 Merge remote-tracking branch 'origin/main' into mueller_new_switcher_hk 2022-12-23 12:22:58 +01:00
muellerr 9016d3d992 something is not right 2022-12-22 16:12:31 +01:00
144 changed files with 13242 additions and 6214 deletions
+5
View File
@@ -6,6 +6,7 @@ log
/gps_log.txt
/config/*.json
/.tmtc-history.txt
/scex_conf.json
/tmtc_conf.json
/seqcnt*.txt
@@ -27,3 +28,7 @@ log
/.installed.cfg
/*.egg
/MANIFEST
# Telemetry database.
/tm.db
+24
View File
@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Downlink Test Large" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp -p /tmp/obsw_update.bin /tmp/obsw_update_copy.bin -d 0.1" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
+24
View File
@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Downlink Test Larger" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp -p /tmp/fake_5kb.bin /tmp/fake_5kb_copy.bin -d 0.1" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
+24
View File
@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Downlink Test" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp -p /tmp/hello.txt /tmp/hello2.txt -d 0.1" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
+1 -1
View File
@@ -13,7 +13,7 @@
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp filetest/obsw_update.bin /tmp/obsw_update.bin -d 0.3" />
<option name="PARAMETERS" value="cfdp filetest/obsw_update.bin /tmp/obsw_update.bin -d 0.1" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
+24
View File
@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Test File Small Closure" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp filetest/cfdp_test.txt /tmp/cfdp_test.txt -d 0.2" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
+1 -1
View File
@@ -1,7 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="tmtccli" type="PythonConfigurationType" factoryName="Python">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="INTERPRETER_OPTIONS" value="-X dev" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
+650 -10
View File
@@ -8,22 +8,662 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones)
list yields a list of all related PRs for each release.
# [v2.3.0] 18.01.2023
# [unreleased]
# [v7.0.0] 2024-05-06
- Reworked PLOC MPSoC commanding to be inline with OBSW update.
## Fixed
- GNSS commands working again (again).
## Added
- Added handling for new clock events.
# [v6.2.0] 2024-04-10
## Added
- Added version set for STR.
- Command for relative timeshift.
- Health commands for payload components.
## Fixed
- EPS power commands working again.
- GNSS commands working again.
## Changed
- Fixed PLOC commanding
# [v6.1.1] 2024-03-06
## Added
- Added Core Ctrl cmd to update leap seconds.
# [v6.1.0] 2024-02-29
## Added
- Added commands to unlock and use STR secondary firmware slot.
- STR BlobStats TM handling
- New ACS CTRL commands.
## Fixed
- RW commanding
# [v6.0.0] 2024-02-08
## Changed
- Bumped `tmccmd` to `v8.0.0rc1` to introduce new command tree handling.
- Added new PLOC SUPV commands to test sets, cleaned up PLOC SUPV commanding.
# [v5.13.0] 2024-01-30
## Added
- First variant of TM handling with a DB which might serve as a foundation for better TM
handling with an ORM in the future.
- Added new parameter commands for PLOC MPSoC to skip SUPV commanding.
# [v5.12.1] 2023-12-13
## Added
- A few new commands to test the TC scheduler.
# [v5.12.0] 2023-12-06
## Added
- New ACS controller commands.
# [v5.11.0] 2023-11-30
## Added
- Added new commands to disable channel order checks partially for the payload PCDU normal modes.
- Core controller auto switch enable and disable command.
- Star Tracker JSON reload command. Reboot still required.
- PLOC SUPV ADC and Counters report TM handling.
# [v5.10.1] 2023-10-27
- Minor improvements, update event translation.
# [v5.10.0] 2023-10-27
- Added new STR commands to allow more debugging.
# [v5.9.0] 2023-10-24
## Added
- Added command to update PL PCDU I and V parameter bounds commands.
# [v5.8.0] 2023-10-11
## Added
- Xiphos WDT enable and disable command.
# [v5.7.1] 2023-10-11
## Added
- SCEX normal command
# [v5.7.0] 2023-10-10
- `tmtccmd` v6.0.0
- `spacepackets` v18.0.0
## Added
- Power controller commands.
# [v5.6.0] 2023-09-14
- `tmtccmd` v6.0.0
- `spacepackets` v18.0.0
## Added
- CFDP file downlink support.
# [v5.5.1] 2023-09-12
## Fixed
- Some API usage fixes related to `tmtccmd` update.
# [v5.5.0] 2023-09-12
- Version is not specfied dynamically anymore and can be updated in `pyproject.toml`
- New events and returnvalues
- Bump `tmtccmd` to v6.0.0rc0
# [v5.4.3] 2023-08-15
## Added
- PLOC SUPV HK parsing.
# [v5.4.2] 2023-08-15
## Added
- New NONE entry for PL PCDU submode enum.
# [v5.4.1] 2023-08-15
## Added
- New event TLE_TOO_OLD
## Changed
- PL Subsystem mode ID is int enum now.
# [v5.4.0] 2023-08-15
## Added
- New enumeration for PL PCDU commanding.
- Some new events
# [v5.3.1] 2023-07-26
## Changed
- Adaptions for ACS CTRL strategy enum to make it compatible to software. Also make it re-usable
by putting it in global scope.
# [v5.3.0] 2023-07-26
## Added
- Dataset handling for new ACS fused rot rate dataset.
# [v5.2.0] 2023-07-13
- `tmtccmd` v5.0.0
## Added
- New TCS controller events
## Changed
- HK level can be specified as CLI argument now.
# [v5.1.0] 2023-06-28
## Added
- Internal error reporter dataset handling.
## Fixed
- `APP_LOGGER` is the root logger now.
## Changed
- HK is only displayed in brief format per default now. This will soon be adaptable by CLI
argument.
# [v5.0.0] 2023-06-22
## Changed
- Force flag for copy helper.
# [v4.1.0] 2023-06-14
## Added
- Some BPX battery commands
# [v4.0.0] 2023-06-10
`tmtccmd` version: v5.0.0rc0
## Added
- Event handling for reboot counter events.
- Start adding new MPSoC commands, improve MPSoC commanding module a bit.
- Handling for PLOC MPSoC flash content report.
## Fixed
- Fix for PLOC power switching.
- Bump `tmtccmd` to v5.0.0rc0 for important bugfix in CFDP header.
# [v3.1.2] 2023-06-19
## Fixed
- Pin `tmtccmd` to v4.1.3 to enforce correct `spacepackets` version on install
# [v3.1.1] 2023-04-17
## Added
- Update generated event file.
# [v3.1.0] 2023-04-16
## Added
- New core controller file system helper commands.
# [v3.0.0] 2023-04-14
## Fixed
- Bugfix for STR solution set format.
- Update for STR commands.
## Added
- Added core commands to execute `systemctl` commands and to execute arbitrary Linux commands.
# [v2.22.1] 2023-04-12
## Added
- Prompts to specify custom filename for OBSW update
# [v2.22.0] 2023-04-07
- Various smaller and helper commands added for tests
- Update generated files
# [v2.21.0] 2023-04-04
## Added
- Add boot mode command for EIVE system.
## Changed
- PCDU switcher set now includes the 3V3 stack switcher state.
# [v2.20.1] 2023-04-01
## Fixed
- MEKF: Handle NOT_FINITE status (key 5)
# [v2.20.0] 2023-03-28
## Changed
- COM `Submode` enum moved from subsystem module to separate definitions module and renamed
to `Mode`. Added re-imports with the name `ComMode` in the subsystem and syrlinks module.
- Convert various enums to proper `IntEnum`s
- Updates for some enumerations.
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/178
## Fixed
- Eb to N0 calculation: Improve robustness against division by zero.
- Some fixes for PCDU commands: Wrongfully packed command to switch devices off instead of on.
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/180.
## Added
- Added `PcduSwitches` enum.
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/179
# [v2.19.4] 2023-03-24
## Fixed
- Correction for Syrlinks submodes
- Update generated files
# [v2.19.3] 2023-03-21
- Update generated files
- Improve STR commanding a bit
# [v2.19.2] 2023-03-17
- Update generated files
## Added
- Add a little bit of first time stamp extraction for HK packet handling.
# [v2.19.1] 2023-03-14
## Added
- New `subsystems.csv` file with all subsystem IDs
- Update `events.csv` and `returnvalues.csv`
# [v2.19.0] 2023-03-14
## Added
- Added RTD ID enum and Set ID enumeration in the RTD module.
- STR Temperature Set
- Added some more MPSoC commands
- RTD HK set
## Fixed
- Import error for STR code
- STR HK bugfixes and length check
# [v2.18.1] 2023-03-11
## Fixed
- Missing heater location fix.
## Added
- Request to announce reboot counts in core controller commands
# [v2.18.0] 2023-03-11
## Added
- Added GPS Altitude for GPS Processed Data Dataset
## Changed
- Updated CSVs.
- ACS mode changes: The ACS CTRL submodes are now modes. DETUBMLE is now submode of SAFE mode.
# [v2.17.3] 2023-03-09
## Fixed
- Fixed the heater object ID names completely. Also,
the HPA heater is now the Syrlinks heater.
# [v2.17.2] 2023-03-07
- Updated CSVs
- New events for core controller
# [v2.17.1] 2023-03-07
## Added
- `MGT_ASSEMBLY` object ID
# [v2.17.0] 2023-03-07
## Added
- Health set and health announce commands
- Camera Switcher, Syrlinks Assembly, IMTQ assembly and Star Tracker assembly object IDs added
## Changed
- Breaking typo fix in TMP1075 `SetId`
# [v2.16.4] 2023-03-04
## Added
- Some more IMTQ commands
# [v2.16.3] 2023-03-03
## Added
- Syrlinks ASSY object ID
# [v2.16.2] 2023-03-01
## Added
- Added ACS action cmds
- Added new ACS hk values
- Added ACS set parameter cmds
## Fixed
- Correction for ACS CTRL raw data requests HK type
- Fixed diag related ACS hk cmds
## Added
- Basic MGM commanding (modes)
# [v2.16.1] 2023-02-24
- Updated CSVs for new persistent TM store
# [v2.16.0] 2023-02-23
## Added
- PDEC parameter commands to change size of positive and negative window of AD frames.
## Fixed
- Added missing skip directive for private resultcode.
# [v2.15.2] 2023-02-23
- Update of generated returnvalue and event files.
# [v2.15.1] 2023-02-23
- Actually use `tmtccmd` 4.1 in requirements.
- Remove `setup.cfg` completely
# [v2.15.0] 2023-02-23
tmtccmd version v4.1.1
## Changed
- Moved to `pyproject.toml` package file
## Fixed
- Correction in `tmtccmd` dependency, added missing function
# [v2.14.0] 2023-02-22
## Changed
- Generated CSV files for PDEC handler
# [v2.13.0] 2023-02-21
tmtccmd version 4.0.0
Added `python-dateutil` dependency for time prompts.
## Added
- Basic persistent TM store commanding
- System and TCS system announce mode commands
## Changed
- IMTQ set IDs.
- Significantly improved IMTQ module and also updated it to refactored OBSW IMTQ handlers.
- Update of generated CSVs: Explicit no description strings
# [v2.12.7] 2023-02-17
- Re-run generators
- Small fix for HK parsing, faulty printout
# [v2.12.6] 2023-02-14
## Fixed
- Fixed GPS processed set output
## Added
- Added command to request switcher set from PCDU handler.
# [v2.12.5] 2023-02-13
## Added
- EIVE system commands
# [v2.12.4] 2023-02-12
## Fixed
- `tmtccmd` bumped to v4.0.0rc2, package discovery was broken.
## Added
- Syrlinks temperatur set readout
# [v2.12.3] 2023-02-10
tmtccmd v4.0.0rc1
## Fixed
- Fixed SUS processed data printout format.
- Fixed other ACS processed data printout format.
- Fixed ACS submode: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/132
# [v2.12.2] 2023-02-08
- Use specific `tmtccmd` rev with new mode helper method.
# [v2.12.1] 2023-02-08
## Added
- Added version announce and current image announce commands.
- Added persistent TM store object IDs
- GPS enable and disable HK commands
- All mode commands for the COM subsystem.
# [v2.12.0] 2023-02-06
## Changed
- Updated the subsystem IDs to avoid value clashes with regular device handler mode IDs.
# [v2.11.0] 2023-02-06
## Fixed
- TMP1075 comands: Implement proper prompt for device select.
- TMP1075 commands: Add OFF, ON, NORMAL, and HK command
# [v2.10.0] 2023-02-03
tmtccmd v4.0.0rc0
## Changed
- Updated ACS SS commands for OBSW ACS SS update.
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/130
## Fixed
- Fixed parsing of processed GPS data
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/129
# [v2.9.0] 2023-02-01
## Fixed
- Create proper application root logger now.
- Generated files update.
## Added
- Dedicated handling for health events.
- Add time dump command.
- Time event handling.
# [v2.8.0] 2023-02-01
- Move all device modules inside `pus_tc` and `pus_tm` to `tmtc` module and respective
subsystem submodules.
- Move low level ACS board device modules `gyros.py` and `mgms.py`
to the `tmtc.acs` module.
- Bump tmtccmd to include more pythonic log usage. All related changes.
It is recommended to use `logging.getLogger(__name__)` for module level loggers now.
- Moved TCS components to `tmtc` module
- Renamed `HEATER_ID` to `HEATER_CONTROLLER_ID`
# [v2.7.0] 2023-01-31
- tmtccmd v4.0.0a3
# [v2.6.0 and v2.6.1] 2023-01-28
## Changed
- Reworked and improved PUS 20 parameter reply handling
## Added
- COM subsystem commanding. Default datarate parameter commanding
was moved to the subsystem as well.
# [v2.5.0] 2023-01-26
## Fixed
- Bugfix for CCSDS handler commanding: Pass correct object ID
- Processed MGM set TM handling fix
## Added
- Star Tracker: Add commands to update default datarate.
## Changed
- Move Star Tracker module to `tmtc` folder and add some set IDs. Rename `SetIds` to `SetId`.
- Move `syrlinks_hk_handler` and `ccsds_handler` module to `tmtc` module.
Rename `syrlinks_hk_handler` to `syrlinks_handler`.
- Move `star_tracker` module into `tmtc.acs`
- CCSDS Handler: Switch from action commands to mode commands for ON/OFF handling.
- Star Tracker: Switch from actions commands to mode commands for RX/TX/Modulation commanding.
# [v2.4.0] and [v2.4.1] 2023-01-23
- Pin `tmtccmd` to v4.0.0a2
- Unify and move Syrlinks module, some bugfixes
- Add/Re-enable handling for SUS temp packets
- Update SA deployment commands for OBSW https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/347
- Extend, fix and improve Syrlinks TMTC handling a bit
# [v2.3.0] and [v2.3.1] 2023-01-18
- Bumped `tmtccmd` version to new alpha release, use some new features
and fix the breaking changes
# [v2.2.0] 16.01.2023
# [v2.2.0] 2023-01-16
- A lot of consistency renaming: Single name for enums which are not flag enums,
e.g `ActionId` instead of `ActionIds`
- Updated required Python version to 3.10
# [v2.1.1] 12.01.2023
# [v2.1.1] 2023-01-12
- Typo in `setup.cfg`, missing version prefix `v` for `tmtccmd`
# [v2.1.0] 12.01.2023
# [v2.1.0] 2023-01-12
- Various refactoring and tweaks to allow easier integration into `eive-mib`.
- Handle ACS CTRL HK sets.
@@ -32,22 +672,22 @@ list yields a list of all related PRs for each release.
- Starting from now, more regular releases, especially on breaking changes. This is because
this is now also a library with dependents.
# [v2.0.2] 01.12.2022
# [v2.0.2] 2022-01-12
- Bumped dependencies, small fix to allow working script if PyQt is not installed
# [v2.0.1] 29.11.2022
# [v2.0.1] 2022-11-29
- Minor bugfix
# [v2.0.0] 29.11.2022
# [v2.0.0] 2022-11-29
- The tmtc program is installable now, which allow re-using it in other Python applications
- Bugfixes for IMTQ TM handling
- Updates S/A deployment command
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/118
# [v1.13.0] 13.10.2022
# [v1.13.0] 2022-10-13
- CFDP integration
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/113
@@ -60,7 +700,7 @@ list yields a list of all related PRs for each release.
- Update PLOC supervisor commands
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/107
# [v1.12.0] 05.07.2022
# [v1.12.0] 2022-07-05
- Update GPS HK Parsing
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/86
@@ -100,4 +740,4 @@ list yields a list of all related PRs for each release.
- Extended heater commands for more informative output which component is heated
See [milestones](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/milestones)
and [releases](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/releases)
and [releases](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/releases)
+29 -14
View File
@@ -4,7 +4,7 @@ This application can be used to test the EIVE On-Board Software. Furthermore, it
also be used to retrieve all sorts of telemetry data like housekeeping data.
It is recommended to use this application with a virtual environment.
The [virtual environemnt](#venv) chapter describes how to set one up. The [requirements](#reqs)
The [virtual environment](#venv) chapter describes how to set one up. The [requirements](#reqs)
describes how to install all required packages.
The configuration file can currently be found at `tmtc_conf.json`. It caches settings
@@ -61,42 +61,57 @@ Run GUI mode
# <a id="reqs"></a> Install requirements
There are two ways to install the requirements. One is to install the primary dependency
`tmtccmd` interactively. This is the recommended way
`tmtccmd` interactively.
Assuming you are running in a virtual environment:
## Installing via PyPI
1. Install `tmtccmd` for virtual environment. `-e` for interactive installation.
It is recommended to install `eive-tmtc` itself interactively, which also installs
all required dependencies.
```sh
cd deps/tmtccmd
pip install -e .[gui]
```
```sh
pip install -e .
```
Alternatively you can also install the packages from PyPI completely, but the risk of
incompatibilities will be high there
If you only want to install all dependencies:
```sh
pip install -r requirements.txt
```
## Install interactively
Clone the dependency first inside the `deps` folder
```sh
cd deps
./install_tmtccmd.sh
```
Then you can install `tmtccmd` interactively
```sh
cd tmtccmd
pip install -e .
```
# Run Linter
Can be used to quickly check validity of script. Install `flake8` first
```sh
python3 -m pip install flake8
python3 -m pip install ruff
```
or on Windows
```sh
py -m pip install flake8
py -m pip install ruff
```
and then run the `lint.py` script
and then run it
```sh
./lint.py
ruff .
```
# Run Auto-Formatter
+9
View File
@@ -0,0 +1,9 @@
FROM python:3
RUN apt-get update
RUN apt-get --yes upgrade
#tzdata is a dependency, won't install otherwise
ARG DEBIAN_FRONTEND=noninteractive
#pip needs a valid user to work
RUN adduser --uid 114 jenkins
+14
View File
@@ -0,0 +1,14 @@
pipeline {
agent {
docker {
image 'eive-tmtc-ci:d2'
}
}
stages {
stage('Package') {
steps {
sh 'pip install .'
}
}
}
}
+3 -7
View File
@@ -1,11 +1,7 @@
import logging
from pathlib import Path
SW_NAME = "eive-tmtc"
VERSION_MAJOR = 2
VERSION_MINOR = 2
VERSION_REVISION = 0
__version__ = "2.2.0"
EIVE_TMTC_ROOT = Path(__file__).parent
PACKAGE_ROOT = EIVE_TMTC_ROOT.parent
APP_LOGGER = logging.getLogger()
+28
View File
@@ -0,0 +1,28 @@
import logging
from spacepackets.cfdp import ConditionCode, TransactionId
from cfdppy.mib import DefaultFaultHandlerBase
_LOGGER = logging.getLogger(__name__)
class EiveCfdpFaultHandler(DefaultFaultHandlerBase):
def notice_of_suspension_cb(
self, transaction_id: TransactionId, cond: ConditionCode, progress: int
):
_LOGGER.info(f"Received notice of suspension: {cond!r}")
def notice_of_cancellation_cb(
self, transaction_id: TransactionId, cond: ConditionCode, progress: int
):
_LOGGER.info(f"Received notice of cancellation: {cond!r}")
def abandoned_cb(
self, transaction_id: TransactionId, cond: ConditionCode, progress: int
):
_LOGGER.info(f"Abandoned transaction: {cond!r}")
def ignore_cb(
self, transaction_id: TransactionId, cond: ConditionCode, progress: int
):
_LOGGER.info(f"Ignored transaction: {cond!r}")
+253
View File
@@ -0,0 +1,253 @@
from dataclasses import dataclass
from typing import Optional, Tuple
import deprecation
from spacepackets import PacketType, SpacePacket, SpacePacketHeader
from spacepackets.cfdp import GenericPduPacket, PduFactory
from spacepackets.cfdp.pdu import PduHolder
from cfdppy import (
CfdpUserBase,
LocalEntityCfg,
RemoteEntityCfgTable,
)
from cfdppy.defs import CfdpState
from cfdppy.handler import (
DestHandler,
DestStateWrapper,
SourceHandler,
SourceStateWrapper,
)
from cfdppy.handler.common import PacketDestination, get_packet_destination
from cfdppy.mib import CheckTimerProvider
from cfdppy.request import PutRequest
from spacepackets.seqcount import ProvidesSeqCount
from tmtccmd.version import get_version
@dataclass
class StateWrapper:
source_handler_state = SourceStateWrapper()
dest_handler_state = DestStateWrapper()
class CfdpHandler:
"""Wrapper class which wraps both the :py:class:`tmtccmd.cfdp.handler.source.SourceHandler` and
:py:class:`tmtccmd.cfdp.handler.dest.DestHandler` in a sensible way.
If you have special requirements, for example you want to spawn a new destination handler
for each file copy transfer to allow multiple consecutive file transfers, it might be a good
idea to write a custom wrapper."""
def __init__(
self,
cfg: LocalEntityCfg,
user: CfdpUserBase,
seq_cnt_provider: ProvidesSeqCount,
remote_cfg_table: RemoteEntityCfgTable,
check_timer_provider: CheckTimerProvider,
):
self.remote_cfg_table = remote_cfg_table
self.dest_handler = DestHandler(
cfg=cfg,
user=user,
remote_cfg_table=remote_cfg_table,
check_timer_provider=check_timer_provider,
)
self.source_handler = SourceHandler(
cfg=cfg,
seq_num_provider=seq_cnt_provider,
user=user,
remote_cfg_table=remote_cfg_table,
check_timer_provider=check_timer_provider,
)
def put_request(self, request: PutRequest):
self.source_handler.put_request(request)
def pull_next_source_packet(self) -> Optional[PduHolder]:
res = self.source_handler.state_machine()
if res.states.num_packets_ready:
return self.source_handler.get_next_packet()
return None
def pull_next_dest_packet(self) -> Optional[PduHolder]:
res = self.dest_handler.state_machine()
if res.states.packets_ready:
return self.dest_handler.get_next_packet()
return None
def __iter__(self):
return self
def __next__(self) -> Tuple[Optional[PduHolder], Optional[PduHolder]]:
"""The iterator for this class will returns a tuple of optional PDUs wrapped b a
:py:class:`PduHolder`.
:return: Can be a tuple where the first entry can hold a source packet and the second entry
can be a destination packet. If both packets are None, a StopIteration will be raised.
"""
next_source_packet = self.pull_next_source_packet()
next_dest_packet = self.pull_next_dest_packet()
if not next_dest_packet and not next_source_packet:
raise StopIteration
return next_source_packet, next_dest_packet
def put_request_pending(self) -> bool:
return self.source_handler.states.state != CfdpState.IDLE
@deprecation.deprecated(
deprecated_in="6.0.0rc0",
current_version=get_version(),
details="Use insert_packet instead",
)
def pass_packet(self, packet: GenericPduPacket):
self.insert_packet(packet)
def insert_packet(self, packet: GenericPduPacket):
"""This function routes the packets based on PDU type and directive type if applicable.
The routing is based on section 4.5 of the CFDP standard which specifies the PDU forwarding
procedure."""
if get_packet_destination(packet) == PacketDestination.DEST_HANDLER:
self.dest_handler.insert_packet(packet)
elif get_packet_destination(packet) == PacketDestination.SOURCE_HANDLER:
self.source_handler.insert_packet(packet) # type: ignore
class CfdpInCcsdsHandler:
"""Wrapper helper type used to wrap PDU packets into CCSDS packets and to extract PDU
packets from CCSDS packets.
:param cfg: Local CFDP entity configuration.
:param user: User wrapper. This contains the indication callback implementations and the
virtual filestore implementation.
:param cfdp_seq_cnt_provider: Every CFDP file transfer has a transaction sequence number.
This provider is used to retrieve that sequence number.
:param ccsds_seq_cnt_provider: Each CFDP PDU is wrapped into a CCSDS space packet, and each
space packet has a dedicated sequence count. This provider is used to retrieve the
sequence count.
:param ccsds_apid: APID to use for the CCSDS space packet header wrapped around each PDU.
This is important so that the OBSW can distinguish between regular PUS packets and
CFDP packets."""
def __init__(
self,
cfg: LocalEntityCfg,
user: CfdpUserBase,
remote_cfg_table: RemoteEntityCfgTable,
ccsds_apid: int,
cfdp_seq_cnt_provider: ProvidesSeqCount,
ccsds_seq_cnt_provider: ProvidesSeqCount,
check_timer_provider: CheckTimerProvider,
):
self.cfdp_handler = CfdpHandler(
cfg=cfg,
user=user,
seq_cnt_provider=cfdp_seq_cnt_provider,
remote_cfg_table=remote_cfg_table,
check_timer_provider=check_timer_provider,
)
self.ccsds_seq_cnt_provider = ccsds_seq_cnt_provider
self.ccsds_apid = ccsds_apid
def put_request_pending(self):
return self.cfdp_handler.put_request_pending()
def state_machine(self):
self.source_handler.state_machine()
self.dest_handler.state_machine()
@deprecation.deprecated(
deprecated_in="6.0.0rc1",
current_version=get_version(),
details="Use state_machine instead",
)
def fsm(self):
self.state_machine()
@property
def source_handler(self):
return self.cfdp_handler.source_handler
@property
def dest_handler(self):
return self.cfdp_handler.dest_handler
def pull_next_source_packet(self) -> Optional[Tuple[PduHolder, SpacePacket]]:
"""Retrieves the next PDU to send and wraps it into a space packet"""
next_packet = self.cfdp_handler.pull_next_source_packet()
if next_packet is None:
return next_packet
sp_header = SpacePacketHeader(
packet_type=PacketType.TC,
apid=self.ccsds_apid,
seq_count=self.ccsds_seq_cnt_provider.get_and_increment(),
data_len=next_packet.packet_len - 1,
)
return next_packet, SpacePacket(sp_header, None, next_packet.pack())
def pull_next_dest_packet(self) -> Optional[Tuple[PduHolder, SpacePacket]]:
"""Retrieves the next PDU to send and wraps it into a space packet"""
next_packet = self.cfdp_handler.pull_next_dest_packet()
if next_packet is None:
return next_packet
sp_header = SpacePacketHeader(
packet_type=PacketType.TC,
apid=self.ccsds_apid,
seq_count=self.ccsds_seq_cnt_provider.get_and_increment(),
data_len=next_packet.packet_len - 1,
)
return next_packet, SpacePacket(sp_header, None, next_packet.pack())
@deprecation.deprecated(
deprecated_in="6.0.0rc1",
current_version=get_version(),
details="Use insert_space_packet instead",
)
def pass_space_packet(self, space_packet: SpacePacket):
self.insert_space_packet(space_packet)
def insert_space_packet(self, space_packet: SpacePacket) -> bool:
if space_packet.user_data is None:
raise ValueError(
"space packet is empty, expected packet containing a CFDP PDU"
)
# Unwrap the user data and pass it to the handler
pdu_raw = space_packet.user_data
pdu_base = PduFactory.from_raw(pdu_raw)
if pdu_base:
self.insert_pdu_packet(pdu_base)
return True
return False
def insert_pdu_packet(self, pdu: GenericPduPacket):
self.cfdp_handler.insert_packet(pdu)
@deprecation.deprecated(
deprecated_in="6.0.0rc1",
current_version=get_version(),
details="Use insert_pdu_packet instead",
)
def pass_pdu_packet(self, pdu_base: GenericPduPacket):
self.insert_pdu_packet(pdu_base)
def __iter__(self):
return self
def __next__(
self,
) -> Tuple[
Optional[Tuple[PduHolder, SpacePacket]],
Optional[Tuple[PduHolder, SpacePacket]],
]:
"""The iterator for this class will returns a tuple of optional PDUs wrapped b a
:py:class:`PduHolder`.
:return: Can be a tuple where the first entry can hold a source packet and the second entry
can be a destination packet. If both packets are None, a StopIteration will be raised.
"""
next_source_tuple = self.pull_next_source_packet()
next_dest_tuple = self.pull_next_dest_packet()
if not next_source_tuple and not next_dest_tuple:
raise StopIteration
return next_source_tuple, next_dest_tuple
+29
View File
@@ -0,0 +1,29 @@
import logging
from typing import Any
from eive_tmtc.config.definitions import CFDP_APID
from spacepackets.ccsds import SPACE_PACKET_HEADER_SIZE
from spacepackets.cfdp import PduFactory, PduType
from eive_tmtc.cfdp.handler import CfdpInCcsdsHandler
from tmtccmd.tmtc import SpecificApidHandlerBase
_LOGGER = logging.getLogger(__name__)
class CfdpInCcsdsWrapper(SpecificApidHandlerBase):
def __init__(self, cfdp_in_ccsds_handler: CfdpInCcsdsHandler):
self.handler = cfdp_in_ccsds_handler
super().__init__(CFDP_APID, None)
def handle_tm(self, packet: bytes, _user_args: Any):
# Ignore the space packet header. Its only purpose is to use the same protocol and
# have a seaprate APID for space packets. If this function is called, the APID is correct.
pdu = packet[SPACE_PACKET_HEADER_SIZE:]
generic_pdu = PduFactory.from_raw(pdu)
assert generic_pdu is not None
if generic_pdu.pdu_type == PduType.FILE_DATA:
_LOGGER.info("Received File Data PDU")
else:
directive_type = PduFactory.pdu_directive_type(pdu)
_LOGGER.info(f"Received File Directive PDU with type {directive_type!r}")
self.handler.insert_pdu_packet(generic_pdu)
+77
View File
@@ -0,0 +1,77 @@
from datetime import timedelta
import logging
from spacepackets.cfdp import ConditionCode
from spacepackets.util import UnsignedByteField
from cfdppy import CfdpUserBase, TransactionId
from cfdppy.mib import CheckTimerProvider, Countdown, EntityType
from cfdppy.user import (
TransactionFinishedParams,
MetadataRecvParams,
FileSegmentRecvdParams,
TransactionParams,
)
_LOGGER = logging.getLogger(__name__)
class EiveCheckTimerProvider(CheckTimerProvider):
def provide_check_timer(
self,
local_entity_id: UnsignedByteField,
remote_entity_id: UnsignedByteField,
entity_type: EntityType,
) -> Countdown:
return Countdown(timedelta(seconds=5.0))
class EiveCfdpUser(CfdpUserBase):
def transaction_indication(
self,
transaction_indication_params: TransactionParams,
):
_LOGGER.info(
f"CFDP User: Start of File {transaction_indication_params.transaction_id}"
)
def eof_sent_indication(self, transaction_id: TransactionId):
_LOGGER.info(f"CFDP User: EOF sent for {transaction_id}")
def transaction_finished_indication(self, params: TransactionFinishedParams):
_LOGGER.info(f"CFDP User: {params.transaction_id} finished")
_LOGGER.info(f"Delivery Code: {params.finished_params.delivery_code!r}")
_LOGGER.info(f"Condition code: {params.finished_params.condition_code!r}")
_LOGGER.info(f"File delivery status: {params.finished_params.delivery_code!r}")
def metadata_recv_indication(self, params: MetadataRecvParams):
pass
def file_segment_recv_indication(self, params: FileSegmentRecvdParams):
_LOGGER.info(
f"CFDP User: Received File Data PDU for {params.transaction_id} | Offset:"
f" {params.offset} | Segment Length: {params.length}"
)
def report_indication(self, transaction_id: TransactionId, status_report: any):
pass
def suspended_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode
):
pass
def resumed_indication(self, transaction_id: TransactionId, progress: int):
pass
def fault_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
):
pass
def abandoned_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
):
pass
def eof_recv_indication(self, transaction_id: TransactionId):
_LOGGER.info(f"CFDP User: EOF received for {transaction_id}")
+1
View File
@@ -0,0 +1 @@
from .definitions import * # noqa
+1
View File
@@ -3,6 +3,7 @@
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
it to your needs.
"""
import enum
from tmtccmd import CcsdsTmtcBackend
+24 -8
View File
@@ -9,16 +9,24 @@ import enum
from spacepackets import PacketType
from spacepackets.ccsds import PacketId
from spacepackets.util import UnsignedByteField
from pathlib import Path
TM_DB_PATH = "tm.db"
# Separate DB or not? Not sure..
# RAW_TM_PATH = "raw_tm.db"
# TODO: The cleanest way would be to load those from the config file..
PRINT_RAW_HK_B64_STR = False
PRINT_RAW_ACTION_DATA_REPLY_B64_STR = True
PRINT_RAW_EVENTS_B64_STR = False
PUS_APID = 0x65
CFDP_APID = 0x66
PUS_PACKET_ID = PacketId(PacketType.TM, True, PUS_APID)
CFDP_PACKET_ID = PacketId(PacketType.TM, False, CFDP_APID)
SPACE_PACKET_IDS = (
PUS_PACKET_ID.raw(),
CFDP_PACKET_ID.raw(),
PUS_PACKET_ID,
CFDP_PACKET_ID,
)
CFDP_LOCAL_ENTITY_ID = UnsignedByteField(byte_len=2, val=1)
@@ -29,15 +37,17 @@ class CustomServiceList(str, enum.Enum):
value: str
TEST_DEVICE = "test"
HEALTH = "health"
P60DOCK = "p60dock"
PDU1 = "pdu1"
PDU2 = "pdu2"
POWER = "power"
ACU = "acu"
ACS = "acs"
GYRO = "gyro"
MGMS = "mgms"
COM_SS = "com"
BPX_BATTERY = "bpx"
TMP1075_1 = "tmp1075_1"
TMP1075_2 = "tmp1075_2"
HEATER = "heater"
IMTQ = "imtq"
PLOC_SUPV = "ploc_supv"
@@ -51,7 +61,7 @@ class CustomServiceList(str, enum.Enum):
REACTION_WHEEL_4 = "rw_4"
RW_ASSEMBLY = "rw_ass"
RAD_SENSOR = "rad_sensor"
GPS_CTRL = "gnss-ctrl"
GPS_CTRL = "gps"
PLOC_MEMORY_DUMPER = "ploc_memory_dumper"
CORE = "core"
STAR_TRACKER = "star_tracker"
@@ -64,11 +74,17 @@ class CustomServiceList(str, enum.Enum):
PL_SS = "pl_subsystem"
ACS_BRD_ASS = "acs_brd_ass"
SUS_BRD_ASS = "sus_brd_ass"
TCS = "tcs"
TCS_SS = "tcs_subsystem"
TCS_CTRL = "tcs_ctrl"
TCS_ASS = "tcs_ass"
TIME = "time"
PROCEDURE = "proc"
RTD = "rtd"
TMP1075 = "tmp1075"
TVTTESTPROCEDURE = "tvtestproc"
CONTROLLERS = "controllers"
SCEX = "scex"
TM_STORE = "tm_store"
SYSTEM = "system"
PWR_CTRL = "pwr_ctrl"
EPS_SS = "eps_subsystem"
XIPHOS_WDT = "xiphos_wdt"
+318 -232
View File
@@ -1,240 +1,326 @@
Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
2200;0x0898;STORE_SEND_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2201;0x0899;STORE_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2202;0x089a;STORE_SEND_READ_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2203;0x089b;STORE_READ_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2204;0x089c;UNEXPECTED_MSG;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2205;0x089d;STORING_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2206;0x089e;TM_DUMP_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2207;0x089f;STORE_INIT_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2208;0x08a0;STORE_INIT_EMPTY;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2209;0x08a1;STORE_CONTENT_CORRUPTED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2210;0x08a2;STORE_INITIALIZE;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2211;0x08a3;INIT_DONE;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2212;0x08a4;DUMP_FINISHED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2213;0x08a5;DELETION_FINISHED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2214;0x08a6;DELETION_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2215;0x08a7;AUTO_CATALOGS_SENDING_FAILED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2600;0x0a28;GET_DATA_FAILED;LOW;;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
2601;0x0a29;STORE_DATA_FAILED;LOW;;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
2800;0x0af0;DEVICE_BUILDING_COMMAND_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2801;0x0af1;DEVICE_SENDING_COMMAND_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2802;0x0af2;DEVICE_REQUESTING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2803;0x0af3;DEVICE_READING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2804;0x0af4;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2805;0x0af5;DEVICE_MISSED_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2806;0x0af6;DEVICE_UNKNOWN_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2807;0x0af7;DEVICE_UNREQUESTED_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2200;0x0898;STORE_SEND_WRITE_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2201;0x0899;STORE_WRITE_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2202;0x089a;STORE_SEND_READ_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2203;0x089b;STORE_READ_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2204;0x089c;UNEXPECTED_MSG;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2205;0x089d;STORING_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2206;0x089e;TM_DUMP_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2207;0x089f;STORE_INIT_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2208;0x08a0;STORE_INIT_EMPTY;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2209;0x08a1;STORE_CONTENT_CORRUPTED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2210;0x08a2;STORE_INITIALIZE;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2211;0x08a3;INIT_DONE;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2212;0x08a4;DUMP_FINISHED;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2213;0x08a5;DELETION_FINISHED;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2214;0x08a6;DELETION_FAILED;LOW;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2215;0x08a7;AUTO_CATALOGS_SENDING_FAILED;INFO;No description;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2600;0x0a28;GET_DATA_FAILED;LOW;No description;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
2601;0x0a29;STORE_DATA_FAILED;LOW;No description;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
2800;0x0af0;DEVICE_BUILDING_COMMAND_FAILED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2801;0x0af1;DEVICE_SENDING_COMMAND_FAILED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2802;0x0af2;DEVICE_REQUESTING_REPLY_FAILED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2803;0x0af3;DEVICE_READING_REPLY_FAILED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2804;0x0af4;DEVICE_INTERPRETING_REPLY_FAILED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2805;0x0af5;DEVICE_MISSED_REPLY;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2806;0x0af6;DEVICE_UNKNOWN_REPLY;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2807;0x0af7;DEVICE_UNREQUESTED_REPLY;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2808;0x0af8;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2809;0x0af9;MONITORING_LIMIT_EXCEEDED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2810;0x0afa;MONITORING_AMBIGUOUS;HIGH;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2811;0x0afb;DEVICE_WANTS_HARD_REBOOT;HIGH;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
4201;0x1069;FUSE_CURRENT_HIGH;LOW;;fsfw/src/fsfw/power/Fuse.h
4202;0x106a;FUSE_WENT_OFF;LOW;;fsfw/src/fsfw/power/Fuse.h
4204;0x106c;POWER_ABOVE_HIGH_LIMIT;LOW;;fsfw/src/fsfw/power/Fuse.h
4205;0x106d;POWER_BELOW_LOW_LIMIT;LOW;;fsfw/src/fsfw/power/Fuse.h
4300;0x10cc;SWITCH_WENT_OFF;LOW;;fsfw/src/fsfw/power/PowerSwitchIF.h
5000;0x1388;HEATER_ON;INFO;;fsfw/src/fsfw/thermal/Heater.h
5001;0x1389;HEATER_OFF;INFO;;fsfw/src/fsfw/thermal/Heater.h
5002;0x138a;HEATER_TIMEOUT;LOW;;fsfw/src/fsfw/thermal/Heater.h
5003;0x138b;HEATER_STAYED_ON;LOW;;fsfw/src/fsfw/thermal/Heater.h
5004;0x138c;HEATER_STAYED_OFF;LOW;;fsfw/src/fsfw/thermal/Heater.h
5200;0x1450;TEMP_SENSOR_HIGH;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5201;0x1451;TEMP_SENSOR_LOW;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5202;0x1452;TEMP_SENSOR_GRADIENT;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5901;0x170d;COMPONENT_TEMP_LOW;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5902;0x170e;COMPONENT_TEMP_HIGH;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5903;0x170f;COMPONENT_TEMP_OOL_LOW;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5904;0x1710;COMPONENT_TEMP_OOL_HIGH;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5905;0x1711;TEMP_NOT_IN_OP_RANGE;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h
7101;0x1bbd;FDIR_CHANGED_STATE;INFO;;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7102;0x1bbe;FDIR_STARTS_RECOVERY;MEDIUM;;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7103;0x1bbf;FDIR_TURNS_OFF_DEVICE;MEDIUM;;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7201;0x1c21;MONITOR_CHANGED_STATE;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h
7202;0x1c22;VALUE_BELOW_LOW_LIMIT;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h
7203;0x1c23;VALUE_ABOVE_HIGH_LIMIT;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h
7204;0x1c24;VALUE_OUT_OF_RANGE;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h
7400;0x1ce8;CHANGING_MODE;INFO;;fsfw/src/fsfw/modes/HasModesIF.h
7401;0x1ce9;MODE_INFO;INFO;;fsfw/src/fsfw/modes/HasModesIF.h
7402;0x1cea;FALLBACK_FAILED;HIGH;;fsfw/src/fsfw/modes/HasModesIF.h
7403;0x1ceb;MODE_TRANSITION_FAILED;LOW;;fsfw/src/fsfw/modes/HasModesIF.h
7404;0x1cec;CANT_KEEP_MODE;HIGH;;fsfw/src/fsfw/modes/HasModesIF.h
7405;0x1ced;OBJECT_IN_INVALID_MODE;LOW;;fsfw/src/fsfw/modes/HasModesIF.h
7406;0x1cee;FORCING_MODE;MEDIUM;;fsfw/src/fsfw/modes/HasModesIF.h
7407;0x1cef;MODE_CMD_REJECTED;LOW;;fsfw/src/fsfw/modes/HasModesIF.h
7506;0x1d52;HEALTH_INFO;INFO;;fsfw/src/fsfw/health/HasHealthIF.h
7507;0x1d53;CHILD_CHANGED_HEALTH;INFO;;fsfw/src/fsfw/health/HasHealthIF.h
7508;0x1d54;CHILD_PROBLEMS;LOW;;fsfw/src/fsfw/health/HasHealthIF.h
7509;0x1d55;OVERWRITING_HEALTH;LOW;;fsfw/src/fsfw/health/HasHealthIF.h
7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7600;0x1db0;HANDLE_PACKET_FAILED;LOW;;fsfw/src/fsfw/tcdistribution/definitions.h
2809;0x0af9;MONITORING_LIMIT_EXCEEDED;LOW;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2810;0x0afa;MONITORING_AMBIGUOUS;HIGH;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
2811;0x0afb;DEVICE_WANTS_HARD_REBOOT;HIGH;No description;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
4300;0x10cc;SWITCH_WENT_OFF;LOW;No description;fsfw/src/fsfw/power/PowerSwitchIF.h
4301;0x10cd;FUSE_CURRENT_HIGH;LOW;No description;fsfw/src/fsfw/power/Fuse.h
4302;0x10ce;FUSE_WENT_OFF;LOW;No description;fsfw/src/fsfw/power/Fuse.h
4304;0x10d0;POWER_ABOVE_HIGH_LIMIT;LOW;No description;fsfw/src/fsfw/power/Fuse.h
4305;0x10d1;POWER_BELOW_LOW_LIMIT;LOW;No description;fsfw/src/fsfw/power/Fuse.h
5000;0x1388;HEATER_ON;INFO;No description;fsfw/src/fsfw/thermal/Heater.h
5001;0x1389;HEATER_OFF;INFO;No description;fsfw/src/fsfw/thermal/Heater.h
5002;0x138a;HEATER_TIMEOUT;LOW;No description;fsfw/src/fsfw/thermal/Heater.h
5003;0x138b;HEATER_STAYED_ON;LOW;No description;fsfw/src/fsfw/thermal/Heater.h
5004;0x138c;HEATER_STAYED_OFF;LOW;No description;fsfw/src/fsfw/thermal/Heater.h
5200;0x1450;TEMP_SENSOR_HIGH;LOW;No description;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5201;0x1451;TEMP_SENSOR_LOW;LOW;No description;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5202;0x1452;TEMP_SENSOR_GRADIENT;LOW;No description;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
5901;0x170d;COMPONENT_TEMP_LOW;LOW;No description;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5902;0x170e;COMPONENT_TEMP_HIGH;LOW;No description;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5903;0x170f;COMPONENT_TEMP_OOL_LOW;LOW;No description;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5904;0x1710;COMPONENT_TEMP_OOL_HIGH;LOW;No description;fsfw/src/fsfw/thermal/ThermalComponentIF.h
5905;0x1711;TEMP_NOT_IN_OP_RANGE;LOW;No description;fsfw/src/fsfw/thermal/ThermalComponentIF.h
7101;0x1bbd;FDIR_CHANGED_STATE;INFO;No description;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7102;0x1bbe;FDIR_STARTS_RECOVERY;MEDIUM;No description;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7103;0x1bbf;FDIR_TURNS_OFF_DEVICE;MEDIUM;No description;fsfw/src/fsfw/fdir/FailureIsolationBase.h
7201;0x1c21;MONITOR_CHANGED_STATE;LOW;No description;fsfw/src/fsfw/monitoring/MonitoringIF.h
7202;0x1c22;VALUE_BELOW_LOW_LIMIT;LOW;No description;fsfw/src/fsfw/monitoring/MonitoringIF.h
7203;0x1c23;VALUE_ABOVE_HIGH_LIMIT;LOW;No description;fsfw/src/fsfw/monitoring/MonitoringIF.h
7204;0x1c24;VALUE_OUT_OF_RANGE;LOW;No description;fsfw/src/fsfw/monitoring/MonitoringIF.h
7400;0x1ce8;CHANGING_MODE;INFO;No description;fsfw/src/fsfw/modes/HasModesIF.h
7401;0x1ce9;MODE_INFO;INFO;No description;fsfw/src/fsfw/modes/HasModesIF.h
7402;0x1cea;FALLBACK_FAILED;HIGH;No description;fsfw/src/fsfw/modes/HasModesIF.h
7403;0x1ceb;MODE_TRANSITION_FAILED;LOW;No description;fsfw/src/fsfw/modes/HasModesIF.h
7404;0x1cec;CANT_KEEP_MODE;HIGH;No description;fsfw/src/fsfw/modes/HasModesIF.h
7405;0x1ced;OBJECT_IN_INVALID_MODE;LOW;No description;fsfw/src/fsfw/modes/HasModesIF.h
7406;0x1cee;FORCING_MODE;MEDIUM;No description;fsfw/src/fsfw/modes/HasModesIF.h
7407;0x1cef;MODE_CMD_REJECTED;LOW;No description;fsfw/src/fsfw/modes/HasModesIF.h
7506;0x1d52;HEALTH_INFO;INFO;No description;fsfw/src/fsfw/health/HasHealthIF.h
7507;0x1d53;CHILD_CHANGED_HEALTH;INFO;No description;fsfw/src/fsfw/health/HasHealthIF.h
7508;0x1d54;CHILD_PROBLEMS;LOW;No description;fsfw/src/fsfw/health/HasHealthIF.h
7509;0x1d55;OVERWRITING_HEALTH;LOW;No description;fsfw/src/fsfw/health/HasHealthIF.h
7510;0x1d56;TRYING_RECOVERY;MEDIUM;No description;fsfw/src/fsfw/health/HasHealthIF.h
7511;0x1d57;RECOVERY_STEP;MEDIUM;No description;fsfw/src/fsfw/health/HasHealthIF.h
7512;0x1d58;RECOVERY_DONE;MEDIUM;No description;fsfw/src/fsfw/health/HasHealthIF.h
7600;0x1db0;HANDLE_PACKET_FAILED;LOW;No description;fsfw/src/fsfw/tcdistribution/definitions.h
7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
8900;0x22c4;CLOCK_SET;INFO;;fsfw/src/fsfw/pus/Service9TimeManagement.h
8901;0x22c5;CLOCK_SET_FAILURE;LOW;;fsfw/src/fsfw/pus/Service9TimeManagement.h
8900;0x22c4;CLOCK_SET;INFO;Clock has been set. P1: old timeval seconds. P2: new timeval seconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
8901;0x22c5;CLOCK_DUMP_LEGACY;INFO;Clock dump event. P1: timeval seconds P2: timeval milliseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
8902;0x22c6;CLOCK_SET_FAILURE;LOW;Clock could not be set. P1: Returncode.;fsfw/src/fsfw/pus/Service9TimeManagement.h
8903;0x22c7;CLOCK_DUMP;INFO;Clock dump event. P1: timeval seconds P2: timeval microseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
8904;0x22c8;CLOCK_DUMP_BEFORE_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
8905;0x22c9;CLOCK_DUMP_AFTER_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
9100;0x238c;TC_DELETION_FAILED;MEDIUM;Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
9700;0x25e4;TEST;INFO;;fsfw/src/fsfw/pus/Service17Test.h
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
10800;0x2a30;STORE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
10801;0x2a31;MSG_QUEUE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
10802;0x2a32;SERIALIZATION_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;;mission/devices/HeaterHandler.h
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;;mission/devices/HeaterHandler.h
11402;0x2c8a;HEATER_WENT_ON;INFO;;mission/devices/HeaterHandler.h
11403;0x2c8b;HEATER_WENT_OFF;INFO;;mission/devices/HeaterHandler.h
11404;0x2c8c;SWITCH_ALREADY_ON;LOW;;mission/devices/HeaterHandler.h
11405;0x2c8d;SWITCH_ALREADY_OFF;LOW;;mission/devices/HeaterHandler.h
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;;mission/devices/HeaterHandler.h
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;;mission/devices/HeaterHandler.h
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;;mission/devices/SolarArrayDeploymentHandler.h
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHandler.h
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/devices/ploc/PlocMPSoCHandler.h
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/ImtqHandler.h
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/devicedefinitions/RwDefinitions.h
11802;0x2e1a;RESET_OCCURED;LOW;;mission/devices/devicedefinitions/RwDefinitions.h
11901;0x2e7d;BOOTING_FIRMWARE_FAILED;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/devices/ploc/PlocSupervisorHandler.h
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;;linux/devices/ploc/PlocSupervisorHandler.h
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/devices/ploc/PlocSupervisorHandler.h
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h
12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/fs/SdCardManager.h
12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/fs/SdCardManager.h
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
12401;0x3071;INVALID_TC_FRAME;HIGH;;linux/ipcore/PdecHandler.h
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/PdecHandler.h
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/PdecHandler.h
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/PdecHandler.h
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/PdecHandler.h
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/PdecHandler.h
12407;0x3077;POLL_ERROR_PDEC;MEDIUM;;linux/ipcore/PdecHandler.h
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
12511;0x30df;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;linux/devices/startracker/StrHelper.h
12512;0x30e0;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/devices/startracker/StrHelper.h
12513;0x30e1;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/devices/startracker/StrHelper.h
12514;0x30e2;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h
12515;0x30e3;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux/devices/startracker/StrHelper.h
12516;0x30e4;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux/devices/startracker/StrHelper.h
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHelper.h
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/objects/AcsBoardAssembly.h
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/objects/AcsBoardAssembly.h
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/objects/AcsBoardAssembly.h
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/AcsBoardAssembly.h
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/objects/SusAssembly.h
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/objects/SusAssembly.h
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/objects/SusAssembly.h
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/SusAssembly.h
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;;mission/system/objects/TcsBoardAssembly.h
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/devices/devicedefinitions/GPSDefinitions.h
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/devices/P60DockHandler.h
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/devices/P60DockHandler.h
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/devices/P60DockHandler.h
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/devices/ploc/PlocSupvUartMan.h
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/devices/ploc/PlocSupvUartMan.h
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/devices/ploc/PlocSupvUartMan.h
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/devices/ploc/PlocSupvUartMan.h
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/devices/ploc/PlocSupvUartMan.h
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/devices/ploc/PlocSupvUartMan.h
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/devices/ploc/PlocSupvUartMan.h
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/devices/ploc/PlocSupvUartMan.h
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocSupvUartMan.h
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocSupvUartMan.h
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/devices/ploc/PlocSupvUartMan.h
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/devices/ploc/PlocSupvUartMan.h
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/devices/ploc/PlocSupvUartMan.h
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;;linux/devices/ploc/PlocSupvUartMan.h
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;;linux/devices/ploc/PlocSupvUartMan.h
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13632;0x3540;HDLC_CRC_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13700;0x3584;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h
13701;0x3585;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
13702;0x3586;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h
13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h
13704;0x3588;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h
13800;0x35e8;MISSING_PACKET;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;;mission/devices/devicedefinitions/ScexDefinitions.h
13901;0x364d;SET_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13902;0x364e;GET_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
9700;0x25e4;TEST;INFO;No description;fsfw/src/fsfw/pus/Service17Test.h
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;No description;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
10800;0x2a30;STORE_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
10801;0x2a31;MSG_QUEUE_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
10802;0x2a32;SERIALIZATION_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
10803;0x2a33;FILESTORE_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
10804;0x2a34;FILENAME_TOO_LARGE_ERROR;LOW;P1: Transaction step ID, P2: 0 for source file name, 1 for dest file name;fsfw/src/fsfw/cfdp/handler/defs.h
10805;0x2a35;HANDLING_CFDP_REQUEST_FAILED;LOW;CFDP request handling failed. P2: Returncode.;fsfw/src/fsfw/cfdp/handler/defs.h
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;The limits for the rotation in safe mode were violated.;mission/acs/defs.h
11201;0x2bc1;RATE_RECOVERY;MEDIUM;The system has recovered from a rate rotation violation.;mission/acs/defs.h
11202;0x2bc2;MULTIPLE_RW_INVALID;HIGH;Multiple RWs are invalid, uncommandable and therefore higher ACS modes cannot be maintained.;mission/acs/defs.h
11203;0x2bc3;MEKF_INVALID_INFO;INFO;MEKF was not able to compute a solution. P1: MEKF state on exit;mission/acs/defs.h
11204;0x2bc4;MEKF_RECOVERY;INFO;MEKF is able to compute a solution again.;mission/acs/defs.h
11205;0x2bc5;MEKF_AUTOMATIC_RESET;INFO;MEKF performed an automatic reset after detection of nonfinite values.;mission/acs/defs.h
11206;0x2bc6;PTG_CTRL_NO_ATTITUDE_INFORMATION;HIGH;For a prolonged time, no attitude information was available for the Pointing Controller. Falling back to Safe Mode.;mission/acs/defs.h
11207;0x2bc7;SAFE_MODE_CONTROLLER_FAILURE;HIGH;The ACS safe mode controller was not able to compute a solution and has failed. P1: Missing information about magnetic field, P2: Missing information about rotational rate;mission/acs/defs.h
11208;0x2bc8;TLE_TOO_OLD;INFO;The TLE for the SGP4 Propagator has become too old.;mission/acs/defs.h
11209;0x2bc9;TLE_FILE_READ_FAILED;LOW;The TLE could not be read from the filesystem.;mission/acs/defs.h
11210;0x2bca;PTG_RATE_VIOLATION;MEDIUM;The limits for the rotation in pointing mode were violated.;mission/acs/defs.h
11211;0x2bcb;DETUMBLE_TRANSITION_FAILED;HIGH;The detumble transition has failed. //! P1: Last detumble state before failure.;mission/acs/defs.h
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/power/defs.h
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/power/defs.h
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;No description;mission/power/defs.h
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/power/defs.h
11304;0x2c28;DATASET_READ_FAILED;INFO;The dataset read for the inputs of the Power Controller has failed.;mission/power/defs.h
11305;0x2c29;VOLTAGE_OUT_OF_BOUNDS;HIGH;No description;mission/power/defs.h
11306;0x2c2a;TIMEDELTA_OUT_OF_BOUNDS;LOW;Time difference for Coulomb Counter was too large. P1: time in s * 10;mission/power/defs.h
11307;0x2c2b;POWER_LEVEL_LOW;HIGH;The State of Charge is below the limit for payload use. Setting Payload to faulty.;mission/power/defs.h
11308;0x2c2c;POWER_LEVEL_CRITICAL;HIGH;The State of Charge is below the limit for higher modes. Setting Reaction Wheels to faulty.;mission/power/defs.h
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
11402;0x2c8a;HEATER_WENT_ON;INFO;No description;mission/tcs/HeaterHandler.h
11403;0x2c8b;HEATER_WENT_OFF;INFO;No description;mission/tcs/HeaterHandler.h
11404;0x2c8c;SWITCH_ALREADY_ON;INFO;No description;mission/tcs/HeaterHandler.h
11405;0x2c8d;SWITCH_ALREADY_OFF;INFO;No description;mission/tcs/HeaterHandler.h
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;No description;mission/tcs/HeaterHandler.h
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;No description;mission/tcs/HeaterHandler.h
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;No description;mission/SolarArrayDeploymentHandler.h
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/payload/plocMpsocHelpers.h
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/plocMpsocHelpers.h
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/plocMpsocHelpers.h
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/payload/plocMpsocHelpers.h
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/payload/plocMpsocHelpers.h
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/payload/plocMpsocHelpers.h
11607;0x2d57;SUPV_NOT_ON;LOW;SUPV not on for boot or shutdown process. P1: 0 for OFF transition, 1 for ON transition.;linux/payload/plocMpsocHelpers.h
11608;0x2d58;SUPV_REPLY_TIMEOUT;LOW;SUPV reply timeout.;linux/payload/plocMpsocHelpers.h
11609;0x2d59;CAM_MUST_BE_ON_FOR_SNAPSHOT_MODE;LOW;Camera must be commanded on first.;linux/payload/plocMpsocHelpers.h
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/acs/ImtqHandler.h
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/acs/rwHelpers.h
11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/acs/rwHelpers.h
11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;mission/acs/str/StarTrackerHandler.h
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;mission/acs/str/StarTrackerHandler.h
11903;0x2e7f;COM_ERROR_REPLY_RECEIVED;LOW;Received COM error. P1: Communication Error ID (datasheet p32);mission/acs/str/StarTrackerHandler.h
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/payload/plocSupvDefs.h
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/payload/plocSupvDefs.h
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/payload/plocSupvDefs.h
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/payload/plocSupvDefs.h
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/payload/plocSupvDefs.h
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/payload/plocSupvDefs.h
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/payload/plocSupvDefs.h
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/payload/plocSupvDefs.h
12009;0x2ee9;SUPV_ACK_UNKNOWN_COMMAND;LOW;Received ACK, but no related command is unknown or has not been sent by this software instance. P1: Module APID. P2: Service ID.;linux/payload/plocSupvDefs.h
12010;0x2eea;SUPV_EXE_ACK_UNKNOWN_COMMAND;LOW;Received ACK EXE, but no related command is unknown or has not been sent by this software instance. P1: Module APID. P2: Service ID.;linux/payload/plocSupvDefs.h
12100;0x2f44;SANITIZATION_FAILED;LOW;No description;bsp_q7s/fs/SdCardManager.h
12101;0x2f45;MOUNTED_SD_CARD;INFO;No description;bsp_q7s/fs/SdCardManager.h
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/payload/PlocMemoryDumper.h
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/payload/PlocMemoryDumper.h
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/payload/PlocMemoryDumper.h
12401;0x3071;INVALID_TC_FRAME;HIGH;No description;linux/ipcore/pdec.h
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/pdec.h
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/pdec.h
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/pdec.h
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/pdec.h
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/pdec.h
12407;0x3077;TOO_MANY_IRQS;MEDIUM;Too many IRQs over the time window of one second. P1: Allowed TCs;linux/ipcore/pdec.h
12408;0x3078;POLL_SYSCALL_ERROR_PDEC;MEDIUM;No description;linux/ipcore/pdec.h
12409;0x3079;WRITE_SYSCALL_ERROR_PDEC;HIGH;No description;linux/ipcore/pdec.h
12410;0x307a;PDEC_TRYING_RESET_WITH_INIT;LOW;Trying a PDEC reset with complete re-initialization;linux/ipcore/pdec.h
12411;0x307b;PDEC_TRYING_RESET_NO_INIT;LOW;Trying a PDEC reset without re-initialization.;linux/ipcore/pdec.h
12412;0x307c;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/pdec.h
12413;0x307d;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/pdec.h
12414;0x307e;PDEC_INIT_FAILED;HIGH;PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues.;linux/ipcore/pdec.h
12415;0x307f;PDEC_CONFIG_CORRUPTED;HIGH;The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word;linux/ipcore/pdec.h
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/acs/StrComHandler.h
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/acs/StrComHandler.h
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/acs/StrComHandler.h
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/acs/StrComHandler.h
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/acs/StrComHandler.h
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/acs/StrComHandler.h
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/acs/StrComHandler.h
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/acs/StrComHandler.h
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/acs/StrComHandler.h
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
12511;0x30df;STR_COM_REPLY_TIMEOUT;LOW;Star tracker did not send a valid reply for a certain timeout. P1: Position of upload or download packet for which the packet wa sent. P2: Timeout;linux/acs/StrComHandler.h
12513;0x30e1;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/acs/StrComHandler.h
12514;0x30e2;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/acs/StrComHandler.h
12515;0x30e3;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/acs/StrComHandler.h
12516;0x30e4;STR_HELPER_SENDING_PACKET_FAILED;LOW;No description;linux/acs/StrComHandler.h
12517;0x30e5;STR_HELPER_REQUESTING_MSG_FAILED;LOW;No description;linux/acs/StrComHandler.h
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/payload/PlocMpsocSpecialComHelper.h
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;INFO;Flash write successful;linux/payload/PlocMpsocSpecialComHelper.h
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/payload/PlocMpsocSpecialComHelper.h
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12614;0x3146;MPSOC_FLASH_READ_PACKET_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12615;0x3147;MPSOC_FLASH_READ_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12616;0x3148;MPSOC_FLASH_READ_SUCCESSFUL;INFO;No description;linux/payload/PlocMpsocSpecialComHelper.h
12617;0x3149;MPSOC_READ_TIMEOUT;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/payload/PayloadPcduHandler.h
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/AcsBoardAssembly.h
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/AcsBoardAssembly.h
12804;0x3204;DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY;MEDIUM;This is triggered when the assembly would have normally switched the board side, but the GPS device of the other side was marked faulty. P1: Current submode.;mission/system/acs/AcsBoardAssembly.h
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/SusAssembly.h
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/SusAssembly.h
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/SusAssembly.h
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/SusAssembly.h
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/tcs/TcsBoardAssembly.h
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: New fix. P2: Missed fix changes 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;linux/acs/GPSDefinitions.h
13101;0x332d;CANT_GET_FIX;MEDIUM;Could not get fix in maximum allowed time. Trying to reset both GNSS devices. P1: Maximum allowed time to get a fix after the GPS was switched on.;linux/acs/GPSDefinitions.h
13102;0x332e;RESET_FAIL;HIGH;Failed to reset an GNNS Device. P1: Board-Side.;linux/acs/GPSDefinitions.h
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/payload/PlocSupvUartMan.h
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/payload/PlocSupvUartMan.h
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/payload/PlocSupvUartMan.h
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/payload/PlocSupvUartMan.h
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/payload/PlocSupvUartMan.h
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/payload/PlocSupvUartMan.h
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/payload/PlocSupvUartMan.h
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/payload/PlocSupvUartMan.h
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;No description;linux/payload/PlocSupvUartMan.h
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;No description;linux/payload/PlocSupvUartMan.h
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocSupvUartMan.h
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocSupvUartMan.h
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/payload/PlocSupvUartMan.h
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/payload/PlocSupvUartMan.h
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/payload/PlocSupvUartMan.h
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
13632;0x3540;HDLC_CRC_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/com/syrlinksDefs.h
13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/com/syrlinksDefs.h
13800;0x35e8;MISSING_PACKET;LOW;No description;mission/payload/scexHelpers.h
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;No description;mission/payload/scexHelpers.h
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;No description;mission/payload/scexHelpers.h
13803;0x35eb;FS_UNUSABLE;LOW;No description;mission/payload/scexHelpers.h
13901;0x364d;SET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
13902;0x364e;GET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
14000;0x36b0;ALLOC_FAILURE;MEDIUM;No description;mission/sysDefs.h
14001;0x36b1;REBOOT_SW;LOW; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;mission/sysDefs.h
14002;0x36b2;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;mission/sysDefs.h
14003;0x36b3;REBOOT_HW;MEDIUM;No description;mission/sysDefs.h
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;mission/sysDefs.h
14005;0x36b5;VERSION_INFO;INFO;P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;mission/sysDefs.h
14007;0x36b7;REBOOT_COUNTER;INFO;Total reboot counter, which is the sum of the boot count of all individual images.;mission/sysDefs.h
14008;0x36b8;INDIVIDUAL_BOOT_COUNTS;INFO;Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.;mission/sysDefs.h
14010;0x36ba;TRYING_I2C_RECOVERY;HIGH;I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices.;mission/sysDefs.h
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED. P1: Active SD Card Index, 0 if none is active P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1;mission/sysDefs.h
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
14104;0x3718;OBC_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
14105;0x3719;CAMERA_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
14106;0x371a;PCDU_SYSTEM_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
14107;0x371b;HEATER_NOT_OFF_FOR_OFF_MODE;MEDIUM;No description;mission/controller/tcsDefs.h
14108;0x371c;MGT_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
14109;0x371d;TCS_SWITCHING_HEATER_ON;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
14110;0x371e;TCS_SWITCHING_HEATER_OFF;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
14111;0x371f;TCS_HEATER_MAX_BURN_TIME_REACHED;MEDIUM;P1: Heater index. P2: Maximum burn time for heater.;mission/controller/tcsDefs.h
14201;0x3779;TX_TIMER_EXPIRED;INFO;The transmit timer to protect the Syrlinks expired P1: The current timer value;mission/system/com/ComSubsystem.h
14202;0x377a;BIT_LOCK_TX_ON;INFO;Transmitter will be turned on due to detection of bitlock;mission/system/com/ComSubsystem.h
14300;0x37dc;POSSIBLE_FILE_CORRUPTION;LOW;P1: Result code of TM packet parser. P2: Timestamp of possibly corrupt file as a unix timestamp.;mission/persistentTmStoreDefs.h
14301;0x37dd;FILE_TOO_LARGE;LOW;File in store too large. P1: Detected file size P2: Allowed file size;mission/persistentTmStoreDefs.h
14302;0x37de;BUSY_DUMPING_EVENT;INFO;No description;mission/persistentTmStoreDefs.h
14305;0x37e1;DUMP_OK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14306;0x37e2;DUMP_NOK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14307;0x37e3;DUMP_MISC_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14308;0x37e4;DUMP_HK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14309;0x37e5;DUMP_CFDP_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14310;0x37e6;DUMP_OK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14311;0x37e7;DUMP_NOK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14312;0x37e8;DUMP_MISC_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14313;0x37e9;DUMP_HK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values for a prolonged time again, resetting all counters. P1: Number of periods with invalid messages. P2: Maximum invalid message counter.;mission/acs/SusHandler.h
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h
1 Event ID (dec) Event ID (hex) Name Severity Description File Path
2 2200 0x0898 STORE_SEND_WRITE_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
3 2201 0x0899 STORE_WRITE_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
4 2202 0x089a STORE_SEND_READ_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
5 2203 0x089b STORE_READ_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
6 2204 0x089c UNEXPECTED_MSG LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
7 2205 0x089d STORING_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
8 2206 0x089e TM_DUMP_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
9 2207 0x089f STORE_INIT_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
10 2208 0x08a0 STORE_INIT_EMPTY INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
11 2209 0x08a1 STORE_CONTENT_CORRUPTED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
12 2210 0x08a2 STORE_INITIALIZE INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
13 2211 0x08a3 INIT_DONE INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
14 2212 0x08a4 DUMP_FINISHED INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
15 2213 0x08a5 DELETION_FINISHED INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
16 2214 0x08a6 DELETION_FAILED LOW No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
17 2215 0x08a7 AUTO_CATALOGS_SENDING_FAILED INFO No description fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
18 2600 0x0a28 GET_DATA_FAILED LOW No description fsfw/src/fsfw/storagemanager/StorageManagerIF.h
19 2601 0x0a29 STORE_DATA_FAILED LOW No description fsfw/src/fsfw/storagemanager/StorageManagerIF.h
20 2800 0x0af0 DEVICE_BUILDING_COMMAND_FAILED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
21 2801 0x0af1 DEVICE_SENDING_COMMAND_FAILED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
22 2802 0x0af2 DEVICE_REQUESTING_REPLY_FAILED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
23 2803 0x0af3 DEVICE_READING_REPLY_FAILED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
24 2804 0x0af4 DEVICE_INTERPRETING_REPLY_FAILED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
25 2805 0x0af5 DEVICE_MISSED_REPLY LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
26 2806 0x0af6 DEVICE_UNKNOWN_REPLY LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
27 2807 0x0af7 DEVICE_UNREQUESTED_REPLY LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
28 2808 0x0af8 INVALID_DEVICE_COMMAND LOW Indicates a SW bug in child class. fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
29 2809 0x0af9 MONITORING_LIMIT_EXCEEDED LOW No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
30 2810 0x0afa MONITORING_AMBIGUOUS HIGH No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
31 2811 0x0afb DEVICE_WANTS_HARD_REBOOT HIGH No description fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
32 4201 4300 0x1069 0x10cc FUSE_CURRENT_HIGH SWITCH_WENT_OFF LOW No description fsfw/src/fsfw/power/Fuse.h fsfw/src/fsfw/power/PowerSwitchIF.h
33 4202 4301 0x106a 0x10cd FUSE_WENT_OFF FUSE_CURRENT_HIGH LOW No description fsfw/src/fsfw/power/Fuse.h
34 4204 4302 0x106c 0x10ce POWER_ABOVE_HIGH_LIMIT FUSE_WENT_OFF LOW No description fsfw/src/fsfw/power/Fuse.h
35 4205 4304 0x106d 0x10d0 POWER_BELOW_LOW_LIMIT POWER_ABOVE_HIGH_LIMIT LOW No description fsfw/src/fsfw/power/Fuse.h
36 4300 4305 0x10cc 0x10d1 SWITCH_WENT_OFF POWER_BELOW_LOW_LIMIT LOW No description fsfw/src/fsfw/power/PowerSwitchIF.h fsfw/src/fsfw/power/Fuse.h
37 5000 0x1388 HEATER_ON INFO No description fsfw/src/fsfw/thermal/Heater.h
38 5001 0x1389 HEATER_OFF INFO No description fsfw/src/fsfw/thermal/Heater.h
39 5002 0x138a HEATER_TIMEOUT LOW No description fsfw/src/fsfw/thermal/Heater.h
40 5003 0x138b HEATER_STAYED_ON LOW No description fsfw/src/fsfw/thermal/Heater.h
41 5004 0x138c HEATER_STAYED_OFF LOW No description fsfw/src/fsfw/thermal/Heater.h
42 5200 0x1450 TEMP_SENSOR_HIGH LOW No description fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
43 5201 0x1451 TEMP_SENSOR_LOW LOW No description fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
44 5202 0x1452 TEMP_SENSOR_GRADIENT LOW No description fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
45 5901 0x170d COMPONENT_TEMP_LOW LOW No description fsfw/src/fsfw/thermal/ThermalComponentIF.h
46 5902 0x170e COMPONENT_TEMP_HIGH LOW No description fsfw/src/fsfw/thermal/ThermalComponentIF.h
47 5903 0x170f COMPONENT_TEMP_OOL_LOW LOW No description fsfw/src/fsfw/thermal/ThermalComponentIF.h
48 5904 0x1710 COMPONENT_TEMP_OOL_HIGH LOW No description fsfw/src/fsfw/thermal/ThermalComponentIF.h
49 5905 0x1711 TEMP_NOT_IN_OP_RANGE LOW No description fsfw/src/fsfw/thermal/ThermalComponentIF.h
50 7101 0x1bbd FDIR_CHANGED_STATE INFO No description fsfw/src/fsfw/fdir/FailureIsolationBase.h
51 7102 0x1bbe FDIR_STARTS_RECOVERY MEDIUM No description fsfw/src/fsfw/fdir/FailureIsolationBase.h
52 7103 0x1bbf FDIR_TURNS_OFF_DEVICE MEDIUM No description fsfw/src/fsfw/fdir/FailureIsolationBase.h
53 7201 0x1c21 MONITOR_CHANGED_STATE LOW No description fsfw/src/fsfw/monitoring/MonitoringIF.h
54 7202 0x1c22 VALUE_BELOW_LOW_LIMIT LOW No description fsfw/src/fsfw/monitoring/MonitoringIF.h
55 7203 0x1c23 VALUE_ABOVE_HIGH_LIMIT LOW No description fsfw/src/fsfw/monitoring/MonitoringIF.h
56 7204 0x1c24 VALUE_OUT_OF_RANGE LOW No description fsfw/src/fsfw/monitoring/MonitoringIF.h
57 7400 0x1ce8 CHANGING_MODE INFO No description fsfw/src/fsfw/modes/HasModesIF.h
58 7401 0x1ce9 MODE_INFO INFO No description fsfw/src/fsfw/modes/HasModesIF.h
59 7402 0x1cea FALLBACK_FAILED HIGH No description fsfw/src/fsfw/modes/HasModesIF.h
60 7403 0x1ceb MODE_TRANSITION_FAILED LOW No description fsfw/src/fsfw/modes/HasModesIF.h
61 7404 0x1cec CANT_KEEP_MODE HIGH No description fsfw/src/fsfw/modes/HasModesIF.h
62 7405 0x1ced OBJECT_IN_INVALID_MODE LOW No description fsfw/src/fsfw/modes/HasModesIF.h
63 7406 0x1cee FORCING_MODE MEDIUM No description fsfw/src/fsfw/modes/HasModesIF.h
64 7407 0x1cef MODE_CMD_REJECTED LOW No description fsfw/src/fsfw/modes/HasModesIF.h
65 7506 0x1d52 HEALTH_INFO INFO No description fsfw/src/fsfw/health/HasHealthIF.h
66 7507 0x1d53 CHILD_CHANGED_HEALTH INFO No description fsfw/src/fsfw/health/HasHealthIF.h
67 7508 0x1d54 CHILD_PROBLEMS LOW No description fsfw/src/fsfw/health/HasHealthIF.h
68 7509 0x1d55 OVERWRITING_HEALTH LOW No description fsfw/src/fsfw/health/HasHealthIF.h
69 7510 0x1d56 TRYING_RECOVERY MEDIUM No description fsfw/src/fsfw/health/HasHealthIF.h
70 7511 0x1d57 RECOVERY_STEP MEDIUM No description fsfw/src/fsfw/health/HasHealthIF.h
71 7512 0x1d58 RECOVERY_DONE MEDIUM No description fsfw/src/fsfw/health/HasHealthIF.h
72 7600 0x1db0 HANDLE_PACKET_FAILED LOW No description fsfw/src/fsfw/tcdistribution/definitions.h
73 7900 0x1edc RF_AVAILABLE INFO A RF available signal was detected. P1: raw RFA state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
74 7901 0x1edd RF_LOST INFO A previously found RF available signal was lost. P1: raw RFA state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
75 7902 0x1ede BIT_LOCK INFO A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
76 7903 0x1edf BIT_LOCK_LOST INFO A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
77 7905 0x1ee1 FRAME_PROCESSING_FAILED LOW The CCSDS Board could not interpret a TC fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
78 8900 0x22c4 CLOCK_SET INFO Clock has been set. P1: old timeval seconds. P2: new timeval seconds. fsfw/src/fsfw/pus/Service9TimeManagement.h
79 8901 0x22c5 CLOCK_SET_FAILURE CLOCK_DUMP_LEGACY LOW INFO Clock dump event. P1: timeval seconds P2: timeval milliseconds. fsfw/src/fsfw/pus/Service9TimeManagement.h
80 8902 0x22c6 CLOCK_SET_FAILURE LOW Clock could not be set. P1: Returncode. fsfw/src/fsfw/pus/Service9TimeManagement.h
81 8903 0x22c7 CLOCK_DUMP INFO Clock dump event. P1: timeval seconds P2: timeval microseconds. fsfw/src/fsfw/pus/Service9TimeManagement.h
82 8904 0x22c8 CLOCK_DUMP_BEFORE_SETTING_TIME INFO No description fsfw/src/fsfw/pus/Service9TimeManagement.h
83 8905 0x22c9 CLOCK_DUMP_AFTER_SETTING_TIME INFO No description fsfw/src/fsfw/pus/Service9TimeManagement.h
84 9100 0x238c TC_DELETION_FAILED MEDIUM Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
85 9700 0x25e4 TEST INFO No description fsfw/src/fsfw/pus/Service17Test.h
86 10600 0x2968 CHANGE_OF_SETUP_PARAMETER LOW No description fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
87 10800 0x2a30 STORE_ERROR LOW No description fsfw/src/fsfw/cfdp/handler/defs.h
88 10801 0x2a31 MSG_QUEUE_ERROR LOW No description fsfw/src/fsfw/cfdp/handler/defs.h
89 10802 0x2a32 SERIALIZATION_ERROR LOW No description fsfw/src/fsfw/cfdp/handler/defs.h
90 11300 10803 0x2c24 0x2a33 SWITCH_CMD_SENT FILESTORE_ERROR INFO LOW Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index No description mission/devices/devicedefinitions/powerDefinitions.h fsfw/src/fsfw/cfdp/handler/defs.h
91 11301 10804 0x2c25 0x2a34 SWITCH_HAS_CHANGED FILENAME_TOO_LARGE_ERROR INFO LOW Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index P1: Transaction step ID, P2: 0 for source file name, 1 for dest file name mission/devices/devicedefinitions/powerDefinitions.h fsfw/src/fsfw/cfdp/handler/defs.h
92 11302 10805 0x2c26 0x2a35 SWITCHING_Q7S_DENIED HANDLING_CFDP_REQUEST_FAILED MEDIUM LOW CFDP request handling failed. P2: Returncode. mission/devices/devicedefinitions/powerDefinitions.h fsfw/src/fsfw/cfdp/handler/defs.h
93 11303 11200 0x2c27 0x2bc0 FDIR_REACTION_IGNORED SAFE_RATE_VIOLATION MEDIUM The limits for the rotation in safe mode were violated. mission/devices/devicedefinitions/powerDefinitions.h mission/acs/defs.h
94 11400 11201 0x2c88 0x2bc1 GPIO_PULL_HIGH_FAILED RATE_RECOVERY LOW MEDIUM The system has recovered from a rate rotation violation. mission/devices/HeaterHandler.h mission/acs/defs.h
95 11401 11202 0x2c89 0x2bc2 GPIO_PULL_LOW_FAILED MULTIPLE_RW_INVALID LOW HIGH Multiple RWs are invalid, uncommandable and therefore higher ACS modes cannot be maintained. mission/devices/HeaterHandler.h mission/acs/defs.h
96 11402 11203 0x2c8a 0x2bc3 HEATER_WENT_ON MEKF_INVALID_INFO INFO MEKF was not able to compute a solution. P1: MEKF state on exit mission/devices/HeaterHandler.h mission/acs/defs.h
97 11403 11204 0x2c8b 0x2bc4 HEATER_WENT_OFF MEKF_RECOVERY INFO MEKF is able to compute a solution again. mission/devices/HeaterHandler.h mission/acs/defs.h
98 11404 11205 0x2c8c 0x2bc5 SWITCH_ALREADY_ON MEKF_AUTOMATIC_RESET LOW INFO MEKF performed an automatic reset after detection of nonfinite values. mission/devices/HeaterHandler.h mission/acs/defs.h
99 11405 11206 0x2c8d 0x2bc6 SWITCH_ALREADY_OFF PTG_CTRL_NO_ATTITUDE_INFORMATION LOW HIGH For a prolonged time, no attitude information was available for the Pointing Controller. Falling back to Safe Mode. mission/devices/HeaterHandler.h mission/acs/defs.h
100 11406 11207 0x2c8e 0x2bc7 MAIN_SWITCH_TIMEOUT SAFE_MODE_CONTROLLER_FAILURE MEDIUM HIGH The ACS safe mode controller was not able to compute a solution and has failed. P1: Missing information about magnetic field, P2: Missing information about rotational rate mission/devices/HeaterHandler.h mission/acs/defs.h
101 11407 11208 0x2c8f 0x2bc8 FAULTY_HEATER_WAS_ON TLE_TOO_OLD LOW INFO The TLE for the SGP4 Propagator has become too old. mission/devices/HeaterHandler.h mission/acs/defs.h
102 11500 11209 0x2cec 0x2bc9 BURN_PHASE_START TLE_FILE_READ_FAILED INFO LOW P1: Burn duration in milliseconds, P2: Dry run flag The TLE could not be read from the filesystem. mission/devices/SolarArrayDeploymentHandler.h mission/acs/defs.h
103 11501 11210 0x2ced 0x2bca BURN_PHASE_DONE PTG_RATE_VIOLATION INFO MEDIUM P1: Burn duration in milliseconds, P2: Dry run flag The limits for the rotation in pointing mode were violated. mission/devices/SolarArrayDeploymentHandler.h mission/acs/defs.h
104 11502 11211 0x2cee 0x2bcb MAIN_SWITCH_ON_TIMEOUT DETUMBLE_TRANSITION_FAILED LOW HIGH The detumble transition has failed. //! P1: Last detumble state before failure. mission/devices/SolarArrayDeploymentHandler.h mission/acs/defs.h
105 11503 11300 0x2cef 0x2c24 MAIN_SWITCH_OFF_TIMEOUT SWITCH_CMD_SENT LOW INFO Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
106 11504 11301 0x2cf0 0x2c25 DEPL_SA1_GPIO_SWTICH_ON_FAILED SWITCH_HAS_CHANGED HIGH INFO Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
107 11505 11302 0x2cf1 0x2c26 DEPL_SA2_GPIO_SWTICH_ON_FAILED SWITCHING_Q7S_DENIED HIGH MEDIUM No description mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
108 11506 11303 0x2cf2 0x2c27 DEPL_SA1_GPIO_SWTICH_OFF_FAILED FDIR_REACTION_IGNORED HIGH MEDIUM No description mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
109 11507 11304 0x2cf3 0x2c28 DEPL_SA2_GPIO_SWTICH_OFF_FAILED DATASET_READ_FAILED HIGH INFO The dataset read for the inputs of the Power Controller has failed. mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
110 11508 11305 0x2cf4 0x2c29 AUTONOMOUS_DEPLOYMENT_COMPLETED VOLTAGE_OUT_OF_BOUNDS INFO HIGH No description mission/devices/SolarArrayDeploymentHandler.h mission/power/defs.h
111 11601 11306 0x2d51 0x2c2a MEMORY_READ_RPT_CRC_FAILURE TIMEDELTA_OUT_OF_BOUNDS LOW PLOC crc failure in telemetry packet Time difference for Coulomb Counter was too large. P1: time in s * 10 linux/devices/ploc/PlocMPSoCHandler.h mission/power/defs.h
112 11602 11307 0x2d52 0x2c2b ACK_FAILURE POWER_LEVEL_LOW LOW HIGH PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field The State of Charge is below the limit for payload use. Setting Payload to faulty. linux/devices/ploc/PlocMPSoCHandler.h mission/power/defs.h
113 11603 11308 0x2d53 0x2c2c EXE_FAILURE POWER_LEVEL_CRITICAL LOW HIGH PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field The State of Charge is below the limit for higher modes. Setting Reaction Wheels to faulty. linux/devices/ploc/PlocMPSoCHandler.h mission/power/defs.h
114 11604 11400 0x2d54 0x2c88 MPSOC_HANDLER_CRC_FAILURE GPIO_PULL_HIGH_FAILED LOW PLOC reply has invalid crc No description linux/devices/ploc/PlocMPSoCHandler.h mission/tcs/HeaterHandler.h
115 11605 11401 0x2d55 0x2c89 MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH GPIO_PULL_LOW_FAILED LOW Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count No description linux/devices/ploc/PlocMPSoCHandler.h mission/tcs/HeaterHandler.h
116 11606 11402 0x2d56 0x2c8a MPSOC_SHUTDOWN_FAILED HEATER_WENT_ON HIGH INFO Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor. No description linux/devices/ploc/PlocMPSoCHandler.h mission/tcs/HeaterHandler.h
117 11701 11403 0x2db5 0x2c8b SELF_TEST_I2C_FAILURE HEATER_WENT_OFF LOW INFO Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA No description mission/devices/ImtqHandler.h mission/tcs/HeaterHandler.h
118 11702 11404 0x2db6 0x2c8c SELF_TEST_SPI_FAILURE SWITCH_ALREADY_ON LOW INFO Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA No description mission/devices/ImtqHandler.h mission/tcs/HeaterHandler.h
119 11703 11405 0x2db7 0x2c8d SELF_TEST_ADC_FAILURE SWITCH_ALREADY_OFF LOW INFO Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA No description mission/devices/ImtqHandler.h mission/tcs/HeaterHandler.h
120 11704 11406 0x2db8 0x2c8e SELF_TEST_PWM_FAILURE MAIN_SWITCH_TIMEOUT LOW MEDIUM Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA No description mission/devices/ImtqHandler.h mission/tcs/HeaterHandler.h
121 11705 11407 0x2db9 0x2c8f SELF_TEST_TC_FAILURE FAULTY_HEATER_WAS_ON LOW Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA No description mission/devices/ImtqHandler.h mission/tcs/HeaterHandler.h
122 11706 11500 0x2dba 0x2cec SELF_TEST_MTM_RANGE_FAILURE BURN_PHASE_START LOW INFO Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA P1: Burn duration in milliseconds, P2: Dry run flag mission/devices/ImtqHandler.h mission/SolarArrayDeploymentHandler.h
123 11707 11501 0x2dbb 0x2ced SELF_TEST_COIL_CURRENT_FAILURE BURN_PHASE_DONE LOW INFO Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA P1: Burn duration in milliseconds, P2: Dry run flag mission/devices/ImtqHandler.h mission/SolarArrayDeploymentHandler.h
124 11708 11502 0x2dbc 0x2cee INVALID_ERROR_BYTE MAIN_SWITCH_ON_TIMEOUT LOW Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC. No description mission/devices/ImtqHandler.h mission/SolarArrayDeploymentHandler.h
125 11801 11503 0x2e19 0x2cef ERROR_STATE MAIN_SWITCH_OFF_TIMEOUT HIGH LOW Reaction wheel signals an error state No description mission/devices/devicedefinitions/RwDefinitions.h mission/SolarArrayDeploymentHandler.h
126 11802 11504 0x2e1a 0x2cf0 RESET_OCCURED DEPL_SA1_GPIO_SWTICH_ON_FAILED LOW HIGH No description mission/devices/devicedefinitions/RwDefinitions.h mission/SolarArrayDeploymentHandler.h
127 11901 11505 0x2e7d 0x2cf1 BOOTING_FIRMWARE_FAILED DEPL_SA2_GPIO_SWTICH_ON_FAILED LOW HIGH Failed to boot firmware No description linux/devices/startracker/StarTrackerHandler.h mission/SolarArrayDeploymentHandler.h
128 11902 11506 0x2e7e 0x2cf2 BOOTING_BOOTLOADER_FAILED DEPL_SA1_GPIO_SWTICH_OFF_FAILED LOW HIGH Failed to boot star tracker into bootloader mode No description linux/devices/startracker/StarTrackerHandler.h mission/SolarArrayDeploymentHandler.h
129 12001 11507 0x2ee1 0x2cf3 SUPV_MEMORY_READ_RPT_CRC_FAILURE DEPL_SA2_GPIO_SWTICH_OFF_FAILED LOW HIGH PLOC supervisor crc failure in telemetry packet No description linux/devices/ploc/PlocSupervisorHandler.h mission/SolarArrayDeploymentHandler.h
130 12002 11508 0x2ee2 0x2cf4 SUPV_UNKNOWN_TM AUTONOMOUS_DEPLOYMENT_COMPLETED LOW INFO Unhandled event. P1: APID, P2: Service ID No description linux/devices/ploc/PlocSupervisorHandler.h mission/SolarArrayDeploymentHandler.h
131 12003 11601 0x2ee3 0x2d51 SUPV_UNINIMPLEMENTED_TM MEMORY_READ_RPT_CRC_FAILURE LOW PLOC crc failure in telemetry packet linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
132 12004 11602 0x2ee4 0x2d52 SUPV_ACK_FAILURE ACK_FAILURE LOW PLOC supervisor received acknowledgment failure report PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
133 12005 11603 0x2ee5 0x2d53 SUPV_EXE_FAILURE EXE_FAILURE LOW PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
134 12006 11604 0x2ee6 0x2d54 SUPV_CRC_FAILURE_EVENT MPSOC_HANDLER_CRC_FAILURE LOW PLOC supervisor reply has invalid crc PLOC reply has invalid crc linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
135 12007 11605 0x2ee7 0x2d55 SUPV_HELPER_EXECUTING MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH LOW Supervisor helper currently executing a command Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
136 12008 11606 0x2ee8 0x2d56 SUPV_MPSOC_SHUTDOWN_BUILD_FAILED MPSOC_SHUTDOWN_FAILED LOW HIGH Failed to build the command to shutdown the MPSoC Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor. linux/devices/ploc/PlocSupervisorHandler.h linux/payload/plocMpsocHelpers.h
137 12100 11607 0x2f44 0x2d57 SANITIZATION_FAILED SUPV_NOT_ON LOW SUPV not on for boot or shutdown process. P1: 0 for OFF transition, 1 for ON transition. bsp_q7s/fs/SdCardManager.h linux/payload/plocMpsocHelpers.h
138 12101 11608 0x2f45 0x2d58 MOUNTED_SD_CARD SUPV_REPLY_TIMEOUT INFO LOW SUPV reply timeout. bsp_q7s/fs/SdCardManager.h linux/payload/plocMpsocHelpers.h
139 12300 11609 0x300c 0x2d59 SEND_MRAM_DUMP_FAILED CAM_MUST_BE_ON_FOR_SNAPSHOT_MODE LOW Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command Camera must be commanded on first. linux/devices/ploc/PlocMemoryDumper.h linux/payload/plocMpsocHelpers.h
140 12301 11701 0x300d 0x2db5 MRAM_DUMP_FAILED SELF_TEST_I2C_FAILURE LOW Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/devices/ploc/PlocMemoryDumper.h mission/acs/ImtqHandler.h
141 12302 11702 0x300e 0x2db6 MRAM_DUMP_FINISHED SELF_TEST_SPI_FAILURE LOW MRAM dump finished successfully Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/devices/ploc/PlocMemoryDumper.h mission/acs/ImtqHandler.h
142 12401 11703 0x3071 0x2db7 INVALID_TC_FRAME SELF_TEST_ADC_FAILURE HIGH LOW Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
143 12402 11704 0x3072 0x2db8 INVALID_FAR SELF_TEST_PWM_FAILURE HIGH LOW Read invalid FAR from PDEC after startup Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
144 12403 11705 0x3073 0x2db9 CARRIER_LOCK SELF_TEST_TC_FAILURE INFO LOW Carrier lock detected Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
145 12404 11706 0x3074 0x2dba BIT_LOCK_PDEC SELF_TEST_MTM_RANGE_FAILURE INFO LOW Bit lock detected (data valid) Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
146 12405 11707 0x3075 0x2dbb LOST_CARRIER_LOCK_PDEC SELF_TEST_COIL_CURRENT_FAILURE INFO LOW Lost carrier lock Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
147 12406 11708 0x3076 0x2dbc LOST_BIT_LOCK_PDEC INVALID_ERROR_BYTE INFO LOW Lost bit lock Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC. linux/ipcore/PdecHandler.h mission/acs/ImtqHandler.h
148 12407 11801 0x3077 0x2e19 POLL_ERROR_PDEC ERROR_STATE MEDIUM HIGH Reaction wheel signals an error state linux/ipcore/PdecHandler.h mission/acs/rwHelpers.h
149 12500 11802 0x30d4 0x2e1a IMAGE_UPLOAD_FAILED RESET_OCCURED LOW Image upload failed No description linux/devices/startracker/StrHelper.h mission/acs/rwHelpers.h
150 12501 11901 0x30d5 0x2e7d IMAGE_DOWNLOAD_FAILED BOOTING_FIRMWARE_FAILED_EVENT LOW Image download failed Failed to boot firmware linux/devices/startracker/StrHelper.h mission/acs/str/StarTrackerHandler.h
151 12502 11902 0x30d6 0x2e7e IMAGE_UPLOAD_SUCCESSFUL BOOTING_BOOTLOADER_FAILED_EVENT LOW Uploading image to star tracker was successfulop Failed to boot star tracker into bootloader mode linux/devices/startracker/StrHelper.h mission/acs/str/StarTrackerHandler.h
152 12503 11903 0x30d7 0x2e7f IMAGE_DOWNLOAD_SUCCESSFUL COM_ERROR_REPLY_RECEIVED LOW Image download was successful Received COM error. P1: Communication Error ID (datasheet p32) linux/devices/startracker/StrHelper.h mission/acs/str/StarTrackerHandler.h
153 12504 12001 0x30d8 0x2ee1 FLASH_WRITE_SUCCESSFUL SUPV_MEMORY_READ_RPT_CRC_FAILURE LOW Finished flash write procedure successfully PLOC supervisor crc failure in telemetry packet linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
154 12505 12002 0x30d9 0x2ee2 FLASH_READ_SUCCESSFUL SUPV_UNKNOWN_TM LOW Finished flash read procedure successfully Unhandled event. P1: APID, P2: Service ID linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
155 12506 12003 0x30da 0x2ee3 FLASH_READ_FAILED SUPV_UNINIMPLEMENTED_TM LOW Flash read procedure failed No description linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
156 12507 12004 0x30db 0x2ee4 FIRMWARE_UPDATE_SUCCESSFUL SUPV_ACK_FAILURE LOW Firmware update was successful PLOC supervisor received acknowledgment failure report linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
157 12508 12005 0x30dc 0x2ee5 FIRMWARE_UPDATE_FAILED SUPV_EXE_FAILURE LOW Firmware update failed PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
158 12509 12006 0x30dd 0x2ee6 STR_HELPER_READING_REPLY_FAILED SUPV_CRC_FAILURE_EVENT LOW Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed PLOC supervisor reply has invalid crc linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
159 12510 12007 0x30de 0x2ee7 STR_HELPER_COM_ERROR SUPV_HELPER_EXECUTING LOW Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed Supervisor helper currently executing a command linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
160 12511 12008 0x30df 0x2ee8 STR_HELPER_NO_REPLY SUPV_MPSOC_SHUTDOWN_BUILD_FAILED LOW Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent Failed to build the command to shutdown the MPSoC linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
161 12512 12009 0x30e0 0x2ee9 STR_HELPER_DEC_ERROR SUPV_ACK_UNKNOWN_COMMAND LOW Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request Received ACK, but no related command is unknown or has not been sent by this software instance. P1: Module APID. P2: Service ID. linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
162 12513 12010 0x30e1 0x2eea POSITION_MISMATCH SUPV_EXE_ACK_UNKNOWN_COMMAND LOW Position mismatch P1: The expected position and thus the position for which the image upload/download failed Received ACK EXE, but no related command is unknown or has not been sent by this software instance. P1: Module APID. P2: Service ID. linux/devices/startracker/StrHelper.h linux/payload/plocSupvDefs.h
163 12514 12100 0x30e2 0x2f44 STR_HELPER_FILE_NOT_EXISTS SANITIZATION_FAILED LOW Specified file does not exist P1: Internal state of str helper No description linux/devices/startracker/StrHelper.h bsp_q7s/fs/SdCardManager.h
164 12515 12101 0x30e3 0x2f45 STR_HELPER_SENDING_PACKET_FAILED MOUNTED_SD_CARD LOW INFO No description linux/devices/startracker/StrHelper.h bsp_q7s/fs/SdCardManager.h
165 12516 12300 0x30e4 0x300c STR_HELPER_REQUESTING_MSG_FAILED SEND_MRAM_DUMP_FAILED LOW Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command linux/devices/startracker/StrHelper.h linux/payload/PlocMemoryDumper.h
166 12600 12301 0x3138 0x300d MPSOC_FLASH_WRITE_FAILED MRAM_DUMP_FAILED LOW Flash write fails Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command linux/devices/ploc/PlocMPSoCHelper.h linux/payload/PlocMemoryDumper.h
167 12601 12302 0x3139 0x300e MPSOC_FLASH_WRITE_SUCCESSFUL MRAM_DUMP_FINISHED LOW Flash write successful MRAM dump finished successfully linux/devices/ploc/PlocMPSoCHelper.h linux/payload/PlocMemoryDumper.h
168 12602 12401 0x313a 0x3071 MPSOC_SENDING_COMMAND_FAILED INVALID_TC_FRAME LOW HIGH No description linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
169 12603 12402 0x313b 0x3072 MPSOC_HELPER_REQUESTING_REPLY_FAILED INVALID_FAR LOW HIGH Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper Read invalid FAR from PDEC after startup linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
170 12604 12403 0x313c 0x3073 MPSOC_HELPER_READING_REPLY_FAILED CARRIER_LOCK LOW INFO Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper Carrier lock detected linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
171 12605 12404 0x313d 0x3074 MPSOC_MISSING_ACK BIT_LOCK_PDEC LOW INFO Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper Bit lock detected (data valid) linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
172 12606 12405 0x313e 0x3075 MPSOC_MISSING_EXE LOST_CARRIER_LOCK_PDEC LOW INFO Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper Lost carrier lock linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
173 12607 12406 0x313f 0x3076 MPSOC_ACK_FAILURE_REPORT LOST_BIT_LOCK_PDEC LOW INFO Received acknowledgment failure report P1: Internal state of MPSoC Lost bit lock linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
174 12608 12407 0x3140 0x3077 MPSOC_EXE_FAILURE_REPORT TOO_MANY_IRQS LOW MEDIUM Received execution failure report P1: Internal state of MPSoC Too many IRQs over the time window of one second. P1: Allowed TCs linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
175 12609 12408 0x3141 0x3078 MPSOC_ACK_INVALID_APID POLL_SYSCALL_ERROR_PDEC LOW MEDIUM Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC No description linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
176 12610 12409 0x3142 0x3079 MPSOC_EXE_INVALID_APID WRITE_SYSCALL_ERROR_PDEC LOW HIGH Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC No description linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
177 12611 12410 0x3143 0x307a MPSOC_HELPER_SEQ_CNT_MISMATCH PDEC_TRYING_RESET_WITH_INIT LOW Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count Trying a PDEC reset with complete re-initialization linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
178 12612 12411 0x3144 0x307b MPSOC_TM_SIZE_ERROR PDEC_TRYING_RESET_NO_INIT LOW Trying a PDEC reset without re-initialization. linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
179 12613 12412 0x3145 0x307c MPSOC_TM_CRC_MISSMATCH PDEC_RESET_FAILED LOW HIGH Failed to pull PDEC reset to low linux/devices/ploc/PlocMPSoCHelper.h linux/ipcore/pdec.h
180 12700 12413 0x319c 0x307d TRANSITION_BACK_TO_OFF OPEN_IRQ_FILE_FAILED MEDIUM HIGH Could not transition properly and went back to ALL OFF Failed to open the IRQ uio file mission/devices/PayloadPcduHandler.h linux/ipcore/pdec.h
181 12701 12414 0x319d 0x307e NEG_V_OUT_OF_BOUNDS PDEC_INIT_FAILED MEDIUM HIGH P1: 0 -> too low, 1 -> too high P2: Float value PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues. mission/devices/PayloadPcduHandler.h linux/ipcore/pdec.h
182 12702 12415 0x319e 0x307f U_DRO_OUT_OF_BOUNDS PDEC_CONFIG_CORRUPTED MEDIUM HIGH P1: 0 -> too low, 1 -> too high P2: Float value The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word mission/devices/PayloadPcduHandler.h linux/ipcore/pdec.h
183 12703 12500 0x319f 0x30d4 I_DRO_OUT_OF_BOUNDS IMAGE_UPLOAD_FAILED MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Image upload failed mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
184 12704 12501 0x31a0 0x30d5 U_X8_OUT_OF_BOUNDS IMAGE_DOWNLOAD_FAILED MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Image download failed mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
185 12705 12502 0x31a1 0x30d6 I_X8_OUT_OF_BOUNDS IMAGE_UPLOAD_SUCCESSFUL MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Uploading image to star tracker was successfulop mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
186 12706 12503 0x31a2 0x30d7 U_TX_OUT_OF_BOUNDS IMAGE_DOWNLOAD_SUCCESSFUL MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Image download was successful mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
187 12707 12504 0x31a3 0x30d8 I_TX_OUT_OF_BOUNDS FLASH_WRITE_SUCCESSFUL MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Finished flash write procedure successfully mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
188 12708 12505 0x31a4 0x30d9 U_MPA_OUT_OF_BOUNDS FLASH_READ_SUCCESSFUL MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Finished flash read procedure successfully mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
189 12709 12506 0x31a5 0x30da I_MPA_OUT_OF_BOUNDS FLASH_READ_FAILED MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Flash read procedure failed mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
190 12710 12507 0x31a6 0x30db U_HPA_OUT_OF_BOUNDS FIRMWARE_UPDATE_SUCCESSFUL MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Firmware update was successful mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
191 12711 12508 0x31a7 0x30dc I_HPA_OUT_OF_BOUNDS FIRMWARE_UPDATE_FAILED MEDIUM LOW P1: 0 -> too low, 1 -> too high P2: Float value Firmware update failed mission/devices/PayloadPcduHandler.h linux/acs/StrComHandler.h
192 12800 12509 0x3200 0x30dd TRANSITION_OTHER_SIDE_FAILED STR_HELPER_READING_REPLY_FAILED HIGH LOW Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed mission/system/objects/AcsBoardAssembly.h linux/acs/StrComHandler.h
193 12801 12510 0x3201 0x30de NOT_ENOUGH_DEVICES_DUAL_MODE STR_HELPER_COM_ERROR HIGH LOW Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed mission/system/objects/AcsBoardAssembly.h linux/acs/StrComHandler.h
194 12802 12511 0x3202 0x30df POWER_STATE_MACHINE_TIMEOUT STR_COM_REPLY_TIMEOUT MEDIUM LOW Star tracker did not send a valid reply for a certain timeout. P1: Position of upload or download packet for which the packet wa sent. P2: Timeout mission/system/objects/AcsBoardAssembly.h linux/acs/StrComHandler.h
195 12803 12513 0x3203 0x30e1 SIDE_SWITCH_TRANSITION_NOT_ALLOWED STR_HELPER_DEC_ERROR LOW Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request mission/system/objects/AcsBoardAssembly.h linux/acs/StrComHandler.h
196 12900 12514 0x3264 0x30e2 TRANSITION_OTHER_SIDE_FAILED POSITION_MISMATCH HIGH LOW Position mismatch P1: The expected position and thus the position for which the image upload/download failed mission/system/objects/SusAssembly.h linux/acs/StrComHandler.h
197 12901 12515 0x3265 0x30e3 NOT_ENOUGH_DEVICES_DUAL_MODE STR_HELPER_FILE_NOT_EXISTS HIGH LOW Specified file does not exist P1: Internal state of str helper mission/system/objects/SusAssembly.h linux/acs/StrComHandler.h
198 12902 12516 0x3266 0x30e4 POWER_STATE_MACHINE_TIMEOUT STR_HELPER_SENDING_PACKET_FAILED MEDIUM LOW No description mission/system/objects/SusAssembly.h linux/acs/StrComHandler.h
199 12903 12517 0x3267 0x30e5 SIDE_SWITCH_TRANSITION_NOT_ALLOWED STR_HELPER_REQUESTING_MSG_FAILED LOW Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination No description mission/system/objects/SusAssembly.h linux/acs/StrComHandler.h
200 13000 12600 0x32c8 0x3138 CHILDREN_LOST_MODE MPSOC_FLASH_WRITE_FAILED MEDIUM LOW Flash write fails mission/system/objects/TcsBoardAssembly.h linux/payload/PlocMpsocSpecialComHelper.h
201 13100 12601 0x332c 0x3139 GPS_FIX_CHANGE MPSOC_FLASH_WRITE_SUCCESSFUL INFO Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix Flash write successful mission/devices/devicedefinitions/GPSDefinitions.h linux/payload/PlocMpsocSpecialComHelper.h
202 13200 12602 0x3390 0x313a P60_BOOT_COUNT MPSOC_SENDING_COMMAND_FAILED INFO LOW P60 boot count is broadcasted once at SW startup. P1: Boot count No description mission/devices/P60DockHandler.h linux/payload/PlocMpsocSpecialComHelper.h
203 13201 12603 0x3391 0x313b BATT_MODE MPSOC_HELPER_REQUESTING_REPLY_FAILED INFO LOW Battery mode is broadcasted at startup. P1: Mode Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper mission/devices/P60DockHandler.h linux/payload/PlocMpsocSpecialComHelper.h
204 13202 12604 0x3392 0x313c BATT_MODE_CHANGED MPSOC_HELPER_READING_REPLY_FAILED MEDIUM LOW Battery mode has changed. P1: Old mode. P2: New mode Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper mission/devices/P60DockHandler.h linux/payload/PlocMpsocSpecialComHelper.h
205 13600 12605 0x3520 0x313d SUPV_UPDATE_FAILED MPSOC_MISSING_ACK LOW update failed Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
206 13601 12606 0x3521 0x313e SUPV_UPDATE_SUCCESSFUL MPSOC_MISSING_EXE LOW update successful Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
207 13602 12607 0x3522 0x313f SUPV_CONTINUE_UPDATE_FAILED MPSOC_ACK_FAILURE_REPORT LOW Continue update command failed Received acknowledgment failure report P1: Internal state of MPSoC linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
208 13603 12608 0x3523 0x3140 SUPV_CONTINUE_UPDATE_SUCCESSFUL MPSOC_EXE_FAILURE_REPORT LOW Continue update command successful Received execution failure report P1: Internal state of MPSoC linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
209 13604 12609 0x3524 0x3141 TERMINATED_UPDATE_PROCEDURE MPSOC_ACK_INVALID_APID LOW Terminated update procedure by command Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
210 13605 12610 0x3525 0x3142 SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL MPSOC_EXE_INVALID_APID LOW Requesting event buffer was successful Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
211 13606 12611 0x3526 0x3143 SUPV_EVENT_BUFFER_REQUEST_FAILED MPSOC_HELPER_SEQ_CNT_MISMATCH LOW Requesting event buffer failed Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
212 13607 12612 0x3527 0x3144 SUPV_EVENT_BUFFER_REQUEST_TERMINATED MPSOC_TM_SIZE_ERROR LOW Terminated event buffer request by command P1: Number of packets read before process was terminated No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
213 13608 12613 0x3528 0x3145 SUPV_MEM_CHECK_OK MPSOC_TM_CRC_MISSMATCH INFO LOW No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
214 13609 12614 0x3529 0x3146 SUPV_MEM_CHECK_FAIL MPSOC_FLASH_READ_PACKET_ERROR INFO LOW No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
215 13616 12615 0x3530 0x3147 SUPV_SENDING_COMMAND_FAILED MPSOC_FLASH_READ_FAILED LOW No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
216 13617 12616 0x3531 0x3148 SUPV_HELPER_REQUESTING_REPLY_FAILED MPSOC_FLASH_READ_SUCCESSFUL LOW INFO Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
217 13618 12617 0x3532 0x3149 SUPV_HELPER_READING_REPLY_FAILED MPSOC_READ_TIMEOUT LOW Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper No description linux/devices/ploc/PlocSupvUartMan.h linux/payload/PlocMpsocSpecialComHelper.h
218 13619 12700 0x3533 0x319c SUPV_MISSING_ACK TRANSITION_BACK_TO_OFF LOW MEDIUM Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper Could not transition properly and went back to ALL OFF linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
219 13620 12701 0x3534 0x319d SUPV_MISSING_EXE NEG_V_OUT_OF_BOUNDS LOW MEDIUM Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
220 13621 12702 0x3535 0x319e SUPV_ACK_FAILURE_REPORT U_DRO_OUT_OF_BOUNDS LOW MEDIUM Supervisor received acknowledgment failure report P1: Internal state of supervisor helper P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
221 13622 12703 0x3536 0x319f SUPV_EXE_FAILURE_REPORT I_DRO_OUT_OF_BOUNDS LOW MEDIUM Execution report failure P1: P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
222 13623 12704 0x3537 0x31a0 SUPV_ACK_INVALID_APID U_X8_OUT_OF_BOUNDS LOW MEDIUM Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
223 13624 12705 0x3538 0x31a1 SUPV_EXE_INVALID_APID I_X8_OUT_OF_BOUNDS LOW MEDIUM Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
224 13625 12706 0x3539 0x31a2 ACK_RECEPTION_FAILURE U_TX_OUT_OF_BOUNDS LOW MEDIUM Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
225 13626 12707 0x353a 0x31a3 EXE_RECEPTION_FAILURE I_TX_OUT_OF_BOUNDS LOW MEDIUM Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
226 13627 12708 0x353b 0x31a4 WRITE_MEMORY_FAILED U_MPA_OUT_OF_BOUNDS LOW MEDIUM Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
227 13628 12709 0x353c 0x31a5 SUPV_REPLY_SIZE_MISSMATCH I_MPA_OUT_OF_BOUNDS LOW MEDIUM P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
228 13629 12710 0x353d 0x31a6 SUPV_REPLY_CRC_MISSMATCH U_HPA_OUT_OF_BOUNDS LOW MEDIUM P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
229 13630 12711 0x353e 0x31a7 SUPV_UPDATE_PROGRESS I_HPA_OUT_OF_BOUNDS INFO MEDIUM Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written P1: 0 -> too low, 1 -> too high P2: Float value linux/devices/ploc/PlocSupvUartMan.h mission/payload/PayloadPcduHandler.h
230 13631 12800 0x353f 0x3200 HDLC_FRAME_REMOVAL_ERROR TRANSITION_OTHER_SIDE_FAILED INFO HIGH No description linux/devices/ploc/PlocSupvUartMan.h mission/system/acs/AcsBoardAssembly.h
231 13632 12801 0x3540 0x3201 HDLC_CRC_ERROR NOT_ENOUGH_DEVICES_DUAL_MODE INFO HIGH No description linux/devices/ploc/PlocSupvUartMan.h mission/system/acs/AcsBoardAssembly.h
232 13700 12802 0x3584 0x3202 ALLOC_FAILURE POWER_STATE_MACHINE_TIMEOUT MEDIUM No description bsp_q7s/core/CoreController.h mission/system/acs/AcsBoardAssembly.h
233 13701 12803 0x3585 0x3203 REBOOT_SW SIDE_SWITCH_TRANSITION_NOT_ALLOWED MEDIUM LOW Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination bsp_q7s/core/CoreController.h mission/system/acs/AcsBoardAssembly.h
234 13702 12804 0x3586 0x3204 REBOOT_MECHANISM_TRIGGERED DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY MEDIUM The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots This is triggered when the assembly would have normally switched the board side, but the GPS device of the other side was marked faulty. P1: Current submode. bsp_q7s/core/CoreController.h mission/system/acs/AcsBoardAssembly.h
235 13703 12900 0x3587 0x3264 REBOOT_HW TRANSITION_OTHER_SIDE_FAILED MEDIUM HIGH No description bsp_q7s/core/CoreController.h mission/system/acs/SusAssembly.h
236 13704 12901 0x3588 0x3265 NO_SD_CARD_ACTIVE NOT_ENOUGH_DEVICES_DUAL_MODE HIGH No SD card was active. Core controller will attempt to re-initialize a SD card. No description bsp_q7s/core/CoreController.h mission/system/acs/SusAssembly.h
237 13800 12902 0x35e8 0x3266 MISSING_PACKET POWER_STATE_MACHINE_TIMEOUT LOW MEDIUM No description mission/devices/devicedefinitions/ScexDefinitions.h mission/system/acs/SusAssembly.h
238 13801 12903 0x35e9 0x3267 EXPERIMENT_TIMEDOUT SIDE_SWITCH_TRANSITION_NOT_ALLOWED LOW Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination mission/devices/devicedefinitions/ScexDefinitions.h mission/system/acs/SusAssembly.h
239 13802 13000 0x35ea 0x32c8 MULTI_PACKET_COMMAND_DONE CHILDREN_LOST_MODE INFO MEDIUM No description mission/devices/devicedefinitions/ScexDefinitions.h mission/system/tcs/TcsBoardAssembly.h
240 13901 13100 0x364d 0x332c SET_CONFIGFILEVALUE_FAILED GPS_FIX_CHANGE MEDIUM INFO Fix has changed. P1: New fix. P2: Missed fix changes 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix mission/utility/GlobalConfigHandler.h linux/acs/GPSDefinitions.h
241 13902 13101 0x364e 0x332d GET_CONFIGFILEVALUE_FAILED CANT_GET_FIX MEDIUM Could not get fix in maximum allowed time. Trying to reset both GNSS devices. P1: Maximum allowed time to get a fix after the GPS was switched on. mission/utility/GlobalConfigHandler.h linux/acs/GPSDefinitions.h
242 13903 13102 0x364f 0x332e INSERT_CONFIGFILEVALUE_FAILED RESET_FAIL MEDIUM HIGH Failed to reset an GNNS Device. P1: Board-Side. mission/utility/GlobalConfigHandler.h linux/acs/GPSDefinitions.h
243 13904 13200 0x3650 0x3390 WRITE_CONFIGFILE_FAILED P60_BOOT_COUNT MEDIUM INFO P60 boot count is broadcasted once at SW startup. P1: Boot count mission/utility/GlobalConfigHandler.h mission/power/P60DockHandler.h
244 13905 13201 0x3651 0x3391 READ_CONFIGFILE_FAILED BATT_MODE MEDIUM INFO Battery mode is broadcasted at startup. P1: Mode mission/utility/GlobalConfigHandler.h mission/power/P60DockHandler.h
245 13202 0x3392 BATT_MODE_CHANGED MEDIUM Battery mode has changed. P1: Old mode. P2: New mode mission/power/P60DockHandler.h
246 13600 0x3520 SUPV_UPDATE_FAILED LOW update failed linux/payload/PlocSupvUartMan.h
247 13601 0x3521 SUPV_UPDATE_SUCCESSFUL LOW update successful linux/payload/PlocSupvUartMan.h
248 13602 0x3522 SUPV_CONTINUE_UPDATE_FAILED LOW Continue update command failed linux/payload/PlocSupvUartMan.h
249 13603 0x3523 SUPV_CONTINUE_UPDATE_SUCCESSFUL LOW Continue update command successful linux/payload/PlocSupvUartMan.h
250 13604 0x3524 TERMINATED_UPDATE_PROCEDURE LOW Terminated update procedure by command linux/payload/PlocSupvUartMan.h
251 13605 0x3525 SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL LOW Requesting event buffer was successful linux/payload/PlocSupvUartMan.h
252 13606 0x3526 SUPV_EVENT_BUFFER_REQUEST_FAILED LOW Requesting event buffer failed linux/payload/PlocSupvUartMan.h
253 13607 0x3527 SUPV_EVENT_BUFFER_REQUEST_TERMINATED LOW Terminated event buffer request by command P1: Number of packets read before process was terminated linux/payload/PlocSupvUartMan.h
254 13608 0x3528 SUPV_MEM_CHECK_OK INFO No description linux/payload/PlocSupvUartMan.h
255 13609 0x3529 SUPV_MEM_CHECK_FAIL INFO No description linux/payload/PlocSupvUartMan.h
256 13616 0x3530 SUPV_SENDING_COMMAND_FAILED LOW No description linux/payload/PlocSupvUartMan.h
257 13617 0x3531 SUPV_HELPER_REQUESTING_REPLY_FAILED LOW Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
258 13618 0x3532 SUPV_HELPER_READING_REPLY_FAILED LOW Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
259 13619 0x3533 SUPV_MISSING_ACK LOW Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper linux/payload/PlocSupvUartMan.h
260 13620 0x3534 SUPV_MISSING_EXE LOW Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
261 13621 0x3535 SUPV_ACK_FAILURE_REPORT LOW Supervisor received acknowledgment failure report P1: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
262 13622 0x3536 SUPV_EXE_FAILURE_REPORT LOW Execution report failure P1: linux/payload/PlocSupvUartMan.h
263 13623 0x3537 SUPV_ACK_INVALID_APID LOW Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
264 13624 0x3538 SUPV_EXE_INVALID_APID LOW Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper linux/payload/PlocSupvUartMan.h
265 13625 0x3539 ACK_RECEPTION_FAILURE LOW Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed linux/payload/PlocSupvUartMan.h
266 13626 0x353a EXE_RECEPTION_FAILURE LOW Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed linux/payload/PlocSupvUartMan.h
267 13627 0x353b WRITE_MEMORY_FAILED LOW Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written linux/payload/PlocSupvUartMan.h
268 13628 0x353c SUPV_REPLY_SIZE_MISSMATCH LOW No description linux/payload/PlocSupvUartMan.h
269 13629 0x353d SUPV_REPLY_CRC_MISSMATCH LOW No description linux/payload/PlocSupvUartMan.h
270 13630 0x353e SUPV_UPDATE_PROGRESS INFO Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written linux/payload/PlocSupvUartMan.h
271 13631 0x353f HDLC_FRAME_REMOVAL_ERROR INFO No description linux/payload/PlocSupvUartMan.h
272 13632 0x3540 HDLC_CRC_ERROR INFO No description linux/payload/PlocSupvUartMan.h
273 13701 0x3585 TX_ON INFO Transmitter is on now. P1: Submode, P2: Current default datarate. mission/com/syrlinksDefs.h
274 13702 0x3586 TX_OFF INFO Transmitter is off now. mission/com/syrlinksDefs.h
275 13800 0x35e8 MISSING_PACKET LOW No description mission/payload/scexHelpers.h
276 13801 0x35e9 EXPERIMENT_TIMEDOUT LOW No description mission/payload/scexHelpers.h
277 13802 0x35ea MULTI_PACKET_COMMAND_DONE INFO No description mission/payload/scexHelpers.h
278 13803 0x35eb FS_UNUSABLE LOW No description mission/payload/scexHelpers.h
279 13901 0x364d SET_CONFIGFILEVALUE_FAILED MEDIUM No description mission/utility/GlobalConfigHandler.h
280 13902 0x364e GET_CONFIGFILEVALUE_FAILED MEDIUM No description mission/utility/GlobalConfigHandler.h
281 13903 0x364f INSERT_CONFIGFILEVALUE_FAILED MEDIUM No description mission/utility/GlobalConfigHandler.h
282 13904 0x3650 WRITE_CONFIGFILE_FAILED MEDIUM No description mission/utility/GlobalConfigHandler.h
283 13905 0x3651 READ_CONFIGFILE_FAILED MEDIUM No description mission/utility/GlobalConfigHandler.h
284 14000 0x36b0 ALLOC_FAILURE MEDIUM No description mission/sysDefs.h
285 14001 0x36b1 REBOOT_SW LOW Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy mission/sysDefs.h
286 14002 0x36b2 REBOOT_MECHANISM_TRIGGERED MEDIUM The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots mission/sysDefs.h
287 14003 0x36b3 REBOOT_HW MEDIUM No description mission/sysDefs.h
288 14004 0x36b4 NO_SD_CARD_ACTIVE HIGH No SD card was active. Core controller will attempt to re-initialize a SD card. mission/sysDefs.h
289 14005 0x36b5 VERSION_INFO INFO P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set. mission/sysDefs.h
290 14006 0x36b6 CURRENT_IMAGE_INFO INFO P1: Current Chip, P2: Current Copy mission/sysDefs.h
291 14007 0x36b7 REBOOT_COUNTER INFO Total reboot counter, which is the sum of the boot count of all individual images. mission/sysDefs.h
292 14008 0x36b8 INDIVIDUAL_BOOT_COUNTS INFO Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1. mission/sysDefs.h
293 14010 0x36ba TRYING_I2C_RECOVERY HIGH I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices. mission/sysDefs.h
294 14011 0x36bb I2C_REBOOT HIGH I2C is unavailable. Recovery did not work, performing full reboot. mission/sysDefs.h
295 14012 0x36bc PDEC_REBOOT HIGH PDEC recovery through reset was not possible, performing full reboot. mission/sysDefs.h
296 14013 0x36bd FIRMWARE_INFO INFO Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set. mission/sysDefs.h
297 14014 0x36be ACTIVE_SD_INFO INFO Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED. P1: Active SD Card Index, 0 if none is active P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1 mission/sysDefs.h
298 14100 0x3714 NO_VALID_SENSOR_TEMPERATURE MEDIUM No description mission/controller/tcsDefs.h
299 14101 0x3715 NO_HEALTHY_HEATER_AVAILABLE MEDIUM No description mission/controller/tcsDefs.h
300 14102 0x3716 SYRLINKS_OVERHEATING HIGH No description mission/controller/tcsDefs.h
301 14104 0x3718 OBC_OVERHEATING HIGH No description mission/controller/tcsDefs.h
302 14105 0x3719 CAMERA_OVERHEATING HIGH No description mission/controller/tcsDefs.h
303 14106 0x371a PCDU_SYSTEM_OVERHEATING HIGH No description mission/controller/tcsDefs.h
304 14107 0x371b HEATER_NOT_OFF_FOR_OFF_MODE MEDIUM No description mission/controller/tcsDefs.h
305 14108 0x371c MGT_OVERHEATING HIGH No description mission/controller/tcsDefs.h
306 14109 0x371d TCS_SWITCHING_HEATER_ON INFO P1: Module index. P2: Heater index mission/controller/tcsDefs.h
307 14110 0x371e TCS_SWITCHING_HEATER_OFF INFO P1: Module index. P2: Heater index mission/controller/tcsDefs.h
308 14111 0x371f TCS_HEATER_MAX_BURN_TIME_REACHED MEDIUM P1: Heater index. P2: Maximum burn time for heater. mission/controller/tcsDefs.h
309 14201 0x3779 TX_TIMER_EXPIRED INFO The transmit timer to protect the Syrlinks expired P1: The current timer value mission/system/com/ComSubsystem.h
310 14202 0x377a BIT_LOCK_TX_ON INFO Transmitter will be turned on due to detection of bitlock mission/system/com/ComSubsystem.h
311 14300 0x37dc POSSIBLE_FILE_CORRUPTION LOW P1: Result code of TM packet parser. P2: Timestamp of possibly corrupt file as a unix timestamp. mission/persistentTmStoreDefs.h
312 14301 0x37dd FILE_TOO_LARGE LOW File in store too large. P1: Detected file size P2: Allowed file size mission/persistentTmStoreDefs.h
313 14302 0x37de BUSY_DUMPING_EVENT INFO No description mission/persistentTmStoreDefs.h
314 14305 0x37e1 DUMP_OK_STORE_DONE INFO P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
315 14306 0x37e2 DUMP_NOK_STORE_DONE INFO P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
316 14307 0x37e3 DUMP_MISC_STORE_DONE INFO P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
317 14308 0x37e4 DUMP_HK_STORE_DONE INFO P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
318 14309 0x37e5 DUMP_CFDP_STORE_DONE INFO P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
319 14310 0x37e6 DUMP_OK_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
320 14311 0x37e7 DUMP_NOK_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
321 14312 0x37e8 DUMP_MISC_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
322 14313 0x37e9 DUMP_HK_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
323 14314 0x37ea DUMP_CFDP_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
324 14500 0x38a4 TEMPERATURE_ALL_ONES_START MEDIUM Detected invalid values, starting invalid message counting mission/acs/SusHandler.h
325 14501 0x38a5 TEMPERATURE_ALL_ONES_RECOVERY INFO Detected valid values for a prolonged time again, resetting all counters. P1: Number of periods with invalid messages. P2: Maximum invalid message counter. mission/acs/SusHandler.h
326 14600 0x3908 FAULT_HANDLER_TRIGGERED LOW P1: CFDP fault handler code. P2: CFDP condition code. mission/cfdp/defs.h
+5 -4
View File
@@ -1,11 +1,10 @@
import logging
import os
from eive_tmtc import EIVE_TMTC_ROOT
from tmtccmd import get_console_logger
from tmtccmd.fsfw import parse_fsfw_events_csv
from tmtccmd.pus.s5_event import EventDictT
from tmtccmd.pus.s5_fsfw_event import EventDictT
LOGGER = get_console_logger()
DEFAULT_EVENTS_CSV_PATH = EIVE_TMTC_ROOT / "config/events.csv"
__EVENT_DICT = None
@@ -16,6 +15,8 @@ def get_event_dict() -> EventDictT:
if os.path.exists(DEFAULT_EVENTS_CSV_PATH):
__EVENT_DICT = parse_fsfw_events_csv(DEFAULT_EVENTS_CSV_PATH)
else:
LOGGER.warning(f"No Event CSV file found at {DEFAULT_EVENTS_CSV_PATH}")
logging.getLogger(__name__).warning(
f"No Event CSV file found at {DEFAULT_EVENTS_CSV_PATH}"
)
__EVENT_DICT = dict()
return __EVENT_DICT
+133 -16
View File
@@ -1,33 +1,147 @@
from typing import Optional
from eive_tmtc.config.definitions import SPACE_PACKET_IDS
from tmtccmd import TmTcCfgHookBase, CcsdsTmtcBackend
from tmtccmd.com_if import ComInterface
from tmtccmd.config import TmtcDefinitionWrapper
from eive_tmtc.config.retvals import get_retval_dict
from eive_tmtc.pus_tc.cmd_definitions import get_eive_service_op_code_dict
from prompt_toolkit.history import FileHistory
from tmtccmd import CcsdsTmtcBackend, HookBase
from tmtccmd.com import ComInterface
from tmtccmd.config import CmdTreeNode
from tmtccmd.config.hook import History
from tmtccmd.util import ObjectIdDictT, RetvalDictT
from eive_tmtc.config.definitions import SPACE_PACKET_IDS
from eive_tmtc.config.retvals import get_retval_dict
from eive_tmtc.tmtc.acs.acs_board import create_acs_board_node
from eive_tmtc.tmtc.acs.acs_ctrl import create_acs_ctrl_node
from eive_tmtc.tmtc.acs.gps import create_gnss_node
from eive_tmtc.tmtc.acs.gyros import create_gyros_node
from eive_tmtc.tmtc.acs.imtq import create_mgt_node
from eive_tmtc.tmtc.acs.mgms import create_mgms_node
from eive_tmtc.tmtc.acs.reaction_wheels import (
create_reaction_wheel_assembly_node,
create_reaction_wheels_nodes,
)
from eive_tmtc.tmtc.acs.star_tracker import create_str_node
from eive_tmtc.tmtc.acs.subsystem import create_acs_subsystem_node
from eive_tmtc.tmtc.com.ccsds_handler import create_ccsds_node
from eive_tmtc.tmtc.com.subsystem import create_com_subsystem_node
from eive_tmtc.tmtc.com.syrlinks_handler import create_syrlinks_node
from eive_tmtc.tmtc.core import create_core_node
from eive_tmtc.tmtc.health import create_global_health_node
from eive_tmtc.tmtc.payload.ploc_mpsoc import create_ploc_mpsoc_node
from eive_tmtc.tmtc.payload.ploc_supervisor import create_ploc_supv_node
from eive_tmtc.tmtc.payload.plpcdu import create_pl_pcdu_node
from eive_tmtc.tmtc.payload.scex import create_scex_node
from eive_tmtc.tmtc.payload.subsystem import create_payload_subsystem_node
from eive_tmtc.tmtc.power.acu import create_acu_node
from eive_tmtc.tmtc.power.bpx_batt import create_bpx_batt_node
from eive_tmtc.tmtc.power.p60dock import create_p60_dock_node
from eive_tmtc.tmtc.power.pdu1 import create_pdu1_node
from eive_tmtc.tmtc.power.pdu2 import create_pdu2_node
from eive_tmtc.tmtc.power.power import create_power_node
from eive_tmtc.tmtc.power.pwr_ctrl import create_pwr_ctrl_node
from eive_tmtc.tmtc.power.subsystem import create_eps_subsystem_node
from eive_tmtc.tmtc.system import create_system_node
from eive_tmtc.tmtc.tcs.ctrl import create_tcs_ctrl_node
from eive_tmtc.tmtc.tcs.heater import create_heater_node
from eive_tmtc.tmtc.tcs.rtd import create_rtd_node
from eive_tmtc.tmtc.tcs.tmp1075 import create_tmp_sens_node
from eive_tmtc.tmtc.test import create_test_node
from eive_tmtc.tmtc.time import create_time_node
from eive_tmtc.tmtc.tm_store import create_persistent_tm_store_node
from eive_tmtc.tmtc.wdt import create_wdt_node
class EiveHookObject(TmTcCfgHookBase):
class EiveHookObject(HookBase):
def __init__(self, json_cfg_path: str):
super().__init__(json_cfg_path=json_cfg_path)
super().__init__(json_cfg_path)
def get_tmtc_definitions(self) -> TmtcDefinitionWrapper:
return get_eive_service_op_code_dict()
def assign_communication_interface(self, com_if_key: str) -> Optional[ComInterface]:
from tmtccmd.config.com_if import (
create_com_interface_default,
create_com_interface_cfg_default,
def get_command_definitions(self) -> CmdTreeNode:
root_node = CmdTreeNode.root_node()
acs_node = create_acs_subsystem_node()
acs_brd_assy_node = create_acs_board_node()
acs_brd_assy_node.add_child(create_mgms_node())
acs_brd_assy_node.add_child(create_gyros_node())
acs_ctrl = create_acs_ctrl_node()
rw_list = create_reaction_wheels_nodes()
rws = CmdTreeNode("rws", "Reaction Wheel Devices")
for rw in rw_list:
rws.add_child(rw)
rws.add_child(create_reaction_wheel_assembly_node())
star_tracker = create_str_node()
star_tracker_img_helper = CmdTreeNode(
"str_img_helper", "Star Tracker Image Helper"
)
star_tracker.add_child(star_tracker_img_helper)
gnss_devs = create_gnss_node()
acs_node.add_child(acs_brd_assy_node)
acs_node.add_child(acs_ctrl)
acs_node.add_child(rws)
acs_node.add_child(create_mgt_node())
acs_node.add_child(star_tracker)
acs_node.add_child(gnss_devs)
tcs_node = CmdTreeNode("tcs", "TCS Subsystem")
tmp_1075_node = create_tmp_sens_node()
rtds_node = create_rtd_node()
heaters_node = create_heater_node()
tcs_ctrl = create_tcs_ctrl_node()
tcs_node.add_child(rtds_node)
tcs_node.add_child(tmp_1075_node)
tcs_node.add_child(tcs_ctrl)
tcs_node.add_child(heaters_node)
tcs_brd_assy = CmdTreeNode("tcs_brd_assy", "TCS Board Assembly")
tcs_node.add_child(tcs_brd_assy)
com_node = create_com_subsystem_node()
com_node.add_child(create_syrlinks_node())
com_node.add_child(create_ccsds_node())
eps_node = create_eps_subsystem_node()
eps_node.add_child(create_pwr_ctrl_node())
eps_node.add_child(create_power_node())
eps_node.add_child(create_acu_node())
eps_node.add_child(create_pdu1_node())
eps_node.add_child(create_pdu2_node())
eps_node.add_child(create_p60_dock_node())
eps_node.add_child(create_bpx_batt_node())
payload_node = create_payload_subsystem_node()
payload_node.add_child(create_pl_pcdu_node())
payload_node.add_child(create_scex_node())
payload_node.add_child(create_ploc_mpsoc_node())
payload_node.add_child(create_ploc_supv_node())
obdh_node = CmdTreeNode("obdh", "OBDH Subsystem")
obdh_node.add_child(create_wdt_node())
obdh_node.add_child(create_core_node())
obdh_node.add_child(create_time_node())
obdh_node.add_child(create_persistent_tm_store_node())
root_node.add_child(create_test_node())
root_node.add_child(create_system_node())
root_node.add_child(create_global_health_node())
root_node.add_child(acs_node)
root_node.add_child(tcs_node)
root_node.add_child(com_node)
root_node.add_child(eps_node)
root_node.add_child(payload_node)
root_node.add_child(obdh_node)
return root_node
def get_communication_interface(self, com_if_key: str) -> Optional[ComInterface]:
from tmtccmd.config.com import (
create_com_interface_cfg_default,
create_com_interface_default,
)
assert self.cfg_path is not None
cfg = create_com_interface_cfg_default(
com_if_key=com_if_key,
json_cfg_path=self.cfg_path,
space_packet_ids=SPACE_PACKET_IDS,
)
assert cfg is not None
return create_com_interface_default(cfg)
def perform_mode_operation(self, tmtc_backend: CcsdsTmtcBackend, mode: int):
@@ -42,3 +156,6 @@ class EiveHookObject(TmTcCfgHookBase):
def get_retval_dict(self) -> RetvalDictT:
return get_retval_dict()
def get_cmd_history(self) -> Optional[History]:
return FileHistory(".tmtc-history.txt")
+52 -13
View File
@@ -3,21 +3,23 @@
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
it to your needs.
"""
import logging
import os.path
from typing import Dict
from eive_tmtc import EIVE_TMTC_ROOT
from tmtccmd.util.obj_id import ObjectIdDictT
from tmtccmd.util.obj_id import ObjectIdU32
from tmtccmd.fsfw import parse_fsfw_objects_csv
from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger()
DEFAULT_OBJECTS_CSV_PATH = EIVE_TMTC_ROOT / "config/objects.csv"
__OBJECT_ID_DICT = None
# Core Object IDs
SOLAR_ARRAY_DEPLOYMENT_ID = bytes([0x44, 0x41, 0x00, 0xA2])
INTERNAL_ERROR_REPORTER_ID = bytes([0x53, 0x04, 0x00, 0x00])
# Power Object IDs
PCDU_HANDLER_ID = bytes([0x44, 0x20, 0x00, 0xA1])
@@ -30,9 +32,12 @@ SCEX_HANDLER_ID = bytes([0x44, 0x33, 0x00, 0x32])
# Thermal Object IDs
THERMAL_CONTROLLER_ID = bytes([0x43, 0x40, 0x00, 0x01])
HEATER_ID = bytes([0x44, 0x41, 0x00, 0xA4])
TMP_1075_1_HANDLER_ID = bytes([0x44, 0x42, 0x00, 0x04])
TMP_1075_2_HANDLER_ID = bytes([0x44, 0x42, 0x00, 0x05])
HEATER_CONTROLLER_ID = bytes([0x44, 0x41, 0x00, 0xA4])
TMP1075_HANDLER_TCS_BRD_0_ID = bytes([0x44, 0x42, 0x00, 0x04])
TMP1075_HANDLER_TCS_BRD_1_ID = bytes([0x44, 0x42, 0x00, 0x05])
TMP1075_HANDLER_PLPCDU_0_ID = bytes([0x44, 0x42, 0x00, 0x06])
TMP1075_HANDLER_PLPCDU_1_ID = bytes([0x44, 0x42, 0x00, 0x07])
TMP1075_HANDLER_IF_BRD_ID = bytes([0x44, 0x42, 0x00, 0x08])
# Communication Object IDs
SYRLINKS_HANDLER_ID = bytes([0x44, 0x53, 0x00, 0xA3])
@@ -47,6 +52,9 @@ GYRO_1_L3G_HANDLER_ID = bytes([0x44, 0x12, 0x01, 0x11])
GYRO_2_ADIS_HANDLER_ID = bytes([0x44, 0x12, 0x02, 0x12])
GYRO_3_L3G_HANDLER_ID = bytes([0x44, 0x12, 0x03, 0x13])
GPS_CONTROLLER = bytes([0x44, 0x13, 0x00, 0x45])
GPS_0_HEALTH_DEV = bytes([0x44, 0x13, 0x00, 0x46])
GPS_1_HEALTH_DEV = bytes([0x44, 0x13, 0x00, 0x47])
RW1_ID = bytes([0x44, 0x12, 0x00, 0x47])
RW2_ID = bytes([0x44, 0x12, 0x01, 0x48])
RW3_ID = bytes([0x44, 0x12, 0x02, 0x49])
@@ -69,14 +77,14 @@ PLOC_MPSOC_ID = bytes([0x44, 0x33, 0x00, 0x15])
PL_PCDU_ID = bytes([0x44, 0x30, 0x00, 0x00])
# Other
HEATER_0_OBC_BRD = bytes([0x60, 0x00, 0x00, 0x00])
HEATER_1_PLOC_PROC_BRD = bytes([0x60, 0x00, 0x00, 0x01])
HEATER_0_PLOC_PROC_BRD = bytes([0x60, 0x00, 0x00, 0x00])
HEATER_1_PCDU_BRD = bytes([0x60, 0x00, 0x00, 0x01])
HEATER_2_ACS_BRD = bytes([0x60, 0x00, 0x00, 0x02])
HEATER_3_PCDU_BRD = bytes([0x60, 0x00, 0x00, 0x03])
HEATER_3_OBC_BRD = bytes([0x60, 0x00, 0x00, 0x03])
HEATER_4_CAMERA = bytes([0x60, 0x00, 0x00, 0x04])
HEATER_5_STR = bytes([0x60, 0x00, 0x00, 0x05])
HEATER_6_DRO = bytes([0x60, 0x00, 0x00, 0x06])
HEATER_7_HPA = bytes([0x60, 0x00, 0x00, 0x07])
HEATER_7_SYRLINKS = bytes([0x60, 0x00, 0x00, 0x07])
# RTDs
RTD_0_PLOC_HSPD = bytes([0x44, 0x42, 0x00, 0x16])
@@ -124,23 +132,54 @@ SUS_5_N_LOC_XFYMZB_PT_ZB = bytes([0x44, 0x12, 0x00, 0x37])
SUS_11_R_LOC_XBYMZB_PT_ZB = bytes([0x44, 0x12, 0x00, 0x43])
# System and Assembly Objects
EIVE_SYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x00])
ACS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x01])
PL_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x02])
TCS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x03])
COM_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x04])
EPS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x05])
# Legacy names, kept for backwards compatibility
ACS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x01])
SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02])
TCS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x03])
SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02])
IMTQ_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x08])
ACS_BOARD_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x01])
SUS_BOARD_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x02])
TCS_BOARD_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x03])
RW_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x04])
CAM_SWITCHER = bytes([0x73, 0x00, 0x00, 0x06])
SYRLINKS_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x07])
# To be removed soon..
MGT_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x08])
STR_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x09])
# Controllers
TCS_CONTROLLER = bytes([0x43, 0x40, 0x00, 0x01])
ACS_CONTROLLER = bytes([0x43, 0x00, 0x00, 0x02])
CORE_CONTROLLER_ID = bytes([0x43, 0x00, 0x00, 0x03])
PWR_CONTROLLER = bytes([0x43, 0x00, 0x00, 0x04])
XIPHOS_WDT_ID = bytes([0x43, 0x00, 0x00, 0x07])
MISC_TM_STORE = bytes([0x73, 0x02, 0x00, 0x01])
OK_TM_STORE = bytes([0x73, 0x02, 0x00, 0x02])
NOT_OK_TM_STORE = bytes([0x73, 0x02, 0x00, 0x03])
HK_TM_STORE = bytes([0x73, 0x02, 0x00, 0x04])
CFDP_TM_STORE = bytes([0x73, 0x03, 0x00, 0x00])
def get_object_ids() -> ObjectIdDictT:
SUPV_FILTER_SET = [PLOC_SUPV_ID, PDU_2_HANDLER_ID, PDU_1_HANDLER_ID]
ObjectIdDict = Dict[bytes, ObjectIdU32]
def get_object_ids() -> ObjectIdDict:
global __OBJECT_ID_DICT
if not os.path.exists(DEFAULT_OBJECTS_CSV_PATH):
LOGGER.warning(f"No Objects CSV file found at {DEFAULT_OBJECTS_CSV_PATH}")
logging.getLogger(__name__).warning(
f"No Objects CSV file found at {DEFAULT_OBJECTS_CSV_PATH}"
)
if __OBJECT_ID_DICT is None:
if os.path.exists(DEFAULT_OBJECTS_CSV_PATH):
__OBJECT_ID_DICT = parse_fsfw_objects_csv(csv_file=DEFAULT_OBJECTS_CSV_PATH)
+42 -10
View File
@@ -1,7 +1,9 @@
0x00005060;P60DOCK_TEST_TASK
0x43000002;ACS_CONTROLLER
0x43000003;CORE_CONTROLLER
0x43000004;POWER_CONTROLLER
0x43000006;GLOBAL_JSON_CFG
0x43000007;XIPHOS_WDT
0x43400001;THERMAL_CONTROLLER
0x44120006;MGM_0_LIS3_HANDLER
0x44120010;GYRO_0_ADIS_HANDLER
@@ -29,6 +31,9 @@
0x44120350;RW4
0x44130001;STAR_TRACKER
0x44130045;GPS_CONTROLLER
0x44130046;GPS_0_HEALTH_DEV
0x44130047;GPS_1_HEALTH_DEV
0x44140013;IMTQ_POLLING
0x44140014;IMTQ_HANDLER
0x442000A1;PCDU_HANDLER
0x44250000;P60DOCK_HANDLER
@@ -40,13 +45,18 @@
0x443200A5;RAD_SENSOR
0x44330000;PLOC_UPDATER
0x44330001;PLOC_MEMORY_DUMPER
0x44330002;STR_HELPER
0x44330002;STR_COM_IF
0x44330003;PLOC_MPSOC_HELPER
0x44330004;AXI_PTME_CONFIG
0x44330005;PTME_CONFIG
0x44330006;PTME_VC0_LIVE_TM
0x44330007;PTME_VC1_LOG_TM
0x44330008;PTME_VC2_HK_TM
0x44330009;PTME_VC3_CFDP_TM
0x44330015;PLOC_MPSOC_HANDLER
0x44330016;PLOC_SUPERVISOR_HANDLER
0x44330017;PLOC_SUPERVISOR_HELPER
0x44330018;PLOC_MPSOC_COMMUNICATION
0x44330032;SCEX
0x444100A2;SOLAR_ARRAY_DEPL_HANDLER
0x444100A4;HEATER_HANDLER
@@ -55,7 +65,6 @@
0x44420006;TMP1075_HANDLER_PLPCDU_0
0x44420007;TMP1075_HANDLER_PLPCDU_1
0x44420008;TMP1075_HANDLER_IF_BOARD
0x44420009;TMP1075_HANDLER_OBC_IF_BOARD
0x44420016;RTD_0_IC3_PLOC_HEATSPREADER
0x44420017;RTD_1_IC4_PLOC_MISSIONBOARD
0x44420018;RTD_2_IC5_4K_CAMERA
@@ -72,20 +81,25 @@
0x44420029;RTD_13_IC16_PLPCDU_HEATSPREADER
0x44420030;RTD_14_IC17_TCS_BOARD
0x44420031;RTD_15_IC18_IMTQ
0x445300A3;SYRLINKS_HK_HANDLER
0x445300A3;SYRLINKS_HANDLER
0x445300A4;SYRLINKS_COM_HANDLER
0x49000000;ARDUINO_COM_IF
0x49010005;GPIO_IF
0x49010006;SCEX_UART_READER
0x49020004;SPI_MAIN_COM_IF
0x49020005;SPI_RW_COM_IF
0x49020006;SPI_RTD_COM_IF
0x49030003;UART_COM_IF
0x49040002;I2C_COM_IF
0x49050001;CSP_COM_IF
0x49060004;ACS_BOARD_POLLING_TASK
0x49060005;RW_POLLING_TASK
0x49060006;SPI_RTD_COM_IF
0x49060007;SUS_POLLING_TASK
0x50000100;CCSDS_PACKET_DISTRIBUTOR
0x50000200;PUS_PACKET_DISTRIBUTOR
0x50000300;TMTC_BRIDGE
0x50000400;TMTC_POLLING_TASK
0x50000300;TCP_TMTC_SERVER
0x50000301;UDP_TMTC_SERVER
0x50000400;TCP_TMTC_POLLING_TASK
0x50000401;UDP_TMTC_POLLING_TASK
0x50000500;FILE_SYSTEM_HANDLER
0x50000550;SDC_MANAGER
0x50000600;PTME
@@ -100,6 +114,7 @@
0x53000008;PUS_SERVICE_8_FUNCTION_MGMT
0x53000009;PUS_SERVICE_9_TIME_MGMT
0x53000011;PUS_SERVICE_11_TC_SCHEDULER
0x53000015;PUS_SERVICE_15_TM_STORAGE
0x53000017;PUS_SERVICE_17_TEST
0x53000020;PUS_SERVICE_20_PARAMETERS
0x53000200;PUS_SERVICE_200_MODE_MGMT
@@ -130,19 +145,36 @@
0x60000004;HEATER_4_CAMERA
0x60000005;HEATER_5_STR
0x60000006;HEATER_6_DRO
0x60000007;HEATER_7_HPA
0x60000007;HEATER_7_SYRLINKS
0x73000001;ACS_BOARD_ASS
0x73000002;SUS_BOARD_ASS
0x73000003;TCS_BOARD_ASS
0x73000004;RW_ASS
0x73000004;RW_ASSY
0x73000006;CAM_SWITCHER
0x73000007;SYRLINKS_ASSY
0x73000008;IMTQ_ASSY
0x73000009;STR_ASSY
0x73000100;TM_FUNNEL
0x73000101;PUS_TM_FUNNEL
0x73000102;CFDP_TM_FUNNEL
0x73000205;CFDP_HANDLER
0x73000206;CFDP_DISTRIBUTOR
0x73000207;CFDP_FAULT_HANDLER
0x73010000;EIVE_SYSTEM
0x73010001;ACS_SUBSYSTEM
0x73010002;PL_SUBSYSTEM
0x73500000;CCSDS_IP_CORE_BRIDGE
0x73010003;TCS_SUBSYSTEM
0x73010004;COM_SUBSYSTEM
0x73010005;EPS_SUBSYSTEM
0x73020001;MISC_TM_STORE
0x73020002;OK_TM_STORE
0x73020003;NOT_OK_TM_STORE
0x73020004;HK_TM_STORE
0x73030000;CFDP_TM_STORE
0x73040000;LIVE_TM_TASK
0x73040001;LOG_STORE_AND_TM_TASK
0x73040002;HK_STORE_AND_TM_TASK
0x73040003;CFDP_STORE_AND_TM_TASK
0x73040004;DOWNLINK_RAM_STORE
0x90000003;THERMAL_TEMP_INSERTER
0xFFFFFFFF;NO_OBJECT
1 0x00005060 P60DOCK_TEST_TASK
2 0x43000002 ACS_CONTROLLER
3 0x43000003 CORE_CONTROLLER
4 0x43000004 POWER_CONTROLLER
5 0x43000006 GLOBAL_JSON_CFG
6 0x43000007 XIPHOS_WDT
7 0x43400001 THERMAL_CONTROLLER
8 0x44120006 MGM_0_LIS3_HANDLER
9 0x44120010 GYRO_0_ADIS_HANDLER
31 0x44120350 RW4
32 0x44130001 STAR_TRACKER
33 0x44130045 GPS_CONTROLLER
34 0x44130046 GPS_0_HEALTH_DEV
35 0x44130047 GPS_1_HEALTH_DEV
36 0x44140013 IMTQ_POLLING
37 0x44140014 IMTQ_HANDLER
38 0x442000A1 PCDU_HANDLER
39 0x44250000 P60DOCK_HANDLER
45 0x443200A5 RAD_SENSOR
46 0x44330000 PLOC_UPDATER
47 0x44330001 PLOC_MEMORY_DUMPER
48 0x44330002 STR_HELPER STR_COM_IF
49 0x44330003 PLOC_MPSOC_HELPER
50 0x44330004 AXI_PTME_CONFIG
51 0x44330005 PTME_CONFIG
52 0x44330006 PTME_VC0_LIVE_TM
53 0x44330007 PTME_VC1_LOG_TM
54 0x44330008 PTME_VC2_HK_TM
55 0x44330009 PTME_VC3_CFDP_TM
56 0x44330015 PLOC_MPSOC_HANDLER
57 0x44330016 PLOC_SUPERVISOR_HANDLER
58 0x44330017 PLOC_SUPERVISOR_HELPER
59 0x44330018 PLOC_MPSOC_COMMUNICATION
60 0x44330032 SCEX
61 0x444100A2 SOLAR_ARRAY_DEPL_HANDLER
62 0x444100A4 HEATER_HANDLER
65 0x44420006 TMP1075_HANDLER_PLPCDU_0
66 0x44420007 TMP1075_HANDLER_PLPCDU_1
67 0x44420008 TMP1075_HANDLER_IF_BOARD
0x44420009 TMP1075_HANDLER_OBC_IF_BOARD
68 0x44420016 RTD_0_IC3_PLOC_HEATSPREADER
69 0x44420017 RTD_1_IC4_PLOC_MISSIONBOARD
70 0x44420018 RTD_2_IC5_4K_CAMERA
81 0x44420029 RTD_13_IC16_PLPCDU_HEATSPREADER
82 0x44420030 RTD_14_IC17_TCS_BOARD
83 0x44420031 RTD_15_IC18_IMTQ
84 0x445300A3 SYRLINKS_HK_HANDLER SYRLINKS_HANDLER
85 0x445300A4 SYRLINKS_COM_HANDLER
86 0x49000000 ARDUINO_COM_IF
87 0x49010005 GPIO_IF
88 0x49010006 SCEX_UART_READER
89 0x49020004 SPI_MAIN_COM_IF
0x49020005 SPI_RW_COM_IF
0x49020006 SPI_RTD_COM_IF
90 0x49030003 UART_COM_IF
91 0x49040002 I2C_COM_IF
92 0x49050001 CSP_COM_IF
93 0x49060004 ACS_BOARD_POLLING_TASK
94 0x49060005 RW_POLLING_TASK
95 0x49060006 SPI_RTD_COM_IF
96 0x49060007 SUS_POLLING_TASK
97 0x50000100 CCSDS_PACKET_DISTRIBUTOR
98 0x50000200 PUS_PACKET_DISTRIBUTOR
99 0x50000300 TMTC_BRIDGE TCP_TMTC_SERVER
100 0x50000400 0x50000301 TMTC_POLLING_TASK UDP_TMTC_SERVER
101 0x50000400 TCP_TMTC_POLLING_TASK
102 0x50000401 UDP_TMTC_POLLING_TASK
103 0x50000500 FILE_SYSTEM_HANDLER
104 0x50000550 SDC_MANAGER
105 0x50000600 PTME
114 0x53000008 PUS_SERVICE_8_FUNCTION_MGMT
115 0x53000009 PUS_SERVICE_9_TIME_MGMT
116 0x53000011 PUS_SERVICE_11_TC_SCHEDULER
117 0x53000015 PUS_SERVICE_15_TM_STORAGE
118 0x53000017 PUS_SERVICE_17_TEST
119 0x53000020 PUS_SERVICE_20_PARAMETERS
120 0x53000200 PUS_SERVICE_200_MODE_MGMT
145 0x60000004 HEATER_4_CAMERA
146 0x60000005 HEATER_5_STR
147 0x60000006 HEATER_6_DRO
148 0x60000007 HEATER_7_HPA HEATER_7_SYRLINKS
149 0x73000001 ACS_BOARD_ASS
150 0x73000002 SUS_BOARD_ASS
151 0x73000003 TCS_BOARD_ASS
152 0x73000004 RW_ASS RW_ASSY
153 0x73000006 CAM_SWITCHER
154 0x73000007 SYRLINKS_ASSY
155 0x73000008 IMTQ_ASSY
156 0x73000009 STR_ASSY
157 0x73000100 TM_FUNNEL
158 0x73000101 PUS_TM_FUNNEL
159 0x73000102 CFDP_TM_FUNNEL
160 0x73000205 CFDP_HANDLER
161 0x73000206 CFDP_DISTRIBUTOR
162 0x73000207 CFDP_FAULT_HANDLER
163 0x73010000 EIVE_SYSTEM
164 0x73010001 ACS_SUBSYSTEM
165 0x73010002 PL_SUBSYSTEM
166 0x73500000 0x73010003 CCSDS_IP_CORE_BRIDGE TCS_SUBSYSTEM
167 0x73010004 COM_SUBSYSTEM
168 0x73010005 EPS_SUBSYSTEM
169 0x73020001 MISC_TM_STORE
170 0x73020002 OK_TM_STORE
171 0x73020003 NOT_OK_TM_STORE
172 0x73020004 HK_TM_STORE
173 0x73030000 CFDP_TM_STORE
174 0x73040000 LIVE_TM_TASK
175 0x73040001 LOG_STORE_AND_TM_TASK
176 0x73040002 HK_STORE_AND_TM_TASK
177 0x73040003 CFDP_STORE_AND_TM_TASK
178 0x73040004 DOWNLINK_RAM_STORE
179 0x90000003 THERMAL_TEMP_INSERTER
180 0xFFFFFFFF NO_OBJECT
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -1,12 +1,11 @@
import os
import logging
from eive_tmtc import EIVE_TMTC_ROOT
from tmtccmd.fsfw import parse_fsfw_returnvalues_csv, RetvalDictT
from tmtccmd.logging import get_console_logger
DEFAULT_RETVAL_CSV_NAME = EIVE_TMTC_ROOT / "config/returnvalues.csv"
__RETVAL_DICT = None
LOGGER = get_console_logger()
def get_retval_dict() -> RetvalDictT:
@@ -17,7 +16,7 @@ def get_retval_dict() -> RetvalDictT:
csv_file=DEFAULT_RETVAL_CSV_NAME
)
else:
LOGGER.warning(
logging.getLogger(__name__).warning(
f"No Return Value CSV file found at {DEFAULT_RETVAL_CSV_NAME}"
)
__RETVAL_DICT = dict()
+64
View File
@@ -0,0 +1,64 @@
22;MEMORY
26;OBSW
28;CDH
59;TCS_1
42;PCDU_1
43;POWER_SWITCH_IF
50;HEATER
52;T_SENSORS
70;FDIR
71;FDIR_1
72;FDIR_2
73;HK
74;SYSTEM_MANAGER
75;SYSTEM_MANAGER_1
76;TMTC_DISTRIBUTION
79;SYSTEM_1
80;PUS_SERVICE_1
82;PUS_SERVICE_2
83;PUS_SERVICE_3
85;PUS_SERVICE_5
86;PUS_SERVICE_6
88;PUS_SERVICE_8
89;PUS_SERVICE_9
91;PUS_SERVICE_11
97;PUS_SERVICE_17
103;PUS_SERVICE_23
106;MGM_LIS3MDL
107;MGM_RM3100
108;CFDP
112;ACS_SUBSYSTEM
113;PCDU_HANDLER
114;HEATER_HANDLER
115;SA_DEPL_HANDLER
116;PLOC_MPSOC_HANDLER
117;IMTQ_HANDLER
118;RW_HANDLER
119;STR_HANDLER
120;PLOC_SUPERVISOR_HANDLER
121;FILE_SYSTEM
122;PLOC_UPDATER
123;PLOC_MEMORY_DUMPER
124;PDEC_HANDLER
125;STR_HELPER
126;PLOC_MPSOC_HELPER
127;PL_PCDU_HANDLER
128;ACS_BOARD_ASS
129;SUS_BOARD_ASS
130;TCS_BOARD_ASS
131;GPS_HANDLER
132;P60_DOCK_HANDLER
133;PDU1_HANDLER
134;PDU2_HANDLER
135;ACU_HANDLER
136;PLOC_SUPV_HELPER
137;SYRLINKS
138;SCEX_HANDLER
139;CONFIGHANDLER
140;CORE
141;TCS_CONTROLLER
142;COM_SUBSYSTEM
143;PERSISTENT_TM_STORE
144;SYRLINKS_COM
145;SUS_HANDLER
146;CFDP_APP
1 22 MEMORY
2 26 OBSW
3 28 CDH
4 59 TCS_1
5 42 PCDU_1
6 43 POWER_SWITCH_IF
7 50 HEATER
8 52 T_SENSORS
9 70 FDIR
10 71 FDIR_1
11 72 FDIR_2
12 73 HK
13 74 SYSTEM_MANAGER
14 75 SYSTEM_MANAGER_1
15 76 TMTC_DISTRIBUTION
16 79 SYSTEM_1
17 80 PUS_SERVICE_1
18 82 PUS_SERVICE_2
19 83 PUS_SERVICE_3
20 85 PUS_SERVICE_5
21 86 PUS_SERVICE_6
22 88 PUS_SERVICE_8
23 89 PUS_SERVICE_9
24 91 PUS_SERVICE_11
25 97 PUS_SERVICE_17
26 103 PUS_SERVICE_23
27 106 MGM_LIS3MDL
28 107 MGM_RM3100
29 108 CFDP
30 112 ACS_SUBSYSTEM
31 113 PCDU_HANDLER
32 114 HEATER_HANDLER
33 115 SA_DEPL_HANDLER
34 116 PLOC_MPSOC_HANDLER
35 117 IMTQ_HANDLER
36 118 RW_HANDLER
37 119 STR_HANDLER
38 120 PLOC_SUPERVISOR_HANDLER
39 121 FILE_SYSTEM
40 122 PLOC_UPDATER
41 123 PLOC_MEMORY_DUMPER
42 124 PDEC_HANDLER
43 125 STR_HELPER
44 126 PLOC_MPSOC_HELPER
45 127 PL_PCDU_HANDLER
46 128 ACS_BOARD_ASS
47 129 SUS_BOARD_ASS
48 130 TCS_BOARD_ASS
49 131 GPS_HANDLER
50 132 P60_DOCK_HANDLER
51 133 PDU1_HANDLER
52 134 PDU2_HANDLER
53 135 ACU_HANDLER
54 136 PLOC_SUPV_HELPER
55 137 SYRLINKS
56 138 SCEX_HANDLER
57 139 CONFIGHANDLER
58 140 CORE
59 141 TCS_CONTROLLER
60 142 COM_SUBSYSTEM
61 143 PERSISTENT_TM_STORE
62 144 SYRLINKS_COM
63 145 SUS_HANDLER
64 146 CFDP_APP
+8 -6
View File
@@ -11,8 +11,8 @@ import struct
from typing import Union
from spacepackets.ecss import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
from tmtccmd.util import ObjectIdU32, ObjectIdBase
@@ -74,7 +74,9 @@ def pack_get_param_command(
memory_address: Union[int, bytes],
parameter_size: int,
) -> PusTelecommand:
"""Function to generate a command to retrieve parameters like the temperature from a gomspace device.
"""Function to generate a command to retrieve parameters like the temperature from a
gomspace device.
@param object_id: The object id of the gomspace device handler.
@param table_id: The table id of the gomspace device
@param memory_address: Address offset within table of the value to read.
@@ -218,9 +220,9 @@ def prompt_and_pack_set_integer_param_command(
def pack_ping_command(object_id: ObjectIdU32, data: bytearray) -> PusTelecommand:
""" " Function to generate the command to ping a gomspace device
@param object_id Object Id of the gomspace device handler.
@param data Bytearray containing the bytes to send to the gomspace device. For now the on board software
supports only the handling of up to 33 bytes.
:param object_id: Object Id of the gomspace device handler.
:param data: Bytearray containing the bytes to send to the gomspace device. For now the on board
software supports only the handling of up to 33 bytes.
@note The ping request sends the specified data to a gompsace device. These
data are simply copied by the device and then sent back.
"""
-155
View File
@@ -1,155 +0,0 @@
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry, CoreServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
call_all_definitions_providers,
)
from tmtccmd.config.globals import get_default_tmtc_defs
def get_eive_service_op_code_dict() -> TmtcDefinitionWrapper:
"""Call all registered TMTC definition providers. They were registered using
the :py:func:`tmtc_definitions_provider` decorator.
"""
def_wrapper = get_default_tmtc_defs()
srv_5 = OpCodeEntry()
srv_5.add("0", "Event Test")
def_wrapper.add_service(
name=CoreServiceList.SERVICE_5.value,
info="PUS Service 5 Event",
op_code_entry=srv_5,
)
call_all_definitions_providers(def_wrapper)
return def_wrapper
@tmtc_definitions_provider
def add_tmp_sens_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add("0", "TMP1075 Tests")
defs.add_service(CustomServiceList.TMP1075_1.value, "TMP1075 1", oce)
defs.add_service(CustomServiceList.TMP1075_2.value, "TMP1075 2", oce)
@tmtc_definitions_provider
def add_pdec_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add("0", "PDEC Handler: Print CLCW")
oce.add("1", "PDEC Handler: Print PDEC monitor")
defs.add_service(CustomServiceList.PDEC_HANDLER.value, "PDEC Handler", oce)
@tmtc_definitions_provider
def add_ccsds_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add("0", "CCSDS Handler: Set low rate")
oce.add("1", "CCSDS Handler: Set high rate")
oce.add("2", "CCSDS Handler: Enable transmitter")
oce.add("3", "CCSDS Handler: Disable transmitter")
oce.add("4", "CCSDS Handler: Set arbitrary bitrate")
oce.add("5", "CCSDS Handler: Enable tx clock manipulator")
oce.add("6", "CCSDS Handler: Disable tx clock manipulator")
oce.add("7", "CCSDS Handler: Update tx data on rising edge")
oce.add("8", "CCSDS Handler: Update tx data on falling edge")
defs.add_service(CustomServiceList.CCSDS_HANDLER.value, "CCSDS Handler", oce)
@tmtc_definitions_provider
def add_str_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add("0", "Star Tracker: Mode On, Submode Bootloader")
oce.add("1", "Star Tracker: Mode On, Submode Firmware")
oce.add("2", "Star Tracker: Mode Normal")
oce.add("3", "Star Tracker: Mode Off")
oce.add("4", "Star Tracker: Mode Raw")
oce.add("5", "Star Tracker: Ping")
oce.add("6", "Star Tracker: Switch to bootloader program")
oce.add("7", "Star Tracker: Request temperature")
oce.add("8", "Star Tracker: Request version")
oce.add("9", "Star Tracker: Request interface")
oce.add("10", "Star Tracker: Request power")
oce.add("11", "Star Tracker: Set subscription parameters")
oce.add("12", "Star Tracker: Boot image (requires bootloader mode)")
oce.add("13", "Star Tracker: Request time")
oce.add("14", "Star Tracker: Request solution")
oce.add("15", "Star Tracker: Upload image")
oce.add("16", "Star Tracker: Download image")
oce.add("17", "Star Tracker: Set limit parameters")
oce.add("17", "Star Tracker: Set limit parameters")
oce.add("18", "Star Tracker: Set tracking parameters")
oce.add("19", "Star Tracker: Set mounting parameters")
oce.add("20", "Star Tracker: Set camera parameters")
oce.add("22", "Star Tracker: Set centroiding parameters")
oce.add("23", "Star Tracker: Set LISA parameters")
oce.add("24", "Star Tracker: Set matching parameters")
oce.add("25", "Star Tracker: Set validation parameters")
oce.add("26", "Star Tracker: Set algo parameters")
oce.add("27", "Star Tracker: Take image")
oce.add("28", "Star Tracker: Stop str helper")
oce.add("30", "Star Tracker: Set name of download image")
oce.add("31", "Star Tracker: Request histogram")
oce.add("32", "Star Tracker: Request contrast")
oce.add("33", "Star Tracker: Set json filename")
oce.add("35", "Star Tracker: Flash read")
oce.add("36", "Star Tracker: Set flash read filename")
oce.add("37", "Star Tracker: Get checksum")
oce.add("49", "Star Tracker: Request camera parameter")
oce.add("50", "Star Tracker: Request limits")
oce.add("51", "Star Tracker: Set image processor parameters")
oce.add("52", "Star Tracker: (EGSE only) Load camera ground config")
oce.add("53", "Star Tracker: (EGSE only) Load camera flight config")
oce.add("54", "Star Tracker: Request log level parameters")
oce.add("55", "Star Tracker: Request mounting parameters")
oce.add("56", "Star Tracker: Request image processor parameters")
oce.add("57", "Star Tracker: Request centroiding parameters")
oce.add("58", "Star Tracker: Request lisa parameters")
oce.add("59", "Star Tracker: Request matching parameters")
oce.add("60", "Star Tracker: Request tracking parameters")
oce.add("61", "Star Tracker: Request validation parameters")
oce.add("62", "Star Tracker: Request algo parameters")
oce.add("63", "Star Tracker: Request subscription parameters")
oce.add("64", "Star Tracker: Request log subscription parameters")
oce.add("65", "Star Tracker: Request debug camera parameters")
oce.add("66", "Star Tracker: Set log level parameters")
oce.add("67", "Star Tracker: Set log subscription parameters")
oce.add("68", "Star Tracker: Set debug camera parameters")
oce.add("69", "Star Tracker: Firmware update")
oce.add("70", "Star Tracker: Disable timestamp generation")
oce.add("71", "Star Tracker: Enable timestamp generation")
defs.add_service(CustomServiceList.STAR_TRACKER.value, "Star Tracker", oce)
@tmtc_definitions_provider
def add_time_cmds(defs: TmtcDefinitionWrapper):
from eive_tmtc.pus_tc.system.time import OpCode, Info
oce = OpCodeEntry()
oce.add(
keys=OpCode.SET_CURRENT_TIME,
info=Info.SET_CURRENT_TIME,
)
defs.add_service(
name=CustomServiceList.TIME.value,
info="Time Service",
op_code_entry=oce,
)
@tmtc_definitions_provider
def add_system_cmds(defs: TmtcDefinitionWrapper):
import eive_tmtc.pus_tc.system.controllers as controllers
oce = OpCodeEntry()
oce.add(
keys=controllers.OpCode.THERMAL_CONTROLLER,
info=controllers.Info.THERMAL_CONTROLLER,
)
oce.add(
keys=controllers.OpCode.CORE_CONTROLLER,
info=controllers.Info.CORE_CONTROLLER,
)
defs.add_service(
name=CustomServiceList.CONTROLLERS.value,
info="Controllers",
op_code_entry=oce,
)
+309
View File
@@ -0,0 +1,309 @@
"""Hook function which packs telecommands based on service and operation code string
"""
import logging
from typing import List, cast
from tmtccmd import TreeCommandingProcedure
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
import eive_tmtc.config.object_ids as oids
from eive_tmtc.config.object_ids import (
ACU_HANDLER_ID,
CCSDS_HANDLER_ID,
HEATER_CONTROLLER_ID,
IMTQ_HANDLER_ID,
P60_DOCK_HANDLER,
PDEC_HANDLER_ID,
PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID,
RAD_SENSOR_ID,
RW1_ID,
RW2_ID,
RW3_ID,
RW4_ID,
RW_ASSEMBLY,
STAR_TRACKER_ID,
STR_IMG_HELPER_ID,
SYRLINKS_HANDLER_ID,
TMP1075_HANDLER_IF_BRD_ID,
TMP1075_HANDLER_PLPCDU_0_ID,
TMP1075_HANDLER_TCS_BRD_0_ID,
TMP1075_HANDLER_TCS_BRD_1_ID,
get_object_ids,
)
from eive_tmtc.tmtc.acs.acs_board import pack_acs_board_command
from eive_tmtc.tmtc.acs.acs_ctrl import pack_acs_ctrl_command
from eive_tmtc.tmtc.acs.gps import pack_gps_command
from eive_tmtc.tmtc.acs.gyros import handle_gyr_cmd
from eive_tmtc.tmtc.acs.imtq import create_imtq_command
from eive_tmtc.tmtc.acs.mgms import handle_mgm_cmd
from eive_tmtc.tmtc.acs.reaction_wheels import (
create_single_rw_cmd,
pack_rw_ass_cmds,
)
from eive_tmtc.tmtc.acs.star_tracker import pack_star_tracker_commands
from eive_tmtc.tmtc.acs.str_img_helper import pack_str_img_helper_command
from eive_tmtc.tmtc.acs.subsystem import build_acs_subsystem_cmd
from eive_tmtc.tmtc.com.ccsds_handler import pack_ccsds_handler_command
from eive_tmtc.tmtc.com.pdec_handler import pack_pdec_handler_commands
from eive_tmtc.tmtc.com.subsystem import build_com_subsystem_procedure
from eive_tmtc.tmtc.com.syrlinks_handler import pack_syrlinks_command
from eive_tmtc.tmtc.core import pack_core_commands
from eive_tmtc.tmtc.health import build_health_cmds
from eive_tmtc.tmtc.payload.subsystem import create_payload_subsystem_cmd
from eive_tmtc.tmtc.payload.ploc_mpsoc import pack_ploc_mpsoc_commands
from eive_tmtc.tmtc.payload.ploc_supervisor import pack_ploc_supv_commands
from eive_tmtc.tmtc.payload.plpcdu import pack_pl_pcdu_commands
from eive_tmtc.tmtc.payload.rad_sensor import create_rad_sensor_cmd
from eive_tmtc.tmtc.payload.scex import pack_scex_cmds
from eive_tmtc.tmtc.power.acu import pack_acu_commands
from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds
from eive_tmtc.tmtc.power.pdu1 import pack_pdu1_commands
from eive_tmtc.tmtc.power.pdu2 import pack_pdu2_commands
from eive_tmtc.tmtc.power.power import pack_power_commands
from eive_tmtc.tmtc.power.pwr_ctrl import pack_power_ctrl_command
from eive_tmtc.tmtc.system import build_system_cmds
from eive_tmtc.tmtc.tcs.ctrl import pack_tcs_ctrl_commands
from eive_tmtc.tmtc.tcs.heater import pack_heater_cmds
from eive_tmtc.tmtc.tcs.rtd import pack_rtd_commands
from eive_tmtc.tmtc.tcs.subsystem import pack_tcs_sys_commands
from eive_tmtc.tmtc.tcs.tmp1075 import pack_tmp1075_test_into
from eive_tmtc.tmtc.test import build_test_commands
from eive_tmtc.tmtc.time import pack_time_management_cmd
from eive_tmtc.tmtc.tm_store import pack_tm_store_commands
from eive_tmtc.tmtc.wdt import pack_wdt_commands
from eive_tmtc.utility.input_helper import InputHelper
def handle_pus_procedure(
info: TreeCommandingProcedure,
queue_helper: DefaultPusQueueHelper,
):
cmd_path = info.cmd_path
assert cmd_path is not None
cmd_path_list = cmd_path.split("/")
if cmd_path_list[0] == "":
cmd_path_list = cmd_path_list[1:]
if len(cmd_path_list) == 0:
raise ValueError(
"command path list empty. Full command path {cmd_path} might have invalid format"
)
if cmd_path_list[0] == "system":
assert len(cmd_path_list) >= 1
return build_system_cmds(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "health":
assert len(cmd_path_list) >= 1
return build_health_cmds(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "eps":
return handle_eps_procedure(queue_helper, cmd_path_list[1:])
if cmd_path_list[0] == "tcs":
return handle_tcs_procedure(queue_helper, cmd_path_list[1:])
if cmd_path_list[0] == "acs":
return handle_acs_procedure(queue_helper, cmd_path_list[1:])
if cmd_path_list[0] == "payload":
return handle_payload_procedure(queue_helper, cmd_path_list[1:])
if cmd_path_list[0] == "obdh":
return handle_obdh_procedure(queue_helper, cmd_path_list[1:])
if cmd_path_list[0] == "test":
assert len(cmd_path_list) >= 1
return build_test_commands(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "com":
return handle_com_procedure(queue_helper, cmd_path_list[1:])
logging.getLogger(__name__).warning(
f"invalid or unimplemented command path {cmd_path}"
)
def handle_eps_procedure(queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]):
obj_id_man = get_object_ids()
assert len(cmd_path_list) >= 1
if cmd_path_list[0] == "power":
return pack_power_commands(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "pwr_ctrl":
return pack_power_ctrl_command(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "p60_dock":
object_id = cast(ObjectIdU32, obj_id_man.get(P60_DOCK_HANDLER))
return pack_p60dock_cmds(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "pdu1":
object_id = cast(ObjectIdU32, obj_id_man.get(PDU_1_HANDLER_ID))
return pack_pdu1_commands(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "pdu2":
object_id = cast(ObjectIdU32, obj_id_man.get(PDU_2_HANDLER_ID))
return pack_pdu2_commands(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "acu":
object_id = cast(ObjectIdU32, obj_id_man.get(ACU_HANDLER_ID))
return pack_acu_commands(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
def handle_tcs_procedure(queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]):
obj_id_man = get_object_ids()
if len(cmd_path_list) == 1:
return pack_tcs_sys_commands(q=queue_helper, cmd_str=cmd_path_list[0])
assert len(cmd_path_list) >= 2
if cmd_path_list[0] == "tcs_brd_assy":
return pack_tcs_sys_commands(q=queue_helper, cmd_str=cmd_path_list[1])
if cmd_path_list[0] == "rtd_devs":
assert len(cmd_path_list) >= 2
return pack_rtd_commands(
object_id=None, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "tcs_ctrl":
assert len(cmd_path_list) >= 2
return pack_tcs_ctrl_commands(q=queue_helper, cmd_str=cmd_path_list[2])
if cmd_path_list[0] == "tmp1075_devs":
menu_dict = {
"0": ("TMP1075 TCS Board 0", TMP1075_HANDLER_TCS_BRD_0_ID),
"1": ("TMP1075 TCS Board 1", TMP1075_HANDLER_TCS_BRD_1_ID),
"2": ("TMP1075 PL PCDU 0", TMP1075_HANDLER_PLPCDU_0_ID),
"3": ("TMP1075 PL PCDU 1", oids.TMP1075_HANDLER_PLPCDU_1_ID),
"4": ("TMP1075 IF Board", TMP1075_HANDLER_IF_BRD_ID),
}
input_helper = InputHelper(menu_dict)
tmp_select = input_helper.get_key()
assert len(cmd_path_list) >= 2
object_id = obj_id_man.get(menu_dict[tmp_select][1])
assert object_id is not None
return pack_tmp1075_test_into(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "heaters":
object_id = HEATER_CONTROLLER_ID
return pack_heater_cmds(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
def handle_acs_procedure(queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]):
obj_id_man = get_object_ids()
if len(cmd_path_list) == 1:
return build_acs_subsystem_cmd(queue_helper, cmd_path_list[0])
assert len(cmd_path_list) >= 2
if cmd_path_list[0] == "mgt":
object_id = cast(ObjectIdU32, obj_id_man.get(IMTQ_HANDLER_ID))
return create_imtq_command(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "str":
object_id = cast(ObjectIdU32, obj_id_man.get(STAR_TRACKER_ID))
return pack_star_tracker_commands(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "rws":
assert len(cmd_path_list) >= 2
if cmd_path_list[1] == "rw_assy":
assert len(cmd_path_list) >= 3
return pack_rw_ass_cmds(
q=queue_helper, object_id=RW_ASSEMBLY, cmd_str=cmd_path_list[2]
)
if cmd_path_list[1] == "rw_1":
assert len(cmd_path_list) >= 3
return create_single_rw_cmd(
object_id=RW1_ID, rw_idx=1, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[1] == "rw_2":
assert len(cmd_path_list) >= 3
return create_single_rw_cmd(
object_id=RW2_ID, rw_idx=2, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[1] == "rw_3":
assert len(cmd_path_list) >= 3
return create_single_rw_cmd(
object_id=RW3_ID, rw_idx=3, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[1] == "rw_4":
assert len(cmd_path_list) >= 3
return create_single_rw_cmd(
object_id=RW4_ID, rw_idx=4, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[0] == "gnss_ctrl":
return pack_gps_command(
object_id=oids.GPS_CONTROLLER, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "acs_brd_assy":
if len(cmd_path_list) == 2:
return pack_acs_board_command(q=queue_helper, cmd_str=cmd_path_list[1])
else:
if cmd_path_list[1] == "mgm_devs":
return handle_mgm_cmd(q=queue_helper, cmd_str=cmd_path_list[2])
if cmd_path_list[1] == "gyro_devs":
assert len(cmd_path_list) >= 3
return handle_gyr_cmd(q=queue_helper, cmd_str=cmd_path_list[2])
if cmd_path_list[0] == "str_img_helper":
object_id = cast(ObjectIdU32, obj_id_man.get(STR_IMG_HELPER_ID))
return pack_str_img_helper_command(
object_id=object_id, q=queue_helper, op_code=cmd_path_list[1]
)
if cmd_path_list[0] == "acs_ctrl":
return pack_acs_ctrl_command(queue_helper, cmd_path_list[1])
def handle_payload_procedure(
queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]
):
obj_id_man = get_object_ids()
if cmd_path_list[0] == "subsystem":
return create_payload_subsystem_cmd(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "ploc_mpsoc":
return pack_ploc_mpsoc_commands(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "ploc_supv":
return pack_ploc_supv_commands(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "rad_sensor":
assert len(cmd_path_list) >= 3
object_id = cast(ObjectIdU32, obj_id_man.get(RAD_SENSOR_ID))
return create_rad_sensor_cmd(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[1]
)
if cmd_path_list[0] == "pl_pcdu":
return pack_pl_pcdu_commands(q=queue_helper, cmd_str=cmd_path_list[1])
if cmd_path_list[0] == "scex":
return pack_scex_cmds(
cmd_str=cmd_path_list[1],
q=queue_helper,
)
def handle_obdh_procedure(
queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]
):
assert len(cmd_path_list) >= 2
if cmd_path_list[0] == "core":
return pack_core_commands(q=queue_helper, cmd_str=cmd_path_list[1])
if cmd_path_list[0] == "xiphos_wdt":
return pack_wdt_commands(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "time":
return pack_time_management_cmd(queue_helper, cmd_path_list[1])
if cmd_path_list[0] == "tm_store":
return pack_tm_store_commands(queue_helper, cmd_path_list[1])
def handle_com_procedure(queue_helper: DefaultPusQueueHelper, cmd_path_list: List[str]):
obj_id_man = get_object_ids()
if len(cmd_path_list) == 1:
return build_com_subsystem_procedure(queue_helper, cmd_path_list[0])
assert len(cmd_path_list) >= 2
if cmd_path_list[0] == "ccsds":
object_id = cast(ObjectIdU32, obj_id_man.get(CCSDS_HANDLER_ID))
return pack_ccsds_handler_command(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[0] == "pdec":
return pack_pdec_handler_commands(
object_id=PDEC_HANDLER_ID, q=queue_helper, cmd_str=cmd_path_list[2]
)
if cmd_path_list[0] == "syrlinks":
object_id = cast(ObjectIdU32, obj_id_man.get(SYRLINKS_HANDLER_ID))
return pack_syrlinks_command(
object_id=object_id, q=queue_helper, cmd_str=cmd_path_list[2]
)
-1
View File
@@ -1 +0,0 @@
-107
View File
@@ -1,107 +0,0 @@
from spacepackets.ecss import PusTelecommand
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import BPX_HANDLER_ID
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
class BpxSetId:
GET_HK_SET = 0
GET_CFG_SET = 5
class BpxActionId:
REBOOT = 2
RESET_COUNTERS = 3
SET_CFG = 4
GET_CFG = 5
class BpxOpCode:
HK = ["0", "hk"]
OFF = ["off"]
ON = ["on"]
RST_BOOT_CNT = ["1", "rst_boot_cnt"]
REQUEST_CFG = ["2", "cfg"]
REQUEST_CFG_HK = ["3", "cfg_hk"]
REBOOT = ["4", "reboot"]
@tmtc_definitions_provider
def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=BpxOpCode.ON, info="On command")
oce.add(keys=BpxOpCode.OFF, info="Off command")
oce.add(keys=BpxOpCode.HK, info="Request BPX HK")
oce.add(keys=BpxOpCode.RST_BOOT_CNT, info="Reset Boot Count")
oce.add(keys=BpxOpCode.REQUEST_CFG, info="Request Configuration Struct (Step 1)")
oce.add(
keys=BpxOpCode.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)"
)
oce.add(keys=BpxOpCode.REBOOT, info="Reboot Command")
defs.add_service(
name=CustomServiceList.BPX_BATTERY.value,
info="BPX Battery Handler",
op_code_entry=oce,
)
@service_provider(CustomServiceList.BPX_BATTERY.value)
def pack_bpx_commands(p: ServiceProviderParams):
op_code = p.op_code
q = p.queue_helper
if op_code in BpxOpCode.HK:
q.add_log_cmd("Requesting BPX battery HK set")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_HK_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCode.OFF:
q.add_log_cmd("Off mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.OFF, 0)
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=ModeSubservices.TC_MODE_COMMAND,
app_data=mode_cmd,
)
)
if op_code in BpxOpCode.ON:
q.add_log_cmd("On mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.ON, 0)
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=ModeSubservices.TC_MODE_COMMAND,
app_data=mode_cmd,
)
)
if op_code in BpxOpCode.RST_BOOT_CNT:
q.add_log_cmd("Resetting reboot counters")
q.add_pus_tc(
create_action_cmd(
object_id=BPX_HANDLER_ID, action_id=BpxActionId.RESET_COUNTERS
)
)
if op_code in BpxOpCode.REQUEST_CFG:
q.add_log_cmd("Requesting configuration struct")
q.add_pus_tc(
create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.GET_CFG)
)
if op_code in BpxOpCode.REQUEST_CFG_HK:
q.add_log_cmd("Requesting configuration struct HK")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_CFG_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCode.REBOOT:
q.add_log_cmd("Rebooting BPX battery")
q.add_pus_tc(
create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.REBOOT)
)
-81
View File
@@ -1,81 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file ccsds_handler.py
@brief Test commanding of CCSDS Handler
@author J. Meier
@date 20.11.2021
"""
import enum
import struct
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
class CommandId(enum.IntEnum):
# Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps)
SET_LOW_RATE = 0
# Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps)
SET_HIGH_RATE = 1
# Enables the syrlinks transmitter (by using RS485 enables lines)
EN_TRANSMITTER = 2
# Disables the syrlinks transmitter (by using RS485 enables lines)
DIS_TRANSMITTER = 3
# Sets an arbitrary bitrate. Normally only set low and set high rate commands should be
# required
ARBITRARY_BITRATE = 4
ENABLE_TX_CLK_MANIPULATOR = 5
DISABLE_TX_CLK_MANIPULATOR = 6
# Tx data will be updated on rising edge of tx clock
UPDATE_ON_RISING_EDGE = 7
# Tx data will be updated on falling edge of tx clock
UPDATE_ON_FALLING_EDGE = 8
def pack_ccsds_handler_test(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
obyt = object_id.as_bytes
q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}")
if op_code == "0":
q.add_log_cmd("CCSDS Handler: Set low rate")
command = obyt + struct.pack("!I", CommandId.SET_LOW_RATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1":
q.add_log_cmd("CCSDS Handler: Set high rate")
command = obyt + struct.pack("!I", CommandId.SET_HIGH_RATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "2":
q.add_log_cmd("CCSDS Handler: Enables the transmitter")
command = obyt + struct.pack("!I", CommandId.EN_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "3":
q.add_log_cmd("CCSDS Handler: Disables the transmitter")
command = obyt + struct.pack("!I", CommandId.DIS_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "4":
q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): "))
command = (
obyt
+ struct.pack("!I", CommandId.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "5":
q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator")
command = obyt + struct.pack("!I", CommandId.ENABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "6":
q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator")
command = obyt + struct.pack("!I", CommandId.DISABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "7":
q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock")
command = obyt + struct.pack("!I", CommandId.UPDATE_ON_RISING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "8":
q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock")
command = obyt + struct.pack("!I", CommandId.UPDATE_ON_FALLING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
-48
View File
@@ -1,48 +0,0 @@
import enum
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger()
class OpCode:
REQ_OS_HK = ["0", "hk-os"]
RESET_GNSS = ["5", "reset"]
class Info:
REQ_OS_HK = "Request One-Shot HK"
RESET_GNSS = "Reset GNSS using reset pin"
class SetId:
HK = 0
@tmtc_definitions_provider
def add_gps_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.RESET_GNSS, info=Info.RESET_GNSS)
oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
defs.add_service(
name=CustomServiceList.GPS_CTRL.value,
info="GPS/GNSS Controller",
op_code_entry=oce,
)
def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.RESET_GNSS:
# TODO: This needs to be re-implemented
LOGGER.warning("Reset pin handling needs to be re-implemented")
if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}")
q.add_pus_tc(
generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetId.HK))
)
-10
View File
@@ -1,10 +0,0 @@
import enum
class AdisGyroSetId(enum.IntEnum):
CORE_HK = 0
CFG_HK = 1
class L3gGyroSetId(enum.IntEnum):
CORE_HK = 0
-9
View File
@@ -1,9 +0,0 @@
import enum
class MgmLis3SetId(enum.IntEnum):
CORE_HK = 0
class MgmRm3100SetId(enum.IntEnum):
CORE_HK = 0
-30
View File
@@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file pdec_handler.py
@brief Test commanding of PDEC Handler
@author J. Meier
@date 22.11.2021
"""
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
class CommandId:
# prints the clcw to the console. Useful for debugging
PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0])
# Print PDEC monitor register
PRINT_PDEC_MON = bytearray([0x0, 0x0, 0x0, 0x1])
def pack_pdec_handler_test(
object_id: bytearray, q: DefaultPusQueueHelper, op_code: str
):
q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}")
if op_code == "0":
q.add_log_cmd("PDEC Handler: Print CLCW")
command = object_id + CommandId.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1":
q.add_log_cmd("PDEC Handler: Print PDEC monitor register")
command = object_id + CommandId.PRINT_PDEC_MON
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
-450
View File
@@ -1,450 +0,0 @@
import enum
import struct
import time
from typing import Optional
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import TmtcDefinitionWrapper
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_diag_command,
enable_periodic_hk_command_with_interval,
disable_periodic_hk_command,
)
from tmtccmd.tc.pus_11_tc_sched import (
create_enable_tc_sched_cmd,
create_time_tagged_cmd,
)
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.tc.pus_20_params import (
pack_scalar_double_param_app_data,
pack_fsfw_load_param_cmd,
pack_boolean_parameter_app_data,
)
from tmtccmd.logging import get_console_logger
from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.config.object_ids import PL_PCDU_ID
LOGGER = get_console_logger()
class OpCode:
SWITCH_HPA_ON_PROC = ["0", "proc_hpa"]
SWITCH_ON = ["2", "on"]
SWITCH_OFF = ["3", "off"]
NORMAL_SSR = ["4", "nml_ssr"]
NORMAL_DRO = ["5", "nml_dro"]
NORMAL_X8 = ["6", "nml_x8"]
NORMAL_TX = ["7", "nml_tx"]
NORMAL_MPA = ["8", "nml_mpa"]
NORMAL_HPA = ["9", "nml_hpa"]
ENABLE_HK = ["enable_hk"]
DISABLE_HK = ["disable_hk"]
REQ_OS_HK = ["hk_os"]
INJECT_SSR_TO_DRO_FAILURE = ["10", "inject_ssr_dro_fault"]
INJECT_DRO_TO_X8_FAILURE = ["11", "inject_dro_x8_fault"]
INJECT_X8_TO_TX_FAILURE = ["12", "inject_x8_tx_fault"]
INJECT_TX_TO_MPA_FAILURE = ["13", "inject_tx_mpa_fault"]
INJECT_MPA_TO_HPA_FAILURE = ["14", "inject_mpa_hpa_fault"]
INJECT_ALL_ON_FAILURE = ["15", "inject_all_on_fault"]
class Info:
NORMAL = "ADC modules normal"
SWITCH_ON = "Switching on"
SWITCH_OFF = "Switching off"
NORMAL_SSR = f"{NORMAL}, SSR on"
NORMAL_DRO = f"{NORMAL},DRO on"
NORMAL_X8 = f"{NORMAL}, X8 on"
NORMAL_TX = f"{NORMAL}, TX on"
NORMAL_MPA = f"{NORMAL}, MPA on"
NORMAL_HPA = f"{NORMAL}, HPA on"
REQ_OS_HK = "Request One Shot HK"
SWITCH_HPA_ON_PROC = "Switch HPA on procedure"
ENABLE_HK = "Enable HK"
DISABLE_HK = "Disable HK"
class SetId(enum.IntEnum):
ADC = 0
class NormalSubmodesMask(enum.IntEnum):
SOLID_STATE_RELAYS_ADC_ON = 0
DRO_ON = 1
X8_ON = 2
TX_ON = 3
MPA_ON = 4
HPA_ON = 5
class ParamIds(enum.IntEnum):
NEG_V_LOWER_BOUND = 0
NEG_V_UPPER_BOUND = 1
DRO_U_LOWER_BOUND = 2
DRO_U_UPPER_BOUND = 3
DRO_I_UPPER_BOUND = 4
X8_U_LOWER_BOUND = 5
X8_U_UPPER_BOUND = 6
X8_I_UPPER_BOUND = 7
TX_U_LOWER_BOUND = 8
TX_U_UPPER_BOUND = 9
TX_I_UPPER_BOUND = 10
MPA_U_LOWER_BOUND = 11
MPA_U_UPPER_BOUND = 12
MPA_I_UPPER_BOUND = 13
HPA_U_LOWER_BOUND = 14
HPA_U_UPPER_BOUND = 15
HPA_I_UPPER_BOUND = 16
SSR_TO_DRO_WAIT_TIME = 17
DRO_TO_X8_WAIT_TIME = 18
X8_TO_TX_WAIT_TIME = 19
TX_TO_MPA_WAIT_TIME = 20
MPA_TO_HPA_WAIT_TIME = 21
INJECT_SSR_TO_DRO_FAILURE = 30
INJECT_DRO_TO_X8_FAILURE = 31
INJECT_X8_TO_TX_FAILURE = 32
INJECT_TX_TO_MPA_FAILURE = 33
INJECT_MPA_TO_HPA_FAILURE = 34
INJECT_ALL_ON_FAILURE = 35
@tmtc_definitions_provider
def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC)
oce.add(keys=OpCode.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCode.SWITCH_OFF, info=Info.SWITCH_OFF)
oce.add(keys=OpCode.NORMAL_SSR, info=Info.NORMAL_SSR)
oce.add(keys=OpCode.NORMAL_DRO, info=Info.NORMAL_DRO)
oce.add(keys=OpCode.NORMAL_X8, info=Info.NORMAL_X8)
oce.add(keys=OpCode.NORMAL_TX, info=Info.NORMAL_TX)
oce.add(keys=OpCode.NORMAL_MPA, info=Info.NORMAL_MPA)
oce.add(keys=OpCode.NORMAL_HPA, info=Info.NORMAL_HPA)
oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
oce.add(keys=OpCode.ENABLE_HK, info=Info.ENABLE_HK)
oce.add(
keys=OpCode.INJECT_SSR_TO_DRO_FAILURE,
info="Inject failure SSR to DRO transition",
)
oce.add(
keys=OpCode.INJECT_DRO_TO_X8_FAILURE,
info="Inject failure in DRO to X8 transition",
)
oce.add(
keys=OpCode.INJECT_X8_TO_TX_FAILURE,
info="Inject failure in X8 to TX transition",
)
oce.add(
keys=OpCode.INJECT_TX_TO_MPA_FAILURE,
info="Inject failure in TX to MPA transition",
)
oce.add(
keys=OpCode.INJECT_MPA_TO_HPA_FAILURE,
info="Inject failure in MPA to HPA transition",
)
oce.add(keys=OpCode.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode")
defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce)
def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.SWITCH_ON:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Mode.ON, submode=0)
if op_code in OpCode.SWITCH_OFF:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Mode.OFF, submode=0)
if op_code in OpCode.ENABLE_HK:
interval = float(
input("Please enter HK collection interval in floating point seconds: ")
)
cmds = enable_periodic_hk_command_with_interval(
diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC), interval_seconds=interval
)
q.add_log_cmd(f"Enable PL PCDU HK with interval of {interval} seconds")
for cmd in cmds:
q.add_pus_tc(cmd)
if op_code in OpCode.DISABLE_HK:
cmd = disable_periodic_hk_command(
diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC)
)
q.add_log_cmd("Disabling PL PCDU HK")
q.add_pus_tc(cmd)
if op_code in OpCode.NORMAL_SSR:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_SSR,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
),
)
if op_code in OpCode.NORMAL_DRO:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_DRO,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
)
if op_code in OpCode.NORMAL_X8:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_X8,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
)
if op_code in OpCode.NORMAL_TX:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_TX,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
)
if op_code in OpCode.NORMAL_MPA:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_MPA,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
)
if op_code in OpCode.NORMAL_HPA:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_HPA,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
)
if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}")
q.add_pus_tc(
generate_one_diag_command(
sid=make_sid(object_id=PL_PCDU_ID, set_id=SetId.ADC)
)
)
if op_code in OpCode.SWITCH_HPA_ON_PROC:
hpa_on_procedure(q)
if op_code in OpCode.INJECT_ALL_ON_FAILURE:
pack_failure_injection_cmd(
q=q,
param_id=ParamIds.INJECT_ALL_ON_FAILURE,
print_str="All On",
)
def hpa_on_procedure(q: DefaultPusQueueHelper):
delay_dro_to_x8 = request_wait_time()
if delay_dro_to_x8 is None:
delay_dro_to_x8 = 900
q.add_log_cmd(
f"Starting procedure to switch on PL PCDU HPA with DRO to X8 "
f"delay of {delay_dro_to_x8} seconds"
)
pl_pcdu_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(object_id=PL_PCDU_ID, mode=Mode.ON, submode=0),
)
ssr_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
),
),
)
dro_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
),
)
x8_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
),
)
tx_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
),
)
mpa_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
),
)
hpa_on = PusTelecommand(
service=200,
subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(
object_id=PL_PCDU_ID,
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
),
)
current_time = time.time()
enb_sched = create_enable_tc_sched_cmd()
sched_time = int(round(current_time + 10))
q.add_pus_tc(enb_sched)
tagged_on_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time),
tc_to_insert=pl_pcdu_on,
)
q.add_pus_tc(tagged_on_cmd)
sched_time += 5
tagged_ssr_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time),
tc_to_insert=ssr_on,
)
q.add_pus_tc(tagged_ssr_cmd)
sched_time += 5
tagged_dro_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=dro_on
)
q.add_pus_tc(tagged_dro_cmd)
sched_time += delay_dro_to_x8
sched_time = int(round(sched_time))
tagged_x8_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=x8_on
)
q.add_pus_tc(tagged_x8_cmd)
sched_time += 5
tagged_tx_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=tx_on
)
q.add_pus_tc(tagged_tx_cmd)
sched_time += 5
tagged_mpa_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=mpa_on
)
q.add_pus_tc(tagged_mpa_cmd)
sched_time += 5
tagged_hpa_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=hpa_on
)
q.add_pus_tc(tagged_hpa_cmd)
def request_wait_time() -> Optional[float]:
while True:
wait_time = input("Please enter DRO to X8 wait time in seconds, x to cancel: ")
if wait_time.lower() == "x":
return None
try:
wait_time = float(wait_time)
except ValueError:
LOGGER.warning("Invalid input")
continue
if wait_time <= 0:
LOGGER.warning("Invalid input")
else:
return wait_time
def submode_mask_to_submode(on_tgt: NormalSubmodesMask) -> int:
if on_tgt == NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON:
return 1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
if on_tgt == NormalSubmodesMask.DRO_ON:
return 1 << NormalSubmodesMask.DRO_ON | (
1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
)
if on_tgt == NormalSubmodesMask.X8_ON:
return (
1 << NormalSubmodesMask.DRO_ON
| (1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON)
| (1 << NormalSubmodesMask.X8_ON)
)
if on_tgt == NormalSubmodesMask.TX_ON:
return (
1 << NormalSubmodesMask.DRO_ON
| (1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON)
| (1 << NormalSubmodesMask.X8_ON)
| (1 << NormalSubmodesMask.TX_ON)
)
if on_tgt == NormalSubmodesMask.MPA_ON:
return (
1 << NormalSubmodesMask.DRO_ON
| (1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON)
| (1 << NormalSubmodesMask.X8_ON)
| (1 << NormalSubmodesMask.TX_ON)
| (1 << NormalSubmodesMask.MPA_ON)
)
if on_tgt == NormalSubmodesMask.HPA_ON:
return (
1 << NormalSubmodesMask.DRO_ON
| (1 << NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON)
| (1 << NormalSubmodesMask.X8_ON)
| (1 << NormalSubmodesMask.TX_ON)
| (1 << NormalSubmodesMask.MPA_ON)
| (1 << NormalSubmodesMask.HPA_ON)
)
def pack_wait_time_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
wait_time = request_wait_time()
q.add_log_cmd(f"Updating {print_str} wait time to {wait_time}")
if wait_time is None:
return
param_data = pack_scalar_double_param_app_data(
object_id=PL_PCDU_ID,
domain_id=0,
unique_id=param_id,
parameter=wait_time,
)
q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data))
def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
q.add_log_cmd(f"Inserting {print_str} error")
param_data = pack_boolean_parameter_app_data(
object_id=PL_PCDU_ID, domain_id=0, unique_id=param_id, parameter=True
)
q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data))
def pack_pl_pcdu_mode_cmd(
q: DefaultPusQueueHelper, info: str, mode: Mode, submode: int
):
q.add_log_cmd(info)
mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=mode_data
)
)
-110
View File
@@ -1,110 +0,0 @@
from typing import Optional
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.pus_tc.devs.pdec_handler import CommandId
from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_data, Subservice
import eive_tmtc.config.object_ids as oids
from eive_tmtc.config.object_ids import get_object_ids
RTD_IDS = [
oids.RTD_0_PLOC_HSPD,
oids.RTD_1_PLOC_MISSIONBRD,
oids.RTD_2_4K_CAM,
oids.RTD_3_DAC_HSPD,
oids.RTD_4_STR,
oids.RTD_5_RW1_MX_MY,
oids.RTD_6_DRO,
oids.RTD_7_SCEX,
oids.RTD_8_X8,
oids.RTD_9_HPA,
oids.RTD_10_PL_TX,
oids.RTD_11_MPA,
oids.RTD_12_ACU,
oids.RTD_13_PLPCDU_HSPD,
oids.RTD_14_TCS_BRD,
oids.RTD_15_IMTQ,
]
class OpCode:
ON = ["0", "on"]
OFF = ["1", "off"]
NORMAL = ["2", "normal"]
CONFIG_CMD = ["3", "Write config"]
class Info:
ON = "Switch handler on"
OFF = "Switch handler off"
NORMAL = "Switch handler normal"
WIRTE_CONFIG = "Write config"
@tmtc_definitions_provider
def specify_rtd_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.ON, info=Info.ON)
oce.add(keys=OpCode.NORMAL, info=Info.NORMAL)
oce.add(keys=OpCode.OFF, info=Info.OFF)
defs.add_service(
name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce
)
def pack_rtd_commands(
op_code: str, object_id: Optional[ObjectIdU32], q: DefaultPusQueueHelper
):
if object_id is not None and object_id not in RTD_IDS:
print("Specified object ID not a valid RTD ID")
object_id = None
if object_id is None:
tgt_rtd_idx = prompt_rtd_idx()
object_id_dict = get_object_ids()
object_id = object_id_dict.get(RTD_IDS[tgt_rtd_idx])
if op_code in OpCode.ON:
app_data = pack_mode_data(object_id=object_id.as_bytes, mode=Mode.ON, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCode.NORMAL:
app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Mode.NORMAL, submode=0
)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCode.OFF:
app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Mode.OFF, submode=0
)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCode.CONFIG_CMD:
command = object_id.as_bytes + CommandId.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def prompt_rtd_idx():
while True:
rtd_idx = input("Please specify RTD index [0-15]: ")
if not rtd_idx.isdigit():
print("Invalid input")
continue
rtd_idx = int(rtd_idx)
if rtd_idx < 0 or rtd_idx > 15:
print("Invalid device index")
continue
return rtd_idx
-660
View File
@@ -1,660 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file star_tracker.py
@brief Star tracker commanding
@author J. Meier
@date 14.08.2021
"""
import enum
import struct
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.logging import get_console_logger
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
from eive_tmtc.utility.input_helper import InputHelper
LOGGER = get_console_logger()
class StarTrackerActionId(enum.IntEnum):
PING = 0
BOOT = 1
REQ_VERSION = 2
REQ_INTERFACE = 3
REQ_TIME = 4
UNLOCK = 6
SWITCH_TO_BOOTLOADER_PROGRAM = 7
REQ_POWER = 11
TAKE_IMAGE = 15
DOWNLOAD_IMAGE = 9
UPLOAD_IMAGE = 10
DOWNLOAD_CENTROID = 16
UPLOAD_CENTROID = 17
SUBSCRIPTION = 18
IMAGE_PROCESSOR = 19
REQ_SOLUTION = 24
REQ_TEMPERATURE = 25
REQ_HISTOGRAM = 28
REQ_CONTRAST = 29
LIMITS = 40
MOUNTING = 41
CAMERA = 42
BLOB = 43
CENTROIDING = 44
LISA = 45
MATCHING = 46
TRACKING = 47
VALIDATION = 48
ALGO = 49
CHECKSUM = 50
FLASH_READ = 51
FLASH_WRITE = 52
DOWNLOAD_MATCHED_STAR = 53
STOP_STR_HELPER = 55
RESET_ERROR = 56
CHANGE_DOWNLOAD_IMAGE = 57
SET_JSON_FILE_NAME = 58
SET_FLASH_READ_FILENAME = 59
SET_TIME = 60
DOWNLOAD_DBIMAGE = 61
DOWNLOAD_BLOBPIXEL = 62
DOWNLOAD_FPGA_IMAGE = 63
CHANGE_FPGA_DOWNLOAD_FILE = 64
UPLOAD_FPGA_IMAGE = 65
FPGA_ACTION = 66
REQ_CAMERA_PARAMS = 67
REQ_LIMITS = 68
REQ_LOG_LEVEL = 69
REQ_MOUNTING = 70
REQ_IMAGE_PROCESSOR = 71
REQ_CENTROIDING = 72
REQ_LISA = 73
REQ_MATCHING = 74
REQ_TRACKING = 75
REQ_VALIDATION = 76
REQ_ALGO = 77
REQ_SUBSCRIPTION = 78
REQ_LOG_SUBSCRIPTION = 79
REQ_DEBUG_CAMERA = 80
LOGLEVEL = 81
LOG_SUBSCRIPTION = 82
DEBUG_CAMERA = 83
FIRMWARE_UPDATE = 84
class OpCodes:
NORMAL = ["2", "nml"]
class SetIds:
TEMPERATURE = 25
class FileDefs:
download_path = "/mnt/sd0/startracker"
json_file = "/mnt/sd0/startracker/full.json"
egse_ground_config = "/home/pi/arcsec/json/ground-config.json"
egse_flight_config = "/home/pi/arcsec/json/flight-config.json"
egse_solution_upload_img_config = "/home/pi/arcsec/json/upload-image-solution.json"
egse_histogram_upload_img_config = (
"/home/pi/arcsec/json/upload-image-histogram.json"
)
q7s_ground_config = "/mnt/sd0/startracker/json/ground-config.json"
q7s_flight_config = "/mnt/sd0/startracker/flight-config.json"
firmware2_1 = "/home/pi/arcsec/firmware/sagitta-2-1.bin"
firmware22_1 = "/home/pi/arcsec/firmware/sagitta-22-1.bin"
firmware_origin = "/home/pi/arcsec/firmware/sagitta-origin.bin"
json_dict = {
"1": ["Q7S flight config", FileDefs.q7s_flight_config],
"2": ["Q7S ground config", FileDefs.q7s_ground_config],
"3": ["EGSE flight config", FileDefs.egse_flight_config],
"4": ["EGSE ground config", FileDefs.egse_ground_config],
"5": [
"EGSE get solution, upload image config",
FileDefs.egse_solution_upload_img_config,
],
"6": [
"EGSE get histogram, upload image config",
FileDefs.egse_solution_upload_img_config,
],
}
firmware_dict = {
"1": ["Firmware Major = 2, Minor = 1", FileDefs.firmware2_1],
"2": ["Firmware Major = 22, Minor = 1", FileDefs.firmware22_1],
"3": ["Firmware Origin", FileDefs.firmware_origin],
}
upload_image_dict = {
"1": ["q7s gemma", "/mnt/sd0/startracker/gemma.bin"],
"2": ["egse gemma", "/home/pi/arcsec/star-images/gemma.bin"],
"3": ["q7s polaris", "/mnt/sd0/startracker/polaris.bin"],
"4": ["egse polaris", "/home/pi/arcsec/star-images/polaris.bin"],
}
class StartRegion:
# Definition according to datasheet (which turned out to be partially faulty)
BOOTLOADER = 0
STAR_TRACKER_FIRMWARE = 1
class PartitionSize:
# Size of most recent firmware image
STAR_TRACKER_FIRMWARE = 464572
class Submode:
BOOTLOADER = 1
FIRMWARE = 2
def pack_star_tracker_commands(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
q.add_log_cmd(
f"Generate command for star tracker with object id: {object_id.as_hex_string}"
)
obyt = object_id.as_bytes
if op_code == "0":
q.add_log_cmd("Star tracker: Mode On, Submode Bootloader")
data = pack_mode_data(obyt, Mode.ON, Submode.BOOTLOADER)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "1":
q.add_log_cmd("Star tracker: Mode On, Submode Firmware")
data = pack_mode_data(obyt, Mode.ON, Submode.FIRMWARE)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "2":
q.add_log_cmd("Star tracker: Mode Normal")
data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3":
q.add_log_cmd("Star tracker: Mode Off")
data = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "4":
q.add_log_cmd("Star tracker: Mode Raw")
data = pack_mode_data(obyt, Mode.RAW, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "5":
q.add_log_cmd("Star tracker: Ping")
data = obyt + struct.pack("!I", StarTrackerActionId.PING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6":
q.add_log_cmd("Star tracker: Switch to bootloader program")
data = obyt + struct.pack(
"!I", StarTrackerActionId.SWITCH_TO_BOOTLOADER_PROGRAM
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "7":
q.add_log_cmd("Star tracker: Temperature request")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TEMPERATURE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8":
q.add_log_cmd("Star tracker: Request version")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VERSION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "9":
q.add_log_cmd("Star tracker: Request interface")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_INTERFACE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10":
q.add_log_cmd("Star tracker: Request power")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_POWER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "11":
q.add_log_cmd("Star tracker: Set subscription parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.SUBSCRIPTION)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12":
q.add_log_cmd("Star tracker: Boot")
data = obyt + struct.pack("!I", StarTrackerActionId.BOOT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "13":
q.add_log_cmd("Star tracker: Request time")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TIME)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "14":
q.add_log_cmd("Star tracker: Request solution")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SOLUTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "15":
q.add_log_cmd("Star tracker: Upload image")
image = get_upload_image()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.UPLOAD_IMAGE)
+ bytearray(image, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "16":
q.add_log_cmd("Star tracker: Download image")
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
if not path:
path = FileDefs.download_path
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_IMAGE)
+ bytearray(path, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "17":
q.add_log_cmd("Star tracker: Set limits")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.LIMITS)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "18":
q.add_log_cmd("Star tracker: Set tracking parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.TRACKING)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "19":
q.add_log_cmd("Star tracker: Mounting")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.MOUNTING)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "20":
q.add_log_cmd("Star tracker: Camera")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "22":
q.add_log_cmd("Star tracker: Centroiding")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CENTROIDING)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "23":
q.add_log_cmd("Star tracker: LISA")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.LISA)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "24":
q.add_log_cmd("Star tracker: Matching")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.MATCHING)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "25":
q.add_log_cmd("Star tracker: Validation")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.VALIDATION)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "26":
q.add_log_cmd("Star tracker: Algo")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.ALGO)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "27":
q.add_log_cmd("Star tracker: Take image")
actionid = int(input("Specify parameter ID (take image - 4): "))
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.TAKE_IMAGE)
+ struct.pack("!B", actionid)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "28":
q.add_log_cmd("Star tracker: Stop str helper")
data = obyt + struct.pack("!I", StarTrackerActionId.STOP_STR_HELPER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "30":
q.add_log_cmd("Star tracker: Set name of download image")
filename = input("Specify download image name: ")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CHANGE_DOWNLOAD_IMAGE)
+ bytearray(filename, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "31":
q.add_log_cmd("Star tracker: Request histogram")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_HISTOGRAM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "32":
q.add_log_cmd("Star tracker: Request contrast")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CONTRAST)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "33":
q.add_log_cmd("Star tracker: Set json filename")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.SET_JSON_FILE_NAME)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "35":
q.add_log_cmd("Star tracker: Flash read")
data = pack_read_command(obyt)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "36":
q.add_log_cmd("Star tracker: Set flash read filename")
filename = input("Specify filename: ")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.SET_FLASH_READ_FILENAME)
+ bytearray(filename, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "37":
q.add_log_cmd("Star tracker: Get checksum")
data = pack_checksum_command(obyt)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "38":
q.add_log_cmd("Star tracker: Set time")
unix_time = 1640783543
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.SET_TIME)
+ struct.pack("!Q", unix_time)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "39":
q.add_log_cmd("Star tracker: Download Centroid")
id = 0
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_CENTROID)
+ struct.pack("!B", id)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "41":
q.add_log_cmd("Star tracker: Download matched star")
id = 0
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_MATCHED_STAR)
+ struct.pack("!B", id)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "42":
q.add_log_cmd("Star tracker: Download DB Image")
id = 0
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_DBIMAGE)
+ struct.pack("!B", id)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "43":
q.add_log_cmd("Star tracker: Download Blob Pixel")
id = 0
type = 1 # 0 - normal, 1 - fast
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_BLOBPIXEL)
+ struct.pack("!B", id)
+ struct.pack("!B", type)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "44":
q.add_log_cmd("Star tracker: Download FPGA Image")
position = int(input("Start position: "))
length = int(input("Size to download: "))
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DOWNLOAD_FPGA_IMAGE)
+ struct.pack("!I", position)
+ struct.pack("!I", length)
+ bytearray(FileDefs.downloadFpgaImagePath, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "45":
q.add_log_cmd("Star tracker: Change donwload FPGA image file name")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CHANGE_FPGA_DOWNLOAD_FILE)
+ bytearray(FileDefs.downloadFpgaImageName, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "46":
q.add_log_cmd("Star tracker: Upload FPGA image")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.UPLOAD_FPGA_IMAGE)
+ bytearray(FileDefs.uploadFpgaImageName, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "47":
q.add_log_cmd("Star tracker: FPGA action")
id = 3
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.FPGA_ACTION)
+ struct.pack("!B", id)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "48":
q.add_log_cmd("Star tracker: Unlock")
data = obyt + struct.pack("!I", StarTrackerActionId.UNLOCK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "49":
q.add_log_cmd("Star tracker: Request camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CAMERA_PARAMS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "50":
q.add_log_cmd("Star tracker: Request limits")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LIMITS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "51":
q.add_log_cmd("Star tracker: Set image processor parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.IMAGE_PROCESSOR)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "52":
q.add_log_cmd("Star tracker: EGSE load ground config camera parameters")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_ground_config, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "53":
q.add_log_cmd("Star tracker: EGSE load flight config camera parameters")
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_flight_config, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "54":
q.add_log_cmd("Star tracker: Request log level parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_LEVEL)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "55":
q.add_log_cmd("Star tracker: Request mounting parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MOUNTING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "56":
q.add_log_cmd("Star tracker: Request image processor parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_IMAGE_PROCESSOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "57":
q.add_log_cmd("Star tracker: Request centroiding parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CENTROIDING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "58":
q.add_log_cmd("Star tracker: Request lisa parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LISA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "59":
q.add_log_cmd("Star tracker: Request matching parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MATCHING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "60":
q.add_log_cmd("Star tracker: Request tracking parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TRACKING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "61":
q.add_log_cmd("Star tracker: Request validation parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VALIDATION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "62":
q.add_log_cmd("Star tracker: Request algo parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_ALGO)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "63":
q.add_log_cmd("Star tracker: Request subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "64":
q.add_log_cmd("Star tracker: Request log subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "65":
q.add_log_cmd("Star tracker: Request debug camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_DEBUG_CAMERA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "66":
q.add_log_cmd("Star tracker: Set log level parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.LOGLEVEL)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "67":
q.add_log_cmd("Star tracker: Set log subscription parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.LOG_SUBSCRIPTION)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "68":
q.add_log_cmd("Star tracker: Set debug camera parameters")
json_file = get_config_file()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.DEBUG_CAMERA)
+ bytearray(json_file, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "69":
q.add_log_cmd("Star tracker: Firmware update")
firmware = get_firmware()
data = (
obyt
+ struct.pack("!I", StarTrackerActionId.FIRMWARE_UPDATE)
+ bytearray(firmware, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "70":
q.add_log_cmd("Star tracker: Disable timestamp generation")
command = obyt + struct.pack(
"!I", StarTrackerActionId.DISBALE_TIMESTAMP_GENERATION
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "71":
q.add_log_cmd("Star tracker: Enable timestamp generation")
command = obyt + struct.pack(
"!I", StarTrackerActionId.ENABLE_TIMESTAMP_GENERATION
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def pack_read_command(object_id: bytes) -> bytearray:
start_region = StartRegion.STAR_TRACKER_FIRMWARE
size = PartitionSize.STAR_TRACKER_FIRMWARE
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
if not path:
path = FileDefs.download_path
data = (
object_id
+ struct.pack("!I", StarTrackerActionId.FLASH_READ)
+ struct.pack("!B", start_region)
+ struct.pack("!I", size)
+ bytearray(path, "utf-8")
)
return bytearray(data)
def pack_checksum_command(object_id: bytes) -> bytearray:
start_region = StartRegion.STAR_TRACKER_FIRMWARE
address = 0
size = PartitionSize.STAR_TRACKER_FIRMWARE
data = (
object_id
+ struct.pack("!I", StarTrackerActionId.CHECKSUM)
+ struct.pack("!B", start_region)
+ struct.pack("!I", address)
+ struct.pack("!I", size)
)
return bytearray(data)
def get_config_file() -> str:
LOGGER.info("Specify json file")
input_helper = InputHelper(json_dict)
key = input_helper.get_key()
json_file = json_dict[key][1]
return json_file
def get_firmware() -> str:
LOGGER.info("Specify firmware file")
input_helper = InputHelper(firmware_dict)
key = input_helper.get_key()
firmware = firmware_dict[key][1]
return firmware
def get_upload_image() -> str:
LOGGER.info("Specify image to upload")
input_helper = InputHelper(upload_image_dict)
key = input_helper.get_key()
image = upload_image_dict[key][1]
return image
-2
View File
@@ -1,2 +0,0 @@
class SetId:
HK = 3
@@ -1,180 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file syrlinks_hk_handler.py
@brief Syrlinks Hk Handler tests
@author J. Meier
@date 13.12.2020
"""
import enum
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
import struct
from tmtccmd.util import ObjectIdU32
class SetId:
RX_REGISTERS_DATASET = 1
TX_REGISTERS_DATASET = 2
class OpCode:
OFF = "off"
ON = "on"
NORMAL = "nml"
STANDBY = "set_tx_standby"
SET_CW = "set_tx_carrier_wave"
MODULATION = "modulation"
HK_RX_REGS = "hk_rx_regs"
HK_TX_REGS = "hk_tx_regs"
TX_STATUS = "tx_status"
RX_STATUS = "rx_status"
class Info:
HK_RX_REGS = "Request RX register set"
HK_TX_REGS = "Request TX register set"
TX_STATUS = "Read TX status (always read in normal mode)"
RX_STATUS = "Read RX status (always read in normal mode)"
SET_CW = "Set TX carrier wave"
class CommandId(enum.IntEnum):
READ_RX_STATUS_REGISTERS = 2
SET_TX_MODE_STANDBY = 3
SET_TX_MODE_MODULATION = 4
SET_TX_MODE_CW = 5
READ_TX_STATUS = 7
READ_TX_WAVEFORM = 8
READ_TX_AGC_VALUE_HIGH_BYTE = 9
READ_TX_AGC_VALUE_LOW_BYTE = 10
WRITE_LCL_CONFIG = 11
READ_LCL_CONFIG_REGISTER = 12
SET_WAVEFORM_OQPSK = 17
SET_WAVEFORM_BPSK = 18
SET_SECOND_CONFIG = 19
ENABLE_DEBUG = 20
DISABLE_DEBUG = 21
@tmtc_definitions_provider
def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, "Syrlinks Handler: Set mode off")
oce.add(OpCode.ON, "Syrlinks Handler: Set mode on")
oce.add(OpCode.NORMAL, "Syrlinks Handler: Set mode normal")
oce.add(OpCode.STANDBY, "Syrlinks Handler: Set TX standby")
oce.add(OpCode.MODULATION, "Syrlinks Handler: Set TX modulation")
oce.add(OpCode.HK_RX_REGS, Info.HK_RX_REGS)
oce.add(OpCode.HK_TX_REGS, Info.HK_TX_REGS)
oce.add(OpCode.SET_CW, Info.SET_CW)
oce.add(OpCode.TX_STATUS, Info.TX_STATUS)
oce.add(OpCode.RX_STATUS, Info.RX_STATUS)
oce.add("7", "Syrlinks Handler: Read TX waveform")
oce.add("8", "Syrlinks Handler: Read TX AGC value high byte")
oce.add("9", "Syrlinks Handler: Read TX AGC value low byte")
oce.add("12", "Syrlinks Handler: Write LCL config")
oce.add("14", "Syrlinks Handler: Read LCL config register")
oce.add("15", "Syrlinks Handler: Set waveform OQPSK")
oce.add("16", "Syrlinks Handler: Set waveform BPSK")
oce.add("17", "Syrlinks Handler: Set second config")
oce.add("18", "Syrlinks Handler: Enable debug output")
oce.add("19", "Syrlinks Handler: Disable debug output")
defs.add_service(CustomServiceList.SYRLINKS.value, "Syrlinks Handler", oce)
def pack_syrlinks_command(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
obyt = object_id.as_bytes
prefix = "Syrlinks"
q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if op_code == OpCode.OFF:
q.add_log_cmd(f"{prefix}: Set mode off")
data = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCode.ON:
q.add_log_cmd(f"{prefix}: Set mode on")
data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCode.NORMAL:
q.add_log_cmd(f"{prefix}: Mode Normal")
data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCode.STANDBY:
q.add_log_cmd(f"{prefix}: Set TX mode standby")
data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_STANDBY)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == OpCode.MODULATION:
q.add_log_cmd(f"{prefix}: Set TX mode modulation")
data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_MODULATION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.SET_CW:
q.add_log_cmd(f"{prefix}: {Info.SET_CW}")
data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_CW)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCode.HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCode.TX_STATUS:
q.add_log_cmd(f"{prefix}: {Info.TX_STATUS}")
command = obyt + struct.pack("!I", CommandId.READ_TX_STATUS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9":
q.add_log_cmd("Syrlinks: Read TX waveform")
command = obyt + struct.pack("!I", CommandId.READ_TX_WAVEFORM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "10":
q.add_log_cmd("Syrlinks: Read TX AGC value high byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_HIGH_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11":
q.add_log_cmd("Syrlinks: Read TX AGC value low byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_LOW_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12":
q.add_log_cmd("Syrlinks: Write LCL config")
command = obyt + struct.pack("!I", CommandId.WRITE_LCL_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "13":
q.add_log_cmd("Syrlinks: Read RX status registers")
command = obyt + struct.pack("!I", CommandId.READ_RX_STATUS_REGISTERS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "14":
q.add_log_cmd("Syrlinks: Read LCL config register")
command = obyt + struct.pack("!I", CommandId.READ_LCL_CONFIG_REGISTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "15":
q.add_log_cmd("Syrlinks: Set waveform OQPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_OQPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "16":
q.add_log_cmd("Syrlinks: Set waveform BPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_BPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "17":
q.add_log_cmd("Syrlinks: Set second config")
command = obyt + struct.pack("!I", CommandId.SET_SECOND_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "18":
q.add_log_cmd("Syrlinks: Enable debug printout")
command = obyt + struct.pack("!I", CommandId.ENABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "19":
q.add_log_cmd("Syrlinks: Disable debug printout")
command = obyt + struct.pack("!I", CommandId.DISABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
-65
View File
@@ -1,65 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file tmp1075.py
@brief TMP1075 tests
@author J. Meier
@date 06.01.2021
"""
import enum
from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.pus_tc.service_200_mode import pack_mode_data
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.pus.s8_fsfw_funccmd import make_action_id
from tmtccmd.util import ObjectIdU32
class Tmp1075TestProcedure:
"""
@brief Use this class to define the tests to perform for the Tmp1075.
@details Setting all to True will run all tests.
Setting all to False will only run the tests set to True.
"""
all = False
start_adc_conversion = False
get_temp = False
set_mode_normal = (
True # Setting mode to normal starts continuous temperature reading
)
set_mode_on = False # If mode is MODE_ON, temperature will only be read on command
class Tmp1075ActionId(enum.IntEnum):
GET_TEMP = 1
START_ADC_CONV = 2
def pack_tmp1075_test_into(
object_id: ObjectIdU32, op_code: str, q: DefaultPusQueueHelper
):
q.add_log_cmd(
f"Testing Tmp1075 Temperature Sensor Handler with object id: {object_id.as_hex_string}"
)
obyt = object_id.as_bytes
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion:
q.add_log_cmd("TMP1075: Starting new temperature conversion")
command = obyt + make_action_id(Tmp1075ActionId.GET_TEMP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp:
q.add_log_cmd("TMP1075: Read temperature")
command = obyt + make_action_id(Tmp1075ActionId.START_ADC_CONV)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.set_mode_normal:
q.add_log_cmd("TMP1075: Set Mode Normal")
mode_data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if Tmp1075TestProcedure.set_mode_on:
q.add_log_cmd("TMP1075: Set Mode On")
mode_data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
return q
-216
View File
@@ -1,216 +0,0 @@
"""Hook function which packs telecommands based on service and operation code string
"""
from typing import cast
from eive_tmtc.tmtc.power.power import pack_power_commands
from eive_tmtc.pus_tc.devs.rtd import pack_rtd_commands
from eive_tmtc.pus_tc.devs.scex import pack_scex_cmds
from eive_tmtc.pus_tc.system.controllers import (
pack_cmd_ctrl_to_prompted_mode,
get_object_from_op_code,
)
from eive_tmtc.tmtc.tcs import pack_tcs_sys_commands
from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.config import CoreServiceList
from tmtccmd.logging import get_console_logger
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.decorator import (
route_to_registered_service_handlers,
ServiceProviderParams,
)
from tmtccmd.tc.pus_5_event import (
pack_generic_service_5_test_into,
)
from eive_tmtc.pus_tc.service_200_mode import pack_service_200_test_into
from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds
from eive_tmtc.tmtc.power.pdu2 import pack_pdu2_commands
from eive_tmtc.tmtc.power.pdu1 import pack_pdu1_commands
from eive_tmtc.tmtc.power.acu import pack_acu_commands
from eive_tmtc.tmtc.acs.imtq import pack_imtq_test_into
from eive_tmtc.pus_tc.devs.tmp1075 import pack_tmp1075_test_into
from eive_tmtc.pus_tc.devs.heater import pack_heater_cmds
from eive_tmtc.tmtc.acs.reaction_wheels import (
pack_single_rw_test_into,
pack_rw_ass_cmds,
)
from eive_tmtc.pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
from eive_tmtc.tmtc.payload.ploc_memory_dumper import pack_ploc_memory_dumper_cmd
from eive_tmtc.pus_tc.devs.ccsds_handler import pack_ccsds_handler_test
from eive_tmtc.tmtc.core import pack_core_commands
from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import pack_syrlinks_command
from eive_tmtc.pus_tc.devs.gps import pack_gps_command
from eive_tmtc.tmtc.acs.acs_board import pack_acs_command
from eive_tmtc.pus_tc.devs.plpcdu import pack_pl_pcdu_commands
from eive_tmtc.pus_tc.devs.str_img_helper import pack_str_img_helper_command
from eive_tmtc.pus_tc.system.proc import pack_proc_commands
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import (
P60_DOCK_HANDLER,
PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID,
ACU_HANDLER_ID,
TMP_1075_1_HANDLER_ID,
TMP_1075_2_HANDLER_ID,
HEATER_ID,
IMTQ_HANDLER_ID,
RW1_ID,
RW2_ID,
RW3_ID,
RW4_ID,
RAD_SENSOR_ID,
STAR_TRACKER_ID,
PLOC_MEMORY_DUMPER_ID,
CCSDS_HANDLER_ID,
PDEC_HANDLER_ID,
STR_IMG_HELPER_ID,
SYRLINKS_HANDLER_ID,
RW_ASSEMBLY,
get_object_ids,
)
import eive_tmtc.config.object_ids as oids
from tmtccmd.util import ObjectIdU32
LOGGER = get_console_logger()
def handle_default_procedure(
tc_base: TcHandlerBase,
info: DefaultProcedureInfo,
queue_helper: DefaultPusQueueHelper,
):
service = info.service
op_code = info.op_code
obj_id_man = get_object_ids()
if service == CoreServiceList.SERVICE_5.value:
return pack_generic_service_5_test_into(q=queue_helper)
if service == CoreServiceList.SERVICE_200.value:
return pack_service_200_test_into(q=queue_helper)
if service == CustomServiceList.P60DOCK.value:
object_id = cast(ObjectIdU32, obj_id_man.get(P60_DOCK_HANDLER))
return pack_p60dock_cmds(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.RTD.value:
return pack_rtd_commands(object_id=None, q=queue_helper, op_code=op_code)
if service == CustomServiceList.PDU1.value:
object_id = cast(ObjectIdU32, obj_id_man.get(PDU_1_HANDLER_ID))
return pack_pdu1_commands(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.PDU2.value:
object_id = cast(ObjectIdU32, obj_id_man.get(PDU_2_HANDLER_ID))
return pack_pdu2_commands(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.ACU.value:
object_id = cast(ObjectIdU32, obj_id_man.get(ACU_HANDLER_ID))
return pack_acu_commands(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.TCS.value:
return pack_tcs_sys_commands(q=queue_helper, op_code=op_code)
if service == CustomServiceList.TMP1075_1.value:
object_id = cast(ObjectIdU32, obj_id_man.get(TMP_1075_1_HANDLER_ID))
return pack_tmp1075_test_into(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.TMP1075_2.value:
object_id = cast(ObjectIdU32, obj_id_man.get(TMP_1075_2_HANDLER_ID))
return pack_tmp1075_test_into(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.HEATER.value:
object_id = HEATER_ID
return pack_heater_cmds(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.IMTQ.value:
object_id = cast(ObjectIdU32, obj_id_man.get(IMTQ_HANDLER_ID))
return pack_imtq_test_into(object_id=object_id, q=queue_helper, op_code=op_code)
if service == CustomServiceList.REACTION_WHEEL_1.value:
return pack_single_rw_test_into(
object_id=RW1_ID, rw_idx=1, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.REACTION_WHEEL_2.value:
return pack_single_rw_test_into(
object_id=RW2_ID, rw_idx=2, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.REACTION_WHEEL_3.value:
return pack_single_rw_test_into(
object_id=RW3_ID, rw_idx=3, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.REACTION_WHEEL_4.value:
return pack_single_rw_test_into(
object_id=RW4_ID, rw_idx=4, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.RAD_SENSOR.value:
object_id = cast(ObjectIdU32, obj_id_man.get(RAD_SENSOR_ID))
return pack_rad_sensor_test_into(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.STAR_TRACKER.value:
object_id = cast(ObjectIdU32, obj_id_man.get(STAR_TRACKER_ID))
return pack_star_tracker_commands(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.STR_IMG_HELPER.value:
object_id = cast(ObjectIdU32, obj_id_man.get(STR_IMG_HELPER_ID))
return pack_str_img_helper_command(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.CORE.value:
return pack_core_commands(q=queue_helper, op_code=op_code)
if service == CustomServiceList.PLOC_MEMORY_DUMPER.value:
object_id = cast(ObjectIdU32, obj_id_man.get(PLOC_MEMORY_DUMPER_ID))
return pack_ploc_memory_dumper_cmd(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.POWER.value:
return pack_power_commands(queue_helper, op_code)
if service == CustomServiceList.ACS.value:
return pack_acs_command(q=queue_helper, op_code=op_code)
if service == CustomServiceList.GPS_CTRL.value:
return pack_gps_command(
object_id=oids.GPS_CONTROLLER, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.CCSDS_HANDLER.value:
return pack_ccsds_handler_test(
object_id=CCSDS_HANDLER_ID, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.PDEC_HANDLER.value:
return pack_ccsds_handler_test(
object_id=PDEC_HANDLER_ID, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.SYRLINKS.value:
object_id = cast(ObjectIdU32, obj_id_man.get(SYRLINKS_HANDLER_ID))
return pack_syrlinks_command(
object_id=object_id, q=queue_helper, op_code=op_code
)
if service == CustomServiceList.PROCEDURE.value:
return pack_proc_commands(q=queue_helper, op_code=op_code)
if service == CustomServiceList.PL_PCDU.value:
return pack_pl_pcdu_commands(q=queue_helper, op_code=op_code)
if service == CustomServiceList.TCS_ASS.value:
return pack_tcs_sys_commands(q=queue_helper, op_code=op_code)
if service == CustomServiceList.RW_ASSEMBLY.value:
return pack_rw_ass_cmds(q=queue_helper, object_id=RW_ASSEMBLY, op_code=op_code)
if service == CustomServiceList.CONTROLLERS.value:
from tmtcc import TcHandler
tc_handler = cast(TcHandler, tc_base)
return pack_cmd_ctrl_to_prompted_mode(
q=queue_helper,
object_id=get_object_from_op_code(op_code),
gui=tc_handler.gui,
)
if service == CustomServiceList.SCEX.value:
return pack_scex_cmds(
ServiceProviderParams(
handler_base=tc_base,
op_code=op_code,
info=info,
queue_helper=queue_helper,
)
)
if not route_to_registered_service_handlers(
service,
ServiceProviderParams(
handler_base=tc_base,
op_code=op_code,
info=info,
queue_helper=queue_helper,
),
):
LOGGER.warning(f"Invalid Service {service}")
+12 -15
View File
@@ -10,14 +10,11 @@ from PyQt5.QtWidgets import (
from PyQt5 import QtCore
from tmtccmd.config import CoreModeList
from tmtccmd.core.globals_manager import get_global
class Parameter:
def __init__(self, name: str, defaultValue: str, widget: QLineEdit):
def __init__(self, name: str, default_value: str, widget: QLineEdit):
self.name = name
self.defaultValue = defaultValue
self.defaultValue = default_value
self.widget = widget
self.value = self.defaultValue
self.widget.setPlaceholderText(self.defaultValue)
@@ -34,9 +31,9 @@ class ParameterDialog(QDialog):
self.setWindowTitle("Enter Parameters")
Buttons = QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Reset
buttons = QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Reset
self.buttonBox = QDialogButtonBox(Buttons)
self.buttonBox = QDialogButtonBox(buttons)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.buttonBox.button(QDialogButtonBox.Reset).clicked.connect(self._reset)
@@ -54,14 +51,14 @@ class ParameterDialog(QDialog):
self.parameters = {}
def addParameter(self, name: str, defaultValue: str):
def add_parameter(self, name: str, default_value: str):
row = self.groupLayout.rowCount() + 1
description = QLabel(name)
self.groupLayout.addWidget(description, row, 0)
valueWidget = QLineEdit()
self.groupLayout.addWidget(valueWidget, row, 1)
value_widget = QLineEdit()
self.groupLayout.addWidget(value_widget, row, 1)
parameter = Parameter(name, defaultValue, valueWidget)
parameter = Parameter(name, default_value, value_widget)
self.parameters[name] = parameter
@@ -69,10 +66,10 @@ class ParameterDialog(QDialog):
for value in self.parameters.values():
value.reset()
def getParameters(self):
def get_parameters(self):
output = {}
for key, parameter in self.parameters.items():
if parameter.widget != None:
if parameter.widget is not None:
if parameter.widget.text() != "":
parameter.value = parameter.widget.text()
output[key] = parameter.value
@@ -103,9 +100,9 @@ def prompt_parameters_cli(param_list) -> dict:
def _gui_prompt(param_list) -> dict:
dialog = ParameterDialog()
for parameter in param_list:
dialog.addParameter(parameter["name"], parameter["defaultValue"])
dialog.add_parameter(parameter["name"], parameter["defaultValue"])
dialog.exec_()
return dialog.getParameters()
return dialog.get_parameters()
def _cli_prompt(param_list) -> dict:
-1
View File
@@ -1 +0,0 @@
+3 -4
View File
@@ -1,7 +1,7 @@
from typing import Union
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s200_fsfw_mode import Mode
from tmtccmd.util import ObjectIdU32, ObjectIdBase
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
@@ -86,9 +86,8 @@ def pack_cmd_ctrl_to_nml(
def get_object_from_op_code(op_code: str):
try:
return bytes.fromhex(op_code)
except:
except ValueError:
pass
if op_code in OpCode.THERMAL_CONTROLLER:
return obj_ids.THERMAL_CONTROLLER_ID
if op_code in OpCode.CORE_CONTROLLER:
+59 -48
View File
@@ -1,36 +1,30 @@
from __future__ import annotations
import struct
import time
from datetime import timedelta
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import get_object_ids
from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s11_tc_sched import (
create_time_tagged_cmd,
create_enable_tc_sched_cmd,
create_reset_tc_sched_cmd,
)
from tmtccmd.tc.pus_3_fsfw_hk import *
import eive_tmtc.config.object_ids as oids
from eive_tmtc.tmtc.tcs import OpCode as TcsOpCodes, pack_tcs_sys_commands
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.tmtc.tcs.brd_assy import OpCodeAssy as TcsOpCodes
from eive_tmtc.tmtc.tcs.subsystem import pack_tcs_sys_commands
from eive_tmtc.tmtc.core import SetId as CoreSetIds
from eive_tmtc.tmtc.power.common_power import SetId as GsSetIds
from eive_tmtc.pus_tc.devs.rad_sensor import SetId as RadSetIds
from eive_tmtc.pus_tc.devs.mgms import MgmLis3SetId as MgmLis3SetIds_0_2
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId as MgmRm3100SetIds_1_3
from eive_tmtc.pus_tc.devs.gyros import AdisGyroSetId as AdisGyroSetIds_0_2
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId as L3gGyroSetIds_1_3
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetId as SyrlinksSetIds
from eive_tmtc.pus_tc.devs.gps import SetId as GpsSetIds
from eive_tmtc.tmtc.com.syrlinks_handler import SetId as SyrlinksSetIds
from eive_tmtc.tmtc.acs.imtq import ImtqSetId
from eive_tmtc.pus_tc.devs.sus import SetId
from eive_tmtc.pus_tc.devs.star_tracker import SetIds as StrSetIds
from eive_tmtc.tmtc.acs.star_tracker import SetId as StrSetIds
from eive_tmtc.tmtc.acs.reaction_wheels import (
RwSetId,
rw_speed_up_cmd_consec,
@@ -40,12 +34,28 @@ from eive_tmtc.pus_tc.system.controllers import (
pack_cmd_ctrl_to_off,
pack_cmd_ctrl_to_nml,
)
from eive_tmtc.tmtc.acs.acs_board import pack_acs_command
from eive_tmtc.tmtc.acs.acs_board import pack_acs_board_command
from eive_tmtc.tmtc.acs.sus_board import pack_sus_cmds
from eive_tmtc.tmtc.acs.imtq import pack_imtq_test_into, pack_dipole_command
from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands
from eive_tmtc.tmtc.acs.imtq import create_imtq_command, pack_dipole_command
from eive_tmtc.tmtc.acs.star_tracker import pack_star_tracker_commands
from eive_tmtc.tmtc.acs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command
from eive_tmtc.tmtc.acs.sus import SetId
from eive_tmtc.tmtc.power.bpx_batt import BpxSetId
from eive_tmtc.tmtc.payload.rad_sensor import SetId as RadSetIds
from eive_tmtc.tmtc.acs.mgms import MgmLis3SetId as MgmLis3SetIds_0_2
from eive_tmtc.tmtc.acs.mgms import MgmRm3100SetId as MgmRm3100SetIds_1_3
from eive_tmtc.tmtc.acs.gyros import (
AdisGyroSetId as AdisGyroSetIds_0_2,
L3gGyroSetId as L3gGyroSetIds_1_3,
)
from eive_tmtc.tmtc.acs.gps import SetId as GpsSetIds
from tmtccmd.pus.tc.s3_fsfw_hk import (
make_sid,
disable_periodic_hk_command,
create_enable_periodic_hk_command_with_interval,
)
class OpCode:
"""FT: Functional Test"""
@@ -150,7 +160,7 @@ def add_proc_cmds(defs: TmtcDefinitionWrapper):
)
def pack_generic_hk_listening_cmds(
def pack_generic_hk_listening_cmds( # noqa C901: Complexity okay here.
q: DefaultPusQueueHelper,
proc_key: str,
sid_list: list[bytearray],
@@ -218,7 +228,9 @@ def pack_generic_hk_listening_cmds(
diag_list.clear()
def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
def pack_proc_commands( # noqa C901: Complexity is okay here.
q: DefaultPusQueueHelper, op_code: str
): # noqa C901: Complexity okay here.
sid_list = []
obj_id_dict = get_object_ids()
if op_code in OpCode.RESET_SCHED:
@@ -300,7 +312,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# Enable scheduling
q.add_pus_tc(create_enable_tc_sched_cmd())
# check whether tcs_assembly also has to be commanded to NORMAL Mode
pack_tcs_sys_commands(q=q, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0])
pack_tcs_sys_commands(q=q, cmd_str=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0])
pack_cmd_ctrl_to_nml(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCode.TV_TEARDOWN_TCS_FT_OFF:
@@ -325,7 +337,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
]
d_side_pairs = a_side_pairs + b_side_pairs
diag_list = [False, False, True, False, False]
pack_acs_command(q=q, op_code="acs-a")
pack_acs_board_command(q=q, cmd_str="acs-a")
for a_side_dev in a_side_pairs:
oid = a_side_dev[0]
@@ -339,9 +351,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="acs-off")
pack_acs_board_command(q=q, cmd_str="acs-off")
q.add_wait_seconds(5.0)
pack_acs_command(q=q, op_code="acs-b")
pack_acs_board_command(q=q, cmd_str="acs-b")
sid_list.clear()
diag_list = [False, False, True, False, False]
@@ -358,9 +370,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="acs-off")
pack_acs_board_command(q=q, cmd_str="acs-off")
q.add_wait_seconds(5.0)
pack_acs_command(q=q, op_code="acs-d")
pack_acs_board_command(q=q, cmd_str="acs-d")
sid_list.clear()
@@ -388,14 +400,14 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="acs-off")
pack_acs_board_command(q=q, cmd_str="acs-off")
if op_code in OpCode.MGT_FT:
key = KAI.MGT_FT[0]
imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_NO_TORQUE),
(oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_NO_TORQUE),
]
diag_list = [
True,
@@ -404,10 +416,10 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
]
# Command MGT to mode on
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="1")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="1")
q.add_wait_seconds(5.0)
# Command MGT to normal mode
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="2")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="2")
for imtq_dev in imtq_pairs:
oid = imtq_dev[0]
@@ -421,7 +433,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="0")
if op_code in OpCode.MGT_FT_DP:
key = KAI.MGT_FT_DP[0]
@@ -440,9 +452,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
(oids.GPS_CONTROLLER, GpsSetIds.HK),
]
imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_NO_TORQUE),
(oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_NO_TORQUE),
]
d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs
diag_list = [
@@ -460,12 +472,12 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
True,
True,
]
pack_acs_command(q=q, op_code="acs-d")
pack_acs_board_command(q=q, cmd_str="acs-d")
# Command MGT to mode on
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="1")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="1")
q.add_wait_seconds(20.0)
# Command MGT to normal mode
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="2")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="2")
for d_side_and_imtq_dev in d_side_and_imtq_pairs:
oid = d_side_and_imtq_dev[0]
@@ -482,8 +494,8 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=cfg,
)
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
pack_acs_command(q=q, op_code="acs-off")
create_imtq_command(oids.IMTQ_HANDLER_ID, q=q, cmd_str="0")
pack_acs_board_command(q=q, cmd_str="acs-off")
if op_code in OpCode.SUS_FT:
key = KAI.SUS_FT[0]
@@ -526,7 +538,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="sus-off")
pack_acs_board_command(q=q, cmd_str="sus-off")
q.add_wait_seconds(5.0)
pack_sus_cmds(q=q, op_code="sus-red")
@@ -550,7 +562,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="sus-off")
pack_acs_board_command(q=q, cmd_str="sus-off")
q.add_wait_seconds(5.0)
pack_sus_cmds(q=q, op_code="sus-d")
@@ -581,7 +593,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_acs_command(q=q, op_code="sus-off")
pack_acs_board_command(q=q, cmd_str="sus-off")
if op_code in OpCode.SYRLINKS_FT:
key = KAI.SYRLINKS_FT[0]
@@ -600,7 +612,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.STR_FT:
key = KAI.STR_FT[0]
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2")
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, cmd_str="2")
# STR
sid_list.append(make_sid(oids.STAR_TRACKER_ID, StrSetIds.TEMPERATURE))
@@ -613,7 +625,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(),
)
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="3")
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, cmd_str="3")
if op_code in OpCode.RW_FT_ONE_RW:
key = KAI.RW_FT_ONE_RW[0]
@@ -646,7 +658,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
False,
]
# RW NORMAL
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="nml")
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, cmd_str="nml")
# RW HK für alle RWs nur einzeln
for rw_dev in rw_pairs:
@@ -661,7 +673,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg(mgt=False, one_rw=True, two_rws=False),
)
# RW OFF
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, cmd_str="off")
# ass command with 2 rws to speed
if op_code in OpCode.RW_FT_TWO_RWS:
@@ -703,7 +715,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
False,
]
# RW NORMAL
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="nml")
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, cmd_str="nml")
# RW
for rw_dev in rw_pairs:
@@ -718,7 +730,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg(mgt=False, one_rw=False, two_rws=True),
)
# RW OFF
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, cmd_str="off")
def enable_listen_to_hk_for_x_seconds(
@@ -729,7 +741,7 @@ def enable_listen_to_hk_for_x_seconds(
interval_seconds: float,
):
q.add_log_cmd(f"Enabling periodic HK for {device}")
cmd_tuple = enable_periodic_hk_command_with_interval(
cmd_tuple = create_enable_periodic_hk_command_with_interval(
diag=diag, sid=sid, interval_seconds=interval_seconds
)
for cmd in cmd_tuple:
@@ -753,7 +765,6 @@ def gen_disable_listen_to_hk_for_x_seconds(
def activate_mgts_alternately(
q: DefaultPusQueueHelper,
):
q.add_pus_tc(
pack_dipole_command(
object_id=oids.IMTQ_HANDLER_ID,
-29
View File
@@ -1,29 +0,0 @@
from datetime import datetime
from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss import PusTelecommand
from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.logging import get_console_logger
from tmtccmd.tc import DefaultPusQueueHelper, service_provider
from tmtccmd.tc.decorator import ServiceProviderParams
LOGGER = get_console_logger()
class OpCode:
SET_CURRENT_TIME = ["0", "set-curr-time"]
class Info:
SET_CURRENT_TIME = "Setting current time in ASCII format"
@service_provider(CustomServiceList.TIME.value)
def pack_set_current_time_ascii_command(p: ServiceProviderParams):
q = p.queue_helper
time_test_current_time = datetime.utcnow().isoformat() + "Z" + "\0"
current_time_ascii = time_test_current_time.encode("ascii")
LOGGER.info(f"Current time in ASCII format: {current_time_ascii}")
q.add_log_cmd(Info.SET_CURRENT_TIME)
q.add_pus_tc(PusTelecommand(service=9, subservice=128, app_data=current_time_ascii))
+161
View File
@@ -0,0 +1,161 @@
import logging
from typing import cast
from eive_tmtc.config.definitions import (
CFDP_REMOTE_ENTITY_ID,
PUS_APID,
CFDP_LOCAL_ENTITY_ID,
)
from eive_tmtc.pus_tc.cmd_demux import handle_pus_procedure
from eive_tmtc.cfdp.handler import CfdpInCcsdsHandler
from tmtccmd import TcHandlerBase, ProcedureWrapper
from cfdppy.defs import CfdpRequestType
from tmtccmd.logging import get_current_time_string
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.tmtc import (
DefaultPusQueueHelper,
QueueWrapper,
FeedWrapper,
TcProcedureType,
SendCbParams,
TcQueueEntryType,
)
from tmtccmd.config.cfdp import generic_cfdp_params_to_put_request
from spacepackets.ecss import PusVerificator
from spacepackets.seqcount import FileSeqCountProvider
from spacepackets.cfdp import PduHolder, DirectiveType
_LOGGER = logging.getLogger(__name__)
class TcHandler(TcHandlerBase):
def __init__(
self,
seq_count_provider: FileSeqCountProvider,
cfdp_in_ccsds_handler: CfdpInCcsdsHandler,
pus_verificator: PusVerificator,
high_level_file_logger: logging.Logger,
raw_pus_logger: RawTmtcTimedLogWrapper,
gui: bool,
):
super().__init__()
self.cfdp_handler_started = False
self.seq_count_provider = seq_count_provider
self.pus_verificator = pus_verificator
self.high_level_file_logger = high_level_file_logger
self.pus_raw_logger = raw_pus_logger
self.gui = gui
self.proxy_op = True
self.queue_helper = DefaultPusQueueHelper(
queue_wrapper=QueueWrapper.empty(),
default_pus_apid=PUS_APID,
seq_cnt_provider=seq_count_provider,
pus_verificator=pus_verificator,
tc_sched_timestamp_len=4,
)
self.cfdp_in_ccsds_handler = cfdp_in_ccsds_handler
def cfdp_done(self) -> bool:
if self.cfdp_handler_started:
if (
not self.cfdp_in_ccsds_handler.put_request_pending()
and not self.proxy_op
):
self.cfdp_handler_started = False
return True
return False
def feed_cb(self, info: ProcedureWrapper, wrapper: FeedWrapper):
self.queue_helper.queue_wrapper = wrapper.queue_wrapper
if info.proc_type == TcProcedureType.TREE_COMMANDING:
handle_pus_procedure(info.to_tree_commanding_procedure(), self.queue_helper)
elif info.proc_type == TcProcedureType.CFDP:
self.handle_cfdp_procedure(info)
def send_cb(self, send_params: SendCbParams):
entry_helper = send_params.entry
if entry_helper.is_tc:
if entry_helper.entry_type == TcQueueEntryType.PUS_TC:
pus_tc_wrapper = entry_helper.to_pus_tc_entry()
# pus_tc_wrapper.pus_tc.apid = PUS_APID
raw_tc = pus_tc_wrapper.pus_tc.pack()
self.pus_raw_logger.log_tc(pus_tc_wrapper.pus_tc)
tc_info_string = f"Sent {pus_tc_wrapper.pus_tc}"
_LOGGER.info(tc_info_string)
self.high_level_file_logger.info(
f"{get_current_time_string(True)}: {tc_info_string}"
)
# with open("tc.bin", "wb") as of:
# of.write(raw_tc)
send_params.com_if.send(raw_tc)
elif entry_helper.entry_type == TcQueueEntryType.CCSDS_TC:
cfdp_packet_in_ccsds = entry_helper.to_space_packet_entry()
send_params.com_if.send(cfdp_packet_in_ccsds.space_packet.pack())
# TODO: Log raw CFDP packets similarly to how PUS packets are logged.
# - Log full raw format including space packet wrapper
# - Log context information: Transaction ID, and PDU type and directive
# Could re-use file logger. Should probably do that
# print(f"sending packet: [{cfdp_packet_in_ccsds.space_packet.pack()}]")
# with open(f"cfdp_packet_{self.cfdp_counter}", "wb") as of:
# of.write(cfdp_packet_in_ccsds.space_packet.pack())
# self.cfdp_counter += 1
elif entry_helper.entry_type == TcQueueEntryType.LOG:
log_entry = entry_helper.to_log_entry()
_LOGGER.info(log_entry.log_str)
self.high_level_file_logger.info(log_entry.log_str)
def handle_cfdp_procedure(self, info: ProcedureWrapper):
cfdp_procedure = info.to_cfdp_procedure()
if cfdp_procedure.cfdp_request_type == CfdpRequestType.PUT:
if (
not self.cfdp_in_ccsds_handler.put_request_pending()
and not self.cfdp_handler_started
):
put_req_cfg_wrapper = cfdp_procedure.request_wrapper.to_put_request()
if put_req_cfg_wrapper.cfg.proxy_op:
self.proxy_op = True
put_req = generic_cfdp_params_to_put_request(
params=put_req_cfg_wrapper.cfg,
local_id=CFDP_LOCAL_ENTITY_ID,
remote_id=CFDP_REMOTE_ENTITY_ID,
dest_id_proxy_put_req=CFDP_LOCAL_ENTITY_ID,
)
_LOGGER.info(
f"CFDP: Starting file put request with parameters:\n{put_req}"
)
assert put_req is not None
self.cfdp_in_ccsds_handler.cfdp_handler.put_request(put_req)
self.cfdp_handler_started = True
for source_pair, _ in self.cfdp_in_ccsds_handler:
if source_pair is not None:
pdu, sp = source_pair
pdu = cast(PduHolder, pdu)
if pdu.is_file_directive:
if pdu.pdu_directive_type == DirectiveType.METADATA_PDU:
metadata = pdu.to_metadata_pdu()
self.queue_helper.add_log_cmd(
"CFDP Source: Sending Metadata PDU for file with size "
f"{metadata.file_size}"
)
elif pdu.pdu_directive_type == DirectiveType.EOF_PDU:
self.queue_helper.add_log_cmd(
"CFDP Source: Sending EOF PDU"
)
else:
fd_pdu = pdu.to_file_data_pdu()
self.queue_helper.add_log_cmd(
"CFDP Source: Sending File Data PDU for segment at offset "
f"{fd_pdu.offset} with length {len(fd_pdu.file_data)}"
)
self.queue_helper.add_ccsds_tc(sp)
self.cfdp_in_ccsds_handler.source_handler.state_machine()
def queue_finished_cb(self, info: ProcedureWrapper):
if info is not None:
if info.proc_type == TcQueueEntryType.PUS_TC:
def_proc = info.to_tree_commanding_procedure()
_LOGGER.info(f"Finished queue for command {def_proc.cmd_path}")
elif info.proc_type == TcProcedureType.CFDP:
_LOGGER.info("Finished CFDP queue")
+87 -104
View File
@@ -1,60 +1,100 @@
import base64
import logging
import struct
from eive_tmtc.config.object_ids import *
from spacepackets.ecss import PusTm
from tmtccmd.pus.s8_fsfw_action_defs import CustomSubservice
from eive_tmtc.config.definitions import PRINT_RAW_ACTION_DATA_REPLY_B64_STR
from eive_tmtc.config.object_ids import (
ACU_HANDLER_ID,
PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID,
IMTQ_HANDLER_ID,
PLOC_MPSOC_ID,
PLOC_SUPV_ID,
CORE_CONTROLLER_ID,
STAR_TRACKER_ID,
P60_DOCK_HANDLER,
ACS_CONTROLLER,
)
from eive_tmtc.tmtc.acs.imtq import ImtqActionId
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.tmtc.payload.ploc_mpsoc import PlocReplyIds
from eive_tmtc.tmtc.core import handle_core_ctrl_action_replies
from eive_tmtc.tmtc.payload.ploc_mpsoc import handle_mpsoc_data_reply
from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionId
from eive_tmtc.pus_tc.devs.star_tracker import StarTrackerActionId
from eive_tmtc.tmtc.acs.star_tracker import handle_star_tracker_action_replies
from eive_tmtc.tmtc.acs.acs_ctrl import handle_acs_ctrl_action_replies
from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply
from tmtccmd.logging import get_console_logger
from tmtccmd.tm import Service8FsfwTm
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from spacepackets.ccsds.time import CdsShortTimestamp
from tmtccmd.util import ObjectIdBase, ObjectIdDictT, ObjectIdU32
LOGGER = get_console_logger()
_LOGGER = logging.getLogger(__name__)
def handle_action_reply(
raw_tm: bytes, printer: FsfwTmTcPrinter, obj_id_dict: ObjectIdDictT
_LOGGER = logging.getLogger(__name__)
def handle_action_service_tm(
raw_tm: bytes, pw: PrintWrapper, obj_id_dict: ObjectIdDictT
):
"""Core Action reply handler
:return:
"""
tm_packet = Service8FsfwTm.unpack(
raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty()
)
printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
object_id = obj_id_dict.get(tm_packet.source_object_id_as_bytes)
pw = PrintWrapper(printer)
custom_data = tm_packet.custom_data
action_id = tm_packet.action_id
generic_print_str = printer.generic_action_packet_tm_print(
packet=tm_packet, obj_id=object_id
)
pw.dlog(generic_print_str)
if object_id.as_bytes == IMTQ_HANDLER_ID:
return handle_imtq_replies(action_id, printer, custom_data)
elif object_id.as_bytes == PLOC_MPSOC_ID:
return handle_ploc_replies(action_id, printer, custom_data)
elif object_id.as_bytes == PLOC_SUPV_ID:
return handle_supervisor_replies(action_id, printer, custom_data)
elif object_id.as_bytes == STAR_TRACKER_ID:
return handle_startracker_replies(action_id, printer, custom_data)
elif object_id.as_bytes in [
ACU_HANDLER_ID,
PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID,
P60_DOCK_HANDLER,
]:
return handle_get_param_data_reply(object_id, action_id, pw, custom_data)
tm_packet = PusTm.unpack(raw_tm, timestamp_len=CdsShortTimestamp.TIMESTAMP_SIZE)
if len(tm_packet.source_data) < 8:
_LOGGER.warning(
"received action service reply with source data smaller than 8 bytes"
)
return
object_id_raw = struct.unpack("!I", tm_packet.source_data[0:4])[0]
action_id = struct.unpack("!I", tm_packet.source_data[4:8])[0]
object_id = obj_id_dict.get(object_id_raw)
custom_data = tm_packet.source_data[8:]
if object_id is None:
object_id = ObjectIdU32(object_id_raw, "Unknown ID")
if tm_packet.subservice == CustomSubservice.TM_DATA_REPLY:
if PRINT_RAW_ACTION_DATA_REPLY_B64_STR:
print(f"PUS TM Base64: {base64.b64encode(raw_tm)}")
if object_id.as_bytes == IMTQ_HANDLER_ID:
return handle_imtq_replies(action_id, pw, custom_data)
elif object_id.as_bytes == PLOC_MPSOC_ID:
return handle_mpsoc_data_reply(action_id, pw, custom_data)
elif object_id.as_bytes == PLOC_SUPV_ID:
return handle_supervisor_replies(action_id, pw, custom_data)
elif object_id.as_bytes == CORE_CONTROLLER_ID:
return handle_core_ctrl_action_replies(action_id, pw, custom_data)
elif object_id.as_bytes == STAR_TRACKER_ID:
return handle_star_tracker_action_replies(action_id, pw, custom_data)
elif object_id.as_bytes == ACS_CONTROLLER:
return handle_acs_ctrl_action_replies(action_id, pw, custom_data)
elif object_id.as_bytes in [
ACU_HANDLER_ID,
PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID,
P60_DOCK_HANDLER,
]:
return handle_get_param_data_reply(object_id, action_id, pw, custom_data)
else:
# TODO: Could add a handler here depending on action ID and object ID.
handle_action_data_reply(tm_packet, object_id, action_id, pw)
else:
pw.dlog(f"No dedicated action reply handler found for reply from {object_id}")
pw.dlog(f"Raw Data: {tm_packet.custom_data.hex(sep=',')}")
pw.dlog(
f"service 8 packet from {object_id} with action ID {action_id} "
f"and unknown subservice {tm_packet.subservice}"
)
def handle_imtq_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
def handle_action_data_reply(
tm_packet: PusTm, named_obj_id: ObjectIdBase, action_id: int, printer: PrintWrapper
):
print_string = (
f"service 8 data reply from {named_obj_id} with action ID {action_id} "
f"and data size {len(tm_packet.tm_data[8:])}"
)
printer.dlog(print_string)
def handle_imtq_replies(action_id: int, pw: PrintWrapper, custom_data: bytes):
if action_id == struct.unpack("!I", ImtqActionId.get_commanded_dipole)[0]:
header_list = [
"Commanded X-Dipole",
@@ -63,75 +103,18 @@ def handle_imtq_replies(
]
[x_dipole, y_dipole, z_dipole] = struct.unpack("!HHH", custom_data[0:6])
content_list = [x_dipole, y_dipole, z_dipole]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}")
def handle_ploc_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
):
if action_id == PlocReplyIds.TM_MEM_READ_RPT:
header_list = [
"PLOC Memory Address",
"PLOC Mem Len",
"PLOC Read Memory Data",
]
content_list = [
"0x" + custom_data[:4].hex(),
struct.unpack("!H", custom_data[4:6])[0],
"0x" + custom_data[6:10].hex(),
]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
elif action_id == PlocReplyIds.TM_CAM_CMD_RPT:
header_list = ["Camera reply string", "ACK"]
content_list = [
custom_data[: len(custom_data) - 1].decode("utf-8"),
hex(custom_data[-1]),
]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
def handle_supervisor_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
):
def handle_supervisor_replies(action_id: int, pw: PrintWrapper, custom_data: bytes):
if action_id == SupvActionId.DUMP_MRAM:
header_list = ["MRAM Dump"]
content_list = [custom_data[: len(custom_data)]]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}")
elif action_id == SupvActionId.READ_GPIO:
header_list = ["GPIO state"]
content_list = [struct.unpack("!H", custom_data[:2])[0]]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
def handle_startracker_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
):
if action_id == StarTrackerActionId.CHECKSUM:
if len(custom_data) != 5:
LOGGER.warning(
"Star tracker reply has invalid length {0}".format(len(custom_data))
)
return
header_list = ["Checksum", "Checksum valid"]
print(custom_data[4])
checksum_valid_flag = custom_data[4] >> 8
content_list = ["0x" + custom_data[:4].hex(), checksum_valid_flag]
print(header_list)
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}")
+18 -4
View File
@@ -1,13 +1,27 @@
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
import logging
from typing import Optional
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
class PrintWrapper:
def __init__(self, printer: FsfwTmTcPrinter):
self.printer = printer
def __init__(self, file_logger: Optional[logging.Logger]):
self.file_logger = file_logger
def dlog(self, string: str):
print(string)
self.printer.file_logger.info(string)
if self.file_logger:
self.file_logger.info(string)
def wlog(self, logger: logging.Logger, string: str):
logger.warning(string)
if self.file_logger:
self.file_logger.warning(string)
def ilog(self, logger: logging.Logger, string: str):
logger.info(string)
if self.file_logger:
self.file_logger.info(string)
def log_to_both(printer: FsfwTmTcPrinter, string: str):
-68
View File
@@ -1,68 +0,0 @@
import struct
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
HEADER_LIST = [
"Charge Current",
"Discharge Current",
"Heater Current",
"Battery Voltage",
"Batt Temp 1",
"Batt Temp 2",
"Batt Temp 3",
"Batt Temp 4",
"Reboot Counter",
"Boot Cause",
]
def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer)
if set_id == BpxSetId.GET_HK_SET:
fmt_str = "!HHHHhhhhIB"
inc_len = struct.calcsize(fmt_str)
(
charge_current,
discharge_current,
heater_current,
batt_voltage,
batt_temp_1,
batt_temp_2,
batt_temp_3,
batt_temp_4,
reboot_cntr,
boot_cause,
) = struct.unpack(fmt_str, hk_data[0:inc_len])
content_list = [
charge_current,
discharge_current,
heater_current,
batt_voltage,
batt_temp_1,
batt_temp_2,
batt_temp_3,
batt_temp_4,
reboot_cntr,
boot_cause,
]
validity_buffer = hk_data[inc_len:]
pw.dlog(str(HEADER_LIST))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
elif set_id == BpxSetId.GET_CFG_SET:
battheat_mode = hk_data[0]
battheat_low = struct.unpack("!b", hk_data[1:2])[0]
battheat_high = struct.unpack("!b", hk_data[2:3])[0]
header_list = [
"Battery Heater Mode",
"Battery Heater Low Limit",
"Battery Heater High Limit",
]
content_list = [battheat_mode, battheat_low, battheat_high]
validity_buffer = hk_data[3:]
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
-39
View File
@@ -1,39 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_gps_data(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
pw.dlog(f"Received GPS data, HK data length {len(hk_data)}")
current_idx = 0
fmt_str = "!ddddBBBHBBBBBI"
inc_len = struct.calcsize(fmt_str)
(
lat,
long,
alt,
speed,
fix,
sats_in_use,
sats_in_view,
year,
month,
day,
hours,
minutes,
seconds,
unix_seconds,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
current_idx += inc_len
date_string = f"{day}.{month}.{year} {hours}:{minutes}:{seconds}"
pw.dlog(f"Lat: {lat} deg")
pw.dlog(f"Long: {long} deg")
pw.dlog(f"Altitude: {alt} m | Speed: {speed} m/s")
pw.dlog(
f"Fix Type: {fix} | Sats in View {sats_in_view} | Sats in Use {sats_in_use}"
)
pw.dlog(f"GNSS Date: {date_string}")
pw.dlog(f"Unix seconds {unix_seconds}")
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=14)
-75
View File
@@ -1,75 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId, AdisGyroSetId
import eive_tmtc.config.object_ids as obj_ids
def handle_gyros_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if object_id.as_bytes in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
obj_ids.GYRO_2_ADIS_HANDLER_ID,
]:
handle_adis_gyro_hk(
object_id=object_id, printer=printer, set_id=set_id, hk_data=hk_data
)
elif object_id.as_bytes in [
obj_ids.GYRO_1_L3G_HANDLER_ID,
obj_ids.GYRO_3_L3G_HANDLER_ID,
]:
handle_l3g_gyro_hk(
object_id=object_id, printer=printer, set_id=set_id, hk_data=hk_data
)
def handle_adis_gyro_hk(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == AdisGyroSetId.CORE_HK:
pw = PrintWrapper(printer)
fmt_str = "!ddddddf"
inc_len = struct.calcsize(fmt_str)
(angVelocX, angVelocY, angVelocZ, accelX, accelY, accelZ, temp) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Received ADIS1650X Gyro HK data from object {object_id}")
pw.dlog(
f"Angular Velocities (degrees per second): X {angVelocX} | "
f"Y {angVelocY} | Z {angVelocZ}"
)
pw.dlog(f"Acceleration (m/s^2): X {accelX} | Y {accelY} | Z {accelZ}")
pw.dlog(f"Temperature {temp} C")
if set_id == AdisGyroSetId.CFG_HK:
pw = PrintWrapper(printer)
fmt_str = "!HBHH"
inc_len = struct.calcsize(fmt_str)
(diag_stat_reg, filter_setting, msc_ctrl_reg, dec_rate_reg) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Diagnostic Status Register {diag_stat_reg:#018b}")
pw.dlog(f"Filter Settings {filter_setting:#010b}")
pw.dlog(f"Miscellaneous Control Register {msc_ctrl_reg:#018b}")
pw.dlog(f"Decimation Rate {dec_rate_reg:#06x}")
def handle_l3g_gyro_hk(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == L3gGyroSetId.CORE_HK:
pw = PrintWrapper(printer)
fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str)
(angVelocX, angVelocY, angVelocZ, temp) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Received L3GD20H Gyro HK data from object {object_id}")
pw.dlog(
f"Angular Velocities (degrees per second): X {angVelocX} | "
f"Y {angVelocY} | Z {angVelocZ}"
)
pw.dlog(f"Temperature {temp} °C")
-54
View File
@@ -1,54 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId, MgmLis3SetId
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
import eive_tmtc.config.object_ids as obj_ids
def handle_mgm_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if object_id.as_bytes in [
obj_ids.MGM_0_LIS3_HANDLER_ID,
obj_ids.MGM_2_LIS3_HANDLER_ID,
]:
handle_mgm_lis3_hk_data(object_id, printer, set_id, hk_data)
elif object_id.as_bytes in [
obj_ids.MGM_1_RM3100_HANDLER_ID,
obj_ids.MGM_3_RM3100_HANDLER_ID,
]:
handle_mgm_rm3100_hk_data(object_id, printer, set_id, hk_data)
pass
def handle_mgm_lis3_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == MgmLis3SetId.CORE_HK:
pw = PrintWrapper(printer)
fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str)
(field_x, field_y, field_z, temp) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Received MGM LIS3 from object {object_id}")
pw.dlog(
f"Field strengths in micro Tesla X {field_x} | Y {field_y} | Z {field_z}"
)
pw.dlog(f"Temperature {temp} C")
def handle_mgm_rm3100_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == MgmRm3100SetId.CORE_HK:
pw = PrintWrapper(printer)
fmt_str = f"!fff"
inc_len = struct.calcsize(fmt_str)
(field_x, field_y, field_z) = struct.unpack(fmt_str, hk_data[0 : 0 + inc_len])
pw.dlog(f"Received MGM LIS3 from object {object_id}")
pw.dlog(
f"Field strengths in micro Tesla X {field_x} | Y {field_y} | Z {field_z}"
)
-52
View File
@@ -1,52 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.plpcdu import SetId
ADC_CHANNELS_NAMED = [
"U BAT DIV 6",
"U NEG V FB",
"I HPA",
"U HPA DIV 6",
"I MPA",
"U MPA DIV 6",
"I TX",
"U TX DIV 6",
"I X8",
"U X8 DIV 6",
"I DRO",
"U DRO DIV 6",
]
def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetId.ADC:
pw = PrintWrapper(printer)
current_idx = 0
pw.dlog("Received PL PCDU ADC HK data")
channels = []
ch_print = "Channels Raw (hex): ["
for i in range(12):
channels.append(
struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
)
if i < 11:
ch_print += f"{channels[i]:06x},"
else:
ch_print += f"{channels[i]:06x}]"
current_idx += 2
processed_vals = []
for i in range(12):
processed_vals.append(
struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
)
current_idx += 4
temp = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
current_idx += 4
pw.dlog(f"Temperature: {temp} C")
pw.dlog(ch_print)
for i in range(12):
pw.dlog(f"{ADC_CHANNELS_NAMED[i].ljust(24)} | {processed_vals[i]}")
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=3)
-24
View File
@@ -1,24 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.rad_sensor import SetId
def handle_rad_sensor_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetId.HK:
pw = PrintWrapper(printer)
current_idx = 0
pw.dlog("Received Radiation Sensor HK data")
fmt_str = "!fHHHHHH"
inc_len = struct.calcsize(fmt_str)
(temp, ain0, ain1, ain4, ain5, ain6, ain7) = struct.unpack(
fmt_str, hk_data[current_idx : current_idx + inc_len]
)
ain_dict = {0: ain0, 1: ain1, 4: ain4, 5: ain5, 6: ain6, 7: ain7}
pw.dlog(f"Temperature: {temp} C")
pw.dlog(f"AIN Channel | Raw Value (hex) | Raw Value (dec)")
for idx, val in ain_dict.items():
pw.dlog(f"{idx} | {val:#06x} | {str(val).ljust(5)}")
current_idx += inc_len
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=7)
-67
View File
@@ -1,67 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetId
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetId.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(printer, hk_data)
elif set_id == SetId.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(printer, hk_data)
else:
pw = PrintWrapper(printer)
pw.dlog(f"Service 3 TM: Syrlinks handler reply with unknown set ID {set_id}")
def handle_syrlinks_rx_registers_dataset(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
header_list = [
"RX Status",
"RX Sensitivity",
"RX Frequency Shift",
"RX IQ Power",
"RX AGC Value",
"RX Demod Eb",
"RX Demod N0",
"RX Datarate",
]
rx_status = hk_data[0]
rx_sensitivity = struct.unpack("!I", hk_data[1:5])
rx_frequency_shift = struct.unpack("!I", hk_data[5:9])
rx_iq_power = struct.unpack("!H", hk_data[9:11])
rx_agc_value = struct.unpack("!H", hk_data[11:13])
rx_demod_eb = struct.unpack("!I", hk_data[13:17])
rx_demod_n0 = struct.unpack("!I", hk_data[17:21])
rx_data_rate = hk_data[21]
content_list = [
rx_status,
rx_sensitivity,
rx_frequency_shift,
rx_iq_power,
rx_agc_value,
rx_demod_eb,
rx_demod_n0,
rx_data_rate,
]
validity_buffer = hk_data[22:]
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=8)
def handle_syrlinks_tx_registers_dataset(
printer: FsfwTmTcPrinter,
hk_data: bytes,
):
pw = PrintWrapper(printer)
header_list = ["TX Status", "TX Waveform", "TX AGC value"]
tx_status = hk_data[0]
tx_waveform = hk_data[1]
tx_agc_value = struct.unpack("!H", hk_data[2:4])
content_list = [tx_status, tx_waveform, tx_agc_value]
validity_buffer = hk_data[4:]
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=3)
+136 -47
View File
@@ -1,88 +1,177 @@
from datetime import datetime
import logging
import datetime
import sys
import base64
from eive_tmtc.config.definitions import PRINT_RAW_EVENTS_B64_STR
from eive_tmtc.config.events import get_event_dict
from eive_tmtc.config.object_ids import get_object_ids
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tm.verification_handler import generic_retval_printout
from eive_tmtc.tmtc.acs.acs_subsystem import AcsMode
from tmtccmd.tc.pus_200_fsfw_modes import Mode
from eive_tmtc.tmtc.acs.subsystem import AcsMode
from eive_tmtc.tmtc.core import SdState, SdCardSelect
from tmtccmd.pus.s200_fsfw_mode import Mode
from tmtccmd.pus.s201_fsfw_health import FsfwHealth
from tmtccmd.tm import Service5Tm
from tmtccmd.logging import get_console_logger
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.pus.s5_fsfw_event import Service5Tm
from tmtccmd.fsfw import EventInfo
from spacepackets.ccsds.time import CdsShortTimestamp
LOGGER = get_console_logger()
_LOGGER = logging.getLogger(__name__)
def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
pw = PrintWrapper(printer)
tm = Service5Tm.unpack(raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty())
def handle_event_packet( # noqa C901: Complexity okay here
raw_tm: bytes, pw: PrintWrapper
): # noqa C901: Complexity okay here
if PRINT_RAW_EVENTS_B64_STR:
print(f"PUS Event TM Base64: {base64.b64encode(raw_tm)}")
tm = Service5Tm.unpack(data=raw_tm, timestamp_len=CdsShortTimestamp.TIMESTAMP_SIZE)
event_dict = get_event_dict()
info = event_dict.get(tm.event_id)
event_def = tm.event_definition
info = event_dict.get(event_def.event_id)
if info is None:
LOGGER.warning(f"Event ID {tm.event_id} has no information")
_LOGGER.warning(f"Event ID {event_def.event_id} has no information")
info = EventInfo()
info.name = "Unknown event"
obj_ids = get_object_ids()
obj_id_obj = obj_ids.get(tm.reporter_id.as_bytes)
obj_id_obj = obj_ids.get(event_def.reporter_id)
if obj_id_obj is None:
LOGGER.warning(f"Object ID 0x{tm.reporter_id.as_hex_string} has no name")
obj_name = tm.reporter_id.as_hex_string
_LOGGER.warning(f"Object ID 0x{event_def.reporter_id.hex(sep=',')} has no name")
obj_name = event_def.reporter_id.hex(sep=",")
else:
obj_name = obj_id_obj.name
timestamp = CdsShortTimestamp.unpack(tm.timestamp)
generic_event_string = (
f"Object {obj_name} generated Event {tm.event_id} | {info.name}"
f"Object {obj_name} generated Event {info.name} (ID: {event_def.event_id:#04x})"
f" at {timestamp.as_date_time()}"
)
pw.printer.file_logger.info(
f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}: {generic_event_string}"
_LOGGER.info(generic_event_string)
pw.file_logger.info(
f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}:"
f" {generic_event_string}"
)
LOGGER.info(generic_event_string)
specific_handler = True
specific_handler = False
if info.name == "MODE_TRANSITION_FAILED":
reason = generic_retval_printout(tm.param_1)
reason = generic_retval_printout(event_def.param1)
for string in reason:
pw.dlog(f"Reason from event parameter 1: {string}")
pw.dlog(f"Mode, sequence or table: {tm.param_2:#08x}")
pw.dlog(f"Mode, sequence or table: {event_def.param2:#08x}")
specific_handler = True
if info.name == "SUPV_UPDATE_PROGRESS" or info.name == "WRITE_MEMORY_FAILED":
additional_event_info = f"Additional info: {info.info}"
context = (
f"Progress Percent: {tm.param_1 >> 24 & 0xff} | Sequence Count: {tm.param_1 & 0xffff} "
f"| Bytes Written: {tm.param_2}"
f"Progress Percent: {event_def.param1 >> 24 & 0xff} | Sequence Count:"
f" {event_def.param1 & 0xffff} | Bytes Written: {event_def.param2}"
)
pw.dlog(additional_event_info)
pw.dlog(context)
specific_handler = True
if info.name == "MODE_INFO":
specific_handler = True
mode_name = "Unknown"
if obj_name == "ACS_SUBSYSTEM":
if tm.param_1 == Mode.OFF:
mode_name = "Off"
elif tm.param_1 == AcsMode.IDLE:
mode_name = "Idle"
elif tm.param_1 == AcsMode.DETUMBLE:
mode_name = "Detumble"
elif tm.param_1 == AcsMode.SAFE:
mode_name = "Safe"
elif tm.param_1 == AcsMode.TARGET_PT:
mode_name = "Target Pointing"
acs_mode = AcsMode(event_def.param1)
pw.dlog(f"ACS Mode: {acs_mode!r}")
elif obj_name == "ACS_CONTROLLER_ID":
mode_name = Mode(event_def.param1)
submode = AcsMode(event_def.param2)
pw.dlog(f"Mode: {mode_name!r}")
pw.dlog(f"ACS Mode: {submode!r}")
else:
if tm.param_1 == Mode.OFF:
if event_def.param1 == Mode.OFF:
mode_name = "Off"
elif tm.param_1 == Mode.ON:
elif event_def.param1 == Mode.ON:
mode_name = "On"
elif tm.param_1 == Mode.NORMAL:
elif event_def.param1 == Mode.NORMAL:
mode_name = "Normal"
elif tm.param_1 == Mode.RAW:
elif event_def.param1 == Mode.RAW:
mode_name = "Raw"
pw.dlog(f"Mode Number {tm.param_1}, Mode Name {mode_name}")
pw.dlog(f"Submode: {tm.param_2}")
else:
specific_handler = False
if info.info != "":
additional_event_info = (
f"Additional info: {info.info} | P1: {tm.param_1} | P2: {tm.param_2}"
pw.dlog(
f"Mode Number {event_def.param1}, Mode Name {mode_name}, "
f"Submode: {event_def.param2}"
)
pw.dlog(additional_event_info)
if info.name == "INDIVIDUAL_BOOT_COUNTS":
boot_count_00 = (event_def.param1 >> 16) & 0xFFFF
boot_count_01 = event_def.param1 & 0xFFFF
boot_count_10 = (event_def.param2 >> 16) & 0xFFFF
boot_count_11 = event_def.param2 & 0xFFFF
pw.dlog(f"Boot count 0 0: {boot_count_00}")
pw.dlog(f"Boot count 0 1: {boot_count_01}")
pw.dlog(f"Boot count 1 0: {boot_count_10}")
pw.dlog(f"Boot count 1 1: {boot_count_11}")
if info.name == "REBOOT_COUNTER":
boot_count = (event_def.param1 << 32) | event_def.param2
pw.dlog(f"Total boot count: {boot_count}")
if info.name == "VERSION_INFO" or info.name == "FIRMWARE_INFO":
specific_handler = True
ver_major = (event_def.param1 >> 24) & 0xFF
ver_minor = (event_def.param1 >> 16) & 0xFF
ver_rev = (event_def.param1 >> 8) & 0xFF
has_git_sha = bool(event_def.param1 & 0xFF)
git_sha = ""
if has_git_sha:
p2_as_bytes = event_def.param2.to_bytes(4, sys.byteorder)
git_sha = p2_as_bytes.decode("ascii")
if info.name == "VERSION_INFO":
name = "OBSW version: "
else:
name = "Firmware version: "
pw.dlog(f"{name} v{ver_major}.{ver_minor}.{ver_rev}")
if has_git_sha:
pw.dlog(f"Git SHA first four letters: {git_sha}")
if info.name == "CLOCK_SET":
specific_handler = True
old_time = event_def.param1
new_time = event_def.param2
old_time_dt = datetime.datetime.fromtimestamp(old_time, datetime.timezone.utc)
new_time_dt = datetime.datetime.fromtimestamp(new_time, datetime.timezone.utc)
pw.dlog(f"Old time (UTC): {old_time_dt}")
pw.dlog(f"New time (UTC): {new_time_dt}")
if info.name == "CLOCK_DUMP_LEGACY":
specific_handler = True
# param 1 is timeval seconds, param 2 is timeval subsecond milliseconds
time = event_def.param1 + event_def.param2 / 1000.0
time_dt = datetime.datetime.fromtimestamp(time, datetime.timezone.utc)
pw.dlog(f"Current time: {time_dt}")
if (
info.name == "CLOCK_DUMP"
or info.name == "CLOCK_DUMP_BEFORE_SETTING_TIME"
or info.name == "CLOCK_DUMP_AFTER_SETTING_TIME"
):
specific_handler = True
# param 1 is timeval seconds, param 2 is timeval subsecond microseconds
time = event_def.param1 + event_def.param2 / 1000000.0
time_dt = datetime.datetime.fromtimestamp(time, datetime.timezone.utc)
pw.dlog(f"Clock dump event {info.name}. Current time: {time_dt}")
if info.name == "ACTIVE_SD_INFO":
sd_0_state = (event_def.param2 >> 16) & 0xFFFF
sd_1_state = event_def.param2 & 0xFFFF
active_sd = event_def.param1
try:
active_sd = SdCardSelect(event_def.param1)
sd_0_state = SdState((event_def.param2 >> 16) & 0xFFFF)
sd_1_state = SdState(event_def.param2 & 0xFFFF)
except IndexError:
_LOGGER.error(f"Received invalid event fields for event {event_def}")
finally:
pw.dlog(
f"Active SD card {active_sd!r} | SD 0 State {sd_0_state!r} | SD 1 "
f"State {sd_1_state!r}"
)
if info.name == "HEALTH_INFO":
specific_handler = True
health = FsfwHealth(event_def.param1)
pw.dlog(f"{obj_name}: {health!r}")
if info.name == "CHANGING_MODE":
mode = event_def.param1
submode = event_def.param2
pw.dlog(f"Mode Number {mode}, Submode: {submode}")
if not specific_handler:
printer.handle_long_tm_print(packet_if=tm, info_if=tm)
additional_event_info = (
f"Additional info: {info.info} | P1: {event_def.param1} | "
f"P2: {event_def.param2}"
)
pw.dlog(additional_event_info)
if not specific_handler:
# printer.handle_long_tm_print(packet_if=tm.pus_tm, info_if=tm.pus_tm)
pass
-84
View File
@@ -1,84 +0,0 @@
"""Core EIVE TM handler module
"""
from eive_tmtc.config.object_ids import get_object_ids
from spacepackets.ecss import PusTelemetry
from spacepackets.ecss.pus_17_test import Service17Tm
from spacepackets.util import PrintFormats
from spacepackets.ccsds.time import CdsShortTimestamp
from tmtccmd import get_console_logger
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.pus import VerificationWrapper
from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm
from tmtccmd.tm.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from .defs import PrintWrapper
from .event_handler import handle_event_packet
from .verification_handler import handle_service_1_fsfw_packet, generic_retval_printout
from .hk_handling import handle_hk_packet
from .action_reply_handler import handle_action_reply
LOGGER = get_console_logger()
def pus_factory_hook(
packet: bytes,
verif_wrapper: VerificationWrapper,
printer: FsfwTmTcPrinter,
raw_logger: RawTmtcTimedLogWrapper,
):
if len(packet) < 8:
LOGGER.warning("Detected packet shorter than 8 bytes!")
return
try:
tm_packet = PusTelemetry.unpack(packet, CdsShortTimestamp.empty())
except ValueError:
LOGGER.warning("Could not generate PUS TM object from raw data")
LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}")
return
service = tm_packet.service
obj_id_dict = get_object_ids()
pw = PrintWrapper(printer)
dedicated_handler = True
if service == 1:
handle_service_1_fsfw_packet(wrapper=verif_wrapper, raw_tm=packet)
elif service == 3:
handle_hk_packet(printer=printer, raw_tm=packet, obj_id_dict=obj_id_dict)
elif service == 5:
handle_event_packet(raw_tm=packet, printer=printer)
elif service == 8:
handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict)
elif service == 17:
tm_packet = Service17Tm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == 2:
verif_wrapper.dlog("Received Ping Reply TM[17,2]")
dedicated_handler = True
elif service == 20:
tm_packet = Service20FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
dedicated_handler = False
elif service == 200:
tm_packet = Service200FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == ModeSubservices.TM_CANT_REACH_MODE:
obj_id = tm_packet.object_id
obj_id_obj = obj_id_dict.get(obj_id)
retval = tm_packet.return_value
string_list = generic_retval_printout(retval)
pw.dlog(f"Received Mode Reply from {obj_id_obj}: Can't reach mode.")
for string in string_list:
pw.dlog(f"Reason: {string}")
dedicated_handler = True
else:
dedicated_handler = False
else:
LOGGER.info(f"The service {service} is not implemented in Telemetry Factory")
tm_packet.print_source_data(PrintFormats.HEX)
dedicated_handler = True
if not dedicated_handler and tm_packet is not None:
printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
raw_logger.log_tm(tm_packet)
+18
View File
@@ -0,0 +1,18 @@
import uuid
import dataclasses
import datetime
import sqlite3
from spacepackets.ecss.tm import CdsShortTimestamp, PusTm
@dataclasses.dataclass
class HkTmInfo:
packet_uuid: uuid.UUID
hk_packet: PusTm
set_id: int
db_con: sqlite3.Connection
hk_data: bytes
@property
def packet_datetime(self) -> datetime.datetime:
return CdsShortTimestamp.unpack(self.hk_packet.timestamp).as_datetime()
+254
View File
@@ -0,0 +1,254 @@
"""HK Handling for EIVE OBSW"""
import dataclasses
import logging
import base64
import sqlite3
import struct
from typing import List, cast
from uuid import UUID
from spacepackets.ccsds.time import CdsShortTimestamp
from spacepackets.ecss import PusTm
from eive_tmtc.config.definitions import PRINT_RAW_HK_B64_STR
from eive_tmtc.pus_tm.hk import HkTmInfo
from eive_tmtc.tmtc.acs.acs_ctrl import handle_acs_ctrl_hk_data
from eive_tmtc.tmtc.internal_err_reporter import handle_ier_hk_data
from eive_tmtc.tmtc.payload.ploc_mpsoc import handle_ploc_mpsoc_hk_data
from eive_tmtc.tmtc.tcs.rtd import RTD_NAMES, handle_rtd_hk
from eive_tmtc.tmtc.acs.star_tracker import handle_str_hk_data
from eive_tmtc.tmtc.payload.plpcdu import handle_plpcdu_hk
from eive_tmtc.tmtc.payload.rad_sensor import handle_rad_sensor_data
from eive_tmtc.tmtc.acs.sus import handle_sus_hk
from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data
from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data
from eive_tmtc.tmtc.power.pwr_ctrl import handle_pwr_ctrl_hk_data
from eive_tmtc.tmtc.com.syrlinks_handler import handle_syrlinks_hk_data
from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
from eive_tmtc.tmtc.tcs.tmp1075 import handle_tmp_1075_hk_data
from tmtccmd.pus.tm.s3_hk_base import HkContentType
from tmtccmd.util.obj_id import ObjectIdU32, ObjectIdDictT
from eive_tmtc.tmtc.power.bpx_batt import handle_bpx_hk_data
from eive_tmtc.tmtc.acs.gps import handle_gps_data
from eive_tmtc.tmtc.acs.gyros import handle_gyros_hk_data
from eive_tmtc.tmtc.power.tm import (
handle_pdu_data,
handle_p60_hk_data,
handle_acu_hk_data,
handle_pcdu_hk,
)
from eive_tmtc.tmtc.acs.imtq import (
handle_imtq_hk,
)
from eive_tmtc.pus_tm.defs import FsfwTmTcPrinter, PrintWrapper
from eive_tmtc.tmtc.core import handle_core_hk_data
from eive_tmtc.tmtc.acs.mgms import handle_mgm_hk_data
import eive_tmtc.config.object_ids as obj_ids
_LOGGER = logging.getLogger(__name__)
FORWARD_SENSOR_TEMPS = False
@dataclasses.dataclass
class HkFilter:
object_ids: List[bytes]
set_ids: List[int]
def handle_hk_packet(
raw_tm: bytes,
packet_uuid: UUID,
obj_id_dict: ObjectIdDictT,
printer: FsfwTmTcPrinter,
hk_filter: HkFilter,
hk_level: int,
db_con: sqlite3.Connection,
):
tm_packet = PusTm.unpack(raw_tm, CdsShortTimestamp.TIMESTAMP_SIZE)
obj_id_raw = struct.unpack("!I", tm_packet.tm_data[0:4])[0]
named_obj_id = cast(ObjectIdU32, obj_id_dict.get(obj_id_raw))
if named_obj_id is None:
named_obj_id = ObjectIdU32(obj_id_raw, "Unknown ID")
if tm_packet.subservice == 25 or tm_packet.subservice == 26:
set_id = struct.unpack("!I", tm_packet.tm_data[4:8])[0]
hk_data = tm_packet.tm_data[8:]
if named_obj_id.as_bytes in hk_filter.object_ids:
if PRINT_RAW_HK_B64_STR:
print(f"PUS TM Base64: {base64.b64encode(raw_tm)}")
handle_regular_hk_print(
printer=printer,
set_id=set_id,
packet_uuid=packet_uuid,
object_id=named_obj_id,
hk_packet=tm_packet,
hk_data=hk_data,
db=db_con,
)
return
try:
if hk_level >= 1:
printer.generic_hk_tm_print(
HkContentType.HK, named_obj_id, set_id, hk_data
)
if hk_level >= 1:
handle_regular_hk_print(
printer=printer,
set_id=set_id,
packet_uuid=packet_uuid,
object_id=named_obj_id,
hk_packet=tm_packet,
hk_data=hk_data,
db=db_con,
)
except ValueError as e:
_LOGGER.exception(
f"{e} error when parsing HK data coming from {named_obj_id}"
)
if tm_packet.subservice == 10 or tm_packet.subservice == 12:
_LOGGER.warning("HK definitions printout not implemented yet")
def handle_regular_hk_print( # noqa C901: Complexity okay here
hk_packet: PusTm,
set_id: int,
packet_uuid: UUID,
hk_data: bytes,
db: sqlite3.Connection,
object_id: ObjectIdU32,
printer: FsfwTmTcPrinter,
):
objb = object_id.as_bytes
hk_info = HkTmInfo(
packet_uuid=packet_uuid,
hk_packet=hk_packet,
db_con=db,
hk_data=hk_data,
set_id=set_id,
)
timestamp = CdsShortTimestamp.unpack(hk_packet.timestamp)
packet_dt = timestamp.as_datetime()
pw = PrintWrapper(printer.file_logger)
"""This function is called when a Service 3 Housekeeping packet is received."""
if objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
return handle_rw_hk_data(pw, object_id, set_id, hk_data)
elif objb == obj_ids.SYRLINKS_HANDLER_ID:
return handle_syrlinks_hk_data(
hk_info=hk_info,
pw=pw,
)
elif objb == obj_ids.IMTQ_HANDLER_ID:
return handle_imtq_hk(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.GPS_CONTROLLER:
return handle_gps_data(
pw=pw,
set_id=set_id,
hk_data=hk_data,
packet_time=timestamp.as_datetime(),
)
elif objb == obj_ids.PCDU_HANDLER_ID:
return handle_pcdu_hk(pw=pw, set_id=set_id, hk_data=hk_data)
elif objb == obj_ids.BPX_HANDLER_ID:
return handle_bpx_hk_data(hk_data=hk_data, set_id=set_id, pw=pw)
elif objb == obj_ids.CORE_CONTROLLER_ID:
return handle_core_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.PDU_1_HANDLER_ID:
return handle_pdu_data(
hk_info=hk_info,
pw=pw,
pdu_idx=1,
set_id=set_id,
hk_data=hk_data,
)
elif objb == obj_ids.PDU_2_HANDLER_ID:
return handle_pdu_data(
hk_info=hk_info,
pw=pw,
pdu_idx=2,
set_id=set_id,
hk_data=hk_data,
)
elif objb == obj_ids.PLOC_MPSOC_ID:
return handle_ploc_mpsoc_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.ACU_HANDLER_ID:
return handle_acu_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.INTERNAL_ERROR_REPORTER_ID:
return handle_ier_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.RAD_SENSOR_ID:
return handle_rad_sensor_data(pw=pw, hk_data=hk_data, set_id=set_id)
elif objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
return handle_rw_hk_data(
pw=pw, object_id=object_id, set_id=set_id, hk_data=hk_data
)
if objb in [
obj_ids.SUS_0_N_LOC_XFYFZM_PT_XF,
obj_ids.SUS_1_N_LOC_XBYFZM_PT_XB,
obj_ids.SUS_2_N_LOC_XFYBZB_PT_YB,
obj_ids.SUS_3_N_LOC_XFYBZF_PT_YF,
obj_ids.SUS_4_N_LOC_XMYFZF_PT_ZF,
obj_ids.SUS_5_N_LOC_XFYMZB_PT_ZB,
obj_ids.SUS_6_R_LOC_XFYBZM_PT_XF,
obj_ids.SUS_7_R_LOC_XBYBZM_PT_XB,
obj_ids.SUS_8_R_LOC_XBYBZB_PT_YB,
obj_ids.SUS_9_R_LOC_XBYBZB_PT_YF,
obj_ids.SUS_10_R_LOC_XMYBZF_PT_ZF,
obj_ids.SUS_11_R_LOC_XBYMZB_PT_ZB,
]:
return handle_sus_hk(object_id=object_id, hk_data=hk_data, pw=pw, set_id=set_id)
elif objb in RTD_NAMES.keys():
return handle_rtd_hk(object_id=objb, hk_data=hk_data, pw=pw)
elif objb == obj_ids.P60_DOCK_HANDLER:
return handle_p60_hk_data(pw=pw, set_id=set_id, hk_data=hk_data)
elif objb in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
obj_ids.GYRO_1_L3G_HANDLER_ID,
obj_ids.GYRO_2_ADIS_HANDLER_ID,
obj_ids.GYRO_3_L3G_HANDLER_ID,
]:
return handle_gyros_hk_data(
object_id=object_id, hk_data=hk_data, pw=pw, set_id=set_id
)
elif objb in [
obj_ids.MGM_0_LIS3_HANDLER_ID,
obj_ids.MGM_1_RM3100_HANDLER_ID,
obj_ids.MGM_2_LIS3_HANDLER_ID,
obj_ids.MGM_3_RM3100_HANDLER_ID,
]:
return handle_mgm_hk_data(
object_id=object_id, hk_data=hk_data, pw=pw, set_id=set_id
)
elif objb == obj_ids.PL_PCDU_ID:
return handle_plpcdu_hk(set_id=set_id, hk_data=hk_data, pw=pw)
elif objb == obj_ids.THERMAL_CONTROLLER_ID:
return handle_thermal_controller_hk_data(
object_id=object_id, pw=pw, set_id=set_id, hk_data=hk_data
)
elif objb == obj_ids.STAR_TRACKER_ID:
return handle_str_hk_data(set_id=set_id, hk_data=hk_data, pw=pw)
elif objb == obj_ids.PLOC_SUPV_ID:
return handle_supv_hk_data(set_id=set_id, hk_data=hk_data, pw=pw)
elif objb in [
obj_ids.TMP1075_HANDLER_TCS_BRD_0_ID,
obj_ids.TMP1075_HANDLER_TCS_BRD_1_ID,
obj_ids.TMP1075_HANDLER_IF_BRD_ID,
obj_ids.TMP1075_HANDLER_PLPCDU_0_ID,
obj_ids.TMP1075_HANDLER_PLPCDU_1_ID,
]:
return handle_tmp_1075_hk_data(set_id=set_id, hk_data=hk_data, pw=pw)
elif objb == obj_ids.ACS_CONTROLLER:
return handle_acs_ctrl_hk_data(
pw=pw, set_id=set_id, hk_data=hk_data, packet_time=packet_dt
)
elif objb == obj_ids.PWR_CONTROLLER:
return handle_pwr_ctrl_hk_data(
pw=pw, set_id=set_id, hk_data=hk_data, packet_time=packet_dt
)
else:
_LOGGER.info(
f"Service 3 TM: Parsing for object {object_id} and set ID {set_id} "
"has not been implemented."
)
-183
View File
@@ -1,183 +0,0 @@
"""HK Handling for EIVE OBSW"""
# from pus_tm.tcp_server_objects import TCP_SEVER_SENSOR_TEMPERATURES
from eive_tmtc.tmtc.acs.acs_ctrl import handle_raw_mgm_data, handle_acs_ctrl_hk_data
from eive_tmtc.pus_tm.devs.plpcdu import handle_plpcdu_hk
from eive_tmtc.pus_tm.devs.rad_sensor import handle_rad_sensor_data
from eive_tmtc.pus_tm.devs.sus import handle_sus_hk
from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data
from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data
from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
from tmtccmd.tm.pus_3_fsfw_hk import (
Service3Base,
HkContentType,
Service3FsfwTm,
)
from tmtccmd.util.obj_id import ObjectIdU32, ObjectIdDictT
from tmtccmd.logging import get_console_logger
from eive_tmtc.pus_tm.devs.bpx_bat import handle_bpx_hk_data
from eive_tmtc.pus_tm.devs.gps import handle_gps_data
from eive_tmtc.pus_tm.devs.gyros import handle_gyros_hk_data
from eive_tmtc.tmtc.power.tm import (
handle_pdu_data,
handle_p60_hk_data,
handle_acu_hk_data,
)
from eive_tmtc.pus_tm.devs.syrlinks import handle_syrlinks_hk_data
from eive_tmtc.tmtc.acs.imtq import (
ImtqSetId,
handle_self_test_data,
handle_eng_set,
handle_calibrated_mtm_measurement,
handle_raw_mtm_measurement,
)
from eive_tmtc.pus_tm.defs import FsfwTmTcPrinter
from eive_tmtc.tmtc.core import handle_core_hk_data
from eive_tmtc.pus_tm.devs.mgms import handle_mgm_hk_data
import eive_tmtc.config.object_ids as obj_ids
LOGGER = get_console_logger()
FORWARD_SENSOR_TEMPS = False
def handle_hk_packet(
raw_tm: bytes,
obj_id_dict: ObjectIdDictT,
printer: FsfwTmTcPrinter,
):
tm_packet = Service3FsfwTm.unpack(raw_telemetry=raw_tm, custom_hk_handling=False)
named_obj_id = obj_id_dict.get(tm_packet.object_id.as_bytes)
if named_obj_id is None:
named_obj_id = tm_packet.object_id
if tm_packet.subservice == 25 or tm_packet.subservice == 26:
hk_data = tm_packet.tm_data[8:]
if FORWARD_SENSOR_TEMPS:
# TODO: Maybe use singleton?
# TCP_SEVER_SENSOR_TEMPERATURES.report_raw_hk_data(
# object_id=named_obj_id, set_id=tm_packet.set_id, hk_data=hk_data
# )
pass
printer.generic_hk_tm_print(
content_type=HkContentType.HK,
object_id=named_obj_id,
set_id=tm_packet.set_id,
hk_data=hk_data,
)
try:
handle_regular_hk_print(
printer=printer,
object_id=named_obj_id,
hk_packet=tm_packet,
hk_data=hk_data,
)
except ValueError as e:
LOGGER.exception(
f"{e} error when parsing HK data coming from {named_obj_id}"
)
if tm_packet.subservice == 10 or tm_packet.subservice == 12:
LOGGER.warning("HK definitions printout not implemented yet")
def handle_regular_hk_print(
printer: FsfwTmTcPrinter,
object_id: ObjectIdU32,
hk_packet: Service3Base,
hk_data: bytes,
):
objb = object_id.as_bytes
set_id = hk_packet.set_id
"""This function is called when a Service 3 Housekeeping packet is received."""
if objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
handle_rw_hk_data(printer, object_id, set_id, hk_data)
elif objb == obj_ids.SYRLINKS_HANDLER_ID:
handle_syrlinks_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.IMTQ_HANDLER_ID:
if (set_id >= ImtqSetId.POSITIVE_X_TEST) and (
set_id <= ImtqSetId.NEGATIVE_Z_TEST
):
return handle_self_test_data(printer, hk_data)
elif set_id == ImtqSetId.ENG_HK_SET:
return handle_eng_set(printer, hk_data)
elif set_id == ImtqSetId.CAL_MTM_SET:
return handle_calibrated_mtm_measurement(printer, hk_data)
elif set_id == ImtqSetId.RAW_MTM_SET:
return handle_raw_mtm_measurement(printer, hk_data)
else:
LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id")
elif objb == obj_ids.GPS_CONTROLLER:
return handle_gps_data(printer=printer, hk_data=hk_data)
elif objb == obj_ids.BPX_HANDLER_ID:
handle_bpx_hk_data(hk_data=hk_data, set_id=set_id, printer=printer)
elif objb == obj_ids.CORE_CONTROLLER_ID:
return handle_core_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.PDU_1_HANDLER_ID:
return handle_pdu_data(
printer=printer, pdu_idx=1, set_id=set_id, hk_data=hk_data
)
elif objb == obj_ids.PDU_2_HANDLER_ID:
return handle_pdu_data(
printer=printer, pdu_idx=2, set_id=set_id, hk_data=hk_data
)
elif objb == obj_ids.ACU_HANDLER_ID:
return handle_acu_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.RAD_SENSOR_ID:
return handle_rad_sensor_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
return handle_rw_hk_data(
printer=printer, object_id=object_id, set_id=set_id, hk_data=hk_data
)
if objb in [
obj_ids.SUS_0_N_LOC_XFYFZM_PT_XF,
obj_ids.SUS_1_N_LOC_XBYFZM_PT_XB,
obj_ids.SUS_2_N_LOC_XFYBZB_PT_YB,
obj_ids.SUS_3_N_LOC_XFYBZF_PT_YF,
obj_ids.SUS_4_N_LOC_XMYFZF_PT_ZF,
obj_ids.SUS_5_N_LOC_XFYMZB_PT_ZB,
obj_ids.SUS_6_R_LOC_XFYBZM_PT_XF,
obj_ids.SUS_7_R_LOC_XBYBZM_PT_XB,
obj_ids.SUS_8_R_LOC_XBYBZB_PT_YB,
obj_ids.SUS_9_R_LOC_XBYBZB_PT_YF,
obj_ids.SUS_10_R_LOC_XMYBZF_PT_ZF,
obj_ids.SUS_11_R_LOC_XBYMZB_PT_ZB,
]:
handle_sus_hk(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
elif objb == obj_ids.P60_DOCK_HANDLER:
handle_p60_hk_data(printer=printer, set_id=set_id, hk_data=hk_data)
elif objb in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
obj_ids.GYRO_1_L3G_HANDLER_ID,
obj_ids.GYRO_2_ADIS_HANDLER_ID,
obj_ids.GYRO_3_L3G_HANDLER_ID,
]:
handle_gyros_hk_data(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
elif objb in [
obj_ids.MGM_0_LIS3_HANDLER_ID,
obj_ids.MGM_1_RM3100_HANDLER_ID,
obj_ids.MGM_2_LIS3_HANDLER_ID,
obj_ids.MGM_3_RM3100_HANDLER_ID,
]:
handle_mgm_hk_data(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
elif objb == obj_ids.PL_PCDU_ID:
handle_plpcdu_hk(set_id=set_id, hk_data=hk_data, printer=printer)
elif objb == obj_ids.THERMAL_CONTROLLER_ID:
handle_thermal_controller_hk_data(
object_id=object_id, printer=printer, set_id=set_id, hk_data=hk_data
)
elif objb == obj_ids.PLOC_SUPV_ID:
handle_supv_hk_data(set_id=set_id, hk_data=hk_data, printer=printer)
elif objb == obj_ids.ACS_CONTROLLER:
handle_acs_ctrl_hk_data(printer, set_id, hk_data)
else:
LOGGER.info(
f"Service 3 TM: Parsing for object {object_id} and set ID {set_id} "
f"has not been implemented."
)
+218
View File
@@ -0,0 +1,218 @@
"""Core EIVE TM handler module
"""
import logging
import sqlite3
import uuid
from typing import Any
from spacepackets.ccsds.time import CdsShortTimestamp
from spacepackets.ecss import PusTelemetry
from spacepackets.ecss.pus_17_test import Service17Tm
from spacepackets.util import PrintFormats
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.pus import VerificationWrapper
from tmtccmd.pus.s20_fsfw_param import Service20FsfwTm, Service20ParamDumpWrapper
from tmtccmd.pus.s20_fsfw_param_defs import CustomSubservice as ParamSubservice
from tmtccmd.pus.s200_fsfw_mode import Service200FsfwTm
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice
from tmtccmd.tmtc import GenericApidHandlerBase, SpecificApidHandlerBase
from eive_tmtc.config.definitions import TM_DB_PATH, PUS_APID
from eive_tmtc.config.object_ids import get_object_ids
from .action_reply_handler import handle_action_service_tm
from .defs import PrintWrapper
from .event_handler import handle_event_packet
from .hk_handler import HkFilter, handle_hk_packet
from .verification_handler import generic_retval_printout, handle_service_1_fsfw_packet
_LOGGER = logging.getLogger(__name__)
class PusHandler(SpecificApidHandlerBase):
def __init__(
self,
wrapper: VerificationWrapper,
printer: FsfwTmTcPrinter,
raw_logger: RawTmtcTimedLogWrapper,
hk_level: int,
):
super().__init__(PUS_APID, None)
self.printer = printer
self.verif_wrapper = wrapper
self.raw_logger = raw_logger
self.hk_level = hk_level
self.these_objs_hk_only = []
self.hk_filter = HkFilter(object_ids=self.these_objs_hk_only, set_ids=[])
self.obj_id_dict = get_object_ids()
self.pw = PrintWrapper(printer.file_logger)
def handle_tm(self, packet: bytes, _user_args: Any):
self.pus_handler(
packet,
)
def pus_handler( # noqa C901 : Complexity okay here
self,
packet: bytes,
):
packet_uuid = uuid.uuid4()
if len(packet) < 8:
_LOGGER.warning("Detected packet shorter than 8 bytes!")
return
try:
tm_packet = PusTelemetry.unpack(packet, CdsShortTimestamp.TIMESTAMP_SIZE)
# _LOGGER.info(f"Sequence count: {tm_packet.seq_count}")
except ValueError as value_error:
_LOGGER.warning(f"{value_error}")
_LOGGER.warning("Could not generate PUS TM object from raw data")
_LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}")
return
timestamp = CdsShortTimestamp.unpack(tm_packet.timestamp)
db_con = sqlite3.connect(TM_DB_PATH)
self._store_packet_in_db(
db_con=db_con,
packet=packet,
tm_packet=tm_packet,
timestamp=timestamp,
packet_uuid=packet_uuid,
)
service = tm_packet.service
dedicated_handler = True
if service == 1:
handle_service_1_fsfw_packet(wrapper=self.verif_wrapper, raw_tm=packet)
elif service == 3:
handle_hk_packet(
db_con=db_con,
packet_uuid=packet_uuid,
printer=self.printer,
raw_tm=packet,
obj_id_dict=self.obj_id_dict,
hk_level=self.hk_level,
hk_filter=self.hk_filter,
)
elif service == 5:
handle_event_packet(raw_tm=packet, pw=self.pw)
elif service == 8:
handle_action_service_tm(
raw_tm=packet, pw=self.pw, obj_id_dict=self.obj_id_dict
)
elif service == 17:
pus17_tm = Service17Tm.unpack(
data=packet, timestamp_len=CdsShortTimestamp.TIMESTAMP_SIZE
)
if pus17_tm.subservice == 2:
self.verif_wrapper.dlog("Received Ping Reply TM[17,2]")
dedicated_handler = True
elif service == 20:
self._handle_param_packet(packet, tm_packet)
elif service == 200:
dedicated_handler = self._handle_mode_packet(packet, tm_packet)
else:
_LOGGER.info(
f"The service {service} is not implemented in Telemetry Factory"
)
tm_packet.print_source_data(PrintFormats.HEX)
dedicated_handler = True
if not dedicated_handler and tm_packet is not None:
_LOGGER.info(
f"TM [{service},{tm_packet.subservice}] does not have a dedicated handler"
)
self.raw_logger.log_tm(tm_packet)
def _store_packet_in_db(
self,
db_con: sqlite3.Connection,
packet: bytes,
timestamp: CdsShortTimestamp,
tm_packet: PusTelemetry,
packet_uuid: uuid.UUID,
):
cursor = db_con.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS pus_tm(
packet_uuid TEXT PRIMARY KEY,
generation_time TEXT,
service NUM,
subservice NUM,
data_len NUM,
raw_data BLOB
)"""
)
cursor.execute(
"INSERT INTO pus_tm VALUES(?, ?, ?, ?, ?, ?)",
(
str(packet_uuid),
timestamp.as_datetime(),
tm_packet.service,
tm_packet.subservice,
len(packet),
packet,
),
)
db_con.commit()
def _handle_param_packet(self, raw_data: bytes, tm_packet: PusTelemetry):
param_packet = Service20FsfwTm.unpack(
raw_telemetry=raw_data, timestamp_len=CdsShortTimestamp.TIMESTAMP_SIZE
)
if tm_packet.subservice == ParamSubservice.TM_DUMP_REPLY:
param_wrapper = Service20ParamDumpWrapper(param_tm=param_packet)
try:
param = param_wrapper.get_param()
obj = self.obj_id_dict.get(param_wrapper.param_tm.object_id)
self.pw.dlog(f"Received parameter dump TM from {obj}")
self.pw.dlog(f"Parameter: {param}")
if param.rows == 1 and param.columns == 1:
try:
scalar_param = param.parse_scalar_param()
if isinstance(scalar_param, int):
self.pw.dlog(f"Scalar integer parameter: {scalar_param}")
elif isinstance(scalar_param, float):
self.pw.dlog(
f"Scalar floating point parameter: {scalar_param}"
)
except ValueError as e:
self.pw.dlog(f"received {e} trying to parse scalar parameter")
else:
# TODO: Could improve display further by actually displaying a matrix as a
# matrix using row and column information
self.pw.dlog(
"Received vector or matrix data:"
f" {param.param_raw.hex(sep=',')}"
)
except ValueError as e:
self.pw.dlog(f"received {e} when trying to parse parameters")
except NotImplementedError as e:
self.pw.dlog(f"received {e} when trying to parse parameters")
else:
self.pw.dlog(
f"unknown subservice {tm_packet.subservice} for parameter service"
)
def _handle_mode_packet(self, raw_data: bytes, _: PusTelemetry) -> bool:
tm_packet = Service200FsfwTm.unpack(
raw_telemetry=raw_data, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == ModeSubservice.TM_CANT_REACH_MODE:
obj_id = tm_packet.object_id
obj_id_obj = self.obj_id_dict.get(obj_id)
retval = tm_packet.return_value
string_list = generic_retval_printout(retval)
self.pw.dlog(f"Received Mode Reply from {obj_id_obj}: Can't reach mode.")
for string in string_list:
self.pw.dlog(f"Reason: {string}")
return True
if tm_packet.subservice == ModeSubservice.TM_WRONG_MODE_REPLY:
self.pw.dlog(f"Received Mode TM wrong mode reply, mode: {tm_packet.mode}")
return False
class UnknownApidHandler(GenericApidHandlerBase):
def handle_tm(self, apid: int, packet: bytes, _user_args: Any):
_LOGGER.warning(
f"Packet with unknown APID {apid} detected: {packet.hex(sep=',')}"
)
+6 -9
View File
@@ -1,18 +1,17 @@
import logging
import socket
from typing import Optional
import json
import base64
from tmtccmd.logging import get_console_logger
from tmtccmd.util.obj_id import ObjectIdU32
from dle_encoder import DleEncoder
LOGGER = get_console_logger()
_LOGGER = logging.getLogger(__name__)
class TmTcpServer:
def __init__(self, ip_address: str, port: int):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((ip_address, port))
@@ -29,8 +28,8 @@ class TmTcpServer:
def __del__(self):
try:
self.close()
except:
LOGGER.warning("Could not close sockets!")
except IOError:
_LOGGER.warning("Could not close sockets!")
def close(self):
self.server_socket.close()
@@ -45,8 +44,7 @@ class TmTcpServer:
(self.client_connection, _) = self.server_socket.accept()
self.client_connection.setblocking(False)
print("Client connected")
except:
# no client waiting
except IOError:
return
data_json_bytes = json.dumps(dictionary).encode()
@@ -57,7 +55,7 @@ class TmTcpServer:
try:
sent_length = self.client_connection.send(data_json_bytes)
except:
except IOError:
self.client_connection = None
return
if sent_length == 0:
@@ -65,7 +63,6 @@ class TmTcpServer:
self.client_connection = None
def report_raw_hk_data(self, object_id: ObjectIdU32, set_id: int, hk_data: bytes):
data_dict = {
"type": "TM",
"tmType": "Raw HK",
+9 -9
View File
@@ -1,13 +1,13 @@
import logging
from typing import List, Optional
from spacepackets.ccsds import CdsShortTimestamp
from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
from tmtccmd.logging import get_console_logger
from tmtccmd.pus import VerificationWrapper
from tmtccmd.tm.pus_1_verification import Service1FsfwWrapper
from tmtccmd.pus.s1_verification import Service1FsfwWrapper
from eive_tmtc.config.retvals import get_retval_dict
LOGGER = get_console_logger()
_LOGGER = logging.getLogger(__name__)
def handle_service_1_fsfw_packet(wrapper: VerificationWrapper, raw_tm: bytes):
@@ -17,16 +17,16 @@ def handle_service_1_fsfw_packet(wrapper: VerificationWrapper, raw_tm: bytes):
)
# Error code with length 2 is FSFW specific
tm_packet = Service1Tm.unpack(
data=raw_tm, params=UnpackParams(CdsShortTimestamp.empty(), 1, 2)
data=raw_tm, params=UnpackParams(CdsShortTimestamp.TIMESTAMP_SIZE, 1, 2)
)
fsfw_wrapper = Service1FsfwWrapper(tm_packet)
res = wrapper.verificator.add_tm(tm_packet)
if res is None:
LOGGER.info(
_LOGGER.info(
f"Received Verification TM[{tm_packet.service}, {tm_packet.subservice}] "
f"with Request ID {tm_packet.tc_req_id.as_u32():#08x}"
)
LOGGER.warning(f"No matching telecommand found for {tm_packet.tc_req_id}")
_LOGGER.warning(f"No matching telecommand found for {tm_packet.tc_req_id}")
else:
wrapper.log_to_console(tm_packet, res)
wrapper.log_to_file(tm_packet, res)
@@ -48,7 +48,7 @@ def generic_retval_printout(
if retval_info is None:
raw_err = retval
return [
f"No returnvalue information found for error code with "
"No returnvalue information found for error code with "
f"subsystem ID {(raw_err >> 8) & 0xff} and unique ID {raw_err & 0xff}"
]
else:
@@ -58,9 +58,9 @@ def generic_retval_printout(
)
string_list = [retval_string]
if p1:
error_param_1_str = f"Error Parameter 1: hex {p1:#010x} " f"dec {p1} "
error_param_1_str = f"Error Parameter 1: hex {p1:#010x} dec {p1} "
string_list.append(error_param_1_str)
if p2:
error_param_2_str = f"Error Parameter 2: hex {p2:#010x} " f"dec {p2}"
error_param_2_str = f"Error Parameter 2: hex {p2:#010x} dec {p2}"
string_list.append(error_param_2_str)
return string_list
+4 -2
View File
@@ -1,2 +1,4 @@
from .payload.pl_subsystem import add_payload_subsystem_cmds
from .test import add_test_defs
from .system import add_system_cmd_defs
from .tm_store import add_persistent_tm_store_cmd_defs
from .tcs import add_tmp_sens_cmds
from .wdt import add_xiphos_wdt_defs
+1
View File
@@ -0,0 +1 @@
from .gyros import add_gyr_cmd_defs
+60 -20
View File
@@ -1,16 +1,16 @@
import enum
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
CmdTreeNode,
OpCodeEntry,
TmtcDefinitionWrapper,
tmtc_definitions_provider,
)
from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Mode
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
from tmtccmd.pus.s200_fsfw_mode import Mode
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
@@ -30,8 +30,8 @@ class DualSideSubmode(enum.IntEnum):
DUAL_SIDE = 2
def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
if op_code in AcsOpCodes.ACS_ASS_A_SIDE:
def pack_acs_board_command(q: DefaultPusQueueHelper, cmd_str: str):
if cmd_str in AcsOpCodes.ACS_ASS_A_SIDE:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.NORMAL,
@@ -39,7 +39,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching to ACS board assembly A side",
)
if op_code in AcsOpCodes.ACS_ASS_B_SIDE:
if cmd_str in AcsOpCodes.ACS_ASS_B_SIDE:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.NORMAL,
@@ -47,7 +47,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching to ACS board assembly B side",
)
if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE:
if cmd_str in AcsOpCodes.ACS_ASS_DUAL_MODE:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.NORMAL,
@@ -55,7 +55,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching to ACS board assembly dual mode",
)
if op_code in AcsOpCodes.ACS_ASS_A_ON:
if cmd_str in AcsOpCodes.ACS_ASS_A_ON:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.ON,
@@ -63,7 +63,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching ACS board assembly A side on",
)
if op_code in AcsOpCodes.ACS_ASS_B_ON:
if cmd_str in AcsOpCodes.ACS_ASS_B_ON:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.ON,
@@ -71,7 +71,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching ACS board assembly B side on",
)
if op_code in AcsOpCodes.ACS_ASS_DUAL_ON:
if cmd_str in AcsOpCodes.ACS_ASS_DUAL_ON:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.ON,
@@ -79,7 +79,7 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
q=q,
info="Switching ACS board assembly dual side on",
)
if op_code in AcsOpCodes.ACS_ASS_OFF:
if cmd_str in AcsOpCodes.ACS_ASS_OFF:
pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID,
mode=Mode.OFF,
@@ -89,11 +89,51 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
)
@service_provider(CustomServiceList.ACS_BRD_ASS)
def pack_acs_command_provider(p: ServiceProviderParams):
op_code = p.op_code
q = p.queue_helper
pack_acs_command(q, op_code)
def create_acs_board_node() -> CmdTreeNode:
node = CmdTreeNode("acs_brd", "ACS Board", hide_children_which_are_leaves=True)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_A_SIDE[1],
"Switch to ACS board A side",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_B_SIDE[1],
"Switch to ACS board B side",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_DUAL_MODE[1],
"Switch to ACS board dual mode",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_A_ON[1],
"Switch ACS board A side on",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_B_ON[1],
"Switch ACS board B side on",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_DUAL_ON[1],
"Switch ACS board dual mode on",
)
)
node.add_child(
CmdTreeNode(
AcsOpCodes.ACS_ASS_OFF[1],
"Switch off ACS board",
)
)
return node
@tmtc_definitions_provider
File diff suppressed because it is too large Load Diff
-85
View File
@@ -1,85 +0,0 @@
import enum
from typing import Tuple, Dict
from spacepackets.ecss import PusTelecommand
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from eive_tmtc.config.object_ids import ACS_SUBSYSTEM_ID
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams
class OpCode(str, enum.Enum):
OFF = "off"
SAFE = "safe"
DETUMBLE = "detumble"
IDLE = "idle"
TARGET_PT = "target"
REPORT_ALL_MODES = "all_modes"
class AcsMode(enum.IntEnum):
OFF = 0
SAFE = 1 << 24
DETUMBLE = 2 << 24
IDLE = 3 << 24
TARGET_PT = 4 << 24
class Info(str, enum.Enum):
OFF = "Off Command"
SAFE = "Safe Mode Command"
DETUMBLE = "Detumble Mode Command"
IDLE = "Idle Mode Command"
TARGET_PT = "Target Pointing Mode Command"
REPORT_ALL_MODES = "Report All Modes Recursively"
HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCode.OFF: (AcsMode.OFF, Info.OFF),
OpCode.IDLE: (AcsMode.IDLE, Info.IDLE),
OpCode.SAFE: (AcsMode.SAFE, Info.SAFE),
OpCode.DETUMBLE: (AcsMode.DETUMBLE, Info.DETUMBLE),
}
@service_provider(CustomServiceList.ACS_SS.value)
def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code
q = p.queue_helper
info_prefix = "ACS Subsystem"
if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=ModeSubservices.TC_MODE_ANNOUNCE_RECURSIVE,
app_data=ACS_SUBSYSTEM_ID,
)
)
mode_info_tup = HANDLER_LIST.get(op_code)
if mode_info_tup is None:
return
pack_mode_cmd_with_info(
object_id=ACS_SUBSYSTEM_ID,
info=f"{info_prefix}: {mode_info_tup[1]}",
submode=0,
mode=mode_info_tup[0],
q=q,
)
@tmtc_definitions_provider
def add_acs_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCode.SAFE, Info.SAFE)
oce.add(OpCode.IDLE, Info.IDLE)
oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.ACS_SS, "ACS Subsystem", oce)
+16
View File
@@ -0,0 +1,16 @@
import enum
class AcsMode(enum.IntEnum):
OFF = 0
SAFE = 10
IDLE = 11
PTG_NADIR = 12
PTG_TARGET = 13
PTG_TARGET_GS = 14
PTG_INERTIAL = 15
class SafeSubmode(enum.IntEnum):
DEFAULT = 0
DETUMBLE = 1
+266
View File
@@ -0,0 +1,266 @@
import datetime
import enum
import logging
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.config import CmdTreeNode
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.tc.s3_fsfw_hk import (
make_sid,
create_request_one_hk_command,
create_enable_periodic_hk_command_with_interval_with_diag,
create_disable_periodic_hk_command_with_diag,
)
from tmtccmd.pus.tc.s8_fsfw_action import create_action_cmd
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
_LOGGER = logging.getLogger(__name__)
class GpsInfo:
MAX_SATELLITES = 30
class ActIds:
RESET_GNSS = 5
class AcsBoardSides(enum.IntEnum):
A_SIDE = 0
B_SIDE = 1
class OpCode:
OFF = "off"
ON = "on"
REQ_CORE_HK = "core_hk_request"
ENABLE_CORE_HK = "core_hk_enable"
DISABLE_CORE_HK = "core_hk_disable"
REQ_SKYVIEW_HK = "skyview_hk_request"
ENABLE_SKYVIEW_HK = "skyview_hk_enable"
DISABLE_SKYVIEW_HK = "skyview_hk_disable"
RESET_GNSS = "reset_gnss"
class Info:
OFF = "Off"
ON = "On"
REQ_CORE_HK = "Request Core HK"
ENABLE_CORE_HK = "Enable Core HK"
DISABLE_CORE_HK = "Disable Core HK"
REQ_SKYVIEW_HK = "Request Skyview HK"
ENABLE_SKYVIEW_HK = "Enable Skyview HK"
DISABLE_SKYVIEW_HK = "Disable Skyview HK"
RESET_GNSS = "Reset GNSS using reset pin"
class SetId(enum.IntEnum):
CORE_HK = 0
SKYVIEW_HK = 1
def create_gnss_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("gnss_ctrl", "GNSS Ctrl", hide_children_for_print=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
def pack_gps_command( # noqa: C901
object_id: bytes, q: DefaultPusQueueHelper, cmd_str: str
): # noqa: C901:
if cmd_str == OpCode.RESET_GNSS:
for val in AcsBoardSides:
print("{:<2}: {:<20}".format(val, val.name))
board_side = int(input("Select Board Side \n" ""))
q.add_log_cmd(f"GPS: {Info.RESET_GNSS}")
q.add_pus_tc(
create_action_cmd(
object_id=object_id,
action_id=ActIds.RESET_GNSS,
user_data=bytearray([board_side]),
)
)
if cmd_str == OpCode.ENABLE_CORE_HK:
interval = float(input("Please specify interval in floating point seconds: "))
if interval <= 0:
raise ValueError("invalid interval")
q.add_log_cmd(f"GPS: {Info.ENABLE_CORE_HK}")
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=False,
sid=make_sid(object_id=object_id, set_id=SetId.CORE_HK),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.DISABLE_CORE_HK:
q.add_log_cmd(f"gps: {Info.DISABLE_CORE_HK}")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
diag=False, sid=make_sid(object_id=object_id, set_id=SetId.CORE_HK)
)
)
if cmd_str == OpCode.REQ_CORE_HK:
q.add_log_cmd(f"GPS: {Info.REQ_CORE_HK}")
q.add_pus_tc(
create_request_one_hk_command(
sid=make_sid(object_id=object_id, set_id=SetId.CORE_HK)
)
)
if cmd_str == OpCode.ENABLE_SKYVIEW_HK:
interval = float(input("Please specify interval in floating point seconds: "))
if interval <= 0:
raise ValueError("invalid interval")
q.add_log_cmd(f"GPS: {Info.ENABLE_SKYVIEW_HK}")
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=False,
sid=make_sid(object_id=object_id, set_id=SetId.SKYVIEW_HK),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.DISABLE_SKYVIEW_HK:
q.add_log_cmd(f"gps: {Info.DISABLE_SKYVIEW_HK}")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
diag=False, sid=make_sid(object_id=object_id, set_id=SetId.SKYVIEW_HK)
)
)
if cmd_str == OpCode.REQ_SKYVIEW_HK:
q.add_log_cmd(f"GPS: {Info.REQ_SKYVIEW_HK}")
q.add_pus_tc(
create_request_one_hk_command(
sid=make_sid(object_id=object_id, set_id=SetId.SKYVIEW_HK)
)
)
if cmd_str == OpCode.ON:
q.add_log_cmd(f"GPS: {Info.ON}")
q.add_pus_tc(create_mode_command(object_id, Mode.ON, 0))
if cmd_str == OpCode.OFF:
q.add_log_cmd(f"GPS: {Info.OFF}")
q.add_pus_tc(create_mode_command(object_id, Mode.OFF, 0))
def handle_gps_data(
pw: PrintWrapper,
set_id: int,
hk_data: bytes,
packet_time: datetime.datetime,
):
pw.ilog(_LOGGER, f"Received GPS CTRL HK with packet time {packet_time}")
match set_id:
case SetId.CORE_HK:
handle_core_data(pw, hk_data)
case SetId.SKYVIEW_HK:
handle_skyview_data(pw, hk_data)
def handle_core_data(pw: PrintWrapper, hk_data: bytes):
if len(hk_data) < 4 * 8 + 4 + 2 + 8:
pw.dlog(
f"GPS Core dataset with size {len(hk_data)} does not have expected size"
f" of {4*8+4+2+8} bytes"
)
return
current_idx = 0
fmt_str = "!ddddBBBHBBBBBI"
inc_len = struct.calcsize(fmt_str)
(
lat,
long,
alt,
speed,
fix,
sats_in_use,
sats_in_view,
year,
month,
day,
hours,
minutes,
seconds,
unix_seconds,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
current_idx += inc_len
if year == 0:
date_string = "No date string, year is 0"
else:
date_string = datetime.datetime(
year=year, month=month, day=day, hour=hours, minute=minutes, second=seconds
)
pw.dlog(f"Lat: {lat} deg")
pw.dlog(f"Long: {long} deg")
pw.dlog(f"Altitude: {alt} m | Speed: {speed} m/s")
pw.dlog(
f"Fix Type: {fix} | Sats in View {sats_in_view} | Sats in Use {sats_in_use}"
)
pw.dlog(f"GNSS Date: {date_string}")
pw.dlog(f"Unix seconds {unix_seconds}")
pw.dlog(get_validity_buffer_str(validity_buffer=hk_data[current_idx:], num_vars=14))
def handle_skyview_data(pw: PrintWrapper, hk_data: bytes):
data_length = 8 + GpsInfo.MAX_SATELLITES * (8 + 3 * 2 + 1)
if len(hk_data) < data_length:
pw.dlog(
f"GPS Skyview dataset with size {len(hk_data)} does not have expected size"
f" of {data_length} bytes"
)
return
current_idx = 0
fmt_str_unix = "!d"
fmt_str_int16 = "!" + "h" * GpsInfo.MAX_SATELLITES
fmt_str_double = "!" + "d" * GpsInfo.MAX_SATELLITES
fmt_str_uint8 = "!" + "B" * GpsInfo.MAX_SATELLITES
inc_len_unix = struct.calcsize(fmt_str_unix)
inc_len_int16 = struct.calcsize(fmt_str_int16)
inc_len_double = struct.calcsize(fmt_str_double)
inc_len_uint8 = struct.calcsize(fmt_str_uint8)
unix = struct.unpack(
fmt_str_unix, hk_data[current_idx : current_idx + inc_len_unix]
)[0]
current_idx += inc_len_unix
prn_id = struct.unpack(
fmt_str_int16, hk_data[current_idx : current_idx + inc_len_int16]
)
current_idx += inc_len_int16
azimuth = struct.unpack(
fmt_str_int16, hk_data[current_idx : current_idx + inc_len_int16]
)
current_idx += inc_len_int16
elevation = struct.unpack(
fmt_str_int16, hk_data[current_idx : current_idx + inc_len_int16]
)
current_idx += inc_len_int16
signal_to_noise = struct.unpack(
fmt_str_double, hk_data[current_idx : current_idx + inc_len_double]
)
current_idx += inc_len_double
used = struct.unpack(
fmt_str_uint8, hk_data[current_idx : current_idx + inc_len_uint8]
)
current_idx += inc_len_uint8
pw.dlog(f"Skyview Time: {unix} unix-sec")
pw.dlog(
"{:<8} {:<8} {:<8} {:<8} {:<8}".format(
"PRN_ID", "AZ [°]", "EL [°]", "S2N [dBHz]", "USED"
)
)
for idx in range(GpsInfo.MAX_SATELLITES):
pw.dlog(
"{:<8} {:<8} {:<8} {:<8} {:<8}".format(
prn_id[idx],
azimuth[idx],
elevation[idx],
signal_to_noise[idx],
used[idx],
)
)
pw.dlog(get_validity_buffer_str(validity_buffer=hk_data[current_idx:], num_vars=6))
+199
View File
@@ -0,0 +1,199 @@
import enum
import logging
import struct
from spacepackets.ecss import PusTelecommand
from tmtccmd.config import CmdTreeNode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s201_fsfw_health import pack_set_health_cmd_data, FsfwHealth
from tmtccmd.pus.s201_fsfw_health import Subservice
import eive_tmtc.config.object_ids as obj_ids
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
from tmtccmd.pus.tc.s3_fsfw_hk import create_request_one_hk_command, make_sid
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
OpCodeEntry,
TmtcDefinitionWrapper,
)
from eive_tmtc.config.object_ids import (
GYRO_0_ADIS_HANDLER_ID,
GYRO_1_L3G_HANDLER_ID,
GYRO_2_ADIS_HANDLER_ID,
GYRO_3_L3G_HANDLER_ID,
)
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util import ObjectIdU32
class OpCode:
NML = "normal"
OFF = "off"
CORE_HK = "core_hk"
CFG_HK = "cfg_hk"
SET_FAULTY = "set_faulty"
class AdisGyroSetId(enum.IntEnum):
CORE_HK = 0
CFG_HK = 1
class L3gGyroSetId(enum.IntEnum):
CORE_HK = 0
class GyrSel(enum.IntEnum):
GYR_0_ADIS = 0
GYR_1_L3G = 1
GYR_2_ADIS = 2
GYR_3_L3G = 3
GYR_SEL_DICT = {
GyrSel.GYR_0_ADIS: ("GYRO_0_ADIS", GYRO_0_ADIS_HANDLER_ID),
GyrSel.GYR_1_L3G: ("GYRO_1_L3G", GYRO_1_L3G_HANDLER_ID),
GyrSel.GYR_2_ADIS: ("GYRO_2_ADIS", GYRO_2_ADIS_HANDLER_ID),
GyrSel.GYR_3_L3G: ("GYRO_3_L3G", GYRO_3_L3G_HANDLER_ID),
}
def handle_gyr_cmd(q: DefaultPusQueueHelper, cmd_str: str):
print("Please select the Gyro Device")
for k, v in GYR_SEL_DICT.items():
print(f"{k}: {v[0]}")
sel_idx = int(input("Select gyro device by index: "))
gyr_info = GYR_SEL_DICT[GyrSel(sel_idx)]
gyr_obj_id = gyr_info[1]
is_adis = False
if sel_idx == GyrSel.GYR_0_ADIS or sel_idx == GyrSel.GYR_2_ADIS:
is_adis = True
core_hk_id = AdisGyroSetId.CORE_HK
else:
core_hk_id = L3gGyroSetId.CORE_HK
if cmd_str == OpCode.NML:
q.add_log_cmd(f"Gyro {gyr_info[0]} NORMAL mode")
q.add_pus_tc(create_mode_command(gyr_obj_id, Mode.NORMAL, 0))
if cmd_str == OpCode.OFF:
q.add_log_cmd(f"Gyro {gyr_info[0]} OFF mode")
q.add_pus_tc(create_mode_command(gyr_obj_id, Mode.OFF, 0))
elif cmd_str == OpCode.CORE_HK:
q.add_log_cmd(f"Gyro {gyr_info[0]} Core HK")
q.add_pus_tc(create_request_one_hk_command(make_sid(gyr_obj_id, core_hk_id)))
elif cmd_str == OpCode.CFG_HK:
if not is_adis:
raise ValueError("No config HK for L3 device")
q.add_log_cmd(f"Gyro {gyr_info[0]} CFG HK")
q.add_pus_tc(
create_request_one_hk_command(make_sid(gyr_obj_id, AdisGyroSetId.CFG_HK))
)
elif cmd_str == OpCode.SET_FAULTY:
q.add_log_cmd(f"Gyro {gyr_info[0]} set faulty")
q.add_pus_tc(
PusTelecommand(
service=201,
subservice=Subservice.TC_SET_HEALTH,
app_data=pack_set_health_cmd_data(
object_id=gyr_obj_id, health=FsfwHealth.FAULTY
),
)
)
else:
logging.getLogger(__name__).warning(
f"invalid op code {cmd_str} for gyro command"
)
def handle_gyros_hk_data(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if object_id.as_bytes in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
obj_ids.GYRO_2_ADIS_HANDLER_ID,
]:
handle_adis_gyro_hk(object_id=object_id, pw=pw, set_id=set_id, hk_data=hk_data)
elif object_id.as_bytes in [
obj_ids.GYRO_1_L3G_HANDLER_ID,
obj_ids.GYRO_3_L3G_HANDLER_ID,
]:
handle_l3g_gyro_hk(object_id=object_id, pw=pw, set_id=set_id, hk_data=hk_data)
def handle_adis_gyro_hk(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if set_id == AdisGyroSetId.CORE_HK:
fmt_str = "!ddddddf"
inc_len = struct.calcsize(fmt_str)
(
ang_veloc_x,
ang_veloc_y,
ang_veloc_z,
accel_x,
accel_y,
accel_z,
temp,
) = struct.unpack(fmt_str, hk_data[0 : 0 + inc_len])
pw.dlog(f"Received ADIS1650X Gyro HK data from object {object_id}")
pw.dlog(
f"Angular Velocities (degrees per second): X {ang_veloc_x} | "
f"Y {ang_veloc_y} | Z {ang_veloc_z}"
)
pw.dlog(f"Acceleration (m/s^2): X {accel_x} | Y {accel_y} | Z {accel_z}")
pw.dlog(f"Temperature {temp} C")
if set_id == AdisGyroSetId.CFG_HK:
fmt_str = "!HBHHH"
inc_len = struct.calcsize(fmt_str)
print(len(hk_data))
(
diag_stat_reg,
filter_setting,
range_mdl,
msc_ctrl_reg,
dec_rate_reg,
) = struct.unpack(fmt_str, hk_data[0 : 0 + inc_len])
pw.dlog(f"Diagnostic Status Register {diag_stat_reg:#018b}")
pw.dlog(f"Range MDL {range_mdl}")
pw.dlog(f"Filter Settings {filter_setting:#010b}")
pw.dlog(f"Miscellaneous Control Register {msc_ctrl_reg:#018b}")
pw.dlog(f"Decimation Rate {dec_rate_reg:#06x}")
def handle_l3g_gyro_hk(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if set_id == L3gGyroSetId.CORE_HK:
fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str)
(angVelocX, angVelocY, angVelocZ, temp) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Received L3GD20H Gyro HK data from object {object_id}")
pw.dlog(
f"Angular Velocities (degrees per second): X {angVelocX} | "
f"Y {angVelocY} | Z {angVelocZ}"
)
pw.dlog(f"Temperature {temp} °C")
def create_gyros_node() -> CmdTreeNode:
node = CmdTreeNode("gyros", "Gyroscope devices")
node.add_child(CmdTreeNode(OpCode.CORE_HK, "Request Core HK"))
node.add_child(CmdTreeNode(OpCode.CFG_HK, "Request CFG HK"))
node.add_child(CmdTreeNode(OpCode.NML, "Normal Mode"))
node.add_child(CmdTreeNode(OpCode.OFF, "Off Mode"))
node.add_child(CmdTreeNode(OpCode.SET_FAULTY, "Set Faulty"))
return node
@tmtc_definitions_provider
def add_gyr_cmd_defs(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.CORE_HK, info="Request Core HK")
oce.add(keys=OpCode.CFG_HK, info="Request CFG HK")
oce.add(keys=OpCode.NML, info="Normal Mode")
oce.add(keys=OpCode.OFF, info="Off Mode")
oce.add(keys=OpCode.SET_FAULTY, info="Set Faulty")
defs.add_service(CustomServiceList.GYRO, info="Gyro", op_code_entry=oce)
+352 -65
View File
@@ -5,9 +5,13 @@
@author J. Meier
@date 25.03.2021
"""
import enum
import logging
import struct
from typing import List
from tmtccmd.config import CmdTreeNode
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.pus_tm.defs import PrintWrapper
from spacepackets.ecss.tc import PusTelecommand
@@ -16,34 +20,63 @@ from tmtccmd.config.tmtc import (
OpCodeEntry,
TmtcDefinitionWrapper,
)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.tc.s3_fsfw_hk import (
make_sid,
generate_one_diag_command,
generate_one_hk_command,
create_request_one_diag_command,
create_enable_periodic_hk_command_with_interval_with_diag,
create_disable_periodic_hk_command_with_diag,
)
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
_LOGGER = logging.getLogger(__name__)
class OpCode:
ON = ["on"]
NORMAL = ["normal"]
OFF = ["off"]
SET_DIPOLE = ["set_dipole"]
ON = "on"
NORMAL = "normal"
OFF = "off"
SET_DIPOLE = "set_dipole"
REQUEST_ENG_HK_NO_TORQUE = "hk_os_eng_hk_no_torque"
REQUEST_ENG_HK_WITH_TORQUE = "hk_os_eng_hk_with_torque"
REQUEST_MGM_RAW_NO_TORQUE = "hk_os_mgm_raw_no_torque"
ENABLE_MGM_RAW_NO_TORQUE = "enb_mgm_raw_no_torque"
DISABLE_MGM_RAW_NO_TORQUE = "dis_mgm_raw_no_torque"
REQUEST_MGM_RAW_WITH_TORQUE = "hk_os_mgm_raw_with_torque"
ENABLE_MGM_RAW_WITH_TORQUE = "enb_mgm_raw_with_torque"
DISABLE_MGM_RAW_WITH_TORQUE = "dis_mgm_raw_with_torque"
ENABLE_ENG_HK_NO_TORQUE = "enb_eng_hk_no_torque"
DISABLE_ENG_HK_NO_TORQUE = "dis_eng_hk_no_torque"
ENABLE_ENG_HK_WITH_TORQUE = "enb_eng_hk_with_torque"
DISABLE_ENG_HK_WITH_TORQUE = "dis_eng_hk_with_torque"
POS_X_SELF_TEST = "self_test_pos_x"
NEG_X_SELF_TEST = "self_test_neg_x"
POS_Y_SELF_TEST = "self_test_pos_y"
NEG_Y_SELF_TEST = "self_test_neg_y"
POS_Z_SELF_TEST = "self_test_pos_z"
NEG_Z_SELF_TEST = "self_test_neg_z"
class ImtqSetId:
ENG_HK_SET = 1
CAL_MTM_SET = 2
RAW_MTM_SET = 3
POSITIVE_X_TEST = 4
NEGATIVE_X_TEST = 5
POSITIVE_Y_TEST = 6
NEGATIVE_Y_TEST = 7
POSITIVE_Z_TEST = 8
NEGATIVE_Z_TEST = 9
class ImtqSetId(enum.IntEnum):
ENG_HK_NO_TORQUE = 1
RAW_MTM_NO_TORQUE = 2
ENG_HK_SET_WITH_TORQUE = 3
RAW_MTM_WITH_TORQUE = 4
STATUS_SET = 5
DIPOLES = 6
CAL_MTM_SET = 9
POSITIVE_X_TEST = 10
NEGATIVE_X_TEST = 11
POSITIVE_Y_TEST = 12
NEGATIVE_Y_TEST = 13
POSITIVE_Z_TEST = 14
NEGATIVE_Z_TEST = 15
class ImtqActionId:
@@ -60,44 +93,131 @@ class ImtqActionId:
read_self_test_results = bytearray([0x0, 0x0, 0x0, 0x0D])
CTN = CmdTreeNode
def create_mgt_node() -> CmdTreeNode:
node = CmdTreeNode(
"mgt", "iMTQ MGT device node", hide_children_which_are_leaves=True
)
node.add_child(CmdTreeNode(OpCode.OFF, "Mode OFF"))
node.add_child(CmdTreeNode(OpCode.ON, "Mode ON"))
node.add_child(CmdTreeNode(OpCode.NORMAL, "Mode Normal"))
node.add_child(CmdTreeNode(OpCode.OFF, "Mode OFF"))
node.add_child(
CmdTreeNode(OpCode.REQUEST_ENG_HK_NO_TORQUE, "Request Engineering HK One Shot")
)
node.add_child(
CmdTreeNode(
OpCode.REQUEST_ENG_HK_WITH_TORQUE,
"Request Engineering HK One Shot during Torque",
)
)
node.add_child(
CmdTreeNode(OpCode.ENABLE_ENG_HK_NO_TORQUE, "Enable ENG HK not torque")
)
node.add_child(
CmdTreeNode(OpCode.ENABLE_ENG_HK_WITH_TORQUE, "Enable ENG HK with torque")
)
node.add_child(
CmdTreeNode(OpCode.DISABLE_ENG_HK_NO_TORQUE, "Disable ENG HK not torque")
)
node.add_child(
CmdTreeNode(OpCode.DISABLE_ENG_HK_WITH_TORQUE, "Disable ENG HK with torque")
)
node.add_child(
CmdTreeNode(
OpCode.REQUEST_MGM_RAW_NO_TORQUE,
"Request MGM Raw Without Torque HK One Shot",
)
)
node.add_child(
CmdTreeNode(OpCode.ENABLE_MGM_RAW_NO_TORQUE, "Enable MGM Raw Without Torque HK")
)
node.add_child(
CmdTreeNode(
OpCode.DISABLE_MGM_RAW_NO_TORQUE, "Disable MGM Raw Without Torque HK"
)
)
node.add_child(
CmdTreeNode(
OpCode.REQUEST_MGM_RAW_WITH_TORQUE,
"Request MGM Raw With Torque HK One Shot",
)
)
node.add_child(
CmdTreeNode(OpCode.ENABLE_MGM_RAW_WITH_TORQUE, "Enable MGM Raw With Torque HK")
)
node.add_child(
CTN(OpCode.DISABLE_MGM_RAW_WITH_TORQUE, "Disable MGM Raw With Torque HK")
)
node.add_child(CTN(OpCode.POS_X_SELF_TEST, "IMTQ perform pos X self test"))
node.add_child(CTN(OpCode.NEG_X_SELF_TEST, "IMTQ perform neg X self test"))
node.add_child(CTN(OpCode.POS_Y_SELF_TEST, "IMTQ perform pos Y self test"))
node.add_child(CTN(OpCode.NEG_Y_SELF_TEST, "IMTQ perform neg Y self test"))
node.add_child(CTN(OpCode.POS_Z_SELF_TEST, "IMTQ perform pos Z self test"))
node.add_child(CTN(OpCode.NEG_Z_SELF_TEST, "IMTQ perform neg Z self test"))
node.add_child(CTN(OpCode.SET_DIPOLE, "IMTQ command dipole"))
return node
@tmtc_definitions_provider
def add_imtq_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, "Mode Off")
oce.add(OpCode.ON, "Mode On")
oce.add(OpCode.NORMAL, "Mode Normal")
oce.add("3", "IMTQ perform pos X self test")
oce.add("4", "IMTQ perform neg X self test")
oce.add("5", "IMTQ perform pos Y self test")
oce.add("6", "IMTQ perform neg Y self test")
oce.add("7", "IMTQ perform pos Z self test")
oce.add("8", "IMTQ perform neg Z self test")
oce.add(OpCode.REQUEST_ENG_HK_NO_TORQUE, "Request Engineering HK One Shot")
oce.add(
OpCode.REQUEST_ENG_HK_WITH_TORQUE,
"Request Engineering HK One Shot during Torque",
)
oce.add(OpCode.ENABLE_ENG_HK_NO_TORQUE, "Enable ENG HK not torque")
oce.add(OpCode.ENABLE_ENG_HK_WITH_TORQUE, "Enable ENG HK with torque")
oce.add(OpCode.DISABLE_ENG_HK_NO_TORQUE, "Disable ENG HK not torque")
oce.add(OpCode.DISABLE_ENG_HK_WITH_TORQUE, "Disable ENG HK with torque")
oce.add(
OpCode.REQUEST_MGM_RAW_NO_TORQUE, "Request MGM Raw Without Torque HK One Shot"
)
oce.add(OpCode.ENABLE_MGM_RAW_NO_TORQUE, "Enable MGM Raw Without Torque HK")
oce.add(OpCode.DISABLE_MGM_RAW_NO_TORQUE, "Disable MGM Raw Without Torque HK")
oce.add(
OpCode.REQUEST_MGM_RAW_WITH_TORQUE, "Request MGM Raw With Torque HK One Shot"
)
oce.add(OpCode.ENABLE_MGM_RAW_WITH_TORQUE, "Enable MGM Raw With Torque HK")
oce.add(OpCode.DISABLE_MGM_RAW_WITH_TORQUE, "Disable MGM Raw With Torque HK")
oce.add(OpCode.POS_X_SELF_TEST, "IMTQ perform pos X self test")
oce.add(OpCode.NEG_X_SELF_TEST, "IMTQ perform neg X self test")
oce.add(OpCode.POS_Y_SELF_TEST, "IMTQ perform pos Y self test")
oce.add(OpCode.NEG_Y_SELF_TEST, "IMTQ perform neg Y self test")
oce.add(OpCode.POS_Z_SELF_TEST, "IMTQ perform pos Z self test")
oce.add(OpCode.NEG_Z_SELF_TEST, "IMTQ perform neg Z self test")
oce.add(OpCode.SET_DIPOLE, "IMTQ command dipole")
oce.add("10", "IMTQ get commanded dipole")
oce.add("11", "IMTQ get engineering hk set")
oce.add("12", "IMTQ get calibrated MTM measurement one shot")
oce.add("13", "IMTQ get raw MTM measurement one shot")
defs.add_service(CustomServiceList.IMTQ.value, "IMQT Device", oce)
def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
def create_imtq_command( # noqa C901
object_id: ObjectIdU32, q: DefaultPusQueueHelper, cmd_str: str
):
q.add_log_cmd(
f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}"
)
if op_code in OpCode.OFF:
if cmd_str == OpCode.OFF:
q.add_log_cmd("IMTQ: Set mode off")
command = pack_mode_data(object_id.as_bytes, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCode.ON:
if cmd_str == OpCode.ON:
q.add_log_cmd("IMTQ: Set mode on")
command = pack_mode_data(object_id.as_bytes, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCode.NORMAL:
if cmd_str == OpCode.NORMAL:
q.add_log_cmd("IMTQ: Mode Normal")
command = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "3":
if cmd_str == OpCode.POS_X_SELF_TEST:
q.add_log_cmd("IMTQ: Perform positive x self test")
command = object_id.as_bytes + ImtqActionId.perform_positive_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -110,7 +230,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "4":
if cmd_str == OpCode.NEG_X_SELF_TEST:
q.add_log_cmd("IMTQ: Perform negative x self test")
command = object_id.as_bytes + ImtqActionId.perform_negative_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -121,7 +241,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "5":
if cmd_str == OpCode.POS_Y_SELF_TEST:
q.add_log_cmd("IMTQ: Perform positive y self test")
command = object_id.as_bytes + ImtqActionId.perform_positive_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -133,7 +253,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "6":
if cmd_str == OpCode.NEG_Y_SELF_TEST:
q.add_log_cmd("IMTQ: Perform negative y self test")
command = object_id.as_bytes + ImtqActionId.perform_negative_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -146,7 +266,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "7":
if cmd_str == OpCode.POS_Z_SELF_TEST:
q.add_log_cmd("IMTQ: Perform positive z self test")
command = object_id.as_bytes + ImtqActionId.perform_positive_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -159,7 +279,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "8":
if cmd_str == OpCode.NEG_Z_SELF_TEST:
q.add_log_cmd("IMTQ: Perform negative z self test")
command = object_id.as_bytes + ImtqActionId.perform_negative_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@@ -170,19 +290,20 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Z_TEST)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCode.SET_DIPOLE:
if cmd_str in OpCode.SET_DIPOLE:
x_dipole = int(input("Specify X dipole [range [0, 2000] * 10^-4 * Am^2]: "))
y_dipole = int(input("Specify Y dipole [range [0, 2000] * 10^-4 * Am^2]: "))
z_dipole = int(input("Specify Z dipole [range [0, 2000] * 10^-4 * Am^2]: "))
duration = int(
input(
f"Specify torque duration [range [0, {pow(2, 16) - 1}, "
f"0 for continuous generation until update]: "
"0 for continuous generation until update]: "
)
)
dur_str = "infinite" if duration == 0 else str(duration)
q.add_log_cmd(
f"IMTQ: Commanding dipole X={x_dipole}, Y={y_dipole}, Z={y_dipole}, duration={dur_str}"
f"IMTQ: Commanding dipole X={x_dipole}, Y={y_dipole}, Z={y_dipole},"
f" duration={dur_str}"
)
q.add_pus_tc(
pack_dipole_command(
@@ -190,32 +311,124 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
)
)
if op_code == "10":
if cmd_str == "10": # doesnt seem to work anymore
q.add_log_cmd("IMTQ: Get commanded dipole")
command = object_id.as_bytes + ImtqActionId.get_commanded_dipole
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11":
q.add_log_cmd("IMTQ: Get engineering hk set")
if cmd_str == OpCode.ENABLE_ENG_HK_NO_TORQUE:
q.add_log_cmd("IMTQ: Enable ENG HK")
interval = float(input("Please enter collection interval in seconds: "))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=True,
sid=make_sid(object_id.as_bytes, ImtqSetId.ENG_HK_NO_TORQUE),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.DISABLE_ENG_HK_NO_TORQUE:
q.add_log_cmd("IMTQ: Disable ENG HK (No Torque)")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
True, make_sid(object_id.as_bytes, ImtqSetId.ENG_HK_NO_TORQUE)
)
)
if cmd_str == OpCode.REQUEST_ENG_HK_WITH_TORQUE:
q.add_log_cmd("IMTQ: Get engineering hk set with torque")
q.add_pus_tc(
create_request_one_diag_command(
sid=make_sid(
object_id=object_id.as_bytes,
set_id=ImtqSetId.ENG_HK_SET_WITH_TORQUE,
)
)
)
if cmd_str == OpCode.ENABLE_ENG_HK_WITH_TORQUE:
q.add_log_cmd("IMTQ: Enable ENG HK with torque")
interval = float(input("Please enter collection interval in seconds: "))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=True,
sid=make_sid(object_id.as_bytes, ImtqSetId.ENG_HK_SET_WITH_TORQUE),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.DISABLE_ENG_HK_WITH_TORQUE:
q.add_log_cmd("IMTQ: Disable ENG HK with Torque")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
True, make_sid(object_id.as_bytes, ImtqSetId.ENG_HK_SET_WITH_TORQUE)
)
)
if cmd_str == OpCode.REQUEST_ENG_HK_NO_TORQUE:
q.add_log_cmd("IMTQ: Get engineering hk set (no torque)")
q.add_pus_tc(
generate_one_diag_command(
sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.ENG_HK_SET)
sid=make_sid(
object_id=object_id.as_bytes, set_id=ImtqSetId.ENG_HK_NO_TORQUE
)
)
)
if op_code == "12":
if cmd_str == "12":
q.add_log_cmd("IMTQ: Get calibrated MTM hk set")
q.add_pus_tc(
generate_one_diag_command(
create_request_one_diag_command(
sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.CAL_MTM_SET)
)
)
if op_code == "13":
if cmd_str == OpCode.REQUEST_MGM_RAW_NO_TORQUE:
q.add_log_cmd("IMTQ: Get raw MTM hk set")
q.add_pus_tc(
generate_one_diag_command(
sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.RAW_MTM_SET)
create_request_one_diag_command(
sid=make_sid(
object_id=object_id.as_bytes, set_id=ImtqSetId.RAW_MTM_NO_TORQUE
)
)
)
if cmd_str == OpCode.DISABLE_MGM_RAW_NO_TORQUE:
q.add_log_cmd("IMTQ: Disable MGM RAW HK (No Torque)")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
True, make_sid(object_id.as_bytes, ImtqSetId.RAW_MTM_NO_TORQUE)
)
)
if cmd_str == OpCode.ENABLE_MGM_RAW_NO_TORQUE:
q.add_log_cmd("IMTQ: Enable MGM RAW HK (No Torque)")
interval = float(input("Please enter collection interval in seconds: "))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=True,
sid=make_sid(object_id.as_bytes, ImtqSetId.RAW_MTM_NO_TORQUE),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.REQUEST_MGM_RAW_WITH_TORQUE:
q.add_log_cmd("IMTQ: Get raw MTM hk set")
q.add_pus_tc(
create_request_one_diag_command(
sid=make_sid(
object_id=object_id.as_bytes, set_id=ImtqSetId.RAW_MTM_WITH_TORQUE
)
)
)
if cmd_str == OpCode.ENABLE_MGM_RAW_WITH_TORQUE:
q.add_log_cmd("IMTQ: Enable MGM RAW HK (No Torque)")
interval = float(input("Please enter collection interval in seconds: "))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
diag=True,
sid=make_sid(object_id.as_bytes, ImtqSetId.RAW_MTM_WITH_TORQUE),
interval_seconds=interval,
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str == OpCode.DISABLE_MGM_RAW_WITH_TORQUE:
q.add_log_cmd("IMTQ: Disable MGM RAW HK (No Torque)")
q.add_pus_tc(
create_disable_periodic_hk_command_with_diag(
True, make_sid(object_id.as_bytes, ImtqSetId.RAW_MTM_WITH_TORQUE)
)
)
@@ -246,7 +459,8 @@ def pack_dipole_command(
duration = int(round(duration))
if duration < 0 or duration > pow(2, 16) - 1:
raise ValueError(
f"Duration in ms of {duration} smaller than 0 or larger than allowed {pow(2, 16) - 1}"
f"Duration in ms of {duration} smaller than 0 or larger than allowed"
f" {pow(2, 16) - 1}"
)
command += struct.pack("!h", x_dipole)
command += struct.pack("!h", y_dipole)
@@ -258,10 +472,19 @@ def pack_dipole_command(
def raise_dipole_error(dipole_str: str, value: int):
raise ValueError(
f"{dipole_str} {value} negative or larger than maximum allowed 2000 * 10^-4*Am^2"
f"{dipole_str} {value} negative or larger than maximum allowed 2000 *"
" 10^-4*Am^2"
)
STATUS_HEADERS = [
"Status Byte Mode",
"Status Byte Error",
"Status Byte Config",
"Status Byte Uptime [s]",
]
ENG_HK_HEADERS = [
"Digital Voltage [mV]",
"Analog Voltage [mV]",
@@ -277,6 +500,52 @@ ENG_HK_HEADERS = [
]
def handle_imtq_hk(pw: PrintWrapper, hk_data: bytes, set_id: int):
if (set_id >= ImtqSetId.POSITIVE_X_TEST) and (set_id <= ImtqSetId.NEGATIVE_Z_TEST):
return handle_self_test_data(pw, hk_data)
elif set_id == ImtqSetId.ENG_HK_NO_TORQUE:
return handle_eng_set(pw, hk_data, False)
elif set_id == ImtqSetId.ENG_HK_SET_WITH_TORQUE:
return handle_eng_set(pw, hk_data, True)
elif set_id == ImtqSetId.CAL_MTM_SET:
return handle_calibrated_mtm_measurement(pw, hk_data)
elif set_id == ImtqSetId.RAW_MTM_NO_TORQUE:
return handle_raw_mtm_measurement(pw, hk_data, False)
elif set_id == ImtqSetId.RAW_MTM_WITH_TORQUE:
return handle_raw_mtm_measurement(pw, hk_data, True)
elif set_id == ImtqSetId.DIPOLES:
return handle_dipole_set(pw, hk_data)
elif set_id == ImtqSetId.STATUS_SET:
return handle_status_set(pw, hk_data)
else:
pw.wlog(
_LOGGER,
f"IMTQ handler HK reply with unknown or unimplemented set id {set_id}",
)
def unpack_status_set(hk_data: bytes) -> List:
status_mode = hk_data[0]
status_error = hk_data[1]
status_conf = hk_data[2]
status_uptime = struct.unpack("!I", hk_data[3:7])[0]
return [status_mode, status_error, status_conf, status_uptime]
def handle_dipole_set(pw: PrintWrapper, hk_data: bytes):
pw.dlog("Received iMTQ dipole set")
fmt_str = "!hhhH"
fmt_len = struct.calcsize(fmt_str)
(dipole_x, dipole_y, dipole_z, current_torque_duration) = struct.unpack(
fmt_str, hk_data[0:8]
)
pw.dlog(f"Dipole X: {dipole_x}")
pw.dlog(f"Dipole Y: {dipole_y}")
pw.dlog(f"Dipole Z: {dipole_z}")
pw.dlog(f"Current torque duration: {current_torque_duration}")
pw.dlog(get_validity_buffer_str(hk_data[fmt_len:], 2))
def unpack_eng_hk(hk_data: bytes) -> List:
digital_voltage = struct.unpack("!H", hk_data[0:2])[0]
analog_voltage = struct.unpack("!H", hk_data[2:4])[0]
@@ -305,19 +574,32 @@ def unpack_eng_hk(hk_data: bytes) -> List:
return content_list
def handle_eng_set(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
def handle_eng_set(pw: PrintWrapper, hk_data: bytes, torque_on: bool):
pw.dlog(f"Found engineering HK. Torque Status: {torque_on}")
content_list = unpack_eng_hk(hk_data)
validity_buffer = hk_data[32:]
num_of_vars = len(ENG_HK_HEADERS)
pw.dlog(str(ENG_HK_HEADERS))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars)
for k, v in zip(ENG_HK_HEADERS, content_list):
pw.dlog(f"{k.ljust(30)}: {v}")
pw.dlog(
get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=num_of_vars)
)
def handle_calibrated_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
def handle_status_set(pw: PrintWrapper, hk_data: bytes):
content_list = unpack_status_set(hk_data)
validity_buffer = hk_data[7:]
num_of_vars = 4
for k, v in zip(STATUS_HEADERS, content_list):
pw.dlog(f"{k.ljust(30)}: {v}")
pw.dlog(
get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=num_of_vars)
)
def handle_calibrated_mtm_measurement(pw: PrintWrapper, hk_data: bytes):
header_list = [
"Calibrated MTM X [nT]",
"Calibrated MTM Y [nT]",
@@ -333,11 +615,13 @@ def handle_calibrated_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes):
num_of_vars = len(header_list)
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars)
pw.dlog(
get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=num_of_vars)
)
def handle_raw_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
def handle_raw_mtm_measurement(pw: PrintWrapper, hk_data: bytes, torque_status: bool):
pw.dlog(f"Found raw MTM measurement. Torque Status: {torque_status}")
header_list = [
"Raw MTM X [nT]",
"Raw MTM Y [nT]",
@@ -353,11 +637,12 @@ def handle_raw_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes):
num_of_vars = 2
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars)
pw.dlog(
get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=num_of_vars)
)
def handle_self_test_data(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
def handle_self_test_data(pw: PrintWrapper, hk_data: bytes):
header_list = [
"Init Err",
"Init Raw Mag X [nT]",
@@ -461,7 +746,7 @@ def handle_self_test_data(printer: FsfwTmTcPrinter, hk_data: bytes):
init_coil_z_temperature,
err,
raw_mag_x,
init_raw_mag_y,
raw_mag_y,
raw_mag_z,
cal_mag_x,
cal_mag_y,
@@ -489,4 +774,6 @@ def handle_self_test_data(printer: FsfwTmTcPrinter, hk_data: bytes):
num_of_vars = len(header_list)
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars)
pw.dlog(
get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=num_of_vars)
)
+122
View File
@@ -0,0 +1,122 @@
import enum
import struct
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import CmdTreeNode, OpCodeEntry
import eive_tmtc.config.object_ids as obj_ids
from eive_tmtc.config.object_ids import (
MGM_0_LIS3_HANDLER_ID,
MGM_1_RM3100_HANDLER_ID,
MGM_2_LIS3_HANDLER_ID,
MGM_3_RM3100_HANDLER_ID,
)
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.config.tmtc import tmtc_definitions_provider, TmtcDefinitionWrapper
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
from tmtccmd.util import ObjectIdU32
class OpCode:
NORMAL = "normal"
OFF = "off"
class MgmLis3SetId(enum.IntEnum):
CORE_HK = 0
class MgmRm3100SetId(enum.IntEnum):
CORE_HK = 0
class MgmSel(enum.IntEnum):
MGM_0_LIS3 = 0
MGM_1_RM3100 = 1
MGM_2_LIS3 = 2
MGM_3_RM3100 = 3
MGM_SEL_DICT = {
MgmSel.MGM_0_LIS3: ("MGM_0_LIS3", MGM_0_LIS3_HANDLER_ID),
MgmSel.MGM_1_RM3100: ("MGM_1_RM3100", MGM_1_RM3100_HANDLER_ID),
MgmSel.MGM_2_LIS3: ("MGM_2_LIS3", MGM_2_LIS3_HANDLER_ID),
MgmSel.MGM_3_RM3100: ("MGM_3_RM3100", MGM_3_RM3100_HANDLER_ID),
}
def handle_mgm_cmd(q: DefaultPusQueueHelper, cmd_str: str):
print("Please select the MGM Device")
for k, v in MGM_SEL_DICT.items():
print(f"{k}: {v[0]}")
sel_idx = int(input("Select MGM device by index: "))
mgm_info = MGM_SEL_DICT[MgmSel(sel_idx)]
mgm_obj_id = mgm_info[1]
if cmd_str == OpCode.NORMAL:
q.add_log_cmd(f"Gyro {mgm_info[0]} NORMAL mode")
q.add_pus_tc(create_mode_command(mgm_obj_id, Mode.NORMAL, 0))
if cmd_str == OpCode.OFF:
q.add_log_cmd(f"Gyro {mgm_info[0]} OFF mode")
q.add_pus_tc(create_mode_command(mgm_obj_id, Mode.OFF, 0))
def handle_mgm_hk_data(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if object_id.as_bytes in [
obj_ids.MGM_0_LIS3_HANDLER_ID,
obj_ids.MGM_2_LIS3_HANDLER_ID,
]:
handle_mgm_lis3_hk_data(object_id, pw, set_id, hk_data)
elif object_id.as_bytes in [
obj_ids.MGM_1_RM3100_HANDLER_ID,
obj_ids.MGM_3_RM3100_HANDLER_ID,
]:
handle_mgm_rm3100_hk_data(object_id, pw, set_id, hk_data)
pass
def handle_mgm_lis3_hk_data(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if set_id == MgmLis3SetId.CORE_HK:
fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str)
(field_x, field_y, field_z, temp) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
pw.dlog(f"Received MGM LIS3 from object {object_id}")
pw.dlog(
f"Field strengths in micro Tesla X {field_x} | Y {field_y} | Z {field_z}"
)
pw.dlog(f"Temperature {temp} C")
def handle_mgm_rm3100_hk_data(
object_id: ObjectIdU32, pw: PrintWrapper, set_id: int, hk_data: bytes
):
if set_id == MgmRm3100SetId.CORE_HK:
fmt_str = "!fff"
inc_len = struct.calcsize(fmt_str)
(field_x, field_y, field_z) = struct.unpack(fmt_str, hk_data[0 : 0 + inc_len])
pw.dlog(f"Received MGM RM3100 from object {object_id}")
pw.dlog(
f"Field strengths in micro Tesla X {field_x} | Y {field_y} | Z {field_z}"
)
def create_mgms_node() -> CmdTreeNode:
node = CmdTreeNode("mgms", "Magnetometer devices")
node.add_child(CmdTreeNode(OpCode.NORMAL, "Normal Mode"))
node.add_child(CmdTreeNode(OpCode.OFF, "Off Mode"))
return node
@tmtc_definitions_provider
def add_mgm_cmd_defs(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.NORMAL, info="Normal Mode")
oce.add(keys=OpCode.OFF, info="Off Mode")
defs.add_service(CustomServiceList.MGMS, info="MGMs", op_code_entry=oce)
+111 -107
View File
@@ -4,37 +4,38 @@
@author J. Meier
@date 20.06.2021
"""
import enum
import struct
from typing import List
from typing import List, Tuple
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.config.object_ids import RW1_ID, RW2_ID, RW3_ID, RW4_ID
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
from tmtccmd.config import CmdTreeNode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.tc.s3_fsfw_hk import (
generate_one_hk_command,
generate_one_diag_command,
make_sid,
enable_periodic_hk_command_with_interval,
disable_periodic_hk_command,
)
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode, Subservice
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
class OpCodesDev:
SPEED = ["0", "speed"]
ON = ["1", "on"]
NML = ["2", "nml"]
OFF = ["3", "off"]
GET_STATUS = ["4", "status"]
GET_TM = ["5", "tm"]
ENABLE_STATUS_HK = ["6", "enable_status_hk"]
DISABLE_STATUS_HK = ["7", "disable_status_hk"]
SPEED = "speed"
ON = "on"
NML = "nml"
OFF = "off"
GET_STATUS = "status"
GET_TM = "get_tm_set"
REQ_TM = "req_tm_set"
ENABLE_STATUS_HK = "enable_status_hk"
DISABLE_STATUS_HK = "disable_status_hk"
class InfoDev:
@@ -44,16 +45,21 @@ class InfoDev:
OFF = "Set Off"
GET_STATUS = "Get Status HK"
GET_TM = "Get TM HK"
REQ_TM = "Request TM HK"
ENABLE_STATUS_HK = "Enable Status HK"
DISABLE_STATUS_HK = "Disable Status HK"
class OpCodesAss:
ON = ["0", "on"]
NML = ["1", "nml"]
OFF = ["2", "off"]
ALL_SPEED_UP = ["3", "speed_up"]
ALL_SPEED_OFF = ["4", "speed_off"]
ON = "on"
NML = "nml"
OFF = "off"
ALL_SPEED_UP = "speed_up"
ALL_SPEED_OFF = "speed_off"
class ActionId:
REQUEST_TM = 9
class InfoAss:
@@ -64,7 +70,7 @@ class InfoAss:
ALL_SPEED_OFF = "Speed down to 0"
class RwSetId:
class RwSetId(enum.IntEnum):
STATUS_SET_ID = 4
TEMPERATURE_SET_ID = 8
LAST_RESET = 2
@@ -91,54 +97,45 @@ class RampTime:
MS_1000 = 1000
@tmtc_definitions_provider
def add_rw_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(info=InfoDev.SPEED, keys=OpCodesDev.SPEED)
oce.add(info=InfoDev.ON, keys=OpCodesDev.ON)
oce.add(info=InfoDev.OFF, keys=OpCodesDev.OFF)
oce.add(info=InfoDev.NML, keys=OpCodesDev.NML)
oce.add(info=InfoDev.GET_STATUS, keys=OpCodesDev.GET_STATUS)
oce.add(info=InfoDev.GET_TM, keys=OpCodesDev.GET_TM)
oce.add(info=InfoDev.ENABLE_STATUS_HK, keys=OpCodesDev.ENABLE_STATUS_HK)
oce.add(info=InfoDev.DISABLE_STATUS_HK, keys=OpCodesDev.DISABLE_STATUS_HK)
defs.add_service(
name=CustomServiceList.REACTION_WHEEL_1.value,
info="Reaction Wheel 1",
op_code_entry=oce,
)
defs.add_service(
name=CustomServiceList.REACTION_WHEEL_2.value,
info="Reaction Wheel 2",
op_code_entry=oce,
)
defs.add_service(
name=CustomServiceList.REACTION_WHEEL_3.value,
info="Reaction Wheel 3",
op_code_entry=oce,
)
defs.add_service(
name=CustomServiceList.REACTION_WHEEL_4.value,
info="Reaction Wheel 4",
op_code_entry=oce,
)
oce = OpCodeEntry()
oce.add(info=InfoAss.ON, keys=OpCodesAss.ON)
oce.add(info=InfoAss.NML, keys=OpCodesAss.NML)
oce.add(info=InfoAss.OFF, keys=OpCodesAss.OFF)
oce.add(info=InfoAss.ALL_SPEED_UP, keys=OpCodesAss.ALL_SPEED_UP)
oce.add(info=InfoAss.ALL_SPEED_OFF, keys=OpCodesAss.ALL_SPEED_OFF)
defs.add_service(
name=CustomServiceList.RW_ASSEMBLY.value,
info="Reaction Wheel Assembly",
op_code_entry=oce,
)
def create_reaction_wheels_nodes() -> List[CmdTreeNode]:
nodes = []
for i in range(4):
next_node = CmdTreeNode(
f"rw_{i}", f"Reaction Wheel {i}", hide_children_which_are_leaves=True
)
next_node.add_child(CmdTreeNode(InfoDev.SPEED, OpCodesDev.SPEED))
next_node.add_child(CmdTreeNode(InfoDev.ON, OpCodesDev.ON))
next_node.add_child(CmdTreeNode(InfoDev.OFF, OpCodesDev.OFF))
next_node.add_child(CmdTreeNode(InfoDev.NML, OpCodesDev.NML))
next_node.add_child(CmdTreeNode(InfoDev.REQ_TM, OpCodesDev.REQ_TM))
next_node.add_child(CmdTreeNode(InfoDev.GET_STATUS, OpCodesDev.GET_STATUS))
next_node.add_child(CmdTreeNode(InfoDev.GET_TM, OpCodesDev.GET_TM))
next_node.add_child(
CmdTreeNode(InfoDev.ENABLE_STATUS_HK, OpCodesDev.ENABLE_STATUS_HK)
)
next_node.add_child(
CmdTreeNode(InfoDev.DISABLE_STATUS_HK, OpCodesDev.DISABLE_STATUS_HK)
)
nodes.append(next_node)
return nodes
def pack_single_rw_test_into(
object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str
def create_reaction_wheel_assembly_node() -> CmdTreeNode:
node = CmdTreeNode(
"rw_assy", "Reaction Wheels Assembly", hide_children_which_are_leaves=True
)
node.add_child(CmdTreeNode(OpCodesAss.ON, InfoAss.ON))
node.add_child(CmdTreeNode(OpCodesAss.NML, InfoAss.NML))
node.add_child(CmdTreeNode(OpCodesAss.OFF, InfoAss.OFF))
node.add_child(CmdTreeNode(OpCodesAss.ALL_SPEED_UP, InfoAss.ALL_SPEED_UP))
node.add_child(CmdTreeNode(OpCodesAss.ALL_SPEED_OFF, InfoAss.ALL_SPEED_OFF))
return node
def create_single_rw_cmd( # noqa C901: Complexity is okay here.
object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, cmd_str: str
):
if op_code in OpCodesDev.SPEED:
if cmd_str == OpCodesDev.SPEED:
speed, ramp_time = prompt_speed_ramp_time()
q.add_log_cmd(
f"RW {rw_idx}: {InfoDev.SPEED} with target "
@@ -146,36 +143,41 @@ def pack_single_rw_test_into(
)
q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time))
if op_code in OpCodesDev.ON:
if cmd_str == OpCodesDev.ON:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ON}")
mode_data = pack_mode_data(object_id, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDev.NML:
if cmd_str == OpCodesDev.NML:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.NML}")
mode_data = pack_mode_data(object_id, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDev.OFF:
if cmd_str == OpCodesDev.OFF:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.OFF}")
mode_data = pack_mode_data(object_id, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDev.GET_TM:
if cmd_str == OpCodesDev.GET_TM:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_TM}")
q.add_pus_tc(
generate_one_hk_command(
sid=make_sid(object_id=object_id, set_id=RwSetId.TM_SET)
)
)
if op_code in OpCodesDev.GET_STATUS:
if cmd_str == OpCodesDev.REQ_TM:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.REQ_TM}")
q.add_pus_tc(
create_action_cmd(object_id=object_id, action_id=ActionId.REQUEST_TM)
)
if cmd_str == OpCodesDev.GET_STATUS:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_STATUS}")
q.add_pus_tc(
generate_one_diag_command(
sid=make_sid(object_id=object_id, set_id=RwSetId.STATUS_SET_ID)
)
)
if op_code in OpCodesDev.ENABLE_STATUS_HK:
if cmd_str == OpCodesDev.ENABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ENABLE_STATUS_HK}")
interval = float(input("Please enter HK interval in floating point seconds: "))
cmds = enable_periodic_hk_command_with_interval(
@@ -183,7 +185,7 @@ def pack_single_rw_test_into(
)
for cmd in cmds:
q.add_pus_tc(cmd)
if op_code in OpCodesDev.DISABLE_STATUS_HK:
if cmd_str == OpCodesDev.DISABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDev.DISABLE_STATUS_HK}")
q.add_pus_tc(
disable_periodic_hk_command(
@@ -192,38 +194,38 @@ def pack_single_rw_test_into(
)
def pack_rw_ass_cmds(q: DefaultPusQueueHelper, object_id: bytes, op_code: str):
if op_code in OpCodesAss.OFF:
def pack_rw_ass_cmds(q: DefaultPusQueueHelper, object_id: bytes, cmd_str: str):
if cmd_str in OpCodesAss.OFF:
data = pack_mode_data(object_id=object_id, mode=Mode.OFF, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
)
)
if op_code in OpCodesAss.ON:
if cmd_str in OpCodesAss.ON:
data = pack_mode_data(object_id=object_id, mode=Mode.ON, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
)
)
if op_code in OpCodesAss.NML:
if cmd_str in OpCodesAss.NML:
data = pack_mode_data(object_id=object_id, mode=Mode.NORMAL, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
)
)
if op_code in OpCodesAss.ALL_SPEED_UP:
if cmd_str in OpCodesAss.ALL_SPEED_UP:
speed, ramp_time = prompt_speed_ramp_time()
rw_speed_up_cmd_consec(q, [RW1_ID, RW2_ID, RW3_ID, RW4_ID], speed, ramp_time)
if op_code in OpCodesAss.ALL_SPEED_OFF:
if cmd_str in OpCodesAss.ALL_SPEED_OFF:
rw_speed_down_cmd_consec(
q, [RW1_ID, RW2_ID, RW3_ID, RW4_ID], prompt_ramp_time()
)
def prompt_speed_ramp_time() -> (int, int):
def prompt_speed_ramp_time() -> Tuple[int, int]:
speed = int(
input("Specify speed [0.1 RPM, 0 or range [-65000, -1000] and [1000, 65000]: ")
)
@@ -247,14 +249,12 @@ def pack_set_speed_command(
if speed > 0:
if speed < 1000 or speed > 65000:
raise ValueError(
"Invalid RW speed specified. "
"Allowed range is [1000, 65000] 0.1 * RPM"
"Invalid RW speed specified. Allowed range is [1000, 65000] 0.1 * RPM"
)
elif speed < 0:
if speed < -65000 or speed > -1000:
raise ValueError(
"Invalid RW speed specified. "
"Allowed range is [-65000, -1000] 0.1 * RPM"
"Invalid RW speed specified. Allowed range is [-65000, -1000] 0.1 * RPM"
)
else:
# Speed is 0
@@ -274,10 +274,8 @@ def pack_set_speed_command(
def handle_rw_hk_data(
printer: FsfwTmTcPrinter, object_id: ObjectIdU32, set_id: int, hk_data: bytes
pw: PrintWrapper, object_id: ObjectIdU32, set_id: int, hk_data: bytes
):
pw = PrintWrapper(printer)
current_idx = 0
if set_id == RwSetId.STATUS_SET_ID:
pw.dlog(
@@ -292,17 +290,18 @@ def handle_rw_hk_data(
speed_rpm = speed / 10.0
ref_speed_rpm = ref_speed / 10.0
pw.dlog(
f"Temperature {temp} C | Speed {speed_rpm} rpm | Reference Speed {ref_speed_rpm} rpm"
f"Temperature {temp} C | Speed {speed_rpm} rpm | Reference Speed"
f" {ref_speed_rpm} rpm"
)
pw.dlog(
f"State {state}. 0: Error, 1: Idle, 2: Coasting, 3: Running, speed stable, "
f"4: Running, speed changing"
"4: Running, speed changing"
)
pw.dlog(
f"Current Limit Control mode {clc_mode}. 0: Low Current Mode (0.3 A), "
f"1: High Current Mode (0.6 A)"
"1: High Current Mode (0.6 A)"
)
printer.print_validity_buffer(hk_data[current_idx:], 5)
pw.dlog(get_validity_buffer_str(hk_data[current_idx:], 5))
if set_id == RwSetId.LAST_RESET:
pw.dlog(
f"Received Last Reset HK (ID {set_id}) from Reaction Wheel {object_id.name}"
@@ -349,22 +348,24 @@ def handle_rw_hk_data(
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
pw.dlog(
f"MCU Temperature {mcu_temp} | Pressure Sensore Temperature {pressure_sens_temp} C"
f"MCU Temperature {mcu_temp} | Pressure Sensore Temperature"
f" {pressure_sens_temp} C"
)
pw.dlog(f"Last Reset Status {last_reset_status}")
pw.dlog(
f"Current Limit Control mode {clc_mode}. 0: Low Current Mode (0.3 A), "
f"1: High Current Mode (0.6 A)"
"1: High Current Mode (0.6 A)"
)
pw.dlog(f"Speed {current_speed} rpm | Reference Speed {ref_speed} rpm")
pw.dlog(
f"State {state}. 0: Error, 1: Idle, 2: Coasting, 3: Running, speed stable, "
f"4: Running, speed changing"
"4: Running, speed changing"
)
pw.dlog(f"Number Of Invalid Packets:")
pw.dlog("Number Of Invalid Packets:")
pw.dlog("CRC | Length | CMD")
pw.dlog(
f"{num_invalid_crc_packets} | {num_invalid_len_packets} | {num_invalid_cmd_packets}"
f"{num_invalid_crc_packets} | {num_invalid_len_packets} |"
f" {num_invalid_cmd_packets}"
)
pw.dlog(
f"Num Of CMD Executed Requests {num_of_cmd_executed_requests} | "
@@ -372,23 +373,26 @@ def handle_rw_hk_data(
)
pw.dlog("UART COM information:")
pw.dlog(
f"NumBytesWritten | NumBytesRead | ParityErrs | NoiseErrs | FrameErrs | "
f"RegOverrunErrs | TotalErrs"
"NumBytesWritten | NumBytesRead | ParityErrs | NoiseErrs | FrameErrs | "
"RegOverrunErrs | TotalErrs"
)
pw.dlog(
f"{uart_num_of_bytes_written} | {uart_num_of_bytes_read} | {uart_num_parity_errors} | "
f"{uart_num_noise_errors} | {uart_num_frame_errors} | {uart_num_reg_overrun_errors} | "
f"{uart_total_num_errors}"
f"{uart_num_of_bytes_written} | {uart_num_of_bytes_read} |"
f" {uart_num_parity_errors} | {uart_num_noise_errors} |"
f" {uart_num_frame_errors} | {uart_num_reg_overrun_errors} |"
f" {uart_total_num_errors}"
)
pw.dlog("SPI COM Info:")
pw.dlog(f"NumBytesWritten | NumBytesRead | RegOverrunErrs | TotalErrs")
pw.dlog("NumBytesWritten | NumBytesRead | RegOverrunErrs | TotalErrs")
pw.dlog(
f"{spi_num_bytes_written} | {spi_num_bytes_read} | {spi_num_reg_overrun_errors} | "
f"{spi_total_num_errors}"
f"{spi_num_bytes_written} | {spi_num_bytes_read} |"
f" {spi_num_reg_overrun_errors} | {spi_total_num_errors}"
)
if current_idx > 0:
printer.print_validity_buffer(
validity_buffer=hk_data[current_idx:], num_vars=27
pw.dlog(
get_validity_buffer_str(
validity_buffer=hk_data[current_idx:], num_vars=27
)
)
File diff suppressed because it is too large Load Diff
@@ -4,14 +4,15 @@
@brief Commanding of the star tracker image helper object which is responsible for uploading
and downloading images to/from the star tracker.
@details Images to uplaod must be previously transferred to the OBC with the CFDP protocol.
Also downloaded images will be stored on the filesystem of the OBC and can be transferred via CFDP.
Also downloaded images will be stored on the filesystem of the OBC and can be
transferred via CFDP.
@author J. Meier
@date 29.11.2021
"""
import struct
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
+80
View File
@@ -0,0 +1,80 @@
import enum
from typing import Dict, Tuple
from spacepackets.ecss import PusTelecommand
from tmtccmd.config.tmtc import (
CmdTreeNode,
)
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservices
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.config.object_ids import ACS_SUBSYSTEM_ID
from eive_tmtc.tmtc.acs.defs import AcsMode, SafeSubmode
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
class CmdStr(str, enum.Enum):
OFF = "off"
SAFE = "safe"
DETUMBLE = "detumble"
IDLE = "idle"
PTG_TARGET = "ptg_target"
PTG_TARGET_NADIR = "ptg_nadir"
PTG_TARGET_GS = "ptg_target_gs"
PTG_TARGET_INERTIAL = "ptg_inertial"
REPORT_ALL_MODES = "all_modes"
class Info(str, enum.Enum):
OFF = "Off Command"
SAFE = "Safe Mode Command"
DETUMBLE = "Detumble Mode Command"
IDLE = "Idle Mode Command"
PTG_TARGET_NADIR = "Target Pointing Nadir"
PTG_TARGET = "Target Pointing"
PTG_TARGET_GS = "Target Pointing Ground Station"
PTG_TARGET_INERTIAL = "Target Pointing Inertial"
REPORT_ALL_MODES = "Report All Modes Recursively"
HANDLER_LIST: Dict[str, Tuple[int, int, str]] = {
CmdStr.OFF: (AcsMode.OFF, 0, Info.OFF),
CmdStr.SAFE: (AcsMode.SAFE, SafeSubmode.DEFAULT, Info.SAFE),
CmdStr.DETUMBLE: (AcsMode.SAFE, SafeSubmode.DETUMBLE, Info.DETUMBLE),
CmdStr.IDLE: (AcsMode.IDLE, 0, Info.IDLE),
CmdStr.PTG_TARGET: (AcsMode.PTG_TARGET, 0, Info.PTG_TARGET),
CmdStr.PTG_TARGET_GS: (AcsMode.PTG_TARGET_GS, 0, Info.PTG_TARGET_GS),
CmdStr.PTG_TARGET_NADIR: (AcsMode.PTG_NADIR, 0, Info.PTG_TARGET_NADIR),
CmdStr.PTG_TARGET_INERTIAL: (AcsMode.PTG_INERTIAL, 0, Info.PTG_TARGET_INERTIAL),
}
def build_acs_subsystem_cmd(q: DefaultPusQueueHelper, cmd_path: str):
info_prefix = "ACS Subsystem"
if cmd_path in CmdStr.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=ModeSubservices.TC_MODE_ANNOUNCE_RECURSIVE,
app_data=ACS_SUBSYSTEM_ID,
)
)
mode_info_tup = HANDLER_LIST.get(cmd_path)
if mode_info_tup is None:
return
pack_mode_cmd_with_info(
object_id=ACS_SUBSYSTEM_ID,
info=f"{info_prefix}: {mode_info_tup[2]}",
mode=mode_info_tup[0],
submode=mode_info_tup[1],
q=q,
)
def create_acs_subsystem_node() -> CmdTreeNode:
node = CmdTreeNode("acs", "ACS Subsystem", hide_children_which_are_leaves=True)
for cmd_str, (_, _, info) in HANDLER_LIST.items():
node.add_child(CmdTreeNode(cmd_str, info))
node.add_child(CmdTreeNode(CmdStr.REPORT_ALL_MODES, Info.REPORT_ALL_MODES))
return node
@@ -1,15 +1,18 @@
import enum
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.sus import SetId
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
class SetId(enum.IntEnum):
HK = 3
def handle_sus_hk(
object_id: ObjectIdU32, hk_data: bytes, printer: FsfwTmTcPrinter, set_id: int
object_id: ObjectIdU32, hk_data: bytes, pw: PrintWrapper, set_id: int
):
pw = PrintWrapper(printer)
pw.dlog(f"Received SUS HK data from {object_id}")
if set_id == SetId.HK:
current_idx = 0
@@ -20,7 +23,9 @@ def handle_sus_hk(
channels.append(struct.unpack("!H", hk_data[current_idx : current_idx + 2]))
current_idx += 2
pw.dlog(f"Temperature: {temperature} C")
pw.dlog(f"AIN Channel | Raw Value (hex) | Raw Value (dec)")
pw.dlog("AIN Channel | Raw Value (hex) | Raw Value (dec)")
for idx, val in enumerate(channels):
pw.dlog(f"{idx} | {val[0]:#06x} |" + str(val[0]).ljust(5))
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=7)
pw.dlog(
get_validity_buffer_str(validity_buffer=hk_data[current_idx:], num_vars=7)
)
+20 -41
View File
@@ -1,22 +1,19 @@
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
CmdTreeNode,
)
from tmtccmd.pus.s200_fsfw_mode import Mode
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.config.object_ids import SUS_BOARD_ASS_ID
from eive_tmtc.tmtc.acs.acs_board import DualSideSubmode
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Mode
class SusOpCode:
SUS_ASS_NOM_SIDE = ["0", "nom"]
SUS_ASS_RED_SIDE = ["1", "red"]
SUS_ASS_DUAL_MODE = ["2", "dual"]
SUS_ASS_OFF = ["3", "off"]
SUS_ASS_NOM_SIDE = "nom"
SUS_ASS_RED_SIDE = "red"
SUS_ASS_DUAL_MODE = "dual"
SUS_ASS_OFF = "off"
def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str):
@@ -54,34 +51,16 @@ def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str):
)
@service_provider(CustomServiceList.SUS_BRD_ASS)
def pack_sus_cmds_prvoider(p: ServiceProviderParams):
op_code = p.op_code
q = p.queue_helper
pack_sus_cmds(q, op_code)
@tmtc_definitions_provider
def add_sus_board_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(
keys=SusOpCode.SUS_ASS_NOM_SIDE,
info="Switch SUS board to nominal side",
def create_sus_board_node() -> CmdTreeNode:
node = CmdTreeNode("sus_brd_assy", "SUS board assembly")
node.add_child(
CmdTreeNode(SusOpCode.SUS_ASS_RED_SIDE, "Switch SUS board to nominal side")
)
oce.add(
keys=SusOpCode.SUS_ASS_RED_SIDE,
info="Switch SUS board to redundant side",
node.add_child(
CmdTreeNode(SusOpCode.SUS_ASS_RED_SIDE, "Switch SUS board to redundant side")
)
oce.add(
keys=SusOpCode.SUS_ASS_OFF,
info="Switch off SUS board",
)
oce.add(
keys=SusOpCode.SUS_ASS_DUAL_MODE,
info="Switch SUS board to dual mode",
)
defs.add_service(
name=CustomServiceList.SUS_BRD_ASS.value,
info="SUS Board Assembly",
op_code_entry=oce,
node.add_child(CmdTreeNode(SusOpCode.SUS_ASS_OFF, "Switch SUS board off"))
node.add_child(
CmdTreeNode(SusOpCode.SUS_ASS_DUAL_MODE, "Switch SUS board to dual mode")
)
return node
View File
+146
View File
@@ -0,0 +1,146 @@
# -*- coding: utf-8 -*-
"""
@file ccsds_handler.py
@brief Test commanding of CCSDS Handler
@author J. Meier
@date 20.11.2021
"""
import enum
import struct
from tmtccmd.config import CmdTreeNode
from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
OpCodeEntry,
TmtcDefinitionWrapper,
)
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
from tmtccmd.util import ObjectIdU32
class ActionId(enum.IntEnum):
# Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps)
# SET_LOW_RATE = 0
# Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps)
# SET_HIGH_RATE = 1
# Enables the syrlinks transmitter (by using RS485 enables lines). Please note that this
# is a legacy command. It is recommended to use mode commands instead
EN_TRANSMITTER = 2
# Disables the syrlinks transmitter (by using RS485 enables lines). Please note that this is
# a legacy command. It is recommended to use mode commands instead.
DIS_TRANSMITTER = 3
# Sets an arbitrary bitrate. Normally only set low and set high rate commands should be
# required
ARBITRARY_BITRATE = 4
ENABLE_TX_CLK_MANIPULATOR = 5
DISABLE_TX_CLK_MANIPULATOR = 6
# Tx data will be updated on rising edge of tx clock
UPDATE_ON_RISING_EDGE = 7
# Tx data will be updated on falling edge of tx clock
UPDATE_ON_FALLING_EDGE = 8
class Submode(enum.IntEnum):
# Informative, do not command this.
UNSET = 0
DATARATE_LOW = 1
DATARATE_HIGH = 2
DATARATE_DEFAULT = 3
class OpCode:
ENABLE_WITH_LOW_DATARATE = "enable_low_datarate"
ENABLE_WITH_HIGH_DATARATE = "enable_high_datarate"
DISABLE = "disable"
ENABLE_ACTION = "legacy_enable_tx"
DISABLE_ACTION = "legacy_disable_tx"
class Info:
ENABLE_WITH_LOW_DATARATE = "Enable TX with low datarate"
ENABLE_WITH_HIGH_DATARATE = "Enable TX with high datarate"
DISABLE = "Disable TX"
ENABLE_ACTION = "Enable TX (legacy)"
DISABLE_ACTION = "Disable TX (legacy)"
def pack_ccsds_handler_command( # noqa C901
object_id: ObjectIdU32, q: DefaultPusQueueHelper, cmd_str: str
):
obyt = object_id.as_bytes
prefix = "CCSDS Handler"
q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}")
if cmd_str in OpCode.ENABLE_WITH_LOW_DATARATE:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_WITH_LOW_DATARATE}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, Submode.DATARATE_LOW))
if cmd_str in OpCode.ENABLE_WITH_HIGH_DATARATE:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_WITH_HIGH_DATARATE}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, Submode.DATARATE_HIGH))
if cmd_str in OpCode.DISABLE:
q.add_log_cmd(f"{prefix}: {Info.DISABLE}")
q.add_pus_tc(create_mode_command(obyt, Mode.OFF, 0))
if cmd_str in OpCode.ENABLE_ACTION:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_ACTION}")
command = obyt + struct.pack("!I", ActionId.EN_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str in OpCode.DISABLE_ACTION:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_ACTION}")
command = obyt + struct.pack("!I", ActionId.DIS_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "4":
q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): "))
command = (
obyt
+ struct.pack("!I", ActionId.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "5":
q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator")
command = obyt + struct.pack("!I", ActionId.ENABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "6":
q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator")
command = obyt + struct.pack("!I", ActionId.DISABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "7":
q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock")
command = obyt + struct.pack("!I", ActionId.UPDATE_ON_RISING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "8":
q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock")
command = obyt + struct.pack("!I", ActionId.UPDATE_ON_FALLING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def create_ccsds_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("ccsds", "CCSDS Handler", hide_children_for_print=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
@tmtc_definitions_provider
def add_ccsds_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.ENABLE_WITH_LOW_DATARATE, Info.ENABLE_WITH_LOW_DATARATE)
oce.add(OpCode.ENABLE_WITH_HIGH_DATARATE, Info.ENABLE_WITH_HIGH_DATARATE)
oce.add(OpCode.DISABLE, Info.DISABLE)
oce.add(OpCode.ENABLE_ACTION, Info.ENABLE_ACTION)
oce.add(OpCode.DISABLE_ACTION, Info.DISABLE_ACTION)
oce.add("4", "CCSDS Handler: Set arbitrary bitrate")
oce.add("5", "CCSDS Handler: Enable tx clock manipulator")
oce.add("6", "CCSDS Handler: Disable tx clock manipulator")
oce.add("7", "CCSDS Handler: Update tx data on rising edge")
oce.add("8", "CCSDS Handler: Update tx data on falling edge")
defs.add_service(CustomServiceList.CCSDS_HANDLER.value, "CCSDS Handler", oce)
+10
View File
@@ -0,0 +1,10 @@
import enum
class Mode(enum.IntEnum):
NONE = 0
RX_ONLY = 10
RX_AND_TX_DEF_DATARATE = 11
RX_AND_TX_LOW_DATARATE = 12
RX_AND_TX_HIGH_DATARATE = 13
RX_AND_TX_CARRIER_WAVE = 14
+125
View File
@@ -0,0 +1,125 @@
# -*- coding: utf-8 -*-
"""
@file pdec_handler.py
@brief Test commanding of PDEC Handler
@author J. Meier
@date 22.11.2021
"""
import enum
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s20_fsfw_param import create_load_param_cmd
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
from tmtccmd.pus.s20_fsfw_param_defs import create_scalar_u8_parameter
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from eive_tmtc.config.definitions import CustomServiceList
class CommandId:
# prints the clcw to the console. Useful for debugging
PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0])
# Print PDEC monitor register
PRINT_PDEC_MON = bytearray([0x0, 0x0, 0x0, 0x1])
class ParameterId(enum.IntEnum):
POSITIVE_WINDOW = 0
NEGATIVE_WINDOW = 1
class ActionId(enum.IntEnum):
RESET_NO_INIT = 2
RESET_WITH_INIT = 3
class OpCode:
PRINT_CLCW = "print_clcw"
PRINT_MON_REG = "print_mon_reg"
POSITIVE_WINDOW = "positive_window"
NEGATIVE_WINDOW = "negative_window"
RESET_WITH_INIT = "reset_with_init"
RESET_NO_INIT = "reset_no_init"
class Info:
PRINT_CLCW = "Will cause the OBSW to print the current CLCW to the debug console"
PRINT_MON_REG = (
"Will cause the OBSW to print the PDEC monitor register to the console"
)
POSITIVE_WINDOW = "Change positive window parameter for AD frames"
NEGATIVE_WINDOW = "Change negative window parameter for AD frames"
RESET_WITH_INIT = "Reset with full initialization"
RESET_NO_INIT = "Reset with mandatory initialization"
def pack_pdec_handler_commands(
object_id: bytes, q: DefaultPusQueueHelper, cmd_str: str
):
q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}")
prefix = "PDEC Handler "
if cmd_str == OpCode.PRINT_CLCW:
q.add_log_cmd(f"{prefix}: {Info.PRINT_CLCW}")
command = object_id + CommandId.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == OpCode.PRINT_MON_REG:
q.add_log_cmd(f"{prefix}: {Info.PRINT_MON_REG}")
command = object_id + CommandId.PRINT_PDEC_MON
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == OpCode.POSITIVE_WINDOW:
q.add_log_cmd(f"{prefix}: {Info.POSITIVE_WINDOW}")
pw = int(input("Specify positive window to set: "))
q.add_pus_tc(
create_load_param_cmd(
parameter=create_scalar_u8_parameter(
object_id,
0,
ParameterId.POSITIVE_WINDOW,
pw,
),
apid=0,
)
)
if cmd_str == OpCode.NEGATIVE_WINDOW:
q.add_log_cmd(f"{prefix}: {Info.NEGATIVE_WINDOW}")
nw = int(input("Specify negative window to set: "))
q.add_pus_tc(
create_load_param_cmd(
parameter=create_scalar_u8_parameter(
object_id,
0,
ParameterId.NEGATIVE_WINDOW,
nw,
),
apid=0,
)
)
if cmd_str == OpCode.RESET_NO_INIT:
q.add_log_cmd(f"{prefix}: {Info.RESET_NO_INIT}")
q.add_pus_tc(
create_action_cmd(object_id=object_id, action_id=ActionId.RESET_NO_INIT)
)
if cmd_str == OpCode.RESET_WITH_INIT:
q.add_log_cmd(f"{prefix}: {Info.RESET_WITH_INIT}")
q.add_pus_tc(
create_action_cmd(object_id=object_id, action_id=ActionId.RESET_WITH_INIT)
)
@tmtc_definitions_provider
def add_pdec_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.PRINT_CLCW, Info.PRINT_CLCW)
oce.add(OpCode.PRINT_MON_REG, Info.PRINT_MON_REG)
oce.add(OpCode.POSITIVE_WINDOW, Info.POSITIVE_WINDOW)
oce.add(OpCode.NEGATIVE_WINDOW, Info.NEGATIVE_WINDOW)
oce.add(OpCode.RESET_WITH_INIT, Info.RESET_WITH_INIT)
oce.add(OpCode.RESET_NO_INIT, Info.RESET_NO_INIT)
defs.add_service(CustomServiceList.PDEC_HANDLER.value, "PDEC Handler", oce)
+140
View File
@@ -0,0 +1,140 @@
import enum
from tmtccmd.config.tmtc import (
CmdTreeNode,
)
from tmtccmd.pus.s20_fsfw_param import (
create_load_param_cmd,
create_scalar_u32_parameter,
)
from tmtccmd.pus.s20_fsfw_param_defs import create_scalar_u8_parameter
from tmtccmd.pus.s200_fsfw_mode import (
create_announce_mode_command,
create_announce_mode_recursive_command,
create_mode_command,
create_read_mode_command,
)
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.config.object_ids import COM_SUBSYSTEM_ID
from eive_tmtc.tmtc.com.syrlinks_handler import Datarate
from .defs import Mode as ComMode
class ParameterId(enum.IntEnum):
DATARATE = 0
TRANSMITTER_TIMEOUT = 1
class OpCode:
RX_ONLY = "rx_only"
TX_AND_RX_DEF_RATE = "rx_and_tx_default_rate"
TX_AND_RX_LOW_RATE = "rx_and_tx_low_rate"
TX_AND_RX_HIGH_RATE = "rx_and_tx_high_rate"
TX_AND_RX_CARRIER_WAVE = "rx_and_tx_carrier_wave"
UPDATE_DEFAULT_DATARATE_LOW = "update_default_rate_low"
UPDATE_DEFAULT_DATARATE_HIGH = "update_default_rate_high"
CHANGE_TRANSMITTER_TIMEOUT = "change_transmitter_timeout"
READ_MODE = "read_mode"
ANNOUNCE_MODE = "announce_mode"
ANNOUNCE_MODE_RECURSIVE = "announce_mode_recursive"
class Info:
RX_ONLY = "Syrlinks RX Only"
TX_AND_RX_DEF_RATE = "Syrlinks with TX default datarate"
TX_AND_RX_LOW_RATE = "Syrlinks with TX low datarate (BPSK modulation)"
TX_AND_RX_HIGH_RATE = "Syrlinks with TX high datarate (0QPSK modulation)"
TX_AND_RX_CARRIER_WAVE = "Syrlinks with TX carrier wave"
UPDATE_DEFAULT_DATARATE_LOW = "Configure default low datarate (BPSK modulation)"
UPDATE_DEFAULT_DATARATE_HIGH = "Configure default high datarate (0QPSK modulation)"
CHANGE_TRANSMITTER_TIMEOUT = "Changes the transmitter timeout"
READ_MODE = "Read Mode"
ANNOUNCE_MODE = "Announce Mode"
ANNOUNCE_MODE_RECURSIVE = "Announce mode recursively"
def build_com_subsystem_procedure(q: DefaultPusQueueHelper, cmd_str: str): # noqa C901
prefix = "COM Subsystem"
if cmd_str == OpCode.RX_ONLY:
q.add_log_cmd(Info.RX_ONLY)
q.add_pus_tc(create_mode_command(COM_SUBSYSTEM_ID, ComMode.RX_ONLY, 0))
elif cmd_str == OpCode.TX_AND_RX_DEF_RATE:
q.add_log_cmd(Info.TX_AND_RX_DEF_RATE)
q.add_pus_tc(
create_mode_command(COM_SUBSYSTEM_ID, ComMode.RX_AND_TX_DEF_DATARATE, 0)
)
elif cmd_str == OpCode.TX_AND_RX_LOW_RATE:
q.add_log_cmd(Info.TX_AND_RX_LOW_RATE)
q.add_pus_tc(
create_mode_command(COM_SUBSYSTEM_ID, ComMode.RX_AND_TX_LOW_DATARATE, 0)
)
elif cmd_str == OpCode.TX_AND_RX_HIGH_RATE:
q.add_log_cmd(Info.TX_AND_RX_HIGH_RATE)
q.add_pus_tc(
create_mode_command(COM_SUBSYSTEM_ID, ComMode.RX_AND_TX_HIGH_DATARATE, 0)
)
if cmd_str == OpCode.UPDATE_DEFAULT_DATARATE_LOW:
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_LOW}")
q.add_pus_tc(
create_load_param_cmd(
create_scalar_u8_parameter(
COM_SUBSYSTEM_ID,
0,
ParameterId.DATARATE,
Datarate.LOW_RATE_MODULATION_BPSK,
)
)
)
if cmd_str == OpCode.UPDATE_DEFAULT_DATARATE_HIGH:
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_HIGH}")
q.add_pus_tc(
create_load_param_cmd(
create_scalar_u8_parameter(
COM_SUBSYSTEM_ID,
0,
ParameterId.DATARATE,
Datarate.HIGH_RATE_MODULATION_0QPSK,
)
)
)
elif cmd_str == OpCode.TX_AND_RX_CARRIER_WAVE:
q.add_log_cmd(Info.TX_AND_RX_CARRIER_WAVE)
q.add_pus_tc(
create_mode_command(COM_SUBSYSTEM_ID, ComMode.RX_AND_TX_CARRIER_WAVE, 0)
)
elif cmd_str == OpCode.CHANGE_TRANSMITTER_TIMEOUT:
timeout = int(input("Specify timeout to set [ms]: "))
q.add_log_cmd(Info.CHANGE_TRANSMITTER_TIMEOUT)
q.add_pus_tc(
create_load_param_cmd(
create_scalar_u32_parameter(
COM_SUBSYSTEM_ID,
0,
ParameterId.TRANSMITTER_TIMEOUT,
timeout,
)
)
)
elif cmd_str == OpCode.READ_MODE:
q.add_log_cmd(Info.READ_MODE)
q.add_pus_tc(create_read_mode_command(COM_SUBSYSTEM_ID))
elif cmd_str == OpCode.ANNOUNCE_MODE:
q.add_log_cmd(Info.ANNOUNCE_MODE)
q.add_pus_tc(create_announce_mode_command(COM_SUBSYSTEM_ID))
elif cmd_str == OpCode.ANNOUNCE_MODE_RECURSIVE:
q.add_log_cmd(Info.ANNOUNCE_MODE_RECURSIVE)
q.add_pus_tc(create_announce_mode_recursive_command(COM_SUBSYSTEM_ID))
def create_com_subsystem_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("com", "COM Subsystem", hide_children_which_are_leaves=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
+516
View File
@@ -0,0 +1,516 @@
# -*- coding: utf-8 -*-
"""
@file syrlinks_hk_handler.py
@brief Syrlinks Hk Handler tests
@author J. Meier
@date 13.12.2020
"""
import enum
import logging
import math
import struct
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.config.tmtc import (
CmdTreeNode,
OpCodeEntry,
TmtcDefinitionWrapper,
tmtc_definitions_provider,
)
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
from tmtccmd.pus.s200_fsfw_mode import Mode, create_mode_command
from tmtccmd.pus.tc.s3_fsfw_hk import (
create_disable_periodic_hk_command_with_diag,
create_enable_periodic_hk_command_with_interval_with_diag,
create_request_one_diag_command,
create_request_one_hk_command,
make_sid,
)
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import SYRLINKS_HANDLER_ID
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tm.hk import HkTmInfo
from eive_tmtc.tmtc.com.defs import Mode as ComMode
class SetId(enum.IntEnum):
RX_REGISTERS_DATASET = 1
TX_REGISTERS_DATASET = 2
TEMPERATURE_SET_ID = 3
class OpCode:
OFF = "off"
ON = "on"
NORMAL_RX_ONLY = "nml_rx_only"
NORMAL_RX_AND_TX_CW = "nml_carrier_wave"
NORMAL_RX_AND_TX_DEF_DATARATE = "nml_default_datarate"
NORMAL_RX_AND_TX_LOW_DATARATE = "nml_low_datarate"
NORMAL_RX_AND_TX_HIGH_DATARATE = "nml_high_datarate"
HK_RX_REGS = "hk_rx_regs"
HK_TEMPS = "hk_temps"
ENABLE_HK_RX_REGS = "enable_hk_rx"
DISABLE_HK_RX_REGS = "disable_hk_rx"
ENABLE_HK_TX_REGS = "enable_hk_tx"
DISABLE_HK_TX_REGS = "disable_hk_tx"
HK_TX_REGS = "hk_tx_regs"
TX_STATUS = "tx_status"
RX_STATUS = "rx_status"
SET_CW = "tx_cw"
class Info:
OFF = "Switch OFF"
ON = "Switch ON"
NORMAL_RX_ONLY = "NORMAL RX Only, set TX to standby"
NORMAL_RX_AND_TX_CW = "NORMAL RX and TX, TX Carrier Wave"
NORMAL_RX_AND_TX_DEF_DATARATE = "NORMAL RX and TX, TX with default datarate"
NORMAL_RX_AND_TX_LOW_DATARATE = "NORMAL RX and TX, TX with low datarate"
NORMAL_RX_AND_TX_HIGH_DATARATE = "NORMAL RX and TX, TX with high datarate"
HK_RX_REGS = "Request RX register set"
HK_TX_REGS = "Request TX register set"
HK_TEMPS = "Request Temperatures HK"
ENABLE_HK_RX_REGS = "Enable periodic RX register HK"
DISABLE_HK_RX_REGS = "Disable periodic RX register HK"
ENABLE_HK_TX_REGS = "Enable periodic TX register HK"
DISABLE_HK_TX_REGS = "Disable periodic TX register HK"
TX_STATUS = "Read TX status (always read in normal mode)"
RX_STATUS = "Read RX status (always read in normal mode)"
SET_CW = "Set TX carrier wave"
class CommandId(enum.IntEnum):
READ_RX_STATUS_REGISTERS = 2
SET_TX_MODE_STANDBY = 3
SET_TX_MODE_MODULATION = 4
SET_TX_MODE_CW = 5
READ_TX_STATUS = 7
READ_TX_WAVEFORM = 8
READ_TX_AGC_VALUE_HIGH_BYTE = 9
READ_TX_AGC_VALUE_LOW_BYTE = 10
WRITE_LCL_CONFIG = 11
READ_LCL_CONFIG_REGISTER = 12
SET_WAVEFORM_OQPSK = 17
SET_WAVEFORM_BPSK = 18
SET_SECOND_CONFIG = 19
ENABLE_DEBUG = 20
DISABLE_DEBUG = 21
class Datarate(enum.IntEnum):
LOW_RATE_MODULATION_BPSK = 0
HIGH_RATE_MODULATION_0QPSK = 1
def create_syrlinks_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("syrlinks", "Syrlinks Device", hide_children_for_print=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
@tmtc_definitions_provider
def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCode.ON, Info.ON)
oce.add(OpCode.NORMAL_RX_ONLY, Info.NORMAL_RX_ONLY)
oce.add(OpCode.NORMAL_RX_AND_TX_CW, Info.NORMAL_RX_AND_TX_CW)
oce.add(OpCode.NORMAL_RX_AND_TX_DEF_DATARATE, Info.NORMAL_RX_AND_TX_DEF_DATARATE)
oce.add(OpCode.NORMAL_RX_AND_TX_LOW_DATARATE, Info.NORMAL_RX_AND_TX_LOW_DATARATE)
oce.add(OpCode.NORMAL_RX_AND_TX_HIGH_DATARATE, Info.NORMAL_RX_AND_TX_HIGH_DATARATE)
oce.add(OpCode.HK_RX_REGS, Info.HK_RX_REGS)
oce.add(OpCode.HK_TX_REGS, Info.HK_TX_REGS)
oce.add(OpCode.TX_STATUS, Info.TX_STATUS)
oce.add(OpCode.RX_STATUS, Info.RX_STATUS)
oce.add(OpCode.ENABLE_HK_RX_REGS, Info.ENABLE_HK_RX_REGS)
oce.add(OpCode.DISABLE_HK_RX_REGS, Info.DISABLE_HK_RX_REGS)
oce.add(OpCode.ENABLE_HK_TX_REGS, Info.ENABLE_HK_TX_REGS)
oce.add(OpCode.DISABLE_HK_TX_REGS, Info.DISABLE_HK_TX_REGS)
oce.add(OpCode.HK_TEMPS, Info.HK_TEMPS)
oce.add("7", "Syrlinks Handler: Read TX waveform")
oce.add("8", "Syrlinks Handler: Read TX AGC value high byte")
oce.add("9", "Syrlinks Handler: Read TX AGC value low byte")
oce.add("12", "Syrlinks Handler: Write LCL config")
oce.add("14", "Syrlinks Handler: Read LCL config register")
oce.add("15", "Syrlinks Handler: Set waveform OQPSK")
oce.add("16", "Syrlinks Handler: Set waveform BPSK")
oce.add("17", "Syrlinks Handler: Set second config")
oce.add("18", "Syrlinks Handler: Enable debug output")
oce.add("19", "Syrlinks Handler: Disable debug output")
defs.add_service(CustomServiceList.SYRLINKS.value, "Syrlinks Handler", oce)
_PREFIX = "Syrlinks"
def normal_mode_cmd(q: DefaultPusQueueHelper, info: str, submode: int):
q.add_log_cmd(f"{_PREFIX}: {info}")
q.add_pus_tc(create_mode_command(SYRLINKS_HANDLER_ID, Mode.NORMAL, submode))
def pack_syrlinks_command( # noqa C901: Complexity okay here.
object_id: ObjectIdU32, q: DefaultPusQueueHelper, cmd_str: str
):
obyt = object_id.as_bytes
prefix = "Syrlinks"
q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if cmd_str == OpCode.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}")
q.add_pus_tc(create_mode_command(obyt, Mode.OFF, 0))
if cmd_str == OpCode.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, ComMode.RX_ONLY))
if cmd_str == OpCode.NORMAL_RX_ONLY:
normal_mode_cmd(q, Info.NORMAL_RX_ONLY, ComMode.RX_ONLY)
if cmd_str == OpCode.NORMAL_RX_AND_TX_LOW_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_LOW_DATARATE, ComMode.RX_AND_TX_LOW_DATARATE
)
if cmd_str == OpCode.NORMAL_RX_AND_TX_DEF_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_DEF_DATARATE, ComMode.RX_AND_TX_DEF_DATARATE
)
if cmd_str == OpCode.NORMAL_RX_AND_TX_HIGH_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_HIGH_DATARATE, ComMode.RX_AND_TX_HIGH_DATARATE
)
if cmd_str in OpCode.NORMAL_RX_AND_TX_CW:
normal_mode_cmd(q, Info.NORMAL_RX_AND_TX_CW, ComMode.RX_AND_TX_CARRIER_WAVE)
if cmd_str in OpCode.HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(create_request_one_diag_command(sid))
if cmd_str in OpCode.HK_TEMPS:
q.add_log_cmd(f"{prefix}: {Info.HK_TEMPS}")
sid = make_sid(obyt, SetId.TEMPERATURE_SET_ID)
q.add_pus_tc(create_request_one_hk_command(sid))
if cmd_str in OpCode.ENABLE_HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
interval = float(input("HK interval in floating point seconds"))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
True, sid, interval
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str in OpCode.DISABLE_HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(create_disable_periodic_hk_command_with_diag(True, sid))
if cmd_str in OpCode.ENABLE_HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
interval = float(input("HK interval in floating point seconds"))
cmds = create_enable_periodic_hk_command_with_interval_with_diag(
True, sid, interval
)
for cmd in cmds:
q.add_pus_tc(cmd)
if cmd_str in OpCode.DISABLE_HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(create_disable_periodic_hk_command_with_diag(True, sid))
if cmd_str in OpCode.HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(create_request_one_diag_command(sid))
if cmd_str in OpCode.TX_STATUS:
q.add_log_cmd(f"{prefix}: {Info.TX_STATUS}")
command = obyt + struct.pack("!I", CommandId.READ_TX_STATUS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "9":
q.add_log_cmd("Syrlinks: Read TX waveform")
command = obyt + struct.pack("!I", CommandId.READ_TX_WAVEFORM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "10":
q.add_log_cmd("Syrlinks: Read TX AGC value high byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_HIGH_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "11":
q.add_log_cmd("Syrlinks: Read TX AGC value low byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_LOW_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "12":
q.add_log_cmd("Syrlinks: Write LCL config")
command = obyt + struct.pack("!I", CommandId.WRITE_LCL_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "13":
q.add_log_cmd("Syrlinks: Read RX status registers")
command = obyt + struct.pack("!I", CommandId.READ_RX_STATUS_REGISTERS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "14":
q.add_log_cmd("Syrlinks: Read LCL config register")
command = obyt + struct.pack("!I", CommandId.READ_LCL_CONFIG_REGISTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "15":
q.add_log_cmd("Syrlinks: Set waveform OQPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_OQPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "16":
q.add_log_cmd("Syrlinks: Set waveform BPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_BPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "17":
q.add_log_cmd("Syrlinks: Set second config")
command = obyt + struct.pack("!I", CommandId.SET_SECOND_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "18":
q.add_log_cmd("Syrlinks: Enable debug printout")
command = obyt + struct.pack("!I", CommandId.ENABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if cmd_str == "19":
q.add_log_cmd("Syrlinks: Disable debug printout")
command = obyt + struct.pack("!I", CommandId.DISABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def handle_syrlinks_hk_data(
hk_info: HkTmInfo,
pw: PrintWrapper,
):
if hk_info.set_id == SetId.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(hk_info, pw)
elif hk_info.set_id == SetId.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(hk_info, pw)
elif hk_info.set_id == SetId.TEMPERATURE_SET_ID:
return handle_syrlinks_temp_dataset(hk_info, pw)
else:
pw.dlog(
f"Service 3 TM: Syrlinks handler reply with unknown set ID {hk_info.set_id}"
)
def handle_syrlinks_temp_dataset(hk_info: HkTmInfo, pw: PrintWrapper):
hk_data = hk_info.hk_data
if len(hk_data) < 8:
raise ValueError("expected at least 8 bytes of HK data")
temp_power_amplifier = struct.unpack("!f", hk_data[0:4])[0]
temp_baseband_board = struct.unpack("!f", hk_data[4:8])[0]
pw.dlog(f"Temperatur Power Amplifier [C]: {temp_power_amplifier}")
pw.dlog(f"Temperatur Baseband Board [C]: {temp_baseband_board}")
pw.dlog(get_validity_buffer_str(hk_data[8:], 2))
def handle_syrlinks_rx_registers_dataset(
hk_info: HkTmInfo,
pw: PrintWrapper,
):
hk_data = hk_info.hk_data
header_list = [
"RX Status",
"RX Sensitivity",
"RX Frequency Shift",
"RX IQ Power",
"RX AGC Value (Raw)",
"RX Demod Eb",
"RX Demod N0",
"RX Datarate [kbps]",
]
rx_status = hk_data[0]
carrier_detect = rx_status & 0b1
carrier_lock = (rx_status >> 1) & 0b1
data_lock = (rx_status >> 2) & 0b1
data_valid = (rx_status >> 3) & 0b1
rx_sensitivity = struct.unpack("!I", hk_data[1:5])[0]
rx_frequency_shift = struct.unpack("!i", hk_data[5:9])[0]
freq_shift_hz = rx_frequency_shift / 8.0
freq_shift_printout = f"Raw: {rx_frequency_shift}, Eng: {freq_shift_hz} Hz"
rx_iq_power = struct.unpack("!H", hk_data[9:11])[0]
rx_agc_value = struct.unpack("!H", hk_data[11:13])[0]
rx_agc_inhibit = (rx_agc_value >> 15) & 0b1
rx_agc = rx_agc_value & 0xFFF
rx_demod_eb = struct.unpack("!I", hk_data[13:17])[0] & 0xFFFFFF
rx_demod_n0 = struct.unpack("!I", hk_data[17:21])[0] & 0xFFFFFF
if rx_demod_n0 > 0:
eb_to_n0 = 20 * math.log10(rx_demod_eb / rx_demod_n0) - 3
else:
logging.getLogger(__name__).warning(
"RX Demod N0 is 0, can not calculate Eb to N0"
)
eb_to_n0 = 0
rx_data_rate_raw = hk_data[21]
rx_data_rate = -1
if rx_data_rate_raw == 0:
rx_data_rate = 256
elif rx_data_rate_raw == 1:
rx_data_rate = 128
elif rx_data_rate_raw == 3:
rx_data_rate = 64
elif rx_data_rate_raw == 7:
rx_data_rate = 32
elif rx_data_rate_raw == 15:
rx_data_rate = 16
elif rx_data_rate_raw == 31:
rx_data_rate = 8
content_list = [
rx_status,
rx_sensitivity,
freq_shift_printout,
rx_iq_power,
rx_agc_value,
rx_demod_eb,
rx_demod_n0,
rx_data_rate,
]
validity_buffer = hk_data[22:]
for header, content in zip(header_list, content_list):
pw.dlog(f"{header}: {content}")
pw.dlog(get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=8))
print(f"Carrier Detect: {carrier_detect}")
print(f"Carrier Lock: {carrier_lock}")
print(f"Data Lock (data clock recovery loop lock status): {data_lock}")
print(f"Data Valid (valid if TEB < 10e-5): {data_valid}")
print(f"Data Lock (data clock recovery loop lock status): {data_lock}")
print(f"RX AGC Inhibit: {rx_agc_inhibit}")
print(f"RX AGC: {rx_agc}")
print(f"Eb / E0RX [dB]: {eb_to_n0}")
cursor = hk_info.db_con.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS syrlinks_rx_regs(
packet_uuid TEXT PRIMARY KEY,
generation_time TEXT,
carrier_detect NUM,
carrier_lock NUM,
data_lock NUM,
data_valid NUM,
rx_agc_inhibit NUM,
rx_agc NUM,
eb_to_e0_rx NUM
)"""
)
cursor.execute(
"INSERT INTO syrlinks_rx_regs VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)",
(
str(hk_info.packet_uuid),
hk_info.packet_datetime,
carrier_detect,
carrier_lock,
data_lock,
data_valid,
rx_agc_inhibit,
rx_agc,
eb_to_n0,
),
)
hk_info.db_con.commit()
class TxConv(enum.IntEnum):
NO_CODING = 0b000
VITERBI_HALF_G1G2INV = 0b010
VITERBI_HALF = 0b111
class TxStatus(enum.IntEnum):
NOT_AVAILABLE = 0b00
MODULATION = 0b01
CW = 0b10
STANDBY = 0b11
class TxCfgSet(enum.IntEnum):
START_WITH_CURRENT_CFG = 0b00
START_WITH_CONF_0 = 0b01
START_WITH_CONF_1 = 0b10
WAVEFORM_STRINGS = ["OFF", "CW", "QPSK", "0QPSK", "PCM/PM", "PSK/PM", "BPSK"]
def handle_syrlinks_tx_registers_dataset(
hk_info: HkTmInfo,
pw: PrintWrapper,
):
header_list = ["TX Status Raw", "TX Waveform", "TX AGC value"]
tx_status = hk_info.hk_data[0]
"""
try:
tx_conv = TxConv(tx_status & 0b111)
except ValueError:
logging.getLogger(__name__).warning(
f"invalid TX conv value {tx_status & 0b111}"
)
tx_conv = -1
tx_diff_encoder_enable = (tx_status >> 3) & 0b1
"""
tx_status_status = TxStatus(tx_status & 0b11)
try:
tx_conf_set = TxCfgSet((tx_status >> 2) & 0b11)
except ValueError:
logging.getLogger(__name__).warning(
f"invalid TX conf set {(tx_status >> 2) & 0b11}"
)
# Hack to make DB insertion work.
tx_conf_set = TxCfgSet.START_WITH_CURRENT_CFG
tx_clock_detect = (tx_status >> 4) & 0b1
tx_waveform = hk_info.hk_data[1]
waveform = tx_waveform & 0b1111
try:
waveform_str = WAVEFORM_STRINGS[waveform]
except IndexError:
logging.getLogger(__name__).warning(f"Unknown waveform value {waveform}")
waveform_str = "Unknown"
pcm_mode = (tx_waveform >> 4) & 0b1
tx_agc_value = struct.unpack("!H", hk_info.hk_data[2:4])[0]
tx_agc_inhibit = (tx_agc_value >> 15) & 0b1
tx_agc = tx_agc_value & 0xFFF
content_list = [tx_status, tx_waveform, tx_agc_value]
validity_buffer = hk_info.hk_data[4:]
for header, content in zip(header_list, content_list):
pw.dlog(f"{header}: {content}")
pw.dlog(get_validity_buffer_str(validity_buffer=validity_buffer, num_vars=3))
# pw.dlog(f"TX CONV: {tx_conv!r}")
# pw.dlog(f"TX DIFF (differential encoder enable): {tx_diff_encoder_enable}")
print(f"TX Status: {tx_status_status!r}")
print(f"TX Config Set: {tx_conf_set!r}")
print(f"TX Clock Detect: {tx_clock_detect}")
print(f"Waveform: {waveform_str}")
print(f"PCM Mode: {pcm_mode}")
print(f"TX AGC Inhibit: {tx_agc_inhibit}")
print(f"TX AGC: {tx_agc}")
cursor = hk_info.db_con.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS syrlinks_tx_regs(
packet_uuid TEXT PRIMARY KEY,
generation_time TEXT,
tx_status NUM,
tx_status_str TEXT,
tx_cfg_set NUM,
tx_cfg_set_str TEXT,
tx_clock_detect NUM,
waveform NUM,
waveform_str TEXT,
pcm_mode NUM,
tx_agc_inhibut NUM,
tx_agc NUM
)"""
)
cursor.execute(
"INSERT INTO syrlinks_tx_regs VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
(
str(hk_info.packet_uuid),
hk_info.packet_datetime,
tx_status_status,
tx_status_status.name,
tx_conf_set,
tx_conf_set.name,
tx_clock_detect,
waveform,
waveform_str,
pcm_mode,
tx_agc_inhibit,
tx_agc,
),
)
hk_info.db_con.commit()
+2 -2
View File
@@ -1,8 +1,8 @@
from typing import Union
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode, Subservice
from tmtccmd.util import ObjectIdU32
+482 -125
View File
@@ -1,37 +1,79 @@
import enum
import logging
import os
import struct
from pathlib import Path
from typing import Tuple
from spacepackets.ecss import PusTelecommand
from tmtccmd.config import CmdTreeNode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
from tmtccmd.pus.tc.s3_fsfw_hk import make_sid, generate_one_hk_command
from tmtccmd.pus.s20_fsfw_param import (
create_scalar_u8_parameter,
create_load_param_cmd,
)
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
from tmtccmd.pus.s11_tc_sched import (
create_enable_tc_sched_cmd,
create_disable_tc_sched_cmd,
)
from eive_tmtc.config.object_ids import CORE_CONTROLLER_ID
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper
_LOGGER = logging.getLogger(__name__)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.logging import get_console_logger
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
from eive_tmtc.config.object_ids import CORE_CONTROLLER_ID
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger()
class SdState(enum.IntEnum):
OFF = 0
ON = 1
MOUNTED = 2
class SdCardSelect(enum.IntEnum):
SD_0 = 0
SD_1 = 1
BOTH = 2
NONE = 3
class ActionId(enum.IntEnum):
LIST_DIR_INTO_FILE = 0
ANNOUNCE_VERSION = 1
ANNOUNCE_CURRENT_IMAGE = 2
ANNOUNCE_BOOT_COUNTS = 3
SWITCH_REBOOT_FILE_HANDLING = 5
RESET_REBOOT_COUNTER = 6
SWITCH_IMG_LOCK = 7
SET_MAX_REBOOT_CNT = 8
READ_REBOOT_MECHANISM_INFO = 9
UPDATE_OBSW_FROM_SD_0 = 10
UPDATE_OBSW_FROM_SD_1 = 11
UPDATE_OBSW_FROM_TMP = 12
SWITCH_TO_SD_0 = 16
SWITCH_TO_SD_1 = 17
SWITCH_TO_BOTH_SD_CARDS = 18
AUTO_SWITCH_ENABLE = 19
AUTO_SWITCH_DISABLE = 20
XSC_REBOOT = 32
FULL_REBOOT = 34
EXECUTE_SHELL_CMD_BLOCKING = 40
EXECUTE_SHELL_CMD_NON_BLOCKING = 41
SYSTEMCTL_CMD_EXECUTOR = 42
LIST_DIR_INTO_FILE = 50
LIST_DIR_DUMP_DIRECTLY = 51
CP_HELPER = 52
MV_HELPER = 53
RM_HELPER = 54
MKDIR_HELPER = 55
ENABLE_SCHEDULER = 56
UPDATE_LEAP_SECONRS = 60
class ParamId(enum.IntEnum):
PREF_SD = 0
class SetId(enum.IntEnum):
@@ -39,39 +81,91 @@ class SetId(enum.IntEnum):
class OpCode:
REBOOT_XSC = ["0", "reboot_xsc"]
XSC_REBOOT_SELF = ["1", "reboot_self"]
XSC_REBOOT_0_0 = ["2", "reboot_00"]
XSC_REBOOT_0_1 = ["3", "reboot_01"]
XSC_REBOOT_1_0 = ["4", "reboot_10"]
XSC_REBOOT_1_1 = ["5", "reboot_11"]
REBOOT_FULL = ["6", "reboot_regular"]
GET_HK = ["7", "get_hk"]
OBSW_UPDATE_FROM_SD_0 = ["obsw_update_sd0"]
OBSW_UPDATE_FROM_SD_1 = ["obsw_update_sd1"]
OBSW_UPDATE_FROM_TMP = ["obsw_update_tmp"]
SWITCH_TO_SD_0 = ["switch_to_sd_0"]
SWITCH_TO_SD_1 = ["switch_to_sd_1"]
SWITCH_TO_BOTH_SD_CARDS = ["switch_to_both_sd_cards"]
ENABLE_REBOOT_FILE_HANDLING = ["32", "rbh_off"]
DISABLE_REBOOT_FILE_HANDLING = ["33", "rbh_on"]
RESET_ALL_REBOOT_COUNTERS = ["34", "rbh_reset_a"]
RESET_REBOOT_COUNTER_00 = ["35", "rbh_reset_00"]
RESET_REBOOT_COUNTER_01 = ["36", "rbh_reset_01"]
RESET_REBOOT_COUNTER_10 = ["37", "rbh_reset_10"]
RESET_REBOOT_COUNTER_11 = ["38", "rbh_reset_11"]
SET_MAX_REBOOT_CNT = ["39", "rbh_max_cnt"]
ANNOUNCE_VERSION = "announce_version"
ANNOUNCE_CURRENT_IMAGE = "announce_current_image"
ANNOUNCE_BOOT_COUNTS = "announce_boot_counts"
EXECUTE_SHELL_CMD_BLOCKING = "exec_cmd_blocking"
EXECUTE_SHELL_CMD_NON_BLOCKING = "exec_cmd_non_blocking"
SYSTEMCTL_CMD_EXECUTOR = "systemctl_cmd"
LIST_DIR_INTO_FILE = "list_dir_into_file"
LIST_DIR_DUMP_DIRECTLY = "list_dir_dump_directly"
CP_HELPER = "cp_helper"
MV_HELPER = "mv_helper"
RM_HELPER = "rm_helper"
MKDIR_HELPER = "mkdir_helper"
SET_PREF_SD = "set_pref_sd"
REBOOT_XSC = "reboot_xsc"
XSC_REBOOT_SELF = "reboot_self"
XSC_REBOOT_0_0 = "reboot_00"
XSC_REBOOT_0_1 = "reboot_01"
XSC_REBOOT_1_0 = "reboot_10"
XSC_REBOOT_1_1 = "reboot_11"
REBOOT_FULL = "reboot_regular"
GET_HK = "get_hk"
OBSW_UPDATE_FROM_SD_0 = "obsw_update_sd0"
OBSW_UPDATE_FROM_SD_1 = "obsw_update_sd1"
OBSW_UPDATE_FROM_TMP = "obsw_update_tmp"
SWITCH_TO_SD_0 = "switch_to_sd_0"
SWITCH_TO_SD_1 = "switch_to_sd_1"
SWITCH_TO_BOTH_SD_CARDS = "switch_to_both_sd_cards"
READ_REBOOT_MECHANISM_INFO = "rbh_info"
ENABLE_REBOOT_FILE_HANDLING = "rwd_on"
DISABLE_REBOOT_FILE_HANDLING = "rwd_off"
RESET_ALL_REBOOT_COUNTERS = "rwd_reset_a"
RWD_RESET_REBOOT_COUNTER_00 = "rwd_reset_00"
RWD_RESET_REBOOT_COUNTER_01 = "rwd_reset_01"
RWD_RESET_REBOOT_COUNTER_10 = "rwd_reset_10"
RWD_RESET_REBOOT_COUNTER_11 = "rwd_reset_11"
RWD_SET_MAX_REBOOT_CNT = "rwd_max_cnt"
AUTO_SWITCH_ENABLE = "auto_switch_enable"
AUTO_SWITCH_DISABLE = "auto_switch_disable"
ENABLE_SCHEDULER = "enable_scheduler"
DISABLE_SCHEDULER = "disable_scheduler"
UPDATE_LEAP_SECONDS = "leap_seconds_update"
class Info:
ANNOUNCE_VERSION = "Announce version"
ANNOUNCE_CURRENT_IMAGE = "Announce current image"
ANNOUNCE_BOOT_COUNTS = "Announce boot counts"
SYSTEMCTL_CMD_EXECUTOR = "Perform systemctl command"
EXECUTE_SHELL_CMD_BLOCKING = "Execute shell command blocking"
EXECUTE_SHELL_CMD_NON_BLOCKING = "Execute shell command non-blocking"
SET_PREF_SD = "Set preferred SD card"
REBOOT_XSC = "XSC reboot with prompt"
REBOOT_FULL = "Full regular reboot"
XSC_REBOOT_SELF = "Reboot Self"
XSC_REBOOT_0_0 = "Reboot to 0 0"
XSC_REBOOT_0_1 = "Reboot to 0 1"
XSC_REBOOT_1_0 = "Reboot to 1 0"
XSC_REBOOT_1_1 = "Reboot to 1 1"
OBSW_UPDATE_FROM_SD_0 = "Update OBSW from SD Card 0"
OBSW_UPDATE_FROM_SD_1 = "Update OBSW from SD Card 1"
OBSW_UPDATE_FROM_TMP = "Update OBSW from tmp folder"
READ_REBOOT_MECHANISM_INFO = "Read reboot mechansm information"
SWITCH_TO_SD_0 = "Switch to SD card 0"
SWITCH_TO_SD_1 = "Switch to SD card 1"
SWITCH_TO_BOTH_SD_CARDS = "Switch to both SD cards with specified active card"
LIST_DIR_INTO_FILE = "List directory, dump output into file"
LIST_DIR_DUMP_DIRECTLY = "List directory, dump content directly"
CP_HELPER = "Filesystem Copy Helper"
MV_HELPER = "Filesystem Move Helper"
RM_HELPER = "Filesystem Removal Helper"
MKDIR_HELPER = "Filesystem Directory Creation Helper"
ENABLE_REBOOT_FILE_HANDLING = "Enable reboot file handling"
DISABLE_REBOOT_FILE_HANDLING = "Disable reboot file handling"
RESET_ALL_REBOOT_COUNTERS = "Reset all reboot counters"
RWD_RESET_REBOOT_COUNTER_00 = "Reset reboot counter 0 0"
RWD_RESET_REBOOT_COUNTER_01 = "Reset reboot counter 0 0"
RWD_RESET_REBOOT_COUNTER_10 = "Reset reboot counter 1 0"
GET_HK = "Get HK set"
RWD_RESET_REBOOT_COUNTER_11 = "Reset reboot counter 1 1"
RWD_SET_MAX_REBOOT_CNT = "rwd_max_cnt"
AUTO_SWITCH_ENABLE = "Enable Auto-Switch Feature with a specific target image"
AUTO_SWITCH_DISABLE = "Disable Auto-Switch Feature"
ENABLE_SCHEDULER = "Enable scheduler"
DISABLE_SCHEDULER = "Disable scheduler"
UPDATE_LEAP_SECONDS = "Updates the Leap Seconds"
class Chip(enum.IntEnum):
@@ -86,63 +180,41 @@ class Copy(enum.IntEnum):
NONE = 2
@tmtc_definitions_provider
def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCode.REBOOT_FULL, info=Info.REBOOT_FULL)
oce.add(keys=OpCode.XSC_REBOOT_SELF, info="Reboot Self")
oce.add(keys=OpCode.XSC_REBOOT_0_0, info="Reboot 0 0")
oce.add(keys=OpCode.XSC_REBOOT_0_1, info="Reboot 0 1")
oce.add(keys=OpCode.XSC_REBOOT_1_0, info="Reboot 1 0")
oce.add(keys=OpCode.XSC_REBOOT_1_1, info="Reboot 1 1")
oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add(
keys=OpCode.GET_HK,
info="Request housekeeping set",
)
oce.add(
keys=OpCode.ENABLE_REBOOT_FILE_HANDLING,
info="Enable reboot file handling",
)
oce.add(
keys=OpCode.DISABLE_REBOOT_FILE_HANDLING,
info="Disable reboot file handling",
)
oce.add(
keys=OpCode.RESET_ALL_REBOOT_COUNTERS,
info="Reset all reboot counters",
)
oce.add(
keys=OpCode.RESET_REBOOT_COUNTER_00,
info="Reset reboot counter 0 0",
)
oce.add(
keys=OpCode.RESET_REBOOT_COUNTER_01,
info="Reset reboot counter 0 1",
)
oce.add(
keys=OpCode.RESET_REBOOT_COUNTER_10,
info="Reset reboot counter 1 0",
)
oce.add(
keys=OpCode.RESET_REBOOT_COUNTER_11,
info="Reset reboot counter 1 1",
)
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCode.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0)
oce.add(keys=OpCode.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1)
oce.add(keys=OpCode.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS)
defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce)
class SystemctlCmd(enum.IntEnum):
START = 0
STOP = 1
RESTART = 2
def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.REBOOT_XSC:
def create_core_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("core", "Core Controller", hide_children_for_print=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
def pack_core_commands( # noqa C901
q: DefaultPusQueueHelper, cmd_str: str
): # noqa: C901 , complexity okay here
if cmd_str == OpCode.ANNOUNCE_VERSION:
q.add_log_cmd(f"{Info.ANNOUNCE_VERSION}")
q.add_pus_tc(create_action_cmd(CORE_CONTROLLER_ID, ActionId.ANNOUNCE_VERSION))
elif cmd_str == OpCode.ANNOUNCE_CURRENT_IMAGE:
q.add_log_cmd(f"{Info.ANNOUNCE_CURRENT_IMAGE}")
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.ANNOUNCE_CURRENT_IMAGE)
)
elif cmd_str == OpCode.ANNOUNCE_BOOT_COUNTS:
q.add_log_cmd(f"{Info.ANNOUNCE_BOOT_COUNTS}")
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.ANNOUNCE_BOOT_COUNTS)
)
elif cmd_str == OpCode.REBOOT_XSC:
reboot_self, chip_select, copy_select = determine_reboot_params()
add_xsc_reboot_cmd(
q=q,
@@ -150,38 +222,73 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
chip=chip_select,
copy=copy_select,
)
if op_code in OpCode.REBOOT_FULL:
elif cmd_str == OpCode.REBOOT_FULL:
q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}")
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionId.FULL_REBOOT
)
)
if op_code in OpCode.XSC_REBOOT_SELF:
elif cmd_str == OpCode.XSC_REBOOT_SELF:
add_xsc_reboot_cmd(q=q, reboot_self=True)
if op_code in OpCode.XSC_REBOOT_0_0:
elif cmd_str == OpCode.SYSTEMCTL_CMD_EXECUTOR:
print("systemctl command types: ")
for entry in SystemctlCmd:
print(f"{entry}: {entry.name}")
systemctl_cmd = SystemctlCmd(
int(input("Specify systemctl command type by key: "))
)
unit_name = input("Specify unit name: ")
q.add_pus_tc(create_systemctl_cmd(systemctl_cmd, unit_name))
elif cmd_str == OpCode.EXECUTE_SHELL_CMD_BLOCKING:
custom_cmd = input("Please specify command to execute: ")
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionId.EXECUTE_SHELL_CMD_BLOCKING,
user_data=custom_cmd.encode(),
)
)
elif cmd_str == OpCode.EXECUTE_SHELL_CMD_NON_BLOCKING:
custom_cmd = input("Please specify command to execute: ")
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionId.EXECUTE_SHELL_CMD_NON_BLOCKING,
user_data=custom_cmd.encode(),
)
)
elif cmd_str == OpCode.XSC_REBOOT_0_0:
add_xsc_reboot_cmd(
q=q, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
)
if op_code in OpCode.XSC_REBOOT_0_1:
elif cmd_str == OpCode.XSC_REBOOT_0_1:
add_xsc_reboot_cmd(
q=q,
reboot_self=False,
chip=Chip.CHIP_0,
copy=Copy.COPY_1_GOLD,
)
if op_code in OpCode.XSC_REBOOT_1_0:
elif cmd_str == OpCode.XSC_REBOOT_1_0:
add_xsc_reboot_cmd(
q=q, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
)
if op_code in OpCode.XSC_REBOOT_1_1:
elif cmd_str == OpCode.XSC_REBOOT_1_1:
add_xsc_reboot_cmd(
q=q,
reboot_self=False,
chip=Chip.CHIP_1,
copy=Copy.COPY_1_GOLD,
)
if op_code in OpCode.DISABLE_REBOOT_FILE_HANDLING:
elif cmd_str == OpCode.READ_REBOOT_MECHANISM_INFO:
q.add_log_cmd(Info.READ_REBOOT_MECHANISM_INFO)
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionId.READ_REBOOT_MECHANISM_INFO,
)
)
elif cmd_str == OpCode.DISABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Disabling reboot file handling")
user_data = bytearray([0])
q.add_pus_tc(
@@ -191,7 +298,7 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
user_data=user_data,
)
)
if op_code in OpCode.ENABLE_REBOOT_FILE_HANDLING:
elif cmd_str == OpCode.ENABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Enabling reboot file handling")
user_data = bytearray([1])
q.add_pus_tc(
@@ -201,7 +308,7 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
user_data=user_data,
)
)
if op_code in OpCode.RESET_ALL_REBOOT_COUNTERS:
elif cmd_str == OpCode.RESET_ALL_REBOOT_COUNTERS:
q.add_log_cmd("Resetting all reboot counters")
q.add_pus_tc(
create_action_cmd(
@@ -209,42 +316,67 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
action_id=ActionId.RESET_REBOOT_COUNTER,
)
)
if op_code in OpCode.RESET_REBOOT_COUNTER_00:
elif cmd_str == OpCode.RWD_RESET_REBOOT_COUNTER_00:
reset_specific_boot_counter(q, 0, 0)
if op_code in OpCode.RESET_REBOOT_COUNTER_01:
elif cmd_str == OpCode.RWD_RESET_REBOOT_COUNTER_01:
reset_specific_boot_counter(q, 0, 1)
if op_code in OpCode.RESET_REBOOT_COUNTER_10:
elif cmd_str == OpCode.RWD_RESET_REBOOT_COUNTER_10:
reset_specific_boot_counter(q, 1, 0)
if op_code in OpCode.RESET_REBOOT_COUNTER_11:
elif cmd_str == OpCode.RWD_RESET_REBOOT_COUNTER_11:
reset_specific_boot_counter(q, 1, 1)
if op_code in OpCode.OBSW_UPDATE_FROM_SD_0:
elif cmd_str == OpCode.RWD_SET_MAX_REBOOT_CNT:
max_count = int(input("Set new maximum reboot threshold [1, 50]: "))
if max_count < 1 or max_count > 50:
raise ValueError("Invalid value, must be in range 1 to 50")
q.add_pus_tc(
create_action_cmd(
CORE_CONTROLLER_ID,
ActionId.SET_MAX_REBOOT_CNT,
user_data=bytes([max_count]),
)
)
elif cmd_str == OpCode.OBSW_UPDATE_FROM_SD_0:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0)
q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_0))
if op_code in OpCode.OBSW_UPDATE_FROM_SD_1:
elif cmd_str == OpCode.OBSW_UPDATE_FROM_SD_1:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1)
q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_1))
if op_code in OpCode.OBSW_UPDATE_FROM_TMP:
elif cmd_str == OpCode.OBSW_UPDATE_FROM_TMP:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP)
q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_TMP))
if op_code in OpCode.SWITCH_TO_SD_0:
elif cmd_str == OpCode.AUTO_SWITCH_ENABLE:
q.add_log_cmd(Info.AUTO_SWITCH_ENABLE)
chip, copy = determine_chip_and_copy()
user_data = bytes([chip, copy])
q.add_pus_tc(
create_action_cmd(
CORE_CONTROLLER_ID, ActionId.AUTO_SWITCH_ENABLE, user_data
)
)
elif cmd_str == OpCode.AUTO_SWITCH_DISABLE:
q.add_log_cmd(Info.AUTO_SWITCH_DISABLE)
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.AUTO_SWITCH_DISABLE)
)
elif cmd_str == OpCode.SWITCH_TO_SD_0:
q.add_log_cmd(Info.SWITCH_TO_SD_0)
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_0
)
)
if op_code in OpCode.SWITCH_TO_SD_1:
elif cmd_str == OpCode.SWITCH_TO_SD_1:
q.add_log_cmd(Info.SWITCH_TO_SD_1)
q.add_pus_tc(
create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_1
)
)
if op_code in OpCode.SWITCH_TO_BOTH_SD_CARDS:
elif cmd_str == OpCode.SWITCH_TO_BOTH_SD_CARDS:
while True:
active_sd_card = int(input("Please specify active SD cqrd [0/1]: "))
active_sd_card = int(input("Please specify active SD card [0/1]: "))
if active_sd_card not in [0, 1]:
LOGGER.warning("Invalid SD card specified. Try again")
_LOGGER.warning("Invalid SD card specified. Try again")
break
q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS)
q.add_pus_tc(
@@ -254,10 +386,146 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
user_data=bytes([active_sd_card]),
)
)
if op_code in OpCode.GET_HK:
elif cmd_str == OpCode.GET_HK:
q.add_log_cmd("Requesting housekeeping set")
sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetId.HK)
q.add_pus_tc(generate_one_hk_command(sid))
elif cmd_str == OpCode.SET_PREF_SD:
q.add_log_cmd("Set preferred SD card")
pref_sd = int(
input("Specify which SD card to set as the preferred one (0/1): ")
)
if pref_sd not in [0, 1]:
raise ValueError("Only 0 or 1 allowed for preferred SD card")
q.add_pus_tc(
create_load_param_cmd(
parameter=create_scalar_u8_parameter(
object_id=CORE_CONTROLLER_ID,
domain_id=0,
unique_id=ParamId.PREF_SD,
parameter=pref_sd,
),
apid=0,
)
)
elif cmd_str == OpCode.CP_HELPER:
cp_recursive = int(input("Copy recursively (0/1) ?: "))
if cp_recursive not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
cp_force = int(input("Copy with force option(0/1) ?: "))
if cp_force not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
user_data = bytearray([cp_recursive, cp_force])
user_data.extend(packet_source_dest_path("Copy"))
q.add_log_cmd(Info.CP_HELPER)
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.CP_HELPER, user_data)
)
elif cmd_str == OpCode.MV_HELPER:
user_data = packet_source_dest_path("Move")
q.add_log_cmd(Info.MV_HELPER)
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.MV_HELPER, user_data)
)
elif cmd_str == OpCode.RM_HELPER:
rm_recursive = int(input("Remove with recursive (-r) option (0/1) ?: "))
if rm_recursive not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
rm_force = int(input("Remove with force (-f) option (0/1) ?: "))
if rm_force not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
user_data = bytearray([rm_recursive, rm_force])
removed_file_or_dir = input("Specify absolute path to be removed: ")
user_data.extend(removed_file_or_dir.encode())
user_data.append(0)
q.add_log_cmd(Info.RM_HELPER)
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.RM_HELPER, user_data)
)
elif cmd_str == OpCode.LIST_DIR_INTO_FILE:
q.add_log_cmd(Info.LIST_DIR_INTO_FILE)
user_data = list_directory_base_user_data()
dest_file_path = input("Destination file path: ")
user_data.extend(dest_file_path.encode())
user_data.append(0)
q.add_pus_tc(
create_action_cmd(
CORE_CONTROLLER_ID, ActionId.LIST_DIR_INTO_FILE, user_data
)
)
elif cmd_str == OpCode.LIST_DIR_DUMP_DIRECTLY:
q.add_log_cmd(Info.LIST_DIR_DUMP_DIRECTLY)
user_data = list_directory_base_user_data()
q.add_pus_tc(
create_action_cmd(
CORE_CONTROLLER_ID, ActionId.LIST_DIR_DUMP_DIRECTLY, user_data
)
)
elif cmd_str == OpCode.MKDIR_HELPER:
q.add_log_cmd(Info.MKDIR_HELPER)
user_data = input("Specify absolute path of newly created directory: ")
user_data = bytearray(user_data.encode())
user_data.append(0)
q.add_pus_tc(
create_action_cmd(CORE_CONTROLLER_ID, ActionId.MKDIR_HELPER, user_data)
)
elif cmd_str == OpCode.ENABLE_SCHEDULER:
q.add_log_cmd(Info.ENABLE_SCHEDULER)
q.add_pus_tc(create_enable_tc_sched_cmd())
elif cmd_str == OpCode.DISABLE_SCHEDULER:
q.add_log_cmd(Info.DISABLE_SCHEDULER)
q.add_pus_tc(create_disable_tc_sched_cmd())
elif cmd_str == OpCode.UPDATE_LEAP_SECONDS:
q.add_log_cmd(Info.UPDATE_LEAP_SECONDS)
leap_seconds = int(input("Specify new Leap Seconds Value: ")).to_bytes(
length=2, signed=False, byteorder="big"
)
q.add_pus_tc(
create_action_cmd(
CORE_CONTROLLER_ID, ActionId.UPDATE_LEAP_SECONRS, leap_seconds
)
)
else:
_LOGGER.warning(
f"Unknown operation code {cmd_str} for core controller commands"
)
def create_systemctl_cmd(systemctl_cmd: SystemctlCmd, unit_name: str):
cmd_data = bytearray([systemctl_cmd])
cmd_data.extend(unit_name.encode())
return create_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionId.SYSTEMCTL_CMD_EXECUTOR,
user_data=cmd_data,
)
def list_directory_base_user_data() -> bytearray:
all_opt = int(input("Use all (-a) option (0/1) ?: "))
if all_opt not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
recursive_opt = int(input("Use recursive (-R) option (0/1) ?: "))
if recursive_opt not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
compression_opt = int(input("Compress target file (0/1) ?: "))
if compression_opt not in [0, 1]:
raise ValueError("Invalid value, only 0 or 1 allowed")
listing_path = input("Specify listing path (absolute path): ")
user_data = bytearray([all_opt, recursive_opt, compression_opt])
user_data.extend(listing_path.encode())
user_data.append(0)
return user_data
def packet_source_dest_path(context: str) -> bytes:
source = input(f"Specify {context} source file: ")
dest = input(f"Specify {context} destination file: ")
raw_src_dest = bytearray(source.encode())
raw_src_dest.append(0)
raw_src_dest.extend(dest.encode())
raw_src_dest.append(0)
return raw_src_dest
def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int):
@@ -277,18 +545,17 @@ def create_full_reboot_cmds() -> PusTelecommand:
)
def determine_reboot_params() -> (bool, Chip, Copy):
chip_select = -1
copy_select = -1
def determine_reboot_params() -> Tuple[bool, Chip, Copy]:
reboot_self = input("Reboot self? [y/n]: ")
if reboot_self in ["y", "yes", "1"]:
LOGGER.info("Rebooting currently running image")
return True, chip_select, copy_select
LOGGER.info("Rebooting image specified by chip and copy")
return False, determine_chip_and_copy()
_LOGGER.info("Rebooting currently running image")
return True, Chip.NONE, Copy.NONE
_LOGGER.info("Rebooting image specified by chip and copy")
chip, copy = determine_chip_and_copy()
return False, chip, copy
def determine_chip_and_copy() -> (int, int):
def determine_chip_and_copy() -> Tuple[Chip, Copy]:
while True:
chip_select = input("Chip select [0/1]: ")
if chip_select in ["0", "1"]:
@@ -298,7 +565,7 @@ def determine_chip_and_copy() -> (int, int):
chip_select = Chip.CHIP_1
break
else:
LOGGER.warning("Invalid chip select value. Try again")
_LOGGER.warning("Invalid chip select value. Try again")
while True:
copy_select = input("Copy select [0/1]: ")
if copy_select in ["0", "1"]:
@@ -308,13 +575,17 @@ def determine_chip_and_copy() -> (int, int):
copy_select = Copy.COPY_1_GOLD
break
else:
LOGGER.warning("Invalid copy select value. Try again")
_LOGGER.warning("Invalid copy select value. Try again")
return chip_select, copy_select
def pack_obsw_update_cmd(action_id: int) -> PusTelecommand:
chip, copy = determine_chip_and_copy()
user_data = bytes([chip, copy])
user_data = bytearray([chip, copy])
custom_file_name = input("Use custom filename [y/n] ?: ")
if custom_file_name.lower() in ["y", "yes", "1"]:
custom_file_name = input("Specify custom filename: ")
user_data.extend(custom_file_name.encode())
return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data
)
@@ -350,9 +621,8 @@ def create_xsc_reboot_cmds(
)
def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
def handle_core_hk_data(pw: PrintWrapper, set_id: int, hk_data: bytes):
if set_id == SetId.HK:
pw = PrintWrapper(printer)
fmt_str = "!fff"
inc_len = struct.calcsize(fmt_str)
(temperature, ps_voltage, pl_voltage) = struct.unpack(
@@ -363,4 +633,91 @@ def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
f"PL Voltage [mV] {pl_voltage}"
)
pw.dlog(printout)
printer.print_validity_buffer(validity_buffer=hk_data[inc_len:], num_vars=3)
pw.dlog(get_validity_buffer_str(validity_buffer=hk_data[inc_len:], num_vars=3))
def handle_core_ctrl_action_replies(
action_id: int, pw: PrintWrapper, custom_data: bytes
):
if action_id == ActionId.READ_REBOOT_MECHANISM_INFO:
handle_reboot_mechanism_info_reply(pw, custom_data)
elif action_id == ActionId.LIST_DIR_DUMP_DIRECTLY:
handle_list_dir_dump_reply(pw, custom_data)
def handle_reboot_mechanism_info_reply(pw: PrintWrapper, custom_data: bytes):
pw.dlog("Received reboot mechansm information")
fmt_str = "!BIIIIIBBBBBBBB"
inc_len = struct.calcsize(fmt_str)
if len(custom_data) < inc_len:
raise ValueError(f"Received custom data shorter than expected {inc_len}")
(
enabled,
max_count,
img00_count,
img01_count,
img10_count,
img11_count,
img00_lock,
img01_lock,
img10_lock,
img11_lock,
last_chip,
last_copy,
next_chip,
next_copy,
) = struct.unpack(fmt_str, custom_data[:inc_len])
pw.dlog(f"Enabled: {enabled}")
pw.dlog(f"Max Count: {max_count}")
pw.dlog(f"Count 00: {img00_count}")
pw.dlog(f"Count 01: {img01_count}")
pw.dlog(f"Count 10: {img10_count}")
pw.dlog(f"Count 11: {img11_count}")
pw.dlog(f"Lock 00: {img00_lock}")
pw.dlog(f"Lock 01: {img01_lock}")
pw.dlog(f"Lock 10: {img10_lock}")
pw.dlog(f"Lock 11: {img11_lock}")
pw.dlog(f"Last Chip: {last_chip}")
pw.dlog(f"Last Copy: {last_copy}")
pw.dlog(f"Next Chip: {next_chip}")
pw.dlog(f"Next Copy: {next_copy}")
def handle_list_dir_dump_reply(pw: PrintWrapper, custom_data: bytes):
if len(custom_data) < 4:
_LOGGER.warning("Data unexpectedly small")
return
seq_idx = struct.unpack("!I", custom_data[0:4])[0]
total_chunks = struct.unpack("!I", custom_data[4:8])[0]
compressed = custom_data[8]
ls_cmd = custom_data[9:].split(b"\x00")[0].decode()
# Include length of NULL termination
file_data_offset = 9 + len(ls_cmd) + 1
pw.dlog(
f"Received directory listing dump for ls command {ls_cmd}. "
f"Chunk {seq_idx + 1}/{total_chunks}"
)
def remove_if_exists_and_new(seq_idx_: int, path_: Path):
if seq_idx_ == 0 and path_.exists():
os.remove(path_)
if compressed:
path = Path("dir_listing.txt.gz")
remove_if_exists_and_new(seq_idx, path)
pw.dlog(
f"Compression option: {compressed}. Dumping file into dir_listing.txt.gz"
)
with open(path, "ab") as listing_file:
listing_file.write(custom_data[file_data_offset:])
else:
path = Path("dir_listing.txt")
remove_if_exists_and_new(seq_idx, path)
pw.dlog(f"Compression option: {compressed}. Dumping file into dir_listing.txt")
with open(path, "a") as listing_file:
listing_file_str = custom_data[file_data_offset:].decode()
listing_file.write(listing_file_str)
if seq_idx + 1 == total_chunks:
pw.dlog("Full directory listing: ")
with open("dir_listing.txt", "r") as listing_file:
print(listing_file.read())
+68
View File
@@ -0,0 +1,68 @@
from spacepackets.ecss import PusTelecommand
from tmtccmd.config.tmtc import (
CmdTreeNode,
)
from tmtccmd.pus.s201_fsfw_health import FsfwHealth, Subservice
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.tmtc.obj_prompt import prompt_object
class OpCode:
SET_HEALTH = "set_health"
ANNOUNCE_HEALTH_ALL = "read_health_all"
ANNOUNCE_HEALTH = "read_health"
class Info:
SET_HEALTH = "Set health of specific object"
ANNOUNCE_HEALTH_ALL = "Read all health states"
ANNOUNCE_HEALTH = "Read health state of one object"
def prompt_health() -> FsfwHealth:
for item in FsfwHealth:
print(f"{item}: {item.name}")
health_idx = int(input("Please enter health by index: "))
return FsfwHealth(health_idx)
def build_health_cmds(q: DefaultPusQueueHelper, cmd_str: str):
if cmd_str == OpCode.SET_HEALTH:
app_data = bytearray(prompt_object())
health = prompt_health()
app_data.append(health)
q.add_log_cmd(Info.SET_HEALTH)
q.add_pus_tc(
PusTelecommand(
service=201, subservice=Subservice.TC_SET_HEALTH, app_data=app_data
)
)
elif cmd_str == OpCode.ANNOUNCE_HEALTH:
app_data = bytearray(prompt_object())
q.add_log_cmd(Info.ANNOUNCE_HEALTH)
q.add_pus_tc(
PusTelecommand(
service=201, subservice=Subservice.TC_ANNOUNCE_HEALTH, app_data=app_data
)
)
elif cmd_str == OpCode.ANNOUNCE_HEALTH_ALL:
q.add_log_cmd(Info.ANNOUNCE_HEALTH_ALL)
q.add_pus_tc(
PusTelecommand(service=201, subservice=Subservice.TC_ANNOUNCE_HEALTH_ALL)
)
else:
raise ValueError(
f"unknown command string {cmd_str} for service {CustomServiceList.HEALTH}"
)
def create_global_health_node() -> CmdTreeNode:
health_node = CmdTreeNode("health", "Health Commands")
health_node.add_child(
CmdTreeNode(OpCode.ANNOUNCE_HEALTH_ALL, Info.ANNOUNCE_HEALTH_ALL)
)
health_node.add_child(CmdTreeNode(OpCode.ANNOUNCE_HEALTH, Info.ANNOUNCE_HEALTH))
health_node.add_child(CmdTreeNode(OpCode.SET_HEALTH, Info.SET_HEALTH))
return health_node
+23
View File
@@ -0,0 +1,23 @@
import enum
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
class SetId(enum.IntEnum):
ERROR_ID = 0
def handle_ier_hk_data(pw: PrintWrapper, hk_data: bytes, set_id: int):
pw.dlog(f"Received internal error reporter HK data with set ID {set_id}")
if set_id == SetId.ERROR_ID:
fmt_str = "!III"
inc_len = struct.calcsize(fmt_str)
(tm_errors, queue_errors, store_hits) = struct.unpack(
fmt_str, hk_data[:inc_len]
)
pw.dlog(f"TM Errors: {tm_errors}")
pw.dlog(f"Queue Errors: {queue_errors}")
pw.dlog(f"Store Errors: {store_hits}")
pw.dlog(get_validity_buffer_str(hk_data[inc_len:], 3))
View File
@@ -6,8 +6,8 @@
@date 02.05.2020
"""
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
from eive_tmtc.config.object_ids import TEST_DEVICE_ID
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
+96
View File
@@ -0,0 +1,96 @@
from eive_tmtc.config.object_ids import (
ACS_SUBSYSTEM_ID,
IMTQ_HANDLER_ID,
GPS_0_HEALTH_DEV,
GYRO_0_ADIS_HANDLER_ID,
GYRO_1_L3G_HANDLER_ID,
GYRO_2_ADIS_HANDLER_ID,
ACS_BOARD_ASS_ID,
PLOC_MPSOC_ID,
PLOC_SUPV_ID,
RW_ASSEMBLY,
SUS_BOARD_ASS_ID,
MGM_0_LIS3_HANDLER_ID,
MGM_1_RM3100_HANDLER_ID,
SUS_0_N_LOC_XFYFZM_PT_XF,
SUS_6_R_LOC_XFYBZM_PT_XF,
RW1_ID,
RW2_ID,
RTD_0_PLOC_HSPD,
TMP1075_HANDLER_TCS_BRD_1_ID,
TMP1075_HANDLER_TCS_BRD_0_ID,
TMP1075_HANDLER_PLPCDU_0_ID,
TMP1075_HANDLER_PLPCDU_1_ID,
TMP1075_HANDLER_IF_BRD_ID,
STR_ASSEMBLY,
STAR_TRACKER_ID,
)
SUBSYSTEM_DICT = {
0: "acs",
1: "tcs",
2: "com",
3: "payload",
}
ACS_OBJ_DICT = {
0: ("Subsystem", ACS_SUBSYSTEM_ID),
1: ("SUS Assembly", SUS_BOARD_ASS_ID),
2: ("ACS Board Assembly", ACS_BOARD_ASS_ID),
3: ("RW Assembly", RW_ASSEMBLY),
4: ("STR Assembly", STR_ASSEMBLY),
5: ("iMTQ MGT", IMTQ_HANDLER_ID),
6: ("GYR 0 ADIS", GYRO_0_ADIS_HANDLER_ID),
7: ("GYR 1 L3G", GYRO_1_L3G_HANDLER_ID),
8: ("GYR 2 ADIS", GYRO_2_ADIS_HANDLER_ID),
9: ("MGM 0 LIS3", MGM_0_LIS3_HANDLER_ID),
10: ("MGM 1 RM3100", MGM_1_RM3100_HANDLER_ID),
11: ("GPS 0 Health Device", GPS_0_HEALTH_DEV),
12: ("SUS 0", SUS_0_N_LOC_XFYFZM_PT_XF),
13: ("SUS 6", SUS_6_R_LOC_XFYBZM_PT_XF),
14: ("RW 1", RW1_ID),
15: ("RW 2", RW2_ID),
16: ("STR", STAR_TRACKER_ID),
}
TCS_OBJ_DICT = {
0: ("RTD 0", RTD_0_PLOC_HSPD),
1: ("TMP1075 PL PCDU 0", TMP1075_HANDLER_PLPCDU_0_ID),
2: ("TMP1075 PL PCDU 1", TMP1075_HANDLER_PLPCDU_1_ID),
3: ("TMP1075 TCS 0", TMP1075_HANDLER_TCS_BRD_0_ID),
4: ("TMP1075 TCS 1", TMP1075_HANDLER_TCS_BRD_1_ID),
5: ("TMP1075 IF BOARD", TMP1075_HANDLER_IF_BRD_ID),
}
PAYLOAD_OBJ_DICT = {
0: ("Payload MPSoC", PLOC_MPSOC_ID),
1: ("Payload Supervisor", PLOC_SUPV_ID),
}
def get_obj_if_from_dict(lut: dict) -> bytes:
for k, v in lut.items():
print(f"{k}: {v[0]}")
obj_key = int(input("Please specify target object by key: "))
name_and_obj_id = lut[obj_key]
if name_and_obj_id is None:
raise ValueError("invalid key")
return name_and_obj_id[1]
def prompt_object() -> bytes:
for k, v in SUBSYSTEM_DICT.items():
print(f"{k}: {v}")
subsystem_key = int(input("Please specify target subsystem by key: "))
subsystem = SUBSYSTEM_DICT[subsystem_key]
if subsystem is None:
raise ValueError("invalid key")
if subsystem == "acs":
return get_obj_if_from_dict(ACS_OBJ_DICT)
elif subsystem == "tcs":
return get_obj_if_from_dict(TCS_OBJ_DICT)
elif subsystem == "payload":
return get_obj_if_from_dict(PAYLOAD_OBJ_DICT)
else:
print(f"No object for subsystem {subsystem}")
return bytes()
-65
View File
@@ -1,65 +0,0 @@
import enum
from typing import Dict, Tuple
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import PL_SUBSYSTEM_ID
from spacepackets.ecss import PusTelecommand
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservice
class OpCode(str, enum.Enum):
OFF = "off"
REPORT_ALL_MODES = "report_modes"
class PayloadMode(enum.IntEnum):
OFF = 0
class Info(str, enum.Enum):
OFF = "Off Command"
REPORT_ALL_MODES = "Report all modes"
HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCode.OFF: (PayloadMode.OFF, Info.OFF),
}
@service_provider(CustomServiceList.PL_SS)
def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code
q = p.queue_helper
info_prefix = "ACS Subsystem"
if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=ModeSubservice.TC_MODE_ANNOUNCE_RECURSIVE,
app_data=PL_SUBSYSTEM_ID,
)
)
mode_info_tup = HANDLER_LIST.get(op_code)
if mode_info_tup is None:
return
pack_mode_cmd_with_info(
object_id=PL_SUBSYSTEM_ID,
info=f"{info_prefix}: {mode_info_tup[1]}",
submode=0,
mode=mode_info_tup[0],
q=q,
)
@tmtc_definitions_provider
def add_payload_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.PL_SS, "Payload Subsystem", oce)
+3 -3
View File
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
"""
@file ploc_memory_dumper.py
@brief This file implements the command to dump memory sectors of the PLOC. Memories of the PLOC which can be dumped
are one MRAM, two flash memories and the SRAM.
@brief This file implements the command to dump memory sectors of the PLOC. Memories of the PLOC
which can be dumped are one MRAM, two flash memories and the SRAM.
@author J. Meier
@date 31.08.2021
"""
@@ -12,7 +12,7 @@ from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
+559 -133
View File
@@ -6,54 +6,70 @@
@author J. Meier
@date 06.03.2021
"""
import dataclasses
import logging
import struct
import enum
from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import get_object_ids, PLOC_MPSOC_ID
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
OpCodeEntry,
TmtcDefinitionWrapper,
CmdTreeNode,
)
from tmtccmd.logging import get_console_logger
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tmtc import DefaultPusQueueHelper
from eive_tmtc.utility.input_helper import InputHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode, create_mode_command
from tmtccmd.pus.s20_fsfw_param import create_load_param_cmd, create_scalar_u8_parameter
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
LOGGER = get_console_logger()
_LOGGER = logging.getLogger(__name__)
MANUAL_INPUT = "1"
flash_write_file_dict = {
MANUAL_INPUT: ["manual input", ""],
"2": ["/mnt/sd0/ploc/mpsoc/flash_write.bin", "/mnt/sd0/ploc/mpsoc/flash_write.bin"],
CRIT_CMD_APID_DICT = {"1": ("flash_mkfs", 0x12A)}
OBC_WRITE_FILE_DICT = {
MANUAL_INPUT: ("manual input", ""),
"2": ("/mnt/sd0/ploc/mpsoc/flash_write.bin", "/mnt/sd0/ploc/mpsoc/flash_write.bin"),
}
mpsoc_file_dict = {
MANUAL_INPUT: ["manual input", ""],
"2": ["0:/flash", "0:/flash"],
OBC_READ_FILE_DICT = {
MANUAL_INPUT: ("manual input", ""),
"2": ("/mnt/sd0/ploc/mpsoc/flash_read.bin", "/mnt/sd0/ploc/mpsoc/flash_read.bin"),
}
MPSOC_WRITE_FILE_DICT = {
MANUAL_INPUT: ("manual input", ""),
"2": ("0:/", "0:/"),
}
MPSOC_READ_FILE_DICT = {
MANUAL_INPUT: ("manual input", ""),
"2": ("0:/PICA", "0:/PICA"),
}
SEQ_FILE_NAMES = ["0:/EM16/231", "0:/EQ04/E-75", "0:/EQ01/E130"]
SEQ_FILE_DICT = {
MANUAL_INPUT: ["manual input", ""],
"2": [f"16QRM On Carrier 200 MBd ({SEQ_FILE_NAMES[0]})", f"{SEQ_FILE_NAMES[0]}"],
"3": [f"QPSK On Carrier 780 MBd ({SEQ_FILE_NAMES[1]})", f"{SEQ_FILE_NAMES[1]}"],
"4": [f"Maximum Bandwidth QPSK ({SEQ_FILE_NAMES[2]})", f"{SEQ_FILE_NAMES[2]}"],
MANUAL_INPUT: ("manual input", ""),
"2": (f"16QRM On Carrier 200 MBd ({SEQ_FILE_NAMES[0]})", f"{SEQ_FILE_NAMES[0]}"),
"3": (f"QPSK On Carrier 780 MBd ({SEQ_FILE_NAMES[1]})", f"{SEQ_FILE_NAMES[1]}"),
"4": (f"Maximum Bandwidth QPSK ({SEQ_FILE_NAMES[2]})", f"{SEQ_FILE_NAMES[2]}"),
}
CARRIAGE_RETURN = 0xD
class CommandId(enum.IntEnum):
class SetId(enum.IntEnum):
HK_ID = 0
class ActionId(enum.IntEnum):
TC_MEM_WRITE = 1
TC_MEM_READ = 2
FLASH_WRITE = 9
TM_MEM_READ_RPT = 6
TC_FLASH_WRITE_FULL_FILE = 9
TC_FLASH_DELETE = 10
TC_REPLAY_START = 11
TC_REPLAY_STOP = 12
@@ -64,20 +80,60 @@ class CommandId(enum.IntEnum):
TC_MODE_REPLAY = 16
TC_CAM_CMD_SEND = 17
TC_MODE_IDLE = 18
TM_CAM_CMD_RPT = 19
SET_UART_TX_TRISTATE = 20
RELEASE_UART_TX = 21
TC_CAM_TAKE_PIC = 22
TC_SIMPLEX_STREAM_FILE = 23
TC_DOWNLINK_DATA_MODULATE = 24
TC_MODE_SNAPSHOT = 25
TC_FLASH_DIR_GET_CONTENT = 28
TM_FLASH_DIRECTORY_CONTENT = 29
TC_FLASH_READ_FULL_FILE = 30
TC_SPLIT_FILE = 31
TC_VERIFY_BOOT = 32
TC_ENABLE_TC_EXECUTION = 33
TC_FLASH_MKFS = 34
class Submode(enum.IntEnum):
IDLE_OR_NONE = 0
REPLAY = 1
SNAPSHOT = 2
class ParamId(enum.IntEnum):
PLOC_SUPV_SKIP_CMD_TO_ON = 1
class OpCode:
ON = ["on"]
OFF = ["off"]
NORMAL = ["normal"]
VERIFY_BOOT = ["verify_boot"]
MODE_REPLAY = ["mode_replay"]
MODE_IDLE = ["mode_idle"]
REPLAY_WRITE_SEQ = ["replay_write"]
DOWNLINK_PWR_ON = ["downlink_pwr_on"]
REPLAY_START = ["replay_start"]
ON = "on"
OFF = "off"
NORMAL = "normal"
VERIFY_BOOT = "verify_boot"
REPLAY_WRITE_SEQ = "replay_write"
DOWNLINK_PWR_ON = "downlink_pwr_on"
MEM_WRITE = "memory_write"
MEM_READ = "memory_read"
DOWNLINK_PWR_OFF = "downlink_pwr_off"
FLASH_WRITE_FILE = "flash_write_file"
FLASH_READ_FILE = "flash_read_file"
FLASH_DELETE_FILE = "flash_delete_file"
FLASH_GET_DIR_CONTENT = "flash_get_dir_content"
REPLAY_STOP = "replay_stop"
REPLAY_START = "replay_start"
CAM_CMD_SEND = "cam_cmd_send"
CAM_TAKE_PIC = "cam_take_pic"
SIMPLEX_STREAM_FILE = "simplex_stream_file"
SPLIT_FILE = "split_file"
DOWNLINK_DATA_MODULATE = "downlink_data_modulate"
ENABLE_PLOC_SUPV_COMMANDING_TO_ON = "enable_ploc_supv_cmd_to_on"
DISABLE_PLOC_SUPV_COMMANDING_TO_ON = "disable_ploc_supv_cmd_to_on"
MODE_IDLE = "mode_idle"
MODE_REPLAY = "mode_replay"
MODE_SNAPSHOT = "mode_snapshot"
ENABLE_TC_EXECUTION = "enable_tc_exec"
FLASH_MKFS = "flash_mkfs"
class Info:
@@ -86,69 +142,71 @@ class Info:
NORMAL = "Normal"
VERIFY_BOOT = "Verify boot by reading 0xdeadbeef from DEADBEEF address"
MODE_REPLAY = "Switch to REPLAY mode"
REPLAY_STOP = "Stop Replay"
MODE_IDLE = "Switch to IDLE mode"
REPLAY_WRITE_SEQ = "Replay write sequence"
DOWNLINK_PWR_ON = "Downlink Power On"
DOWNLINK_PWR_OFF = "Downlink Power Off"
MEM_WRITE = "Write to Memory"
MEM_READ = "Read from Memory"
REPLAY_START = "Replay Start"
CAM_TAKE_PIC = "Cam Take Picture"
CAM_CMD_SEND = "Send Camera Command"
SIMPLEX_STREAM_FILE = "Simplex Stream File with E-Band"
SPLIT_FILE = "Split file on MPSoC Flash"
FLASH_READ_FILE = "Copy file from MPSoC to OBC"
FLASH_WRITE_FILE = "Copy file from OBC to MPSoC"
FLASH_DELETE_FILE = "Delete file on MPSoC"
FLASH_GET_DIR_CONTENT = "Get flash directory content on MPSoC"
DOWNLINK_DATA_MODULATE = "Downlink data modulate"
MODE_SNAPSHOT = "Mode Snapshot"
ENABLE_PLOC_SUPV_COMMANDING_TO_ON = "Enable PLOC SUPV commanding when switching ON"
DISABLE_PLOC_SUPV_COMMANDING_TO_ON = (
"Disable PLOC SUPV commanding when switching ON"
)
ENABLE_TC_EXECUTION = "Enable execution of critical commands"
FLASH_MKFS = "Flash MKFS command"
class MemAddresses(enum.IntEnum):
DEADBEEF = 0x40000004
class PlocReplyIds(enum.IntEnum):
TM_MEM_READ_RPT = 6
TM_CAM_CMD_RPT = 19
def create_ploc_mpsoc_node() -> CmdTreeNode:
op_code_strs = [
getattr(OpCode, key) for key in dir(OpCode) if not key.startswith("__")
]
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
combined_dict = dict(zip(op_code_strs, info_strs))
node = CmdTreeNode("ploc_mpsoc", "PLOC MPSoC", hide_children_for_print=True)
for op_code, info in combined_dict.items():
node.add_child(CmdTreeNode(op_code, info))
return node
@tmtc_definitions_provider
def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCode.ON, Info.ON)
oce.add(OpCode.NORMAL, Info.NORMAL)
oce.add("3", "Ploc MPSoC: Memory write")
oce.add("4", "Ploc MPSoC: Memory read")
oce.add("5", "Ploc MPSoC: Flash write")
oce.add("6", "Ploc MPSoC: Flash delete")
oce.add(OpCode.REPLAY_START, Info.REPLAY_START)
oce.add("8", "Ploc MPSoC: Replay stop")
oce.add(OpCode.DOWNLINK_PWR_ON, Info.DOWNLINK_PWR_ON)
oce.add("10", "Ploc MPSoC: Downlink pwr off")
oce.add(OpCode.REPLAY_WRITE_SEQ, Info.REPLAY_WRITE_SEQ)
oce.add("12", "Ploc MPSoC: OBSW reset sequence count")
oce.add(OpCode.VERIFY_BOOT, "Ploc MPSoC: Read DEADBEEF address")
oce.add(OpCode.MODE_REPLAY, Info.MODE_REPLAY)
oce.add(OpCode.MODE_IDLE, Info.MODE_IDLE)
oce.add("16", "Ploc MPSoC: Tc cam command send")
oce.add("17", "Ploc MPSoC: Set UART TX tristate")
oce.add("18", "Ploc MPSoC: Relesase UART TX")
defs.add_service(CustomServiceList.PLOC_MPSOC.value, "Ploc MPSoC", oce)
@service_provider(CustomServiceList.PLOC_MPSOC)
def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
def pack_ploc_mpsoc_commands(
q: DefaultPusQueueHelper, cmd_str: str
): # noqa C901: Complexity okay here.
object_id = get_object_ids().get(PLOC_MPSOC_ID)
q = p.queue_helper
assert object_id is not None
prefix = "PLOC MPSoC"
op_code = p.op_code
q.add_log_cmd(
f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}"
)
obyt = object_id.as_bytes
if op_code in OpCode.OFF:
if cmd_str == OpCode.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}")
command = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCode.ON:
if cmd_str == OpCode.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}")
data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code in OpCode.NORMAL:
if cmd_str == OpCode.NORMAL:
q.add_log_cmd(f"{prefix}: {Info.NORMAL}")
data = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3":
if cmd_str == OpCode.MEM_WRITE:
q.add_log_cmd("PLOC MPSoC: TC mem write test")
memory_address = int(
input("PLOC MPSoC: Tc Mem Write: Type memory address: 0x"), 16
@@ -160,77 +218,173 @@ def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
object_id.as_bytes, memory_address, memory_data, mem_len
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "4":
q.add_log_cmd("PLOC MPSoC: TC mem read test")
data = prepare_mem_read_command(object_id=object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "5":
q.add_log_cmd("PLOC MPSoC: Flash write")
if cmd_str == OpCode.FLASH_WRITE_FILE:
q.add_log_cmd(f"{prefix}: {Info.FLASH_WRITE_FILE}")
data = prepare_flash_write_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6":
if cmd_str == OpCode.FLASH_READ_FILE:
q.add_log_cmd(f"{prefix}: {Info.FLASH_READ_FILE}")
data = prepare_flash_read_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if cmd_str == OpCode.FLASH_DELETE_FILE:
q.add_log_cmd("PLOC MPSoC: Flash delete")
data = prepare_flash_delete_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.REPLAY_START:
if cmd_str in OpCode.REPLAY_START:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_START}")
data = prepare_replay_start_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8":
if cmd_str == OpCode.REPLAY_STOP:
q.add_log_cmd("PLOC MPSoC: Replay stop")
data = object_id.as_bytes + struct.pack("!I", CommandId.TC_REPLAY_STOP)
data = object_id.as_bytes + struct.pack("!I", ActionId.TC_REPLAY_STOP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.DOWNLINK_PWR_ON:
if cmd_str == OpCode.DOWNLINK_PWR_ON:
q.add_log_cmd(f"{prefix}: {OpCode.DOWNLINK_PWR_ON}")
data = prepare_downlink_pwr_on_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10":
if cmd_str == OpCode.DOWNLINK_PWR_OFF:
q.add_log_cmd("PLOC MPSoC: Downlink pwr off")
data = object_id.as_bytes + struct.pack("!I", CommandId.TC_DOWNLINK_PWR_OFF)
data = object_id.as_bytes + struct.pack("!I", ActionId.TC_DOWNLINK_PWR_OFF)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.REPLAY_WRITE_SEQ:
if cmd_str == OpCode.FLASH_GET_DIR_CONTENT:
q.add_log_cmd(f"{prefix}: {Info.FLASH_GET_DIR_CONTENT}")
dir_name = input("Please specify MPSoC directory name to get information for: ")
dir_name = bytearray(dir_name.encode("utf-8"))
dir_name.append(0)
q.add_pus_tc(
create_action_cmd(
object_id=object_id.as_bytes,
action_id=ActionId.TC_FLASH_DIR_GET_CONTENT,
user_data=dir_name,
)
)
if cmd_str == OpCode.REPLAY_WRITE_SEQ:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_WRITE_SEQ}")
data = prepare_replay_write_sequence_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12":
if cmd_str == "12":
q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count")
data = object_id.as_bytes + struct.pack("!I", CommandId.OBSW_RESET_SEQ_COUNT)
data = object_id.as_bytes + struct.pack("!I", ActionId.OBSW_RESET_SEQ_COUNT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.VERIFY_BOOT:
num_words = 1
if cmd_str == OpCode.VERIFY_BOOT:
q.add_log_cmd(f"{prefix} {Info.VERIFY_BOOT}")
data = (
object_id.as_bytes
+ struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", MemAddresses.DEADBEEF)
+ struct.pack("!H", num_words)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.MODE_REPLAY:
q.add_log_cmd("PLOC MPSoC: Tc mode replay")
data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_REPLAY)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCode.MODE_IDLE:
q.add_log_cmd("PLOC MPSoC: Tc mode idle")
data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_IDLE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "16":
q.add_log_cmd("PLOC MPSoC: Tc cam command send")
app_data = object_id.as_bytes + struct.pack("!I", ActionId.TC_VERIFY_BOOT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=app_data))
if cmd_str == OpCode.CAM_CMD_SEND:
q.add_log_cmd(Info.CAM_CMD_SEND)
cam_cmd = input("Specify cam command string: ")
data = (
object_id.as_bytes
+ struct.pack("!I", CommandId.TC_CAM_CMD_SEND)
+ struct.pack("!I", ActionId.TC_CAM_CMD_SEND)
+ bytearray(cam_cmd, "utf-8")
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "17":
if cmd_str == OpCode.ENABLE_TC_EXECUTION:
q.add_log_cmd(Info.ENABLE_TC_EXECUTION)
while True:
for key, val in CRIT_CMD_APID_DICT.items():
print(f"{key}: {val[0]} with APID {val[1]}")
key = input("Please specify the command to enable by key: ")
if key not in CRIT_CMD_APID_DICT:
print("invalid key")
continue
apid = CRIT_CMD_APID_DICT[key][1]
break
app_data = struct.pack("!H", apid)
q.add_pus_tc(
create_action_cmd(PLOC_MPSOC_ID, ActionId.TC_ENABLE_TC_EXECUTION, app_data)
)
if cmd_str == OpCode.FLASH_MKFS:
q.add_log_cmd(Info.FLASH_MKFS)
while True:
flash_select = int(input("Please select the flash ID (0 or 1): "))
if flash_select != 0 and flash_select != 1:
_LOGGER.warn("invalid flash select")
continue
break
q.add_pus_tc(
create_action_cmd(
PLOC_MPSOC_ID, ActionId.TC_FLASH_MKFS, bytes([flash_select])
)
)
if cmd_str == OpCode.SPLIT_FILE:
q.add_log_cmd(Info.SPLIT_FILE)
q.add_pus_tc(
create_action_cmd(
PLOC_MPSOC_ID,
ActionId.TC_SPLIT_FILE,
user_data=prepare_simplex_store_file_user_data(),
)
)
if cmd_str == "17":
q.add_log_cmd("PLOC MPSoC: Set UART TX tristate")
data = object_id.as_bytes + struct.pack("!I", CommandId.SET_UART_TX_TRISTATE)
data = object_id.as_bytes + struct.pack("!I", ActionId.SET_UART_TX_TRISTATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "18":
if cmd_str == "18":
q.add_log_cmd("PLOC MPSoC: Release UART TX")
data = object_id.as_bytes + struct.pack("!I", CommandId.RELEASE_UART_TX)
data = object_id.as_bytes + struct.pack("!I", ActionId.RELEASE_UART_TX)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if cmd_str == OpCode.CAM_TAKE_PIC:
q.add_log_cmd("PLOC MPSoC: Cam take picture")
data = prepare_cam_take_pic_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if cmd_str == OpCode.SIMPLEX_STREAM_FILE:
q.add_log_cmd(Info.SIMPLEX_STREAM_FILE)
data = prepare_simplex_stream_file_user_data()
q.add_pus_tc(
create_action_cmd(
PLOC_MPSOC_ID, ActionId.TC_SIMPLEX_STREAM_FILE, user_data=data
)
)
if cmd_str == OpCode.DOWNLINK_DATA_MODULATE:
q.add_log_cmd("PLOC MPSoC: Downlink data modulate")
data = prepare_downlink_data_modulate_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if cmd_str == OpCode.MODE_SNAPSHOT:
q.add_log_cmd(Info.MODE_SNAPSHOT)
mode = prompt_mode_for_submode_change()
q.add_pus_tc(create_mode_command(PLOC_MPSOC_ID, mode, Submode.SNAPSHOT))
if cmd_str == OpCode.MODE_IDLE:
q.add_log_cmd(Info.MODE_IDLE)
mode = prompt_mode_for_submode_change()
q.add_pus_tc(create_mode_command(PLOC_MPSOC_ID, mode, Submode.IDLE_OR_NONE))
if cmd_str == OpCode.MODE_REPLAY:
q.add_log_cmd(Info.MODE_REPLAY)
mode = prompt_mode_for_submode_change()
q.add_pus_tc(create_mode_command(PLOC_MPSOC_ID, mode, Submode.REPLAY))
if cmd_str == OpCode.ENABLE_PLOC_SUPV_COMMANDING_TO_ON:
q.add_log_cmd(Info.ENABLE_PLOC_SUPV_COMMANDING_TO_ON)
q.add_pus_tc(
create_load_param_cmd(
create_scalar_u8_parameter(
object_id.as_bytes, 0, ParamId.PLOC_SUPV_SKIP_CMD_TO_ON, 0
)
)
)
if cmd_str == OpCode.DISABLE_PLOC_SUPV_COMMANDING_TO_ON:
q.add_log_cmd(Info.DISABLE_PLOC_SUPV_COMMANDING_TO_ON)
q.add_pus_tc(
create_load_param_cmd(
create_scalar_u8_parameter(
object_id.as_bytes, 0, ParamId.PLOC_SUPV_SKIP_CMD_TO_ON, 1
)
)
)
def prompt_mode_for_submode_change() -> int:
while True:
mode = input("Please specify primary mode [0: ON, 1: NORMAL]: ")
if mode == "0":
mode = Mode.ON
elif mode == "1":
mode = Mode.NORMAL
else:
print("Invalid mode")
continue
break
return mode
def generate_write_mem_command(
@@ -246,7 +400,7 @@ def generate_write_mem_command(
"""
command = (
object_id
+ struct.pack("!I", CommandId.TC_MEM_WRITE)
+ struct.pack("!I", ActionId.TC_MEM_WRITE)
+ struct.pack("!I", memory_address)
+ struct.pack("!H", mem_len)
+ struct.pack("!I", memory_data)
@@ -259,31 +413,48 @@ def prepare_mem_read_command(object_id: bytes) -> bytearray:
num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: "))
command = (
object_id
+ struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", ActionId.TC_MEM_READ)
+ struct.pack("!I", memory_address)
+ struct.pack("!H", num_words)
)
return bytearray(command)
def prepare_flash_base_cmd(
obc_filename: str, mpsoc_filename: str, action_id: int, object_id: bytes
) -> bytearray:
command = bytearray(object_id)
command.extend(struct.pack("!I", action_id))
command.extend(obc_filename.encode("utf-8"))
command.append(0)
command.extend(mpsoc_filename.encode("utf-8"))
command.append(0)
return command
def prepare_flash_write_cmd(object_id: bytes) -> bytearray:
obcFile = get_obc_file()
mpsocFile = get_mpsoc_file()
command = (
object_id
+ struct.pack("!I", CommandId.FLASH_WRITE)
+ bytearray(obcFile, "utf-8")
+ bytearray(mpsocFile, "utf-8")
obc_file = get_obc_file(OBC_WRITE_FILE_DICT)
mpsoc_file = get_mpsoc_file(MPSOC_WRITE_FILE_DICT)
return prepare_flash_base_cmd(
obc_file, mpsoc_file, ActionId.TC_FLASH_WRITE_FULL_FILE, object_id
)
return bytearray(command)
def prepare_flash_read_cmd(object_id: bytes) -> bytearray:
mpsoc_file = get_mpsoc_file(MPSOC_READ_FILE_DICT)
obc_file = get_obc_file(OBC_READ_FILE_DICT)
cmd = prepare_flash_base_cmd(
obc_file, mpsoc_file, ActionId.TC_FLASH_READ_FULL_FILE, object_id
)
file_size = get_mpsoc_file_size()
cmd.extend(struct.pack("!I", file_size))
return cmd
def prepare_flash_delete_cmd(object_id: bytes) -> bytearray:
file = get_mpsoc_file()
file = get_mpsoc_file(MPSOC_READ_FILE_DICT)
command = (
object_id
+ struct.pack("!I", CommandId.TC_FLASH_DELETE)
+ bytearray(file, "utf-8")
object_id + struct.pack("!I", ActionId.TC_FLASH_DELETE) + file.encode("utf-8")
)
return bytearray(command)
@@ -292,7 +463,7 @@ def prepare_replay_start_cmd(object_id: bytes) -> bytearray:
replay = int(input("Specify replay mode (0 - once, 1 - repeated): "))
command = (
object_id
+ struct.pack("!I", CommandId.TC_REPLAY_START)
+ struct.pack("!I", ActionId.TC_REPLAY_START)
+ struct.pack("!B", replay)
)
return bytearray(command)
@@ -303,7 +474,7 @@ def prepare_downlink_pwr_on_cmd(object_id: bytes) -> bytearray:
lane_rate = int(input("Specify lane rate (0 - 9): "))
command = (
object_id
+ struct.pack("!I", CommandId.TC_DOWNLINK_PWR_ON)
+ struct.pack("!I", ActionId.TC_DOWNLINK_PWR_ON)
+ struct.pack("!B", mode)
+ struct.pack("!B", lane_rate)
)
@@ -315,7 +486,7 @@ def prepare_replay_write_sequence_cmd(object_id: bytes) -> bytearray:
file = get_sequence_file()
command = (
object_id
+ struct.pack("!I", CommandId.TC_REPLAY_WRITE_SEQUENCE)
+ struct.pack("!I", ActionId.TC_REPLAY_WRITE_SEQUENCE)
+ struct.pack("!B", use_decoding)
+ bytearray(file, "utf-8")
# + bytes([0])
@@ -323,30 +494,104 @@ def prepare_replay_write_sequence_cmd(object_id: bytes) -> bytearray:
return bytearray(command)
def get_obc_file() -> str:
LOGGER.info("Specify OBC file ")
input_helper = InputHelper(flash_write_file_dict)
def prepare_cam_take_pic_cmd(object_id: bytes) -> bytes:
filename = input("Specify target filename: ")
selection = input("Use default parameter? (y/n): ")
if selection.lower() in ["y", "1", "yes"]:
encoder_setting_y = 7
quantization_y = 0
encoder_setting_cb = 7
quantization_cb = 0
encoder_setting_cr = 7
quantization_cr = 0
bypass_compressor = 0
else:
encoder_setting_y = int(input("Specify encoderSetting_Y: "))
quantization_y = int(input("Specify quantization_Y: "))
encoder_setting_cb = int(input("Specify encoderSetting_Cb: "))
quantization_cb = int(input("Specify quantization_Cb: "))
encoder_setting_cr = int(input("Specify encoderSetting_Cr: "))
quantization_cr = int(input("Specify quantization_Cr: "))
bypass_compressor = int(input("Specify bypassCompressor: "))
command = (
object_id
+ struct.pack("!I", ActionId.TC_CAM_TAKE_PIC)
+ filename.encode()
+ bytes([0])
+ struct.pack("!B", encoder_setting_y)
+ struct.pack("!Q", quantization_y)
+ struct.pack("!B", encoder_setting_cb)
+ struct.pack("!Q", quantization_cb)
+ struct.pack("!B", encoder_setting_cr)
+ struct.pack("!Q", quantization_cr)
+ struct.pack("!B", bypass_compressor)
)
return command
def prepare_simplex_stream_file_user_data() -> bytes:
filename = input("Specify filename: ")
command = filename.encode() + bytes([0])
return command
def prepare_simplex_store_file_user_data() -> bytes:
num_of_chunks = int(input("Please specify the number of chunks: "))
assert num_of_chunks >= 0
filename = input("Specify filename: ")
command = (
struct.pack("!I", num_of_chunks) + bytearray(filename, "utf-8") + bytes([0])
)
return command
def prepare_downlink_data_modulate_cmd(object_id: bytes) -> bytearray:
format = int(input("Specify format: "))
src_mem_addr = int(input("Specify srcMemAddr: "))
src_mem_len = int(input("Specify srcMemLen: "))
dest_mem_addr = int(input("Specify destMemAddr: "))
command = (
object_id
+ struct.pack("!I", ActionId.TC_DOWNLINK_DATA_MODULATE)
+ struct.pack("!B", format)
+ struct.pack("!I", src_mem_addr)
+ struct.pack("!H", src_mem_len)
+ struct.pack("!I", dest_mem_addr)
)
return bytearray(command)
def get_obc_file(input_dict: dict) -> str:
_LOGGER.info("Specify OBC filename")
input_helper = InputHelper(input_dict)
key = input_helper.get_key()
if key == MANUAL_INPUT:
file = input("Ploc MPSoC: Specify absolute name of flash file: ")
else:
file = flash_write_file_dict[key][1]
file = input_dict[key][1]
return file
def get_mpsoc_file() -> str:
LOGGER.info("Specify MPSoC file")
input_helper = InputHelper(mpsoc_file_dict)
def get_mpsoc_file(input_dict: dict) -> str:
_LOGGER.info("Specify MPSoC filename")
input_helper = InputHelper(input_dict)
key = input_helper.get_key()
if key == MANUAL_INPUT:
file = input("Ploc MPSoC: Specify absolute name file: ")
else:
file = mpsoc_file_dict[key][1]
file = input_dict[key][1]
return file
def get_mpsoc_file_size() -> int:
file_size = int(input("Specify MPSoC file size: "))
if file_size <= 0:
raise ValueError("Invalid file size")
return file_size
def get_sequence_file() -> str:
LOGGER.info("Specify sequence file")
_LOGGER.info("Specify sequence file")
input_helper = InputHelper(SEQ_FILE_DICT)
key = input_helper.get_key()
if key == MANUAL_INPUT:
@@ -354,3 +599,184 @@ def get_sequence_file() -> str:
else:
file = SEQ_FILE_DICT[key][1]
return file
def handle_ploc_mpsoc_hk_data(pw: PrintWrapper, hk_data: bytes, set_id: int):
if set_id == SetId.HK_ID:
fmt_str = "!IBBBBBBB"
current_idx = 0
inc_len = struct.calcsize(fmt_str)
(
status,
mode,
downlink_pwr_on,
downlink_reply_active,
downlink_jesd_sync_status,
downlink_dac_status,
cam_status,
cam_sdi_status,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
current_idx += inc_len
pw.ilog(_LOGGER, "Received MPSoC HK")
pw.dlog(f"Status: {status}")
pw.dlog(f"Mode: {mode}")
pw.dlog(f"Downlink Power On: {downlink_pwr_on}")
pw.dlog(f"Downlink Reply Active: {downlink_reply_active}")
pw.dlog(f"Downlink JESD Sync Status: {downlink_jesd_sync_status}")
pw.dlog(f"Downlink DAC Status: {downlink_dac_status}")
pw.dlog(f"CAM Status: {cam_status}")
pw.dlog(f"CAM SDI Status: {cam_sdi_status}")
fmt_str = "!fffffffff"
inc_len = struct.calcsize(fmt_str)
(
cam_fpga_temp,
cam_soc_temp,
sysmon_temp,
sysmon_vcc_int,
sysmon_vcc_aux,
sysmon_vcc_bram,
sysmon_vcc_paux,
sysmon_vcc_pint,
sysmon_vcc_pdro,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
current_idx += inc_len
pw.dlog(f"CAM FPGA Temperature: {cam_fpga_temp}")
pw.dlog(f"CAM SoC Temperature: {cam_soc_temp}")
pw.dlog(f"System Monitor Temperature: {sysmon_temp}")
pw.dlog(
f"SYSMON VCC INT {sysmon_vcc_int:.3f} | SYSMON VCC AUX"
f" {sysmon_vcc_aux:.3f} | SYSMON VCC BRAM {sysmon_vcc_bram:.3f}"
)
pw.dlog(
f"SYSMON VCC PAUX {sysmon_vcc_paux:.3f} | SYSMON VCC PINT"
f" {sysmon_vcc_pint:.3f} | SYSMON VCC PDRO {sysmon_vcc_pdro:.3f}"
)
fmt_str = "!fffffffffffff"
inc_len = struct.calcsize(fmt_str)
(
sysmon_mb_12v,
sysmon_mb_3v3,
sysmon_mb_1v8,
sysmon_vcc_12v,
sysmon_vcc_5v,
sysmon_vcc_3v3,
sysmon_vcc_3v3va,
sysmon_vcc_2v5ddr,
sysmon_vcc_1v2ddr,
sysmon_vcc_0v9,
sysmon_vcc_0v6vtt,
sysmon_safe_cotr_cur,
sysmon_nvm4_xo_cur,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
current_idx += inc_len
pw.dlog(
f"SYSMON MB 12V {sysmon_mb_12v:.3f} | SYSMON MB 3V3 {sysmon_mb_3v3:.3f} | "
f"SYSMON MBA 1V8 {sysmon_mb_1v8:.3f}"
)
pw.dlog(
f"SYSMON VCC 12V {sysmon_vcc_12v:.3f} | SYSMON VCC 5V {sysmon_vcc_5v:.3f} |"
f" SYSMON VCC 3V3 {sysmon_vcc_3v3:.3f} | SYSMON VCC 3V3VA"
f" {sysmon_vcc_3v3va}"
)
pw.dlog(
f"SYSMON VCC 2V5DDR {sysmon_vcc_2v5ddr:.3f} | "
f"SYSMON VCC 1V2DDR {sysmon_vcc_1v2ddr:.3f} | "
f"SYSMON VCC 0V9 {sysmon_vcc_0v9:.3f} | "
f"SYSMON VCC 0V6VTT {sysmon_vcc_0v6vtt}"
)
pw.dlog(
f"SYSMON SAFE COTS CURR: {sysmon_safe_cotr_cur} | "
f"SYSMON NVM4XO CURR {sysmon_nvm4_xo_cur}"
)
fmt_str = "!HHBB"
inc_len = struct.calcsize(fmt_str)
(
sem_uncorrectable_errs,
sem_correctable_errs,
sem_status,
reboot_mpsoc_required,
) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
pw.dlog(f"SEM IP Uncorrectable Errors: {sem_uncorrectable_errs}")
pw.dlog(f"SEM IP Correctable Errors: {sem_correctable_errs}")
pw.dlog(f"SEM IP Status: {sem_status}")
pw.dlog(f"Reboot MPSoC required: {reboot_mpsoc_required}")
else:
_LOGGER.warning(f"Unknown set ID {set_id} for MPSoC HK")
pass
@dataclasses.dataclass
class DirElement:
name: str
attr: int
size: int
def handle_mpsoc_data_reply(action_id: int, pw: PrintWrapper, custom_data: bytes):
if action_id == ActionId.TM_MEM_READ_RPT:
header_list = [
"PLOC Memory Address",
"PLOC Mem Len",
"PLOC Read Memory Data",
]
content_list = [
"0x" + custom_data[:4].hex(),
struct.unpack("!H", custom_data[4:6])[0],
"0x" + custom_data[6:10].hex(),
]
pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}")
elif action_id == ActionId.TM_CAM_CMD_RPT:
header_list = ["Camera reply string", "ACK"]
content_list = [
custom_data[: len(custom_data) - 1].decode("utf-8"),
hex(custom_data[-1]),
]
pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}")
elif action_id == ActionId.TM_FLASH_DIRECTORY_CONTENT:
if len(custom_data) < 16:
_LOGGER.warning(
"PLOC MPSoC flash directory data shorter than minimum 16 bytes"
)
current_idx = 0
end_of_str = custom_data[current_idx : current_idx + 12].index(b"\x00")
dir_name_short = custom_data[current_idx : current_idx + end_of_str].decode()
current_idx += 12
num_elements = struct.unpack("!I", custom_data[current_idx : current_idx + 4])[
0
]
current_idx += 4
elem_names = []
elem_attrs = []
elem_sizes = []
expected_size = 16 + num_elements * 17
if len(custom_data) < expected_size:
_LOGGER.warning(
f"PLOC MPSoC flash directory data shorter than expected {expected_size}"
)
pw.dlog(
f"Received PLOC MPSoC flash directory content for path {dir_name_short} "
f"with {num_elements} elements"
)
# It is as weird as it looks..
for _ in range(num_elements):
end_of_str = custom_data[current_idx : current_idx + 12].index(b"\x00")
elem_name = custom_data[current_idx : current_idx + end_of_str].decode()
current_idx += 12
elem_names.append(elem_name)
for _ in range(num_elements):
elem_attrs.append(custom_data[current_idx])
current_idx += 1
for _ in range(num_elements):
elem_sizes.append(
struct.unpack("!I", custom_data[current_idx : current_idx + 4])[0]
)
current_idx += 4
for i in range(num_elements):
pw.dlog(f"{DirElement(elem_names[i], elem_attrs[i], elem_sizes[i])}")

Some files were not shown because too many files have changed in this diff Show More