Squashed commit of the following:
commit27e5254ecd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 13 11:45:47 2021 +0100 include fixes commiteb5c56664f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 21:03:09 2021 +0100 relative include commitaf7e9194e5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 21:01:55 2021 +0100 more consistency renamings commit634a8f3469
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:59:15 2021 +0100 renamed to pool manager for consistency commit0b08ac1004
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:56:53 2021 +0100 updated template config files commitb637f03389
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:54:52 2021 +0100 updated defaultconfig commit59b4f50c1c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:53:30 2021 +0100 added FSFW verbose level commitf9a8c3d35a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:46:54 2021 +0100 updated .mk support commitb3e2e93f52
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:46:34 2021 +0100 cleaned up a bit commit20bf7b6fc4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:33:53 2021 +0100 fixed annoying bug commitfa636fded5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 20:15:15 2021 +0100 source files for attorney commit0643faf0e5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 19:59:43 2021 +0100 forward declaration correctness commit40ae81c4ff
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 19:58:29 2021 +0100 unfortunate api change should improve include robustness commit71a12792a9
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 19:41:47 2021 +0100 hopefully this fixes circular includes commit3242264a77
Merge:cafc8e4c
25a86e91
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 15:04:00 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commitcafc8e4ccb
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 14:08:51 2021 +0100 updated attorneys commit25a86e91de
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 13:23:24 2021 +0100 fixed warning of static var commit7e394ea15f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 13:18:18 2021 +0100 replaced all fsfw:: by sif:: for printouts commit071ce21f09
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 13:12:44 2021 +0100 renamed namepsace for printers commitbb10c25909
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 12 00:13:49 2021 +0100 introduced new accessor IF commit0109428d47
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:46:40 2021 +0100 indentation commitfa5580cb7f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:45:04 2021 +0100 indentation commit58d813c249
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:33:58 2021 +0100 minor formatting stuff commit0be4c35b73
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:32:36 2021 +0100 using 100 line width now commit44955db341
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:27:24 2021 +0100 tab replacement commita8873e608c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:25:39 2021 +0100 cleaning up commit065f79615a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:21:21 2021 +0100 compiling again commit5bc46bae02
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 22:18:42 2021 +0100 reverted some stuff commit037bd83af9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 21:31:03 2021 +0100 trying new interface commit0bf0d8e743
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 20:20:39 2021 +0100 stuff commit54e97f7bdc
Merge:ef9ad60b
217866c0
Author: NguSa1 <sa.nguyen@gmx.de> Date: Mon Jan 11 20:18:11 2021 +0100 Merge branch 'sa/new-if' into mueller/master commit217866c042
Author: NguSa1 <sa.nguyen@gmx.de> Date: Mon Jan 11 19:44:07 2021 +0100 SubscriptIF implementation started commitef9ad60ba8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 16:38:25 2021 +0100 doc update commit5e251705f6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 16:33:02 2021 +0100 getter function for object iD commitaf7def3368
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 16:26:46 2021 +0100 some bugfixes commit6010246592
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 16:21:41 2021 +0100 rearchitectured a little bit commit2d28f71eca
Merge:f083e83f
e497c4ab
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 11 00:49:33 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commite497c4ab15
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:34:21 2021 +0100 added new reamde file stubs commitc956feafd6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:30:31 2021 +0100 added new readme which will be filled later commit1f901a14ff
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:28:13 2021 +0100 updated osal readme commit368b42c7b0
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:26:48 2021 +0100 formatting improvements commit6dde0ab8f6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:25:51 2021 +0100 readme update commit952438f252
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:25:19 2021 +0100 README commit7a053b6f72
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 17:24:19 2021 +0100 updated README commit4bfbeead00
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 15:04:47 2021 +0100 additional doc commit63ce87acab
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 14:59:03 2021 +0100 more indentation corrections commit15b65b78e7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 14:57:56 2021 +0100 ndentiation commit6993415873
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 14:54:05 2021 +0100 more tests commit4fa9a1fe19
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 14:33:02 2021 +0100 added more tests commit69e931c07b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 14:27:57 2021 +0100 important logic fix commit1af28dd457
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 13:59:40 2021 +0100 updated user folder for unittests commitb570da6467
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 13:58:33 2021 +0100 more tests added commit918200e88c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 12:53:01 2021 +0100 added first unit tests for hk manager commitf8abf3527d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 10 11:51:33 2021 +0100 fixed indentation commit13ffcfe801
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 9 16:20:35 2021 +0100 prints added commit7129ea67bd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 9 16:06:54 2021 +0100 linux fixes commit36bc7609c5
Merge:dbe326e7
57829faa
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 9 13:52:57 2021 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/fsfw/fsfw into mueller/master commitdbe326e787
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 9 13:52:47 2021 +0100 minor tweak commitf083e83f63
Merge:ffb7b41f
57829faa
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 21:09:29 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commit57829faa64
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 21:03:47 2021 +0100 added cast commitffb7b41f0a
Merge:b59d6d32
12091ca6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 20:56:23 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commit12091ca6ab
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 20:55:36 2021 +0100 enum members renamed, global vars static now commitb59d6d3244
Merge:f64e356d
7c47b1ce
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 20:46:49 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commit7c47b1ce34
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 20:44:05 2021 +0100 100 percent test coverage for pool vector commit9f15cd697d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 16:23:57 2021 +0100 improved includes commita1c394143a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 16:18:08 2021 +0100 small formatting stuff commita9dba82661
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 16:16:17 2021 +0100 bugfix commitc0fd981360
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 16:14:11 2021 +0100 improved DHB error handling commit541478e4d5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 15:15:02 2021 +0100 another small improvement commitf2ecd6d740
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 15:10:33 2021 +0100 revamed and imroved error handling commit5a8647d367
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 13:40:13 2021 +0100 better returnvalues etc. commit3b39c6b6e2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 02:07:37 2021 +0100 defaultcfg update commit2ef3e0aa7b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 02:06:27 2021 +0100 added option to add CR for printf support commit4255176b5c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 01:49:00 2021 +0100 more tests, minor bugfix commit41d8cbda55
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 00:22:04 2021 +0100 small form changes commit8e3f4c81a5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 00:20:39 2021 +0100 pool entry doc correction commitc1c331e29e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 8 00:10:10 2021 +0100 fixed vector test commitd3405ee340
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 7 20:30:52 2021 +0100 whitespace commitd3fbe4a3b9
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 7 20:29:38 2021 +0100 local pool variable error handling improved commit44a5430555
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 7 20:28:03 2021 +0100 pool vector improvements commit3be51762cc
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 7 20:23:23 2021 +0100 improved error handling significantly commit007526c050
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 7 19:10:07 2021 +0100 new f unctions for read error reporting, bugfix commit8aaf45049f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 21:49:40 2021 +0100 major bugfix in rtems osal commitfcb33201a4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 21:45:35 2021 +0100 fixed linux osal commit2b287dfc3a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 21:33:54 2021 +0100 freertos and pool read helper fix commitdacdfc62d3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 21:14:23 2021 +0100 a lot of bugfixes and important api change commit91cf5f1764
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 19:49:58 2021 +0100 added way to completely disable printouts commitdb7d28f852
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 19:32:33 2021 +0100 test update commit8807772d13
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 19:16:41 2021 +0100 100 % line coverage reached commitdc8dd770e7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 19:07:35 2021 +0100 added more tests commit16458f6a1e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 18:20:38 2021 +0100 continued tests commitbd93392b59
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 6 16:26:08 2021 +0100 local pool variabel tweaks and fixes commitb241ef6aad
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 5 22:51:49 2021 +0100 continued tests commita05cf8d4ab
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 5 22:46:17 2021 +0100 updated tests commit85764ba94c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 5 17:30:15 2021 +0100 added include commitfbb063ceda
Merge:8e3aef5d
3c041388
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 5 16:44:52 2021 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/fsfw/fsfw into mueller/master commit3c041388d6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 4 15:31:06 2021 +0100 bugfix commitcca5689a18
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 4 15:17:11 2021 +0100 clock improvements for rtems commit8e3aef5df0
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 4 00:21:44 2021 +0100 adding new tests for local pool variable commit49c6cd9473
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 3 23:27:49 2021 +0100 added local pool owner base commite9a8313df7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 3 23:18:10 2021 +0100 repaired unit tests commite9da8e79f3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 3 22:00:40 2021 +0100 updated testcfg commitf64e356de3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 3 16:42:29 2021 +0100 small include fix commitfd44fb4781
Merge:3486a047
c94a396f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 3 16:00:09 2021 +0100 Merge remote-tracking branch 'upstream/mueller/master' into mueller/master commit3486a04741
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Dec 25 00:37:24 2020 +0100 renaming for name shadowing commitccbbef7778
Merge:208ad7d4
52d9a55d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 17:54:10 2020 +0100 Merge branch 'development' into mueller/master commit208ad7d479
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:24:52 2020 +0100 fixed timeslot task doc commite55df691ff
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:24:15 2020 +0100 upstream subsystem taken over commit27d03dc17f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:21:17 2020 +0100 upstream cmakelists f iles taken over commitf905a753e2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:20:24 2020 +0100 upstream unittest folder adapted commit41dc9ce6c6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:19:30 2020 +0100 cmake lists form upstream taken over commit707bb9dd5d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:18:50 2020 +0100 serviceinterface taken over commit2e1ad41da7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:18:12 2020 +0100 power and pus upstream taken over commitf6e7e232f5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:17:15 2020 +0100 parameter upstream taken over commitc174c9ecb8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:15:18 2020 +0100 osal taken over commite052a9694f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:10:13 2020 +0100 upstream stuff commitc603bcc91c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:08:24 2020 +0100 some upstream stuff taken over commitf21f43754b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:06:46 2020 +0100 taken over upstream defaultcfg commit7b98b0d5dd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:04:39 2020 +0100 txt is md now commitdf7a2322bf
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:03:56 2020 +0100 timemanager update commit8f88032110
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 16:00:30 2020 +0100 taken over upstream .mk file commita73cd37e52
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 15:59:46 2020 +0100 taken over changelog commit75a0df4cd9
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 15:59:28 2020 +0100 tm storage update commit7ba660a222
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 14:18:48 2020 +0100 removed comment commit947dfd69e9
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 14:16:33 2020 +0100 service types.h delted commit362578e982
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 14:12:35 2020 +0100 transition delay abstract commit8896752927
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:22:10 2020 +0100 updated readme commit632f319a2f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:19:00 2020 +0100 updated readme commit95a8dd418c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:29:58 2020 +0100 added cmake lists commitee05a34c9e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:27:47 2020 +0100 added gitmodules commit5e8aff0603
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:25:00 2020 +0100 unittest update commite41aba719c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:20:17 2020 +0100 updated testcfg commitb97b67d56e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:19:07 2020 +0100 updating unittest folder commit770336fff3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 13:06:35 2020 +0100 added ipc cmakelists commit81201d6fb7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 00:39:51 2020 +0100 typo commit38983407fd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 22 00:22:35 2020 +0100 added default implementation for setNormalDatapool entries invalid commit6abc560094
Author: Spacefish <robin.mueller.m@gmail.com> Date: Tue Dec 22 00:55:47 2020 +0100 feed back include improvements commit8dd9d6ad91
Merge:c2619bf0
17a12b78
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 21 23:39:34 2020 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commitc2619bf070
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 21 23:39:24 2020 +0100 transition delay not 0 anymore commit17a12b7807
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:05:44 2020 +0100 clock update commita6e38afb98
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:04:04 2020 +0100 buffer more explicit eof() commit30c9209c74
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:03:19 2020 +0100 better win udp polling task error handling commite511dc61b4
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:02:41 2020 +0100 upstream osal endiness adapted commitde61d0c3ac
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:02:13 2020 +0100 upstream timeval op commitca25714646
Author: Spacefish <robin.mueller.m@gmail.com> Date: Mon Dec 21 14:01:48 2020 +0100 upstream coordinates taken over commit60d69c95c4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 17 17:10:27 2020 +0100 address in use handling for socket commitf8b34bcb53
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 16 13:53:36 2020 +0100 some readme improvements commit8706d663d5
Author: Spacefish <robin.mueller.m@gmail.com> Date: Tue Dec 15 22:57:14 2020 +0100 upstream changes taken over commitf99bf6d75c
Author: Spacefish <robin.mueller.m@gmail.com> Date: Tue Dec 15 22:51:30 2020 +0100 taken over cmake list for storagemanager commit1f7938f610
Author: Spacefish <robin.mueller.m@gmail.com> Date: Tue Dec 15 22:46:55 2020 +0100 deleted archive folder commit910e6817ef
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 15 15:48:06 2020 +0100 default cfg update commit48aef06837
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 15 15:24:46 2020 +0100 fsfwconfig update commitca52255d30
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 15 15:20:32 2020 +0100 update commit3e41b202a1
Merge:052e2ed1
0c3e87f1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 15 14:41:07 2020 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commit052e2ed1e8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 15 14:40:49 2020 +0100 type update, assert that type is not boolean commit0c3e87f1de
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 23:55:54 2020 +0100 using new xTaskDelayUntil commitb8f4d8690b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 23:38:06 2020 +0100 determination of freeRTOS features from version commit9170f466e8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 23:21:07 2020 +0100 freeRTOS version checks commit95b2191824
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 22:55:12 2020 +0100 long name commit3ee25785a2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:54:03 2020 +0100 linux changes adapted commitf2ba653833
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:47:42 2020 +0100 ipc changes taken over commitdb42e79fd4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:38:45 2020 +0100 taken over cmakelists file commit1c79da0e75
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:34:29 2020 +0100 tc distrib changed taken over commit796f0e2e17
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:33:19 2020 +0100 important changes adapted commit8c88255873
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:31:50 2020 +0100 taken over some tweaks commitd2f631a955
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:20:21 2020 +0100 cast added commitf604d621e8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:19:12 2020 +0100 removed interrupt class commit6911f91744
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:15:41 2020 +0100 rtems fixes taken over commitc1a156dde3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:08:35 2020 +0100 catch factory in objects folder again commit050770c184
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 21:07:58 2020 +0100 catch factory fixes commit14a0573f3d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 20:58:20 2020 +0100 one define now commitb14c1c43cc
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 20:50:56 2020 +0100 small fix commit2100ae34f2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 20:49:17 2020 +0100 event folder taken over commita0e7584e84
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 20:19:23 2020 +0100 tiny tweak commita547fafa33
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:49:01 2020 +0100 minor tweaks commit3dd86039bb
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:43:32 2020 +0100 changes taken over commitd3239b9064
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:41:40 2020 +0100 tiny format stuff commit89de4cc321
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:40:26 2020 +0100 changes and tweaks taken over commit5c6916a078
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:23:23 2020 +0100 small tweaks commit620c9c6ae1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:19:05 2020 +0100 taken over freeRTOS changes commit073cd4f5e1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:09:53 2020 +0100 small tweaks commit7ace117c42
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 11:06:09 2020 +0100 added cmakelistst commit0ccd266f51
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 10:49:00 2020 +0100 internal unittests fixed commitf161a94113
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 14 10:44:48 2020 +0100 taken over upstream fixes commit692aa087d8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 22:13:22 2020 +0100 taken over cleaned up branch commit3f77fab2d9
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 22:01:38 2020 +0100 taken over cmake lists commit7c390c07ee
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:58:54 2020 +0100 taken over unnittest folder from upstream commit0b056720ba
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:57:06 2020 +0100 taken over master commitd944e25d4a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:54:46 2020 +0100 taken over upstream changes commitf69113b4d5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:53:37 2020 +0100 taken over upstream change in ipc commit0e42ba062d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:51:46 2020 +0100 notice taken over commit62e16b13d3
Merge:b7dbdb07
b2d01a31
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:51:09 2020 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commitb7dbdb072d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 13 21:50:33 2020 +0100 taken over upstream changes commitb2d01a31c2
Author: Spacefish <robin.mueller.m@gmail.com> Date: Thu Dec 10 16:58:18 2020 +0100 removed some commented stuff commit5bad114205
Author: Spacefish <robin.mueller.m@gmail.com> Date: Thu Dec 10 16:39:31 2020 +0100 thermal module set heating repaired commit9a540e97c5
Author: Spacefish <robin.mueller.m@gmail.com> Date: Thu Dec 10 16:36:44 2020 +0100 taken over thermal module from thermal-update commitdf333e0cc8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 8 16:01:23 2020 +0100 tab replacement commite9a740f110
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 8 16:00:02 2020 +0100 small tweak commitbeab942f07
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 8 15:57:30 2020 +0100 fixes taken over from master commit322dd1253e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 8 15:15:22 2020 +0100 map packet extract update commitd9cccdedf3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 8 14:34:56 2020 +0100 event update commit89e80beb62
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Dec 5 17:10:36 2020 +0100 task if set now commit248ceebf81
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Dec 5 17:09:49 2020 +0100 taken over host osal from upstream branch commitc5c776e676
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 3 18:57:50 2020 +0100 rtems changes taken over from upstream commitb7a29235f8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 3 13:28:56 2020 +0100 deleted memory proxy file commit6d915b7dcf
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 2 23:26:40 2020 +0100 doc formatting commit21c3db4ffc
Merge:586e8b03
4d76bf24
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 2 23:22:40 2020 +0100 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commit586e8b0347
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 2 23:22:28 2020 +0100 function more robust now commitf4ed0ce502
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 2 23:18:48 2020 +0100 doc format improvements commit5e77058add
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 2 23:15:30 2020 +0100 added getter function for pending command commit4d76bf24b5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 19:16:19 2020 +0100 fsfw compiles without datapoolglob folder commite3de5ce777
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 19:12:40 2020 +0100 device handler changes complete commit74b2830d9b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 18:55:53 2020 +0100 using new device handler thermal set commitfff928a191
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 18:29:00 2020 +0100 bugfixes and improvements commit3fb3039be5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 18:16:26 2020 +0100 minus 1 replacement commit0116bb8663
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 18:15:09 2020 +0100 replacing global pool with local pool DHB commit84ab5f8318
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 17:19:26 2020 +0100 readme and logo update commit314dc577b5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 17:19:00 2020 +0100 added changelog from upstream commite0f063f232
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 17:14:44 2020 +0100 comment added commite323c69f20
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 13:36:30 2020 +0100 better name for preproc define commitf357de21c9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 1 13:23:51 2020 +0100 updated testcfg commitef2e07b389
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 17:03:14 2020 +0100 added explicit type conversion operator commitd1beb96c60
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 16:30:20 2020 +0100 some more replacements commitf108ae883c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 16:28:16 2020 +0100 local pool replacement commitf581b37fcf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 16:25:09 2020 +0100 thermal module replacements commit4bb9dd816e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 16:06:59 2020 +0100 compiling again commitf70ee7696a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 15:30:56 2020 +0100 it compiles again commite7a96d5ad8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 14:13:52 2020 +0100 it doesnt work? comment it ! commit25f08b8c1f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 13:59:54 2020 +0100 started replacing local pool vars commitb7945dfe60
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 13:45:08 2020 +0100 added gp_id_t commitfa4597782e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 13:09:56 2020 +0100 some improvements taken over from master commitf0ca4be71e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 30 13:09:03 2020 +0100 fsfw version include removed commit952978f999
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 29 13:04:38 2020 +0100 moved perform hk op call commit279df93cdf
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 29 13:01:37 2020 +0100 form and doc comments commitb7fb1b42e6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 29 12:43:19 2020 +0100 added new cfg option commit03fad1cfcd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Nov 19 00:10:59 2020 +0100 better naming.. hopefully.. commit0d79d4ab03
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Nov 18 21:15:48 2020 +0100 replaced spaces with tab commitcb5fa4a217
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Nov 18 21:15:14 2020 +0100 monitoring changes commit434709ca96
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 10 11:16:56 2020 +0100 parameter small stuff commit72f7a1b1b7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 9 21:24:23 2020 +0100 translation files removed commit225e65628d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 9 00:12:39 2020 +0100 include corrections commit319ae72478
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 8 15:29:06 2020 +0100 folder config renamed to fsfwconfig commitaa45d34b4a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 8 15:20:51 2020 +0100 include improvements /factory improvement commit1b2af5285d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Nov 5 13:12:42 2020 +0100 message queue depth configurable commit8d109b7cd0
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Nov 5 11:57:05 2020 +0100 preproc define correction commit5efbc7496a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 23:39:56 2020 +0100 doc improved, some functions virtual now commitcf7385d64e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 23:32:34 2020 +0100 include fixes commite99cf32bdd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 23:29:03 2020 +0100 amazing size checks commitf72ee0b7ac
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 23:26:28 2020 +0100 small bugfix commit65aecc3565
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 23:23:05 2020 +0100 IT IS DONE commite9aecdac26
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 22:58:09 2020 +0100 sth with eclipse indentiation commitd87f78f5c3
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 22:25:14 2020 +0100 timer stamper in fsfw now commitc69681b402
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 22:22:26 2020 +0100 time stamper commit5908f99f0b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 17:09:33 2020 +0100 size t changes commit30947d3901
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 17:08:40 2020 +0100 size_t changes commitd424d85f6d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 17:07:48 2020 +0100 sizet changes and indentation commit695b161934
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 16:54:56 2020 +0100 some bugfixes commit9e97357b8c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 16:46:43 2020 +0100 taken over changes from master commitf69f9bb31e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 16:31:25 2020 +0100 comments removed commit81f5783d37
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 16:06:30 2020 +0100 clock update, definitions file commitdcf36d4cee
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 15:54:27 2020 +0100 cstdint include added commit83f0b4bffc
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 15:51:56 2020 +0100 defaultcfg changes taken over commit633203eb54
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 15:50:55 2020 +0100 upstream time stamper taken over commit38b5695a10
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 15:45:04 2020 +0100 size check + include guard commitb71ccf8dd8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 3 15:28:55 2020 +0100 some refactoring commitcd71a9cc12
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 2 15:53:08 2020 +0100 fsfw container taken over commit41bf5622f3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 2 15:50:14 2020 +0100 master taken over commitaed7f31f24
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 2 15:47:09 2020 +0100 health changes taken over commite0a11f3a6e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 17:46:44 2020 +0100 include guard update commit6edc2ef1d6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 17:42:05 2020 +0100 class IDs moved commit641da2aa21
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 17:33:22 2020 +0100 config make update commit777457482b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 17:21:51 2020 +0100 fixes for internal unittest commit3fc2068011
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 17:09:16 2020 +0100 fsfwconfig update commit0919d2c532
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 16:52:06 2020 +0100 updates taken over commit3d2778fdf7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 16:45:47 2020 +0100 doc update commit42e611899b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 16:43:03 2020 +0100 added timestamp size commitfb12045f23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 15:25:03 2020 +0100 changes from master taken over commit4b2af9eaa6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 15:15:08 2020 +0100 static keyword removed commit172fbd7e48
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 15:13:03 2020 +0100 some changes taken over commit7970043cb5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 15:12:36 2020 +0100 deleted some sutff commit176ca56e35
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 15:12:05 2020 +0100 core changes taken over commit565fd63d08
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 12:07:48 2020 +0100 makefile moved commit29187fbc4b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 11:59:50 2020 +0100 some config adaptions commita38c3e5005
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 29 11:47:03 2020 +0100 config folder renamed commita9b4874904
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 22:49:19 2020 +0100 new defines added commitb860d8bce7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 22:34:41 2020 +0100 include fixes commit6325eb7647
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 22:11:13 2020 +0100 include fixes commit24cb83498a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 21:28:59 2020 +0100 include fix commit82ccd14692
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 21:25:11 2020 +0100 added new tests commitea04e7d4d6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 21:13:00 2020 +0100 removed catch2 commit3244487eae
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 20:18:58 2020 +0100 slight improvements commitdcb24360d8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 20:17:50 2020 +0100 form improvements taken over commitd1a399a1a8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 19:46:27 2020 +0100 tm packet store update commit90bdb844e7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 28 19:27:00 2020 +0100 taken over some changes commite7210a34f9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 22 14:34:52 2020 +0200 output tweaked commit742cc6eb76
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 21 18:19:51 2020 +0200 no command added commitb9f3c1ee84
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 20 17:53:47 2020 +0200 takne over defaultcfg commit057f3b859e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 20 17:39:48 2020 +0200 added readme and efaultcfg commit9309562716
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 20 17:24:53 2020 +0200 defaultcfg folder added commitbb53c71f70
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 20 17:21:20 2020 +0200 fsfs config update commit7033328962
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 20 17:12:56 2020 +0200 unittest folder added commit95924dd55b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 19 15:38:22 2020 +0200 some more bugfixes commit22e4e464c7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 19 00:43:10 2020 +0200 doc improved, new returnvalue commit75e67ce5f8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 19 00:37:26 2020 +0200 small form improvements commitad9ac7537e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 19 00:25:03 2020 +0200 bool is mapped to uint8 now for pod type conversion commit8b8324f21c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 23:50:02 2020 +0200 some stuff renamed commit1bddfeb86b
Merge:88a89d67
6baa8596
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 22:41:37 2020 +0200 Merge branch 'mueller/LocalPoolTests' into mueller/master commit88a89d6797
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 17:32:10 2020 +0200 added basic documentation commit8e49806057
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 17:23:47 2020 +0200 some adaptions commit3b0b474ab6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 17:01:49 2020 +0200 better naming commit02b7c51318
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 18 16:54:55 2020 +0200 HasParametersIF less confusing commit9a70f75a4b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 16 01:45:07 2020 +0200 returnvalues added commit6f955ed8ba
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 16 00:42:49 2020 +0200 another bugfix commit91cf33127a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 16 00:41:50 2020 +0200 bugfix commit6baa859628
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 13:42:35 2020 +0200 fsfw config removed for now commitba02becfc9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 13:38:41 2020 +0200 deleted old files commitb6ae82ec2c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 13:21:46 2020 +0200 bugfixes commit6e5f029a64
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 12:47:21 2020 +0200 type usage improved, getFillCoutn implemented commit48ff5dea08
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 01:57:30 2020 +0200 line break added commit56dc06e0ed
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 01:51:12 2020 +0200 some little formatting stuff commite5000abbb7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 01:31:11 2020 +0200 custom cmp operator commit364bce90dd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 01:07:20 2020 +0200 small fixes commit1ee01ffcdb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 00:54:00 2020 +0200 important bugfixes commit64bed475fe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 00:43:23 2020 +0200 important bugfix commitd149836612
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 15 00:34:20 2020 +0200 better form commitbdfea9ea38
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 23:53:50 2020 +0200 includes reordered commitb3e5946291
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 23:42:49 2020 +0200 implementation added commit57c9775d7d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 23:41:16 2020 +0200 add fill count func added commit7bd536e763
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 23:20:53 2020 +0200 new templateless pool prototype commitab603abada
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 20:05:39 2020 +0200 subscription mechanism almost complete commita9a31308ae
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 19:52:06 2020 +0200 update notifications working commit5b96161331
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 16:46:00 2020 +0200 optimization and printout improvements commit088bc35301
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 12:42:30 2020 +0200 update handler continued commit45c0acec5f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 01:38:27 2020 +0200 its all falling into places commit9ca086e026
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 01:25:15 2020 +0200 base class extraction complete commit72ca2bfa43
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 14 00:50:24 2020 +0200 added new messages commit9917f7126d
Merge:3af79e57
d22c6a5f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 18:19:28 2020 +0200 Merge branch 'mueller/DHB_separating_steps' into mueller/master commit3af79e572e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 18:19:11 2020 +0200 default msg size for health device commitafe5a62789
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 18:12:26 2020 +0200 imrpoved form, removed comm msg for now commitd22c6a5fe9
Merge:dbb394f7
736ce2d5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 17:44:58 2020 +0200 Merge branch 'mueller/master' into mueller/DHB_separating_steps commit736ce2d5fd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 17:42:30 2020 +0200 some more form improvements commit06c7919daa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 17:39:13 2020 +0200 monitoring form improvements commite4c74ec060
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 16:57:37 2020 +0200 added todos commit8c689751b4
Merge:b9ebd153
18671a0d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 16:55:57 2020 +0200 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commitb9ebd153a2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 16:55:40 2020 +0200 added action helper function commit18671a0db7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 12 13:40:24 2020 +0200 doc wrong commited71a37004
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 20:11:20 2020 +0200 get command queue override commit3e79d2e73a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 20:04:01 2020 +0200 added extended controller base commit670e9bfa0f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 18:12:22 2020 +0200 CMD/REPLY prefixes added commitb9c7d1bd3f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 18:09:04 2020 +0200 added health subservices commit01e7a98425
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 17:55:38 2020 +0200 added announce all subservice commitbc0402faf7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 17:49:50 2020 +0200 health update commit837a18135e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 17:41:51 2020 +0200 subsystem folder update commit3aa666633e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 17:14:52 2020 +0200 include guard replacements commit94884c2402
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 10 17:11:11 2020 +0200 service 1 small improvements commite338b4662d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 9 02:49:18 2020 +0200 fix for c++11 comformity commit2364c4f9a4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 7 20:47:46 2020 +0200 form improvements commit6e9db0d675
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 7 18:43:56 2020 +0200 retval added commit9fb38e9b7c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 6 19:58:29 2020 +0200 better error output commitdf1a730cdf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 6 16:01:35 2020 +0200 some form stuff commit6a077c583d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 6 14:00:18 2020 +0200 action helper some formatting stuff commit8c43c6993e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 5 22:47:32 2020 +0200 CSB fifo depth configurable commitc17d50bd1e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 5 19:46:25 2020 +0200 file syste mmessage moved to mission code for now commit1431116417
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 5 12:11:11 2020 +0200 NULL exception somewhere commita7fe23c300
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 5 00:12:52 2020 +0200 small stuff commitf955cd9eee
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 4 23:37:22 2020 +0200 made interface more generic commita8a6d448ec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 4 23:24:36 2020 +0200 added subservices commit2b1029916b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 4 15:55:39 2020 +0200 using deletei nstead commit20c261514b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 4 14:31:06 2020 +0200 made message interface more readable (dec instead hex) commit0c1c61558b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Oct 3 03:45:29 2020 +0200 very important bugfix commit55a4c0423d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:45:28 2020 +0200 typo commitaf038d0a2f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:44:27 2020 +0200 master taken over commitf9e6b9faca
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:42:28 2020 +0200 taken over master commit0b1b159582
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:40:45 2020 +0200 taken over master commitbf3276cbb2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:40:02 2020 +0200 taken over master commit148bbb4be4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:36:43 2020 +0200 master taken over commitf2c07ee9c6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:35:56 2020 +0200 removed tests commit5fbb8f8ef0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:35:13 2020 +0200 taken over fixed array list from master commit1ecca4b3d8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:33:50 2020 +0200 taken over array list commit0714dc6e06
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 20:31:30 2020 +0200 taken over container commit26454356f8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 13:57:34 2020 +0200 tpp extraction commit315777d265
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 13:21:23 2020 +0200 tc distribution equalization commit32ebca48b8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 11:07:46 2020 +0200 FIFO updates commit43b44c57b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 1 11:07:20 2020 +0200 placement fact update commitaed2d7fc93
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 30 23:42:18 2020 +0200 slight formatting commitd44428f49c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 30 23:38:54 2020 +0200 DH IF and DH message improved commitd8392de058
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 30 20:28:33 2020 +0200 made define more generic commitb59a4c5de6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 18:02:41 2020 +0200 equalization complete commit3c814a5e61
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 18:01:55 2020 +0200 include fixes commit4f3cfdcaaf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 16:41:14 2020 +0200 fixed map and array list implemented as non - members commit9013ac240f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 16:12:01 2020 +0200 array list taken over commitd85096d98b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 16:03:01 2020 +0200 service 200 take over commite1eb1a3be1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 15:48:42 2020 +0200 small tweaks commit1ea1c8c02f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 15:16:20 2020 +0200 srv9 fix commit207d2cab9c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 15:15:29 2020 +0200 service 1 changes taken over commitbc23fd65a6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 15:13:51 2020 +0200 master taken over commitfd87a16661
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 14:51:25 2020 +0200 changes taken over commit485e96f12f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 14:49:57 2020 +0200 merged changes commit224248dfa1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 14:27:31 2020 +0200 removed debug outpuzt for missed deadline commit1691d63169
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 13:54:08 2020 +0200 include fix commit3663d7269c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 13:37:21 2020 +0200 changes taken over commit7b1f72254f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 13:30:30 2020 +0200 object id names improved commit53a6225790
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 29 12:50:36 2020 +0200 doc & tweaks commit260fac43f7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 23:38:37 2020 +0200 bugfix commit1f70b1159d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 23:21:21 2020 +0200 another small bugfix commit7ff9c29b62
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:51:02 2020 +0200 added another command commit62ee1391bf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:48:10 2020 +0200 added two new commands commit1d972fcbef
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:46:18 2020 +0200 hk messages are cleared properly now commit7e9d095ed1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:38:36 2020 +0200 important bugfixes commite48dbb8797
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:17:18 2020 +0200 small improvements commit786dcdf88d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 22:13:17 2020 +0200 removed clock include commitad2ca814b2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 21:28:03 2020 +0200 improved doc commitbf574c12e4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 21:09:56 2020 +0200 bugfixes, owner ptr not const anymore commit88c4b2a539
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 28 16:56:42 2020 +0200 bugfixes for srv3 commitc12110cbf1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 22:23:17 2020 +0200 has file system IF retvals commit6eaade2395
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 17:28:03 2020 +0200 added new mode for local datapool manager commitc3830da3d0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 17:24:06 2020 +0200 bugfixes commit4a97596030
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 17:21:32 2020 +0200 internal error reporter uses new local datapool now commite67b1fce9a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 16:38:07 2020 +0200 added additional include commit52d8c4f3a8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:35:10 2020 +0200 include guard fix commitde08bd6c8a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:33:24 2020 +0200 small include fix commit5062170407
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:32:16 2020 +0200 correct function used now commit55bdd2c2f5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:28:28 2020 +0200 include fix commit6fd39dfac3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:27:06 2020 +0200 set struct reporting continued commit08d0e09493
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:16:13 2020 +0200 power equalization commitfab7eb8a5d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 15:03:04 2020 +0200 controller base update commit9aca5cb6f2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 26 14:59:40 2020 +0200 taken over convergence changes commitcf28c9ff9d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 25 19:01:59 2020 +0200 make event func changed commita65745d037
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 25 18:40:04 2020 +0200 added explicit function to refresh task handle commit5ca1c7bca2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 23 19:58:51 2020 +0200 coutndown update commit43ab0ba270
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 23 19:55:48 2020 +0200 updated subsystemId ranged commit2f0b36de46
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 23 19:54:22 2020 +0200 updated framework object list commit9ff3a8537c
Merge:320a5ac3
c7a6711e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 23 17:44:41 2020 +0200 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commit320a5ac355
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 23 17:44:22 2020 +0200 has health IF improvements commitc7a6711eec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 22 16:25:10 2020 +0200 include fix commit4074ca1b89
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 22 14:22:14 2020 +0200 error code improved commit5072c09bc0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 22 13:59:25 2020 +0200 csb hotfix commite3cbc4dfd5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 22 02:12:02 2020 +0200 shared ring buffer extended commitf5d793a1cf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 20 13:38:53 2020 +0200 file system message getter func commit763c52cfca
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 21:57:23 2020 +0200 CSB FIFO first steps to make configurable commit40db85e73f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 21:36:12 2020 +0200 separate messages for success/failure commitcad08e1ea9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 20:54:27 2020 +0200 error output for failed deletion commite140d39944
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 20:08:25 2020 +0200 some fixes for sd card handler commit9e9bde0395
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 19:50:02 2020 +0200 srv23 taken over commit44989ada64
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 19:41:41 2020 +0200 file system message taken over commit718502c04b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 17:15:33 2020 +0200 added additional flag which casn be used to disable periodic handling commit02f778ea1d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 17:14:09 2020 +0200 new error code added commit4ab7a08387
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 17:08:08 2020 +0200 srv3 continued commit32c0140cc2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 15:58:34 2020 +0200 hk stuff continued commit9ecbc8199e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 02:46:29 2020 +0200 added periodic helper commitba56f48e8e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 19 01:17:43 2020 +0200 huge progress on hk + testing commit757d2275ea
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 15:06:14 2020 +0200 internal bugfix commit33e7cca23c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 15:01:35 2020 +0200 several bugfixes amd improvements commit5e3f40a2c1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:40:48 2020 +0200 changes taken over from pull request commit3a043b5773
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:31:51 2020 +0200 object manager tweaks complete commitf50a80fc3c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:29:42 2020 +0200 minor tweaks commit4d4166071c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:28:20 2020 +0200 added pus services to framework objects commit1b5c3786b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:24:06 2020 +0200 taken over serviceinterface folder commitb429359864
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:14:01 2020 +0200 renormalize files commit57c88059e5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:12:07 2020 +0200 DHB small improvements commit7b0ddb3941
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 13:09:23 2020 +0200 quick fix DHB commite70e9e3f1f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 12:57:30 2020 +0200 added uptime seconds functions commit19632b8fb1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 12:36:36 2020 +0200 linux fixes commite0b2e0b00a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 12:31:11 2020 +0200 fxed linux message queues commit37f4cc4644
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 18 12:28:29 2020 +0200 taken over stopwatch changes commit0c6514a682
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 17 22:31:28 2020 +0200 clock uses getUptime again commit6ef5e3e550
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 16 21:22:53 2020 +0200 queue factory host OS fix commite5dac30e98
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 17:37:43 2020 +0200 new include used now commit0d5724e3d4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 17:34:07 2020 +0200 include improvements taken over commit347d591def
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 17:33:21 2020 +0200 uses new define and config file now commit7643af8607
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 17:15:22 2020 +0200 include guard fix commitb8ad17639c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 17:02:31 2020 +0200 include guard fix commit850a4a3e3d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 16:44:48 2020 +0200 header file renamed commit15891b3cf0
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 16:42:17 2020 +0200 fixed some message queue includes commitad98a63e87
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 16:02:58 2020 +0200 changes taken over from upstream master commite707c5e051
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 15 15:58:12 2020 +0200 fixes taken over commite8de2fc47a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 14 18:29:19 2020 +0200 added srv3 commit2d2316a0c7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 14 18:01:48 2020 +0200 hk message continued commitf9612afe06
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 11 14:06:08 2020 +0200 added report status toggler commit71125c075a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 21:05:50 2020 +0200 added new setter function commit2d2d0de35c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 20:24:49 2020 +0200 local data pool manager bugfixes commitd7bbd4b652
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 19:51:17 2020 +0200 severla bugfixes, new periodic op divider added commite4d95a4e09
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 16:07:09 2020 +0200 subsystem changes taken over commite57d4a11ae
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 16:01:05 2020 +0200 fixed ordered multi map changes integrated commitd9dcee3692
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:55:56 2020 +0200 array list changes taken over commitf35efa3cbe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:52:00 2020 +0200 taken over CSB changes commit96e471add6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:51:11 2020 +0200 merged fixed map changes commitbbc73a6aaf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:25:29 2020 +0200 taken over serialize adapter changes commitfd09774fc3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:18:45 2020 +0200 serialize if update commitf663de2418
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:17:38 2020 +0200 taken over changes from master commit224ea3914a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:15:13 2020 +0200 deleted file not needed anymore commitdb3e32655d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:05:26 2020 +0200 changes taken over from master commit18e6de7d6b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:04:43 2020 +0200 added compile time check commitcefac2db0b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:03:28 2020 +0200 assignment operator added commitd43ef479b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:02:58 2020 +0200 assignment operator added commit26bb2de050
Merge:d99b100a
e085deb2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 10 15:01:49 2020 +0200 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commite085deb235
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Sep 7 15:23:27 2020 +0200 fifo fix commitd99b100ace
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 18:46:56 2020 +0200 debug output removed commit26cbcdbff0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 15:21:02 2020 +0200 removed comment commit673af26472
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 14:57:05 2020 +0200 rework/restructuring commit50ae50d286
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 14:01:41 2020 +0200 removed pool raw access helper commitac2f6c5ed4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 12:59:59 2020 +0200 minor improvements commitefa41b29aa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 12:16:43 2020 +0200 added informative comment commit8db9a4a191
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 12:00:57 2020 +0200 some minor tweaks commit7774434d7a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 11:58:12 2020 +0200 windows sockets working commit3e0819f954
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 11:48:32 2020 +0200 some bugfixes commitb7c4f5ce05
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 10:36:39 2020 +0200 continued win sockets commit0c85b05aca
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 09:54:22 2020 +0200 continued win bridge commit08ffbfefae
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Sep 6 09:33:02 2020 +0200 added windows udp bridge commitf698275a0b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:59:17 2020 +0200 removed seconds typedef, confusing commitc7606b7b1e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:51:17 2020 +0200 updating and cleaning pool files commitcb970b1883
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:24:59 2020 +0200 task IF is set now commit7a24f89915
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:19:15 2020 +0200 removed comment commitc43ae66205
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:18:30 2020 +0200 some tweaks commit883103af2b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:13:07 2020 +0200 queue map manager update commit80e60566d8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 21:11:27 2020 +0200 compiling and working again commit39b675cf99
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 20:39:10 2020 +0200 repairing host osal commit05814dc805
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Sep 5 15:58:53 2020 +0200 added way to start DH immediately, bugfix in event manager commitfaeeca8707
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 16:07:54 2020 +0200 seiralize folder converged commit1803030640
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 16:04:11 2020 +0200 taken over serialize element changes commit721b981df2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 16:01:18 2020 +0200 changes taken over commit305d8ef840
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:56:52 2020 +0200 taken over changes commitf2f7a5de87
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:47:33 2020 +0200 taken over convergence changes commit0d69e9beca
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:42:15 2020 +0200 taken over serial uffer adapter from upstream commit37764f7ca7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:39:17 2020 +0200 include guard fixed commitbe89e7ebb7
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:36:53 2020 +0200 taken over from upstream with little tweak commitcfa952d982
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:33:36 2020 +0200 hybrid iterator same to FSFW commitfff0131c9b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:20:07 2020 +0200 taken over changes commit147ab94149
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 15:13:32 2020 +0200 include guard improvements commitf4a5067775
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 14:53:27 2020 +0200 update fw class Ids commit94b45d7407
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 14:49:27 2020 +0200 changed taken over commit9d1f292af0
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 14:32:32 2020 +0200 changed taken over commit6980245c98
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 14:30:04 2020 +0200 added line break commit31c16382fc
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Sep 4 14:28:43 2020 +0200 took over changed for fixed slot sequence commit403d83f32c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 3 13:01:14 2020 +0200 removed commented out code commitdbb394f761
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 3 00:22:16 2020 +0200 new member to store last step commit822a908353
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Sep 3 00:17:01 2020 +0200 separated steps, everything seems to work commite8fa9816ce
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 2 23:45:14 2020 +0200 doc improved commit6069c64048
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 2 23:36:54 2020 +0200 doc improved commit631b2ca705
Merge:ae9bc39b
33039f8c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 2 17:59:45 2020 +0200 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commitae9bc39bda
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Sep 2 17:59:26 2020 +0200 some bugfixes and improvements commit33039f8c60
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:57:56 2020 +0200 include guard correction commitbec562ece0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:54:33 2020 +0200 FIFO updates commita634875b4b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:50:17 2020 +0200 dynamic fifo update commit7cf79c17a9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:48:51 2020 +0200 fifo update commitf7f134ac20
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:48:11 2020 +0200 corrections commitedde2ee58b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Sep 1 12:43:50 2020 +0200 offsetr update commit15bb0aee98
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 29 19:08:10 2020 +0200 handler ID cached, debug output improved commit6c02776975
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 29 00:16:40 2020 +0200 added srv9 commitb0673c7fa6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 18:47:11 2020 +0200 typo fixes commitb6a19f911d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 18:45:19 2020 +0200 include guards improved commit1b9c8446b7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 18:33:29 2020 +0200 renormalized line endings commit9abd796e6f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:58:36 2020 +0200 updated map packet extraction commit8596810fe2
Merge:9f522466
b71cab39
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:58:31 2020 +0200 Merge branch 'event/git-update' into mueller/master commitb71cab3993
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:55:13 2020 +0200 integrated all changes commit9f522466f0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:52:13 2020 +0200 wrapped info output in additonal ifdef commite800aad979
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:44:10 2020 +0200 event git update commitd2ef2b2be4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:40:53 2020 +0200 taken over datalinklayer form upstream commit5ce954672b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:40:21 2020 +0200 taken over coordinates from upstream commit2e23fc1201
Merge:468ebfb8
8862f35a
Author: Robin Müller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:37:29 2020 +0200 Merge pull request 'git is weird' (#15) from mueller/action-git-update into mueller/master Reviewed-on: #15 commit8862f35ad1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:35:27 2020 +0200 git is weird commit468ebfb809
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:18:11 2020 +0200 include improvement commit5ca26a72ea
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 28 17:00:16 2020 +0200 fixed some shadowing issues commit42dd665e26
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 20:06:19 2020 +0200 include improvement commited70f38612
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 20:04:17 2020 +0200 some renaming commita6e99e443a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 20:00:36 2020 +0200 took over dHB failure isolation base fixes commit4d1b1ba506
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 17:24:40 2020 +0200 additonal doc for freeRTOS semaphores commitb9314cffb9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 17:13:52 2020 +0200 small improvements commit5aa664648e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 17:03:54 2020 +0200 linux semaph update commitfd42d8cd46
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 16:14:42 2020 +0200 periodic task taken over from master commit6d3fdab944
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 15:52:55 2020 +0200 adapted semaphore IF to mutex IF commit1dfdd65662
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 14:42:10 2020 +0200 new initializeSequence func commit790e0399b7
Merge:67ab1f62
3aa6858c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 14:23:14 2020 +0200 Merge branch 'mueller/project/distribDatapool' into mueller/master commit67ab1f6240
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 27 14:17:13 2020 +0200 initialize after task crteation moved commit0f9930524b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 26 15:54:13 2020 +0200 some minor improvements commit83c9d4fc1c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 26 14:55:27 2020 +0200 improved tmtc bridge commit51b62fd9b1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 26 03:21:26 2020 +0200 debug output fix commitc314792e86
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 26 02:52:59 2020 +0200 linebreak changed commitda3b2b2500
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 18:09:05 2020 +0200 form improvements commit6afbeb8423
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 13:42:11 2020 +0200 removed linker forward decl commit92e18b91a3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 13:38:53 2020 +0200 seriasl buffer update commitb97128c12e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 13:29:10 2020 +0200 deserialize improved commitc8ba486538
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 13:17:57 2020 +0200 serial buffer adapter commit3aa6858c93
Merge:11ce3d02
6afbeb84
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 25 13:04:20 2020 +0200 Merge branch 'mueller/master' into mueller/project/distribDatapool commit11ce3d025f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Aug 24 22:08:27 2020 +0200 srv3 received reply now commit8e7f167a66
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Aug 24 14:48:22 2020 +0200 small fix taken over commita5227115e5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 23 23:24:48 2020 +0200 first subscriptio nfunction written commita95bc6b293
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 23 22:33:22 2020 +0200 sid cached now commit687e124929
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 23 21:52:44 2020 +0200 doc added commit2b63f1b3f3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 23 21:00:25 2020 +0200 New reporting mode commit2f53a3fb1b
Merge:f39b8bdb
cdaed452
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 23 20:27:00 2020 +0200 Merge branch 'mueller/master' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller/master commitcdaed4523b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 21 16:15:40 2020 +0200 tmtc bridge todo added commit0d47606229
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 21 15:49:06 2020 +0200 tm/tc packet stored improvements commit15fd30b23f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 20 22:31:58 2020 +0200 assigned read len for decoding error commit9385f90241
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 20 20:36:49 2020 +0200 some bugfixes and improvements commitadbf39166f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Aug 20 18:13:17 2020 +0200 removed pus parser commitf90bd01282
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 19 17:00:50 2020 +0200 added srv17 and srv201 commit7b998268cb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Aug 19 13:17:40 2020 +0200 error message improvement commita1d94ec556
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 18 20:51:13 2020 +0200 added aditional comment commit5af50cfbf7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 18 20:50:24 2020 +0200 renamed .mk file commitfbecda7549
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 18 13:09:15 2020 +0200 include replacements commitf39b8bdb41
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Aug 10 18:33:28 2020 +0200 several simplifications commit87eb31b65a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 9 20:06:29 2020 +0200 local data pool manager uses new packet now commit9e7d92b387
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 9 19:46:37 2020 +0200 some renaming , hk packets finished commita181f19c02
Merge:b092850d
5d09ae32
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Aug 9 17:13:58 2020 +0200 Merge branch 'mueller/master' into mueller/project/distribDatapool commit5d09ae3221
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 23:47:44 2020 +0200 additional comment commitf9ce1d9eb9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 23:46:21 2020 +0200 more simplifications for shared ring buffer commit6484c1a276
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 23:45:18 2020 +0200 shared ring buffer simplified commitb092850dfc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 21:32:15 2020 +0200 internal housekeeping packet finished commitb828d7c6d7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 19:56:42 2020 +0200 continued with local datapool manager commite7d28d630c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 19:43:28 2020 +0200 continued with implementation commit03cd5780f9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 13:29:38 2020 +0200 null initializations in header commit121e94a385
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 13:20:02 2020 +0200 local pool var update commit5c85d03c39
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 13:04:31 2020 +0200 additional check for freeRTOS commitfba8775f49
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 12:51:31 2020 +0200 some renaming commitf766398b20
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 12:49:20 2020 +0200 some bugfixes commitaf11c8fcf9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 12:38:39 2020 +0200 freeRTOS corrections commita6a1e65607
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 12:17:27 2020 +0200 local data set fix commit4afb19be51
Merge:b7411591
03cd5780
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 8 12:04:52 2020 +0200 Merge branch 'mueller/master' into mueller/project/distribDatapool commit979fea3400
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 22:15:03 2020 +0200 mutex helper api change commit458e849f7d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 22:11:13 2020 +0200 adapting mutex helper to new interface commit44b70b45e2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 22:06:20 2020 +0200 little doc correction commite3d094b2de
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 22:02:23 2020 +0200 linux: removed old static timeout values commit37f2539d89
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 20:44:40 2020 +0200 empty line removed commitbfecbfbd80
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 20:36:37 2020 +0200 implemented new mutex interface commit1a118fe215
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Aug 7 19:21:47 2020 +0200 added documentation to assembly base commit66039bd3fe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 18:14:39 2020 +0200 move group def down commitc4ffb1acd5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 18:12:15 2020 +0200 subservice number correction commit3f87537c61
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 15:25:24 2020 +0200 minor corrections commit4d3f0875c1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 15:23:37 2020 +0200 periodic task if adapted commit2177877625
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 15:16:09 2020 +0200 updated framework subsystem ID ranges commit4dcfa5125e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 11:47:47 2020 +0200 added additional calls commit6b475792a4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 02:25:10 2020 +0200 shared ring buffer continued commit4e9e465360
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 02:00:00 2020 +0200 shared ring buffer continued commit0ead44bea9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 01:07:59 2020 +0200 getFreeElement implemented commitf240827bbd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Aug 4 00:59:19 2020 +0200 added getFreeElement commitebf5d41a78
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 1 19:03:03 2020 +0200 parameters IF doc and improvement commit7475e6a9b8
Merge:76cc3e96
66eac57e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 1 17:06:12 2020 +0200 Merge branch 'mueller/master' into source/master commit66eac57e3b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 1 16:54:54 2020 +0200 csb update commit58a4f4f8a1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 1 16:39:17 2020 +0200 command message bugfix, CSB improvement parameter helper diagnostic message commit76cc3e96e8
Merge:ffba6641
18899a4c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Aug 1 12:34:46 2020 +0200 Merge branch 'mueller/master' into source/master commit18899a4c82
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 29 20:07:24 2020 +0200 hotfix for deadline checking commit276c3b172e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 29 15:32:36 2020 +0200 better diagnostic warning for DHB commitc64aa9f7f5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 28 21:00:11 2020 +0200 another important bugfix commit9fa9421ba5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 28 20:57:05 2020 +0200 important bugfix commit9acf82cf51
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 28 18:12:10 2020 +0200 doc improved commit69f9ff02f0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 28 17:00:51 2020 +0200 better returnvalue for failed comIF init commitafc16ef2d7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 28 12:49:18 2020 +0200 new servicei nterface buffer /stream commit6425c0dd4c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 26 03:12:04 2020 +0200 better init error output commite179288c00
Author: Steffen Gaisser <gaisser@irs.uni-stuttgart.de> Date: Thu Jun 25 18:09:32 2020 +0200 Fixed spelling mistake in HealthHelper commitb7411591a1
Merge:a0b8f885
b4d6d970
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 16 12:42:02 2020 +0200 Merge branch 'mueller/master' into mueller/project/distribDatapool commitb4d6d970bc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 16 12:41:05 2020 +0200 removed HK manager virtual functions commitaaafed7b28
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 16 12:38:21 2020 +0200 health table init now mandatory, better diagnostic output for uninit health table or invalid health helper owner commit47b3a428c6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 16 12:33:03 2020 +0200 removed device switch, not necessary anymore commita0b8f8855c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 16 11:45:23 2020 +0200 cotinued distir datapool commite5ab7ada68
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 14 15:45:03 2020 +0200 added new interfaces for datasets commite204bd77c6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 14 02:21:11 2020 +0200 created tpp file for fixed ordered multimap commite7b6999c5e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 13 22:13:19 2020 +0200 added back inttypes.h for cleaner code commit15052cb333
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 13 19:54:38 2020 +0200 singly linked list update commit6d99ab3df3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 13 19:37:33 2020 +0200 ncreased readability of DHB function commitb4f292f3d7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 12 18:01:09 2020 +0200 new generic freertos task interface commit99aef0cf28
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 12 01:16:32 2020 +0200 C++ linkage for yield from ISR function commit7d794c7623
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 18:24:09 2020 +0200 task management functions have freertos syntax now commit799846d89f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 14:29:30 2020 +0200 little formatting changes commite4f795d209
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 13:38:14 2020 +0200 stack high watermark in bytes now commitffba664144
Merge:69946d52
35d4267b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 11:57:46 2020 +0200 Merge branch 'mueller_framework' into front_branch changes for new freertos task monitor commit69946d5276
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 11:52:01 2020 +0200 FIFO hotfix commit35d4267b40
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 02:36:04 2020 +0200 dynamic fifo bug fixed commit6a6395313f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 11 01:06:01 2020 +0200 added copy ctor and assignment for FIFObase commit444ee80f35
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 20:31:10 2020 +0200 removed unnecessary case and added more size checks commit3145036210
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 19:34:18 2020 +0200 getter functions for task handle commit36a7f2f9ee
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 14:32:25 2020 +0200 removed file header comment commite29226c9bb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 14:28:36 2020 +0200 srv8 improved commit9716bcdd74
Merge:c8821ae7
a7d68f8c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 13:55:14 2020 +0200 Merge branch 'mueller_framework' into front_branch commita7d68f8c52
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 13:31:45 2020 +0200 deleted copy ctor commitbe8913efea
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 03:30:52 2020 +0200 srv8 improvements commit9cbc1a18b8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 03:16:08 2020 +0200 csrv200 improvements commitbdc6e88198
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 03:09:32 2020 +0200 reordered includes commit3551a767a7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 03:06:18 2020 +0200 removed old code commitf3739fd213
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 02:44:58 2020 +0200 bugfix failure isolation base commit7a4cc1a6b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 01:22:23 2020 +0200 hk manager initialized now commit1fde3c2c99
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jul 10 00:19:25 2020 +0200 added srv200, CSB doc commitcdd877032f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 23:20:48 2020 +0200 doc for system object IF improved commit57418eb877
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 20:04:49 2020 +0200 distrinction between default settings and individual settings for service commitad049cc634
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 19:41:52 2020 +0200 tmtc bridge formatting improvements commitceb6197904
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 17:01:12 2020 +0200 some minor improvements commitda30680d04
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 16:54:18 2020 +0200 readability improvement commit0cdce6e327
Merge:a5d3d9ea
ac9e6e13
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 16:47:39 2020 +0200 Merge branch 'mueller_devel_distribDatapool' into mueller_framework commita5d3d9ea80
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 16:46:57 2020 +0200 improved init function commit5a351474d2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 16:31:33 2020 +0200 DHB ctor simplified commit32ef807341
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 15:49:52 2020 +0200 newline commitecd740a101
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 15:47:50 2020 +0200 ring buffer base calls made protected commit6f50356964
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 14:26:15 2020 +0200 new shared ring buffer commitac9e6e1337
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 9 00:59:10 2020 +0200 continued with local data pool manager commitc8821ae74f
Merge:e48de981
64c290ff
Author: Robin Müller <robin.mueller.m@gmail.com> Date: Wed Jul 8 18:49:09 2020 +0200 Merge pull request 'A lot of new features and tweaks' (#12) from mueller_framework into front_branch commit64c290ffe4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 18:38:58 2020 +0200 include guard fix commitdc27cc9aff
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 18:37:26 2020 +0200 srv8 added to framework commit8046d005a4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 18:18:54 2020 +0200 CSB static framework id setting commit236ad1b85b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 15:06:46 2020 +0200 a lot of debug output added commit5ec78b065c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 13:29:57 2020 +0200 error handling for invalid dest queues improved commitb56aa94f99
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 12:54:40 2020 +0200 additional doc commit01b1080376
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 12:53:46 2020 +0200 readability increase commit94f9b1e1ef
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 12:41:15 2020 +0200 dle encoder doc finished and hopefully correct commit264914e86a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 03:18:09 2020 +0200 tmtcbridge tweaks. UDP bridge now working :-D commit2efcda735f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 8 02:20:38 2020 +0200 message arriving. big clean up in tcdistribution folder commit399fc0e287
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:42:37 2020 +0200 fifo replacements commitdd48f7ccad
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:28:00 2020 +0200 some form improvements commit06d389ed1e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:25:52 2020 +0200 increased srv2 readability commit684b56ac88
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:21:47 2020 +0200 srv2 tweak: CSB params now configurable commit7698f3f13e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:18:33 2020 +0200 moved srv2 to framework commit359163886b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 17:06:30 2020 +0200 pus srv5 and 1 moved to framework commit4f1f610ae0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jul 7 16:36:41 2020 +0200 doc and improvements for DLE encoder commite48de981f5
Merge:062ebabb
cb691db8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 23:31:38 2020 +0200 Merge branch 'mueller_framework' into front_branch commitcb691db807
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 23:07:38 2020 +0200 fifo tweaks, pus parser fixes commitfd1e612ea5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 20:17:05 2020 +0200 pus parser fixes commit8ba75fc3c2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 19:36:21 2020 +0200 pus parser implemented commitf442a5889e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 16:34:11 2020 +0200 pus parser continued commit78283ddbee
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 14:09:33 2020 +0200 queue map manager: not using std::atomic anymore commitb61e1df8bc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 13:43:41 2020 +0200 fifo in namespace now commitbb5de8f110
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 13:41:07 2020 +0200 merged new changes commit2158208a2f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jul 6 00:33:55 2020 +0200 new pus parser commitebec074655
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 23:53:13 2020 +0200 Split up FIFO into StaticFIFO and normale FIFO commit2395e487ae
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 20:42:05 2020 +0200 udp polling taks init commit327b1e9d2f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 19:11:21 2020 +0200 file renamed commit724fee09ff
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 18:58:16 2020 +0200 new task for tc unix polling commit26ab1983dc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 18:22:39 2020 +0200 new ports commit9e2fa16550
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 15:31:02 2020 +0200 mq stack error improved commitfcf3f04377
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 01:25:49 2020 +0200 diag output for inits improved commit9dcf0c7118
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de> Date: Fri Jul 3 15:50:29 2020 +0200 size_t for DataPoolAdmin commitb86e5664c4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 00:33:03 2020 +0200 include which was missing, pool raw access size_t replacements commit1a177d2efa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 00:28:06 2020 +0200 integrated pool raw access serialize changes commit24240b6c7d
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de> Date: Fri Jul 3 15:46:00 2020 +0200 Documented EndianConverter and changed length to size_t commitc160000027
Author: Ulrich Mohr <mohr@irs.uni-stuttgart.de> Date: Fri Jul 3 12:44:08 2020 +0200 Corrected filename of EndianConverter.h commit5cee126841
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jul 5 00:06:30 2020 +0200 formatting commit571da39108
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 4 23:52:44 2020 +0200 continued new bridge commite0a3257f8b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 4 23:20:29 2020 +0200 even better output for unset max msg size commit72768a6815
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jul 4 00:51:49 2020 +0200 started unix udp bridge commit18173772af
Merge:47b8ed23
099e6281
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 2 16:56:27 2020 +0200 Merge branch 'mueller_framework' into mueller_merge_mohr_serialize commit099e6281ec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 2 16:54:53 2020 +0200 DataSetBase not bound to max size anymore commit3e069c34aa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 2 16:29:29 2020 +0200 datasetbase stays same f or now commit8011d49ebc
Merge:837fecf8
68c41e23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jul 2 16:07:16 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commit47b8ed2321
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 1 14:34:16 2020 +0200 split up long debug message commitd7bff31a4c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 1 14:17:55 2020 +0200 compiling again commit6802ff7d71
Merge:837fecf8
6553450b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jul 1 13:15:58 2020 +0200 Merge remote-tracking branch 'upstream/mohr_serialize' into mueller_merge_mohr_serialize commit837fecf859
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 30 21:22:26 2020 +0200 added hk receiver obj id to dhb ctor commit062ebabb9a
Merge:2de972bb
1820b5f9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 30 16:41:38 2020 +0200 Merge branch 'mueller_framework' into front_branch commit1820b5f95c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 30 16:02:07 2020 +0200 hotfix for copy ctor commit2de972bb8a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 30 15:51:19 2020 +0200 const store accessor copy ctor fixx commit3a85001855
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 30 00:48:48 2020 +0200 bit setter correction commit85cc936d5d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:50:45 2020 +0200 added back clear CommandMessage function commite2a36efce3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:47:58 2020 +0200 csb changes taken over commit48df3cbe83
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:43:02 2020 +0200 csb comment improved commit691be0dcd4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:39:55 2020 +0200 dhb doc improvements commit044aa259e6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:37:55 2020 +0200 dhb cached pst interval now commitae6314d8cd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 16:06:53 2020 +0200 added task handle member commit003e70bf47
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 15:55:20 2020 +0200 new initializeAfterTaskCreation() commitd5d968a393
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 15:46:16 2020 +0200 some more correctioons commitb81b458ba6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 29 15:44:18 2020 +0200 exec task if new init function, some corrections commit71f997888b
Merge:61370d43
ba5b8bd6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 26 13:33:19 2020 +0200 Merge branch 'mueller_framework' into front_branch commitba5b8bd682
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 26 13:28:58 2020 +0200 hybrid iter update commit08f25370f3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 12:03:52 2020 +0200 moved typedefs into namespace commit0c32a96452
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 11:54:41 2020 +0200 some more singly linked list improvements commit8d633bf127
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 11:40:48 2020 +0200 took over changed for singly linked list commit6f2bb4125d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 02:02:57 2020 +0200 bugfix commit7f3607c3d9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 02:00:26 2020 +0200 hk service fixed commit61370d43da
Merge:65c775b8
bb9f606f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 01:29:11 2020 +0200 Merge branch 'mueller_framework' into front_branch commitbb9f606ffd
Merge:16cbbb26
b2c352b0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 01:26:23 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commit16cbbb2693
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 01:11:48 2020 +0200 linux fixes commitaf24cc7d04
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 00:49:13 2020 +0200 some bugfixes commitc7c49b4239
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 00:30:32 2020 +0200 deleted command messge base commit3bf29a7315
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 24 00:24:15 2020 +0200 removed CommandMessageBase, changed interfaces commit905c1a92e3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 21:03:22 2020 +0200 reverted some changes commit56455a5fa2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 14:11:53 2020 +0200 added static function as alternative to macro commit67366c25a0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 13:49:25 2020 +0200 typo fix commit5f16d30d82
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 13:47:38 2020 +0200 all ones value for return failed now commit6f4682e1c8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 12:53:30 2020 +0200 hasactionsIF include guard and doc commit2ecd7c4493
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 11:05:40 2020 +0200 some minor improvements commit446e7d2f82
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 11:00:40 2020 +0200 const storage accessor improvement commit45ffb7549a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 10:58:48 2020 +0200 storage accessor const in own file now commite27310da40
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 10:47:31 2020 +0200 updates for tmtcbridge commitc0beef4463
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 10:27:44 2020 +0200 some include guards, todo comments commit64a02c55ba
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 01:37:25 2020 +0200 linux fixed, size checks added commitf7d55a8a37
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 01:15:35 2020 +0200 equal to pull request now commit847292ea30
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 23 01:10:19 2020 +0200 added overflow checking for periodic task commita82dbcbd50
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 23:47:18 2020 +0200 minor doc correction commit6a7f47e06d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 23:46:44 2020 +0200 doc fix commitdadc867d9e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 20:18:13 2020 +0200 adapted MessageQueueSenderIF function calls commit5734a0a0e9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 19:22:52 2020 +0200 some fixes necessary to perform size check commit3b2fa978e1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 19:06:10 2020 +0200 replaced break with continue commit109fdad8b3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 22 15:34:35 2020 +0200 size check for message queue commit65c775b83c
Merge:555b7cc9
45a55044
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:48:35 2020 +0200 Merge branch 'mueller_framework' into front_branch commit45a55044dd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:47:36 2020 +0200 using debug stream now commit95b646046b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:43:29 2020 +0200 debug output working again commit3936fe9360
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:34:19 2020 +0200 linux fix commit2c04b87418
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:18:00 2020 +0200 corrected includes commit1b0e7c84c7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:15:58 2020 +0200 linux periodic task improvements commit2de811e0af
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 20:14:56 2020 +0200 moved timeslot files to task folder implmented setting task IF for regular periodic tasks commiteb4ce980fe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 14:32:04 2020 +0200 small fixed commit60ae2d4565
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 14:25:03 2020 +0200 continued with hk data pool added deadline missed check for fixed timeslot task, improved doc for both periodic task and fixed timeslot task commit84b8d733c0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 19 03:03:17 2020 +0200 hk continued commit583efec3f8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 20:45:44 2020 +0200 nullptr commited26992d7f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 20:40:40 2020 +0200 shoulddo added commitbb16fd80b8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 20:37:45 2020 +0200 singly linked list improvements commit259517ac9b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 20:22:09 2020 +0200 single linked list improvement commitd5ae74f860
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 20:21:49 2020 +0200 bugfix hk message size commitb68ad9e4f9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 19:50:26 2020 +0200 new ctor for simple ring buffer which does not allocate commitf8f10a1730
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 19:41:10 2020 +0200 slight hybrid iter improvements commit38676308e3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 17 19:37:55 2020 +0200 improved array list a bit commit813e82415a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 16 11:03:24 2020 +0200 additional doc info commit555b7cc982
Merge:cd424d79
7871ee7c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 15 17:59:59 2020 +0200 Merge branch 'mueller_framework' into front_branch commit7871ee7ca8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 15 17:39:52 2020 +0200 mutex helper little formatting correction commite39d5689e5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 15 16:56:22 2020 +0200 device com IF formattign commitc9d8bd59f0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 15 11:11:42 2020 +0200 ctor improved commit6ecf1cf534
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 14 19:03:28 2020 +0200 hk message continued commit9f69191f23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 14 17:59:14 2020 +0200 optimized command messages a bit commitcd424d79e7
Merge:60aed39b
8c03f6a8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 14 17:13:52 2020 +0200 Merge branch 'mueller_framework' into front_branch commit8c03f6a823
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 13 21:01:01 2020 +0200 command message only passed IF now commit6b67f46c80
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 13 17:37:48 2020 +0200 evil hidden bug found. CSB uses CommandMessageIF now commit7b538e9750
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 12 20:23:39 2020 +0200 introduced command message base and command message IF commitf578c3ea29
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 11 16:46:18 2020 +0200 set buffer: const buffer is set too commit60aed39bc5
Merge:b6427d01
6838a9e7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 11 16:22:50 2020 +0200 Merge branch 'mueller_framework' into front_branch commit6838a9e768
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 11 16:19:22 2020 +0200 serial buffer adapter bugfix commit206235ed47
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 11 16:03:09 2020 +0200 dataset base bugfixes commita9c7ad84c8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 11 02:03:18 2020 +0200 added new interface to host and linux osal commitc1fe326f67
Merge:b2ed0edc
3268806f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 23:42:09 2020 +0200 Merge branch 'mueller_framework' into mueller_newCommandMessageTest commit3268806f75
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 22:51:54 2020 +0200 split up huge function to be more readable commitb2ed0edce0
Merge:47aa9ddc
454524d2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 22:45:04 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_newCommandMessageTest commitbb9a299e33
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 22:19:40 2020 +0200 added back removed comments commit5007041bc8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 22:12:29 2020 +0200 cleaned up includes and improved doc a bit commit659594bac7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 21:35:47 2020 +0200 better include guard and doc form improvement commit606957dc24
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 21:26:45 2020 +0200 PSB update commit8fbd414a86
Merge:52c88792
454524d2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 20:57:04 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commit52c887925f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 20:53:28 2020 +0200 iomanip include commitb6427d017b
Merge:b20ba1f9
20e3b3c0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 01:19:00 2020 +0200 Merge branch 'mueller_framework' into front_branch commit20e3b3c0e2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 01:10:16 2020 +0200 0 replaced by MQIF::NO_QUEUE commit3277d199ac
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 10 01:07:50 2020 +0200 linux mq update commit47aa9ddcc3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 9 02:46:19 2020 +0200 doc for mqm improved commit8ff6506ad9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 9 02:18:39 2020 +0200 MessageQueue refactoring complete commitb1f91439c6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 17:50:09 2020 +0200 deleted copy ctor taskes const ref now commit07302e0d2a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 17:44:54 2020 +0200 removed include commitb20ba1f938
Merge:3b4413a6
514ff4f4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 14:06:01 2020 +0200 Merge remote-tracking branch 'upstream/master' into front_branch commit3cb79ebc86
Merge:0ea249aa
514ff4f4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 14:05:40 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commit0ea249aac4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 12:25:20 2020 +0200 messagetype namespace im small letters now commit4c41456ddf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jun 8 01:22:21 2020 +0200 thoughts on message queuee message new interface. What if there are MQ messages with different sizes? -> generic interface furthermore, maybe command message should be refactored to operate on a mq message instead of implementing it commit2649fa1507
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 23:38:15 2020 +0200 small small command message tweaks commite8bc2cec9f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 23:26:52 2020 +0200 small comment in semaph factory commit4a90f41122
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 18:53:55 2020 +0200 generate HK packet function continued commit3b4413a6ee
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 16:12:23 2020 +0200 added queue lock for receiveMessage commit98e6ca5f78
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 15:22:32 2020 +0200 removed locks in lockless functions commit73932f0349
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 13:58:51 2020 +0200 object maanager tweaks commitfe5b50d885
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 02:22:18 2020 +0200 improved documentation signigicantly commitd0b218c18e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 01:40:48 2020 +0200 renaming for host os commit3c80bdfefa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 01:18:19 2020 +0200 some linebreaks commit33cc8591dc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jun 7 01:17:24 2020 +0200 yaaay, hardcoded values commitc81613690b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:41:54 2020 +0200 no_queue value is 0xffffffff now commit65999ac6d6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:30:16 2020 +0200 pool var no param is one now commit3d8993b0c5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:23:20 2020 +0200 new typedef names commit9ed92e5e6f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:21:51 2020 +0200 clock typedefs renamed commit70212d9f4e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:15:42 2020 +0200 slight formatting commit8216b26fde
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 23:15:05 2020 +0200 datapoollocal updates commitea548dea5b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 21:16:47 2020 +0200 map lock init commitd99be25529
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 20:52:28 2020 +0200 cookie info iter was uninitialized leads to crash commit262d34174e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 18:56:54 2020 +0200 using strncat now commitb79efa6d6c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 16:25:06 2020 +0200 variable for name len commit096fbec156
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 15:40:10 2020 +0200 cleaned includesu p a bit commitdc9ef41bec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 15:31:45 2020 +0200 added doc for linux commitb0634ab0a2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 15:26:22 2020 +0200 fixed bug (critical!) commitef01b78140
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 15:01:57 2020 +0200 some issue with stack size .. commit212cd58f9a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 14:45:45 2020 +0200 issues with fixed timeslo ttask on linux commit788f7a3745
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 13:59:00 2020 +0200 better name for mq commit95bc5a871b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 13:56:35 2020 +0200 improved diagnostic messages for linux commit04236859da
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 13:03:37 2020 +0200 slight improvements to diagnostic ouput commit5289497ab5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 12:59:43 2020 +0200 health helper optional, diagnostic output improved commitd35524ecbc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 12:41:17 2020 +0200 decoupling from raw reciever, linux mq improvements commit8e7593d68a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 02:10:21 2020 +0200 removed error handling in separate fnctn commitb4561465ba
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 01:36:07 2020 +0200 some little form improvements commitd600d48816
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jun 6 01:31:08 2020 +0200 added the decoupling of DHB from powerSwitcher + some first hk maanger changes, might comment them out commit87f64d99cd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 23:18:00 2020 +0200 implemented fixed timeslot task commitd74f2c7560
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 21:40:06 2020 +0200 housekeeping folder added to .mk file commit579115f904
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 21:36:50 2020 +0200 adapting host osal commit2b646551e9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:40:22 2020 +0200 mutex helper new output error commite9a9a543ce
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:38:59 2020 +0200 fw message count one line further commit0d4d4123ab
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:37:46 2020 +0200 added new message type (hk) commit7247a1af7e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:36:25 2020 +0200 new class ids commit9ec2283d13
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:35:08 2020 +0200 hk folder update commit319fa9ddb6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:34:34 2020 +0200 datapoollocal update commite04e6a6f15
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:33:57 2020 +0200 datapoolglob update commit9fd5ef0194
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:28:06 2020 +0200 updated datapool files commit8d3ac33b0e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 20:18:38 2020 +0200 reordering init list for compiler commit872c350a92
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 18:36:22 2020 +0200 another small bugfix (this-> was missing) commitef3e5c4582
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 18:20:21 2020 +0200 very important bugfix for serial buffer adapter commitdbeb04895b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 17:55:03 2020 +0200 added hosted OSAL commit4ebd937fe0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 16:47:46 2020 +0200 deleted old printer file commitabcd818f2f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 16:44:31 2020 +0200 printer renamed to arrayprinter commit2a632ae711
Merge:405e1149
d7036edb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 16:03:58 2020 +0200 Merge branch 'mueller_framework' into front_branch commitd7036edb94
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 15:53:20 2020 +0200 hotfix commitdd210e99af
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 13:45:18 2020 +0200 additional include which was missing commit904721cc36
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jun 5 13:44:11 2020 +0200 improved pool entry iF commitdd193fd64d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:27:37 2020 +0200 obj manager.cpp improvements commite4944a067c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:24:44 2020 +0200 change made was wrong (pointers in map are not deleted!) commitd423c00115
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:14:35 2020 +0200 additional nullptr check commit569724843e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:11:49 2020 +0200 object manager improvements commit849053b830
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:04:24 2020 +0200 small fix for object manager.cpp commit71487d60ca
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 21:01:09 2020 +0200 onj managerIF update commit3eca16ff78
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 20:59:52 2020 +0200 removed exit clause commit405e1149e5
Merge:f0be1b1f
4d59ddc3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 20:41:30 2020 +0200 Merge branch 'mueller_framework' into front_branch commit4d59ddc3db
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 19:50:26 2020 +0200 some fixes, check for preamble size commit6ff1cf46c5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 19:40:43 2020 +0200 new service interface stream commitf2a9d29696
Merge:a115bf11
d75e4716
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 14:45:06 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commita115bf1186
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 14:43:33 2020 +0200 store access improvements commit925a54dec9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jun 4 01:06:03 2020 +0200 more improvements for servicei nterface commit17ed9b7796
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 23:38:02 2020 +0200 OS renamed to OS_FSFW (nameclash with system variable) commit5eb3d77bdb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 23:29:00 2020 +0200 clarfiying comment commit0a512abc33
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 23:26:27 2020 +0200 additional clarification comment commit5b93799ea6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 23:10:04 2020 +0200 added forward declarations for service interface streams commit1c0ca4c329
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 23:02:23 2020 +0200 some changes to take care of activity commit3483dff2ab
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jun 3 22:56:03 2020 +0200 some more interface improvements commit5036cdbef3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 23:54:24 2020 +0200 queue factory first param uint32_t again commit6972e72fbf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 23:52:31 2020 +0200 fixed order commitf0be1b1fff
Merge:c34c6238
54edeacb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 22:27:57 2020 +0200 Merge branch 'mueller_framework' into front_branch commit54edeacb2d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 22:25:28 2020 +0200 changed names for linux commit986dc2047e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 22:19:48 2020 +0200 replaced mutexIF and semaphoreIF name for timeouts commitf0a25b5e2b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 22:10:34 2020 +0200 new timeout values for MUtexIF and SemaphIF commitde6ed5c085
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jun 2 15:57:04 2020 +0200 improved include guard and removed old comment commit42f0687a6b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 31 23:28:51 2020 +0200 self deletion nullptr commitc8a36a79de
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 31 00:23:38 2020 +0200 corrected doc for task factory interface commitc34c6238c6
Merge:66b75802
7a22d12d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 17:56:06 2020 +0200 Merge branch 'mueller_framework' into front_branch commit7a22d12d0f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 17:48:24 2020 +0200 removed extern "C", not needed commit914bf8b9fc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 17:45:53 2020 +0200 seconds_t is double now commit4d4ca2f3bd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 17:43:37 2020 +0200 doc fix for stopwatch commitf13eff79c9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 16:51:09 2020 +0200 another little include guard fix commit6b0558d6c7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 16:49:11 2020 +0200 added author tag back commit3ef939aca8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 16:46:26 2020 +0200 fixed inclue protection commit5cf9e938cc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 16:45:03 2020 +0200 added include protection commitb90492562a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 16:40:57 2020 +0200 added author tag back at class definition commitf14bacba32
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 14:15:45 2020 +0200 using nullptr now added new distinction between blocking (MAX_TIMEOUT) and polling (NO_TIMEOUT) commit6a3dc94108
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 13:18:27 2020 +0200 removed extern "C" for freertos includes commitd5352a9b87
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 13:15:37 2020 +0200 actually extern "C" is not needed it is included by freeRTOS commite7ae35c659
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 13:09:47 2020 +0200 improved structure a bit commit5169c09fd8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 13:07:35 2020 +0200 improved includes commit78ae109a08
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 13:02:13 2020 +0200 removed context switch request (shall be done at end of ISR, so must be performed by caller) commitda403c01d0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 03:03:48 2020 +0200 retval fix, unittest running again commit3d2935ac69
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 02:23:14 2020 +0200 linux time lib improvements stop watch other function used (more precise for linux) commitccf79ab5b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 01:55:20 2020 +0200 output correction for linux commit671f298935
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 01:41:16 2020 +0200 implemented counting semaph for linux commit56498e5bc1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 00:50:44 2020 +0200 linux bin semaph unlocked commit8676fcd9a9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 29 00:47:54 2020 +0200 yay, linux bin semaph finished commit60872f936c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 23:43:40 2020 +0200 some output improvements commit08ffe89682
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 23:41:59 2020 +0200 doc and api improvements commit7ce505fdf9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 23:29:06 2020 +0200 some safety updates and fixes commit63dbf99592
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 22:12:52 2020 +0200 counting semaph implementation finished commit95bf5c1071
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 21:33:34 2020 +0200 improved const correctness commitc4e60946d3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 21:30:20 2020 +0200 improved bin semaph implementation commit88e3dc15b2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 21:27:31 2020 +0200 replaced old semaph api commit7145982b4a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 19:59:59 2020 +0200 improved documentation commiteabee85ba9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 19:56:02 2020 +0200 tweaked factory to have configurability commitb4065c7764
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 19:46:56 2020 +0200 seperation of semaph implementations finished commit8a1e0dab03
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 19:03:46 2020 +0200 continued with task notifications commit2d33274c23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 17:42:18 2020 +0200 implementing new task notifications commit968d7fad81
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 17:07:35 2020 +0200 replaced some timeout values commit66b75802b2
Merge:9b5095e5
5b521e03
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 12:58:17 2020 +0200 Merge branch 'mueller_framework' into front_branch commit5b521e039b
Merge:badcacad
18d19fbb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 12:40:01 2020 +0200 Merge branch 'mueller_fw_loc_globpool_distinction' into mueller_framework commit9b5095e5b8
Merge:a926312b
badcacad
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 12:28:43 2020 +0200 Merge branch 'mueller_framework' into front_branch commitbadcacad49
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 11:48:11 2020 +0200 added new timeout values commitf6ae0348cb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 11:41:36 2020 +0200 some linux mutex tweaks commitbe4ac0bc8f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 27 00:28:13 2020 +0200 added semaph factory to linux commitf7dd91891a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 16:05:03 2020 +0200 removed comments commit1a623a6a52
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 11:05:49 2020 +0200 added override commita19fa231f5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 01:21:48 2020 +0200 comment improvements commit9f2d5b64e0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 01:03:26 2020 +0200 comment improvements commita926312b25
Merge:8ddccfe3
242ca355
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 00:08:00 2020 +0200 Merge branch 'mueller_framework' into front_branch commit242ca355f5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 26 00:01:07 2020 +0200 removed swappers for arraylist for now commit8ddccfe3bd
Merge:219d85d7
3fd30635
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:54:39 2020 +0200 Merge branch 'mueller_framework' into front_branch commit3fd306356a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:43:44 2020 +0200 fix for dh returnvalues commit243ea9cd87
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:38:51 2020 +0200 improved dhb IF returnvalues commiteacda67f02
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:36:03 2020 +0200 added some comments for returnvalues commit18d19fbb2c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:12:25 2020 +0200 < removed commita37f01cd0e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 23:11:56 2020 +0200 improved readability of mode explanations commit96462ba8dc
Merge:f6ec65d3
7a0cbfb2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 22:29:33 2020 +0200 Merge branch 'mueller_framework' into mueller_fw_loc_globpool_distinction commit7a0cbfb2f5
Merge:d6af9da5
cb14ec15
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 22:21:13 2020 +0200 Merge remote-tracking branch 'upstram/master' into mueller_framework commit219d85d700
Merge:723e7150
5e91363d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 15:59:17 2020 +0200 Merge remote-tracking branch 'upstram/master' into front_branch commitd6af9da566
Merge:723e7150
5e91363d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 15:58:57 2020 +0200 Merge remote-tracking branch 'upstram/master' into mueller_framework commitf6ec65d35d
Merge:8eb13ec6
5e91363d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 14:49:22 2020 +0200 Merge remote-tracking branch 'upstram/master' into mueller_fw_loc_globpool_distinction commit8eb13ec627
Merge:2f16b1e7
723e7150
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 14:02:43 2020 +0200 Merge branch 'mueller_framework' into mueller_fw_loc_globpool_distinction commit723e715022
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 14:01:35 2020 +0200 consistency fix commit2f16b1e733
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 25 13:48:43 2020 +0200 moved some files commitd4abfacd27
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 22 01:15:02 2020 +0200 found solution for circ dependency had to put store_address_t in own file though commitd2d1ef9a85
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 22 00:58:30 2020 +0200 better include guards commitaea18c423e
Merge:7c48274c
f6b17d6e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu May 21 17:01:29 2020 +0200 Merge branch 'mueller_framework' into front_branch commitf6b17d6e2e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 20 12:50:56 2020 +0200 deleted copyctor and copy assignment commit338651af2f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 23:07:28 2020 +0200 binary printer added commit9b53e2b64f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 22:45:48 2020 +0200 added informative comment for counting semaphore commit7afaa752f3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 20:25:54 2020 +0200 form improvement commit1aef000eff
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 20:24:58 2020 +0200 printer improvements and fixes tc packet stored getter function commite2418d61a6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 19:53:10 2020 +0200 improved printer commitf612b095c1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 19:39:19 2020 +0200 updated tmtc packet base commit2790a40d6c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 19 18:55:13 2020 +0200 some renamings commit3c7e2c7cff
Merge:b12bace3
066930b1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 20:46:50 2020 +0200 Merge branch 'mueller_BinSempahInterface' into mueller_framework commit066930b110
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 20:39:48 2020 +0200 improvements commit7227c3a866
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 20:35:13 2020 +0200 implemented semaph factory commit067cd95731
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 19:42:45 2020 +0200 removed file header commitb1d9d55f50
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 19:42:05 2020 +0200 improved documentation commit4dd6594845
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 19:38:02 2020 +0200 integrated interface into bin semaphore commit9ba21b1e28
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 19:30:50 2020 +0200 semaphore if continued commit87bf843bef
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 19:19:50 2020 +0200 binary semaphore IF init commit45b0193ef3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 18:06:40 2020 +0200 bin semaph todo commitb237287315
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:48:16 2020 +0200 bin semaph sif replacements commitec8538b442
Merge:41c0ca6c
fc4199c3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:46:04 2020 +0200 Merge branch 'mueller_binSemaph' into mueller_FreeRTOS_improvements commit41c0ca6c52
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:39:10 2020 +0200 added doc for switchSystemContext commitf8614e23a8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:38:19 2020 +0200 deleted copy ans assignment ctor commitd1500a7868
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:31:05 2020 +0200 mq doc improvements commit1d4d01d190
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 17:22:10 2020 +0200 Added ISR calls for MQ and task mgmt The task management defines an external function which implements a context switch call from an ISR commitb12bace385
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 16:40:11 2020 +0200 changed order of input arguments (relevance) default argument for ACK commit7e04c055b3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 16:13:46 2020 +0200 tc packet stored formatting commit355bc2b905
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 18 15:42:47 2020 +0200 improvements commit767850e125
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 23:58:57 2020 +0200 deleted poolvector commitd1b315c7df
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 23:54:56 2020 +0200 pool raw access adaptions commit1d28e1398e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 23:41:28 2020 +0200 DataSetBase class finished commit71f1722b88
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 22:20:54 2020 +0200 removed old poolVar file commit9da0b0b2b2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 22:16:25 2020 +0200 glob pool vec implementation in tpp file commit8b1fef730d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 18:02:58 2020 +0200 resolved conflict commit234fd8e300
Merge:e9a4056d
0467b6a1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 18:00:51 2020 +0200 Merge branch 'mueller_framework' into mueller_fw_loc_globpool_distinction commit0467b6a1bf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 17:53:18 2020 +0200 slight DHB improvements commit7c48274c9b
Merge:ebcc4742
9597a012
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 17:27:04 2020 +0200 Merge branch 'mueller_framework' into front_branch commit9597a0121b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 15:49:46 2020 +0200 DHB update commitda972e1b58
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 15:41:42 2020 +0200 DHB improvements commite9a4056deb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 15:19:24 2020 +0200 added DHB cookie init (why was that never a problem beofre????) ¯\_(ツ)_/¯ commit9056ad36ed
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 14:13:31 2020 +0200 object manager better output commit5b8a6e35dc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 13:37:50 2020 +0200 renaming complete, pool in namespace commitcbfa21d45a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 17 01:17:11 2020 +0200 merging renaming into main branch commitb673e13892
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat May 16 20:58:48 2020 +0200 some refactoring commit7d57988979
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat May 16 13:09:50 2020 +0200 added deadline check commit20900227f8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 22:53:01 2020 +0200 periodic posix task ctor format commitebcc4742a9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 21:14:21 2020 +0200 removed conflict markers commitabdf04ce79
Merge:d44a06fa
0e243841
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 21:10:56 2020 +0200 Merge branch 'mueller_framework' into front_branch commit0e2438416d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 20:00:43 2020 +0200 added comment commit5b41f2a6bd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 19:58:58 2020 +0200 optimization commitc77ec9e7fc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 19:56:54 2020 +0200 uint16_t correction commit3f71babfa9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 19:50:51 2020 +0200 app data len uint16_t, full length size_t commit24bfbfbd33
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:56:06 2020 +0200 removed StorageAccessoremoved StorageAccessorr commit80cee27429
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:53:54 2020 +0200 printer fixes commitd48fe8fb09
Merge:6e1bb16d
1b093d96
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:51:58 2020 +0200 Merge branch 'mueller_globalPrinter' into mueller_framework commit6e1bb16d4e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:46:58 2020 +0200 printers continued, possible bugfix in tc packet base commit237dd4a256
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:23:57 2020 +0200 added additonal functions for tc packet base commit5ac32b14f0
Merge:684da2b8
effac0e9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 18:23:45 2020 +0200 Merge branch 'mueller_globalPrinter' into mueller_framework commit684da2b8d5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 15 15:30:29 2020 +0200 set application data function added commit69237bc2e8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu May 14 21:26:04 2020 +0200 freertos includes adapted commit49fa2fe32c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu May 14 16:12:01 2020 +0200 changed void* cast to QueueHandle_t cast commit50a1b5170a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 13 18:03:09 2020 +0200 formatting commit19e51575cf
Merge:3122f62b
0e56a094
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 13 12:53:25 2020 +0200 Merge remote-tracking branch 'origin/meier_framework' into mueller_framework commit3122f62b0a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 19:02:59 2020 +0200 bugfixes for write() call commit291710f257
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 17:57:37 2020 +0200 new ctor and bugfixes commitd873fcbf8e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 16:47:47 2020 +0200 added documentation for storage manager IF commit6c70abfe16
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 16:32:01 2020 +0200 moved pool accessor fuctions to local pool commit5af0c15dfc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 14:12:39 2020 +0200 simplified storage accessor commit1946af64af
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 12 14:11:00 2020 +0200 storage accessor mutex lock removed commite5c46c5ec1
Merge:43d3ca7e
77565c74
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 11 19:25:45 2020 +0200 Merge branch 'mueller_FixedSequenceImprovements' into mueller_framework commit43d3ca7e37
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 10 21:56:21 2020 +0200 memory message: no retval CSB: retval commitd44a06fafc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 10 12:48:22 2020 +0200 removed cfg include commit2f58c3a305
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 10 00:14:00 2020 +0200 commented out storage accessor commit0f286461d0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat May 9 18:10:26 2020 +0200 added new storage raw accessor commitd35a6e6c14
Merge:c05b9cbd
6dc05e49
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 8 18:41:07 2020 +0200 Merge remote-tracking branch 'upstream/master' into front_branch commit9489b7abc1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu May 7 19:23:56 2020 +0200 modifyData override deleted is not really thread-safe anyway commitfe9aa46cf8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu May 7 12:22:17 2020 +0200 removed system object list include. makes it difficult for multiple configurations, because the wrong header might be included commitb016f2995a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 6 16:34:43 2020 +0200 added default vlaue for init function commite950051b4a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 6 14:35:30 2020 +0200 some object managerIF security measures objectmanager get function checks whether global object manager was initialized now. New returnvalues, which are also used for local pool init commit6b205e166b
Merge:cc0469fe
77c21fc2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed May 6 13:54:18 2020 +0200 Merge branch 'master' into mueller_framework commitcc0469fef6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 20:09:42 2020 +0200 return failed insteead of exiting commitf09836a9eb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 19:30:03 2020 +0200 removed exit for empty psremoved exit for empty pstt commit4695e87cdc
Merge:160a0979
df9e6683
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 19:08:46 2020 +0200 Merge branch 'mueller_fifo_enhancement' into mueller_framework commit160a09790e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 18:53:25 2020 +0200 removed c omment for now commitbc17b5a907
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 18:43:28 2020 +0200 resolved conflict commitad31a1b97d
Merge:399e6b3a
f1a0bb9d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 18:41:40 2020 +0200 Merge branch 'luz_FixedTimeslotTask_ExistenceCheck' into mueller_framework commit399e6b3a09
Merge:6817aa4d
c05b9cbd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 15:07:47 2020 +0200 Merge branch 'front_branch' into mueller_framework commitc05b9cbd01
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 14:07:27 2020 +0200 reverted ResultIF. for now, keep using HasReturnvaluesIF commit1825924b7b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue May 5 10:16:16 2020 +0200 abbreviation for resultIF commit6817aa4d03
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 4 16:57:08 2020 +0200 pool manager refactoring commitb947253ac3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 4 16:49:15 2020 +0200 local pool neat commit4b65d6e847
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon May 4 12:33:57 2020 +0200 local pool bugfix commit3e4263f068
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 3 12:27:18 2020 +0200 freeRTOS task factory fix commit35594d4b71
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun May 3 00:48:18 2020 +0200 goofed up, delay function back in task factory commit281da25bf9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 1 16:47:53 2020 +0200 extended task management for freeRTOS commit15c03863c0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri May 1 14:49:52 2020 +0200 additional docmentation for freeRTOS task factory commit03333c2af0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 30 21:37:02 2020 +0200 pool raw acces printout commit431709a3ec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 30 15:42:33 2020 +0200 pool raw acces helper bugfix commite1aa285b6d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 29 13:46:30 2020 +0200 linux osal output in namespace commit7ec6d2ceaa
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 28 18:58:55 2020 +0200 remove dspecial character messing with decoding commitecf3b4b535
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 22:05:12 2020 +0200 stopwatch warning fix commita5d2cbd7db
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 21:59:24 2020 +0200 some more sif replacements commit0ea692a5ea
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 20:04:48 2020 +0200 some more sif changes commit01195093e3
Merge:1415cd23
2c6b4465
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 19:21:12 2020 +0200 Merge branch 'mueller_sifRenaming_soooMany' into mueller_framework commitfc4199c3b1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 18:13:14 2020 +0200 architecture dependant call delcared external commit328737d0ad
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 18:12:02 2020 +0200 newer non-deprecated semaphore call used commit1415cd2339
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 17:54:41 2020 +0200 using newer bin semaph create call. architecture dependant function call is external now and shall be implemented by developer commit44d4678089
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 14:06:48 2020 +0200 fifo features and stopwatch enhancement commitee2ee745c7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 12:47:59 2020 +0200 fifo renamed commitd546317e6a
Merge:40d952a3
3a3960ed
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 10:33:19 2020 +0200 Merge branch 'mueller_TmTcBridge_cherryPicked' into mueller_framework commit40d952a349
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 10:24:34 2020 +0200 minor form changes commite40c9f42c6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 10:22:25 2020 +0200 info output commented out commitc075e1bf23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 10:20:19 2020 +0200 adapting tmtc bridge commitdb535e25f2
Merge:2c2ccf8a
d0ce075e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 23 10:03:15 2020 +0200 Merge branch 'mueller_TmTcBridge_cherryPicked' into mueller_framework commit2c2ccf8a8d
Merge:9f7f8073
50265170
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 23:49:10 2020 +0200 Merge branch 'mueller_TmTcBridge_cherryPicked' into mueller_framework commit0e6f8d3f82
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 19:53:06 2020 +0200 comment adapted commit1b5127dc85
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 19:50:07 2020 +0200 added task management implementation commit6eda5a0838
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 19:46:49 2020 +0200 task management header added commite26f0d54b2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 19:44:03 2020 +0200 binary semaphore init commit9f7f8073f1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 19:42:42 2020 +0200 freertos includes in extern "C" commitfb9a5678fc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 10:24:00 2020 +0200 removed comment belonging in egit commit4e76b8133e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 01:08:36 2020 +0200 uninitialized variable commit326e5cf5fe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 22 01:01:32 2020 +0200 initialized uninitialized variables commit6553450b4b
Author: Uli <uli@vnks.de> Date: Tue Apr 21 22:28:43 2020 +0200 Actually, not that horrible, thanks to sed commita42832ca01
Author: Uli <uli@vnks.de> Date: Tue Apr 21 21:34:03 2020 +0200 working on updating SerializeIF, to quote Basti: This is going to be horrible commit7e3af7cf83
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 19 21:36:10 2020 +0200 replaced slotLengthMs with lengthMs commit36715e3f4c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 19 12:06:28 2020 +0200 test folder moved to separate test folder for fsfw for now commite77ca55b1d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 17:12:26 2020 +0200 serial fixed array list adapter doc fix commita7d3b4c4a0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 15:05:51 2020 +0200 added std:: before uint32_t typedef commit9580f51c30
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 14:16:46 2020 +0200 removed self-inclusion commite34a438e77
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 13:38:05 2020 +0200 using size_t commit4d8aca8417
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 13:32:40 2020 +0200 message queue adaptation for ISRs commita405357578
Merge:ea1d55b0
05c1330b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 13:30:22 2020 +0200 Merge remote-tracking branch 'upstream/master' into mueller_framework commitea1d55b033
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Apr 18 13:16:00 2020 +0200 null replaced by nullptr. storeID initialization added, all nullptr/0 initializations in header commit5595b0f3ce
Merge:eb362dca
f45a8cc1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 17:02:10 2020 +0200 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commiteb362dcad2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 17:02:04 2020 +0200 some comment line break commitf45a8cc171
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 13:17:26 2020 +0200 fixed slot sequence safety check added commit21650b064d
Merge:5582ca27
33b834ad
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 13:01:17 2020 +0200 Merge branch 'mueller_framework' commit33b834ad91
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 10:43:50 2020 +0200 null replaced by nullptr commit7c360be1e0
Merge:bd0b9cb8
9284fe81
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 09:30:26 2020 +0200 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitbd0b9cb877
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 16 09:30:02 2020 +0200 catch example informative comment commitfc08754b98
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 15 23:28:45 2020 +0200 some doc unclarities comment added commit9284fe81da
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 15 20:53:03 2020 +0200 added override specifiers, some doc fixes commit906f941f32
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 15 15:53:46 2020 +0200 ssize_t in deSerialize replaced by size_t commitaf27a2441a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 14 16:19:13 2020 +0200 added catch framework for basic testing commitc5e5de1530
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 14 12:24:26 2020 +0200 deleted example values commit2cc4386b4c
Merge:b48a0a4a
03b0ae7b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 14 11:18:24 2020 +0200 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commit03b0ae7b68
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 14 11:16:51 2020 +0200 unit test fixes commitb48a0a4a4c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 13 22:45:23 2020 +0200 unit test class continued. serialize adapter functions which are internal, extracted to separate class commitfe45c7eb8b
Merge:0d016e5a
a0ee0109
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 13 16:38:29 2020 +0200 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commit0d016e5a2b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 13 16:37:25 2020 +0200 slight formatting commita0ee010926
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 13 16:27:05 2020 +0200 Added test folder. commiteb2df3d88c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 12 23:06:57 2020 +0200 Using C++ to implement preamble. adding optional flag for carriage return commit69e9710bf1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Apr 10 17:06:06 2020 +0200 added intial carriage return im preamble commit841b28b65d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 9 18:02:10 2020 +0200 stopwatch ms now working commit8a8761ea88
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Apr 9 17:56:48 2020 +0200 stopwatch bugfix commit5582ca278b
Merge:94137896
640cc1dd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:44:21 2020 +0200 Merge branch 'mueller_framework' commit94137896cc
Merge:35eff6df
2a72e94d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:44:10 2020 +0200 Merge branch 'mueller_stopwatch' commit35eff6dfba
Merge:826e2bdb
c88c6c2a
Author: Robin Müller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:35:26 2020 +0200 Merge branch 'ksat_master' of KSat/fsfw into master commit640cc1ddec
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:30:39 2020 +0200 some more bugfixes commit5b0f80509f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:24:24 2020 +0200 usec replaced by seconds commitda9bb97b23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 19:05:21 2020 +0200 added precision for double output commit3dbf353385
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 18:33:38 2020 +0200 some more refactoring for stopwatch commit3af241b9c4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 18:27:18 2020 +0200 stopwatch more lightweight now commite0e1e64a09
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 8 18:08:14 2020 +0200 various changes, stopwatch Semaphore: Some bugfixes, some constructors added Stopwatch: First implementation, can measure in ms(double) and ms(normal) commit30ed08005f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Apr 7 22:16:43 2020 +0200 reverted some naming changes commitc88c6c2a45
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 6 19:51:45 2020 +0200 binary semaphore info printout added commitaaabbe8aef
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 6 13:59:57 2020 +0200 DHB fix commit78aad91aab
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 6 12:38:39 2020 +0200 PSB subservice passed to handleRequest commit3654c7bf81
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Apr 6 11:15:44 2020 +0200 some form stuff commite791f44c41
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 23:03:32 2020 +0200 copy ctor and assgnment op forbidden for serial linked lists commit42838272a5
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 22:42:48 2020 +0200 replaced int32_t size by ssize_t (type trait trick) commit87852e5f2a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 21:54:11 2020 +0200 replaced getSerializedSize returnvalue with size_t commit7079c9c56d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 17:58:39 2020 +0200 replaced serializeIF serialize sizes with size_t commit06ae64d59c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 15:46:10 2020 +0200 CSB: replaced some uint32 with size_t commita65a19f583
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 15:33:24 2020 +0200 deletd serial buffer adapter2 commit4a35035b28
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 15:30:31 2020 +0200 serial buffer adapted improvements commit80b1d28bc8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Apr 5 00:23:29 2020 +0200 new dvice com IF return value commitbd468a1b74
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 1 17:19:03 2020 +0200 timeslot time 0 definitely leads to error commit335df7787a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 1 17:15:27 2020 +0200 testing timeslot task 0 commit8f39820ace
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 1 17:05:55 2020 +0200 doc formatting commit996dbc9e4b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Apr 1 12:41:54 2020 +0200 DHB/Cookie refactoring commit5218a0d84f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Mar 28 19:42:24 2020 +0100 doc fix commit93678adc5a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Mar 28 00:09:15 2020 +0100 replace std::set by std::multiset so there can be multiple entries with same pollignTime commit5d071a1cf1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Mar 26 19:53:05 2020 +0100 new device comIF return value in DHB request receive message commit0e56a094d3
Author: jakob.meier <jakob.meier@outlook.de> Date: Thu Mar 26 19:43:38 2020 +0100 merged FwMessageTypes commite252a5b795
Author: jakob.meier <jakob.meier@outlook.de> Date: Thu Mar 26 19:20:16 2020 +0100 file system support commit093fef5d6f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Mar 26 15:20:17 2020 +0100 moved address_t typedef to cookieImoved address_t typedef to cookieIFF commit163779622f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Mar 25 02:08:35 2020 +0100 DHB: replyLen in replyMap now commitb2b6b8ee23
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Mar 24 15:33:18 2020 +0100 added initializeInterface for comIF/cookie commitea49d88c4b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Mar 24 14:21:57 2020 +0100 moved all return values to DH IF commit7e8d92f956
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Mar 24 00:22:17 2020 +0100 replaced std::list by std::set for fixedSlotSequen commitf7b7e10d05
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 19:14:36 2020 +0100 date format changed commitb6bf9d7147
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 19:09:42 2020 +0100 to avoid dynamic casting, introuced CookieIF commitf7bd661e69
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 18:08:24 2020 +0100 small fixes commitfa058ee602
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 18:05:39 2020 +0100 renamed rmap to com (more generic) commitd3e2652078
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 17:58:23 2020 +0100 replaced DHB sizes by size_t, rework Cookie now passed to DHB, rework in progress commitc50d9d90d6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 23 13:14:23 2020 +0100 replaced std::variant by two uint32 parameters commitaf6d18d60b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Mar 20 22:47:07 2020 +0100 added additional parameter form open/reopen call commit52c05e2f3d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Mar 19 12:44:24 2020 +0100 minor formatting for pull request commitb7e3449b04
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Mar 19 12:38:11 2020 +0100 some more doc for containers commita3903f80fb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Mar 19 00:49:47 2020 +0100 typedef address_t moved to deviceComIF commitb5fe1fa530
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 9 22:15:52 2020 +0100 dhb virtual function moved to top commit6579200f55
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Mar 6 19:01:31 2020 +0100 removed counter, will be implemented in childclass commit68cda479d6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Mar 6 18:48:48 2020 +0100 DHB: performOperation Hook + polling counter polling counter to specify how often communication opertions are performed, however this still needs to be changed.. commit22e4dabd1b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Mar 6 15:39:42 2020 +0100 BinSemaphore reset function added commit43ac0ec04b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Mar 4 23:07:54 2020 +0100 Communication Message continued commitfb6172fdc5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Mar 4 00:37:58 2020 +0100 communication message continued. Some fixed timeslot task improvements commitdd4a5a45e3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Mar 3 21:20:08 2020 +0100 communication message extended commit72963f5855
Merge:d0e8eb38
238892bd
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Mar 3 00:07:48 2020 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitd0e8eb386c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Mar 2 01:00:17 2020 +0100 renamed system context to call context to avoid conflicts with ISIS library, I don't want to fiddle with it if we don't have source code commit238892bd66
Merge:6d6c78b2
fa38a376
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Feb 29 01:22:41 2020 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commit6d6c78b255
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Feb 29 01:21:36 2020 +0100 task management doc commitfa38a37604
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Feb 28 22:55:25 2020 +0100 all context switches calls to TaskManagement.h now commitc93ee5c6cd
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Feb 27 19:00:51 2020 +0100 message queue IF return values commitabccd81fdf
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Feb 26 16:55:35 2020 +0100 new file for freeRTOS task management functions commit083cc7c50a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Feb 25 17:04:21 2020 +0100 sempahore wrapper extended commit685c18dc4e
Merge:7a426ace
bfc7a768
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Feb 25 12:55:20 2020 +0100 Merge branch 'ksat_master' into mueller_framework commitbfc7a768ce
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Feb 25 12:54:28 2020 +0100 message queue adaptions for calls from ISR functions moved to top binary sempahore file init mutex return values commit7a426acece
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Feb 21 16:08:43 2020 +0100 therm sensor doc correction commit54eeb71f02
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Feb 17 21:20:51 2020 +0100 bugfix: added implementation commit6ab07aeb19
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Feb 16 21:04:17 2020 +0100 valid mask bugfixes commit1001c1d48b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Feb 16 17:21:06 2020 +0100 added new IF for thermal messages commit99b90e625d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Feb 16 16:14:29 2020 +0100 refactored: limit type specified separately commitddae9ee80f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Feb 16 14:59:45 2020 +0100 adapted temp sensor to use °C limits, doc added commitd8ed5bb1c1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Feb 15 18:55:22 2020 +0100 some comments for missing doc commite15839b3a6
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Feb 15 18:26:25 2020 +0100 Thermal: Some formatting stuff, doc to do Need to find out how to use the thermal components commita7964c7200
Merge:b3faf1e4
413d6593
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sat Feb 15 15:34:53 2020 +0100 Merge branch 'luz_FixedTimeslotTask_ExistenceCheck' into mueller_framework commitb3faf1e4ad
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 31 23:42:11 2020 +0100 old timestring used commit5190e4c16e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 31 00:54:34 2020 +0100 Serial Buffer dapter changes reverted CCSDS time bugfixes in separate section (for C98) Serial buffer adapter 2 bugfixes commit09144b18c4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 29 01:03:20 2020 +0100 ccsds time changes changed commit7dd4694d9d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 28 23:19:19 2020 +0100 CCSDS time extra defined for avr lib commit8f17d5147e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 27 00:43:01 2020 +0100 SerialFixedArrayList constructor bugfix commit85048cc9ee
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 26 22:13:56 2020 +0100 Pool Raw Access change bugfix commitd9fa13b6eb
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 26 18:31:17 2020 +0100 ADDED old pool entry constructor commit6eedb3f097
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 23 15:45:21 2020 +0100 New Pool List Initializer. Needs testing !!! commitd330958abb
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 22 14:27:11 2020 +0100 Array List endian swapper protected now commit1977942c4b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 22 14:24:48 2020 +0100 Array List Entry swapper function And respective SerialAdapter functions to use it commit3d2bdae14d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 20 23:29:36 2020 +0100 CSB abstract functions moved to top So documentation of functions to implement is closer to the top commitdba26baee6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 20 23:00:23 2020 +0100 Restructured header file Abstract functions are closer to the top because they must be implemented and documentation should be near the top. Important virtual functions moved up too. Additional documentation added commit424c82ce16
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 18 23:07:43 2020 +0100 Extracted one logic block To increase readability commit5cb591a063
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 18 18:01:37 2020 +0100 Array List swapper for SerialFixedArrayList commit6fe0f45c27
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 18 16:48:33 2020 +0100 SerialBufferAdapter new setBuffer function Serial Fixed Array List Adapter documentation adapted SinglyLinkedList setEnd() function added commitc9e4c73bd2
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 18 15:03:22 2020 +0100 Local pool public members/functions moved to top commit1f4391f56e
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 17 21:11:39 2020 +0100 Endian Swapper buffer swapper changes reverted commit1d1bb88a6f
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 16 19:07:53 2020 +0100 Merge request check commit9bdbc2c380
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 16 18:46:29 2020 +0100 Endian swapper changes, Serial buffer adapter New Serial Buffer Adapter with complete template class for buffer type. Endian Swapper input now standard uint8_t * pointers instead of template type. Fixed Array List new ctor, but commented out for now commit1437f33027
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 15 17:30:23 2020 +0100 Serial Fixed Array List template type clarifications commit9aa57f29b8
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 15 13:52:18 2020 +0100 basic documentation thermal commit9ec0b80497
Merge:f16cce8b
b0d88129
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 15 13:32:41 2020 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitf16cce8be1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 15 13:32:21 2020 +0100 Basic doc for thermal modules started commitb0d88129db
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 14 01:39:47 2020 +0100 Pool Raw Access Helper bugfix debug output commented commitc747952336
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Jan 14 00:49:09 2020 +0100 fixed map full() function added. Pool raw access debugging commit01551b8fa5
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 13 01:21:53 2020 +0100 Getter function in SerialBufferAdapter For const uint8_t * commit1369e792b4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Jan 13 00:14:14 2020 +0100 CommandingServiceBase documentation commitd2325e60b6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 12 15:51:59 2020 +0100 Import bugfix in MessageQueue.cpp lastPartner is only assigned if receiveMessage is successful commita8247eb2f0
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 12 14:18:12 2020 +0100 Some more debugging output switched on commit0ce67de8c8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 10 00:57:09 2020 +0100 Changes to pool access classes 1. PoolRawAccessHelper is more robust now and has better error handling 2. PoolRawAccess: Removed an unneeded constructor value, moved serialize further to the top. Added new returnvalues and more precise error handling for read() call 3. DataSet: Made MAX Number of data pool entries public so it can be used by pool raw access error handling commit59b25bee86
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 9 19:04:33 2020 +0100 pool raw helper input buffer type changed to uint32_t commit0ddc44062d
Merge:a7450144
2ec486a8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 9 12:50:00 2020 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commit2ec486a880
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Jan 5 18:20:57 2020 +0100 max number of stored packets lowered commit827f185e20
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Jan 4 16:37:08 2020 +0100 Some bugfixes(?) for PusServiceBase. Getter Function for Serial Buffer Adapter. commita7450144de
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Jan 3 15:39:32 2020 +0100 doxygen group definitions moved to framework commit0a57103339
Merge:f6e88e83
e2f07cbc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 2 21:12:42 2020 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitf6e88e83db
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 2 21:12:21 2020 +0100 debug output change commite2f07cbcd1
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Jan 2 14:01:21 2020 +0100 connect and disconnect functions public commit831a01e79e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 1 17:31:17 2020 +0100 recvBuffer and recvSize initialized commitc73cb90c36
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Jan 1 16:54:05 2020 +0100 receiveTc function adapted commita762c159fe
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 30 01:13:33 2019 +0100 pool raw access helper info output commented out commit2425685e44
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 29 01:59:02 2019 +0100 Pool Raw Access Helper serialization of vectors implemented commit666341d03d
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Fri Dec 27 22:43:09 2019 +0100 new bool datatype for possible pool entries commit79e7fee807
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 22:15:19 2019 +0100 comment deleted commita38a2f4b3a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 22:07:17 2019 +0100 tmtc bridge bugfix: tm data deleted when overwriting old data commit33a7c033a2
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 20:38:15 2019 +0100 doc extended, instructions for sendTm and receiveTc commit19e257a90a
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 20:35:11 2019 +0100 tmtc bridge debug output corrected commit8397f5b2b1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 20:17:21 2019 +0100 tmtc bridge bugfix commit0066a6b788
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 19:47:46 2019 +0100 Generic TMTC Bridge added commit29b4480fc4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 18:55:31 2019 +0100 include adapted commite24f9b89e4
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 26 16:44:50 2019 +0100 Pool Raw Access Helper tested, appesrs to work. SerializeAdapter doc changes, tm packet stored debug output if not enough storage available commit1f1831c4a1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 24 22:15:39 2019 +0100 pool raw access init commitf6b9b23287
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 24 01:41:04 2019 +0100 pool raw access init commit89f490ac36
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Dec 20 23:09:35 2019 +0100 assembly constructor formatting commitd17146d847
Author: Maximilian Luz <luzmaximilian@gmail.com> Date: Thu Dec 19 16:09:50 2019 +0100 Check object existence before adding it to the PST Currently, adding new objects/components to the FixedSlotSequence PST is not being checked, meaning that it is possible to add NULL objects here without any warning. This causes NULL-pointer errors when non-existent components are added, which can be hard to debug. To solve this, add a check for the object existence before adding it to PST and emit an error message. Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com> commitfa6cbe7e0c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 11 23:18:28 2019 +0100 pool raw access changed reverted commit625f3dc79c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 11 23:15:34 2019 +0100 local pool modify data doc modifided commit9382eb03e6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 11 22:50:08 2019 +0100 function to serialize pool ID buffers into dataset created commit29a15e8154
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 11 13:03:51 2019 +0100 commented out functions which will propably not be needed and removed commit138cac98d1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Wed Dec 11 01:57:36 2019 +0100 experimenting with recursive constructor and dataset call commitf7d8f0c161
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 10 23:26:48 2019 +0100 Reverted changed pool raw access commit commit6abb3cc525
Merge:f33949ba
356d1d35
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 10 14:54:32 2019 +0100 Merge remote-tracking branch 'origin/feature_EndianSwapper_UINT32_BUFFER_PoolRawAccess_Modification_For_Vectors' into mueller_framework commitf33949ba4b
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 10 14:54:17 2019 +0100 doc adapted, merging commit356d1d35dc
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 10 13:29:16 2019 +0100 experimenting with recursive constructor to enable automatic vector registering commite765f8c99b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Dec 9 12:27:14 2019 +0100 pool raw access modified so vectors are properly serialized now Endian swapper can swap the entries of a uint16,uint32 buffers now. Some documentation for functions added. setter function for serial buffer adapter written but does not appear to compile, commented out commit8168885dd9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 8 22:57:03 2019 +0100 Serialization documentation update commit3159ccbc40
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 8 22:26:42 2019 +0100 fixed map and local pool doc commitd99ed47150
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 8 19:04:53 2019 +0100 fixed map bugfix (fist instead of first), new access functions for fixed maP (first(), second()), some documentation, raw pool access read() call public because call is necessary before using public serialize function. maybe integrate read() call into serialize function? commit950a48078c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Dec 5 12:21:06 2019 +0100 some documentation, question about HasParametersIF, variable in ParameterHelper intialized (compiler warning) commit9c3a9323b7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Dec 3 19:30:37 2019 +0100 some doc change proposals while writing hk service. Added Type.h in PoolRawAccess.h, compiler error when not doing that commit37a70df244
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Dec 1 17:48:05 2019 +0100 SerialBufferAdapter can process uint32_t * buffers now commit10c24e39a3
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Nov 29 19:56:05 2019 +0100 new returnvalue for scanForReply to ignore full packet commit2039aa5665
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 25 00:14:39 2019 +0100 Service Interface Stream buffer size higher to print long buffers (like nav data) commit2f14fd5d4d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 11 22:45:53 2019 +0100 Cant reach mode reason getter function added commit2b44e1c9c4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Nov 10 13:08:02 2019 +0100 CCSDS sscanf function adapted for atmel stdio.c (see comments) commitb8af3b5e3d
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Nov 9 18:15:45 2019 +0100 debugInterface extended commit537e2ceb18
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Nov 9 13:29:12 2019 +0100 Getter method for logicalAddress commitee765eafc7
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Nov 9 13:17:54 2019 +0100 ioBoardAddress renamed to logicalAddress commit801bd4d7eb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Nov 9 13:07:26 2019 +0100 debug interface for dhb created. This is useful to track states or values in child handler. some documentation added. New doxygen group for interfaced added. commitbf7bc342ff
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 5 19:30:02 2019 +0100 Revert "documentation for DHB init function, ioBoard addres has default value 0 now, order in ctor changed (not used in source)" This reverts commitc6e34cada6
. commitaf4e9db9e3
Merge:b594bc2a
8a93a873
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 5 19:25:27 2019 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitb594bc2a97
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Nov 5 19:25:00 2019 +0100 removed obsolete comment commit8a93a873a8
Merge:e7f7625a
cb919ada
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 4 11:07:02 2019 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commite7f7625adf
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 4 11:06:59 2019 +0100 removed wrong include commitcb919ada2a
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 4 01:55:40 2019 +0100 assuming that a default value of 0 for expectedReplies is needed, I introduced a new variable into DeviceCommandInfo, which stores another number of replies expected. this value is assigned in enableReplyInReplyMap. That way, the initial value of 0 remains the same (if it was needed), and is only set to another desired value if a write was sent commit12f51575eb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 4 00:53:05 2019 +0100 removed a flag by accident, fixed now commit8eb1a5b13e
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Nov 4 00:47:46 2019 +0100 proposal 1: expectedReplies parameter is set in insertInCommandAndReplyMap, default value stays one. overriding enableReplyInReplyMap is not necessary anymore.second proposal: the commander id is supplied in the interpretDeviceReply function, so we don't have to look for it in the DeviceCommandMap. was it removed at some point because it is listed in the documentation? commit46986f69e4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sat Nov 2 23:30:12 2019 +0100 serialize tools more documentation commitd47496db40
Merge:16af33a7
3887cb8c
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 19:31:20 2019 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commit16af33a7bb
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 19:31:18 2019 +0100 doc for fifo, device com if.. commit3887cb8ca1
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 18:22:34 2019 +0100 removed wrong include in dhb commit3f1d68542e
Merge:e8a16ac5
1ee445ce
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 18:21:03 2019 +0100 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commite8a16ac59c
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 18:21:01 2019 +0100 dummy com if sendMessage data const commit1ee445ce24
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 29 11:17:07 2019 +0100 fifo typo commitb51536c772
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 28 12:48:41 2019 +0100 CSB doc correction commitd79f072851
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 27 13:38:08 2019 +0100 Additional documentation for DHB and CSB commit64f84d9d9f
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Sun Oct 27 03:21:38 2019 +0100 doc for dhb, serializeIF and SerializeAdapter commit8f1517d276
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 25 21:12:11 2019 +0200 additional comments on endianness (I hope this is correct) commit1631e739b8
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 23 12:03:32 2019 +0200 at91sam9g20 uses custom stdio.c, unsigned long cast in sprintf does not seem to work, casting (unsigned int) does, timestamp now visible in debug output commit07950b0c2b
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Wed Oct 23 00:31:45 2019 +0200 documentation for object manager IF get function commitcd1b26b04c
Merge:c6e34cad
4db655e4
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 22 17:15:54 2019 +0200 Merge branch 'mueller_framework' of https://egit.irs.uni-stuttgart.de/KSat/fsfw into mueller_framework commitc6e34cada6
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 22 17:15:29 2019 +0200 documentation for DHB init function, ioBoard addres has default value 0 now, order in ctor changed (not used in source) commit4db655e489
Author: Robin Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 22 14:01:17 2019 +0200 task priority order comment commitcbc8012198
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Tue Oct 22 00:06:11 2019 +0200 ioBoardAddress protected instead of private to allow custom initialize commit907664cea9
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Mon Oct 21 11:38:13 2019 +0200 added do performOperation where the comIF functions are called, some comments added in DeviceHandlerIF commit5e3b7c3625
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Fri Oct 18 13:37:09 2019 +0200 explanation of cookie purpose added, device handler base indentation commit743d8abeaf
Author: Robin.Mueller <robin.mueller.m@gmail.com> Date: Thu Oct 17 00:23:46 2019 +0200 first attempt to document and explain serialization tools for application developers
This commit is contained in:
parent
c52183f273
commit
e8cadd069e
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "ArrayList.h"
|
#include "ArrayList.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An associative container which allows multiple entries of the same key.
|
* @brief An associative container which allows multiple entries of the same key.
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
ExtendedControllerBase::ExtendedControllerBase(object_id_t objectId,
|
ExtendedControllerBase::ExtendedControllerBase(object_id_t objectId,
|
||||||
object_id_t parentId, size_t commandQueueDepth):
|
object_id_t parentId, size_t commandQueueDepth):
|
||||||
ControllerBase(objectId, parentId, commandQueueDepth),
|
ControllerBase(objectId, parentId, commandQueueDepth),
|
||||||
localPoolManager(this, commandQueue),
|
poolManager(this, commandQueue),
|
||||||
actionHelper(this, commandQueue) {
|
actionHelper(this, commandQueue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ ReturnValue_t ExtendedControllerBase::executeAction(ActionId_t actionId,
|
|||||||
|
|
||||||
|
|
||||||
ReturnValue_t ExtendedControllerBase::initializeLocalDataPool(
|
ReturnValue_t ExtendedControllerBase::initializeLocalDataPool(
|
||||||
LocalDataPool &localDataPoolMap, LocalDataPoolManager &poolManager) {
|
localpool::DataPool &localDataPoolMap, LocalDataPoolManager &poolManager) {
|
||||||
// needs to be overriden and implemented by child class.
|
// needs to be overriden and implemented by child class.
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -26,8 +26,8 @@ object_id_t ExtendedControllerBase::getObjectId() const {
|
|||||||
return SystemObject::getObjectId();
|
return SystemObject::getObjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDataPoolManager* ExtendedControllerBase::getHkManagerHandle() {
|
AccessPoolManagerIF* ExtendedControllerBase::getAccessorHandle() {
|
||||||
return &localPoolManager;
|
return &poolManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ExtendedControllerBase::getPeriodicOperationFrequency() const {
|
uint32_t ExtendedControllerBase::getPeriodicOperationFrequency() const {
|
||||||
@ -40,7 +40,7 @@ ReturnValue_t ExtendedControllerBase::handleCommandMessage(
|
|||||||
if(result == HasReturnvaluesIF::RETURN_OK) {
|
if(result == HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return localPoolManager.handleHousekeepingMessage(message);
|
return poolManager.handleHousekeepingMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtendedControllerBase::handleQueue() {
|
void ExtendedControllerBase::handleQueue() {
|
||||||
@ -64,7 +64,7 @@ void ExtendedControllerBase::handleQueue() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = localPoolManager.handleHousekeepingMessage(&command);
|
result = poolManager.handleHousekeepingMessage(&command);
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -88,16 +88,16 @@ ReturnValue_t ExtendedControllerBase::initialize() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return localPoolManager.initialize(commandQueue);
|
return poolManager.initialize(commandQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ExtendedControllerBase::initializeAfterTaskCreation() {
|
ReturnValue_t ExtendedControllerBase::initializeAfterTaskCreation() {
|
||||||
return localPoolManager.initializeAfterTaskCreation();
|
return poolManager.initializeAfterTaskCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ExtendedControllerBase::performOperation(uint8_t opCode) {
|
ReturnValue_t ExtendedControllerBase::performOperation(uint8_t opCode) {
|
||||||
handleQueue();
|
handleQueue();
|
||||||
localPoolManager.performHkOperation();
|
poolManager.performHkOperation();
|
||||||
performControlOperation();
|
performControlOperation();
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -113,3 +113,7 @@ LocalPoolDataSetBase* ExtendedControllerBase::getDataSetHandle(sid_t sid) {
|
|||||||
#endif
|
#endif
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProvidesDataPoolSubscriptionIF* ExtendedControllerBase::getSubscriptionInterface() {
|
||||||
|
return &poolManager;
|
||||||
|
}
|
||||||
|
@ -32,10 +32,20 @@ public:
|
|||||||
virtual ReturnValue_t performOperation(uint8_t opCode) override;
|
virtual ReturnValue_t performOperation(uint8_t opCode) override;
|
||||||
virtual ReturnValue_t initializeAfterTaskCreation() override;
|
virtual ReturnValue_t initializeAfterTaskCreation() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a subscription interface for objects which required updates on changed
|
||||||
|
* controller variables or datasets
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LocalDataPoolManager localPoolManager;
|
LocalDataPoolManager poolManager;
|
||||||
ActionHelper actionHelper;
|
ActionHelper actionHelper;
|
||||||
|
|
||||||
|
//! Accessor handle required for internal handling
|
||||||
|
AccessPoolManagerIF* getAccessorHandle() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implemented by child class. Handle all command messages which are
|
* Implemented by child class. Handle all command messages which are
|
||||||
* not health, mode, action or housekeeping messages.
|
* not health, mode, action or housekeeping messages.
|
||||||
@ -60,9 +70,8 @@ protected:
|
|||||||
/** HasLocalDatapoolIF overrides */
|
/** HasLocalDatapoolIF overrides */
|
||||||
virtual object_id_t getObjectId() const override;
|
virtual object_id_t getObjectId() const override;
|
||||||
virtual ReturnValue_t initializeLocalDataPool(
|
virtual ReturnValue_t initializeLocalDataPool(
|
||||||
LocalDataPool& localDataPoolMap,
|
localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
|
||||||
virtual uint32_t getPeriodicOperationFrequency() const override;
|
virtual uint32_t getPeriodicOperationFrequency() const override;
|
||||||
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
||||||
};
|
};
|
||||||
|
@ -38,11 +38,12 @@ ReturnValue_t PoolDataSetBase::registerVariable(
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolDataSetBase::read(uint32_t lockTimeout) {
|
ReturnValue_t PoolDataSetBase::read(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t lockTimeout) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
ReturnValue_t error = result;
|
ReturnValue_t error = result;
|
||||||
if (state == States::STATE_SET_UNINITIALISED) {
|
if (state == States::STATE_SET_UNINITIALISED) {
|
||||||
lockDataPool(lockTimeout);
|
lockDataPool(timeoutType, lockTimeout);
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
result = readVariable(count);
|
result = readVariable(count);
|
||||||
if(result != RETURN_OK) {
|
if(result != RETURN_OK) {
|
||||||
@ -86,7 +87,9 @@ ReturnValue_t PoolDataSetBase::readVariable(uint16_t count) {
|
|||||||
!= PoolVariableIF::NO_PARAMETER)
|
!= PoolVariableIF::NO_PARAMETER)
|
||||||
{
|
{
|
||||||
if(protectEveryReadCommitCall) {
|
if(protectEveryReadCommitCall) {
|
||||||
result = registeredVariables[count]->read(mutexTimeout);
|
result = registeredVariables[count]->read(
|
||||||
|
timeoutTypeForSingleVars,
|
||||||
|
mutexTimeoutForSingleVars);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = registeredVariables[count]->readWithoutLock();
|
result = registeredVariables[count]->readWithoutLock();
|
||||||
@ -99,25 +102,29 @@ ReturnValue_t PoolDataSetBase::readVariable(uint16_t count) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolDataSetBase::commit(uint32_t lockTimeout) {
|
ReturnValue_t PoolDataSetBase::commit(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t lockTimeout) {
|
||||||
if (state == States::STATE_SET_WAS_READ) {
|
if (state == States::STATE_SET_WAS_READ) {
|
||||||
handleAlreadyReadDatasetCommit(lockTimeout);
|
handleAlreadyReadDatasetCommit(timeoutType, lockTimeout);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return handleUnreadDatasetCommit(lockTimeout);
|
return handleUnreadDatasetCommit(timeoutType, lockTimeout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PoolDataSetBase::handleAlreadyReadDatasetCommit(uint32_t lockTimeout) {
|
void PoolDataSetBase::handleAlreadyReadDatasetCommit(
|
||||||
lockDataPool(lockTimeout);
|
MutexIF::TimeoutType timeoutType, uint32_t lockTimeout) {
|
||||||
|
lockDataPool(timeoutType, lockTimeout);
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
if (registeredVariables[count]->getReadWriteMode()
|
if (registeredVariables[count]->getReadWriteMode()
|
||||||
!= PoolVariableIF::VAR_READ
|
!= PoolVariableIF::VAR_READ
|
||||||
&& registeredVariables[count]->getDataPoolId()
|
&& registeredVariables[count]->getDataPoolId()
|
||||||
!= PoolVariableIF::NO_PARAMETER) {
|
!= PoolVariableIF::NO_PARAMETER) {
|
||||||
if(protectEveryReadCommitCall) {
|
if(protectEveryReadCommitCall) {
|
||||||
registeredVariables[count]->commit(mutexTimeout);
|
registeredVariables[count]->commit(
|
||||||
|
timeoutTypeForSingleVars,
|
||||||
|
mutexTimeoutForSingleVars);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
registeredVariables[count]->commitWithoutLock();
|
registeredVariables[count]->commitWithoutLock();
|
||||||
@ -128,16 +135,19 @@ void PoolDataSetBase::handleAlreadyReadDatasetCommit(uint32_t lockTimeout) {
|
|||||||
unlockDataPool();
|
unlockDataPool();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolDataSetBase::handleUnreadDatasetCommit(uint32_t lockTimeout) {
|
ReturnValue_t PoolDataSetBase::handleUnreadDatasetCommit(
|
||||||
|
MutexIF::TimeoutType timeoutType, uint32_t lockTimeout) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
lockDataPool(lockTimeout);
|
lockDataPool(timeoutType, lockTimeout);
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
if (registeredVariables[count]->getReadWriteMode()
|
if (registeredVariables[count]->getReadWriteMode()
|
||||||
== PoolVariableIF::VAR_WRITE
|
== PoolVariableIF::VAR_WRITE
|
||||||
&& registeredVariables[count]->getDataPoolId()
|
&& registeredVariables[count]->getDataPoolId()
|
||||||
!= PoolVariableIF::NO_PARAMETER) {
|
!= PoolVariableIF::NO_PARAMETER) {
|
||||||
if(protectEveryReadCommitCall) {
|
if(protectEveryReadCommitCall) {
|
||||||
result = registeredVariables[count]->commit(mutexTimeout);
|
result = registeredVariables[count]->commit(
|
||||||
|
timeoutTypeForSingleVars,
|
||||||
|
mutexTimeoutForSingleVars);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = registeredVariables[count]->commitWithoutLock();
|
result = registeredVariables[count]->commitWithoutLock();
|
||||||
@ -160,7 +170,8 @@ ReturnValue_t PoolDataSetBase::handleUnreadDatasetCommit(uint32_t lockTimeout) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ReturnValue_t PoolDataSetBase::lockDataPool(uint32_t timeoutMs) {
|
ReturnValue_t PoolDataSetBase::lockDataPool(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t lockTimeout) {
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,8 +217,14 @@ void PoolDataSetBase::setContainer(PoolVariableIF **variablesContainer) {
|
|||||||
this->registeredVariables = variablesContainer;
|
this->registeredVariables = variablesContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PoolDataSetBase::setReadCommitProtectionBehaviour(
|
PoolVariableIF** PoolDataSetBase::getContainer() const {
|
||||||
bool protectEveryReadCommit, uint32_t mutexTimeout) {
|
return registeredVariables;
|
||||||
this->protectEveryReadCommitCall = protectEveryReadCommit;
|
}
|
||||||
this->mutexTimeout = mutexTimeout;
|
|
||||||
|
void PoolDataSetBase::setReadCommitProtectionBehaviour(
|
||||||
|
bool protectEveryReadCommit, MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t mutexTimeout) {
|
||||||
|
this->protectEveryReadCommitCall = protectEveryReadCommit;
|
||||||
|
this->timeoutTypeForSingleVars = timeoutType;
|
||||||
|
this->mutexTimeoutForSingleVars = mutexTimeout;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "PoolDataSetIF.h"
|
#include "PoolDataSetIF.h"
|
||||||
#include "PoolVariableIF.h"
|
#include "PoolVariableIF.h"
|
||||||
|
#include "../serialize/SerializeIF.h"
|
||||||
#include "../ipc/MutexIF.h"
|
#include "../ipc/MutexIF.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,8 +63,9 @@ public:
|
|||||||
* - @c SET_WAS_ALREADY_READ if read() is called twice without calling
|
* - @c SET_WAS_ALREADY_READ if read() is called twice without calling
|
||||||
* commit() in between
|
* commit() in between
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t read(uint32_t lockTimeout =
|
virtual ReturnValue_t read(
|
||||||
MutexIF::BLOCKING) override;
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t lockTimeout = 20) override;
|
||||||
/**
|
/**
|
||||||
* @brief The commit call initializes writing back the registered variables.
|
* @brief The commit call initializes writing back the registered variables.
|
||||||
* @details
|
* @details
|
||||||
@ -82,8 +84,9 @@ public:
|
|||||||
* - @c COMMITING_WITHOUT_READING if set was not read yet and
|
* - @c COMMITING_WITHOUT_READING if set was not read yet and
|
||||||
* contains non write-only variables
|
* contains non write-only variables
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t commit(uint32_t lockTimeout =
|
virtual ReturnValue_t commit(
|
||||||
MutexIF::BLOCKING) override;
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t lockTimeout = 20) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the passed pool variable instance into the data set.
|
* Register the passed pool variable instance into the data set.
|
||||||
@ -97,8 +100,9 @@ public:
|
|||||||
* thread-safety. Default implementation is empty
|
* thread-safety. Default implementation is empty
|
||||||
* @return Always returns -@c RETURN_OK
|
* @return Always returns -@c RETURN_OK
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t lockDataPool(uint32_t timeoutMs =
|
virtual ReturnValue_t lockDataPool(
|
||||||
MutexIF::BLOCKING) override;
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) override;
|
||||||
/**
|
/**
|
||||||
* Provides the means to unlock the underlying data structure to ensure
|
* Provides the means to unlock the underlying data structure to ensure
|
||||||
* thread-safety. Default implementation is empty
|
* thread-safety. Default implementation is empty
|
||||||
@ -124,6 +128,7 @@ protected:
|
|||||||
* @param mutexTimeout
|
* @param mutexTimeout
|
||||||
*/
|
*/
|
||||||
void setReadCommitProtectionBehaviour(bool protectEveryReadCommit,
|
void setReadCommitProtectionBehaviour(bool protectEveryReadCommit,
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
uint32_t mutexTimeout = 20);
|
uint32_t mutexTimeout = 20);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -154,14 +159,20 @@ protected:
|
|||||||
const size_t maxFillCount = 0;
|
const size_t maxFillCount = 0;
|
||||||
|
|
||||||
void setContainer(PoolVariableIF** variablesContainer);
|
void setContainer(PoolVariableIF** variablesContainer);
|
||||||
|
PoolVariableIF** getContainer() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool protectEveryReadCommitCall = false;
|
bool protectEveryReadCommitCall = false;
|
||||||
uint32_t mutexTimeout = 20;
|
MutexIF::TimeoutType timeoutTypeForSingleVars;
|
||||||
|
uint32_t mutexTimeoutForSingleVars = 20;
|
||||||
|
|
||||||
ReturnValue_t readVariable(uint16_t count);
|
ReturnValue_t readVariable(uint16_t count);
|
||||||
void handleAlreadyReadDatasetCommit(uint32_t lockTimeout);
|
void handleAlreadyReadDatasetCommit(
|
||||||
ReturnValue_t handleUnreadDatasetCommit(uint32_t lockTimeout);
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20);
|
||||||
|
ReturnValue_t handleUnreadDatasetCommit(
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_DATAPOOL_POOLDATASETBASE_H_ */
|
#endif /* FSFW_DATAPOOL_POOLDATASETBASE_H_ */
|
||||||
|
@ -18,7 +18,10 @@ public:
|
|||||||
* thread-safety
|
* thread-safety
|
||||||
* @return Lock operation result
|
* @return Lock operation result
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t lockDataPool(dur_millis_t timeoutMs) = 0;
|
virtual ReturnValue_t lockDataPool(
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Unlock call corresponding to the lock call.
|
* @brief Unlock call corresponding to the lock call.
|
||||||
* @return Unlock operation result
|
* @return Unlock operation result
|
||||||
|
@ -1,32 +1,24 @@
|
|||||||
#include "PoolEntry.h"
|
#include "PoolEntry.h"
|
||||||
|
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../globalfunctions/arrayprinter.h"
|
#include "../globalfunctions/arrayprinter.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
PoolEntry<T>::PoolEntry(std::initializer_list<T> initValue, uint8_t setLength,
|
PoolEntry<T>::PoolEntry(std::initializer_list<T> initValue, bool setValid ):
|
||||||
bool setValid ) : length(setLength), valid(setValid) {
|
length(initValue.size()), valid(setValid) {
|
||||||
this->address = new T[this->length];
|
this->address = new T[this->length];
|
||||||
if(initValue.size() == 0) {
|
if(initValue.size() == 0) {
|
||||||
std::memset(this->address, 0, this->getByteSize());
|
std::memset(this->address, 0, this->getByteSize());
|
||||||
}
|
}
|
||||||
else if (initValue.size() != setLength){
|
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
||||||
sif::warning << "PoolEntry: setLength is not equal to initializer list"
|
|
||||||
"length! Performing zero initialization with given setLength"
|
|
||||||
<< std::endl;
|
|
||||||
#endif
|
|
||||||
std::memset(this->address, 0, this->getByteSize());
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
std::copy(initValue.begin(), initValue.end(), this->address);
|
std::copy(initValue.begin(), initValue.end(), this->address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
PoolEntry<T>::PoolEntry( T* initValue, uint8_t setLength, bool setValid ) :
|
PoolEntry<T>::PoolEntry(T* initValue, uint8_t setLength, bool setValid):
|
||||||
length(setLength), valid(setValid) {
|
length(setLength), valid(setValid) {
|
||||||
this->address = new T[this->length];
|
this->address = new T[this->length];
|
||||||
if (initValue != nullptr) {
|
if (initValue != nullptr) {
|
||||||
@ -70,14 +62,26 @@ bool PoolEntry<T>::getValid() {
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void PoolEntry<T>::print() {
|
void PoolEntry<T>::print() {
|
||||||
|
const char* validString = nullptr;
|
||||||
|
if(valid) {
|
||||||
|
validString = "Valid";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
validString = "Invalid";
|
||||||
|
}
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::debug << "Pool Entry Validity: " <<
|
sif::info << "PoolEntry information." << std::endl;
|
||||||
(this->valid? " (valid) " : " (invalid) ") << std::endl;
|
sif::info << "PoolEntry validity: " << validString << std::endl;
|
||||||
#endif
|
#else
|
||||||
arrayprinter::print(reinterpret_cast<uint8_t*>(address), length);
|
sif::printInfo("PoolEntry information.\n");
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
sif::printInfo("PoolEntry validity: %s\n", validString);
|
||||||
sif::debug << std::dec << std::endl;
|
|
||||||
#endif
|
#endif
|
||||||
|
arrayprinter::print(reinterpret_cast<uint8_t*>(address), getByteSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline T* PoolEntry<T>::getDataPtr() {
|
||||||
|
return this->address;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -88,8 +92,10 @@ Type PoolEntry<T>::getType() {
|
|||||||
template class PoolEntry<uint8_t>;
|
template class PoolEntry<uint8_t>;
|
||||||
template class PoolEntry<uint16_t>;
|
template class PoolEntry<uint16_t>;
|
||||||
template class PoolEntry<uint32_t>;
|
template class PoolEntry<uint32_t>;
|
||||||
|
template class PoolEntry<uint64_t>;
|
||||||
template class PoolEntry<int8_t>;
|
template class PoolEntry<int8_t>;
|
||||||
template class PoolEntry<int16_t>;
|
template class PoolEntry<int16_t>;
|
||||||
template class PoolEntry<int32_t>;
|
template class PoolEntry<int32_t>;
|
||||||
|
template class PoolEntry<int64_t>;
|
||||||
template class PoolEntry<float>;
|
template class PoolEntry<float>;
|
||||||
template class PoolEntry<double>;
|
template class PoolEntry<double>;
|
||||||
|
@ -35,24 +35,22 @@ public:
|
|||||||
"uint8_t");
|
"uint8_t");
|
||||||
/**
|
/**
|
||||||
* @brief In the classe's constructor, space is allocated on the heap and
|
* @brief In the classe's constructor, space is allocated on the heap and
|
||||||
* potential init values are copied to that space.
|
* potential initialization values are copied to that space.
|
||||||
* @details
|
* @details
|
||||||
* Not passing any arguments will initialize an non-array pool entry
|
* Not passing any arguments will initialize an non-array pool entry
|
||||||
* (setLength = 1) with an initial invalid state.
|
* with an initial invalid state and the value 0.
|
||||||
* Please note that if an initializer list is passed, the correct
|
* Please note that if an initializer list is passed, the length of the
|
||||||
* corresponding length should be passed too, otherwise a zero
|
* initializer list needs to be correct for vector entries because
|
||||||
* initialization will be performed with the given setLength.
|
* required allocated space will be deduced from the initializer list length
|
||||||
|
* and the pool entry type.
|
||||||
* @param initValue
|
* @param initValue
|
||||||
* Initializer list with values to initialize with, for example {0,0} to
|
* Initializer list with values to initialize with, for example {0, 0} to
|
||||||
* initialize the two entries to zero.
|
* initialize the a pool entry of a vector with two entries to 0.
|
||||||
* @param setLength
|
|
||||||
* Defines the array length of this entry. Should be equal to the
|
|
||||||
* intializer list length.
|
|
||||||
* @param setValid
|
* @param setValid
|
||||||
* Sets the initialization flag. It is invalid by default.
|
* Sets the initialization flag. It is invalid by default.
|
||||||
*/
|
*/
|
||||||
PoolEntry(std::initializer_list<T> initValue = {}, uint8_t setLength = 1,
|
PoolEntry(std::initializer_list<T> initValue = {0}, bool setValid = false);
|
||||||
bool setValid = false);
|
|
||||||
/**
|
/**
|
||||||
* @brief In the classe's constructor, space is allocated on the heap and
|
* @brief In the classe's constructor, space is allocated on the heap and
|
||||||
* potential init values are copied to that space.
|
* potential init values are copied to that space.
|
||||||
@ -66,9 +64,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
PoolEntry(T* initValue, uint8_t setLength = 1, bool setValid = false);
|
PoolEntry(T* initValue, uint8_t setLength = 1, bool setValid = false);
|
||||||
|
|
||||||
//! Explicitely deleted copy ctor, copying is not allowed!
|
//! Explicitely deleted copy ctor, copying is not allowed.
|
||||||
PoolEntry(const PoolEntry&) = delete;
|
PoolEntry(const PoolEntry&) = delete;
|
||||||
//! Explicitely deleted copy assignment, copying is not allowed!
|
//! Explicitely deleted copy assignment, copying is not allowed.
|
||||||
PoolEntry& operator=(const PoolEntry&) = delete;
|
PoolEntry& operator=(const PoolEntry&) = delete;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,21 +80,16 @@ public:
|
|||||||
~PoolEntry();
|
~PoolEntry();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is the address pointing to the allocated memory.
|
* Return typed pointer to start of data.
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
T* address;
|
T* getDataPtr();
|
||||||
/**
|
|
||||||
* @brief This attribute stores the length information.
|
|
||||||
*/
|
|
||||||
uint8_t length;
|
|
||||||
/**
|
|
||||||
* @brief Here, the validity information for a variable is stored.
|
|
||||||
* Every entry (single variable or vector) has one valid flag.
|
|
||||||
*/
|
|
||||||
uint8_t valid;
|
|
||||||
/**
|
/**
|
||||||
* @brief getSize returns the array size of the entry.
|
* @brief getSize returns the array size of the entry.
|
||||||
* @details A single parameter has size 1.
|
* @details
|
||||||
|
* For non-array pool entries return type size, for vector entries
|
||||||
|
* return type size times the number of entries.
|
||||||
*/
|
*/
|
||||||
uint8_t getSize();
|
uint8_t getSize();
|
||||||
/**
|
/**
|
||||||
@ -123,8 +116,22 @@ public:
|
|||||||
* information to the screen. It prints all array entries in a row.
|
* information to the screen. It prints all array entries in a row.
|
||||||
*/
|
*/
|
||||||
void print();
|
void print();
|
||||||
|
|
||||||
Type getType();
|
Type getType();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* @brief This attribute stores the length information.
|
||||||
|
*/
|
||||||
|
uint8_t length;
|
||||||
|
/**
|
||||||
|
* @brief Here, the validity information for a variable is stored.
|
||||||
|
* Every entry (single variable or vector) has one valid flag.
|
||||||
|
*/
|
||||||
|
uint8_t valid;
|
||||||
|
/**
|
||||||
|
* @brief This is the address pointing to the allocated memory.
|
||||||
|
*/
|
||||||
|
T* address;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_DATAPOOL_POOLENTRY_H_ */
|
#endif /* FSFW_DATAPOOL_POOLENTRY_H_ */
|
||||||
|
@ -25,6 +25,7 @@ class PoolVariableIF : public SerializeIF,
|
|||||||
public:
|
public:
|
||||||
static constexpr uint8_t INTERFACE_ID = CLASS_ID::POOL_VARIABLE_IF;
|
static constexpr uint8_t INTERFACE_ID = CLASS_ID::POOL_VARIABLE_IF;
|
||||||
static constexpr ReturnValue_t INVALID_READ_WRITE_MODE = MAKE_RETURN_CODE(0xA0);
|
static constexpr ReturnValue_t INVALID_READ_WRITE_MODE = MAKE_RETURN_CODE(0xA0);
|
||||||
|
static constexpr ReturnValue_t INVALID_POOL_ENTRY = MAKE_RETURN_CODE(0xA1);
|
||||||
|
|
||||||
static constexpr bool VALID = 1;
|
static constexpr bool VALID = 1;
|
||||||
static constexpr bool INVALID = 0;
|
static constexpr bool INVALID = 0;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define FSFW_DATAPOOL_READCOMMITIF_H_
|
#define FSFW_DATAPOOL_READCOMMITIF_H_
|
||||||
|
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
#include <fsfw/ipc/MutexIF.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Common interface for all software objects which employ read-commit
|
* @brief Common interface for all software objects which employ read-commit
|
||||||
@ -10,8 +11,10 @@
|
|||||||
class ReadCommitIF {
|
class ReadCommitIF {
|
||||||
public:
|
public:
|
||||||
virtual ~ReadCommitIF() {}
|
virtual ~ReadCommitIF() {}
|
||||||
virtual ReturnValue_t read(uint32_t mutexTimeout) = 0;
|
virtual ReturnValue_t read(MutexIF::TimeoutType timeoutType,
|
||||||
virtual ReturnValue_t commit(uint32_t mutexTimeout) = 0;
|
uint32_t timeoutMs) = 0;
|
||||||
|
virtual ReturnValue_t commit(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t timeoutMs) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -19,11 +22,11 @@ protected:
|
|||||||
//! members with commit and read semantics where the lock is only necessary
|
//! members with commit and read semantics where the lock is only necessary
|
||||||
//! once.
|
//! once.
|
||||||
virtual ReturnValue_t readWithoutLock() {
|
virtual ReturnValue_t readWithoutLock() {
|
||||||
return read(20);
|
return read(MutexIF::TimeoutType::WAITING, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t commitWithoutLock() {
|
virtual ReturnValue_t commitWithoutLock() {
|
||||||
return commit(20);
|
return commit(MutexIF::TimeoutType::WAITING, 20);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
27
datapoollocal/AccessLocalPoolF.h
Normal file
27
datapoollocal/AccessLocalPoolF.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_ACCESSLOCALPOOLF_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_ACCESSLOCALPOOLF_H_
|
||||||
|
|
||||||
|
class LocalDataPoolManager;
|
||||||
|
class MutexIF;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Accessor class which can be used by classes which like to use the pool manager.
|
||||||
|
*/
|
||||||
|
class AccessPoolManagerIF {
|
||||||
|
public:
|
||||||
|
virtual ~AccessPoolManagerIF() {};
|
||||||
|
|
||||||
|
virtual MutexIF* getLocalPoolMutex() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used to get a handle to the local data pool manager.
|
||||||
|
* This function is protected because it should only be used by the
|
||||||
|
* class imlementing the interface.
|
||||||
|
*/
|
||||||
|
virtual LocalDataPoolManager* getHkManagerHandle() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_ACCESSLOCALPOOLF_H_ */
|
@ -6,3 +6,5 @@ target_sources(${LIB_FSFW_NAME}
|
|||||||
LocalPoolObjectBase.cpp
|
LocalPoolObjectBase.cpp
|
||||||
SharedLocalDataSet.cpp
|
SharedLocalDataSet.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_subdirectory(internal)
|
@ -1,52 +1,40 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_
|
#ifndef FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_
|
#define FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_
|
||||||
|
|
||||||
#include "locPoolDefinitions.h"
|
#include "localPoolDefinitions.h"
|
||||||
|
|
||||||
#include "../datapool/PoolEntryIF.h"
|
#include "../datapool/PoolEntryIF.h"
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../ipc/MessageQueueSenderIF.h"
|
#include "../ipc/MessageQueueSenderIF.h"
|
||||||
#include "../housekeeping/HousekeepingMessage.h"
|
#include "../housekeeping/HousekeepingMessage.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
class LocalDataPoolManager;
|
class AccessPoolManagerIF;
|
||||||
|
class ProvidesDataPoolSubscriptionIF;
|
||||||
class LocalPoolDataSetBase;
|
class LocalPoolDataSetBase;
|
||||||
class LocalPoolObjectBase;
|
class LocalPoolObjectBase;
|
||||||
|
class LocalDataPoolManager;
|
||||||
using LocalDataPool = std::map<lp_id_t, PoolEntryIF*>;
|
|
||||||
using LocalDataPoolMapIter = LocalDataPool::iterator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This interface is implemented by classes which posses a local
|
* @brief This interface is implemented by classes which posses a local data pool (not the
|
||||||
* data pool (not the managing class). It defines the relationship
|
* managing class). It defines the relationship between the local data pool owner
|
||||||
* between the local data pool owner and the LocalDataPoolManager.
|
* and the LocalDataPoolManager.
|
||||||
* @details
|
* @details
|
||||||
* Any class implementing this interface shall also have a LocalDataPoolManager
|
* Any class implementing this interface shall also have a LocalDataPoolManager member class which
|
||||||
* member class which contains the actual pool data structure
|
* contains the actual pool data structure and exposes the public interface for it.
|
||||||
* and exposes the public interface for it.
|
* The local data pool can be accessed using helper classes by using the
|
||||||
* This is required because the pool entries are templates, which makes
|
* LocalPoolVariable, LocalPoolVector or LocalDataSet classes. Every local pool variable can
|
||||||
* specifying an interface rather difficult. The local data pool can be
|
* be uniquely identified by a global pool ID (gp_id_t) and every dataset tied
|
||||||
* accessed by using the LocalPoolVariable, LocalPoolVector or LocalDataSet
|
* to a pool manager can be uniqely identified by a global structure ID (sid_t).
|
||||||
* classes.
|
|
||||||
*
|
*
|
||||||
* Architectural Note:
|
|
||||||
* This could be circumvented by using a wrapper/accessor function or
|
|
||||||
* implementing the templated function in this interface..
|
|
||||||
* The first solution sounds better than the second but
|
|
||||||
* the LocalPoolVariable classes are templates as well, so this just shifts
|
|
||||||
* the problem somewhere else. Interfaces are nice, but the most
|
|
||||||
* pragmatic solution I found was to offer the client the full interface
|
|
||||||
* of the LocalDataPoolManager.
|
|
||||||
*/
|
*/
|
||||||
class HasLocalDataPoolIF {
|
class HasLocalDataPoolIF {
|
||||||
|
friend class HasLocalDpIFManagerAttorney;
|
||||||
|
friend class HasLocalDpIFUserAttorney;
|
||||||
public:
|
public:
|
||||||
virtual~ HasLocalDataPoolIF() {};
|
virtual~ HasLocalDataPoolIF() {};
|
||||||
|
|
||||||
static constexpr uint8_t INTERFACE_ID = CLASS_ID::LOCAL_POOL_OWNER_IF;
|
|
||||||
|
|
||||||
static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0x00);
|
|
||||||
static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0x01);
|
|
||||||
|
|
||||||
static constexpr uint32_t INVALID_LPID = localpool::INVALID_LPID;
|
static constexpr uint32_t INVALID_LPID = localpool::INVALID_LPID;
|
||||||
|
|
||||||
virtual object_id_t getObjectId() const = 0;
|
virtual object_id_t getObjectId() const = 0;
|
||||||
@ -59,13 +47,9 @@ public:
|
|||||||
* The manager instance shall also be passed to this function.
|
* The manager instance shall also be passed to this function.
|
||||||
* It can be used to subscribe for periodic packets for for updates.
|
* It can be used to subscribe for periodic packets for for updates.
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t initializeLocalDataPool(
|
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPool& localDataPoolMap,
|
|
||||||
LocalDataPoolManager& poolManager) = 0;
|
LocalDataPoolManager& poolManager) = 0;
|
||||||
|
|
||||||
/** Can be used to get a handle to the local data pool manager. */
|
|
||||||
virtual LocalDataPoolManager* getHkManagerHandle() = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the minimum sampling frequency in milliseconds, which will
|
* Returns the minimum sampling frequency in milliseconds, which will
|
||||||
* usually be the period the pool owner performs its periodic operation.
|
* usually be the period the pool owner performs its periodic operation.
|
||||||
@ -73,33 +57,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual uint32_t getPeriodicOperationFrequency() const = 0;
|
virtual uint32_t getPeriodicOperationFrequency() const = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* This function is used by the pool manager to get a valid dataset
|
|
||||||
* from a SID
|
|
||||||
* @param sid Corresponding structure ID
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Similar to the function above, but used to get a local pool variable
|
|
||||||
* handle. This is only needed for update notifications, so it is not
|
|
||||||
* defined as abstract.
|
|
||||||
* @param localPoolId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
virtual LocalPoolObjectBase* getPoolObjectHandle(lp_id_t localPoolId) {
|
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
||||||
sif::warning << "HasLocalDataPoolIF::getPoolObjectHandle: Not overriden"
|
|
||||||
<< ". Returning nullptr!" << std::endl;
|
|
||||||
#endif
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function will be called by the manager if an update
|
* @brief This function will be called by the manager if an update
|
||||||
* notification is received.
|
* notification is received.
|
||||||
* @details
|
* @details HasLocalDataPoolIF
|
||||||
* Can be overriden by the child class to handle changed datasets.
|
* Can be overriden by the child class to handle changed datasets.
|
||||||
* @param sid
|
* @param sid
|
||||||
* @param storeId If a snapshot was requested, data will be located inside
|
* @param storeId If a snapshot was requested, data will be located inside
|
||||||
@ -124,18 +85,68 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* These function can be implemented by pool owner, as they are required
|
/**
|
||||||
* by the housekeeping message interface */
|
* These function can be implemented by pool owner, if they are required
|
||||||
|
* and used by the housekeeping message interface.
|
||||||
|
* */
|
||||||
virtual ReturnValue_t addDataSet(sid_t sid) {
|
virtual ReturnValue_t addDataSet(sid_t sid) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
};
|
};
|
||||||
virtual ReturnValue_t removeDataSet(sid_t sid) {
|
virtual ReturnValue_t removeDataSet(sid_t sid) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
};
|
};
|
||||||
virtual ReturnValue_t changeCollectionInterval(sid_t sid,
|
virtual ReturnValue_t changeCollectionInterval(sid_t sid, float newIntervalSeconds) {
|
||||||
float newIntervalSeconds) {
|
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function can be used by data pool consumers to retrieve a handle
|
||||||
|
* which allows subscriptions to dataset and variable updates in form of messages.
|
||||||
|
* The consumers can then read the most recent variable value by calling read with
|
||||||
|
* an own pool variable or set instance or using the deserialized snapshot data.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessor handle required for internal handling. Not intended for users and therefore
|
||||||
|
* declared protected. Users should instead use pool variables, sets or the subscription
|
||||||
|
* interface to access pool entries.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual AccessPoolManagerIF* getAccessorHandle() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is used by the pool manager to get a valid dataset
|
||||||
|
* from a SID. This function is protected to prevent users from
|
||||||
|
* using raw data set pointers which could not be thread-safe. Users
|
||||||
|
* should use the #ProvidesDataPoolSubscriptionIF.
|
||||||
|
* @param sid Corresponding structure ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Similar to the function above, but used to get a local pool variable
|
||||||
|
* handle. This is only needed for update notifications, so it is not
|
||||||
|
* defined as abstract. This function is protected to prevent users from
|
||||||
|
* using raw pool variable pointers which could not be thread-safe.
|
||||||
|
* Users should use the #ProvidesDataPoolSubscriptionIF.
|
||||||
|
* @param localPoolId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual LocalPoolObjectBase* getPoolObjectHandle(lp_id_t localPoolId) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::warning << "HasLocalDataPoolIF::getPoolObjectHandle: Not overriden"
|
||||||
|
<< ". Returning nullptr!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("HasLocalDataPoolIF::getPoolObjectHandle: "
|
||||||
|
"Not overriden. Returning nullptr!\n");
|
||||||
|
#endif
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_ */
|
#endif /* FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_ */
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
|
#include "HasLocalDataPoolIF.h"
|
||||||
#include "LocalDataPoolManager.h"
|
#include "LocalDataPoolManager.h"
|
||||||
#include "LocalPoolObjectBase.h"
|
#include "LocalPoolObjectBase.h"
|
||||||
#include "LocalPoolDataSetBase.h"
|
#include "LocalPoolDataSetBase.h"
|
||||||
|
#include "internal/LocalPoolDataSetAttorney.h"
|
||||||
|
#include "internal/HasLocalDpIFManagerAttorney.h"
|
||||||
|
|
||||||
#include "../housekeeping/HousekeepingPacketUpdate.h"
|
#include "../housekeeping/HousekeepingPacketUpdate.h"
|
||||||
#include "../housekeeping/HousekeepingSetPacket.h"
|
#include "../housekeeping/HousekeepingSetPacket.h"
|
||||||
#include "../housekeeping/AcceptsHkPacketsIF.h"
|
#include "../housekeeping/AcceptsHkPacketsIF.h"
|
||||||
|
|
||||||
#include "../timemanager/CCSDSTime.h"
|
#include "../timemanager/CCSDSTime.h"
|
||||||
#include "../ipc/MutexFactory.h"
|
#include "../ipc/MutexFactory.h"
|
||||||
#include "../ipc/MutexHelper.h"
|
#include "../ipc/MutexHelper.h"
|
||||||
@ -14,26 +16,23 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
object_id_t LocalDataPoolManager::defaultHkDestination =
|
object_id_t LocalDataPoolManager::defaultHkDestination = objects::PUS_SERVICE_3_HOUSEKEEPING;
|
||||||
objects::PUS_SERVICE_3_HOUSEKEEPING;
|
|
||||||
|
|
||||||
LocalDataPoolManager::LocalDataPoolManager(HasLocalDataPoolIF* owner,
|
LocalDataPoolManager::LocalDataPoolManager(HasLocalDataPoolIF* owner, MessageQueueIF* queueToUse,
|
||||||
MessageQueueIF* queueToUse, bool appendValidityBuffer):
|
bool appendValidityBuffer):
|
||||||
appendValidityBuffer(appendValidityBuffer) {
|
appendValidityBuffer(appendValidityBuffer) {
|
||||||
if(owner == nullptr) {
|
if(owner == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::error << "LocalDataPoolManager::LocalDataPoolManager: "
|
"LocalDataPoolManager", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< "Invalid supplied owner!" << std::endl;
|
"Invalid supplied owner");
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->owner = owner;
|
this->owner = owner;
|
||||||
mutex = MutexFactory::instance()->createMutex();
|
mutex = MutexFactory::instance()->createMutex();
|
||||||
if(mutex == nullptr) {
|
if(mutex == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
sif::error << "LocalDataPoolManager::LocalDataPoolManager: "
|
"LocalDataPoolManager", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< "Could not create mutex." << std::endl;
|
"Could not create mutex");
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hkQueue = queueToUse;
|
hkQueue = queueToUse;
|
||||||
@ -43,21 +42,18 @@ LocalDataPoolManager::~LocalDataPoolManager() {}
|
|||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::initialize(MessageQueueIF* queueToUse) {
|
ReturnValue_t LocalDataPoolManager::initialize(MessageQueueIF* queueToUse) {
|
||||||
if(queueToUse == nullptr) {
|
if(queueToUse == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
// error, all destinations invalid
|
||||||
sif::error << "LocalDataPoolManager::initialize: "
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
<< std::hex << "0x" << owner->getObjectId() << ". Supplied "
|
"initialize", QUEUE_OR_DESTINATION_INVALID);
|
||||||
<< "queue invalid!" << std::dec << std::endl;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
hkQueue = queueToUse;
|
hkQueue = queueToUse;
|
||||||
|
|
||||||
ipcStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
ipcStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
||||||
if(ipcStore == nullptr) {
|
if(ipcStore == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
// error, all destinations invalid
|
||||||
sif::error << "LocalDataPoolManager::initialize: "
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
<< std::hex << "0x" << owner->getObjectId() << ": Could not "
|
"initialize", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< "set IPC store." <<std::dec << std::endl;
|
"Could not set IPC store.");
|
||||||
#endif
|
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,11 +65,9 @@ ReturnValue_t LocalDataPoolManager::initialize(MessageQueueIF* queueToUse) {
|
|||||||
hkDestinationId = hkPacketReceiver->getHkQueue();
|
hkDestinationId = hkPacketReceiver->getHkQueue();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
sif::error << "LocalDataPoolManager::LocalDataPoolManager: "
|
"initialize", QUEUE_OR_DESTINATION_INVALID);
|
||||||
<< "Default HK destination object is invalid!" << std::endl;
|
return QUEUE_OR_DESTINATION_INVALID;
|
||||||
#endif
|
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,10 +89,10 @@ ReturnValue_t LocalDataPoolManager::initializeHousekeepingPoolEntriesOnce() {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
||||||
sif::warning << "HousekeepingManager: The map should only be initialized "
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
<< "once!" << std::endl;
|
"initialize", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
#endif
|
"The map should only be initialized once");
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,7 +135,7 @@ ReturnValue_t LocalDataPoolManager::handleHkUpdate(HkReceiver& receiver,
|
|||||||
// Update packets shall only be generated from datasets.
|
// Update packets shall only be generated from datasets.
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner,
|
||||||
receiver.dataId.sid);
|
receiver.dataId.sid);
|
||||||
if(dataSet->hasChanged()) {
|
if(dataSet->hasChanged()) {
|
||||||
// prepare and send update notification
|
// prepare and send update notification
|
||||||
@ -156,20 +150,23 @@ ReturnValue_t LocalDataPoolManager::handleHkUpdate(HkReceiver& receiver,
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::handleNotificationUpdate(
|
ReturnValue_t LocalDataPoolManager::handleNotificationUpdate(HkReceiver& receiver,
|
||||||
HkReceiver& receiver, ReturnValue_t& status) {
|
ReturnValue_t& status) {
|
||||||
MarkChangedIF* toReset = nullptr;
|
MarkChangedIF* toReset = nullptr;
|
||||||
if(receiver.dataType == DataType::LOCAL_POOL_VARIABLE) {
|
if(receiver.dataType == DataType::LOCAL_POOL_VARIABLE) {
|
||||||
LocalPoolObjectBase* poolObj = owner->getPoolObjectHandle(
|
LocalPoolObjectBase* poolObj = HasLocalDpIFManagerAttorney::getPoolObjectHandle(owner,
|
||||||
receiver.dataId.localPoolId);
|
receiver.dataId.localPoolId);
|
||||||
|
//LocalPoolObjectBase* poolObj = owner->getPoolObjectHandle(receiver.dataId.localPoolId);
|
||||||
if(poolObj == nullptr) {
|
if(poolObj == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"handleNotificationUpdate", POOLOBJECT_NOT_FOUND);
|
||||||
|
return POOLOBJECT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
if(poolObj->hasChanged()) {
|
if(poolObj->hasChanged()) {
|
||||||
// prepare and send update notification.
|
// prepare and send update notification.
|
||||||
CommandMessage notification;
|
CommandMessage notification;
|
||||||
HousekeepingMessage::setUpdateNotificationVariableCommand(
|
HousekeepingMessage::setUpdateNotificationVariableCommand(¬ification,
|
||||||
¬ification, receiver.dataId.localPoolId);
|
receiver.dataId.localPoolId);
|
||||||
ReturnValue_t result = hkQueue->sendMessage(
|
ReturnValue_t result = hkQueue->sendMessage(
|
||||||
receiver.destinationQueue, ¬ification);
|
receiver.destinationQueue, ¬ification);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
@ -180,10 +177,12 @@ ReturnValue_t LocalDataPoolManager::handleNotificationUpdate(
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner,
|
||||||
receiver.dataId.sid);
|
receiver.dataId.sid);
|
||||||
if(dataSet == nullptr) {
|
if(dataSet == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"handleNotificationUpdate", DATASET_NOT_FOUND);
|
||||||
|
return DATASET_NOT_FOUND;
|
||||||
}
|
}
|
||||||
if(dataSet->hasChanged()) {
|
if(dataSet->hasChanged()) {
|
||||||
// prepare and send update notification
|
// prepare and send update notification
|
||||||
@ -210,10 +209,12 @@ ReturnValue_t LocalDataPoolManager::handleNotificationSnapshot(
|
|||||||
MarkChangedIF* toReset = nullptr;
|
MarkChangedIF* toReset = nullptr;
|
||||||
// check whether data has changed and send messages in case it has.
|
// check whether data has changed and send messages in case it has.
|
||||||
if(receiver.dataType == DataType::LOCAL_POOL_VARIABLE) {
|
if(receiver.dataType == DataType::LOCAL_POOL_VARIABLE) {
|
||||||
LocalPoolObjectBase* poolObj = owner->getPoolObjectHandle(
|
LocalPoolObjectBase* poolObj = HasLocalDpIFManagerAttorney::getPoolObjectHandle(owner,
|
||||||
receiver.dataId.localPoolId);
|
receiver.dataId.localPoolId);
|
||||||
if(poolObj == nullptr) {
|
if(poolObj == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"handleNotificationSnapshot", POOLOBJECT_NOT_FOUND);
|
||||||
|
return POOLOBJECT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not poolObj->hasChanged()) {
|
if (not poolObj->hasChanged()) {
|
||||||
@ -226,7 +227,7 @@ ReturnValue_t LocalDataPoolManager::handleNotificationSnapshot(
|
|||||||
CCSDSTime::CDS_short cds;
|
CCSDSTime::CDS_short cds;
|
||||||
CCSDSTime::convertToCcsds(&cds, &now);
|
CCSDSTime::convertToCcsds(&cds, &now);
|
||||||
HousekeepingPacketUpdate updatePacket(reinterpret_cast<uint8_t*>(&cds),
|
HousekeepingPacketUpdate updatePacket(reinterpret_cast<uint8_t*>(&cds),
|
||||||
sizeof(cds), owner->getPoolObjectHandle(
|
sizeof(cds), HasLocalDpIFManagerAttorney::getPoolObjectHandle(owner,
|
||||||
receiver.dataId.localPoolId));
|
receiver.dataId.localPoolId));
|
||||||
|
|
||||||
store_address_t storeId;
|
store_address_t storeId;
|
||||||
@ -246,10 +247,12 @@ ReturnValue_t LocalDataPoolManager::handleNotificationSnapshot(
|
|||||||
toReset = poolObj;
|
toReset = poolObj;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner,
|
||||||
receiver.dataId.sid);
|
receiver.dataId.sid);
|
||||||
if(dataSet == nullptr) {
|
if(dataSet == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"handleNotificationSnapshot", DATASET_NOT_FOUND);
|
||||||
|
return DATASET_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(not dataSet->hasChanged()) {
|
if(not dataSet->hasChanged()) {
|
||||||
@ -262,7 +265,8 @@ ReturnValue_t LocalDataPoolManager::handleNotificationSnapshot(
|
|||||||
CCSDSTime::CDS_short cds;
|
CCSDSTime::CDS_short cds;
|
||||||
CCSDSTime::convertToCcsds(&cds, &now);
|
CCSDSTime::convertToCcsds(&cds, &now);
|
||||||
HousekeepingPacketUpdate updatePacket(reinterpret_cast<uint8_t*>(&cds),
|
HousekeepingPacketUpdate updatePacket(reinterpret_cast<uint8_t*>(&cds),
|
||||||
sizeof(cds), owner->getDataSetHandle(receiver.dataId.sid));
|
sizeof(cds), HasLocalDpIFManagerAttorney::getDataSetHandle(owner,
|
||||||
|
receiver.dataId.sid));
|
||||||
|
|
||||||
store_address_t storeId;
|
store_address_t storeId;
|
||||||
ReturnValue_t result = addUpdateToStore(updatePacket, storeId);
|
ReturnValue_t result = addUpdateToStore(updatePacket, storeId);
|
||||||
@ -308,8 +312,8 @@ void LocalDataPoolManager::handleChangeResetLogic(
|
|||||||
// config error!
|
// config error!
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
HkUpdateResetList& listRef = *hkUpdateResetList;
|
||||||
for(auto& changeInfo: *hkUpdateResetList) {
|
for(auto& changeInfo: listRef) {
|
||||||
if(changeInfo.dataType != type) {
|
if(changeInfo.dataType != type) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -322,12 +326,16 @@ void LocalDataPoolManager::handleChangeResetLogic(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only one update recipient, we can reset changes status immediately.
|
||||||
if(changeInfo.updateCounter <= 1) {
|
if(changeInfo.updateCounter <= 1) {
|
||||||
toReset->setChanged(false);
|
toReset->setChanged(false);
|
||||||
}
|
}
|
||||||
if(changeInfo.currentUpdateCounter == 0) {
|
// All recipients have been notified, reset the changed flag.
|
||||||
|
if(changeInfo.currentUpdateCounter <= 1) {
|
||||||
toReset->setChanged(false);
|
toReset->setChanged(false);
|
||||||
|
changeInfo.currentUpdateCounter = 0;
|
||||||
}
|
}
|
||||||
|
// Not all recipiens have been notified yet, decrement.
|
||||||
else {
|
else {
|
||||||
changeInfo.currentUpdateCounter--;
|
changeInfo.currentUpdateCounter--;
|
||||||
}
|
}
|
||||||
@ -351,11 +359,9 @@ ReturnValue_t LocalDataPoolManager::subscribeForPeriodicPacket(sid_t sid,
|
|||||||
AcceptsHkPacketsIF* hkReceiverObject =
|
AcceptsHkPacketsIF* hkReceiverObject =
|
||||||
objectManager->get<AcceptsHkPacketsIF>(packetDestination);
|
objectManager->get<AcceptsHkPacketsIF>(packetDestination);
|
||||||
if(hkReceiverObject == nullptr) {
|
if(hkReceiverObject == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::error << "LocalDataPoolManager::subscribeForPeriodicPacket:"
|
"subscribeForPeriodicPacket", QUEUE_OR_DESTINATION_INVALID);
|
||||||
<< " Invalid receiver!"<< std::endl;
|
return QUEUE_OR_DESTINATION_INVALID;
|
||||||
#endif
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HkReceiver hkReceiver;
|
struct HkReceiver hkReceiver;
|
||||||
@ -364,11 +370,12 @@ ReturnValue_t LocalDataPoolManager::subscribeForPeriodicPacket(sid_t sid,
|
|||||||
hkReceiver.dataType = DataType::DATA_SET;
|
hkReceiver.dataType = DataType::DATA_SET;
|
||||||
hkReceiver.destinationQueue = hkReceiverObject->getHkQueue();
|
hkReceiver.destinationQueue = hkReceiverObject->getHkQueue();
|
||||||
|
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
if(dataSet != nullptr) {
|
if(dataSet != nullptr) {
|
||||||
dataSet->setReportingEnabled(enableReporting);
|
LocalPoolDataSetAttorney::setReportingEnabled(*dataSet, enableReporting);
|
||||||
dataSet->setDiagnostic(isDiagnostics);
|
LocalPoolDataSetAttorney::setDiagnostic(*dataSet, isDiagnostics);
|
||||||
dataSet->initializePeriodicHelper(collectionInterval,
|
LocalPoolDataSetAttorney::initializePeriodicHelper(*dataSet, collectionInterval,
|
||||||
owner->getPeriodicOperationFrequency(), isDiagnostics);
|
owner->getPeriodicOperationFrequency(), isDiagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,11 +390,9 @@ ReturnValue_t LocalDataPoolManager::subscribeForUpdatePackets(sid_t sid,
|
|||||||
AcceptsHkPacketsIF* hkReceiverObject =
|
AcceptsHkPacketsIF* hkReceiverObject =
|
||||||
objectManager->get<AcceptsHkPacketsIF>(packetDestination);
|
objectManager->get<AcceptsHkPacketsIF>(packetDestination);
|
||||||
if(hkReceiverObject == nullptr) {
|
if(hkReceiverObject == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::error << "LocalDataPoolManager::subscribeForPeriodicPacket:"
|
"subscribeForPeriodicPacket", QUEUE_OR_DESTINATION_INVALID);
|
||||||
<< " Invalid receiver!"<< std::endl;
|
return QUEUE_OR_DESTINATION_INVALID;
|
||||||
#endif
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HkReceiver hkReceiver;
|
struct HkReceiver hkReceiver;
|
||||||
@ -396,10 +401,11 @@ ReturnValue_t LocalDataPoolManager::subscribeForUpdatePackets(sid_t sid,
|
|||||||
hkReceiver.dataType = DataType::DATA_SET;
|
hkReceiver.dataType = DataType::DATA_SET;
|
||||||
hkReceiver.destinationQueue = hkReceiverObject->getHkQueue();
|
hkReceiver.destinationQueue = hkReceiverObject->getHkQueue();
|
||||||
|
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
if(dataSet != nullptr) {
|
if(dataSet != nullptr) {
|
||||||
dataSet->setReportingEnabled(true);
|
LocalPoolDataSetAttorney::setReportingEnabled(*dataSet, true);
|
||||||
dataSet->setDiagnostic(isDiagnostics);
|
LocalPoolDataSetAttorney::setDiagnostic(*dataSet, isDiagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
hkReceiversMap.push_back(hkReceiver);
|
hkReceiversMap.push_back(hkReceiver);
|
||||||
@ -413,7 +419,7 @@ ReturnValue_t LocalDataPoolManager::subscribeForSetUpdateMessages(
|
|||||||
MessageQueueId_t targetQueueId, bool generateSnapshot) {
|
MessageQueueId_t targetQueueId, bool generateSnapshot) {
|
||||||
struct HkReceiver hkReceiver;
|
struct HkReceiver hkReceiver;
|
||||||
hkReceiver.dataType = DataType::DATA_SET;
|
hkReceiver.dataType = DataType::DATA_SET;
|
||||||
hkReceiver.dataId.sid = sid_t(this->getOwner()->getObjectId(), setId);
|
hkReceiver.dataId.sid = sid_t(owner->getObjectId(), setId);
|
||||||
hkReceiver.destinationQueue = targetQueueId;
|
hkReceiver.destinationQueue = targetQueueId;
|
||||||
hkReceiver.objectId = destinationObject;
|
hkReceiver.objectId = destinationObject;
|
||||||
if(generateSnapshot) {
|
if(generateSnapshot) {
|
||||||
@ -513,10 +519,13 @@ ReturnValue_t LocalDataPoolManager::handleHousekeepingMessage(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case(HousekeepingMessage::REPORT_DIAGNOSTICS_REPORT_STRUCTURES):
|
case(HousekeepingMessage::REPORT_DIAGNOSTICS_REPORT_STRUCTURES): {
|
||||||
return generateSetStructurePacket(sid, true);
|
return generateSetStructurePacket(sid, true);
|
||||||
case(HousekeepingMessage::REPORT_HK_REPORT_STRUCTURES):
|
}
|
||||||
|
|
||||||
|
case(HousekeepingMessage::REPORT_HK_REPORT_STRUCTURES): {
|
||||||
return generateSetStructurePacket(sid, false);
|
return generateSetStructurePacket(sid, false);
|
||||||
|
}
|
||||||
case(HousekeepingMessage::MODIFY_DIAGNOSTICS_REPORT_COLLECTION_INTERVAL):
|
case(HousekeepingMessage::MODIFY_DIAGNOSTICS_REPORT_COLLECTION_INTERVAL):
|
||||||
case(HousekeepingMessage::MODIFY_PARAMETER_REPORT_COLLECTION_INTERVAL): {
|
case(HousekeepingMessage::MODIFY_PARAMETER_REPORT_COLLECTION_INTERVAL): {
|
||||||
float newCollIntvl = 0;
|
float newCollIntvl = 0;
|
||||||
@ -534,13 +543,14 @@ ReturnValue_t LocalDataPoolManager::handleHousekeepingMessage(
|
|||||||
|
|
||||||
case(HousekeepingMessage::GENERATE_ONE_PARAMETER_REPORT):
|
case(HousekeepingMessage::GENERATE_ONE_PARAMETER_REPORT):
|
||||||
case(HousekeepingMessage::GENERATE_ONE_DIAGNOSTICS_REPORT): {
|
case(HousekeepingMessage::GENERATE_ONE_DIAGNOSTICS_REPORT): {
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
LocalPoolDataSetBase* dataSet =HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
if(command == HousekeepingMessage::GENERATE_ONE_PARAMETER_REPORT
|
if(command == HousekeepingMessage::GENERATE_ONE_PARAMETER_REPORT
|
||||||
and dataSet->isDiagnostics()) {
|
and LocalPoolDataSetAttorney::isDiagnostics(*dataSet)) {
|
||||||
return WRONG_HK_PACKET_TYPE;
|
return WRONG_HK_PACKET_TYPE;
|
||||||
}
|
}
|
||||||
else if(command == HousekeepingMessage::GENERATE_ONE_DIAGNOSTICS_REPORT
|
else if(command == HousekeepingMessage::GENERATE_ONE_DIAGNOSTICS_REPORT
|
||||||
and not dataSet->isDiagnostics()) {
|
and not LocalPoolDataSetAttorney::isDiagnostics(*dataSet)) {
|
||||||
return WRONG_HK_PACKET_TYPE;
|
return WRONG_HK_PACKET_TYPE;
|
||||||
}
|
}
|
||||||
return generateHousekeepingPacket(HousekeepingMessage::getSid(message),
|
return generateHousekeepingPacket(HousekeepingMessage::getSid(message),
|
||||||
@ -591,11 +601,9 @@ ReturnValue_t LocalDataPoolManager::printPoolEntry(
|
|||||||
lp_id_t localPoolId) {
|
lp_id_t localPoolId) {
|
||||||
auto poolIter = localPoolMap.find(localPoolId);
|
auto poolIter = localPoolMap.find(localPoolId);
|
||||||
if (poolIter == localPoolMap.end()) {
|
if (poolIter == localPoolMap.end()) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING, "printPoolEntry",
|
||||||
sif::debug << "HousekeepingManager::fechPoolEntry:"
|
localpool::POOL_ENTRY_NOT_FOUND);
|
||||||
<< " Pool entry not found." << std::endl;
|
return localpool::POOL_ENTRY_NOT_FOUND;
|
||||||
#endif
|
|
||||||
return HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND;
|
|
||||||
}
|
}
|
||||||
poolIter->second->print();
|
poolIter->second->print();
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
@ -614,11 +622,10 @@ ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid,
|
|||||||
MessageQueueId_t destination) {
|
MessageQueueId_t destination) {
|
||||||
if(dataSet == nullptr) {
|
if(dataSet == nullptr) {
|
||||||
// Configuration error.
|
// Configuration error.
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::warning << "HousekeepingManager::generateHousekeepingPacket:"
|
"generateHousekeepingPacket",
|
||||||
<< " Set ID not found or dataset not assigned!" << std::endl;
|
DATASET_NOT_FOUND);
|
||||||
#endif
|
return DATASET_NOT_FOUND;
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
store_address_t storeId;
|
store_address_t storeId;
|
||||||
@ -632,7 +639,7 @@ ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid,
|
|||||||
|
|
||||||
// and now we set a HK message and send it the HK packet destination.
|
// and now we set a HK message and send it the HK packet destination.
|
||||||
CommandMessage hkMessage;
|
CommandMessage hkMessage;
|
||||||
if(dataSet->isDiagnostics()) {
|
if(LocalPoolDataSetAttorney::isDiagnostics(*dataSet)) {
|
||||||
HousekeepingMessage::setHkDiagnosticsReply(&hkMessage, sid, storeId);
|
HousekeepingMessage::setHkDiagnosticsReply(&hkMessage, sid, storeId);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -640,12 +647,18 @@ ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(hkQueue == nullptr) {
|
if(hkQueue == nullptr) {
|
||||||
return QUEUE_OR_DESTINATION_NOT_SET;
|
// error, no queue available to send packet with.
|
||||||
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"generateHousekeepingPacket",
|
||||||
|
QUEUE_OR_DESTINATION_INVALID);
|
||||||
|
return QUEUE_OR_DESTINATION_INVALID;
|
||||||
}
|
}
|
||||||
if(destination == MessageQueueIF::NO_QUEUE) {
|
if(destination == MessageQueueIF::NO_QUEUE) {
|
||||||
if(hkDestinationId == MessageQueueIF::NO_QUEUE) {
|
if(hkDestinationId == MessageQueueIF::NO_QUEUE) {
|
||||||
// error, all destinations invalid
|
// error, all destinations invalid
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"generateHousekeepingPacket",
|
||||||
|
QUEUE_OR_DESTINATION_INVALID);
|
||||||
}
|
}
|
||||||
destination = hkDestinationId;
|
destination = hkDestinationId;
|
||||||
}
|
}
|
||||||
@ -680,17 +693,28 @@ void LocalDataPoolManager::setNonDiagnosticIntervalFactor(
|
|||||||
|
|
||||||
void LocalDataPoolManager::performPeriodicHkGeneration(HkReceiver& receiver) {
|
void LocalDataPoolManager::performPeriodicHkGeneration(HkReceiver& receiver) {
|
||||||
sid_t sid = receiver.dataId.sid;
|
sid_t sid = receiver.dataId.sid;
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
if(not dataSet->getReportingEnabled()) {
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
|
if(dataSet == nullptr) {
|
||||||
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"performPeriodicHkGeneration",
|
||||||
|
DATASET_NOT_FOUND);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dataSet->periodicHelper == nullptr) {
|
if(not LocalPoolDataSetAttorney::getReportingEnabled(*dataSet)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicHousekeepingHelper* periodicHelper =
|
||||||
|
LocalPoolDataSetAttorney::getPeriodicHelper(*dataSet);
|
||||||
|
|
||||||
|
if(periodicHelper == nullptr) {
|
||||||
// Configuration error.
|
// Configuration error.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(not dataSet->periodicHelper->checkOpNecessary()) {
|
if(periodicHelper->checkOpNecessary()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -699,10 +723,11 @@ void LocalDataPoolManager::performPeriodicHkGeneration(HkReceiver& receiver) {
|
|||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
// configuration error
|
// configuration error
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::debug << "LocalDataPoolManager::performHkOperation:"
|
sif::warning << "LocalDataPoolManager::performHkOperation: "
|
||||||
<< "0x" << std::hex << std::setfill('0') << std::setw(8)
|
<< "HK generation failed." << std::endl;
|
||||||
<< owner->getObjectId() << " Error generating "
|
#else
|
||||||
<< "HK packet" << std::setfill(' ') << std::dec << std::endl;
|
sif::printWarning("LocalDataPoolManager::performHkOperation: "
|
||||||
|
"HK generation failed.\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -710,62 +735,67 @@ void LocalDataPoolManager::performPeriodicHkGeneration(HkReceiver& receiver) {
|
|||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::togglePeriodicGeneration(sid_t sid,
|
ReturnValue_t LocalDataPoolManager::togglePeriodicGeneration(sid_t sid,
|
||||||
bool enable, bool isDiagnostics) {
|
bool enable, bool isDiagnostics) {
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
if((dataSet->isDiagnostics() and not isDiagnostics) or
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
(not dataSet->isDiagnostics() and isDiagnostics)) {
|
if((LocalPoolDataSetAttorney::isDiagnostics(*dataSet) and not isDiagnostics) or
|
||||||
|
(not LocalPoolDataSetAttorney::isDiagnostics(*dataSet) and isDiagnostics)) {
|
||||||
return WRONG_HK_PACKET_TYPE;
|
return WRONG_HK_PACKET_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((dataSet->getReportingEnabled() and enable) or
|
if((LocalPoolDataSetAttorney::getReportingEnabled(*dataSet) and enable) or
|
||||||
(not dataSet->getReportingEnabled() and not enable)) {
|
(not LocalPoolDataSetAttorney::getReportingEnabled(*dataSet) and not enable)) {
|
||||||
return REPORTING_STATUS_UNCHANGED;
|
return REPORTING_STATUS_UNCHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
dataSet->setReportingEnabled(enable);
|
LocalPoolDataSetAttorney::setReportingEnabled(*dataSet, enable);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::changeCollectionInterval(sid_t sid,
|
ReturnValue_t LocalDataPoolManager::changeCollectionInterval(sid_t sid,
|
||||||
float newCollectionInterval, bool isDiagnostics) {
|
float newCollectionInterval, bool isDiagnostics) {
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
bool targetIsDiagnostics = dataSet->isDiagnostics();
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
|
bool targetIsDiagnostics = LocalPoolDataSetAttorney::isDiagnostics(*dataSet);
|
||||||
if((targetIsDiagnostics and not isDiagnostics) or
|
if((targetIsDiagnostics and not isDiagnostics) or
|
||||||
(not targetIsDiagnostics and isDiagnostics)) {
|
(not targetIsDiagnostics and isDiagnostics)) {
|
||||||
return WRONG_HK_PACKET_TYPE;
|
return WRONG_HK_PACKET_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dataSet->periodicHelper == nullptr) {
|
PeriodicHousekeepingHelper* periodicHelper =
|
||||||
|
LocalPoolDataSetAttorney::getPeriodicHelper(*dataSet);
|
||||||
|
|
||||||
|
if(periodicHelper == nullptr) {
|
||||||
// config error
|
// config error
|
||||||
return PERIODIC_HELPER_INVALID;
|
return PERIODIC_HELPER_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
dataSet->periodicHelper->changeCollectionInterval(newCollectionInterval);
|
periodicHelper->changeCollectionInterval(newCollectionInterval);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid,
|
ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid,
|
||||||
bool isDiagnostics) {
|
bool isDiagnostics) {
|
||||||
// Get and check dataset first.
|
// Get and check dataset first.
|
||||||
LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
//LocalPoolDataSetBase* dataSet = owner->getDataSetHandle(sid);
|
||||||
|
LocalPoolDataSetBase* dataSet = HasLocalDpIFManagerAttorney::getDataSetHandle(owner, sid);
|
||||||
if(dataSet == nullptr) {
|
if(dataSet == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::warning << "HousekeepingManager::generateHousekeepingPacket:"
|
"performPeriodicHkGeneration",
|
||||||
<< " Set ID not found" << std::endl;
|
DATASET_NOT_FOUND);
|
||||||
#endif
|
return DATASET_NOT_FOUND;
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool targetIsDiagnostics = dataSet->isDiagnostics();
|
bool targetIsDiagnostics = LocalPoolDataSetAttorney::isDiagnostics(*dataSet);
|
||||||
if((targetIsDiagnostics and not isDiagnostics) or
|
if((targetIsDiagnostics and not isDiagnostics) or
|
||||||
(not targetIsDiagnostics and isDiagnostics)) {
|
(not targetIsDiagnostics and isDiagnostics)) {
|
||||||
return WRONG_HK_PACKET_TYPE;
|
return WRONG_HK_PACKET_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool valid = dataSet->isValid();
|
bool valid = dataSet->isValid();
|
||||||
bool reportingEnabled = dataSet->getReportingEnabled();
|
bool reportingEnabled = LocalPoolDataSetAttorney::getReportingEnabled(*dataSet);
|
||||||
float collectionInterval =
|
float collectionInterval = LocalPoolDataSetAttorney::getPeriodicHelper(*dataSet)->
|
||||||
dataSet->periodicHelper->getCollectionIntervalInSeconds();
|
getCollectionIntervalInSeconds();
|
||||||
|
|
||||||
// Generate set packet which can be serialized.
|
// Generate set packet which can be serialized.
|
||||||
HousekeepingSetPacket setPacket(sid,
|
HousekeepingSetPacket setPacket(sid,
|
||||||
@ -776,10 +806,9 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid,
|
|||||||
ReturnValue_t result = ipcStore->getFreeElement(&storeId,
|
ReturnValue_t result = ipcStore->getFreeElement(&storeId,
|
||||||
expectedSize,&storePtr);
|
expectedSize,&storePtr);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
sif::error << "HousekeepingManager::generateHousekeepingPacket: "
|
"generateSetStructurePacket", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< "Could not get free element from IPC store." << std::endl;
|
"Could not get free element from IPC store.");
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,10 +817,9 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid,
|
|||||||
result = setPacket.serialize(&storePtr, &size, expectedSize,
|
result = setPacket.serialize(&storePtr, &size, expectedSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
if(expectedSize != size) {
|
if(expectedSize != size) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::error << "HousekeepingManager::generateSetStructurePacket: "
|
"generateSetStructurePacket", HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< "Expected size is not equal to serialized size" << std::endl;
|
"Expected size is not equal to serialized size");
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send structure reporting reply.
|
// Send structure reporting reply.
|
||||||
@ -808,3 +836,76 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid,
|
|||||||
hkQueue->reply(&reply);
|
hkQueue->reply(&reply);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocalDataPoolManager::clearReceiversList() {
|
||||||
|
// clear the vector completely and releases allocated memory.
|
||||||
|
HkReceivers().swap(hkReceiversMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
MutexIF* LocalDataPoolManager::getLocalPoolMutex() {
|
||||||
|
return this->mutex;
|
||||||
|
}
|
||||||
|
|
||||||
|
object_id_t LocalDataPoolManager::getCreatorObjectId() const {
|
||||||
|
return owner->getObjectId();
|
||||||
|
//return owner->getObjectId();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalDataPoolManager::printWarningOrError(sif::OutputTypes outputType,
|
||||||
|
const char* functionName, ReturnValue_t error, const char* errorPrint) {
|
||||||
|
if(errorPrint == nullptr) {
|
||||||
|
if(error == DATASET_NOT_FOUND) {
|
||||||
|
errorPrint = "Dataset not found";
|
||||||
|
}
|
||||||
|
else if(error == POOLOBJECT_NOT_FOUND) {
|
||||||
|
errorPrint = "Pool Object not found";
|
||||||
|
}
|
||||||
|
else if(error == HasReturnvaluesIF::RETURN_FAILED) {
|
||||||
|
if(outputType == sif::OutputTypes::OUT_WARNING) {
|
||||||
|
errorPrint = "Generic Warning";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorPrint = "Generic error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(error == QUEUE_OR_DESTINATION_INVALID) {
|
||||||
|
errorPrint = "Queue or destination not set";
|
||||||
|
}
|
||||||
|
else if(error == localpool::POOL_ENTRY_TYPE_CONFLICT) {
|
||||||
|
errorPrint = "Pool entry type conflict";
|
||||||
|
}
|
||||||
|
else if(error == localpool::POOL_ENTRY_NOT_FOUND) {
|
||||||
|
errorPrint = "Pool entry not found";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorPrint = "Unknown error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(outputType == sif::OutputTypes::OUT_WARNING) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::warning << "LocalDataPoolManager::" << functionName
|
||||||
|
<< ": Object ID " << std::setw(8) << std::setfill('0')
|
||||||
|
<< std::hex << owner->getObjectId() << " | " << errorPrint
|
||||||
|
<< std::dec << std::setfill(' ') << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("LocalDataPoolManager::%s: Object ID 0x%08x | %s\n",
|
||||||
|
owner->getObjectId(), errorPrint);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if(outputType == sif::OutputTypes::OUT_ERROR) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "LocalDataPoolManager::" << functionName
|
||||||
|
<< ": Object ID " << std::setw(8) << std::setfill('0')
|
||||||
|
<< std::hex << owner->getObjectId() << " | " << errorPrint
|
||||||
|
<< std::dec << std::setfill(' ') << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("LocalDataPoolManager::%s: Object ID 0x%08x | %s\n",
|
||||||
|
owner->getObjectId(), errorPrint);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalDataPoolManager* LocalDataPoolManager::getHkManagerHandle() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_
|
#define FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_
|
||||||
|
|
||||||
#include "HasLocalDataPoolIF.h"
|
#include "ProvidesDataPoolSubscriptionIF.h"
|
||||||
|
#include "AccessLocalPoolF.h"
|
||||||
|
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../housekeeping/HousekeepingPacketDownlink.h"
|
#include "../housekeeping/HousekeepingPacketDownlink.h"
|
||||||
#include "../housekeeping/HousekeepingMessage.h"
|
#include "../housekeeping/HousekeepingMessage.h"
|
||||||
#include "../housekeeping/PeriodicHousekeepingHelper.h"
|
#include "../housekeeping/PeriodicHousekeepingHelper.h"
|
||||||
@ -15,6 +17,7 @@
|
|||||||
#include "../ipc/MutexHelper.h"
|
#include "../ipc/MutexHelper.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace Factory {
|
namespace Factory {
|
||||||
void setStaticFrameworkObjectIds();
|
void setStaticFrameworkObjectIds();
|
||||||
@ -22,6 +25,8 @@ void setStaticFrameworkObjectIds();
|
|||||||
|
|
||||||
class LocalPoolDataSetBase;
|
class LocalPoolDataSetBase;
|
||||||
class HousekeepingPacketUpdate;
|
class HousekeepingPacketUpdate;
|
||||||
|
class HasLocalDataPoolIF;
|
||||||
|
class LocalDataPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This class is the managing instance for the local data pool.
|
* @brief This class is the managing instance for the local data pool.
|
||||||
@ -47,19 +52,23 @@ class HousekeepingPacketUpdate;
|
|||||||
* Each pool entry has a valid state too.
|
* Each pool entry has a valid state too.
|
||||||
* @author R. Mueller
|
* @author R. Mueller
|
||||||
*/
|
*/
|
||||||
class LocalDataPoolManager {
|
class LocalDataPoolManager: public ProvidesDataPoolSubscriptionIF,
|
||||||
template<typename T> friend class LocalPoolVariable;
|
public AccessPoolManagerIF {
|
||||||
template<typename T, uint16_t vecSize> friend class LocalPoolVector;
|
|
||||||
friend class LocalPoolDataSetBase;
|
|
||||||
friend void (Factory::setStaticFrameworkObjectIds)();
|
friend void (Factory::setStaticFrameworkObjectIds)();
|
||||||
|
//! Some classes using the pool manager directly need to access class internals of the
|
||||||
|
//! manager. The attorney provides granular control of access to these internals.
|
||||||
|
friend class LocalDpManagerAttorney;
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t INTERFACE_ID = CLASS_ID::HOUSEKEEPING_MANAGER;
|
static constexpr uint8_t INTERFACE_ID = CLASS_ID::HOUSEKEEPING_MANAGER;
|
||||||
|
|
||||||
static constexpr ReturnValue_t QUEUE_OR_DESTINATION_NOT_SET = MAKE_RETURN_CODE(0x0);
|
static constexpr ReturnValue_t QUEUE_OR_DESTINATION_INVALID = MAKE_RETURN_CODE(0);
|
||||||
|
|
||||||
|
static constexpr ReturnValue_t WRONG_HK_PACKET_TYPE = MAKE_RETURN_CODE(1);
|
||||||
|
static constexpr ReturnValue_t REPORTING_STATUS_UNCHANGED = MAKE_RETURN_CODE(2);
|
||||||
|
static constexpr ReturnValue_t PERIODIC_HELPER_INVALID = MAKE_RETURN_CODE(3);
|
||||||
|
static constexpr ReturnValue_t POOLOBJECT_NOT_FOUND = MAKE_RETURN_CODE(4);
|
||||||
|
static constexpr ReturnValue_t DATASET_NOT_FOUND = MAKE_RETURN_CODE(5);
|
||||||
|
|
||||||
static constexpr ReturnValue_t WRONG_HK_PACKET_TYPE = MAKE_RETURN_CODE(0x01);
|
|
||||||
static constexpr ReturnValue_t REPORTING_STATUS_UNCHANGED = MAKE_RETURN_CODE(0x02);
|
|
||||||
static constexpr ReturnValue_t PERIODIC_HELPER_INVALID = MAKE_RETURN_CODE(0x03);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This constructor is used by a class which wants to implement
|
* This constructor is used by a class which wants to implement
|
||||||
@ -116,7 +125,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t subscribeForPeriodicPacket(sid_t sid, bool enableReporting,
|
ReturnValue_t subscribeForPeriodicPacket(sid_t sid, bool enableReporting,
|
||||||
float collectionInterval, bool isDiagnostics,
|
float collectionInterval, bool isDiagnostics,
|
||||||
object_id_t packetDestination = defaultHkDestination);
|
object_id_t packetDestination = defaultHkDestination) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Subscribe for the generation of packets if the dataset
|
* @brief Subscribe for the generation of packets if the dataset
|
||||||
@ -130,7 +139,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t subscribeForUpdatePackets(sid_t sid, bool reportingEnabled,
|
ReturnValue_t subscribeForUpdatePackets(sid_t sid, bool reportingEnabled,
|
||||||
bool isDiagnostics,
|
bool isDiagnostics,
|
||||||
object_id_t packetDestination = defaultHkDestination);
|
object_id_t packetDestination = defaultHkDestination) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Subscribe for a notification message which will be sent
|
* @brief Subscribe for a notification message which will be sent
|
||||||
@ -149,7 +158,7 @@ public:
|
|||||||
ReturnValue_t subscribeForSetUpdateMessages(const uint32_t setId,
|
ReturnValue_t subscribeForSetUpdateMessages(const uint32_t setId,
|
||||||
object_id_t destinationObject,
|
object_id_t destinationObject,
|
||||||
MessageQueueId_t targetQueueId,
|
MessageQueueId_t targetQueueId,
|
||||||
bool generateSnapshot);
|
bool generateSnapshot) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Subscribe for an notification message which will be sent if a
|
* @brief Subscribe for an notification message which will be sent if a
|
||||||
@ -168,7 +177,9 @@ public:
|
|||||||
ReturnValue_t subscribeForVariableUpdateMessages(const lp_id_t localPoolId,
|
ReturnValue_t subscribeForVariableUpdateMessages(const lp_id_t localPoolId,
|
||||||
object_id_t destinationObject,
|
object_id_t destinationObject,
|
||||||
MessageQueueId_t targetQueueId,
|
MessageQueueId_t targetQueueId,
|
||||||
bool generateSnapshot);
|
bool generateSnapshot) override;
|
||||||
|
|
||||||
|
MutexIF* getLocalPoolMutex() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-Diagnostics packets usually have a lower minimum sampling frequency
|
* Non-Diagnostics packets usually have a lower minimum sampling frequency
|
||||||
@ -247,8 +258,18 @@ public:
|
|||||||
LocalDataPoolManager(const LocalDataPoolManager &) = delete;
|
LocalDataPoolManager(const LocalDataPoolManager &) = delete;
|
||||||
LocalDataPoolManager operator=(const LocalDataPoolManager&) = delete;
|
LocalDataPoolManager operator=(const LocalDataPoolManager&) = delete;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function can be used to clear the receivers list. This is
|
||||||
|
* intended for test functions and not for regular operations, because
|
||||||
|
* the insertion operations allocate dynamically.
|
||||||
|
*/
|
||||||
|
void clearReceiversList();
|
||||||
|
|
||||||
|
object_id_t getCreatorObjectId() const;
|
||||||
|
|
||||||
|
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
||||||
private:
|
private:
|
||||||
LocalDataPool localPoolMap;
|
localpool::DataPool localPoolMap;
|
||||||
//! Every housekeeping data manager has a mutex to protect access
|
//! Every housekeeping data manager has a mutex to protect access
|
||||||
//! to it's data pool.
|
//! to it's data pool.
|
||||||
MutexIF* mutex = nullptr;
|
MutexIF* mutex = nullptr;
|
||||||
@ -367,6 +388,11 @@ private:
|
|||||||
ReturnValue_t& status);
|
ReturnValue_t& status);
|
||||||
ReturnValue_t addUpdateToStore(HousekeepingPacketUpdate& updatePacket,
|
ReturnValue_t addUpdateToStore(HousekeepingPacketUpdate& updatePacket,
|
||||||
store_address_t& storeId);
|
store_address_t& storeId);
|
||||||
|
|
||||||
|
void printWarningOrError(sif::OutputTypes outputType,
|
||||||
|
const char* functionName,
|
||||||
|
ReturnValue_t errorCode = HasReturnvaluesIF::RETURN_FAILED,
|
||||||
|
const char* errorPrint = nullptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -375,20 +401,16 @@ ReturnValue_t LocalDataPoolManager::fetchPoolEntry(lp_id_t localPoolId,
|
|||||||
PoolEntry<T> **poolEntry) {
|
PoolEntry<T> **poolEntry) {
|
||||||
auto poolIter = localPoolMap.find(localPoolId);
|
auto poolIter = localPoolMap.find(localPoolId);
|
||||||
if (poolIter == localPoolMap.end()) {
|
if (poolIter == localPoolMap.end()) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "fetchPoolEntry",
|
||||||
sif::warning << "HousekeepingManager::fechPoolEntry: Pool entry "
|
localpool::POOL_ENTRY_NOT_FOUND);
|
||||||
"not found." << std::endl;
|
return localpool::POOL_ENTRY_NOT_FOUND;
|
||||||
#endif
|
|
||||||
return HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*poolEntry = dynamic_cast< PoolEntry<T>* >(poolIter->second);
|
*poolEntry = dynamic_cast< PoolEntry<T>* >(poolIter->second);
|
||||||
if(*poolEntry == nullptr) {
|
if(*poolEntry == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "fetchPoolEntry",
|
||||||
sif::debug << "HousekeepingManager::fetchPoolEntry:"
|
localpool::POOL_ENTRY_TYPE_CONFLICT);
|
||||||
" Pool entry not found." << std::endl;
|
return localpool::POOL_ENTRY_TYPE_CONFLICT;
|
||||||
#endif
|
|
||||||
return HasLocalDataPoolIF::POOL_ENTRY_TYPE_CONFLICT;
|
|
||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
#include "LocalPoolDataSetBase.h"
|
#include "LocalPoolDataSetBase.h"
|
||||||
|
#include "HasLocalDataPoolIF.h"
|
||||||
|
#include "internal/HasLocalDpIFUserAttorney.h"
|
||||||
|
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../datapoollocal/LocalDataPoolManager.h"
|
#include "../datapoollocal/LocalDataPoolManager.h"
|
||||||
#include "../housekeeping/PeriodicHousekeepingHelper.h"
|
#include "../housekeeping/PeriodicHousekeepingHelper.h"
|
||||||
#include "../serialize/SerializeAdapter.h"
|
#include "../serialize/SerializeAdapter.h"
|
||||||
@ -15,15 +19,22 @@ LocalPoolDataSetBase::LocalPoolDataSetBase(HasLocalDataPoolIF *hkOwner,
|
|||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "LocalPoolDataSetBase::LocalPoolDataSetBase: Owner "
|
sif::error << "LocalPoolDataSetBase::LocalPoolDataSetBase: Owner "
|
||||||
<< "invalid!" << std::endl;
|
<< "invalid!" << std::endl;
|
||||||
#endif
|
#else
|
||||||
|
sif::printError("LocalPoolDataSetBase::LocalPoolDataSetBase: Owner "
|
||||||
|
"invalid!\n\r");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
AccessPoolManagerIF* accessor = HasLocalDpIFUserAttorney::getAccessorHandle(hkOwner);
|
||||||
|
|
||||||
|
if(poolManager != nullptr) {
|
||||||
|
poolManager = accessor->getHkManagerHandle();
|
||||||
|
mutexIfSingleDataCreator = accessor->getLocalPoolMutex();
|
||||||
|
}
|
||||||
|
|
||||||
this->sid.objectId = hkOwner->getObjectId();
|
this->sid.objectId = hkOwner->getObjectId();
|
||||||
this->sid.ownerSetId = setId;
|
this->sid.ownerSetId = setId;
|
||||||
|
|
||||||
mutex = MutexFactory::instance()->createMutex();
|
|
||||||
|
|
||||||
// Data creators get a periodic helper for periodic HK data generation.
|
// Data creators get a periodic helper for periodic HK data generation.
|
||||||
if(periodicHandling) {
|
if(periodicHandling) {
|
||||||
periodicHelper = new PeriodicHousekeepingHelper(this);
|
periodicHelper = new PeriodicHousekeepingHelper(this);
|
||||||
@ -34,23 +45,34 @@ LocalPoolDataSetBase::LocalPoolDataSetBase(sid_t sid,
|
|||||||
PoolVariableIF** registeredVariablesArray,
|
PoolVariableIF** registeredVariablesArray,
|
||||||
const size_t maxNumberOfVariables):
|
const size_t maxNumberOfVariables):
|
||||||
PoolDataSetBase(registeredVariablesArray, maxNumberOfVariables) {
|
PoolDataSetBase(registeredVariablesArray, maxNumberOfVariables) {
|
||||||
HasLocalDataPoolIF* hkOwner = objectManager->get<HasLocalDataPoolIF>(
|
AccessPoolManagerIF* hkOwner = objectManager->get<AccessPoolManagerIF>(
|
||||||
sid.objectId);
|
sid.objectId);
|
||||||
if(hkOwner != nullptr) {
|
if(hkOwner != nullptr) {
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
mutexIfSingleDataCreator = hkOwner->getLocalPoolMutex();
|
||||||
}
|
}
|
||||||
this->sid = sid;
|
|
||||||
|
|
||||||
mutex = MutexFactory::instance()->createMutex();
|
this->sid = sid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LocalPoolDataSetBase::LocalPoolDataSetBase(
|
||||||
|
PoolVariableIF **registeredVariablesArray,
|
||||||
|
const size_t maxNumberOfVariables, bool protectEveryReadCommitCall):
|
||||||
|
PoolDataSetBase(registeredVariablesArray, maxNumberOfVariables) {
|
||||||
|
this->setReadCommitProtectionBehaviour(protectEveryReadCommitCall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LocalPoolDataSetBase::~LocalPoolDataSetBase() {
|
LocalPoolDataSetBase::~LocalPoolDataSetBase() {
|
||||||
|
if(periodicHelper != nullptr) {
|
||||||
|
delete periodicHelper;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalPoolDataSetBase::lockDataPool(uint32_t timeoutMs) {
|
ReturnValue_t LocalPoolDataSetBase::lockDataPool(
|
||||||
if(hkManager != nullptr) {
|
MutexIF::TimeoutType timeoutType,
|
||||||
MutexIF* mutex = hkManager->getMutexHandle();
|
uint32_t timeoutMs) {
|
||||||
return mutex->lockMutex(MutexIF::TimeoutType::WAITING, timeoutMs);
|
if(mutexIfSingleDataCreator != nullptr) {
|
||||||
|
return mutexIfSingleDataCreator->lockMutex(timeoutType, timeoutMs);
|
||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -128,9 +150,8 @@ ReturnValue_t LocalPoolDataSetBase::deSerializeWithValidityBuffer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalPoolDataSetBase::unlockDataPool() {
|
ReturnValue_t LocalPoolDataSetBase::unlockDataPool() {
|
||||||
if(hkManager != nullptr) {
|
if(mutexIfSingleDataCreator != nullptr) {
|
||||||
MutexIF* mutex = hkManager->getMutexHandle();
|
return mutexIfSingleDataCreator->unlockMutex();
|
||||||
return mutex->unlockMutex();
|
|
||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -150,9 +171,12 @@ ReturnValue_t LocalPoolDataSetBase::serializeLocalPoolIds(uint8_t** buffer,
|
|||||||
size, maxSize, streamEndianness);
|
size, maxSize, streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << "LocalDataSet::serializeLocalPoolIds: Serialization"
|
sif::warning << "LocalPoolDataSetBase::serializeLocalPoolIds: "
|
||||||
" error!" << std::endl;
|
<< "Serialization error!" << std::endl;
|
||||||
#endif
|
#else
|
||||||
|
sif::printWarning("LocalPoolDataSetBase::serializeLocalPoolIds: "
|
||||||
|
"Serialization error!\n\r");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -211,8 +235,11 @@ ReturnValue_t LocalPoolDataSetBase::serialize(uint8_t **buffer, size_t *size,
|
|||||||
void LocalPoolDataSetBase::bitSetter(uint8_t* byte, uint8_t position) const {
|
void LocalPoolDataSetBase::bitSetter(uint8_t* byte, uint8_t position) const {
|
||||||
if(position > 7) {
|
if(position > 7) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::debug << "Pool Raw Access: Bit setting invalid position"
|
sif::warning << "LocalPoolDataSetBase::bitSetter: Invalid position!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("LocalPoolDataSetBase::bitSetter: "
|
||||||
|
"Invalid position!\n\r");
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -244,14 +271,10 @@ void LocalPoolDataSetBase::initializePeriodicHelper(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LocalPoolDataSetBase::setChanged(bool changed) {
|
void LocalPoolDataSetBase::setChanged(bool changed) {
|
||||||
// TODO: Make this configurable?
|
|
||||||
MutexHelper(mutex, MutexIF::TimeoutType::WAITING, 20);
|
|
||||||
this->changed = changed;
|
this->changed = changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LocalPoolDataSetBase::hasChanged() const {
|
bool LocalPoolDataSetBase::hasChanged() const {
|
||||||
// TODO: Make this configurable?
|
|
||||||
MutexHelper(mutex, MutexIF::TimeoutType::WAITING, 20);
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,12 +296,10 @@ bool LocalPoolDataSetBase::bitGetter(const uint8_t* byte,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool LocalPoolDataSetBase::isValid() const {
|
bool LocalPoolDataSetBase::isValid() const {
|
||||||
MutexHelper(mutex, MutexIF::TimeoutType::WAITING, 5);
|
|
||||||
return this->valid;
|
return this->valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalPoolDataSetBase::setValidity(bool valid, bool setEntriesRecursively) {
|
void LocalPoolDataSetBase::setValidity(bool valid, bool setEntriesRecursively) {
|
||||||
MutexHelper(mutex, MutexIF::TimeoutType::WAITING, 5);
|
|
||||||
if(setEntriesRecursively) {
|
if(setEntriesRecursively) {
|
||||||
for(size_t idx = 0; idx < this->getFillCount(); idx++) {
|
for(size_t idx = 0; idx < this->getFillCount(); idx++) {
|
||||||
registeredVariables[idx] -> setValid(valid);
|
registeredVariables[idx] -> setValid(valid);
|
||||||
@ -287,8 +308,9 @@ void LocalPoolDataSetBase::setValidity(bool valid, bool setEntriesRecursively) {
|
|||||||
this->valid = valid;
|
this->valid = valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalPoolDataSetBase::setReadCommitProtectionBehaviour(
|
object_id_t LocalPoolDataSetBase::getCreatorObjectId() {
|
||||||
bool protectEveryReadCommit, uint32_t mutexTimeout) {
|
if(poolManager != nullptr) {
|
||||||
PoolDataSetBase::setReadCommitProtectionBehaviour(protectEveryReadCommit,
|
return poolManager->getCreatorObjectId();
|
||||||
mutexTimeout);
|
}
|
||||||
|
return objects::NO_OBJECT;
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_
|
#define FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_
|
||||||
|
|
||||||
#include "HasLocalDataPoolIF.h"
|
|
||||||
#include "MarkChangedIF.h"
|
#include "MarkChangedIF.h"
|
||||||
|
#include "localPoolDefinitions.h"
|
||||||
|
|
||||||
#include "../datapool/DataSetIF.h"
|
#include "../datapool/DataSetIF.h"
|
||||||
#include "../datapool/PoolDataSetBase.h"
|
#include "../datapool/PoolDataSetBase.h"
|
||||||
#include "../serialize/SerializeIF.h"
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class LocalDataPoolManager;
|
class LocalDataPoolManager;
|
||||||
|
class HasLocalDataPoolIF;
|
||||||
class PeriodicHousekeepingHelper;
|
class PeriodicHousekeepingHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,7 +43,7 @@ class PeriodicHousekeepingHelper;
|
|||||||
*/
|
*/
|
||||||
class LocalPoolDataSetBase: public PoolDataSetBase,
|
class LocalPoolDataSetBase: public PoolDataSetBase,
|
||||||
public MarkChangedIF {
|
public MarkChangedIF {
|
||||||
friend class LocalDataPoolManager;
|
friend class LocalPoolDataSetAttorney;
|
||||||
friend class PeriodicHousekeepingHelper;
|
friend class PeriodicHousekeepingHelper;
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -57,8 +57,11 @@ public:
|
|||||||
const size_t maxNumberOfVariables, bool periodicHandling = true);
|
const size_t maxNumberOfVariables, bool periodicHandling = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Constructor for users of local pool data.
|
* @brief Constructor for users of the local pool data, which need
|
||||||
|
* to access data created by one (!) HK manager.
|
||||||
* @details
|
* @details
|
||||||
|
* Unlike the first constructor, no component for periodic handling
|
||||||
|
* will be initiated.
|
||||||
* @param sid Unique identifier of dataset consisting of object ID and
|
* @param sid Unique identifier of dataset consisting of object ID and
|
||||||
* set ID.
|
* set ID.
|
||||||
* @param registeredVariablesArray
|
* @param registeredVariablesArray
|
||||||
@ -67,6 +70,28 @@ public:
|
|||||||
LocalPoolDataSetBase(sid_t sid, PoolVariableIF** registeredVariablesArray,
|
LocalPoolDataSetBase(sid_t sid, PoolVariableIF** registeredVariablesArray,
|
||||||
const size_t maxNumberOfVariables);
|
const size_t maxNumberOfVariables);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Simple constructor, if the dataset is not the owner by
|
||||||
|
* a class with a HK manager.
|
||||||
|
* @details
|
||||||
|
* This constructor won't create components required for periodic handling
|
||||||
|
* and it also won't try to deduce the HK manager because no SID is
|
||||||
|
* supplied. This function should therefore be called by classes which need
|
||||||
|
* to access pool variables from different creators.
|
||||||
|
*
|
||||||
|
* If the class is intended to access pool variables from different
|
||||||
|
* creators, the third argument should be set to true. The mutex
|
||||||
|
* properties can be set with #setReadCommitProtectionBehaviour .
|
||||||
|
* @param registeredVariablesArray
|
||||||
|
* @param maxNumberOfVariables
|
||||||
|
* @param protectEveryReadCommitCall If the pool variables are created by
|
||||||
|
* multiple creators, this flag can be set to protect all read and
|
||||||
|
* commit calls separately.
|
||||||
|
*/
|
||||||
|
LocalPoolDataSetBase(PoolVariableIF** registeredVariablesArray,
|
||||||
|
const size_t maxNumberOfVariables,
|
||||||
|
bool protectEveryReadCommitCall = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The destructor automatically manages writing the valid
|
* @brief The destructor automatically manages writing the valid
|
||||||
* information of variables.
|
* information of variables.
|
||||||
@ -77,16 +102,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
~LocalPoolDataSetBase();
|
~LocalPoolDataSetBase();
|
||||||
|
|
||||||
/**
|
|
||||||
* If the data is pulled from different local data pools, every read and
|
|
||||||
* commit call should be mutex protected for thread safety.
|
|
||||||
* This can be specified with the second parameter.
|
|
||||||
* @param dataCreator
|
|
||||||
* @param protectEveryReadCommit
|
|
||||||
*/
|
|
||||||
void setReadCommitProtectionBehaviour(bool protectEveryReadCommit,
|
|
||||||
uint32_t mutexTimeout = 20);
|
|
||||||
|
|
||||||
void setValidityBufferGeneration(bool withValidityBuffer);
|
void setValidityBufferGeneration(bool withValidityBuffer);
|
||||||
|
|
||||||
sid_t getSid() const;
|
sid_t getSid() const;
|
||||||
@ -136,10 +151,11 @@ public:
|
|||||||
void setChanged(bool changed) override;
|
void setChanged(bool changed) override;
|
||||||
bool hasChanged() const override;
|
bool hasChanged() const override;
|
||||||
|
|
||||||
|
object_id_t getCreatorObjectId();
|
||||||
protected:
|
protected:
|
||||||
sid_t sid;
|
sid_t sid;
|
||||||
uint32_t mutexTimeout = 20;
|
//! This mutex is used if the data is created by one object only.
|
||||||
MutexIF* mutex = nullptr;
|
MutexIF* mutexIfSingleDataCreator = nullptr;
|
||||||
|
|
||||||
bool diagnostic = false;
|
bool diagnostic = false;
|
||||||
void setDiagnostic(bool diagnostics);
|
void setDiagnostic(bool diagnostics);
|
||||||
@ -183,7 +199,9 @@ protected:
|
|||||||
* @details
|
* @details
|
||||||
* It makes use of the lockDataPool method offered by the DataPool class.
|
* It makes use of the lockDataPool method offered by the DataPool class.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t lockDataPool(uint32_t timeoutMs) override;
|
ReturnValue_t lockDataPool(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t timeoutMs) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a small helper function to facilitate
|
* @brief This is a small helper function to facilitate
|
||||||
* unlocking the global data pool
|
* unlocking the global data pool
|
||||||
@ -192,8 +210,6 @@ protected:
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t unlockDataPool() override;
|
ReturnValue_t unlockDataPool() override;
|
||||||
|
|
||||||
LocalDataPoolManager* hkManager = nullptr;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set n-th bit of a byte, with n being the position from 0
|
* Set n-th bit of a byte, with n being the position from 0
|
||||||
* (most significant bit) to 7 (least significant bit)
|
* (most significant bit) to 7 (least significant bit)
|
||||||
@ -202,6 +218,7 @@ protected:
|
|||||||
bool bitGetter(const uint8_t* byte, uint8_t position) const;
|
bool bitGetter(const uint8_t* byte, uint8_t position) const;
|
||||||
|
|
||||||
PeriodicHousekeepingHelper* periodicHelper = nullptr;
|
PeriodicHousekeepingHelper* periodicHelper = nullptr;
|
||||||
|
LocalDataPoolManager* poolManager = nullptr;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
|
#include "LocalDataPoolManager.h"
|
||||||
#include "LocalPoolObjectBase.h"
|
#include "LocalPoolObjectBase.h"
|
||||||
|
#include "internal/HasLocalDpIFUserAttorney.h"
|
||||||
|
#include "HasLocalDataPoolIF.h"
|
||||||
|
|
||||||
LocalPoolObjectBase::LocalPoolObjectBase(lp_id_t poolId,
|
#include "../objectmanager/ObjectManagerIF.h"
|
||||||
HasLocalDataPoolIF* hkOwner, DataSetIF* dataSet,
|
|
||||||
pool_rwm_t setReadWriteMode): localPoolId(poolId),
|
LocalPoolObjectBase::LocalPoolObjectBase(lp_id_t poolId, HasLocalDataPoolIF* hkOwner,
|
||||||
readWriteMode(setReadWriteMode) {
|
DataSetIF* dataSet, pool_rwm_t setReadWriteMode):
|
||||||
|
localPoolId(poolId), readWriteMode(setReadWriteMode) {
|
||||||
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
||||||
@ -17,23 +21,24 @@ LocalPoolObjectBase::LocalPoolObjectBase(lp_id_t poolId,
|
|||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
AccessPoolManagerIF* poolManAccessor = HasLocalDpIFUserAttorney::getAccessorHandle(hkOwner);
|
||||||
|
hkManager = poolManAccessor->getHkManagerHandle();
|
||||||
|
|
||||||
if (dataSet != nullptr) {
|
if (dataSet != nullptr) {
|
||||||
dataSet->registerVariable(this);
|
dataSet->registerVariable(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalPoolObjectBase::LocalPoolObjectBase(object_id_t poolOwner, lp_id_t poolId,
|
LocalPoolObjectBase::LocalPoolObjectBase(object_id_t poolOwner, lp_id_t poolId, DataSetIF *dataSet,
|
||||||
DataSetIF *dataSet, pool_rwm_t setReadWriteMode): localPoolId(poolId),
|
pool_rwm_t setReadWriteMode):
|
||||||
readWriteMode(setReadWriteMode) {
|
localPoolId(poolId), readWriteMode(setReadWriteMode) {
|
||||||
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
||||||
<< "which is the NO_PARAMETER value!" << std::endl;
|
<< "which is the NO_PARAMETER value!" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
HasLocalDataPoolIF* hkOwner =
|
HasLocalDataPoolIF* hkOwner = objectManager->get<HasLocalDataPoolIF>(poolOwner);
|
||||||
objectManager->get<HasLocalDataPoolIF>(poolOwner);
|
|
||||||
if(hkOwner == nullptr) {
|
if(hkOwner == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "LocalPoolVariable: The supplied pool owner did not "
|
sif::error << "LocalPoolVariable: The supplied pool owner did not "
|
||||||
@ -42,7 +47,10 @@ LocalPoolObjectBase::LocalPoolObjectBase(object_id_t poolOwner, lp_id_t poolId,
|
|||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
//hkManager = hkOwner->getHkManagerHandle();
|
||||||
|
AccessPoolManagerIF* poolManAccessor = HasLocalDpIFUserAttorney::getAccessorHandle(hkOwner);
|
||||||
|
//hkManager = HasLocalDpIFUserAttorney::getHkManagerHandle(hkOwner);
|
||||||
|
hkManager = poolManAccessor->getHkManagerHandle();
|
||||||
if(dataSet != nullptr) {
|
if(dataSet != nullptr) {
|
||||||
dataSet->registerVariable(this);
|
dataSet->registerVariable(this);
|
||||||
}
|
}
|
||||||
@ -79,3 +87,42 @@ bool LocalPoolObjectBase::hasChanged() const {
|
|||||||
void LocalPoolObjectBase::setReadWriteMode(pool_rwm_t newReadWriteMode) {
|
void LocalPoolObjectBase::setReadWriteMode(pool_rwm_t newReadWriteMode) {
|
||||||
this->readWriteMode = newReadWriteMode;
|
this->readWriteMode = newReadWriteMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocalPoolObjectBase::reportReadCommitError(const char* variableType,
|
||||||
|
ReturnValue_t error, bool read, object_id_t objectId, lp_id_t lpId) {
|
||||||
|
#if FSFW_DISABLE_PRINTOUT == 0
|
||||||
|
const char* type = nullptr;
|
||||||
|
if(read) {
|
||||||
|
type = "read";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
type = "commit";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* errMsg = nullptr;
|
||||||
|
if(error == localpool::POOL_ENTRY_NOT_FOUND) {
|
||||||
|
errMsg = "Pool entry not found";
|
||||||
|
}
|
||||||
|
else if(error == localpool::POOL_ENTRY_TYPE_CONFLICT) {
|
||||||
|
errMsg = "Pool entry type conflict";
|
||||||
|
}
|
||||||
|
else if(error == PoolVariableIF::INVALID_READ_WRITE_MODE) {
|
||||||
|
errMsg = "Pool variable wrong read-write mode";
|
||||||
|
}
|
||||||
|
else if(error == PoolVariableIF::INVALID_POOL_ENTRY) {
|
||||||
|
errMsg = "Pool entry invalid";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errMsg = "Unknown error code";
|
||||||
|
}
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::warning << variableType << ": " << type << " call | " << errMsg << " | Owner: 0x"
|
||||||
|
<< std::hex << std::setw(8) << std::setfill('0') << objectId << std::dec
|
||||||
|
<< " LPID: " << lpId << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("%s: %s call | %s | Owner: 0x%08x LPID: %lu\n",
|
||||||
|
variableType, type, errMsg, objectId, lpId);
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
#endif /* FSFW_DISABLE_PRINTOUT == 0 */
|
||||||
|
}
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLOBJECTBASE_H_
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLOBJECTBASE_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_LOCALPOOLOBJECTBASE_H_
|
#define FSFW_DATAPOOLLOCAL_LOCALPOOLOBJECTBASE_H_
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/localPoolDefinitions.h>
|
||||||
#include "MarkChangedIF.h"
|
#include "MarkChangedIF.h"
|
||||||
#include "../datapoollocal/LocalDataPoolManager.h"
|
#include "../objectmanager/SystemObjectIF.h"
|
||||||
#include "../datapool/PoolVariableIF.h"
|
#include "../datapool/PoolVariableIF.h"
|
||||||
|
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||||
|
|
||||||
|
class LocalDataPoolManager;
|
||||||
|
class DataSetIF;
|
||||||
|
class HasLocalDataPoolIF;
|
||||||
|
|
||||||
class LocalPoolObjectBase: public PoolVariableIF,
|
class LocalPoolObjectBase: public PoolVariableIF,
|
||||||
public HasReturnvaluesIF,
|
public HasReturnvaluesIF,
|
||||||
@ -54,8 +59,10 @@ protected:
|
|||||||
ReadWriteMode_t readWriteMode = pool_rwm_t::VAR_READ_WRITE;
|
ReadWriteMode_t readWriteMode = pool_rwm_t::VAR_READ_WRITE;
|
||||||
|
|
||||||
//! @brief Pointer to the class which manages the HK pool.
|
//! @brief Pointer to the class which manages the HK pool.
|
||||||
LocalDataPoolManager* hkManager;
|
LocalDataPoolManager* hkManager = nullptr;
|
||||||
|
|
||||||
|
void reportReadCommitError(const char* variableType,
|
||||||
|
ReturnValue_t error, bool read, object_id_t objectId, lp_id_t lpId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,9 +4,12 @@
|
|||||||
#include "LocalPoolObjectBase.h"
|
#include "LocalPoolObjectBase.h"
|
||||||
#include "HasLocalDataPoolIF.h"
|
#include "HasLocalDataPoolIF.h"
|
||||||
#include "LocalDataPoolManager.h"
|
#include "LocalDataPoolManager.h"
|
||||||
|
#include "AccessLocalPoolF.h"
|
||||||
|
#include "internal/LocalDpManagerAttorney.h"
|
||||||
|
|
||||||
#include "../datapool/PoolVariableIF.h"
|
#include "../datapool/PoolVariableIF.h"
|
||||||
#include "../datapool/DataSetIF.h"
|
#include "../datapool/DataSetIF.h"
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../objectmanager/ObjectManagerIF.h"
|
#include "../objectmanager/ObjectManagerIF.h"
|
||||||
#include "../serialize/SerializeAdapter.h"
|
#include "../serialize/SerializeAdapter.h"
|
||||||
|
|
||||||
@ -105,7 +108,9 @@ public:
|
|||||||
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ReturnValue_t read(dur_millis_t lockTimeout = MutexIF::BLOCKING) override;
|
ReturnValue_t read(MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) override;
|
||||||
/**
|
/**
|
||||||
* @brief The commit call copies the array values back to the data pool.
|
* @brief The commit call copies the array values back to the data pool.
|
||||||
* @details
|
* @details
|
||||||
@ -115,8 +120,21 @@ public:
|
|||||||
* It is recommended to use DataSets to read and commit multiple variables
|
* It is recommended to use DataSets to read and commit multiple variables
|
||||||
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t commit(dur_millis_t lockTimeout = MutexIF::BLOCKING) override;
|
ReturnValue_t commit(MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This commit function can be used to set the pool variable valid
|
||||||
|
* as well.
|
||||||
|
* @param setValid
|
||||||
|
* @param timeoutType
|
||||||
|
* @param timeoutMs
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ReturnValue_t commit(bool setValid, MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20);
|
||||||
|
|
||||||
LocalPoolVariable<T> &operator=(const T& newValue);
|
LocalPoolVariable<T> &operator=(const T& newValue);
|
||||||
LocalPoolVariable<T> &operator=(const LocalPoolVariable<T>& newPoolVariable);
|
LocalPoolVariable<T> &operator=(const LocalPoolVariable<T>& newPoolVariable);
|
||||||
@ -163,8 +181,6 @@ protected:
|
|||||||
friend std::ostream& operator<< (std::ostream &out,
|
friend std::ostream& operator<< (std::ostream &out,
|
||||||
const LocalPoolVariable<U> &var);
|
const LocalPoolVariable<U> &var);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "LocalPoolVariable.tpp"
|
#include "LocalPoolVariable.tpp"
|
||||||
|
@ -24,73 +24,91 @@ inline LocalPoolVariable<T>::LocalPoolVariable(gp_id_t globalPoolId,
|
|||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVariable<T>::read(dur_millis_t lockTimeout) {
|
inline ReturnValue_t LocalPoolVariable<T>::read(
|
||||||
MutexHelper(hkManager->getMutexHandle(), MutexIF::TimeoutType::WAITING,
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
lockTimeout);
|
MutexHelper(LocalDpManagerAttorney::getMutexHandle(*hkManager), timeoutType, timeoutMs);
|
||||||
return readWithoutLock();
|
return readWithoutLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVariable<T>::readWithoutLock() {
|
inline ReturnValue_t LocalPoolVariable<T>::readWithoutLock() {
|
||||||
if(readWriteMode == pool_rwm_t::VAR_WRITE) {
|
if(readWriteMode == pool_rwm_t::VAR_WRITE) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::debug << "LocalPoolVar: Invalid read write "
|
reportReadCommitError("LocalPoolVector",
|
||||||
"mode for read() call." << std::endl;
|
PoolVariableIF::INVALID_READ_WRITE_MODE, true, targetObjectId,
|
||||||
#endif
|
localPoolId);
|
||||||
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PoolEntry<T>* poolEntry = nullptr;
|
PoolEntry<T>* poolEntry = nullptr;
|
||||||
ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
ReturnValue_t result = LocalDpManagerAttorney::fetchPoolEntry(*hkManager, localPoolId,
|
||||||
if(result != RETURN_OK or poolEntry == nullptr) {
|
&poolEntry);
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
//ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
||||||
sif::error << "PoolVector: Read of local pool variable of object "
|
if(result != RETURN_OK) {
|
||||||
<< std::hex << std::setw(8) << std::setfill('0')
|
object_id_t ownerObjectId = hkManager->getCreatorObjectId();
|
||||||
<< hkManager->getOwner() << " and lp ID " << localPoolId
|
reportReadCommitError("LocalPoolVariable", result,
|
||||||
<< std::dec << " failed." << std::setfill(' ') << std::endl;
|
false, ownerObjectId, localPoolId);
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
this->value = *(poolEntry->address);
|
|
||||||
this->valid = poolEntry->valid;
|
// Actually this should never happen..
|
||||||
|
// if(poolEntry->address == nullptr) {
|
||||||
|
// result = PoolVariableIF::INVALID_POOL_ENTRY;
|
||||||
|
// object_id_t ownerObjectId = hkManager->getOwner()->getObjectId();
|
||||||
|
// reportReadCommitError("LocalPoolVariable", result,
|
||||||
|
// false, ownerObjectId, localPoolId);
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
|
||||||
|
this->value = *(poolEntry->getDataPtr());
|
||||||
|
this->valid = poolEntry->getValid();
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVariable<T>::commit(dur_millis_t lockTimeout) {
|
inline ReturnValue_t LocalPoolVariable<T>::commit(bool setValid,
|
||||||
MutexHelper(hkManager->getMutexHandle(), MutexIF::TimeoutType::WAITING,
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
lockTimeout);
|
this->setValid(setValid);
|
||||||
|
return commit(timeoutType, timeoutMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline ReturnValue_t LocalPoolVariable<T>::commit(
|
||||||
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
|
MutexHelper(LocalDpManagerAttorney::getMutexHandle(*hkManager), timeoutType, timeoutMs);
|
||||||
return commitWithoutLock();
|
return commitWithoutLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVariable<T>::commitWithoutLock() {
|
inline ReturnValue_t LocalPoolVariable<T>::commitWithoutLock() {
|
||||||
if(readWriteMode == pool_rwm_t::VAR_READ) {
|
if(readWriteMode == pool_rwm_t::VAR_READ) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::debug << "LocalPoolVariable: Invalid read write "
|
reportReadCommitError("LocalPoolVector",
|
||||||
"mode for commit() call." << std::endl;
|
PoolVariableIF::INVALID_READ_WRITE_MODE, false, targetObjectId,
|
||||||
#endif
|
localPoolId);
|
||||||
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PoolEntry<T>* poolEntry = nullptr;
|
PoolEntry<T>* poolEntry = nullptr;
|
||||||
ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
//ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
||||||
|
ReturnValue_t result = LocalDpManagerAttorney::fetchPoolEntry(*hkManager, localPoolId,
|
||||||
|
&poolEntry);
|
||||||
if(result != RETURN_OK) {
|
if(result != RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t ownerObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::error << "PoolVector: Read of local pool variable of object "
|
reportReadCommitError("LocalPoolVariable", result,
|
||||||
"0x" << std::hex << std::setw(8) << std::setfill('0') <<
|
false, ownerObjectId, localPoolId);
|
||||||
hkManager->getOwner() << " and lp ID 0x" << localPoolId <<
|
|
||||||
std::dec << " failed.\n" << std::flush;
|
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
*(poolEntry->address) = this->value;
|
|
||||||
poolEntry->valid = this->valid;
|
*(poolEntry->getDataPtr()) = this->value;
|
||||||
|
poolEntry->setValid(this->valid);
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVariable<T>::serialize(uint8_t** buffer, size_t* size,
|
inline ReturnValue_t LocalPoolVariable<T>::serialize(uint8_t** buffer,
|
||||||
const size_t max_size, SerializeIF::Endianness streamEndianness) const {
|
size_t* size, const size_t max_size,
|
||||||
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
return SerializeAdapter::serialize(&value,
|
return SerializeAdapter::serialize(&value,
|
||||||
buffer, size ,max_size, streamEndianness);
|
buffer, size ,max_size, streamEndianness);
|
||||||
}
|
}
|
||||||
@ -121,7 +139,8 @@ inline LocalPoolVariable<T>::operator T() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline LocalPoolVariable<T> & LocalPoolVariable<T>::operator=(const T& newValue) {
|
inline LocalPoolVariable<T> & LocalPoolVariable<T>::operator=(
|
||||||
|
const T& newValue) {
|
||||||
value = newValue;
|
value = newValue;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -134,7 +153,8 @@ inline LocalPoolVariable<T>& LocalPoolVariable<T>::operator =(
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool LocalPoolVariable<T>::operator ==(const LocalPoolVariable<T> &other) const {
|
inline bool LocalPoolVariable<T>::operator ==(
|
||||||
|
const LocalPoolVariable<T> &other) const {
|
||||||
return this->value == other.value;
|
return this->value == other.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +165,8 @@ inline bool LocalPoolVariable<T>::operator ==(const T &other) const {
|
|||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool LocalPoolVariable<T>::operator !=(const LocalPoolVariable<T> &other) const {
|
inline bool LocalPoolVariable<T>::operator !=(
|
||||||
|
const LocalPoolVariable<T> &other) const {
|
||||||
return not (*this == other);
|
return not (*this == other);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +177,8 @@ inline bool LocalPoolVariable<T>::operator !=(const T &other) const {
|
|||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool LocalPoolVariable<T>::operator <(const LocalPoolVariable<T> &other) const {
|
inline bool LocalPoolVariable<T>::operator <(
|
||||||
|
const LocalPoolVariable<T> &other) const {
|
||||||
return this->value < other.value;
|
return this->value < other.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +189,8 @@ inline bool LocalPoolVariable<T>::operator <(const T &other) const {
|
|||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool LocalPoolVariable<T>::operator >(const LocalPoolVariable<T> &other) const {
|
inline bool LocalPoolVariable<T>::operator >(
|
||||||
|
const LocalPoolVariable<T> &other) const {
|
||||||
return not (*this < other);
|
return not (*this < other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,12 +2,14 @@
|
|||||||
#define FSFW_DATAPOOLLOCAL_LOCALPOOLVECTOR_H_
|
#define FSFW_DATAPOOLLOCAL_LOCALPOOLVECTOR_H_
|
||||||
|
|
||||||
#include "LocalPoolObjectBase.h"
|
#include "LocalPoolObjectBase.h"
|
||||||
|
#include "internal/LocalDpManagerAttorney.h"
|
||||||
|
|
||||||
#include "../datapool/DataSetIF.h"
|
#include "../datapool/DataSetIF.h"
|
||||||
#include "../datapool/PoolEntry.h"
|
#include "../datapool/PoolEntry.h"
|
||||||
#include "../datapool/PoolVariableIF.h"
|
#include "../datapool/PoolVariableIF.h"
|
||||||
#include "../datapoollocal/LocalDataPoolManager.h"
|
#include "../datapoollocal/LocalDataPoolManager.h"
|
||||||
#include "../serialize/SerializeAdapter.h"
|
#include "../serialize/SerializeAdapter.h"
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,8 +102,8 @@ public:
|
|||||||
return vectorSize;
|
return vectorSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
T& operator [](int i);
|
T& operator [](size_t i);
|
||||||
const T &operator [](int i) const;
|
const T &operator [](size_t i) const;
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t maxSize,
|
const size_t maxSize,
|
||||||
@ -123,7 +125,10 @@ public:
|
|||||||
* It is recommended to use DataSets to read and commit multiple variables
|
* It is recommended to use DataSets to read and commit multiple variables
|
||||||
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t read(uint32_t lockTimeout = MutexIF::BLOCKING) override;
|
ReturnValue_t read(MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The commit call copies the array values back to the data pool.
|
* @brief The commit call copies the array values back to the data pool.
|
||||||
* @details
|
* @details
|
||||||
@ -133,7 +138,17 @@ public:
|
|||||||
* It is recommended to use DataSets to read and commit multiple variables
|
* It is recommended to use DataSets to read and commit multiple variables
|
||||||
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
* at once to avoid the overhead of unnecessary lock und unlock operations.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t commit(uint32_t lockTimeout = MutexIF::BLOCKING) override;
|
ReturnValue_t commit(MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This commit call also sets the validity of the pool entry.
|
||||||
|
* @details
|
||||||
|
*/
|
||||||
|
ReturnValue_t commit(bool valid, MutexIF::TimeoutType timeoutType =
|
||||||
|
MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t timeoutMs = 20);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
@ -157,12 +172,12 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
// std::ostream is the type for object std::cout
|
// std::ostream is the type for object std::cout
|
||||||
template <typename U, uint16_t otherSize>
|
template <typename U, uint16_t otherSize>
|
||||||
friend std::ostream& operator<< (std::ostream &out,
|
friend std::ostream& operator<< (std::ostream &out,
|
||||||
const LocalPoolVector<U, otherSize> &var);
|
const LocalPoolVector<U, otherSize> &var);
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,98 +24,106 @@ inline LocalPoolVector<T, vectorSize>::LocalPoolVector(gp_id_t globalPoolId,
|
|||||||
dataSet, setReadWriteMode) {}
|
dataSet, setReadWriteMode) {}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::read(uint32_t lockTimeout) {
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::read(
|
||||||
MutexHelper(hkManager->getMutexHandle(), MutexIF::TimeoutType::WAITING,
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
lockTimeout);
|
MutexHelper(LocalDpManagerAttorney::getMutexHandle(*hkManager), timeoutType, timeoutMs);
|
||||||
return readWithoutLock();
|
return readWithoutLock();
|
||||||
}
|
}
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::readWithoutLock() {
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::readWithoutLock() {
|
||||||
if(readWriteMode == pool_rwm_t::VAR_WRITE) {
|
if(readWriteMode == pool_rwm_t::VAR_WRITE) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::debug << "LocalPoolVar: Invalid read write "
|
reportReadCommitError("LocalPoolVector",
|
||||||
"mode for read() call." << std::endl;
|
PoolVariableIF::INVALID_READ_WRITE_MODE, true, targetObjectId,
|
||||||
#endif
|
localPoolId);
|
||||||
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PoolEntry<T>* poolEntry = nullptr;
|
PoolEntry<T>* poolEntry = nullptr;
|
||||||
ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
ReturnValue_t result = LocalDpManagerAttorney::fetchPoolEntry(*hkManager, localPoolId,
|
||||||
|
&poolEntry);
|
||||||
memset(this->value, 0, vectorSize * sizeof(T));
|
memset(this->value, 0, vectorSize * sizeof(T));
|
||||||
|
|
||||||
if(result != RETURN_OK) {
|
if(result != RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::error << "PoolVector: Read of local pool variable of object "
|
reportReadCommitError("LocalPoolVector", result, true, targetObjectId,
|
||||||
"0x" << std::hex << std::setw(8) << std::setfill('0') <<
|
localPoolId);
|
||||||
hkManager->getOwner() << "and lp ID 0x" << localPoolId <<
|
|
||||||
std::dec << " failed." << std::endl;
|
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
std::memcpy(this->value, poolEntry->address, poolEntry->getByteSize());
|
std::memcpy(this->value, poolEntry->getDataPtr(), poolEntry->getByteSize());
|
||||||
this->valid = poolEntry->valid;
|
this->valid = poolEntry->getValid();
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, uint16_t vectorSize>
|
||||||
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::commit(bool valid,
|
||||||
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
|
this->setValid(valid);
|
||||||
|
return commit(timeoutType, timeoutMs);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::commit(
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::commit(
|
||||||
uint32_t lockTimeout) {
|
MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
MutexHelper(hkManager->getMutexHandle(), MutexIF::TimeoutType::WAITING,
|
MutexHelper(LocalDpManagerAttorney::getMutexHandle(*hkManager), timeoutType, timeoutMs);
|
||||||
lockTimeout);
|
|
||||||
return commitWithoutLock();
|
return commitWithoutLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::commitWithoutLock() {
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::commitWithoutLock() {
|
||||||
if(readWriteMode == pool_rwm_t::VAR_READ) {
|
if(readWriteMode == pool_rwm_t::VAR_READ) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::debug << "LocalPoolVar: Invalid read write "
|
reportReadCommitError("LocalPoolVector",
|
||||||
"mode for commit() call." << std::endl;
|
PoolVariableIF::INVALID_READ_WRITE_MODE, false, targetObjectId,
|
||||||
#endif
|
localPoolId);
|
||||||
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
return PoolVariableIF::INVALID_READ_WRITE_MODE;
|
||||||
}
|
}
|
||||||
PoolEntry<T>* poolEntry = nullptr;
|
PoolEntry<T>* poolEntry = nullptr;
|
||||||
ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, &poolEntry);
|
ReturnValue_t result = LocalDpManagerAttorney::fetchPoolEntry(*hkManager, localPoolId,
|
||||||
|
&poolEntry);
|
||||||
if(result != RETURN_OK) {
|
if(result != RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
object_id_t targetObjectId = hkManager->getCreatorObjectId();
|
||||||
sif::error << "PoolVector: Read of local pool variable of object "
|
reportReadCommitError("LocalPoolVector", result, false, targetObjectId,
|
||||||
"0x" << std::hex << std::setw(8) << std::setfill('0') <<
|
localPoolId);
|
||||||
hkManager->getOwner() << " and lp ID 0x" << localPoolId <<
|
|
||||||
std::dec << " failed.\n" << std::flush;
|
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
std::memcpy(poolEntry->address, this->value, poolEntry->getByteSize());
|
std::memcpy(poolEntry->getDataPtr(), this->value, poolEntry->getByteSize());
|
||||||
poolEntry->valid = this->valid;
|
poolEntry->setValid(this->valid);
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline T& LocalPoolVector<T, vectorSize>::operator [](int i) {
|
inline T& LocalPoolVector<T, vectorSize>::operator [](size_t i) {
|
||||||
if(i <= vectorSize) {
|
if(i < vectorSize) {
|
||||||
return value[i];
|
return value[i];
|
||||||
}
|
}
|
||||||
// If this happens, I have to set some value. I consider this
|
// If this happens, I have to set some value. I consider this
|
||||||
// a configuration error, but I wont exit here.
|
// a configuration error, but I wont exit here.
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "LocalPoolVector: Invalid index. Setting or returning"
|
sif::warning << "LocalPoolVector: Invalid index. Setting or returning"
|
||||||
" last value!" << std::endl;
|
" last value!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("LocalPoolVector: Invalid index. Setting or returning"
|
||||||
|
" last value!\n");
|
||||||
#endif
|
#endif
|
||||||
return value[i];
|
return value[vectorSize - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline const T& LocalPoolVector<T, vectorSize>::operator [](int i) const {
|
inline const T& LocalPoolVector<T, vectorSize>::operator [](size_t i) const {
|
||||||
if(i <= vectorSize) {
|
if(i < vectorSize) {
|
||||||
return value[i];
|
return value[i];
|
||||||
}
|
}
|
||||||
// If this happens, I have to set some value. I consider this
|
// If this happens, I have to set some value. I consider this
|
||||||
// a configuration error, but I wont exit here.
|
// a configuration error, but I wont exit here.
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "LocalPoolVector: Invalid index. Setting or returning"
|
sif::warning << "LocalPoolVector: Invalid index. Setting or returning"
|
||||||
" last value!" << std::endl;
|
" last value!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("LocalPoolVector: Invalid index. Setting or returning"
|
||||||
|
" last value!\n");
|
||||||
#endif
|
#endif
|
||||||
return value[i];
|
return value[vectorSize - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
@ -153,6 +161,7 @@ inline ReturnValue_t LocalPoolVector<T, vectorSize>::deSerialize(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline std::ostream& operator<< (std::ostream &out,
|
inline std::ostream& operator<< (std::ostream &out,
|
||||||
const LocalPoolVector<T, vectorSize> &var) {
|
const LocalPoolVector<T, vectorSize> &var) {
|
||||||
@ -166,5 +175,6 @@ inline std::ostream& operator<< (std::ostream &out,
|
|||||||
out << "]";
|
out << "]";
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* FSFW_DATAPOOLLOCAL_LOCALPOOLVECTOR_TPP_ */
|
#endif /* FSFW_DATAPOOLLOCAL_LOCALPOOLVECTOR_TPP_ */
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_POOLREADHELPER_H_
|
#ifndef FSFW_DATAPOOLLOCAL_POOLREADHELPER_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_POOLREADHELPER_H_
|
#define FSFW_DATAPOOLLOCAL_POOLREADHELPER_H_
|
||||||
|
|
||||||
#include <fsfw/datapoollocal/LocalPoolDataSetBase.h>
|
#include "LocalPoolDataSetBase.h"
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include <FSFWConfig.h>
|
#include <FSFWConfig.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -9,13 +10,17 @@
|
|||||||
*/
|
*/
|
||||||
class PoolReadHelper {
|
class PoolReadHelper {
|
||||||
public:
|
public:
|
||||||
PoolReadHelper(ReadCommitIF* readObject, uint32_t mutexTimeout = 20):
|
PoolReadHelper(ReadCommitIF* readObject,
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
|
uint32_t mutexTimeout = 20):
|
||||||
readObject(readObject), mutexTimeout(mutexTimeout) {
|
readObject(readObject), mutexTimeout(mutexTimeout) {
|
||||||
if(readObject != nullptr) {
|
if(readObject != nullptr) {
|
||||||
readResult = readObject->read(mutexTimeout);
|
readResult = readObject->read(timeoutType, mutexTimeout);
|
||||||
#if FSFW_PRINT_VERBOSITY_LEVEL == 1
|
#if FSFW_VERBOSE_LEVEL == 1
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "PoolReadHelper: Read failed!" << std::endl;
|
sif::error << "PoolReadHelper: Read failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("PoolReadHelper: Read failed!\n");
|
||||||
#endif /* FSFW_PRINT_VERBOSITY_LEVEL == 1 */
|
#endif /* FSFW_PRINT_VERBOSITY_LEVEL == 1 */
|
||||||
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
}
|
}
|
||||||
@ -27,7 +32,7 @@ public:
|
|||||||
|
|
||||||
~PoolReadHelper() {
|
~PoolReadHelper() {
|
||||||
if(readObject != nullptr) {
|
if(readObject != nullptr) {
|
||||||
readObject->commit(mutexTimeout);
|
readObject->commit(timeoutType, mutexTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -35,6 +40,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
ReadCommitIF* readObject = nullptr;
|
ReadCommitIF* readObject = nullptr;
|
||||||
ReturnValue_t readResult = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t readResult = HasReturnvaluesIF::RETURN_OK;
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING;
|
||||||
uint32_t mutexTimeout = 20;
|
uint32_t mutexTimeout = 20;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
84
datapoollocal/ProvidesDataPoolSubscriptionIF.h
Normal file
84
datapoollocal/ProvidesDataPoolSubscriptionIF.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_PROVIDESDATAPOOLSUBSCRIPTION_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_PROVIDESDATAPOOLSUBSCRIPTION_H_
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/localPoolDefinitions.h>
|
||||||
|
#include <fsfw/ipc/messageQueueDefinitions.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ProvidesDataPoolSubscriptionIF {
|
||||||
|
public:
|
||||||
|
virtual ~ProvidesDataPoolSubscriptionIF(){};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Subscribe for the generation of periodic packets.
|
||||||
|
* @details
|
||||||
|
* This subscription mechanism will generally be used by the data creator
|
||||||
|
* to generate housekeeping packets which are downlinked directly.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ReturnValue_t subscribeForPeriodicPacket(sid_t sid,
|
||||||
|
bool enableReporting,
|
||||||
|
float collectionInterval, bool isDiagnostics,
|
||||||
|
object_id_t packetDestination) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Subscribe for the generation of packets if the dataset
|
||||||
|
* is marked as changed.
|
||||||
|
* @details
|
||||||
|
* This subscription mechanism will generally be used by the data creator.
|
||||||
|
* @param sid
|
||||||
|
* @param isDiagnostics
|
||||||
|
* @param packetDestination
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ReturnValue_t subscribeForUpdatePackets(sid_t sid,
|
||||||
|
bool reportingEnabled,
|
||||||
|
bool isDiagnostics,
|
||||||
|
object_id_t packetDestination) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Subscribe for a notification message which will be sent
|
||||||
|
* if a dataset has changed.
|
||||||
|
* @details
|
||||||
|
* This subscription mechanism will generally be used internally by
|
||||||
|
* other software components.
|
||||||
|
* @param setId Set ID of the set to receive update messages from.
|
||||||
|
* @param destinationObject
|
||||||
|
* @param targetQueueId
|
||||||
|
* @param generateSnapshot If this is set to true, a copy of the current
|
||||||
|
* data with a timestamp will be generated and sent via message.
|
||||||
|
* Otherwise, only an notification message is sent.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ReturnValue_t subscribeForSetUpdateMessages(const uint32_t setId,
|
||||||
|
object_id_t destinationObject,
|
||||||
|
MessageQueueId_t targetQueueId,
|
||||||
|
bool generateSnapshot) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Subscribe for an notification message which will be sent if a
|
||||||
|
* pool variable has changed.
|
||||||
|
* @details
|
||||||
|
* This subscription mechanism will generally be used internally by
|
||||||
|
* other software components.
|
||||||
|
* @param localPoolId Pool ID of the pool variable
|
||||||
|
* @param destinationObject
|
||||||
|
* @param targetQueueId
|
||||||
|
* @param generateSnapshot If this is set to true, a copy of the current
|
||||||
|
* data with a timestamp will be generated and sent via message.
|
||||||
|
* Otherwise, only an notification message is sent.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ReturnValue_t subscribeForVariableUpdateMessages(
|
||||||
|
const lp_id_t localPoolId,
|
||||||
|
object_id_t destinationObject,
|
||||||
|
MessageQueueId_t targetQueueId,
|
||||||
|
bool generateSnapshot) = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_PROVIDESDATAPOOLSUBSCRIPTION_H_ */
|
@ -6,6 +6,13 @@
|
|||||||
#include "../objectmanager/SystemObject.h"
|
#include "../objectmanager/SystemObject.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This local dataset variation can be used if the dataset is used concurrently across
|
||||||
|
* multiple threads. It provides a lock in addition to all other functionalities provided
|
||||||
|
* by the LocalPoolDataSetBase class.
|
||||||
|
*
|
||||||
|
* TODO: override and protect read, commit and some other calls used by pool manager.
|
||||||
|
*/
|
||||||
class SharedLocalDataSet: public SystemObject,
|
class SharedLocalDataSet: public SystemObject,
|
||||||
public LocalPoolDataSetBase,
|
public LocalPoolDataSetBase,
|
||||||
public SharedDataSetIF {
|
public SharedDataSetIF {
|
||||||
|
5
datapoollocal/internal/CMakeLists.txt
Normal file
5
datapoollocal/internal/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target_sources(${LIB_FSFW_NAME}
|
||||||
|
PRIVATE
|
||||||
|
HasLocalDpIFUserAttorney.cpp
|
||||||
|
HasLocalDpIFManagerAttorney.cpp
|
||||||
|
)
|
18
datapoollocal/internal/HasLocalDpIFManagerAttorney.cpp
Normal file
18
datapoollocal/internal/HasLocalDpIFManagerAttorney.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include "HasLocalDpIFManagerAttorney.h"
|
||||||
|
#include "../LocalPoolObjectBase.h"
|
||||||
|
#include "../LocalPoolDataSetBase.h"
|
||||||
|
#include "../HasLocalDataPoolIF.h"
|
||||||
|
|
||||||
|
LocalPoolDataSetBase* HasLocalDpIFManagerAttorney::getDataSetHandle(HasLocalDataPoolIF* clientIF,
|
||||||
|
sid_t sid) {
|
||||||
|
return clientIF->getDataSetHandle(sid);
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalPoolObjectBase* HasLocalDpIFManagerAttorney::getPoolObjectHandle(HasLocalDataPoolIF* clientIF,
|
||||||
|
lp_id_t localPoolId) {
|
||||||
|
return clientIF->getPoolObjectHandle(localPoolId);
|
||||||
|
}
|
||||||
|
|
||||||
|
object_id_t HasLocalDpIFManagerAttorney::getObjectId(HasLocalDataPoolIF* clientIF) {
|
||||||
|
return clientIF->getObjectId();
|
||||||
|
}
|
22
datapoollocal/internal/HasLocalDpIFManagerAttorney.h
Normal file
22
datapoollocal/internal/HasLocalDpIFManagerAttorney.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_HASLOCALDPIFMANAGERATTORNEY_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_HASLOCALDPIFMANAGERATTORNEY_H_
|
||||||
|
|
||||||
|
#include "../localPoolDefinitions.h"
|
||||||
|
|
||||||
|
class HasLocalDataPoolIF;
|
||||||
|
class LocalPoolDataSetBase;
|
||||||
|
class LocalPoolObjectBase;
|
||||||
|
|
||||||
|
class HasLocalDpIFManagerAttorney {
|
||||||
|
|
||||||
|
static LocalPoolDataSetBase* getDataSetHandle(HasLocalDataPoolIF* clientIF, sid_t sid);
|
||||||
|
|
||||||
|
static LocalPoolObjectBase* getPoolObjectHandle(HasLocalDataPoolIF* clientIF,
|
||||||
|
lp_id_t localPoolId);
|
||||||
|
|
||||||
|
static object_id_t getObjectId(HasLocalDataPoolIF* clientIF);
|
||||||
|
|
||||||
|
friend class LocalDataPoolManager;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_HASLOCALDPIFMANAGERATTORNEY_H_ */
|
7
datapoollocal/internal/HasLocalDpIFUserAttorney.cpp
Normal file
7
datapoollocal/internal/HasLocalDpIFUserAttorney.cpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "HasLocalDpIFUserAttorney.h"
|
||||||
|
#include "../AccessLocalPoolF.h"
|
||||||
|
#include "../HasLocalDataPoolIF.h"
|
||||||
|
|
||||||
|
AccessPoolManagerIF* HasLocalDpIFUserAttorney::getAccessorHandle(HasLocalDataPoolIF *clientIF) {
|
||||||
|
return clientIF->getAccessorHandle();
|
||||||
|
}
|
18
datapoollocal/internal/HasLocalDpIFUserAttorney.h
Normal file
18
datapoollocal/internal/HasLocalDpIFUserAttorney.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_HASLOCALDPIFUSERATTORNEY_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_HASLOCALDPIFUSERATTORNEY_H_
|
||||||
|
|
||||||
|
class HasLocalDataPoolIF;
|
||||||
|
class AccessPoolManagerIF;
|
||||||
|
|
||||||
|
class HasLocalDpIFUserAttorney {
|
||||||
|
private:
|
||||||
|
|
||||||
|
static AccessPoolManagerIF* getAccessorHandle(HasLocalDataPoolIF* clientIF);
|
||||||
|
|
||||||
|
friend class LocalPoolObjectBase;
|
||||||
|
friend class LocalPoolDataSetBase;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_HASLOCALDPIFUSERATTORNEY_H_ */
|
32
datapoollocal/internal/LocalDpManagerAttorney.h
Normal file
32
datapoollocal/internal/LocalDpManagerAttorney.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALDPMANAGERATTORNEY_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_LOCALDPMANAGERATTORNEY_H_
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is a helper class implements the Attorney-Client idiom for access to
|
||||||
|
* LocalDataPoolManager internals
|
||||||
|
* @details
|
||||||
|
* This helper class provides better control over which classes are allowed to access
|
||||||
|
* LocalDataPoolManager internals in a granular and encapsulated way when compared to
|
||||||
|
* other methods like direct friend declarations. It allows these classes to use
|
||||||
|
* an explicit subset of the pool manager private/protected functions.
|
||||||
|
* See: https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Friendship_and_the_Attorney-Client
|
||||||
|
*/
|
||||||
|
class LocalDpManagerAttorney {
|
||||||
|
private:
|
||||||
|
template<typename T> static ReturnValue_t fetchPoolEntry(LocalDataPoolManager& manager,
|
||||||
|
lp_id_t localPoolId, PoolEntry<T> **poolEntry) {
|
||||||
|
return manager.fetchPoolEntry(localPoolId, poolEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
static MutexIF* getMutexHandle(LocalDataPoolManager& manager) {
|
||||||
|
return manager.getMutexHandle();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T> friend class LocalPoolVariable;
|
||||||
|
template<typename T, uint16_t vecSize> friend class LocalPoolVector;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_LOCALDPMANAGERATTORNEY_H_ */
|
39
datapoollocal/internal/LocalPoolDataSetAttorney.h
Normal file
39
datapoollocal/internal/LocalPoolDataSetAttorney.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETATTORNEY_H_
|
||||||
|
#define FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETATTORNEY_H_
|
||||||
|
|
||||||
|
#include "../LocalPoolDataSetBase.h"
|
||||||
|
|
||||||
|
class LocalPoolDataSetAttorney {
|
||||||
|
private:
|
||||||
|
static void setDiagnostic(LocalPoolDataSetBase& set, bool diagnostics) {
|
||||||
|
set.setDiagnostic(diagnostics);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isDiagnostics(LocalPoolDataSetBase& set) {
|
||||||
|
return set.isDiagnostics();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void initializePeriodicHelper(LocalPoolDataSetBase& set, float collectionInterval,
|
||||||
|
uint32_t minimumPeriodicIntervalMs,
|
||||||
|
bool isDiagnostics, uint8_t nonDiagIntervalFactor = 5) {
|
||||||
|
set.initializePeriodicHelper(collectionInterval, minimumPeriodicIntervalMs, isDiagnostics,
|
||||||
|
nonDiagIntervalFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setReportingEnabled(LocalPoolDataSetBase& set, bool enabled) {
|
||||||
|
set.setReportingEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool getReportingEnabled(LocalPoolDataSetBase& set) {
|
||||||
|
return set.getReportingEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
static PeriodicHousekeepingHelper* getPeriodicHelper(LocalPoolDataSetBase& set) {
|
||||||
|
return set.periodicHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend class LocalDataPoolManager;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETATTORNEY_H_ */
|
@ -1,10 +1,13 @@
|
|||||||
#ifndef FSFW_DATAPOOLLOCAL_LOCPOOLDEFINITIONS_H_
|
#ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLDEFINITIONS_H_
|
||||||
#define FSFW_DATAPOOLLOCAL_LOCPOOLDEFINITIONS_H_
|
#define FSFW_DATAPOOLLOCAL_LOCALPOOLDEFINITIONS_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include "../datapool/PoolEntryIF.h"
|
||||||
#include "../objectmanager/SystemObjectIF.h"
|
#include "../objectmanager/SystemObjectIF.h"
|
||||||
#include "../objectmanager/frameworkObjects.h"
|
#include "../objectmanager/frameworkObjects.h"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Type definition for local pool entries.
|
* @brief Type definition for local pool entries.
|
||||||
*/
|
*/
|
||||||
@ -12,10 +15,21 @@ using lp_id_t = uint32_t;
|
|||||||
|
|
||||||
namespace localpool {
|
namespace localpool {
|
||||||
static constexpr uint32_t INVALID_LPID = -1;
|
static constexpr uint32_t INVALID_LPID = -1;
|
||||||
|
|
||||||
|
static constexpr uint8_t INTERFACE_ID = CLASS_ID::LOCAL_POOL_OWNER_IF;
|
||||||
|
|
||||||
|
static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0x00);
|
||||||
|
static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0x01);
|
||||||
|
|
||||||
|
//! This is the core data structure of the local data pools. Users should insert all desired
|
||||||
|
//! pool variables, using the std::map interface.
|
||||||
|
using DataPool = std::map<lp_id_t, PoolEntryIF*>;
|
||||||
|
using DataPoolMapIter = DataPool::iterator;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used as a unique identifier for data sets.
|
* Used as a unique identifier for data sets. Consists of 4 byte object ID and 4 byte set ID.
|
||||||
*/
|
*/
|
||||||
union sid_t {
|
union sid_t {
|
||||||
static constexpr uint64_t INVALID_SID = -1;
|
static constexpr uint64_t INVALID_SID = -1;
|
||||||
@ -57,7 +71,8 @@ union sid_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used as a global unique identifier for local pool variables.
|
* Used as a global unique identifier for local pool variables. Consists of 4 byte object ID
|
||||||
|
* and 4 byte local pool ID.
|
||||||
*/
|
*/
|
||||||
union gp_id_t {
|
union gp_id_t {
|
||||||
static constexpr uint64_t INVALID_GPID = -1;
|
static constexpr uint64_t INVALID_GPID = -1;
|
||||||
@ -90,4 +105,4 @@ union gp_id_t {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_DATAPOOLLOCAL_LOCPOOLDEFINITIONS_H_ */
|
#endif /* FSFW_DATAPOOLLOCAL_LOCALPOOLDEFINITIONS_H_ */
|
@ -9,18 +9,14 @@
|
|||||||
//! the C stdio functions can be used alternatively
|
//! the C stdio functions can be used alternatively
|
||||||
#define FSFW_CPP_OSTREAM_ENABLED 1
|
#define FSFW_CPP_OSTREAM_ENABLED 1
|
||||||
|
|
||||||
//! More FSFW related printouts.
|
//! More FSFW related printouts depending on level. Useful for development.
|
||||||
//! Be careful, this also turns off most diagnostic prinouts!
|
#define FSFW_VERBOSE_LEVEL 1
|
||||||
#define FSFW_ENHANCED_PRINTOUT 0
|
|
||||||
|
|
||||||
//! Can be used to completely disable printouts, even the C stdio ones.
|
//! Can be used to completely disable printouts, even the C stdio ones.
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 0 && FSFW_ENHANCED_PRINTOUT == 0
|
#if FSFW_CPP_OSTREAM_ENABLED == 0 && FSFW_VERBOSE_LEVEL == 0
|
||||||
#define FSFW_DISABLE_PRINTOUT 0
|
#define FSFW_DISABLE_PRINTOUT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Can be used to enable additional debugging printouts for developing the FSFW
|
|
||||||
#define FSFW_PRINT_VERBOSITY_LEVEL 0
|
|
||||||
|
|
||||||
//! Can be used to disable the ANSI color sequences for C stdio.
|
//! Can be used to disable the ANSI color sequences for C stdio.
|
||||||
#define FSFW_COLORED_OUTPUT 1
|
#define FSFW_COLORED_OUTPUT 1
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include "AcceptsDeviceResponsesIF.h"
|
#include "AcceptsDeviceResponsesIF.h"
|
||||||
#include "DeviceTmReportingWrapper.h"
|
#include "DeviceTmReportingWrapper.h"
|
||||||
|
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include "../objectmanager/ObjectManager.h"
|
#include "../objectmanager/ObjectManager.h"
|
||||||
#include "../storagemanager/StorageManagerIF.h"
|
#include "../storagemanager/StorageManagerIF.h"
|
||||||
#include "../thermal/ThermalComponentIF.h"
|
#include "../thermal/ThermalComponentIF.h"
|
||||||
@ -13,9 +13,6 @@
|
|||||||
#include "../subsystem/SubsystemBase.h"
|
#include "../subsystem/SubsystemBase.h"
|
||||||
#include "../datapoollocal/LocalPoolVariable.h"
|
#include "../datapoollocal/LocalPoolVariable.h"
|
||||||
|
|
||||||
#include <iomanip>
|
|
||||||
|
|
||||||
|
|
||||||
object_id_t DeviceHandlerBase::powerSwitcherId = objects::NO_OBJECT;
|
object_id_t DeviceHandlerBase::powerSwitcherId = objects::NO_OBJECT;
|
||||||
object_id_t DeviceHandlerBase::rawDataReceiverId = objects::NO_OBJECT;
|
object_id_t DeviceHandlerBase::rawDataReceiverId = objects::NO_OBJECT;
|
||||||
object_id_t DeviceHandlerBase::defaultFdirParentId = objects::NO_OBJECT;
|
object_id_t DeviceHandlerBase::defaultFdirParentId = objects::NO_OBJECT;
|
||||||
@ -27,7 +24,7 @@ DeviceHandlerBase::DeviceHandlerBase(object_id_t setObjectId,
|
|||||||
wiretappingMode(OFF), storedRawData(StorageManagerIF::INVALID_ADDRESS),
|
wiretappingMode(OFF), storedRawData(StorageManagerIF::INVALID_ADDRESS),
|
||||||
deviceCommunicationId(deviceCommunication), comCookie(comCookie),
|
deviceCommunicationId(deviceCommunication), comCookie(comCookie),
|
||||||
healthHelper(this,setObjectId), modeHelper(this), parameterHelper(this),
|
healthHelper(this,setObjectId), modeHelper(this), parameterHelper(this),
|
||||||
actionHelper(this, nullptr), hkManager(this, nullptr),
|
actionHelper(this, nullptr), poolManager(this, nullptr),
|
||||||
childTransitionFailure(RETURN_OK), fdirInstance(fdirInstance),
|
childTransitionFailure(RETURN_OK), fdirInstance(fdirInstance),
|
||||||
hkSwitcher(this), defaultFDIRUsed(fdirInstance == nullptr),
|
hkSwitcher(this), defaultFDIRUsed(fdirInstance == nullptr),
|
||||||
switchOffWasReported(false), childTransitionDelay(5000),
|
switchOffWasReported(false), childTransitionDelay(5000),
|
||||||
@ -39,13 +36,8 @@ DeviceHandlerBase::DeviceHandlerBase(object_id_t setObjectId,
|
|||||||
cookieInfo.state = COOKIE_UNUSED;
|
cookieInfo.state = COOKIE_UNUSED;
|
||||||
cookieInfo.pendingCommand = deviceCommandMap.end();
|
cookieInfo.pendingCommand = deviceCommandMap.end();
|
||||||
if (comCookie == nullptr) {
|
if (comCookie == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "DeviceHandlerBase",
|
||||||
sif::error << "DeviceHandlerBase: ObjectID 0x" << std::hex
|
HasReturnvaluesIF::RETURN_FAILED, "Invalid cookie");
|
||||||
<< std::setw(8) << std::setfill('0') << this->getObjectId()
|
|
||||||
<< std::dec << ": Do not pass nullptr as a cookie, consider "
|
|
||||||
<< std::setfill(' ') << "passing a dummy cookie instead!"
|
|
||||||
<< std::endl;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
if (this->fdirInstance == nullptr) {
|
if (this->fdirInstance == nullptr) {
|
||||||
this->fdirInstance = new DeviceHandlerFailureIsolation(setObjectId,
|
this->fdirInstance = new DeviceHandlerFailureIsolation(setObjectId,
|
||||||
@ -115,7 +107,7 @@ ReturnValue_t DeviceHandlerBase::performOperation(uint8_t counter) {
|
|||||||
doGetRead();
|
doGetRead();
|
||||||
// This will be performed after datasets have been updated by the
|
// This will be performed after datasets have been updated by the
|
||||||
// custom device implementation.
|
// custom device implementation.
|
||||||
hkManager.performHkOperation();
|
poolManager.performHkOperation();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -132,30 +124,24 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
communicationInterface = objectManager->get<DeviceCommunicationIF>(
|
communicationInterface = objectManager->get<DeviceCommunicationIF>(
|
||||||
deviceCommunicationId);
|
deviceCommunicationId);
|
||||||
if (communicationInterface == nullptr) {
|
if (communicationInterface == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "initialize",
|
||||||
sif::error << "DeviceHandlerBase::initialize: Communication interface "
|
ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
"invalid." << std::endl;
|
"Passed communication IF invalid");
|
||||||
sif::error << "Make sure it is set up properly and implements"
|
|
||||||
" DeviceCommunicationIF" << std::endl;
|
|
||||||
#endif
|
|
||||||
return ObjectManagerIF::CHILD_INIT_FAILED;
|
return ObjectManagerIF::CHILD_INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = communicationInterface->initializeInterface(comCookie);
|
result = communicationInterface->initializeInterface(comCookie);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "initialize",
|
||||||
sif::error << "DeviceHandlerBase::initialize: Initializing "
|
ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
"communication interface failed!" << std::endl;
|
"ComIF initialization failed");
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
IPCStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
IPCStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
||||||
if (IPCStore == nullptr) {
|
if (IPCStore == nullptr) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_ERROR, "initialize",
|
||||||
sif::error << "DeviceHandlerBase::initialize: IPC store not set up in "
|
ObjectManagerIF::CHILD_INIT_FAILED, "IPC Store not set up");
|
||||||
"factory." << std::endl;
|
|
||||||
#endif
|
|
||||||
return ObjectManagerIF::CHILD_INIT_FAILED;
|
return ObjectManagerIF::CHILD_INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,11 +150,15 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
AcceptsDeviceResponsesIF>(rawDataReceiverId);
|
AcceptsDeviceResponsesIF>(rawDataReceiverId);
|
||||||
|
|
||||||
if (rawReceiver == nullptr) {
|
if (rawReceiver == nullptr) {
|
||||||
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
|
"initialize", ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
|
"Raw receiver object ID set but no valid object found.");
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "DeviceHandlerBase::initialize: Raw receiver object "
|
|
||||||
"ID set but no valid object found." << std::endl;
|
|
||||||
sif::error << "Make sure the raw receiver object is set up properly"
|
sif::error << "Make sure the raw receiver object is set up properly"
|
||||||
" and implements AcceptsDeviceResponsesIF" << std::endl;
|
" and implements AcceptsDeviceResponsesIF" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("Make sure the raw receiver object is set up "
|
||||||
|
"properly and implements AcceptsDeviceResponsesIF\n");
|
||||||
#endif
|
#endif
|
||||||
return ObjectManagerIF::CHILD_INIT_FAILED;
|
return ObjectManagerIF::CHILD_INIT_FAILED;
|
||||||
}
|
}
|
||||||
@ -178,11 +168,15 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
if(powerSwitcherId != objects::NO_OBJECT) {
|
if(powerSwitcherId != objects::NO_OBJECT) {
|
||||||
powerSwitcher = objectManager->get<PowerSwitchIF>(powerSwitcherId);
|
powerSwitcher = objectManager->get<PowerSwitchIF>(powerSwitcherId);
|
||||||
if (powerSwitcher == nullptr) {
|
if (powerSwitcher == nullptr) {
|
||||||
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
|
"initialize", ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
|
"Power switcher set but no valid object found.");
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "DeviceHandlerBase::initialize: Power switcher "
|
sif::error << "Make sure the power switcher object is set up "
|
||||||
<< "object ID set but no valid object found." << std::endl;
|
<< "properly and implements PowerSwitchIF" << std::endl;
|
||||||
sif::error << "Make sure the raw receiver object is set up properly"
|
#else
|
||||||
<< " and implements PowerSwitchIF" << std::endl;
|
sif::printError("Make sure the power switcher object is set up "
|
||||||
|
"properly and implements PowerSwitchIF\n");
|
||||||
#endif
|
#endif
|
||||||
return ObjectManagerIF::CHILD_INIT_FAILED;
|
return ObjectManagerIF::CHILD_INIT_FAILED;
|
||||||
}
|
}
|
||||||
@ -216,7 +210,7 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = hkManager.initialize(commandQueue);
|
result = poolManager.initialize(commandQueue);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -229,7 +223,8 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
if(result == HasReturnvaluesIF::RETURN_OK) {
|
if(result == HasReturnvaluesIF::RETURN_OK) {
|
||||||
thermalSet->heaterRequest.value =
|
thermalSet->heaterRequest.value =
|
||||||
ThermalComponentIF::STATE_REQUEST_NON_OPERATIONAL;
|
ThermalComponentIF::STATE_REQUEST_NON_OPERATIONAL;
|
||||||
thermalSet->commit(PoolVariableIF::VALID);
|
thermalSet->heaterRequest.setValid(true);
|
||||||
|
thermalSet->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -285,7 +280,7 @@ void DeviceHandlerBase::readCommandQueue() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = hkManager.handleHousekeepingMessage(&command);
|
result = poolManager.handleHousekeepingMessage(&command);
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -555,17 +550,17 @@ void DeviceHandlerBase::replyReturnvalueToCommand(ReturnValue_t status,
|
|||||||
|
|
||||||
void DeviceHandlerBase::replyToCommand(ReturnValue_t status,
|
void DeviceHandlerBase::replyToCommand(ReturnValue_t status,
|
||||||
uint32_t parameter) {
|
uint32_t parameter) {
|
||||||
//Check if we reply to a raw command.
|
// Check if we reply to a raw command.
|
||||||
if (cookieInfo.pendingCommand->first == RAW_COMMAND_ID) {
|
if (cookieInfo.pendingCommand->first == RAW_COMMAND_ID) {
|
||||||
if (status == NO_REPLY_EXPECTED) {
|
if (status == NO_REPLY_EXPECTED) {
|
||||||
status = RETURN_OK;
|
status = RETURN_OK;
|
||||||
}
|
}
|
||||||
replyReturnvalueToCommand(status, parameter);
|
replyReturnvalueToCommand(status, parameter);
|
||||||
//Always delete data from a raw command.
|
// Always delete data from a raw command.
|
||||||
IPCStore->deleteData(storedRawData);
|
IPCStore->deleteData(storedRawData);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Check if we were externally commanded.
|
// Check if we were externally commanded.
|
||||||
if (cookieInfo.pendingCommand->second.sendReplyTo != NO_COMMANDER) {
|
if (cookieInfo.pendingCommand->second.sendReplyTo != NO_COMMANDER) {
|
||||||
MessageQueueId_t queueId = cookieInfo.pendingCommand->second.sendReplyTo;
|
MessageQueueId_t queueId = cookieInfo.pendingCommand->second.sendReplyTo;
|
||||||
if (status == NO_REPLY_EXPECTED) {
|
if (status == NO_REPLY_EXPECTED) {
|
||||||
@ -580,15 +575,17 @@ void DeviceHandlerBase::replyToCommand(ReturnValue_t status,
|
|||||||
|
|
||||||
void DeviceHandlerBase::replyToReply(DeviceReplyMap::iterator iter,
|
void DeviceHandlerBase::replyToReply(DeviceReplyMap::iterator iter,
|
||||||
ReturnValue_t status) {
|
ReturnValue_t status) {
|
||||||
//No need to check if iter exists, as this is checked by callers. If someone else uses the method, add check.
|
// No need to check if iter exists, as this is checked by callers.
|
||||||
|
// If someone else uses the method, add check.
|
||||||
if (iter->second.command == deviceCommandMap.end()) {
|
if (iter->second.command == deviceCommandMap.end()) {
|
||||||
//Is most likely periodic reply. Silent return.
|
//Is most likely periodic reply. Silent return.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Check if more replies are expected. If so, do nothing.
|
// Check if more replies are expected. If so, do nothing.
|
||||||
DeviceCommandInfo* info = &(iter->second.command->second);
|
DeviceCommandInfo* info = &(iter->second.command->second);
|
||||||
if (--info->expectedReplies == 0) {
|
if (--info->expectedReplies == 0) {
|
||||||
//Check if it was transition or internal command. Don't send any replies in that case.
|
// Check if it was transition or internal command.
|
||||||
|
// Don't send any replies in that case.
|
||||||
if (info->sendReplyTo != NO_COMMANDER) {
|
if (info->sendReplyTo != NO_COMMANDER) {
|
||||||
actionHelper.finish(info->sendReplyTo, iter->first, status);
|
actionHelper.finish(info->sendReplyTo, iter->first, status);
|
||||||
}
|
}
|
||||||
@ -605,7 +602,7 @@ void DeviceHandlerBase::doSendWrite() {
|
|||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
cookieInfo.state = COOKIE_WRITE_SENT;
|
cookieInfo.state = COOKIE_WRITE_SENT;
|
||||||
} else {
|
} else {
|
||||||
//always generate a failure event, so that FDIR knows what's up
|
// always generate a failure event, so that FDIR knows what's up
|
||||||
triggerEvent(DEVICE_SENDING_COMMAND_FAILED, result,
|
triggerEvent(DEVICE_SENDING_COMMAND_FAILED, result,
|
||||||
cookieInfo.pendingCommand->first);
|
cookieInfo.pendingCommand->first);
|
||||||
replyToCommand(result);
|
replyToCommand(result);
|
||||||
@ -720,10 +717,9 @@ void DeviceHandlerBase::parseReply(const uint8_t* receivedData,
|
|||||||
case RETURN_OK:
|
case RETURN_OK:
|
||||||
handleReply(receivedData, foundId, foundLen);
|
handleReply(receivedData, foundId, foundLen);
|
||||||
if(foundLen == 0) {
|
if(foundLen == 0) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::warning << "DeviceHandlerBase::parseReply: foundLen is 0!"
|
"parseReply", ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
" Packet parsing will be stuck." << std::endl;
|
"Found length is one, parsing might be stuck");
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case APERIODIC_REPLY: {
|
case APERIODIC_REPLY: {
|
||||||
@ -734,6 +730,9 @@ void DeviceHandlerBase::parseReply(const uint8_t* receivedData,
|
|||||||
foundId);
|
foundId);
|
||||||
}
|
}
|
||||||
if(foundLen == 0) {
|
if(foundLen == 0) {
|
||||||
|
printWarningOrError(sif::OutputTypes::OUT_ERROR,
|
||||||
|
"parseReply", ObjectManagerIF::CHILD_INIT_FAILED,
|
||||||
|
"Power switcher set but no valid object found.");
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << "DeviceHandlerBase::parseReply: foundLen is 0!"
|
sif::warning << "DeviceHandlerBase::parseReply: foundLen is 0!"
|
||||||
" Packet parsing will be stuck." << std::endl;
|
" Packet parsing will be stuck." << std::endl;
|
||||||
@ -746,7 +745,8 @@ void DeviceHandlerBase::parseReply(const uint8_t* receivedData,
|
|||||||
case IGNORE_FULL_PACKET:
|
case IGNORE_FULL_PACKET:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
//We need to wait for timeout.. don't know what command failed and who sent it.
|
// We need to wait for timeout.. don't know what command failed
|
||||||
|
// and who sent it.
|
||||||
replyRawReplyIfnotWiretapped(receivedData, foundLen);
|
replyRawReplyIfnotWiretapped(receivedData, foundLen);
|
||||||
triggerEvent(DEVICE_READING_REPLY_FAILED, result, foundLen);
|
triggerEvent(DEVICE_READING_REPLY_FAILED, result, foundLen);
|
||||||
break;
|
break;
|
||||||
@ -967,7 +967,8 @@ ReturnValue_t DeviceHandlerBase::getStateOfSwitches(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mode_t DeviceHandlerBase::getBaseMode(Mode_t transitionMode) {
|
Mode_t DeviceHandlerBase::getBaseMode(Mode_t transitionMode) {
|
||||||
//only child action special modes are handled, as a child should never see any base action modes
|
// only child action special modes are handled, as a child should
|
||||||
|
// never see any base action modes
|
||||||
if (transitionMode == _MODE_START_UP) {
|
if (transitionMode == _MODE_START_UP) {
|
||||||
return _MODE_TO_ON;
|
return _MODE_TO_ON;
|
||||||
}
|
}
|
||||||
@ -1290,12 +1291,11 @@ void DeviceHandlerBase::buildInternalCommand(void) {
|
|||||||
if (mode == MODE_NORMAL) {
|
if (mode == MODE_NORMAL) {
|
||||||
result = buildNormalDeviceCommand(&deviceCommandId);
|
result = buildNormalDeviceCommand(&deviceCommandId);
|
||||||
if (result == BUSY) {
|
if (result == BUSY) {
|
||||||
//so we can track misconfigurations
|
// so we can track misconfigurations
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
sif::debug << std::hex << getObjectId()
|
"buildInternalCommand",
|
||||||
<< ": DHB::buildInternalCommand: Busy" << std::dec
|
HasReturnvaluesIF::RETURN_FAILED,
|
||||||
<< std::endl;
|
"Busy.");
|
||||||
#endif
|
|
||||||
result = NOTHING_TO_SEND; //no need to report this
|
result = NOTHING_TO_SEND; //no need to report this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1319,12 +1319,15 @@ void DeviceHandlerBase::buildInternalCommand(void) {
|
|||||||
if (iter == deviceCommandMap.end()) {
|
if (iter == deviceCommandMap.end()) {
|
||||||
result = COMMAND_NOT_SUPPORTED;
|
result = COMMAND_NOT_SUPPORTED;
|
||||||
} else if (iter->second.isExecuting) {
|
} else if (iter->second.isExecuting) {
|
||||||
//so we can track misconfigurations
|
#if FSFW_DISABLE_PRINTOUT == 0
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
char output[36];
|
||||||
sif::debug << std::hex << getObjectId()
|
sprintf(output, "Command 0x%08x is executing",
|
||||||
<< ": DHB::buildInternalCommand: Command "
|
static_cast<unsigned int>(deviceCommandId));
|
||||||
<< deviceCommandId << " isExecuting" << std::dec
|
// so we can track misconfigurations
|
||||||
<< std::endl;
|
printWarningOrError(sif::OutputTypes::OUT_WARNING,
|
||||||
|
"buildInternalCommand",
|
||||||
|
HasReturnvaluesIF::RETURN_FAILED,
|
||||||
|
output);
|
||||||
#endif
|
#endif
|
||||||
// this is an internal command, no need to report a failure here,
|
// this is an internal command, no need to report a failure here,
|
||||||
// missed reply will track if a reply is too late, otherwise, it's ok
|
// missed reply will track if a reply is too late, otherwise, it's ok
|
||||||
@ -1418,7 +1421,7 @@ void DeviceHandlerBase::performOperationHook() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DeviceHandlerBase::initializeLocalDataPool(
|
ReturnValue_t DeviceHandlerBase::initializeLocalDataPool(
|
||||||
LocalDataPool &localDataPoolMap,
|
localpool::DataPool &localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) {
|
LocalDataPoolManager& poolManager) {
|
||||||
if(thermalSet != nullptr) {
|
if(thermalSet != nullptr) {
|
||||||
localDataPoolMap.emplace(thermalSet->thermalStatePoolId,
|
localDataPoolMap.emplace(thermalSet->thermalStatePoolId,
|
||||||
@ -1429,18 +1432,13 @@ ReturnValue_t DeviceHandlerBase::initializeLocalDataPool(
|
|||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDataPoolManager* DeviceHandlerBase::getHkManagerHandle() {
|
|
||||||
return &hkManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ReturnValue_t DeviceHandlerBase::initializeAfterTaskCreation() {
|
ReturnValue_t DeviceHandlerBase::initializeAfterTaskCreation() {
|
||||||
// In this function, the task handle should be valid if the task
|
// In this function, the task handle should be valid if the task
|
||||||
// was implemented correctly. We still check to be 1000 % sure :-)
|
// was implemented correctly. We still check to be 1000 % sure :-)
|
||||||
if(executingTask != nullptr) {
|
if(executingTask != nullptr) {
|
||||||
pstIntervalMs = executingTask->getPeriodMs();
|
pstIntervalMs = executingTask->getPeriodMs();
|
||||||
}
|
}
|
||||||
this->hkManager.initializeAfterTaskCreation();
|
this->poolManager.initializeAfterTaskCreation();
|
||||||
|
|
||||||
if(setStartupImmediately) {
|
if(setStartupImmediately) {
|
||||||
startTransition(MODE_ON, SUBMODE_NONE);
|
startTransition(MODE_ON, SUBMODE_NONE);
|
||||||
@ -1484,3 +1482,56 @@ void DeviceHandlerBase::setNormalDatapoolEntriesInvalid() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AccessPoolManagerIF* DeviceHandlerBase::getAccessorHandle() {
|
||||||
|
return &poolManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceHandlerBase::printWarningOrError(sif::OutputTypes errorType,
|
||||||
|
const char *functionName, ReturnValue_t errorCode,
|
||||||
|
const char *errorPrint) {
|
||||||
|
if(errorPrint == nullptr) {
|
||||||
|
if(errorCode == ObjectManagerIF::CHILD_INIT_FAILED) {
|
||||||
|
errorPrint = "Initialization error";
|
||||||
|
}
|
||||||
|
if(errorCode == HasReturnvaluesIF::RETURN_FAILED) {
|
||||||
|
if(errorType == sif::OutputTypes::OUT_WARNING) {
|
||||||
|
errorPrint = "Generic Warning";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorPrint = "Generic Error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorPrint = "Unknown error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(errorType == sif::OutputTypes::OUT_WARNING) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::warning << "DeviceHandlerBase::" << functionName << ": Object ID "
|
||||||
|
<< std::hex << std::setw(8) << std::setfill('0')
|
||||||
|
<< this->getObjectId() << " | " << errorPrint << std::dec
|
||||||
|
<< std::setfill(' ') << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("DeviceHandlerBase::%s: Object ID 0x%08x | %s\n",
|
||||||
|
this->getObjectId(), errorPrint);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if(errorType == sif::OutputTypes::OUT_ERROR) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "DeviceHandlerBase::" << functionName << ": Object ID "
|
||||||
|
<< std::hex << std::setw(8) << std::setfill('0')
|
||||||
|
<< this->getObjectId() << " | " << errorPrint << std::dec
|
||||||
|
<< std::setfill(' ') << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("DeviceHandlerBase::%s: Object ID 0x%08x | %s\n",
|
||||||
|
this->getObjectId(), errorPrint);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ProvidesDataPoolSubscriptionIF* DeviceHandlerBase::getSubscriptionInterface() {
|
||||||
|
return &poolManager;
|
||||||
|
}
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
#include "DeviceHandlerFailureIsolation.h"
|
#include "DeviceHandlerFailureIsolation.h"
|
||||||
#include "DeviceHandlerThermalSet.h"
|
#include "DeviceHandlerThermalSet.h"
|
||||||
|
|
||||||
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
|
#include "../serviceinterface/serviceInterfaceDefintions.h"
|
||||||
#include "../objectmanager/SystemObject.h"
|
#include "../objectmanager/SystemObject.h"
|
||||||
#include "../tasks/ExecutableObjectIF.h"
|
#include "../tasks/ExecutableObjectIF.h"
|
||||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||||
@ -512,11 +514,18 @@ protected:
|
|||||||
* @param localDataPoolMap
|
* @param localDataPoolMap
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t initializeLocalDataPool(LocalDataPool& localDataPoolMap,
|
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
|
|
||||||
/** Get the HK manager object handle */
|
/**
|
||||||
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
* Provides the subscription handle which can be used by classes like controllers
|
||||||
|
* to get messages on data updates.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() override;
|
||||||
|
|
||||||
|
//! Accessor handle required for internal handling.
|
||||||
|
AccessPoolManagerIF* getAccessorHandle() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Hook function for child handlers which is called once per
|
* @brief Hook function for child handlers which is called once per
|
||||||
@ -646,7 +655,7 @@ protected:
|
|||||||
/** Action helper for HasActionsIF */
|
/** Action helper for HasActionsIF */
|
||||||
ActionHelper actionHelper;
|
ActionHelper actionHelper;
|
||||||
/** Housekeeping Manager */
|
/** Housekeeping Manager */
|
||||||
LocalDataPoolManager hkManager;
|
LocalDataPoolManager poolManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Information about commands
|
* @brief Information about commands
|
||||||
@ -1111,7 +1120,7 @@ private:
|
|||||||
/**
|
/**
|
||||||
* @brief The mode the current transition originated from
|
* @brief The mode the current transition originated from
|
||||||
*
|
*
|
||||||
* This is private so the child can not change it and fuck up the timeouts
|
* This is private so the child can not change it and mess up the timeouts
|
||||||
*
|
*
|
||||||
* IMPORTANT: This is not valid during _MODE_SHUT_DOWN and _MODE_START_UP!!
|
* IMPORTANT: This is not valid during _MODE_SHUT_DOWN and _MODE_START_UP!!
|
||||||
* (it is _MODE_POWER_DOWN during this modes)
|
* (it is _MODE_POWER_DOWN during this modes)
|
||||||
@ -1190,7 +1199,8 @@ private:
|
|||||||
* Check if the RMAP sendWrite action was successful.
|
* Check if the RMAP sendWrite action was successful.
|
||||||
*
|
*
|
||||||
* Depending on the result, the following is done
|
* Depending on the result, the following is done
|
||||||
* - if the device command was external commanded, a reply is sent indicating the result
|
* - if the device command was external commanded, a reply is sent
|
||||||
|
* indicating the result
|
||||||
* - if the action was successful, the reply timout counter is initialized
|
* - if the action was successful, the reply timout counter is initialized
|
||||||
*/
|
*/
|
||||||
void doGetWrite(void);
|
void doGetWrite(void);
|
||||||
@ -1206,9 +1216,9 @@ private:
|
|||||||
/**
|
/**
|
||||||
* Check the getRead reply and the contained data.
|
* Check the getRead reply and the contained data.
|
||||||
*
|
*
|
||||||
* If data was received scanForReply() and, if successful, handleReply() are called.
|
* If data was received scanForReply() and, if successful, handleReply()
|
||||||
* If the current mode is @c MODE_RAW, the received packet is sent to the commanding object
|
* are called. If the current mode is @c MODE_RAW, the received packet
|
||||||
* via commandQueue.
|
* is sent to the commanding object via commandQueue.
|
||||||
*/
|
*/
|
||||||
void doGetRead(void);
|
void doGetRead(void);
|
||||||
|
|
||||||
@ -1227,7 +1237,7 @@ private:
|
|||||||
uint32_t *len);
|
uint32_t *len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param modeTo either @c MODE_ON, MODE_NORMAL or MODE_RAW NOTHING ELSE!!!
|
* @param modeTo either @c MODE_ON, MODE_NORMAL or MODE_RAW, nothing else!
|
||||||
*/
|
*/
|
||||||
void setTransition(Mode_t modeTo, Submode_t submodeTo);
|
void setTransition(Mode_t modeTo, Submode_t submodeTo);
|
||||||
|
|
||||||
@ -1247,6 +1257,11 @@ private:
|
|||||||
|
|
||||||
void handleTransitionToOnMode(Mode_t commandedMode,
|
void handleTransitionToOnMode(Mode_t commandedMode,
|
||||||
Submode_t commandedSubmode);
|
Submode_t commandedSubmode);
|
||||||
|
|
||||||
|
void printWarningOrError(sif::OutputTypes errorType,
|
||||||
|
const char* functionName,
|
||||||
|
ReturnValue_t errorCode = HasReturnvaluesIF::RETURN_FAILED,
|
||||||
|
const char* errorPrint = nullptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_DEVICEHANDLERS_DEVICEHANDLERBASE_H_ */
|
#endif /* FSFW_DEVICEHANDLERS_DEVICEHANDLERBASE_H_ */
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#ifndef FSFW_DEVICEHANDLERS_DEVICEHANDLERIF_H_
|
#ifndef FSFW_DEVICEHANDLERS_DEVICEHANDLERIF_H_
|
||||||
#define FSFW_DEVICEHANDLERS_DEVICEHANDLERIF_H_
|
#define FSFW_DEVICEHANDLERS_DEVICEHANDLERIF_H_
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/localPoolDefinitions.h>
|
||||||
#include "DeviceHandlerMessage.h"
|
#include "DeviceHandlerMessage.h"
|
||||||
|
|
||||||
#include "../action/HasActionsIF.h"
|
#include "../action/HasActionsIF.h"
|
||||||
#include "../datapoollocal/locPoolDefinitions.h"
|
|
||||||
#include "../events/Event.h"
|
#include "../events/Event.h"
|
||||||
#include "../modes/HasModesIF.h"
|
#include "../modes/HasModesIF.h"
|
||||||
#include "../ipc/MessageQueueSenderIF.h"
|
#include "../ipc/MessageQueueSenderIF.h"
|
||||||
|
@ -162,9 +162,15 @@ void EventManager::printEvent(EventMessage* message) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void EventManager::lockMutex() {
|
void EventManager::lockMutex() {
|
||||||
mutex->lockMutex(MutexIF::BLOCKING);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventManager::unlockMutex() {
|
void EventManager::unlockMutex() {
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventManager::setMutexTimeout(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t timeoutMs) {
|
||||||
|
this->timeoutType = timeoutType;
|
||||||
|
this->timeoutMs = timeoutMs;
|
||||||
|
}
|
||||||
|
@ -29,6 +29,8 @@ public:
|
|||||||
EventManager(object_id_t setObjectId);
|
EventManager(object_id_t setObjectId);
|
||||||
virtual ~EventManager();
|
virtual ~EventManager();
|
||||||
|
|
||||||
|
void setMutexTimeout(MutexIF::TimeoutType timeoutType, uint32_t timeoutMs);
|
||||||
|
|
||||||
MessageQueueId_t getEventReportQueue();
|
MessageQueueId_t getEventReportQueue();
|
||||||
|
|
||||||
ReturnValue_t registerListener(MessageQueueId_t listener, bool forwardAllButSelected = false);
|
ReturnValue_t registerListener(MessageQueueId_t listener, bool forwardAllButSelected = false);
|
||||||
@ -51,6 +53,8 @@ protected:
|
|||||||
std::map<MessageQueueId_t, EventMatchTree> listenerList;
|
std::map<MessageQueueId_t, EventMatchTree> listenerList;
|
||||||
|
|
||||||
MutexIF* mutex = nullptr;
|
MutexIF* mutex = nullptr;
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING;
|
||||||
|
uint32_t timeoutMs = 20;
|
||||||
|
|
||||||
static const uint8_t N_POOLS = 3;
|
static const uint8_t N_POOLS = 3;
|
||||||
LocalPool factoryBackend;
|
LocalPool factoryBackend;
|
||||||
|
1
fsfw.mk
1
fsfw.mk
@ -10,6 +10,7 @@ CXXSRC += $(wildcard $(FRAMEWORK_PATH)/coordinates/*.cpp)
|
|||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datalinklayer/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datalinklayer/*.cpp)
|
||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datapool/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datapool/*.cpp)
|
||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datapoollocal/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datapoollocal/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/datapoollocal/internal/*.cpp)
|
||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/housekeeping/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/housekeeping/*.cpp)
|
||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/devicehandlers/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/devicehandlers/*.cpp)
|
||||||
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/events/*.cpp)
|
CXXSRC += $(wildcard $(FRAMEWORK_PATH)/events/*.cpp)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "arrayprinter.h"
|
#include "arrayprinter.h"
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
|
||||||
void arrayprinter::print(const uint8_t *data, size_t size, OutputType type,
|
void arrayprinter::print(const uint8_t *data, size_t size, OutputType type,
|
||||||
@ -9,6 +9,8 @@ void arrayprinter::print(const uint8_t *data, size_t size, OutputType type,
|
|||||||
sif::info << "Printing data with size " << size << ": ";
|
sif::info << "Printing data with size " << size << ": ";
|
||||||
}
|
}
|
||||||
sif::info << "[";
|
sif::info << "[";
|
||||||
|
#else
|
||||||
|
sif::printInfo("Printing data with size %zu: [", size);
|
||||||
#endif
|
#endif
|
||||||
if(type == OutputType::HEX) {
|
if(type == OutputType::HEX) {
|
||||||
arrayprinter::printHex(data, size, maxCharPerLine);
|
arrayprinter::printHex(data, size, maxCharPerLine);
|
||||||
@ -37,6 +39,8 @@ void arrayprinter::printHex(const uint8_t *data, size_t size,
|
|||||||
}
|
}
|
||||||
sif::info << std::dec;
|
sif::info << std::dec;
|
||||||
sif::info << "]" << std::endl;
|
sif::info << "]" << std::endl;
|
||||||
|
#else
|
||||||
|
// how much memory to reserve for printout?
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,6 +58,8 @@ void arrayprinter::printDec(const uint8_t *data, size_t size,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sif::info << "]" << std::endl;
|
sif::info << "]" << std::endl;
|
||||||
|
#else
|
||||||
|
// how much memory to reserve for printout?
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,5 +71,7 @@ void arrayprinter::printBin(const uint8_t *data, size_t size) {
|
|||||||
std::bitset<8>(data[i]) << ",\n" << std::flush;
|
std::bitset<8>(data[i]) << ",\n" << std::flush;
|
||||||
}
|
}
|
||||||
sif::info << "]" << std::endl;
|
sif::info << "]" << std::endl;
|
||||||
|
#else
|
||||||
|
// how much memory to reserve for printout?
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef FSFW_HOUSEKEEPING_HOUSEKEEPINGMESSAGE_H_
|
#ifndef FSFW_HOUSEKEEPING_HOUSEKEEPINGMESSAGE_H_
|
||||||
#define FSFW_HOUSEKEEPING_HOUSEKEEPINGMESSAGE_H_
|
#define FSFW_HOUSEKEEPING_HOUSEKEEPINGMESSAGE_H_
|
||||||
|
|
||||||
#include "../datapoollocal/locPoolDefinitions.h"
|
#include "../datapoollocal/localPoolDefinitions.h"
|
||||||
#include "../ipc/CommandMessage.h"
|
#include "../ipc/CommandMessage.h"
|
||||||
#include "../ipc/FwMessageTypes.h"
|
#include "../ipc/FwMessageTypes.h"
|
||||||
#include "../objectmanager/frameworkObjects.h"
|
#include "../objectmanager/frameworkObjects.h"
|
||||||
|
@ -21,11 +21,11 @@ public:
|
|||||||
InternalErrorDataset(object_id_t objectId):
|
InternalErrorDataset(object_id_t objectId):
|
||||||
StaticLocalDataSet(sid_t(objectId , ERROR_SET_ID)) {}
|
StaticLocalDataSet(sid_t(objectId , ERROR_SET_ID)) {}
|
||||||
|
|
||||||
lp_var_t<uint32_t> tmHits = lp_var_t<uint32_t>(hkManager->getOwner(),
|
lp_var_t<uint32_t> tmHits = lp_var_t<uint32_t>(sid.objectId,
|
||||||
TM_HITS, this);
|
TM_HITS, this);
|
||||||
lp_var_t<uint32_t> queueHits = lp_var_t<uint32_t>(hkManager->getOwner(),
|
lp_var_t<uint32_t> queueHits = lp_var_t<uint32_t>(sid.objectId,
|
||||||
QUEUE_HITS, this);
|
QUEUE_HITS, this);
|
||||||
lp_var_t<uint32_t> storeHits = lp_var_t<uint32_t>(hkManager->getOwner(),
|
lp_var_t<uint32_t> storeHits = lp_var_t<uint32_t>(sid.objectId,
|
||||||
STORE_HITS, this);
|
STORE_HITS, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "../ipc/QueueFactory.h"
|
#include "../ipc/QueueFactory.h"
|
||||||
#include "../ipc/MutexFactory.h"
|
#include "../ipc/MutexFactory.h"
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterface.h"
|
||||||
|
|
||||||
InternalErrorReporter::InternalErrorReporter(object_id_t setObjectId,
|
InternalErrorReporter::InternalErrorReporter(object_id_t setObjectId,
|
||||||
uint32_t messageQueueDepth): SystemObject(setObjectId),
|
uint32_t messageQueueDepth): SystemObject(setObjectId),
|
||||||
@ -23,13 +23,13 @@ void InternalErrorReporter::setDiagnosticPrintout(bool enable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t InternalErrorReporter::performOperation(uint8_t opCode) {
|
ReturnValue_t InternalErrorReporter::performOperation(uint8_t opCode) {
|
||||||
internalErrorDataset.read(INTERNAL_ERROR_MUTEX_TIMEOUT);
|
internalErrorDataset.read(timeoutType, timeoutMs);
|
||||||
|
|
||||||
uint32_t newQueueHits = getAndResetQueueHits();
|
uint32_t newQueueHits = getAndResetQueueHits();
|
||||||
uint32_t newTmHits = getAndResetTmHits();
|
uint32_t newTmHits = getAndResetTmHits();
|
||||||
uint32_t newStoreHits = getAndResetStoreHits();
|
uint32_t newStoreHits = getAndResetStoreHits();
|
||||||
|
|
||||||
#if FSFW_ENHANCED_PRINTOUT == 1
|
#if FSFW_VERBOSE_LEVEL == 1
|
||||||
if(diagnosticPrintout) {
|
if(diagnosticPrintout) {
|
||||||
if((newQueueHits > 0) or (newTmHits > 0) or (newStoreHits > 0)) {
|
if((newQueueHits > 0) or (newTmHits > 0) or (newStoreHits > 0)) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
@ -38,6 +38,11 @@ ReturnValue_t InternalErrorReporter::performOperation(uint8_t opCode) {
|
|||||||
sif::debug << "Queue errors: " << newQueueHits << std::endl;
|
sif::debug << "Queue errors: " << newQueueHits << std::endl;
|
||||||
sif::debug << "TM errors: " << newTmHits << std::endl;
|
sif::debug << "TM errors: " << newTmHits << std::endl;
|
||||||
sif::debug << "Store errors: " << newStoreHits << std::endl;
|
sif::debug << "Store errors: " << newStoreHits << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printDebug("InternalErrorReporter::performOperation: Errors occured!\n");
|
||||||
|
sif::printDebug("Queue errors: %lu\n", static_cast<unsigned int>(newQueueHits));
|
||||||
|
sif::printDebug("TM errors: %lu\n", static_cast<unsigned int>(newTmHits));
|
||||||
|
sif::printDebug("Store errors: %lu\n", static_cast<unsigned int>(newStoreHits));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,8 +51,8 @@ ReturnValue_t InternalErrorReporter::performOperation(uint8_t opCode) {
|
|||||||
internalErrorDataset.queueHits.value += newQueueHits;
|
internalErrorDataset.queueHits.value += newQueueHits;
|
||||||
internalErrorDataset.storeHits.value += newStoreHits;
|
internalErrorDataset.storeHits.value += newStoreHits;
|
||||||
internalErrorDataset.tmHits.value += newTmHits;
|
internalErrorDataset.tmHits.value += newTmHits;
|
||||||
|
internalErrorDataset.setValidity(true, true);
|
||||||
internalErrorDataset.commit(INTERNAL_ERROR_MUTEX_TIMEOUT);
|
internalErrorDataset.commit(timeoutType, timeoutMs);
|
||||||
|
|
||||||
poolManager.performHkOperation();
|
poolManager.performHkOperation();
|
||||||
|
|
||||||
@ -69,7 +74,7 @@ void InternalErrorReporter::lostTm() {
|
|||||||
|
|
||||||
uint32_t InternalErrorReporter::getAndResetQueueHits() {
|
uint32_t InternalErrorReporter::getAndResetQueueHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = queueHits;
|
value = queueHits;
|
||||||
queueHits = 0;
|
queueHits = 0;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
@ -78,21 +83,21 @@ uint32_t InternalErrorReporter::getAndResetQueueHits() {
|
|||||||
|
|
||||||
uint32_t InternalErrorReporter::getQueueHits() {
|
uint32_t InternalErrorReporter::getQueueHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = queueHits;
|
value = queueHits;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalErrorReporter::incrementQueueHits() {
|
void InternalErrorReporter::incrementQueueHits() {
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
queueHits++;
|
queueHits++;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t InternalErrorReporter::getAndResetTmHits() {
|
uint32_t InternalErrorReporter::getAndResetTmHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = tmHits;
|
value = tmHits;
|
||||||
tmHits = 0;
|
tmHits = 0;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
@ -101,14 +106,14 @@ uint32_t InternalErrorReporter::getAndResetTmHits() {
|
|||||||
|
|
||||||
uint32_t InternalErrorReporter::getTmHits() {
|
uint32_t InternalErrorReporter::getTmHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = tmHits;
|
value = tmHits;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalErrorReporter::incrementTmHits() {
|
void InternalErrorReporter::incrementTmHits() {
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
tmHits++;
|
tmHits++;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
}
|
}
|
||||||
@ -119,7 +124,7 @@ void InternalErrorReporter::storeFull() {
|
|||||||
|
|
||||||
uint32_t InternalErrorReporter::getAndResetStoreHits() {
|
uint32_t InternalErrorReporter::getAndResetStoreHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = storeHits;
|
value = storeHits;
|
||||||
storeHits = 0;
|
storeHits = 0;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
@ -128,14 +133,18 @@ uint32_t InternalErrorReporter::getAndResetStoreHits() {
|
|||||||
|
|
||||||
uint32_t InternalErrorReporter::getStoreHits() {
|
uint32_t InternalErrorReporter::getStoreHits() {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
value = storeHits;
|
value = storeHits;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AccessPoolManagerIF* InternalErrorReporter::getAccessorHandle() {
|
||||||
|
return &poolManager;
|
||||||
|
}
|
||||||
|
|
||||||
void InternalErrorReporter::incrementStoreHits() {
|
void InternalErrorReporter::incrementStoreHits() {
|
||||||
mutex->lockMutex(MutexIF::WAITING, INTERNAL_ERROR_MUTEX_TIMEOUT);
|
mutex->lockMutex(timeoutType, timeoutMs);
|
||||||
storeHits++;
|
storeHits++;
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
}
|
}
|
||||||
@ -149,7 +158,7 @@ MessageQueueId_t InternalErrorReporter::getCommandQueue() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t InternalErrorReporter::initializeLocalDataPool(
|
ReturnValue_t InternalErrorReporter::initializeLocalDataPool(
|
||||||
LocalDataPool &localDataPoolMap, LocalDataPoolManager &poolManager) {
|
localpool::DataPool &localDataPoolMap, LocalDataPoolManager &poolManager) {
|
||||||
localDataPoolMap.emplace(errorPoolIds::TM_HITS,
|
localDataPoolMap.emplace(errorPoolIds::TM_HITS,
|
||||||
new PoolEntry<uint32_t>());
|
new PoolEntry<uint32_t>());
|
||||||
localDataPoolMap.emplace(errorPoolIds::QUEUE_HITS,
|
localDataPoolMap.emplace(errorPoolIds::QUEUE_HITS,
|
||||||
@ -162,10 +171,6 @@ ReturnValue_t InternalErrorReporter::initializeLocalDataPool(
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDataPoolManager* InternalErrorReporter::getHkManagerHandle() {
|
|
||||||
return &poolManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
dur_millis_t InternalErrorReporter::getPeriodicOperationFrequency() const {
|
dur_millis_t InternalErrorReporter::getPeriodicOperationFrequency() const {
|
||||||
return this->executingTask->getPeriodMs();
|
return this->executingTask->getPeriodMs();
|
||||||
}
|
}
|
||||||
@ -190,3 +195,12 @@ ReturnValue_t InternalErrorReporter::initializeAfterTaskCreation() {
|
|||||||
return poolManager.initializeAfterTaskCreation();
|
return poolManager.initializeAfterTaskCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InternalErrorReporter::setMutexTimeout(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t timeoutMs) {
|
||||||
|
this->timeoutType = timeoutType;
|
||||||
|
this->timeoutMs = timeoutMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProvidesDataPoolSubscriptionIF* InternalErrorReporter::getSubscriptionInterface() {
|
||||||
|
return &poolManager;
|
||||||
|
}
|
||||||
|
@ -22,7 +22,6 @@ class InternalErrorReporter: public SystemObject,
|
|||||||
public InternalErrorReporterIF,
|
public InternalErrorReporterIF,
|
||||||
public HasLocalDataPoolIF {
|
public HasLocalDataPoolIF {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t INTERNAL_ERROR_MUTEX_TIMEOUT = 20;
|
|
||||||
|
|
||||||
InternalErrorReporter(object_id_t setObjectId,
|
InternalErrorReporter(object_id_t setObjectId,
|
||||||
uint32_t messageQueueDepth = 5);
|
uint32_t messageQueueDepth = 5);
|
||||||
@ -34,16 +33,20 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setDiagnosticPrintout(bool enable);
|
void setDiagnosticPrintout(bool enable);
|
||||||
|
|
||||||
|
void setMutexTimeout(MutexIF::TimeoutType timeoutType,
|
||||||
|
uint32_t timeoutMs);
|
||||||
|
|
||||||
virtual ~InternalErrorReporter();
|
virtual ~InternalErrorReporter();
|
||||||
|
|
||||||
virtual object_id_t getObjectId() const override;
|
virtual object_id_t getObjectId() const override;
|
||||||
virtual MessageQueueId_t getCommandQueue() const override;
|
virtual MessageQueueId_t getCommandQueue() const override;
|
||||||
virtual ReturnValue_t initializeLocalDataPool(
|
virtual ReturnValue_t initializeLocalDataPool(
|
||||||
LocalDataPool& localDataPoolMap,
|
localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
|
||||||
virtual dur_millis_t getPeriodicOperationFrequency() const override;
|
virtual dur_millis_t getPeriodicOperationFrequency() const override;
|
||||||
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
||||||
|
ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() override;
|
||||||
|
AccessPoolManagerIF* getAccessorHandle() override;
|
||||||
|
|
||||||
virtual ReturnValue_t initialize() override;
|
virtual ReturnValue_t initialize() override;
|
||||||
virtual ReturnValue_t initializeAfterTaskCreation() override;
|
virtual ReturnValue_t initializeAfterTaskCreation() override;
|
||||||
@ -61,7 +64,11 @@ protected:
|
|||||||
LocalDataPoolManager poolManager;
|
LocalDataPoolManager poolManager;
|
||||||
|
|
||||||
PeriodicTaskIF* executingTask = nullptr;
|
PeriodicTaskIF* executingTask = nullptr;
|
||||||
|
|
||||||
MutexIF* mutex = nullptr;
|
MutexIF* mutex = nullptr;
|
||||||
|
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING;
|
||||||
|
uint32_t timeoutMs = 20;
|
||||||
|
|
||||||
sid_t internalErrorSid;
|
sid_t internalErrorSid;
|
||||||
InternalErrorDataset internalErrorDataset;
|
InternalErrorDataset internalErrorDataset;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Different types of timeout for the mutex lock.
|
* Different types of timeout for the mutex lock.
|
||||||
*/
|
*/
|
||||||
enum TimeoutType {
|
enum class TimeoutType {
|
||||||
POLLING, //!< If mutex is not available, return immediately
|
POLLING, //!< If mutex is not available, return immediately
|
||||||
WAITING, //!< Wait a specified time for the mutex to become available
|
WAITING, //!< Wait a specified time for the mutex to become available
|
||||||
BLOCKING //!< Block indefinitely until the mutex becomes available.
|
BLOCKING //!< Block indefinitely until the mutex becomes available.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include "MonitoringIF.h"
|
#include "MonitoringIF.h"
|
||||||
#include "MonitoringMessageContent.h"
|
#include "MonitoringMessageContent.h"
|
||||||
|
|
||||||
#include "../datapoollocal/locPoolDefinitions.h"
|
#include "../datapoollocal/localPoolDefinitions.h"
|
||||||
#include "../events/EventManagerIF.h"
|
#include "../events/EventManagerIF.h"
|
||||||
#include "../parameters/HasParametersIF.h"
|
#include "../parameters/HasParametersIF.h"
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#ifndef MONITORINGMESSAGECONTENT_H_
|
#ifndef FSFW_MONITORING_MONITORINGMESSAGECONTENT_H_
|
||||||
#define MONITORINGMESSAGECONTENT_H_
|
#define FSFW_MONITORING_MONITORINGMESSAGECONTENT_H_
|
||||||
|
|
||||||
#include "HasMonitorsIF.h"
|
#include "HasMonitorsIF.h"
|
||||||
#include "MonitoringIF.h"
|
#include "MonitoringIF.h"
|
||||||
#include "../datapoollocal/locPoolDefinitions.h"
|
|
||||||
|
#include "../datapoollocal/localPoolDefinitions.h"
|
||||||
#include "../objectmanager/ObjectManagerIF.h"
|
#include "../objectmanager/ObjectManagerIF.h"
|
||||||
#include "../serialize/SerialBufferAdapter.h"
|
#include "../serialize/SerialBufferAdapter.h"
|
||||||
#include "../serialize/SerialFixedArrayListAdapter.h"
|
#include "../serialize/SerialFixedArrayListAdapter.h"
|
||||||
@ -85,4 +86,4 @@ private:
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
object_id_t MonitoringReportContent<T>::timeStamperId = 0;
|
object_id_t MonitoringReportContent<T>::timeStamperId = 0;
|
||||||
|
|
||||||
#endif /* MONITORINGMESSAGECONTENT_H_ */
|
#endif /* FSFW_MONITORING_MONITORINGMESSAGECONTENT_H_ */
|
||||||
|
@ -163,7 +163,7 @@ ReturnValue_t Clock::setLeapSeconds(const uint16_t leapSeconds_) {
|
|||||||
if (checkOrCreateClockMutex() != HasReturnvaluesIF::RETURN_OK) {
|
if (checkOrCreateClockMutex() != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex(MutexIF::TimeoutType::BLOCKING);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -178,7 +178,7 @@ ReturnValue_t Clock::getLeapSeconds(uint16_t* leapSeconds_) {
|
|||||||
if (timeMutex == NULL) {
|
if (timeMutex == NULL) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex(MutexIF::TimeoutType::BLOCKING);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ ReturnValue_t Clock::setLeapSeconds(const uint16_t leapSeconds_) {
|
|||||||
if(checkOrCreateClockMutex()!=HasReturnvaluesIF::RETURN_OK){
|
if(checkOrCreateClockMutex()!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex();
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -217,7 +217,7 @@ ReturnValue_t Clock::getLeapSeconds(uint16_t* leapSeconds_) {
|
|||||||
if(timeMutex == nullptr){
|
if(timeMutex == nullptr){
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex();
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
Mutex::Mutex() {}
|
Mutex::Mutex() {}
|
||||||
|
|
||||||
ReturnValue_t Mutex::lockMutex(TimeoutType timeoutType, uint32_t timeoutMs) {
|
ReturnValue_t Mutex::lockMutex(TimeoutType timeoutType, uint32_t timeoutMs) {
|
||||||
if(timeoutType == MutexIF::BLOCKING) {
|
if(timeoutType == TimeoutType::BLOCKING) {
|
||||||
mutex.lock();
|
mutex.lock();
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
else if(timeoutType == MutexIF::POLLING) {
|
else if(timeoutType == TimeoutType::POLLING) {
|
||||||
if(mutex.try_lock()) {
|
if(mutex.try_lock()) {
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(timeoutMs > MutexIF::POLLING){
|
else if(timeoutType == TimeoutType::WAITING){
|
||||||
auto chronoMs = std::chrono::milliseconds(timeoutMs);
|
auto chronoMs = std::chrono::milliseconds(timeoutMs);
|
||||||
if(mutex.try_lock_for(chronoMs)) {
|
if(mutex.try_lock_for(chronoMs)) {
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
@ -22,7 +22,6 @@ public:
|
|||||||
|
|
||||||
std::timed_mutex* getMutexHandle();
|
std::timed_mutex* getMutexHandle();
|
||||||
private:
|
private:
|
||||||
//bool locked = false;
|
|
||||||
std::timed_mutex mutex;
|
std::timed_mutex mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
#include "BinarySemaphore.h"
|
#include "BinarySemaphore.h"
|
||||||
|
#include "../../serviceinterface/ServiceInterfacePrinter.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
|
||||||
extern "C" {
|
#include <time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
}
|
|
||||||
|
|
||||||
BinarySemaphore::BinarySemaphore() {
|
BinarySemaphore::BinarySemaphore() {
|
||||||
// Using unnamed semaphores for now
|
// Using unnamed semaphores for now
|
||||||
@ -113,7 +114,8 @@ uint8_t BinarySemaphore::getSemaphoreCounter(sem_t *handle) {
|
|||||||
}
|
}
|
||||||
else if(result != 0 and errno == EINVAL) {
|
else if(result != 0 and errno == EINVAL) {
|
||||||
// Could be called from interrupt, use lightweight printf
|
// Could be called from interrupt, use lightweight printf
|
||||||
printf("BinarySemaphore::getSemaphoreCounter: Invalid semaphore\n");
|
sif::printError("BinarySemaphore::getSemaphoreCounter: "
|
||||||
|
"Invalid semaphore\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -128,14 +130,18 @@ void BinarySemaphore::initSemaphore(uint8_t initCount) {
|
|||||||
switch(errno) {
|
switch(errno) {
|
||||||
case(EINVAL):
|
case(EINVAL):
|
||||||
// Value exceeds SEM_VALUE_MAX
|
// Value exceeds SEM_VALUE_MAX
|
||||||
case(ENOSYS):
|
case(ENOSYS): {
|
||||||
// System does not support process-shared semaphores
|
// System does not support process-shared semaphores
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "BinarySemaphore: Init failed with" << strerror(errno)
|
sif::error << "BinarySemaphore: Init failed with "
|
||||||
<< std::endl;
|
<< strerror(errno) << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("BinarySemaphore: Init failed with %s\n",
|
||||||
|
strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t BinarySemaphore::checkCount(sem_t* handle, uint8_t maxCount) {
|
ReturnValue_t BinarySemaphore::checkCount(sem_t* handle, uint8_t maxCount) {
|
||||||
|
@ -182,7 +182,7 @@ ReturnValue_t Clock::setLeapSeconds(const uint16_t leapSeconds_) {
|
|||||||
if(checkOrCreateClockMutex()!=HasReturnvaluesIF::RETURN_OK){
|
if(checkOrCreateClockMutex()!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex(MutexIF::TimeoutType::BLOCKING);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ ReturnValue_t Clock::getLeapSeconds(uint16_t* leapSeconds_) {
|
|||||||
if(timeMutex==NULL){
|
if(timeMutex==NULL){
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
ReturnValue_t result = timeMutex->lockMutex(MutexIF::BLOCKING);
|
ReturnValue_t result = timeMutex->lockMutex(MutexIF::TimeoutType::BLOCKING);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -209,13 +209,13 @@ ReturnValue_t Clock::getLeapSeconds(uint16_t* leapSeconds_) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Clock::checkOrCreateClockMutex(){
|
ReturnValue_t Clock::checkOrCreateClockMutex(){
|
||||||
if(timeMutex==NULL){
|
if(timeMutex == nullptr){
|
||||||
MutexFactory* mutexFactory = MutexFactory::instance();
|
MutexFactory* mutexFactory = MutexFactory::instance();
|
||||||
if (mutexFactory == NULL) {
|
if (mutexFactory == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
timeMutex = mutexFactory->createMutex();
|
timeMutex = mutexFactory->createMutex();
|
||||||
if (timeMutex == NULL) {
|
if (timeMutex == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#include "../../osal/linux/CountingSemaphore.h"
|
#include "../../osal/linux/CountingSemaphore.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterface.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
CountingSemaphore::CountingSemaphore(const uint8_t maxCount, uint8_t initCount):
|
CountingSemaphore::CountingSemaphore(const uint8_t maxCount, uint8_t initCount):
|
||||||
maxCount(maxCount), initCount(initCount) {
|
maxCount(maxCount), initCount(initCount) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "MessageQueue.h"
|
#include "MessageQueue.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterface.h"
|
||||||
#include "../../objectmanager/ObjectManagerIF.h"
|
#include "../../objectmanager/ObjectManagerIF.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -121,14 +121,16 @@ ReturnValue_t MessageQueue::handleError(mq_attr* attributes,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default: {
|
||||||
// Failed either the first time or the second time
|
// Failed either the first time or the second time
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "MessageQueue::MessageQueue: Creating Queue " << std::hex
|
sif::error << "MessageQueue::MessageQueue: Creating Queue " << name
|
||||||
<< name << std::dec << " failed with status: "
|
<< " failed with status: " << strerror(errno) << std::endl;
|
||||||
<< strerror(errno) << std::endl;
|
#else
|
||||||
|
sif::printError("MessageQueue::MessageQueue: Creating Queue %s"
|
||||||
|
" failed with status: %s\n", name, strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "PosixThread.h"
|
#include "PosixThread.h"
|
||||||
|
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterface.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -146,16 +146,22 @@ void PosixThread::createTask(void* (*fnc_)(void*), void* arg_) {
|
|||||||
strerror(status) << std::endl;
|
strerror(status) << std::endl;
|
||||||
#endif
|
#endif
|
||||||
if(errno == ENOMEM) {
|
if(errno == ENOMEM) {
|
||||||
uint64_t stackMb = stackSize/10e6;
|
size_t stackMb = stackSize/10e6;
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "PosixThread::createTask: Insufficient memory for"
|
sif::error << "PosixThread::createTask: Insufficient memory for"
|
||||||
" the requested " << stackMb << " MB" << std::endl;
|
" the requested " << stackMb << " MB" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("PosixThread::createTask: Insufficient memory for "
|
||||||
|
"the requested %zu MB\n", stackMb);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if(errno == EINVAL) {
|
else if(errno == EINVAL) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "PosixThread::createTask: Wrong alignment argument!"
|
sif::error << "PosixThread::createTask: Wrong alignment argument!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("PosixThread::createTask: "
|
||||||
|
"Wrong alignment argument!\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include "TcUnixUdpPollingTask.h"
|
#include "TcUnixUdpPollingTask.h"
|
||||||
#include "../../globalfunctions/arrayprinter.h"
|
#include "../../globalfunctions/arrayprinter.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
TcUnixUdpPollingTask::TcUnixUdpPollingTask(object_id_t objectId,
|
TcUnixUdpPollingTask::TcUnixUdpPollingTask(object_id_t objectId,
|
||||||
object_id_t tmtcUnixUdpBridge, size_t frameSize,
|
object_id_t tmtcUnixUdpBridge, size_t frameSize,
|
||||||
double timeoutSeconds): SystemObject(objectId),
|
double timeoutSeconds): SystemObject(objectId),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "TmTcUnixUdpBridge.h"
|
#include "TmTcUnixUdpBridge.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterface.h"
|
||||||
#include "../../ipc/MutexHelper.h"
|
#include "../../ipc/MutexHelper.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -188,12 +188,16 @@ void TmTcUnixUdpBridge::handleBindError() {
|
|||||||
|
|
||||||
void TmTcUnixUdpBridge::handleSendError() {
|
void TmTcUnixUdpBridge::handleSendError() {
|
||||||
switch(errno) {
|
switch(errno) {
|
||||||
default:
|
default: {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "TmTcUnixBridge::handleSendError: "
|
sif::error << "TmTcUnixBridge::handleSendError: "
|
||||||
<< strerror(errno) << std::endl;
|
<< strerror(errno) << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("TmTcUnixBridge::handleSendError: %s\n",
|
||||||
|
strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TmTcUnixUdpBridge::setClientAddressToAny(bool ipAddrAnySet){
|
void TmTcUnixUdpBridge::setClientAddressToAny(bool ipAddrAnySet){
|
||||||
|
@ -30,11 +30,11 @@ Mutex::~Mutex() {
|
|||||||
ReturnValue_t Mutex::lockMutex(TimeoutType timeoutType =
|
ReturnValue_t Mutex::lockMutex(TimeoutType timeoutType =
|
||||||
TimeoutType::BLOCKING, uint32_t timeoutMs) {
|
TimeoutType::BLOCKING, uint32_t timeoutMs) {
|
||||||
rtems_status_code status = RTEMS_INVALID_ID;
|
rtems_status_code status = RTEMS_INVALID_ID;
|
||||||
if(timeoutMs == MutexIF::TimeoutType::BLOCKING) {
|
if(timeoutType == MutexIF::TimeoutType::BLOCKING) {
|
||||||
status = rtems_semaphore_obtain(mutexId,
|
status = rtems_semaphore_obtain(mutexId,
|
||||||
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
|
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
|
||||||
}
|
}
|
||||||
else if(timeoutMs == MutexIF::TimeoutType::POLLING) {
|
else if(timeoutType == MutexIF::TimeoutType::POLLING) {
|
||||||
timeoutMs = RTEMS_NO_TIMEOUT;
|
timeoutMs = RTEMS_NO_TIMEOUT;
|
||||||
status = rtems_semaphore_obtain(mutexId,
|
status = rtems_semaphore_obtain(mutexId,
|
||||||
RTEMS_NO_WAIT, 0);
|
RTEMS_NO_WAIT, 0);
|
||||||
|
@ -65,8 +65,8 @@ ReturnValue_t Fuse::check() {
|
|||||||
set.read();
|
set.read();
|
||||||
if (!healthHelper.healthTable->isHealthy(getObjectId())) {
|
if (!healthHelper.healthTable->isHealthy(getObjectId())) {
|
||||||
setAllMonitorsToUnchecked();
|
setAllMonitorsToUnchecked();
|
||||||
set.commit(PoolVariableIF::INVALID);
|
set.setValidity(false, true);
|
||||||
return RETURN_OK;
|
return set.commit();
|
||||||
}
|
}
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
checkFuseState();
|
checkFuseState();
|
||||||
@ -206,7 +206,8 @@ float Fuse::getPower() {
|
|||||||
|
|
||||||
void Fuse::setDataPoolEntriesInvalid() {
|
void Fuse::setDataPoolEntriesInvalid() {
|
||||||
set.read();
|
set.read();
|
||||||
set.commit(PoolVariableIF::INVALID);
|
set.setValidity(false, true);
|
||||||
|
set.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Fuse::getParameter(uint8_t domainId, uint16_t parameterId,
|
ReturnValue_t Fuse::getParameter(uint8_t domainId, uint16_t parameterId,
|
||||||
|
@ -97,7 +97,8 @@ void PowerSensor::checkCommandQueue() {
|
|||||||
|
|
||||||
void PowerSensor::setDataPoolEntriesInvalid() {
|
void PowerSensor::setDataPoolEntriesInvalid() {
|
||||||
powerSensorSet.read();
|
powerSensorSet.read();
|
||||||
powerSensorSet.commit(PoolVariableIF::INVALID);
|
powerSensorSet.setValidity(false, true);
|
||||||
|
powerSensorSet.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
float PowerSensor::getPower() {
|
float PowerSensor::getPower() {
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
ReturnValue_t unitt::put_error(std::string errorId) {
|
ReturnValue_t unitt::put_error(std::string errorId) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "Unit Tester error: Failed at test ID "
|
sif::error << "Unit Tester error: Failed at test ID "
|
||||||
<< errorId << "\n" << std::flush;
|
<< errorId << std::endl;
|
||||||
#endif
|
#else
|
||||||
|
sif::printError("Unit Tester error: Failed at test ID 0x%08x", errorId);
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
#define UNITTEST_INTERNAL_UNITTDEFINITIONS_H_
|
#define UNITTEST_INTERNAL_UNITTDEFINITIONS_H_
|
||||||
|
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include "../../returnvalues/HasReturnvaluesIF.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterface.h"
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace tv {
|
namespace tv {
|
||||||
// POD test values
|
// POD test values
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
void testmutex::testMutex() {
|
void testmutex::testMutex() {
|
||||||
std::string id = "[testMutex]";
|
std::string id = "[testMutex]";
|
||||||
MutexIF* mutex = MutexFactory::instance()->createMutex();
|
MutexIF* mutex = MutexFactory::instance()->createMutex();
|
||||||
auto result = mutex->lockMutex(MutexIF::POLLING);
|
auto result = mutex->lockMutex(MutexIF::TimeoutType::POLLING);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
unitt::put_error(id);
|
unitt::put_error(id);
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,6 @@ add_subdirectory(action)
|
|||||||
add_subdirectory(container)
|
add_subdirectory(container)
|
||||||
add_subdirectory(osal)
|
add_subdirectory(osal)
|
||||||
add_subdirectory(serialize)
|
add_subdirectory(serialize)
|
||||||
|
add_subdirectory(datapoollocal)
|
||||||
add_subdirectory(storagemanager)
|
add_subdirectory(storagemanager)
|
||||||
|
|
||||||
|
@ -4,9 +4,12 @@
|
|||||||
|
|
||||||
#include <fsfw/action/ActionHelper.h>
|
#include <fsfw/action/ActionHelper.h>
|
||||||
#include <fsfw/ipc/CommandMessage.h>
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
|
#include <fsfw/unittest/tests/mocks/MessageQueueMockBase.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE( "Action Helper" , "[ActionHelper]") {
|
TEST_CASE( "Action Helper" , "[ActionHelper]") {
|
||||||
ActionHelperOwnerMockBase testDhMock;
|
ActionHelperOwnerMockBase testDhMock;
|
||||||
|
@ -48,85 +48,4 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class MessageQueueMockBase: public MessageQueueIF {
|
|
||||||
public:
|
|
||||||
MessageQueueId_t myQueueId = 0;
|
|
||||||
bool defaultDestSet = false;
|
|
||||||
bool messageSent = false;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wasMessageSent() {
|
|
||||||
bool tempMessageSent = messageSent;
|
|
||||||
messageSent = false;
|
|
||||||
return tempMessageSent;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ReturnValue_t reply( MessageQueueMessageIF* message ) {
|
|
||||||
messageSent = true;
|
|
||||||
lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
};
|
|
||||||
virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message,
|
|
||||||
MessageQueueId_t *receivedFrom) {
|
|
||||||
(*message) = lastMessage;
|
|
||||||
lastMessage.clear();
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message) {
|
|
||||||
memcpy(message->getBuffer(), lastMessage.getBuffer(),
|
|
||||||
message->getMessageSize());
|
|
||||||
lastMessage.clear();
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t flush(uint32_t* count) {
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual MessageQueueId_t getLastPartner() const {
|
|
||||||
return tconst::testQueueId;
|
|
||||||
}
|
|
||||||
virtual MessageQueueId_t getId() const {
|
|
||||||
return tconst::testQueueId;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t sendMessageFrom( MessageQueueId_t sendTo,
|
|
||||||
MessageQueueMessageIF* message, MessageQueueId_t sentFrom,
|
|
||||||
bool ignoreFault = false ) {
|
|
||||||
messageSent = true;
|
|
||||||
lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t sendMessage( MessageQueueId_t sendTo,
|
|
||||||
MessageQueueMessageIF* message, bool ignoreFault = false ) override {
|
|
||||||
messageSent = true;
|
|
||||||
lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t sendToDefaultFrom( MessageQueueMessageIF* message,
|
|
||||||
MessageQueueId_t sentFrom, bool ignoreFault = false ) {
|
|
||||||
messageSent = true;
|
|
||||||
lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual ReturnValue_t sendToDefault( MessageQueueMessageIF* message ) {
|
|
||||||
messageSent = true;
|
|
||||||
lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
|
||||||
virtual void setDefaultDestination(MessageQueueId_t defaultDestination) {
|
|
||||||
myQueueId = defaultDestination;
|
|
||||||
defaultDestSet = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual MessageQueueId_t getDefaultDestination() const {
|
|
||||||
return myQueueId;
|
|
||||||
}
|
|
||||||
virtual bool isDefaultDestinationSet() const {
|
|
||||||
return defaultDestSet;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
MessageQueueMessage lastMessage;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* UNITTEST_TESTFW_NEWTESTS_TESTACTIONHELPER_H_ */
|
#endif /* UNITTEST_TESTFW_NEWTESTS_TESTACTIONHELPER_H_ */
|
||||||
|
@ -1,45 +1,48 @@
|
|||||||
//#include <fsfw/container/PlacementFactory.h>
|
#include <fsfw/container/PlacementFactory.h>
|
||||||
//#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
//#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
//#include <fsfw/container/ArrayList.h>
|
#include <fsfw/container/ArrayList.h>
|
||||||
//
|
|
||||||
//#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
//#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
//
|
|
||||||
//TEST_CASE( "PlacementFactory Tests", "[TestPlacementFactory]") {
|
TEST_CASE( "PlacementFactory Tests", "[TestPlacementFactory]") {
|
||||||
// INFO("PlacementFactory Tests");
|
INFO("PlacementFactory Tests");
|
||||||
//
|
|
||||||
// const uint16_t element_sizes[3] = {sizeof(uint16_t), sizeof(uint32_t), sizeof(uint64_t)};
|
LocalPool::LocalPoolConfig poolCfg= {{1, sizeof(uint16_t)},
|
||||||
// const uint16_t n_elements[3] = {1, 1, 1};
|
{1, sizeof(uint32_t)}, {1, sizeof(uint64_t)}
|
||||||
// LocalPool<3> storagePool(0x1, element_sizes, n_elements, false, true);
|
};
|
||||||
// PlacementFactory factory(&storagePool);
|
//const uint16_t element_sizes[3] = {sizeof(uint16_t), sizeof(uint32_t), sizeof(uint64_t)};
|
||||||
//
|
//const uint16_t n_elements[3] = {1, 1, 1};
|
||||||
// SECTION("Pool overload"){
|
LocalPool storagePool(0x1, poolCfg, false, true);
|
||||||
// store_address_t address;
|
PlacementFactory factory(&storagePool);
|
||||||
// uint8_t* ptr = nullptr;
|
|
||||||
// REQUIRE(storagePool.getFreeElement(&address, sizeof(ArrayList<uint32_t, uint16_t>), &ptr)
|
SECTION("Pool overload"){
|
||||||
// == static_cast<int>(StorageManagerIF::DATA_TOO_LARGE));
|
store_address_t address;
|
||||||
// ArrayList<uint32_t, uint16_t>* list2 = factory.generate<ArrayList<uint32_t, uint16_t> >(80);
|
uint8_t* ptr = nullptr;
|
||||||
// REQUIRE(list2 == nullptr);
|
REQUIRE(storagePool.getFreeElement(&address, sizeof(ArrayList<uint32_t, uint16_t>), &ptr)
|
||||||
// }
|
== static_cast<int>(StorageManagerIF::DATA_TOO_LARGE));
|
||||||
//
|
ArrayList<uint32_t, uint16_t>* list2 = factory.generate<ArrayList<uint32_t, uint16_t> >(80);
|
||||||
// SECTION("Test generate and destroy"){
|
REQUIRE(list2 == nullptr);
|
||||||
// uint64_t* number = factory.generate<uint64_t>(32000);
|
}
|
||||||
// REQUIRE(number != nullptr);
|
|
||||||
// REQUIRE(*number == 32000);
|
SECTION("Test generate and destroy"){
|
||||||
// store_address_t address;
|
uint64_t* number = factory.generate<uint64_t>(32000);
|
||||||
// uint8_t* ptr = nullptr;
|
REQUIRE(number != nullptr);
|
||||||
// REQUIRE(storagePool.getFreeElement(&address, sizeof(uint64_t), &ptr)
|
REQUIRE(*number == 32000);
|
||||||
// == static_cast<int>(StorageManagerIF::DATA_TOO_LARGE));
|
store_address_t address;
|
||||||
// uint64_t* number2 = factory.generate<uint64_t>(12345);
|
uint8_t* ptr = nullptr;
|
||||||
// REQUIRE(number2 == nullptr);
|
REQUIRE(storagePool.getFreeElement(&address, sizeof(uint64_t), &ptr)
|
||||||
// REQUIRE(factory.destroy(number) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
== static_cast<int>(StorageManagerIF::DATA_TOO_LARGE));
|
||||||
// REQUIRE(storagePool.getFreeElement(&address, sizeof(uint64_t), &ptr)
|
uint64_t* number2 = factory.generate<uint64_t>(12345);
|
||||||
// == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
REQUIRE(number2 == nullptr);
|
||||||
// REQUIRE(storagePool.deleteData(address) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
REQUIRE(factory.destroy(number) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
||||||
//
|
REQUIRE(storagePool.getFreeElement(&address, sizeof(uint64_t), &ptr)
|
||||||
// //Check that PlacementFactory checks for nullptr
|
== static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
||||||
// ptr = nullptr;
|
REQUIRE(storagePool.deleteData(address) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
||||||
// REQUIRE(factory.destroy(ptr) == static_cast<int>(HasReturnvaluesIF::RETURN_FAILED));
|
|
||||||
// }
|
//Check that PlacementFactory checks for nullptr
|
||||||
//}
|
ptr = nullptr;
|
||||||
|
REQUIRE(factory.destroy(ptr) == static_cast<int>(HasReturnvaluesIF::RETURN_FAILED));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
6
unittest/tests/datapoollocal/CMakeLists.txt
Normal file
6
unittest/tests/datapoollocal/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
LocalPoolVariableTest.cpp
|
||||||
|
LocalPoolVectorTest.cpp
|
||||||
|
DataSetTest.cpp
|
||||||
|
LocalPoolManagerTest.cpp
|
||||||
|
)
|
23
unittest/tests/datapoollocal/DataSetTest.cpp
Normal file
23
unittest/tests/datapoollocal/DataSetTest.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
|
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
TEST_CASE("LocalDataSet" , "[LocDataSetTest]") {
|
||||||
|
LocalPoolOwnerBase* poolOwner = objectManager->
|
||||||
|
get<LocalPoolOwnerBase>(objects::TEST_LOCAL_POOL_OWNER_BASE);
|
||||||
|
REQUIRE(poolOwner != nullptr);
|
||||||
|
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
||||||
|
== retval::CATCH_OK);
|
||||||
|
const uint32_t setId = 0;
|
||||||
|
SECTION("BasicTest") {
|
||||||
|
StaticLocalDataSet<3> localSet = StaticLocalDataSet<3>(
|
||||||
|
sid_t(objects::TEST_LOCAL_POOL_OWNER_BASE, setId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
122
unittest/tests/datapoollocal/LocalPoolManagerTest.cpp
Normal file
122
unittest/tests/datapoollocal/LocalPoolManagerTest.cpp
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
|
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
||||||
|
#include <fsfw/ipc/CommandMessageCleaner.h>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("LocalPoolManagerTest" , "[LocManTest]") {
|
||||||
|
LocalPoolOwnerBase* poolOwner = objectManager->
|
||||||
|
get<LocalPoolOwnerBase>(objects::TEST_LOCAL_POOL_OWNER_BASE);
|
||||||
|
REQUIRE(poolOwner != nullptr);
|
||||||
|
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
||||||
|
== retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->dataset.assignPointers() == retval::CATCH_OK);
|
||||||
|
MessageQueueMockBase* mqMock = poolOwner->getMockQueueHandle();
|
||||||
|
REQUIRE(mqMock != nullptr);
|
||||||
|
CommandMessage messageSent;
|
||||||
|
uint8_t messagesSent = 0;
|
||||||
|
|
||||||
|
|
||||||
|
SECTION("BasicTest") {
|
||||||
|
// Subscribe for message generation on update.
|
||||||
|
REQUIRE(poolOwner->subscribeWrapperSetUpdate() == retval::CATCH_OK);
|
||||||
|
// Subscribe for an update message.
|
||||||
|
poolOwner->dataset.setChanged(true);
|
||||||
|
// Now the update message should be generated.
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
REQUIRE(mqMock->wasMessageSent() == true);
|
||||||
|
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
|
|
||||||
|
// Should have been reset.
|
||||||
|
CHECK(poolOwner->dataset.hasChanged() == false);
|
||||||
|
// Set changed again, result should be the same.
|
||||||
|
poolOwner->dataset.setChanged(true);
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
|
||||||
|
REQUIRE(mqMock->wasMessageSent(&messagesSent) == true);
|
||||||
|
CHECK(messagesSent == 1);
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
|
|
||||||
|
// now subscribe for set update HK as well.
|
||||||
|
REQUIRE(poolOwner->subscribeWrapperSetUpdateHk() == retval::CATCH_OK);
|
||||||
|
poolOwner->dataset.setChanged(true);
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
REQUIRE(mqMock->wasMessageSent(&messagesSent) == true);
|
||||||
|
CHECK(messagesSent == 2);
|
||||||
|
// first message sent should be the update notification, considering
|
||||||
|
// the internal list is a vector checked in insertion order.
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
|
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::HK_REPORT));
|
||||||
|
// clear message to avoid memory leak, our mock won't do it for us (yet)
|
||||||
|
CommandMessageCleaner::clearCommandMessage(&messageSent);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("AdvancedTests") {
|
||||||
|
// we need to reset the subscription list because the pool owner
|
||||||
|
// is a global object.
|
||||||
|
poolOwner->resetSubscriptionList();
|
||||||
|
// Subscribe for variable update as well
|
||||||
|
REQUIRE(not poolOwner->dataset.hasChanged());
|
||||||
|
REQUIRE(poolOwner->subscribeWrapperVariableUpdate(lpool::uint8VarId) ==
|
||||||
|
retval::CATCH_OK);
|
||||||
|
lp_var_t<uint8_t>* poolVar = dynamic_cast<lp_var_t<uint8_t>*>(
|
||||||
|
poolOwner->getPoolObjectHandle(lpool::uint8VarId));
|
||||||
|
REQUIRE(poolVar != nullptr);
|
||||||
|
poolVar->setChanged(true);
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
|
||||||
|
// Check update notification was sent.
|
||||||
|
REQUIRE(mqMock->wasMessageSent(&messagesSent) == true);
|
||||||
|
CHECK(messagesSent == 1);
|
||||||
|
// Should have been reset.
|
||||||
|
CHECK(poolVar->hasChanged() == false);
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_VARIABLE));
|
||||||
|
|
||||||
|
// now subscribe for the dataset update (HK and update) again
|
||||||
|
REQUIRE(poolOwner->subscribeWrapperSetUpdate() == retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->subscribeWrapperSetUpdateHk() == retval::CATCH_OK);
|
||||||
|
|
||||||
|
poolOwner->dataset.setChanged(true);
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
// now two messages should be sent.
|
||||||
|
REQUIRE(mqMock->wasMessageSent(&messagesSent) == true);
|
||||||
|
CHECK(messagesSent == 2);
|
||||||
|
mqMock->clearMessages(true);
|
||||||
|
|
||||||
|
poolOwner->dataset.setChanged(true);
|
||||||
|
poolVar->setChanged(true);
|
||||||
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
// now three messages should be sent.
|
||||||
|
REQUIRE(mqMock->wasMessageSent(&messagesSent) == true);
|
||||||
|
CHECK(messagesSent == 3);
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_VARIABLE));
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
|
HousekeepingMessage::HK_REPORT));
|
||||||
|
CommandMessageCleaner::clearCommandMessage(&messageSent);
|
||||||
|
REQUIRE(mqMock->receiveMessage(&messageSent) ==
|
||||||
|
static_cast<int>(MessageQueueIF::EMPTY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
206
unittest/tests/datapoollocal/LocalPoolOwnerBase.h
Normal file
206
unittest/tests/datapoollocal/LocalPoolOwnerBase.h
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
#ifndef FSFW_UNITTEST_TESTS_DATAPOOLLOCAL_LOCALPOOLOWNERBASE_H_
|
||||||
|
#define FSFW_UNITTEST_TESTS_DATAPOOLLOCAL_LOCALPOOLOWNERBASE_H_
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
|
#include <fsfw/datapoollocal/LocalDataSet.h>
|
||||||
|
#include <fsfw/objectmanager/SystemObject.h>
|
||||||
|
#include <fsfw/datapoollocal/LocalPoolVariable.h>
|
||||||
|
#include <fsfw/datapoollocal/LocalPoolVector.h>
|
||||||
|
#include <fsfw/ipc/QueueFactory.h>
|
||||||
|
#include <testcfg/objects/systemObjectList.h>
|
||||||
|
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
||||||
|
#include <fsfw/unittest/tests/mocks/MessageQueueMockBase.h>
|
||||||
|
|
||||||
|
namespace lpool {
|
||||||
|
static constexpr lp_id_t uint8VarId = 0;
|
||||||
|
static constexpr lp_id_t floatVarId = 1;
|
||||||
|
static constexpr lp_id_t uint32VarId = 2;
|
||||||
|
static constexpr lp_id_t uint16Vec3Id = 3;
|
||||||
|
static constexpr lp_id_t int64Vec2Id = 4;
|
||||||
|
|
||||||
|
static constexpr uint32_t testSetId = 0;
|
||||||
|
static constexpr uint8_t dataSetMaxVariables = 10;
|
||||||
|
static const sid_t testSid = sid_t(objects::TEST_LOCAL_POOL_OWNER_BASE,
|
||||||
|
testSetId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LocalPoolTestDataSet: public LocalDataSet {
|
||||||
|
public:
|
||||||
|
LocalPoolTestDataSet(HasLocalDataPoolIF* owner, uint32_t setId):
|
||||||
|
LocalDataSet(owner, setId, lpool::dataSetMaxVariables) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t assignPointers() {
|
||||||
|
PoolVariableIF** rawVarArray = getContainer();
|
||||||
|
localPoolVarUint8 = dynamic_cast<lp_var_t<uint8_t>*>(rawVarArray[0]);
|
||||||
|
localPoolVarFloat = dynamic_cast<lp_var_t<float>*>(rawVarArray[1]);
|
||||||
|
localPoolUint16Vec = dynamic_cast<lp_vec_t<uint16_t, 3>*>(
|
||||||
|
rawVarArray[2]);
|
||||||
|
if(localPoolVarUint8 == nullptr or localPoolVarFloat == nullptr or
|
||||||
|
localPoolUint16Vec == nullptr) {
|
||||||
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
lp_var_t<uint8_t>* localPoolVarUint8 = nullptr;
|
||||||
|
lp_var_t<float>* localPoolVarFloat = nullptr;
|
||||||
|
lp_vec_t<uint16_t, 3>* localPoolUint16Vec = nullptr;
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class LocalPoolOwnerBase: public SystemObject, public HasLocalDataPoolIF {
|
||||||
|
public:
|
||||||
|
LocalPoolOwnerBase(
|
||||||
|
object_id_t objectId = objects::TEST_LOCAL_POOL_OWNER_BASE):
|
||||||
|
SystemObject(objectId), hkManager(this, messageQueue),
|
||||||
|
dataset(this, lpool::testSetId) {
|
||||||
|
messageQueue = new MessageQueueMockBase();
|
||||||
|
}
|
||||||
|
|
||||||
|
~LocalPoolOwnerBase() {
|
||||||
|
QueueFactory::instance()->deleteMessageQueue(messageQueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
object_id_t getObjectId() const override {
|
||||||
|
return SystemObject::getObjectId();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t initializeHkManager() {
|
||||||
|
if(not initialized) {
|
||||||
|
initialized = true;
|
||||||
|
return hkManager.initialize(messageQueue);
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t initializeHkManagerAfterTaskCreation() {
|
||||||
|
if(not initializedAfterTaskCreation) {
|
||||||
|
initializedAfterTaskCreation = true;
|
||||||
|
return hkManager.initializeAfterTaskCreation();
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Command queue for housekeeping messages. */
|
||||||
|
MessageQueueId_t getCommandQueue() const override {
|
||||||
|
return messageQueue->getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is called by initializeAfterTaskCreation of the HK manager.
|
||||||
|
virtual ReturnValue_t initializeLocalDataPool(
|
||||||
|
localpool::DataPool& localDataPoolMap,
|
||||||
|
LocalDataPoolManager& poolManager) {
|
||||||
|
// Default initialization empty for now.
|
||||||
|
localDataPoolMap.emplace(lpool::uint8VarId,
|
||||||
|
new PoolEntry<uint8_t>({0}));
|
||||||
|
localDataPoolMap.emplace(lpool::floatVarId,
|
||||||
|
new PoolEntry<float>({0}));
|
||||||
|
localDataPoolMap.emplace(lpool::uint32VarId,
|
||||||
|
new PoolEntry<uint32_t>({0}));
|
||||||
|
|
||||||
|
localDataPoolMap.emplace(lpool::uint16Vec3Id,
|
||||||
|
new PoolEntry<uint16_t>({0, 0, 0}));
|
||||||
|
localDataPoolMap.emplace(lpool::int64Vec2Id,
|
||||||
|
new PoolEntry<int64_t>({0, 0}));
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function can be used by data pool consumers to retrieve a handle
|
||||||
|
* which allows subscriptions to dataset and variable updates.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() override {
|
||||||
|
return &hkManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual AccessPoolManagerIF* getAccessorHandle() override {
|
||||||
|
return &hkManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t getPeriodicOperationFrequency() const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is used by the pool manager to get a valid dataset
|
||||||
|
* from a SID
|
||||||
|
* @param sid Corresponding structure ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override {
|
||||||
|
return &dataset;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual LocalPoolObjectBase* getPoolObjectHandle(
|
||||||
|
lp_id_t localPoolId) override {
|
||||||
|
if(localPoolId == lpool::uint8VarId) {
|
||||||
|
return &testUint8;
|
||||||
|
}
|
||||||
|
else if(localPoolId == lpool::uint16Vec3Id) {
|
||||||
|
return &testUint16Vec;
|
||||||
|
}
|
||||||
|
else if(localPoolId == lpool::floatVarId) {
|
||||||
|
return &testFloat;
|
||||||
|
}
|
||||||
|
else if(localPoolId == lpool::int64Vec2Id) {
|
||||||
|
return &testInt64Vec;
|
||||||
|
}
|
||||||
|
else if(localPoolId == lpool::uint32VarId) {
|
||||||
|
return &testUint32;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return &testUint8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageQueueMockBase* getMockQueueHandle() const {
|
||||||
|
return dynamic_cast<MessageQueueMockBase*>(messageQueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t subscribeWrapperSetUpdate() {
|
||||||
|
return hkManager.subscribeForSetUpdateMessages(lpool::testSetId,
|
||||||
|
objects::NO_OBJECT, MessageQueueIF::NO_QUEUE, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t subscribeWrapperSetUpdateHk(bool diagnostics = false) {
|
||||||
|
return hkManager.subscribeForUpdatePackets(lpool::testSid, diagnostics,
|
||||||
|
false, objects::HK_RECEIVER_MOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t subscribeWrapperVariableUpdate(lp_id_t localPoolId) {
|
||||||
|
return hkManager.subscribeForVariableUpdateMessages(localPoolId,
|
||||||
|
MessageQueueIF::NO_QUEUE, objects::NO_OBJECT, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetSubscriptionList() {
|
||||||
|
hkManager.clearReceiversList();
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalDataPoolManager hkManager;
|
||||||
|
LocalPoolTestDataSet dataset;
|
||||||
|
private:
|
||||||
|
|
||||||
|
lp_var_t<uint8_t> testUint8 = lp_var_t<uint8_t>(this, lpool::uint8VarId,
|
||||||
|
&dataset);
|
||||||
|
lp_var_t<float> testFloat = lp_var_t<float>(this, lpool::floatVarId,
|
||||||
|
&dataset);
|
||||||
|
lp_var_t<uint32_t> testUint32 = lp_var_t<uint32_t>(this, lpool::uint32VarId);
|
||||||
|
|
||||||
|
lp_vec_t<uint16_t, 3> testUint16Vec = lp_vec_t<uint16_t, 3>(this,
|
||||||
|
lpool::uint16Vec3Id, &dataset);
|
||||||
|
lp_vec_t<int64_t, 2> testInt64Vec = lp_vec_t<int64_t, 2>(this,
|
||||||
|
lpool::int64Vec2Id);
|
||||||
|
|
||||||
|
MessageQueueIF* messageQueue = nullptr;
|
||||||
|
|
||||||
|
bool initialized = false;
|
||||||
|
bool initializedAfterTaskCreation = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFW_UNITTEST_TESTS_DATAPOOLLOCAL_LOCALPOOLOWNERBASE_H_ */
|
123
unittest/tests/datapoollocal/LocalPoolVariableTest.cpp
Normal file
123
unittest/tests/datapoollocal/LocalPoolVariableTest.cpp
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("LocalPoolVariable" , "[LocPoolVarTest]") {
|
||||||
|
LocalPoolOwnerBase* poolOwner = objectManager->
|
||||||
|
get<LocalPoolOwnerBase>(objects::TEST_LOCAL_POOL_OWNER_BASE);
|
||||||
|
REQUIRE(poolOwner != nullptr);
|
||||||
|
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
||||||
|
== retval::CATCH_OK);
|
||||||
|
|
||||||
|
SECTION("Basic Tests") {
|
||||||
|
// very basic test.
|
||||||
|
lp_var_t<uint8_t> testVariable = lp_var_t<uint8_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId);
|
||||||
|
REQUIRE(testVariable.read() == retval::CATCH_OK);
|
||||||
|
CHECK(testVariable.value == 0);
|
||||||
|
testVariable.value = 5;
|
||||||
|
REQUIRE(testVariable.commit() == retval::CATCH_OK);
|
||||||
|
REQUIRE(testVariable.read() == retval::CATCH_OK);
|
||||||
|
REQUIRE(testVariable.value == 5);
|
||||||
|
CHECK(not testVariable.isValid());
|
||||||
|
testVariable.setValid(true);
|
||||||
|
CHECK(testVariable.isValid());
|
||||||
|
CHECK(testVariable.commit(true) == retval::CATCH_OK);
|
||||||
|
|
||||||
|
testVariable.setReadWriteMode(pool_rwm_t::VAR_READ);
|
||||||
|
CHECK(testVariable.getReadWriteMode() == pool_rwm_t::VAR_READ);
|
||||||
|
testVariable.setReadWriteMode(pool_rwm_t::VAR_READ_WRITE);
|
||||||
|
|
||||||
|
testVariable.setDataPoolId(22);
|
||||||
|
CHECK(testVariable.getDataPoolId() == 22);
|
||||||
|
testVariable.setDataPoolId(lpool::uint8VarId);
|
||||||
|
|
||||||
|
testVariable.setChanged(true);
|
||||||
|
CHECK(testVariable.hasChanged());
|
||||||
|
testVariable.setChanged(false);
|
||||||
|
|
||||||
|
gp_id_t globPoolId(objects::TEST_LOCAL_POOL_OWNER_BASE,
|
||||||
|
lpool::uint8VarId);
|
||||||
|
lp_var_t<uint8_t> testVariable2 = lp_var_t<uint8_t>(globPoolId);
|
||||||
|
REQUIRE(testVariable2.read() == retval::CATCH_OK);
|
||||||
|
CHECK(testVariable2 == 5);
|
||||||
|
CHECK(testVariable == testVariable2);
|
||||||
|
testVariable = 10;
|
||||||
|
CHECK(testVariable != 5);
|
||||||
|
//CHECK(not testVariable != testVariable2);
|
||||||
|
uint8_t variableRaw = 0;
|
||||||
|
uint8_t* varPtr = &variableRaw;
|
||||||
|
size_t maxSize = testVariable.getSerializedSize();
|
||||||
|
CHECK(maxSize == 1);
|
||||||
|
size_t serSize = 0;
|
||||||
|
CHECK(testVariable.serialize(&varPtr, &serSize, maxSize,
|
||||||
|
SerializeIF::Endianness::MACHINE) == retval::CATCH_OK);
|
||||||
|
CHECK(variableRaw == 10);
|
||||||
|
const uint8_t* varConstPtr = &variableRaw;
|
||||||
|
testVariable = 5;
|
||||||
|
CHECK(testVariable.deSerialize(&varConstPtr, &serSize,
|
||||||
|
SerializeIF::Endianness::MACHINE) == retval::CATCH_OK);
|
||||||
|
CHECK(testVariable == 10);
|
||||||
|
CHECK(testVariable != testVariable2);
|
||||||
|
CHECK(testVariable2 < testVariable);
|
||||||
|
CHECK(testVariable2 < 10);
|
||||||
|
CHECK(testVariable > 5);
|
||||||
|
CHECK(testVariable > testVariable2);
|
||||||
|
variableRaw = static_cast<uint8_t>(testVariable2);
|
||||||
|
CHECK(variableRaw == 5);
|
||||||
|
|
||||||
|
CHECK(testVariable == 10);
|
||||||
|
testVariable = testVariable2;
|
||||||
|
CHECK(testVariable == 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("ErrorHandling") {
|
||||||
|
|
||||||
|
// not try to use a local pool variable which does not exist
|
||||||
|
lp_var_t<uint8_t> invalidVariable = lp_var_t<uint8_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, 0xffffffff);
|
||||||
|
REQUIRE(invalidVariable.read() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_NOT_FOUND));
|
||||||
|
|
||||||
|
REQUIRE(invalidVariable.commit() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_NOT_FOUND));
|
||||||
|
// now try to access with wrong type
|
||||||
|
lp_var_t<int8_t> invalidVariable2 = lp_var_t<int8_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId);
|
||||||
|
REQUIRE(invalidVariable2.read() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_TYPE_CONFLICT));
|
||||||
|
|
||||||
|
lp_var_t<uint8_t> readOnlyVar = lp_var_t<uint8_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId,
|
||||||
|
nullptr, pool_rwm_t::VAR_READ);
|
||||||
|
REQUIRE(readOnlyVar.commit() ==
|
||||||
|
static_cast<int>(PoolVariableIF::INVALID_READ_WRITE_MODE));
|
||||||
|
lp_var_t<uint8_t> writeOnlyVar = lp_var_t<uint8_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId,
|
||||||
|
nullptr, pool_rwm_t::VAR_WRITE);
|
||||||
|
REQUIRE(writeOnlyVar.read() == static_cast<int>(
|
||||||
|
PoolVariableIF::INVALID_READ_WRITE_MODE));
|
||||||
|
|
||||||
|
lp_var_t<uint32_t> uint32tVar = lp_var_t<uint32_t>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint32VarId);
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "LocalPoolVariable printout: " <<uint32tVar << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// for code coverage. If program does not crash -> OK
|
||||||
|
lp_var_t<uint8_t> invalidObjectVar = lp_var_t<uint8_t>(
|
||||||
|
0xffffffff, lpool::uint8VarId);
|
||||||
|
gp_id_t globPoolId(0xffffffff,
|
||||||
|
lpool::uint8VarId);
|
||||||
|
lp_var_t<uint8_t> invalidObjectVar2 = lp_var_t<uint8_t>(globPoolId);
|
||||||
|
lp_var_t<uint8_t> invalidObjectVar3 = lp_var_t<uint8_t>(nullptr,
|
||||||
|
lpool::uint8VarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
120
unittest/tests/datapoollocal/LocalPoolVectorTest.cpp
Normal file
120
unittest/tests/datapoollocal/LocalPoolVectorTest.cpp
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
TEST_CASE("LocalPoolVector" , "[LocPoolVecTest]") {
|
||||||
|
LocalPoolOwnerBase* poolOwner = objectManager->
|
||||||
|
get<LocalPoolOwnerBase>(objects::TEST_LOCAL_POOL_OWNER_BASE);
|
||||||
|
REQUIRE(poolOwner != nullptr);
|
||||||
|
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
||||||
|
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
||||||
|
== retval::CATCH_OK);
|
||||||
|
|
||||||
|
SECTION("BasicTest") {
|
||||||
|
// very basic test.
|
||||||
|
lp_vec_t<uint16_t, 3> testVector = lp_vec_t<uint16_t, 3>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id);
|
||||||
|
REQUIRE(testVector.read() == retval::CATCH_OK);
|
||||||
|
testVector.value[0] = 5;
|
||||||
|
testVector.value[1] = 232;
|
||||||
|
testVector.value[2] = 32023;
|
||||||
|
|
||||||
|
REQUIRE(testVector.commit(true) == retval::CATCH_OK);
|
||||||
|
CHECK(testVector.isValid());
|
||||||
|
|
||||||
|
testVector.value[0] = 0;
|
||||||
|
testVector.value[1] = 0;
|
||||||
|
testVector.value[2] = 0;
|
||||||
|
|
||||||
|
CHECK(testVector.read() == retval::CATCH_OK);
|
||||||
|
CHECK(testVector.value[0] == 5);
|
||||||
|
CHECK(testVector.value[1] == 232);
|
||||||
|
CHECK(testVector.value[2] == 32023);
|
||||||
|
|
||||||
|
CHECK(testVector[0] == 5);
|
||||||
|
|
||||||
|
// This is invalid access, so the last value will be set instead.
|
||||||
|
// (we can't throw exceptions)
|
||||||
|
testVector[4] = 12;
|
||||||
|
CHECK(testVector[2] == 12);
|
||||||
|
CHECK(testVector.commit() == retval::CATCH_OK);
|
||||||
|
|
||||||
|
// Use read-only reference.
|
||||||
|
const lp_vec_t<uint16_t, 3>& roTestVec = testVector;
|
||||||
|
uint16_t valueOne = roTestVec[0];
|
||||||
|
CHECK(valueOne == 5);
|
||||||
|
|
||||||
|
uint16_t lastVal = roTestVec[25];
|
||||||
|
CHECK(lastVal == 12);
|
||||||
|
|
||||||
|
size_t maxSize = testVector.getSerializedSize();
|
||||||
|
CHECK(maxSize == 6);
|
||||||
|
|
||||||
|
uint16_t serializedVector[3];
|
||||||
|
uint8_t* vecPtr = reinterpret_cast<uint8_t*>(serializedVector);
|
||||||
|
size_t serSize = 0;
|
||||||
|
REQUIRE(testVector.serialize(&vecPtr, &serSize,
|
||||||
|
maxSize, SerializeIF::Endianness::MACHINE) == retval::CATCH_OK);
|
||||||
|
|
||||||
|
CHECK(serSize == 6);
|
||||||
|
CHECK(serializedVector[0] == 5);
|
||||||
|
CHECK(serializedVector[1] == 232);
|
||||||
|
CHECK(serializedVector[2] == 12);
|
||||||
|
|
||||||
|
maxSize = 1;
|
||||||
|
REQUIRE(testVector.serialize(&vecPtr, &serSize,
|
||||||
|
maxSize, SerializeIF::Endianness::MACHINE) ==
|
||||||
|
static_cast<int>(SerializeIF::BUFFER_TOO_SHORT));
|
||||||
|
|
||||||
|
serializedVector[0] = 16;
|
||||||
|
serializedVector[1] = 7832;
|
||||||
|
serializedVector[2] = 39232;
|
||||||
|
|
||||||
|
const uint8_t* constVecPtr = reinterpret_cast<const uint8_t*>(
|
||||||
|
serializedVector);
|
||||||
|
REQUIRE(testVector.deSerialize(&constVecPtr, &serSize,
|
||||||
|
SerializeIF::Endianness::MACHINE) == retval::CATCH_OK);
|
||||||
|
CHECK(testVector[0] == 16);
|
||||||
|
CHECK(testVector[1] == 7832);
|
||||||
|
CHECK(testVector[2] == 39232);
|
||||||
|
|
||||||
|
serSize = 1;
|
||||||
|
REQUIRE(testVector.deSerialize(&constVecPtr, &serSize,
|
||||||
|
SerializeIF::Endianness::MACHINE) ==
|
||||||
|
static_cast<int>(SerializeIF::STREAM_TOO_SHORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("ErrorHandling") {
|
||||||
|
// not try to use a local pool variable which does not exist
|
||||||
|
lp_vec_t<uint16_t, 3> invalidVector = lp_vec_t<uint16_t, 3>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, 0xffffffff);
|
||||||
|
REQUIRE(invalidVector.read() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_NOT_FOUND));
|
||||||
|
REQUIRE(invalidVector.commit() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_NOT_FOUND));
|
||||||
|
|
||||||
|
// now try to access with wrong type
|
||||||
|
lp_vec_t<uint32_t, 3> invalidVector2 = lp_vec_t<uint32_t, 3>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id);
|
||||||
|
REQUIRE(invalidVector2.read() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_TYPE_CONFLICT));
|
||||||
|
REQUIRE(invalidVector2.commit() ==
|
||||||
|
static_cast<int>(localpool::POOL_ENTRY_TYPE_CONFLICT));
|
||||||
|
|
||||||
|
lp_vec_t<uint16_t, 3> writeOnlyVec = lp_vec_t<uint16_t, 3>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id,
|
||||||
|
nullptr, pool_rwm_t::VAR_WRITE);
|
||||||
|
REQUIRE(writeOnlyVec.read() ==
|
||||||
|
static_cast<int>(PoolVariableIF::INVALID_READ_WRITE_MODE));
|
||||||
|
|
||||||
|
lp_vec_t<uint16_t, 3> readOnlyVec = lp_vec_t<uint16_t, 3>(
|
||||||
|
objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id,
|
||||||
|
nullptr, pool_rwm_t::VAR_READ);
|
||||||
|
REQUIRE(readOnlyVec.commit() ==
|
||||||
|
static_cast<int>(PoolVariableIF::INVALID_READ_WRITE_MODE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
20
unittest/tests/mocks/HkReceiverMock.h
Normal file
20
unittest/tests/mocks/HkReceiverMock.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef FSFW_UNITTEST_TESTS_MOCKS_HKRECEIVERMOCK_H_
|
||||||
|
#define FSFW_UNITTEST_TESTS_MOCKS_HKRECEIVERMOCK_H_
|
||||||
|
|
||||||
|
#include <fsfw/housekeeping/AcceptsHkPacketsIF.h>
|
||||||
|
#include <fsfw/objectmanager/SystemObject.h>
|
||||||
|
|
||||||
|
class HkReceiverMock: public SystemObject, public AcceptsHkPacketsIF {
|
||||||
|
public:
|
||||||
|
HkReceiverMock(object_id_t objectId): SystemObject(objectId) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageQueueId_t getHkQueue() const {
|
||||||
|
return MessageQueueIF::NO_QUEUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFW_UNITTEST_TESTS_MOCKS_HKRECEIVERMOCK_H_ */
|
121
unittest/tests/mocks/MessageQueueMockBase.h
Normal file
121
unittest/tests/mocks/MessageQueueMockBase.h
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
#ifndef FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
||||||
|
#define FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
||||||
|
|
||||||
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
|
#include <fsfw/ipc/MessageQueueMessage.h>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
class MessageQueueMockBase: public MessageQueueIF {
|
||||||
|
public:
|
||||||
|
MessageQueueId_t myQueueId = tconst::testQueueId;
|
||||||
|
uint8_t messageSentCounter = 0;
|
||||||
|
bool defaultDestSet = false;
|
||||||
|
bool messageSent = false;
|
||||||
|
|
||||||
|
|
||||||
|
bool wasMessageSent(uint8_t* messageSentCounter = nullptr,
|
||||||
|
bool resetCounter = true) {
|
||||||
|
bool tempMessageSent = messageSent;
|
||||||
|
messageSent = false;
|
||||||
|
if(messageSentCounter != nullptr) {
|
||||||
|
*messageSentCounter = this->messageSentCounter;
|
||||||
|
}
|
||||||
|
if(resetCounter) {
|
||||||
|
this->messageSentCounter = 0;
|
||||||
|
}
|
||||||
|
return tempMessageSent;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ReturnValue_t reply( MessageQueueMessageIF* message ) {
|
||||||
|
//messageSent = true;
|
||||||
|
//lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
||||||
|
return sendMessage(myQueueId, message);
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
};
|
||||||
|
virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message,
|
||||||
|
MessageQueueId_t *receivedFrom) {
|
||||||
|
return receiveMessage(message);
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t receiveMessage(MessageQueueMessageIF* message) {
|
||||||
|
if(messagesSentQueue.empty()) {
|
||||||
|
return MessageQueueIF::EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::memcpy(message->getBuffer(), messagesSentQueue.front().getBuffer(),
|
||||||
|
message->getMessageSize());
|
||||||
|
messagesSentQueue.pop();
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t flush(uint32_t* count) {
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
virtual MessageQueueId_t getLastPartner() const {
|
||||||
|
return myQueueId;
|
||||||
|
}
|
||||||
|
virtual MessageQueueId_t getId() const {
|
||||||
|
return myQueueId;
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t sendMessageFrom( MessageQueueId_t sendTo,
|
||||||
|
MessageQueueMessageIF* message, MessageQueueId_t sentFrom,
|
||||||
|
bool ignoreFault = false ) {
|
||||||
|
//messageSent = true;
|
||||||
|
//lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
||||||
|
//return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
return sendMessage(sendTo, message);
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t sendToDefaultFrom( MessageQueueMessageIF* message,
|
||||||
|
MessageQueueId_t sentFrom, bool ignoreFault = false ) {
|
||||||
|
//messageSent = true;
|
||||||
|
//lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
||||||
|
//return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
return sendMessage(myQueueId, message);
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t sendToDefault( MessageQueueMessageIF* message ) {
|
||||||
|
//messageSent = true;
|
||||||
|
//lastMessage = *(dynamic_cast<MessageQueueMessage*>(message));
|
||||||
|
return sendMessage(myQueueId, message);
|
||||||
|
}
|
||||||
|
virtual ReturnValue_t sendMessage( MessageQueueId_t sendTo,
|
||||||
|
MessageQueueMessageIF* message, bool ignoreFault = false ) override {
|
||||||
|
messageSent = true;
|
||||||
|
messageSentCounter++;
|
||||||
|
MessageQueueMessage& messageRef = *(
|
||||||
|
dynamic_cast<MessageQueueMessage*>(message));
|
||||||
|
messagesSentQueue.push(messageRef);
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
virtual void setDefaultDestination(MessageQueueId_t defaultDestination) {
|
||||||
|
myQueueId = defaultDestination;
|
||||||
|
defaultDestSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual MessageQueueId_t getDefaultDestination() const {
|
||||||
|
return myQueueId;
|
||||||
|
}
|
||||||
|
virtual bool isDefaultDestinationSet() const {
|
||||||
|
return defaultDestSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearMessages(bool clearCommandMessages = true) {
|
||||||
|
while(not messagesSentQueue.empty()) {
|
||||||
|
if(clearCommandMessages) {
|
||||||
|
CommandMessage message;
|
||||||
|
std::memcpy(message.getBuffer(),
|
||||||
|
messagesSentQueue.front().getBuffer(),
|
||||||
|
message.getMessageSize());
|
||||||
|
message.clear();
|
||||||
|
}
|
||||||
|
messagesSentQueue.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::queue<MessageQueueMessage> messagesSentQueue;
|
||||||
|
//MessageQueueMessage lastMessage;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_ */
|
@ -1,161 +1,161 @@
|
|||||||
//#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
//#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
//#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
//#include <array>
|
#include <array>
|
||||||
//
|
#include <cstring>
|
||||||
//TEST_CASE( "New Accessor" , "[NewAccessor]") {
|
|
||||||
// uint16_t numberOfElements[1] = {1};
|
TEST_CASE( "New Accessor" , "[NewAccessor]") {
|
||||||
// uint16_t sizeofElements[1] = {10};
|
LocalPool::LocalPoolConfig poolCfg = {{1, 10}};
|
||||||
// LocalPool<1> SimplePool = LocalPool<1>(0, sizeofElements, numberOfElements);
|
LocalPool SimplePool = LocalPool(0, poolCfg);
|
||||||
// std::array<uint8_t, 20> testDataArray;
|
std::array<uint8_t, 20> testDataArray;
|
||||||
// std::array<uint8_t, 20> receptionArray;
|
std::array<uint8_t, 20> receptionArray;
|
||||||
// store_address_t testStoreId;
|
store_address_t testStoreId;
|
||||||
// ReturnValue_t result = retval::CATCH_FAILED;
|
ReturnValue_t result = retval::CATCH_FAILED;
|
||||||
//
|
|
||||||
// for(size_t i = 0; i < testDataArray.size(); i++) {
|
for(size_t i = 0; i < testDataArray.size(); i++) {
|
||||||
// testDataArray[i] = i;
|
testDataArray[i] = i;
|
||||||
// }
|
}
|
||||||
// size_t size = 10;
|
size_t size = 10;
|
||||||
//
|
|
||||||
// SECTION ("Simple tests getter functions") {
|
SECTION ("Simple tests getter functions") {
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// auto resultPair = SimplePool.getData(testStoreId);
|
auto resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// resultPair.second.getDataCopy(receptionArray.data(), 20);
|
resultPair.second.getDataCopy(receptionArray.data(), 20);
|
||||||
// CHECK(resultPair.second.getId() == testStoreId);
|
CHECK(resultPair.second.getId() == testStoreId);
|
||||||
// CHECK(resultPair.second.size() == 10);
|
CHECK(resultPair.second.size() == 10);
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// std::copy(resultPair.second.data(), resultPair.second.data() +
|
std::copy(resultPair.second.data(), resultPair.second.data() +
|
||||||
// resultPair.second.size(), receptionArray.data());
|
resultPair.second.size(), receptionArray.data());
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// {
|
{
|
||||||
// auto resultPairLoc = SimplePool.getData(testStoreId);
|
auto resultPairLoc = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPairLoc.first == retval::CATCH_OK);
|
REQUIRE(resultPairLoc.first == retval::CATCH_OK);
|
||||||
// // data should be deleted when accessor goes out of scope.
|
// data should be deleted when accessor goes out of scope.
|
||||||
// }
|
}
|
||||||
// resultPair = SimplePool.getData(testStoreId);
|
resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
||||||
//
|
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// {
|
{
|
||||||
// ConstStorageAccessor constAccessor(testStoreId);
|
ConstStorageAccessor constAccessor(testStoreId);
|
||||||
// result = SimplePool.getData(testStoreId, constAccessor);
|
result = SimplePool.getData(testStoreId, constAccessor);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// constAccessor.getDataCopy(receptionArray.data(), 20);
|
constAccessor.getDataCopy(receptionArray.data(), 20);
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// // likewise, data should be deleted when accessor gets out of scope.
|
// likewise, data should be deleted when accessor gets out of scope.
|
||||||
// }
|
}
|
||||||
// resultPair = SimplePool.getData(testStoreId);
|
resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
||||||
//
|
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// {
|
{
|
||||||
// resultPair = SimplePool.getData(testStoreId);
|
resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// resultPair.second.release();
|
resultPair.second.release();
|
||||||
// // now data should not be deleted anymore
|
// now data should not be deleted anymore
|
||||||
// }
|
}
|
||||||
// resultPair = SimplePool.getData(testStoreId);
|
resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// resultPair.second.getDataCopy(receptionArray.data(), 20);
|
resultPair.second.getDataCopy(receptionArray.data(), 20);
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//
|
|
||||||
// SECTION("Simple tests modify functions") {
|
SECTION("Simple tests modify functions") {
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// {
|
{
|
||||||
// StorageAccessor accessor(testStoreId);
|
StorageAccessor accessor(testStoreId);
|
||||||
// result = SimplePool.modifyData(testStoreId, accessor);
|
result = SimplePool.modifyData(testStoreId, accessor);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// CHECK(accessor.getId() == testStoreId);
|
CHECK(accessor.getId() == testStoreId);
|
||||||
// CHECK(accessor.size() == 10);
|
CHECK(accessor.size() == 10);
|
||||||
// accessor.getDataCopy(receptionArray.data(), 20);
|
accessor.getDataCopy(receptionArray.data(), 20);
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// std::copy(accessor.data(), accessor.data() +
|
std::copy(accessor.data(), accessor.data() +
|
||||||
// accessor.size(), receptionArray.data());
|
accessor.size(), receptionArray.data());
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// // data should be deleted when accessor goes out of scope
|
// data should be deleted when accessor goes out of scope
|
||||||
// }
|
}
|
||||||
// auto resultPair = SimplePool.getData(testStoreId);
|
auto resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
REQUIRE(resultPair.first == (int) StorageManagerIF::DATA_DOES_NOT_EXIST);
|
||||||
//
|
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// {
|
{
|
||||||
// auto resultPairLoc = SimplePool.modifyData(testStoreId);
|
auto resultPairLoc = SimplePool.modifyData(testStoreId);
|
||||||
// REQUIRE(resultPairLoc.first == retval::CATCH_OK);
|
REQUIRE(resultPairLoc.first == retval::CATCH_OK);
|
||||||
// CHECK(resultPairLoc.second.getId() == testStoreId);
|
CHECK(resultPairLoc.second.getId() == testStoreId);
|
||||||
// CHECK(resultPairLoc.second.size() == 10);
|
CHECK(resultPairLoc.second.size() == 10);
|
||||||
// resultPairLoc.second.getDataCopy(receptionArray.data(), 20);
|
resultPairLoc.second.getDataCopy(receptionArray.data(), 20);
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// std::copy(resultPairLoc.second.data(), resultPairLoc.second.data() +
|
std::copy(resultPairLoc.second.data(), resultPairLoc.second.data() +
|
||||||
// resultPairLoc.second.size(), receptionArray.data());
|
resultPairLoc.second.size(), receptionArray.data());
|
||||||
// for(size_t i = 0; i < size; i++) {
|
for(size_t i = 0; i < size; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// resultPairLoc.second.release();
|
resultPairLoc.second.release();
|
||||||
// // data should not be deleted when accessor goes out of scope
|
// data should not be deleted when accessor goes out of scope
|
||||||
// }
|
}
|
||||||
// resultPair = SimplePool.getData(testStoreId);
|
resultPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//
|
|
||||||
// SECTION("Write tests") {
|
SECTION("Write tests") {
|
||||||
// result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
result = SimplePool.addData(&testStoreId, testDataArray.data(), size);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// {
|
{
|
||||||
// auto resultPair = SimplePool.modifyData(testStoreId);
|
auto resultPair = SimplePool.modifyData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// testDataArray[9] = 42;
|
testDataArray[9] = 42;
|
||||||
// resultPair.second.write(testDataArray.data(), 10, 0);
|
resultPair.second.write(testDataArray.data(), 10, 0);
|
||||||
// // now data should not be deleted
|
// now data should not be deleted
|
||||||
// resultPair.second.release();
|
resultPair.second.release();
|
||||||
// }
|
}
|
||||||
// auto resultConstPair = SimplePool.getData(testStoreId);
|
auto resultConstPair = SimplePool.getData(testStoreId);
|
||||||
// REQUIRE(resultConstPair.first == retval::CATCH_OK);
|
REQUIRE(resultConstPair.first == retval::CATCH_OK);
|
||||||
//
|
|
||||||
// resultConstPair.second.getDataCopy(receptionArray.data(), 10);
|
resultConstPair.second.getDataCopy(receptionArray.data(), 10);
|
||||||
// for(size_t i = 0; i < size-1; i++) {
|
for(size_t i = 0; i < size-1; i++) {
|
||||||
// CHECK(receptionArray[i] == i );
|
CHECK(receptionArray[i] == i );
|
||||||
// }
|
}
|
||||||
// CHECK(receptionArray[9] == 42 );
|
CHECK(receptionArray[9] == 42 );
|
||||||
//
|
|
||||||
// auto resultPair = SimplePool.modifyData(testStoreId);
|
auto resultPair = SimplePool.modifyData(testStoreId);
|
||||||
// REQUIRE(resultPair.first == retval::CATCH_OK);
|
REQUIRE(resultPair.first == retval::CATCH_OK);
|
||||||
// result = resultPair.second.write(testDataArray.data(), 20, 0);
|
result = resultPair.second.write(testDataArray.data(), 20, 0);
|
||||||
// REQUIRE(result == retval::CATCH_FAILED);
|
REQUIRE(result == retval::CATCH_FAILED);
|
||||||
// result = resultPair.second.write(testDataArray.data(), 10, 5);
|
result = resultPair.second.write(testDataArray.data(), 10, 5);
|
||||||
// REQUIRE(result == retval::CATCH_FAILED);
|
REQUIRE(result == retval::CATCH_FAILED);
|
||||||
//
|
|
||||||
// memset(testDataArray.data(), 42, 5);
|
std::memset(testDataArray.data(), 42, 5);
|
||||||
// result = resultPair.second.write(testDataArray.data(), 5, 5);
|
result = resultPair.second.write(testDataArray.data(), 5, 5);
|
||||||
// REQUIRE(result == retval::CATCH_OK);
|
REQUIRE(result == retval::CATCH_OK);
|
||||||
// resultConstPair = SimplePool.getData(testStoreId);
|
resultConstPair = SimplePool.getData(testStoreId);
|
||||||
// resultPair.second.getDataCopy(receptionArray.data(), 20);
|
resultPair.second.getDataCopy(receptionArray.data(), 20);
|
||||||
// for(size_t i = 5; i < 10; i++) {
|
for(size_t i = 5; i < 10; i++) {
|
||||||
// CHECK(receptionArray[i] == 42 );
|
CHECK(receptionArray[i] == 42 );
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
|
|
||||||
TEST_CASE( "Local Pool Simple Tests [1 Pool]" , "[TestPool]") {
|
TEST_CASE( "Local Pool Simple Tests [1 Pool]" , "[TestPool]") {
|
||||||
// uint16_t numberOfElements[1] = {1};
|
|
||||||
// uint16_t sizeofElements[1] = {10};
|
|
||||||
LocalPool::LocalPoolConfig config = {{1, 10}};
|
LocalPool::LocalPoolConfig config = {{1, 10}};
|
||||||
LocalPool simplePool(0, config);
|
LocalPool simplePool(0, config);
|
||||||
std::array<uint8_t, 20> testDataArray;
|
std::array<uint8_t, 20> testDataArray;
|
||||||
|
@ -13,7 +13,19 @@ cmake_minimum_required(VERSION 3.13)
|
|||||||
|
|
||||||
# set(CMAKE_VERBOSE TRUE)
|
# set(CMAKE_VERBOSE TRUE)
|
||||||
|
|
||||||
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildsystem/cmake")
|
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
option(TMTC_TEST "Build binary for manual or automatic TMTC tests" FALSE)
|
||||||
|
option(GENERATE_COVERAGE
|
||||||
|
"Specify whether coverage data is generated with GCOV"
|
||||||
|
TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
if(TMTC_TEST)
|
||||||
|
set(LINK_CATCH2 FALSE)
|
||||||
|
else()
|
||||||
|
set(LINK_CATCH2 TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Tests can be built with the Host OSAL or with the Linux OSAL.
|
# Tests can be built with the Host OSAL or with the Linux OSAL.
|
||||||
if(NOT OS_FSFW)
|
if(NOT OS_FSFW)
|
||||||
@ -53,6 +65,7 @@ set(FSFW_PATH fsfw)
|
|||||||
set(CATCH2_PATH Catch2)
|
set(CATCH2_PATH Catch2)
|
||||||
set(FSFW_TESTS_PATH fsfw/unittest)
|
set(FSFW_TESTS_PATH fsfw/unittest)
|
||||||
set(TEST_SETUP_PATH unittest)
|
set(TEST_SETUP_PATH unittest)
|
||||||
|
set(TMTC_TEST_PATH tests)
|
||||||
|
|
||||||
# Analyse different OS and architecture/target options and
|
# Analyse different OS and architecture/target options and
|
||||||
# determine BSP_PATH
|
# determine BSP_PATH
|
||||||
@ -71,6 +84,15 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(GENERATE_COVERAGE)
|
||||||
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/cmake-modules)
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
include(CodeCoverage)
|
||||||
|
# Add compile options on target base, we don't want coverage for Catch2
|
||||||
|
# append_coverage_compiler_flags()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(FSFW_CONFIG_PATH testcfg)
|
set(FSFW_CONFIG_PATH testcfg)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -82,10 +104,16 @@ add_executable(${TARGET_NAME})
|
|||||||
|
|
||||||
# Add subdirectories
|
# Add subdirectories
|
||||||
add_subdirectory(${FSFW_PATH})
|
add_subdirectory(${FSFW_PATH})
|
||||||
add_subdirectory(${CATCH2_PATH})
|
|
||||||
add_subdirectory(${FSFW_CONFIG_PATH})
|
add_subdirectory(${FSFW_CONFIG_PATH})
|
||||||
add_subdirectory(${FSFW_TESTS_PATH})
|
|
||||||
add_subdirectory(${TEST_SETUP_PATH})
|
if(LINK_CATCH2)
|
||||||
|
add_subdirectory(${CATCH2_PATH})
|
||||||
|
add_subdirectory(${FSFW_TESTS_PATH})
|
||||||
|
add_subdirectory(${TEST_SETUP_PATH})
|
||||||
|
else()
|
||||||
|
add_subdirectory(${TMTC_TEST_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Post-Sources preparation
|
# Post-Sources preparation
|
||||||
@ -94,9 +122,74 @@ add_subdirectory(${TEST_SETUP_PATH})
|
|||||||
# Add libraries for all sources.
|
# Add libraries for all sources.
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
${LIB_FSFW_NAME}
|
${LIB_FSFW_NAME}
|
||||||
${CATCH2_TARGET}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(LINK_CATCH2)
|
||||||
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
|
${CATCH2_TARGET}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(GENERATE_COVERAGE)
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
set(CODE_COVERAGE_VERBOSE TRUE)
|
||||||
|
include(CodeCoverage)
|
||||||
|
|
||||||
|
# Remove quotes.
|
||||||
|
separate_arguments(COVERAGE_COMPILER_FLAGS
|
||||||
|
NATIVE_COMMAND "${COVERAGE_COMPILER_FLAGS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add compile options manually, we don't want coverage for Catch2
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
"${COVERAGE_COMPILER_FLAGS}"
|
||||||
|
)
|
||||||
|
target_compile_options(${LIB_FSFW_NAME} PRIVATE
|
||||||
|
"${COVERAGE_COMPILER_FLAGS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Exclude internal unittest from coverage for now.
|
||||||
|
if(WIN32)
|
||||||
|
set(GCOVR_ADDITIONAL_ARGS
|
||||||
|
"--exclude-throw-branches"
|
||||||
|
"--exclude-unreachable-branches"
|
||||||
|
)
|
||||||
|
set(COVERAGE_EXCLUDES
|
||||||
|
"/c/msys64/mingw64/*" "Catch2"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/fsfw/unittest/internal"
|
||||||
|
)
|
||||||
|
elseif(UNIX)
|
||||||
|
set(COVERAGE_EXCLUDES
|
||||||
|
"/usr/include/*" "/usr/bin/*" "Catch2/*"
|
||||||
|
"fsfw/unittest/internal/*"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_options(${TARGET_NAME} PRIVATE
|
||||||
|
-fprofile-arcs
|
||||||
|
-ftest-coverage
|
||||||
|
)
|
||||||
|
target_link_options(${LIB_FSFW_NAME} PRIVATE
|
||||||
|
-fprofile-arcs
|
||||||
|
-ftest-coverage
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
setup_target_for_coverage_gcovr_html(
|
||||||
|
NAME ${TARGET_NAME}_coverage
|
||||||
|
EXECUTABLE ${TARGET_NAME}
|
||||||
|
DEPENDENCIES ${TARGET_NAME}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
setup_target_for_coverage_lcov(
|
||||||
|
NAME ${TARGET_NAME}_coverage
|
||||||
|
EXECUTABLE ${TARGET_NAME}
|
||||||
|
DEPENDENCIES ${TARGET_NAME}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Add include paths for all sources.
|
# Add include paths for all sources.
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
@ -147,8 +240,7 @@ if(NOT CMAKE_SIZE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(TARGET ${TARGET_NAME}
|
||||||
TARGET ${TARGET_NAME}
|
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND echo "Build directory: ${CMAKE_BINARY_DIR}"
|
COMMAND echo "Build directory: ${CMAKE_BINARY_DIR}"
|
||||||
COMMAND echo "Target OSAL: ${OS_FSFW}"
|
COMMAND echo "Target OSAL: ${OS_FSFW}"
|
||||||
@ -156,7 +248,7 @@ add_custom_command(
|
|||||||
COMMAND ${CMAKE_SIZE} ${TARGET_NAME}${FILE_SUFFIX}
|
COMMAND ${CMAKE_SIZE} ${TARGET_NAME}${FILE_SUFFIX}
|
||||||
)
|
)
|
||||||
|
|
||||||
include (${CMAKE_CURRENT_SOURCE_DIR}/buildsystem/cmake/BuildType.cmake)
|
include (${CMAKE_SCRIPT_PATH}/BuildType.cmake)
|
||||||
set_build_type()
|
set_build_type()
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,16 +4,21 @@
|
|||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
//! Used to determine whether C++ ostreams are used
|
//! Used to determine whether C++ ostreams are used which can increase
|
||||||
//! Those can lead to code bloat.
|
//! the binary size significantly. If this is disabled,
|
||||||
|
//! the C stdio functions can be used alternatively
|
||||||
#define FSFW_CPP_OSTREAM_ENABLED 1
|
#define FSFW_CPP_OSTREAM_ENABLED 1
|
||||||
|
|
||||||
//! Reduced printout to further decrease code size
|
//! More FSFW related printouts depending on level. Useful for development.
|
||||||
//! Be careful, this also turns off most diagnostic prinouts!
|
#define FSFW_VERBOSE_LEVEL 1
|
||||||
#define FSFW_ENHANCED_PRINTOUT 0
|
|
||||||
|
|
||||||
//! Can be used to enable additional debugging printouts for developing the FSFW
|
//! Can be used to completely disable printouts, even the C stdio ones.
|
||||||
#define FSFW_PRINT_VERBOSITY_LEVEL 0
|
#if FSFW_CPP_OSTREAM_ENABLED == 0 && FSFW_VERBOSE_LEVEL == 0
|
||||||
|
#define FSFW_DISABLE_PRINTOUT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Can be used to disable the ANSI color sequences for C stdio.
|
||||||
|
#define FSFW_COLORED_OUTPUT 1
|
||||||
|
|
||||||
//! If FSFW_OBJ_EVENT_TRANSLATION is set to one,
|
//! If FSFW_OBJ_EVENT_TRANSLATION is set to one,
|
||||||
//! additional output which requires the translation files translateObjects
|
//! additional output which requires the translation files translateObjects
|
||||||
@ -49,7 +54,9 @@ static constexpr size_t FSFW_EVENTMGMR_RANGEMATCHERS = 120;
|
|||||||
//! also determines how many commands a CSB service can handle in one cycle
|
//! also determines how many commands a CSB service can handle in one cycle
|
||||||
//! simulataneously. This will increase the required RAM for
|
//! simulataneously. This will increase the required RAM for
|
||||||
//! each CSB service !
|
//! each CSB service !
|
||||||
static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 3;
|
static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 6;
|
||||||
|
|
||||||
|
static constexpr size_t FSFW_PRINT_BUFFER_SIZE = 124;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_FSFWCONFIG_H_ */
|
#endif /* CONFIG_FSFWCONFIG_H_ */
|
||||||
|
@ -9,7 +9,20 @@ namespace objects {
|
|||||||
enum sourceObjects: uint32_t {
|
enum sourceObjects: uint32_t {
|
||||||
/* All addresses between start and end are reserved for the FSFW */
|
/* All addresses between start and end are reserved for the FSFW */
|
||||||
FSFW_CONFIG_RESERVED_START = PUS_SERVICE_1_VERIFICATION,
|
FSFW_CONFIG_RESERVED_START = PUS_SERVICE_1_VERIFICATION,
|
||||||
FSFW_CONFIG_RESERVED_END = TM_STORE
|
FSFW_CONFIG_RESERVED_END = TM_STORE,
|
||||||
|
|
||||||
|
CCSDS_DISTRIBUTOR = 10,
|
||||||
|
PUS_DISTRIBUTOR = 11,
|
||||||
|
TM_FUNNEL = 12,
|
||||||
|
|
||||||
|
UDP_BRIDGE = 15,
|
||||||
|
UDP_POLLING_TASK = 16,
|
||||||
|
|
||||||
|
TEST_ECHO_COM_IF = 20,
|
||||||
|
TEST_DEVICE = 21,
|
||||||
|
|
||||||
|
HK_RECEIVER_MOCK = 22,
|
||||||
|
TEST_LOCAL_POOL_OWNER_BASE = 25
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
unittest/user/unittest/CMakeLists.txt
Normal file
1
unittest/user/unittest/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
add_subdirectory(core)
|
@ -5,3 +5,9 @@ target_sources(${TARGET_NAME} PRIVATE
|
|||||||
CatchSetup.cpp
|
CatchSetup.cpp
|
||||||
printChar.cpp
|
printChar.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(CUSTOM_UNITTEST_RUNNER)
|
||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
CatchRunner.cpp
|
||||||
|
)
|
||||||
|
endif()
|
@ -1,4 +1,5 @@
|
|||||||
#include "CatchDefinitions.h"
|
#include "CatchDefinitions.h"
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||||
#include <fsfw/objectmanager/ObjectManagerIF.h>
|
#include <fsfw/objectmanager/ObjectManagerIF.h>
|
||||||
|
|
||||||
StorageManagerIF* tglob::getIpcStoreHandle() {
|
StorageManagerIF* tglob::getIpcStoreHandle() {
|
||||||
@ -7,7 +8,9 @@ StorageManagerIF* tglob::getIpcStoreHandle() {
|
|||||||
} else {
|
} else {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "Global object manager uninitialized" << std::endl;
|
sif::error << "Global object manager uninitialized" << std::endl;
|
||||||
#endif
|
#else
|
||||||
|
sif::printError("Global object manager uninitialized\n\r");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
|
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
||||||
|
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
|
||||||
#include "CatchFactory.h"
|
#include "CatchFactory.h"
|
||||||
|
|
||||||
#include <fsfw/events/EventManager.h>
|
#include <fsfw/events/EventManager.h>
|
||||||
#include <fsfw/health/HealthTable.h>
|
#include <fsfw/health/HealthTable.h>
|
||||||
|
|
||||||
#include <fsfw/internalError/InternalErrorReporter.h>
|
#include <fsfw/internalError/InternalErrorReporter.h>
|
||||||
#include <fsfw/objectmanager/frameworkObjects.h>
|
#include <fsfw/objectmanager/frameworkObjects.h>
|
||||||
#include <fsfw/storagemanager/PoolManager.h>
|
#include <fsfw/storagemanager/PoolManager.h>
|
||||||
|
#include <fsfw/tmtcpacket/pus/TmPacketStored.h>
|
||||||
|
#include <fsfw/tmtcservices/CommandingServiceBase.h>
|
||||||
|
#include <fsfw/tmtcservices/PusServiceBase.h>
|
||||||
|
#include <fsfw/unittest/tests/datapoollocal/LocalPoolOwnerBase.h>
|
||||||
|
#include <fsfw/unittest/tests/mocks/HkReceiverMock.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Produces system objects.
|
* @brief Produces system objects.
|
||||||
@ -26,6 +32,9 @@ void Factory::produce(void) {
|
|||||||
new HealthTable(objects::HEALTH_TABLE);
|
new HealthTable(objects::HEALTH_TABLE);
|
||||||
new InternalErrorReporter(objects::INTERNAL_ERROR_REPORTER);
|
new InternalErrorReporter(objects::INTERNAL_ERROR_REPORTER);
|
||||||
|
|
||||||
|
new LocalPoolOwnerBase (objects::TEST_LOCAL_POOL_OWNER_BASE);
|
||||||
|
new HkReceiverMock(objects::HK_RECEIVER_MOCK);
|
||||||
|
|
||||||
{
|
{
|
||||||
PoolManager::LocalPoolConfig poolCfg = {
|
PoolManager::LocalPoolConfig poolCfg = {
|
||||||
{100, 16}, {50, 32}, {25, 64} , {15, 128}, {5, 1024}
|
{100, 16}, {50, 32}, {25, 64} , {15, 128}, {5, 1024}
|
||||||
@ -50,7 +59,23 @@ void Factory::produce(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Factory::setStaticFrameworkObjectIds() {
|
void Factory::setStaticFrameworkObjectIds() {
|
||||||
|
PusServiceBase::packetSource = objects::NO_OBJECT;
|
||||||
|
PusServiceBase::packetDestination = objects::NO_OBJECT;
|
||||||
|
|
||||||
|
CommandingServiceBase::defaultPacketSource = objects::NO_OBJECT;
|
||||||
|
CommandingServiceBase::defaultPacketDestination = objects::NO_OBJECT;
|
||||||
|
|
||||||
|
VerificationReporter::messageReceiver = objects::PUS_SERVICE_1_VERIFICATION;
|
||||||
|
|
||||||
|
DeviceHandlerBase::powerSwitcherId = objects::NO_OBJECT;
|
||||||
|
DeviceHandlerBase::rawDataReceiverId = objects::PUS_SERVICE_2_DEVICE_ACCESS;
|
||||||
|
|
||||||
|
LocalDataPoolManager::defaultHkDestination = objects::HK_RECEIVER_MOCK;
|
||||||
|
|
||||||
|
DeviceHandlerFailureIsolation::powerConfirmationId = objects::NO_OBJECT;
|
||||||
|
|
||||||
|
TmPacketStored::timeStamperId = objects::NO_OBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
/**
|
/**
|
||||||
* @file CatchSource.cpp
|
* @file CatchRunner.cpp
|
||||||
* @brief Source file to compile catch framework.
|
* @brief Source file to compile catch framework.
|
||||||
* @details All tests should be written in other files.
|
* @details All tests should be written in other files.
|
||||||
* For eclipse console output, install ANSI Escape in Console
|
* For eclipse console output, install ANSI Escape in Console
|
||||||
* from the eclipse market place to get colored characters.
|
* from the eclipse market place to get colored characters.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NO_UNIT_TEST_FRAMEWORK
|
#include <TestsConfig.h>
|
||||||
|
|
||||||
#define CATCH_CONFIG_RUNNER
|
#define CATCH_CONFIG_COLOUR_WINDOWS
|
||||||
#include <catch2/catch.hpp>
|
|
||||||
|
|
||||||
#if CUSTOM_UNITTEST_RUNNER == 0
|
#include <catch2/catch_session.hpp>
|
||||||
|
|
||||||
extern int customSetup();
|
extern int customSetup();
|
||||||
|
|
||||||
@ -25,7 +24,3 @@ int main( int argc, char* argv[] ) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -1,21 +1,20 @@
|
|||||||
#include <fsfw/unittest/core/CatchFactory.h>
|
#include "CatchFactory.h"
|
||||||
#include "CatchDefinitions.h"
|
#include "CatchDefinitions.h"
|
||||||
#include <testcfg/cdatapool/dataPoolInit.h>
|
|
||||||
|
|
||||||
#ifdef GCOV
|
#ifdef GCOV
|
||||||
#include <gcov.h>
|
#include <gcov.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../objectmanager/ObjectManager.h"
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include "../../objectmanager/ObjectManagerIF.h"
|
#include <fsfw/objectmanager/ObjectManagerIF.h>
|
||||||
#include "../../storagemanager/StorageManagerIF.h"
|
#include <fsfw/storagemanager/StorageManagerIF.h>
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include <fsfw/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
|
|
||||||
/* Global instantiations normally done in main.cpp */
|
/* Global instantiations normally done in main.cpp */
|
||||||
/* Initialize Data Pool */
|
/* Initialize Data Pool */
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
namespace sif {
|
namespace sif {
|
||||||
/* Set up output streams */
|
/* Set up output streams */
|
||||||
ServiceInterfaceStream debug("DEBUG");
|
ServiceInterfaceStream debug("DEBUG");
|
||||||
@ -23,6 +22,7 @@ ServiceInterfaceStream info("INFO");
|
|||||||
ServiceInterfaceStream error("ERROR");
|
ServiceInterfaceStream error("ERROR");
|
||||||
ServiceInterfaceStream warning("WARNING");
|
ServiceInterfaceStream warning("WARNING");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Global object manager */
|
/* Global object manager */
|
||||||
ObjectManagerIF *objectManager;
|
ObjectManagerIF *objectManager;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <fsfw/unittest/core/printChar.h>
|
#include "printChar.h"
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
void printChar(const char* character, bool errStream) {
|
void printChar(const char* character, bool errStream) {
|
||||||
|
Loading…
Reference in New Issue
Block a user