Compare commits
	
		
			2273 Commits
		
	
	
		
			v1.37.1
			...
			auto-switc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c12706ef05 | |||
| 872215ce61 | |||
| 
						
						
							
						
						8e1f95ebf2
	
				 | 
					
					
						|||
| 2b1ed2be53 | |||
| 3e5b9d6650 | |||
| 37853f8fe2 | |||
| bd60246f9a | |||
| a2090448ff | |||
| ad6fa66daf | |||
| 
						
						
							
						
						647a394150
	
				 | 
					
					
						|||
| 
						
						
							
						
						dca6cade11
	
				 | 
					
					
						|||
| 
						
						
							
						
						43e981dfed
	
				 | 
					
					
						|||
| 49b2bef8f4 | |||
| 0c778b66f9 | |||
| 
						
						
							
						
						68763e327b
	
				 | 
					
					
						|||
| 3c55a07404 | |||
| 2e7a1c1cb5 | |||
| febb36f0eb | |||
| 1ba1946728 | |||
| 
						
						
							
						
						d2b5384f05
	
				 | 
					
					
						|||
| 
						
						
							
						
						5a67ce56aa
	
				 | 
					
					
						|||
| 65bb860fb2 | |||
| 
						
						
							
						
						6459a945ea
	
				 | 
					
					
						|||
| b30c85866f | |||
| 
						
						
							
						
						a877edf40b
	
				 | 
					
					
						|||
| 
						
						
							
						
						656c69f858
	
				 | 
					
					
						|||
| db582febb7 | |||
| c48f0678f1 | |||
| 
						
						
							
						
						dcdceba07e
	
				 | 
					
					
						|||
| 
						
						
							
						
						f8eb4fdd6f
	
				 | 
					
					
						|||
| 
						
						
							
						
						964d47b909
	
				 | 
					
					
						|||
| 35e7fba576 | |||
| 44d9541e52 | |||
| 
						
						
							
						
						0beac793a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						1c7545bffa
	
				 | 
					
					
						|||
| 599ff256ff | |||
| 
						
						
							
						
						be9d00be04
	
				 | 
					
					
						|||
| 
						
						
							
						
						c06cd710cf
	
				 | 
					
					
						|||
| 
						
						
							
						
						02fcd0c423
	
				 | 
					
					
						|||
| 
						
						
							
						
						27d6760322
	
				 | 
					
					
						|||
| 
						
						
							
						
						534ddde9e8
	
				 | 
					
					
						|||
| 54c2fc9646 | |||
| 1e284463ac | |||
| 
						
						
							
						
						7c765d037b
	
				 | 
					
					
						|||
| 
						
						
							
						
						ef2e62e418
	
				 | 
					
					
						|||
| 
						
						
							
						
						b7e33ebcb6
	
				 | 
					
					
						|||
| 
						
						
							
						
						93e3f3578d
	
				 | 
					
					
						|||
| 
						
						
							
						
						70747e1864
	
				 | 
					
					
						|||
| 
						
						
							
						
						c67a9fa2c2
	
				 | 
					
					
						|||
| 
						
						
							
						
						3e5fae4458
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e0842c607
	
				 | 
					
					
						|||
| 
						
						
							
						
						4fd18e94fd
	
				 | 
					
					
						|||
| 
						
						
							
						
						18bcb434e9
	
				 | 
					
					
						|||
| 
						
						
							
						
						f0ade7274a
	
				 | 
					
					
						|||
| 
						
						
							
						
						674202c6fb
	
				 | 
					
					
						|||
| 
						
						
							
						
						fecaad7af7
	
				 | 
					
					
						|||
| 
						
						
							
						
						befe7ec441
	
				 | 
					
					
						|||
| feb6459878 | |||
| 
						
						
							
						
						01ce1f154e
	
				 | 
					
					
						|||
| 
						
						
							
						
						1f203e9f76
	
				 | 
					
					
						|||
| 
						
						
							
						
						f4abb3fed6
	
				 | 
					
					
						|||
| 
						
						
							
						
						2e210a0572
	
				 | 
					
					
						|||
| 
						
						
							
						
						3d04fb05ee
	
				 | 
					
					
						|||
| 
						
						
							
						
						7906274204
	
				 | 
					
					
						|||
| 
						
						
							
						
						0854ec878b
	
				 | 
					
					
						|||
| 4ee84c0a78 | |||
| 
						
						
							
						
						fc626a2ad6
	
				 | 
					
					
						|||
| 4295b6b987 | |||
| 440375e64b | |||
| 58d9678613 | |||
| 12909cb3b9 | |||
| 
						
						
							
						
						b3f9a82064
	
				 | 
					
					
						|||
| 09aa5b9e1b | |||
| 
						
						
							
						
						ca33e2987f
	
				 | 
					
					
						|||
| 
						
						
							
						
						aa47881cec
	
				 | 
					
					
						|||
| 
						
						
							
						
						6e3a60f9c5
	
				 | 
					
					
						|||
| e911d8b13e | |||
| 0f4fd6b452 | |||
| 
						
						
							
						
						d1ee938ade
	
				 | 
					
					
						|||
| 07ddaa2692 | |||
| 8b6fa63c60 | |||
| 
						
						
							
						
						696d8e4e4c
	
				 | 
					
					
						|||
| 
						
						
							
						
						978dd4a1de
	
				 | 
					
					
						|||
| 
						
						
							
						
						be6d52ff4a
	
				 | 
					
					
						|||
| 665b7d95f7 | |||
| c139457661 | |||
| 
						
						
							
						
						ace75919ca
	
				 | 
					
					
						|||
| 
						
						
							
						
						e194071936
	
				 | 
					
					
						|||
| 0f6d33e9f8 | |||
| 043d259fe4 | |||
| b0f047d76e | |||
| 
						
						
							
						
						a66004044a
	
				 | 
					
					
						|||
| 
						
						
							
						
						c268977b3d
	
				 | 
					
					
						|||
| 
						
						
							
						
						718277da28
	
				 | 
					
					
						|||
| 
						
						
							
						
						31bf896a6c
	
				 | 
					
					
						|||
| d1f7b92eaa | |||
| 
						
						
							
						
						aaf99b52b4
	
				 | 
					
					
						|||
| 
						
						
							
						
						0ada956285
	
				 | 
					
					
						|||
| f4c82d4a1b | |||
| 
						
						
							
						
						b8e7363744
	
				 | 
					
					
						|||
| 
						
						
							
						
						f0cafedda7
	
				 | 
					
					
						|||
| 
						
						
							
						
						04c081f4aa
	
				 | 
					
					
						|||
| 
						
						
							
						
						ffba0b371c
	
				 | 
					
					
						|||
| 
						
						
							
						
						0f5f147b8d
	
				 | 
					
					
						|||
| 471d2c5b85 | |||
| 
						
						
							
						
						c5c9692ded
	
				 | 
					
					
						|||
| 
						
						
							
						
						f14d792658
	
				 | 
					
					
						|||
| 
						
						
							
						
						d486c04634
	
				 | 
					
					
						|||
| 
						
						
							
						
						ce60a639ce
	
				 | 
					
					
						|||
| 
						
						
							
						
						6c4149571d
	
				 | 
					
					
						|||
| 
						
						
							
						
						e7709b7091
	
				 | 
					
					
						|||
| 
						
						
							
						
						a47ad98d90
	
				 | 
					
					
						|||
| 
						
						
							
						
						2f25ac8e7d
	
				 | 
					
					
						|||
| 
						
						
							
						
						b8beddc11b
	
				 | 
					
					
						|||
| 
						
						
							
						
						4431883b4d
	
				 | 
					
					
						|||
| 
						
						
							
						
						2279eab5e7
	
				 | 
					
					
						|||
| 
						
						
							
						
						be1fb22e39
	
				 | 
					
					
						|||
| 
						
						
							
						
						c95964ce0f
	
				 | 
					
					
						|||
| 
						
						
							
						
						5bcd171108
	
				 | 
					
					
						|||
| 
						
						
							
						
						9f600a24ff
	
				 | 
					
					
						|||
| 
						
						
							
						
						031be000d4
	
				 | 
					
					
						|||
| 
						
						
							
						
						5bc468f13f
	
				 | 
					
					
						|||
| 
						
						
							
						
						8dbc5cad48
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c42e05c23
	
				 | 
					
					
						|||
| 
						
						
							
						
						99192606a2
	
				 | 
					
					
						|||
| 
						
						
							
						
						ffe1281eb9
	
				 | 
					
					
						|||
| 
						
						
							
						
						8f4c9b272c
	
				 | 
					
					
						|||
| 433373e6b7 | |||
| 
						
						
							
						
						ebe67a38a9
	
				 | 
					
					
						|||
| 
						
						
							
						
						bb4e495199
	
				 | 
					
					
						|||
| c35fe58b15 | |||
| 
						
						
							
						
						62305ec39b
	
				 | 
					
					
						|||
| 867d43b508 | |||
| 
						
						
							
						
						a381efc5d9
	
				 | 
					
					
						|||
| 
						
						
							
						
						9265f27af9
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e3229f018
	
				 | 
					
					
						|||
| 
						
						
							
						
						eb1b9c837f
	
				 | 
					
					
						|||
| 
						
						
							
						
						8cb4661006
	
				 | 
					
					
						|||
| 78e70dafc3 | |||
| 
						
						
							
						
						e12ce62f5c
	
				 | 
					
					
						|||
| fd0c186669 | |||
| 
						
						
							
						
						5283607441
	
				 | 
					
					
						|||
| 
						
						
							
						
						3cd9f2bfc7
	
				 | 
					
					
						|||
| 
						
						
							
						
						fddae1bfc6
	
				 | 
					
					
						|||
| 
						
						
							
						
						d84528e643
	
				 | 
					
					
						|||
| 
						
						
							
						
						7b6d1c99ff
	
				 | 
					
					
						|||
| 
						
						
							
						
						ee6cdaf619
	
				 | 
					
					
						|||
| 
						
						
							
						
						c3cdcaf9f4
	
				 | 
					
					
						|||
| 
						
						
							
						
						b5cd64ea00
	
				 | 
					
					
						|||
| 
						
						
							
						
						0ee708f496
	
				 | 
					
					
						|||
| 42d5d74e6a | |||
| 6cada9bfc0 | |||
| ac784b5899 | |||
| 4d98b2f5d3 | |||
| eb24749abe | |||
| a0c246b1da | |||
| b9f05a14f7 | |||
| 
						
						
							
						
						9a283b0f98
	
				 | 
					
					
						|||
| 
						
						
							
						
						d1e0d74072
	
				 | 
					
					
						|||
| 
						
						
							
						
						7f82dd91e2
	
				 | 
					
					
						|||
| 
						
						
							
						
						a29805cb68
	
				 | 
					
					
						|||
| 
						
						
							
						
						9a80af9b95
	
				 | 
					
					
						|||
| 
						
						
							
						
						0da1fecf39
	
				 | 
					
					
						|||
| 
						
						
							
						
						4b4c78c3fa
	
				 | 
					
					
						|||
| 2c30efa821 | |||
| 98a1ce5380 | |||
| 
						
						
							
						
						8fc560f9de
	
				 | 
					
					
						|||
| b635e02f2d | |||
| 000077f327 | |||
| 33d3e7686c | |||
| 
						
						
							
						
						93939f9541
	
				 | 
					
					
						|||
| 5f9247ee1e | |||
| 
						
						
							
						
						e65352818f
	
				 | 
					
					
						|||
| 9421b22098 | |||
| 25a5e187f6 | |||
| 
						
						
							
						
						8fe4a85998
	
				 | 
					
					
						|||
| 
						
						
							
						
						cc1be69764
	
				 | 
					
					
						|||
| 706c5be7f7 | |||
| 47b15bec93 | |||
| bd8cb7c26f | |||
| e9ad8d956a | |||
| 
						
						
							
						
						e9e8a93cf4
	
				 | 
					
					
						|||
| 
						
						
							
						
						f2ee6995f9
	
				 | 
					
					
						|||
| d64372833c | |||
| 
						
						
							
						
						a46f712538
	
				 | 
					
					
						|||
| 5e7f0e729b | |||
| 
						
						
							
						
						6a6789ae99
	
				 | 
					
					
						|||
| 
						
						
							
						
						34100e6c95
	
				 | 
					
					
						|||
| 
						
						
							
						
						404a1009ed
	
				 | 
					
					
						|||
| 
						
						
							
						
						9c1eee075c
	
				 | 
					
					
						|||
| 0e48721655 | |||
| 59bc783045 | |||
| cbfcee0b1c | |||
| 2966ee5005 | |||
| 2a66f335f2 | |||
| 8847ed611d | |||
| b66b202373 | |||
| fda76e24ae | |||
| 509243a47f | |||
| 9472faf899 | |||
| 9f8e7b6673 | |||
| 69f5529ade | |||
| 1abc503614 | |||
| 758add2928 | |||
| 49102463f5 | |||
| 61ebe5ed99 | |||
| eb84b5bb87 | |||
| a3ed2791b7 | |||
| 173ee62d39 | |||
| 6a77635bfb | |||
| c486bb2cf3 | |||
| 1973bd2c5b | |||
| 063a7efc6b | |||
| b7ccb8b41d | |||
| 23b15cf302 | |||
| 8275c10b69 | |||
| 7d1d913220 | |||
| 209e0c68fb | |||
| 
						
						
							
						
						4ba3e394f9
	
				 | 
					
					
						|||
| 
						
						
							
						
						50809e35a9
	
				 | 
					
					
						|||
| 
						
						
							
						
						eb538a789a
	
				 | 
					
					
						|||
| 
						
						
							
						
						b3233abde9
	
				 | 
					
					
						|||
| 
						
						
							
						
						08dbab9daa
	
				 | 
					
					
						|||
| 
						
						
							
						
						624d454464
	
				 | 
					
					
						|||
| 
						
						
							
						
						244d59e6c0
	
				 | 
					
					
						|||
| ff7e475391 | |||
| 75f08175f6 | |||
| a2246f9d3d | |||
| 0d0a98220a | |||
| 35fd2c72d8 | |||
| 0ad3f508a9 | |||
| 6b9e191988 | |||
| 654d9b1536 | |||
| 5036836b44 | |||
| f2e15bb134 | |||
| 78a7b29f8b | |||
| 
						
						
							
						
						d4a87ee789
	
				 | 
					
					
						|||
| 34a82b6e6c | |||
| 09951edbba | |||
| 
						
						
							
						
						592561b287
	
				 | 
					
					
						|||
| 
						
						
							
						
						fa7443d4a9
	
				 | 
					
					
						|||
| 
						
						
							
						
						8071a5713f
	
				 | 
					
					
						|||
| 
						
						
							
						
						9243f917cc
	
				 | 
					
					
						|||
| 
						
						
							
						
						ca4e90ad97
	
				 | 
					
					
						|||
| a1a1c3aef9 | |||
| 634f6c6001 | |||
| 
						
						
							
						
						6fa2cbbbb1
	
				 | 
					
					
						|||
| e415c35987 | |||
| 
						
						
							
						
						98e1beafdf
	
				 | 
					
					
						|||
| 2195beb045 | |||
| 
						
						
							
						
						8871146e88
	
				 | 
					
					
						|||
| 
						
						
							
						
						51dafa56be
	
				 | 
					
					
						|||
| 
						
						
							
						
						b6f28eb239
	
				 | 
					
					
						|||
| 
						
						
							
						
						24de951038
	
				 | 
					
					
						|||
| 
						
						
							
						
						0a455183f4
	
				 | 
					
					
						|||
| 
						
						
							
						
						b753d32b2b
	
				 | 
					
					
						|||
| 
						
						
							
						
						695f5fa5bc
	
				 | 
					
					
						|||
| 
						
						
							
						
						a697368297
	
				 | 
					
					
						|||
| d0effc50b1 | |||
| c226d971c2 | |||
| 
						
						
							
						
						1bda30773f
	
				 | 
					
					
						|||
| 
						
						
							
						
						cdf63f0d42
	
				 | 
					
					
						|||
| 
						
						
							
						
						fdd635e43f
	
				 | 
					
					
						|||
| 
						
						
							
						
						ba158e3826
	
				 | 
					
					
						|||
| db74d0490b | |||
| 
						
						
							
						
						c209c71d5f
	
				 | 
					
					
						|||
| 2e83627139 | |||
| 
						
						
							
						
						3cb9cd124d
	
				 | 
					
					
						|||
| 
						
						
							
						
						fc23438e5d
	
				 | 
					
					
						|||
| 
						
						
							
						
						52ae402594
	
				 | 
					
					
						|||
| 
						
						
							
						
						6771d656bb
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d8b81e131
	
				 | 
					
					
						|||
| 
						
						
							
						
						6fe4c71cee
	
				 | 
					
					
						|||
| 
						
						
							
						
						33d503aef9
	
				 | 
					
					
						|||
| aa4bf5f293 | |||
| 7c6cd12f14 | |||
| 
						
						
							
						
						e26338e4cb
	
				 | 
					
					
						|||
| 
						
						
							
						
						55dcb3595b
	
				 | 
					
					
						|||
| 
						
						
							
						
						101cf54745
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b841d2f37
	
				 | 
					
					
						|||
| 
						
						
							
						
						4af406b294
	
				 | 
					
					
						|||
| 
						
						
							
						
						35f287ff23
	
				 | 
					
					
						|||
| 
						
						
							
						
						0337104173
	
				 | 
					
					
						|||
| 
						
						
							
						
						5a1b2470f0
	
				 | 
					
					
						|||
| 
						
						
							
						
						c51fbb9074
	
				 | 
					
					
						|||
| 
						
						
							
						
						58961efb3f
	
				 | 
					
					
						|||
| 
						
						
							
						
						f9f6ac27e8
	
				 | 
					
					
						|||
| 1b295139a0 | |||
| 
						
						
							
						
						0fb837323d
	
				 | 
					
					
						|||
| 
						
						
							
						
						48f3ff05dc
	
				 | 
					
					
						|||
| cfbd6d3b1e | |||
| 63b6db258c | |||
| c709bd0881 | |||
| a81eae7726 | |||
| 
						
						
							
						
						c64f1f8693
	
				 | 
					
					
						|||
| 
						
						
							
						
						a7ac383423
	
				 | 
					
					
						|||
| 
						
						
							
						
						9c36898dcd
	
				 | 
					
					
						|||
| 
						
						
							
						
						b7558e9542
	
				 | 
					
					
						|||
| 
						
						
							
						
						c7b27c0092
	
				 | 
					
					
						|||
| 
						
						
							
						
						7e9648eabf
	
				 | 
					
					
						|||
| 
						
						
							
						
						6f2eaee50a
	
				 | 
					
					
						|||
| 
						
						
							
						
						ea2a137aec
	
				 | 
					
					
						|||
| 
						
						
							
						
						fa43c5480b
	
				 | 
					
					
						|||
| 
						
						
							
						
						b6b342bf99
	
				 | 
					
					
						|||
| 
						
						
							
						
						2f6565621b
	
				 | 
					
					
						|||
| 
						
						
							
						
						0c1eae3382
	
				 | 
					
					
						|||
| 
						
						
							
						
						2acb6d8132
	
				 | 
					
					
						|||
| a39da169d8 | |||
| 4f335ea270 | |||
| 90b4a4d8c0 | |||
| 3acdb54fab | |||
| 6048ffe656 | |||
| 5060de1f6d | |||
| 26bf178b2a | |||
| b9167c7e22 | |||
| b97afc9f1c | |||
| a1d360502f | |||
| 
						 | 
					ddbf4a5ff0 | ||
| 
						 | 
					6febf6242a | ||
| 
						
						
							
						
						033babf50a
	
				 | 
					
					
						|||
| da71aea101 | |||
| 
						
						
							
						
						df397f6dee
	
				 | 
					
					
						|||
| 
						
						
							
						
						e148e95471
	
				 | 
					
					
						|||
| b11461c2f7 | |||
| 
						
						
							
						
						2b5dcf99dc
	
				 | 
					
					
						|||
| 
						
						
							
						
						d6fd28e124
	
				 | 
					
					
						|||
| 
						
						
							
						
						8186a3ef4f
	
				 | 
					
					
						|||
| 
						
						
							
						
						f62a4ee2b4
	
				 | 
					
					
						|||
| c47995a0eb | |||
| 
						
						
							
						
						952e1c16e5
	
				 | 
					
					
						|||
| 
						
						
							
						
						1748d18852
	
				 | 
					
					
						|||
| 8a1e6bc5d2 | |||
| 
						
						
							
						
						72fc99dc49
	
				 | 
					
					
						|||
| 3652b6cfad | |||
| 
						
						
							
						
						d1a446d445
	
				 | 
					
					
						|||
| 
						
						
							
						
						e64e9daed1
	
				 | 
					
					
						|||
| 
						
						
							
						
						963ca0c939
	
				 | 
					
					
						|||
| 
						
						
							
						
						2d18ce4ff1
	
				 | 
					
					
						|||
| 0b35585449 | |||
| 
						
						
							
						
						af5f51928b
	
				 | 
					
					
						|||
| 6919ab9455 | |||
| 
						
						
							
						
						e4545d0515
	
				 | 
					
					
						|||
| 
						
						
							
						
						fb2995575b
	
				 | 
					
					
						|||
| 77e3b8c359 | |||
| 
						
						
							
						
						63b483b71a
	
				 | 
					
					
						|||
| e24212207f | |||
| 2ed010327f | |||
| 
						
						
							
						
						181d355741
	
				 | 
					
					
						|||
| 0fb57064d3 | |||
| 2526873be2 | |||
| 
						
						
							
						
						bda57d9bd1
	
				 | 
					
					
						|||
| 6fc50f164e | |||
| 
						
						
							
						
						41ff0cc9ac
	
				 | 
					
					
						|||
| cc4795c657 | |||
| 196781ed4a | |||
| 7ab8fb8cb9 | |||
| 0a42093de3 | |||
| d82a6ece5a | |||
| 
						
						
							
						
						c09c0ee947
	
				 | 
					
					
						|||
| 
						
						
							
						
						d2ae8e9362
	
				 | 
					
					
						|||
| 
						
						
							
						
						360911e5eb
	
				 | 
					
					
						|||
| 
						
						
							
						
						ede0805ee8
	
				 | 
					
					
						|||
| 
						
						
							
						
						693c183dcc
	
				 | 
					
					
						|||
| fe0d2bf832 | |||
| 
						
						
							
						
						37b6c32d15
	
				 | 
					
					
						|||
| 
						
						
							
						
						288b09766d
	
				 | 
					
					
						|||
| a7c1b19db4 | |||
| 
						
						
							
						
						88286eaca0
	
				 | 
					
					
						|||
| 8447b3c41e | |||
| 93896557aa | |||
| 36b38dd5bf | |||
| 639fddcdef | |||
| 6f8484be2a | |||
| 
						
						
							
						
						424f3c5247
	
				 | 
					
					
						|||
| e2b54ddb8e | |||
| 
						
						
							
						
						567d68107d
	
				 | 
					
					
						|||
| 
						
						
							
						
						dd5b858666
	
				 | 
					
					
						|||
| 
						
						
							
						
						c63093d6cf
	
				 | 
					
					
						|||
| acc140412d | |||
| 15421240f1 | |||
| 
						
						
							
						
						84f7642411
	
				 | 
					
					
						|||
| 4851c6fdb0 | |||
| d65c63b58f | |||
| 819f5c299d | |||
| 2af1b6b698 | |||
| 35fe0c909a | |||
| 
						
						
							
						
						da25d650d9
	
				 | 
					
					
						|||
| 
						
						
							
						
						73e9bc9598
	
				 | 
					
					
						|||
| 
						
						
							
						
						0095397b4f
	
				 | 
					
					
						|||
| 9ba8c02e91 | |||
| a99895a2b6 | |||
| 110c822f41 | |||
| 5a7f0d08a4 | |||
| 
						 | 
					d28ec2c31a | ||
| 9201095644 | |||
| 653d13960f | |||
| b4c3553965 | |||
| e2cce1cb51 | |||
| d9879013e6 | |||
| a467dd790f | |||
| 185d86245b | |||
| f3e18f1313 | |||
| a9fe166b32 | |||
| 1069572392 | |||
| 38a8327be0 | |||
| 8a707a2664 | |||
| 8e2c6a95e0 | |||
| 8da08bd328 | |||
| 11578b9d9a | |||
| 04dde604db | |||
| 78f4bbc3a7 | |||
| 
						 | 
					c3bca9bb54 | ||
| 8f8c3fd4a2 | |||
| 99dbab9311 | |||
| fa3d5cbc3e | |||
| dfa20545e4 | |||
| 947eef7170 | |||
| 04c9013c64 | |||
| e631ab55e6 | |||
| a81d911f8e | |||
| 2b03c41305 | |||
| e261d3609b | |||
| 2a0b139f70 | |||
| f9befaebd0 | |||
| 4b90d26445 | |||
| ad6e0e9946 | |||
| ef8409d4a8 | |||
| 1e9d772d37 | |||
| 27cf93e6ab | |||
| 
						
						
							
						
						9f176e1959
	
				 | 
					
					
						|||
| 
						
						
							
						
						e4632b2538
	
				 | 
					
					
						|||
| 
						
						
							
						
						669c3630a9
	
				 | 
					
					
						|||
| d91a71fb51 | |||
| 2952f1feb1 | |||
| 0c25b37c7b | |||
| 348b720885 | |||
| 080b729f11 | |||
| 
						
						
							
						
						05fbff2e6d
	
				 | 
					
					
						|||
| b2d9582a46 | |||
| 
						
						
							
						
						155bf9eed0
	
				 | 
					
					
						|||
| 15618a4c18 | |||
| d07568bbe1 | |||
| 1267097368 | |||
| 
						
						
							
						
						e746c151d3
	
				 | 
					
					
						|||
| 5958560d00 | |||
| e258193713 | |||
| 8f0b0f47c9 | |||
| 
						
						
							
						
						97f40232d7
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c3329abb2
	
				 | 
					
					
						|||
| acc50ca7aa | |||
| 
						
						
							
						
						6f8ad08e9b
	
				 | 
					
					
						|||
| 
						
						
							
						
						1f02c0ef57
	
				 | 
					
					
						|||
| 
						
						
							
						
						093f7f3a31
	
				 | 
					
					
						|||
| a0e4f0a438 | |||
| 81311770e8 | |||
| 
						
						
							
						
						8441c49fe6
	
				 | 
					
					
						|||
| ff6cb2a2e3 | |||
| 2132f6bb1f | |||
| 
						
						
							
						
						d2c0c1709e
	
				 | 
					
					
						|||
| 
						
						
							
						
						b23ae2e152
	
				 | 
					
					
						|||
| 
						
						
							
						
						eae63a8dc9
	
				 | 
					
					
						|||
| 388dc0a813 | |||
| 
						
						
							
						
						a88725070b
	
				 | 
					
					
						|||
| 
						
						
							
						
						39c299e55d
	
				 | 
					
					
						|||
| 
						
						
							
						
						0bbcfb34e8
	
				 | 
					
					
						|||
| 7f3c71f4dc | |||
| 03e0cb4ca4 | |||
| 5f82b05d3e | |||
| 004c60030b | |||
| c08024bd0b | |||
| 6bdafe62ad | |||
| 
						
						
							
						
						7fe676fed9
	
				 | 
					
					
						|||
| 
						
						
							
						
						2fda3e127e
	
				 | 
					
					
						|||
| 
						
						
							
						
						beb79d2fb4
	
				 | 
					
					
						|||
| 
						
						
							
						
						f0bbc1d090
	
				 | 
					
					
						|||
| 
						
						
							
						
						c120ce8617
	
				 | 
					
					
						|||
| 
						
						
							
						
						58c19e90eb
	
				 | 
					
					
						|||
| 
						
						
							
						
						833166cc78
	
				 | 
					
					
						|||
| 0ea0322e45 | |||
| 
						
						
							
						
						949ac8942d
	
				 | 
					
					
						|||
| 
						
						
							
						
						6d18e21edf
	
				 | 
					
					
						|||
| 
						
						
							
						
						d9a010f6bd
	
				 | 
					
					
						|||
| 
						
						
							
						
						971fd5b4a3
	
				 | 
					
					
						|||
| 
						
						
							
						
						4b4dd35b55
	
				 | 
					
					
						|||
| 
						
						
							
						
						988da377b1
	
				 | 
					
					
						|||
| 77ffc62236 | |||
| bea918e861 | |||
| 
						
						
							
						
						8105e5f689
	
				 | 
					
					
						|||
| 
						
						
							
						
						b27694321f
	
				 | 
					
					
						|||
| 
						
						
							
						
						a884176773
	
				 | 
					
					
						|||
| 1f61f7d2e8 | |||
| f1cb2caa3a | |||
| 2eba5d52da | |||
| f8a7179de6 | |||
| 40ee5ddade | |||
| bc9bb06f2d | |||
| 0bfd31bc7e | |||
| 2caf81640c | |||
| a0025030f1 | |||
| 
						
						
							
						
						85dc977796
	
				 | 
					
					
						|||
| 5615f51ae7 | |||
| 
						
						
							
						
						9219d2bc8c
	
				 | 
					
					
						|||
| 88a8969142 | |||
| 85a12f071f | |||
| 
						
						
							
						
						1ae2f692ba
	
				 | 
					
					
						|||
| 3f73ad86eb | |||
| 
						
						
							
						
						a0735b4fff
	
				 | 
					
					
						|||
| a71f773f63 | |||
| 
						
						
							
						
						f7dccdc4c6
	
				 | 
					
					
						|||
| 
						
						
							
						
						3ebb83b4c0
	
				 | 
					
					
						|||
| ee43c0fbd7 | |||
| 
						
						
							
						
						91208c2808
	
				 | 
					
					
						|||
| 1dc545c5f0 | |||
| 
						
						
							
						
						55c5df0519
	
				 | 
					
					
						|||
| e74ae18763 | |||
| e5b19a4463 | |||
| 
						
						
							
						
						1f658ceee3
	
				 | 
					
					
						|||
| 
						
						
							
						
						6ef05767c5
	
				 | 
					
					
						|||
| 9726c283ef | |||
| 2110c54d96 | |||
| 
						
						
							
						
						7c0ee9114b
	
				 | 
					
					
						|||
| 
						
						
							
						
						e52195e195
	
				 | 
					
					
						|||
| 8c97ad0213 | |||
| 5a69b52b20 | |||
| 
						
						
							
						
						4d195a1b8e
	
				 | 
					
					
						|||
| 
						
						
							
						
						8c54802e7a
	
				 | 
					
					
						|||
| 8cd959f55a | |||
| 
						
						
							
						
						001630cece
	
				 | 
					
					
						|||
| dbb3434cd9 | |||
| 
						
						
							
						
						61e73a4be9
	
				 | 
					
					
						|||
| 
						
						
							
						
						81bb47a6d8
	
				 | 
					
					
						|||
| 2480229dcb | |||
| 72ca1be6e2 | |||
| 56fb2c0e1e | |||
| 
						
						
							
						
						a5c799180e
	
				 | 
					
					
						|||
| f5a9a4973c | |||
| 
						
						
							
						
						f60c754c61
	
				 | 
					
					
						|||
| 
						
						
							
						
						ff05181dd3
	
				 | 
					
					
						|||
| 
						
						
							
						
						7014ab517d
	
				 | 
					
					
						|||
| 
						
						
							
						
						d59ea6eb3d
	
				 | 
					
					
						|||
| 
						
						
							
						
						abbf170ce2
	
				 | 
					
					
						|||
| 
						
						
							
						
						6767e9a543
	
				 | 
					
					
						|||
| 
						
						
							
						
						bf730060b5
	
				 | 
					
					
						|||
| 011f4bf5d9 | |||
| 942b459066 | |||
| 10dfa07cd9 | |||
| 61b3ef790a | |||
| c6294cadbd | |||
| e2926e25f6 | |||
| 7e1e02c2bc | |||
| afc72c0d97 | |||
| 4539d25518 | |||
| f989af51f2 | |||
| 
						
						
							
						
						566c1534ee
	
				 | 
					
					
						|||
| 
						
						
							
						
						5f75b22cec
	
				 | 
					
					
						|||
| 
						
						
							
						
						7bedb1d307
	
				 | 
					
					
						|||
| f736489430 | |||
| 
						
						
							
						
						7ac19c8ea8
	
				 | 
					
					
						|||
| 
						
						
							
						
						8251f28cda
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e2989d2bd
	
				 | 
					
					
						|||
| 6efee8d4da | |||
| 59e07d9b47 | |||
| 
						
						
							
						
						880c09c510
	
				 | 
					
					
						|||
| 
						
						
							
						
						7cc95be900
	
				 | 
					
					
						|||
| 5e9fd332d9 | |||
| 753b9f8a0e | |||
| 07e002ccd2 | |||
| 53d2e7965a | |||
| d618e913af | |||
| 5f481fd4d0 | |||
| b26600ac64 | |||
| 0d501e5064 | |||
| 32e2d87143 | |||
| 7b0a47b010 | |||
| 300a6c5ff2 | |||
| d90fd07ba3 | |||
| 800e29bcb9 | |||
| beaacc251b | |||
| b80c96a02c | |||
| 
						
						
							
						
						a52d116857
	
				 | 
					
					
						|||
| 1c8fea409a | |||
| 
						
						
							
						
						f61301db13
	
				 | 
					
					
						|||
| c48be8f37b | |||
| 9dfc8a0e93 | |||
| 8db131f4ab | |||
| 
						
						
							
						
						e50aa2b620
	
				 | 
					
					
						|||
| 8451a2f8ef | |||
| ebedb59929 | |||
| 0f532e8511 | |||
| fbff57dd45 | |||
| 
						
						
							
						
						910addc27a
	
				 | 
					
					
						|||
| 
						
						
							
						
						b2d2c38c58
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4a5800cba
	
				 | 
					
					
						|||
| 2c9df747e8 | |||
| 4fe921b2cc | |||
| e5f8b08e4b | |||
| 
						
						
							
						
						ba0fe5f7da
	
				 | 
					
					
						|||
| 
						
						
							
						
						c9a4cf53ca
	
				 | 
					
					
						|||
| 
						
						
							
						
						fa10b6fd95
	
				 | 
					
					
						|||
| 
						
						
							
						
						5102bd4d69
	
				 | 
					
					
						|||
| 
						
						
							
						
						ba6f55b93b
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b8a44f390
	
				 | 
					
					
						|||
| 
						
						
							
						
						08c98bd354
	
				 | 
					
					
						|||
| 
						
						
							
						
						0587f40874
	
				 | 
					
					
						|||
| 320b460179 | |||
| 
						
						
							
						
						1510de19a6
	
				 | 
					
					
						|||
| 6ae72db32d | |||
| 
						
						
							
						
						88d1f9940f
	
				 | 
					
					
						|||
| 
						
						
							
						
						8c4a35fc42
	
				 | 
					
					
						|||
| 
						
						
							
						
						e7c8d15773
	
				 | 
					
					
						|||
| 19a86ac29e | |||
| 
						
						
							
						
						1d4e2a70a2
	
				 | 
					
					
						|||
| 
						
						
							
						
						f1028eb1d9
	
				 | 
					
					
						|||
| c028a696ce | |||
| f832c4522e | |||
| 
						
						
							
						
						4e58614c56
	
				 | 
					
					
						|||
| 
						
						
							
						
						93ea8519b0
	
				 | 
					
					
						|||
| 
						
						
							
						
						16dbba6545
	
				 | 
					
					
						|||
| 
						
						
							
						
						9a451e3d5f
	
				 | 
					
					
						|||
| 
						
						
							
						
						7870a2015e
	
				 | 
					
					
						|||
| 
						
						
							
						
						80155285c8
	
				 | 
					
					
						|||
| 
						
						
							
						
						c61b0f55a4
	
				 | 
					
					
						|||
| 
						
						
							
						
						6d220692d5
	
				 | 
					
					
						|||
| db61358639 | |||
| 
						
						
							
						
						fec85ffa6c
	
				 | 
					
					
						|||
| 
						
						
							
						
						462da5228a
	
				 | 
					
					
						|||
| 
						
						
							
						
						e9d4104f88
	
				 | 
					
					
						|||
| 
						
						
							
						
						39022ce2f6
	
				 | 
					
					
						|||
| 
						
						
							
						
						0cefef8a35
	
				 | 
					
					
						|||
| d3f3a3efd0 | |||
| 
						
						
							
						
						6398532462
	
				 | 
					
					
						|||
| 
						
						
							
						
						16f26d7758
	
				 | 
					
					
						|||
| 
						
						
							
						
						0e3980dc37
	
				 | 
					
					
						|||
| 
						
						
							
						
						cc7e39c484
	
				 | 
					
					
						|||
| 448e24e69f | |||
| 70c4f8f3fd | |||
| 
						
						
							
						
						1f44533b3e
	
				 | 
					
					
						|||
| 
						
						
							
						
						863c0af2a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						0fb85883a5
	
				 | 
					
					
						|||
| 965c8d21cc | |||
| 546053f95a | |||
| 
						
						
							
						
						608eecb091
	
				 | 
					
					
						|||
| 
						
						
							
						
						ff432a4194
	
				 | 
					
					
						|||
| 
						
						
							
						
						e9d48687d7
	
				 | 
					
					
						|||
| 735c60d4c2 | |||
| 770d9b7ad3 | |||
| 
						
						
							
						
						86f7d05526
	
				 | 
					
					
						|||
| 
						
						
							
						
						8cc5220dd0
	
				 | 
					
					
						|||
| 
						
						
							
						
						a800ad6c9a
	
				 | 
					
					
						|||
| 887bfc87c3 | |||
| 
						
						
							
						
						54309b512f
	
				 | 
					
					
						|||
| 74859dd5c6 | |||
| 
						
						
							
						
						13e965948c
	
				 | 
					
					
						|||
| 
						
						
							
						
						46bb602c96
	
				 | 
					
					
						|||
| 
						
						
							
						
						72dbc34936
	
				 | 
					
					
						|||
| 55affe5a42 | |||
| 914a22f642 | |||
| 
						
						
							
						
						ed7d75a777
	
				 | 
					
					
						|||
| 9443d3844a | |||
| 
						
						
							
						
						8800b20409
	
				 | 
					
					
						|||
| 
						
						
							
						
						690f8cb49a
	
				 | 
					
					
						|||
| dbc3868f47 | |||
| 
						
						
							
						
						852f1203c6
	
				 | 
					
					
						|||
| 643f8c5b54 | |||
| 3fb083fd87 | |||
| 
						
						
							
						
						fdf1c7a611
	
				 | 
					
					
						|||
| cf582dd6a4 | |||
| 
						
						
							
						
						c7f716c433
	
				 | 
					
					
						|||
| d2dfc22373 | |||
| 
						
						
							
						
						53d53e8771
	
				 | 
					
					
						|||
| 
						
						
							
						
						84e37d8b7b
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c4f98ec22
	
				 | 
					
					
						|||
| 
						
						
							
						
						a61d7901bf
	
				 | 
					
					
						|||
| 
						
						
							
						
						7e01a9602e
	
				 | 
					
					
						|||
| 
						
						
							
						
						be1d1cf5bf
	
				 | 
					
					
						|||
| 
						
						
							
						
						ce2755e161
	
				 | 
					
					
						|||
| 
						
						
							
						
						33de08eafc
	
				 | 
					
					
						|||
| 106d73238b | |||
| 3f4a34d616 | |||
| 
						
						
							
						
						268f10ced5
	
				 | 
					
					
						|||
| 
						
						
							
						
						647f3d00bb
	
				 | 
					
					
						|||
| 
						
						
							
						
						2210ec3737
	
				 | 
					
					
						|||
| 
						
						
							
						
						df3755d6cc
	
				 | 
					
					
						|||
| 
						
						
							
						
						a351dcf99e
	
				 | 
					
					
						|||
| 
						
						
							
						
						06fe113d7f
	
				 | 
					
					
						|||
| 
						
						
							
						
						43d86c9aad
	
				 | 
					
					
						|||
| c0ae25a973 | |||
| 
						
						
							
						
						fa85cc4d78
	
				 | 
					
					
						|||
| f7c49adea5 | |||
| 
						
						
							
						
						b662e220e1
	
				 | 
					
					
						|||
| 
						
						
							
						
						7337595d47
	
				 | 
					
					
						|||
| 
						
						
							
						
						f2f73b088d
	
				 | 
					
					
						|||
| 
						
						
							
						
						fce16cc695
	
				 | 
					
					
						|||
| 
						
						
							
						
						ff7d0b3989
	
				 | 
					
					
						|||
| 
						
						
							
						
						6bf9fd5969
	
				 | 
					
					
						|||
| 
						
						
							
						
						a7ab26d804
	
				 | 
					
					
						|||
| 
						
						
							
						
						977e9f366f
	
				 | 
					
					
						|||
| b3d2fdc277 | |||
| 
						
						
							
						
						7388c4f661
	
				 | 
					
					
						|||
| 
						
						
							
						
						a6461fcaf8
	
				 | 
					
					
						|||
| 6ae0fdf191 | |||
| 3087049726 | |||
| 8255869f2d | |||
| 
						
						
							
						
						603ddcef9c
	
				 | 
					
					
						|||
| 
						
						
							
						
						0b673fcdec
	
				 | 
					
					
						|||
| 
						
						
							
						
						908cf8dcc3
	
				 | 
					
					
						|||
| 
						
						
							
						
						ec39dc05ae
	
				 | 
					
					
						|||
| 
						
						
							
						
						bd33a51bf1
	
				 | 
					
					
						|||
| 06a24da2b9 | |||
| 
						
						
							
						
						2bad2a142b
	
				 | 
					
					
						|||
| b0b43b3ecc | |||
| c1a23e0d73 | |||
| 
						
						
							
						
						377cc64d0f
	
				 | 
					
					
						|||
| 
						
						
							
						
						351c33e504
	
				 | 
					
					
						|||
| a7a530cb59 | |||
| 
						
						
							
						
						f1ca4b174f
	
				 | 
					
					
						|||
| 
						
						
							
						
						027955597f
	
				 | 
					
					
						|||
| 
						
						
							
						
						c558a117b0
	
				 | 
					
					
						|||
| fc697732b4 | |||
| 
						
						
							
						
						ce19f30325
	
				 | 
					
					
						|||
| 
						
						
							
						
						faffca0c2c
	
				 | 
					
					
						|||
| 
						
						
							
						
						7b611810df
	
				 | 
					
					
						|||
| 
						
						
							
						
						3e92d175d5
	
				 | 
					
					
						|||
| 
						
						
							
						
						64ca329d5a
	
				 | 
					
					
						|||
| 
						
						
							
						
						12ff365433
	
				 | 
					
					
						|||
| 5ea3bfeb7b | |||
| 
						
						
							
						
						785c1c65a0
	
				 | 
					
					
						|||
| 
						
						
							
						
						3c9eec7b3f
	
				 | 
					
					
						|||
| 
						
						
							
						
						5630ae4962
	
				 | 
					
					
						|||
| 
						
						
							
						
						61ea80f92c
	
				 | 
					
					
						|||
| 
						
						
							
						
						6182218813
	
				 | 
					
					
						|||
| 
						
						
							
						
						b7e4953126
	
				 | 
					
					
						|||
| ee4285075a | |||
| 
						
						
							
						
						bda2ba79bf
	
				 | 
					
					
						|||
| 0c47513e98 | |||
| 
						
						
							
						
						f4f365b110
	
				 | 
					
					
						|||
| 
						
						
							
						
						1d4b815452
	
				 | 
					
					
						|||
| 
						
						
							
						
						1e98fcbbd5
	
				 | 
					
					
						|||
| 
						
						
							
						
						52eba5cae6
	
				 | 
					
					
						|||
| 
						
						
							
						
						cd9cb48b04
	
				 | 
					
					
						|||
| 
						
						
							
						
						5c430212e7
	
				 | 
					
					
						|||
| 
						
						
							
						
						d8ab6abc49
	
				 | 
					
					
						|||
| 
						
						
							
						
						d1b9608a14
	
				 | 
					
					
						|||
| 
						
						
							
						
						25c7058da5
	
				 | 
					
					
						|||
| 
						
						
							
						
						9ece676313
	
				 | 
					
					
						|||
| 
						
						
							
						
						697a3e8577
	
				 | 
					
					
						|||
| 
						
						
							
						
						dea3077f29
	
				 | 
					
					
						|||
| d687715bcb | |||
| 
						
						
							
						
						e2cd822e9c
	
				 | 
					
					
						|||
| 
						
						
							
						
						0e9035d6c1
	
				 | 
					
					
						|||
| c80eff4922 | |||
| 
						
						
							
						
						a5c9e1481b
	
				 | 
					
					
						|||
| 
						
						
							
						
						e19ddcfbd8
	
				 | 
					
					
						|||
| add079a7c6 | |||
| 
						
						
							
						
						9cdcd47b1a
	
				 | 
					
					
						|||
| d14e256901 | |||
| dd5270e974 | |||
| 56ea9af615 | |||
| 4fc999e102 | |||
| 04d24e74b1 | |||
| 8137c9ea25 | |||
| 723b4bba3f | |||
| 8cff2fd6f7 | |||
| a1f7f77e01 | |||
| f3aab775f3 | |||
| 59d542ab39 | |||
| 7b0285c4ce | |||
| 0a77ee0508 | |||
| 51cbe46cf5 | |||
| 26fc4b8add | |||
| 
						
						
							
						
						825de04f3b
	
				 | 
					
					
						|||
| 
						
						
							
						
						33985937b7
	
				 | 
					
					
						|||
| ba36b5f091 | |||
| 
						
						
							
						
						4f5903227e
	
				 | 
					
					
						|||
| 
						
						
							
						
						2173d89047
	
				 | 
					
					
						|||
| 
						
						
							
						
						0a12dbf2be
	
				 | 
					
					
						|||
| 
						
						
							
						
						ad3c0e2a0e
	
				 | 
					
					
						|||
| 
						
						
							
						
						03e772246f
	
				 | 
					
					
						|||
| 
						
						
							
						
						25da131653
	
				 | 
					
					
						|||
| 4c6b098f42 | |||
| b57283101b | |||
| 9dfdf38822 | |||
| c6240285e2 | |||
| 87c05705ec | |||
| c881b36630 | |||
| a380ff5ac9 | |||
| 4d17184fba | |||
| d8efd05a88 | |||
| 109856eef8 | |||
| 90bafa717b | |||
| 0cdb850f69 | |||
| 4c63fed69d | |||
| eb27ab4bb0 | |||
| b0a38136c1 | |||
| 6c2548fb56 | |||
| 7d3f9ada18 | |||
| b5cc430b5b | |||
| 52fedb94e8 | |||
| cdabf113ca | |||
| c3e66f5320 | |||
| 2d2c1d8721 | |||
| 9e8a417115 | |||
| fba87cc0e8 | |||
| 50a8a6fffe | |||
| 1e767afa11 | |||
| 15a67b81f9 | |||
| bf25266055 | |||
| ef08f348dc | |||
| 47ff8a418e | |||
| f0fbed1593 | |||
| 8b2bf21025 | |||
| 0764646d2b | |||
| e752cdcc67 | |||
| 91c53df2c9 | |||
| c6231d2337 | |||
| 0dfe68eb8d | |||
| b273729b10 | |||
| 67024ec933 | |||
| 3a20748ff6 | |||
| 516898b7b2 | |||
| 27f77799a6 | |||
| 9080e7cbe4 | |||
| bd4e05c944 | |||
| 72ffa365d4 | |||
| 52f5b088bf | |||
| 6c39e7dd0c | |||
| 73498ac9af | |||
| 1f18904810 | |||
| 1703f7a714 | |||
| 13bb572348 | |||
| 3e21f9c259 | |||
| 239410e2dc | |||
| fca6834d17 | |||
| 1cc62238c2 | |||
| 
						
						
							
						
						05a5c63765
	
				 | 
					
					
						|||
| 
						
						
							
						
						c806aa81f0
	
				 | 
					
					
						|||
| 
						
						
							
						
						93fb207032
	
				 | 
					
					
						|||
| 
						
						
							
						
						80160e8291
	
				 | 
					
					
						|||
| 
						
						
							
						
						5a15d39a1d
	
				 | 
					
					
						|||
| 
						
						
							
						
						e036ed2bff
	
				 | 
					
					
						|||
| 
						
						
							
						
						0db7b5251c
	
				 | 
					
					
						|||
| 
						
						
							
						
						873316d012
	
				 | 
					
					
						|||
| 
						
						
							
						
						0f818a5596
	
				 | 
					
					
						|||
| dc89350ac7 | |||
| 8b13337845 | |||
| 
						
						
							
						
						76933671a6
	
				 | 
					
					
						|||
| 491a341efe | |||
| 
						
						
							
						
						5a642b7d2f
	
				 | 
					
					
						|||
| 6b9aa8eb7b | |||
| 
						
						
							
						
						3ee2e72652
	
				 | 
					
					
						|||
| 91106feb82 | |||
| 7a68188140 | |||
| 
						
						
							
						
						d88ffb1734
	
				 | 
					
					
						|||
| 
						
						
							
						
						c2b415bdd6
	
				 | 
					
					
						|||
| b4778f3ce9 | |||
| 
						
						
							
						
						c50a74d117
	
				 | 
					
					
						|||
| 
						
						
							
						
						25d10e3877
	
				 | 
					
					
						|||
| 
						
						
							
						
						facfad3367
	
				 | 
					
					
						|||
| 
						
						
							
						
						d95ecc3678
	
				 | 
					
					
						|||
| 
						
						
							
						
						966faf51b5
	
				 | 
					
					
						|||
| 
						
						
							
						
						5c9d7a43ab
	
				 | 
					
					
						|||
| 
						
						
							
						
						4465170747
	
				 | 
					
					
						|||
| 
						
						
							
						
						5420e322f7
	
				 | 
					
					
						|||
| 
						
						
							
						
						6040cd2d1e
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e7b774d32
	
				 | 
					
					
						|||
| 
						
						
							
						
						7f36455857
	
				 | 
					
					
						|||
| 07df6eb95f | |||
| 88e8268c26 | |||
| 04f4eedb78 | |||
| 53b48ad99b | |||
| a8ab40674f | |||
| 
						
						
							
						
						18b67d18a7
	
				 | 
					
					
						|||
| 97d41a125b | |||
| 20bc31449a | |||
| 
						
						
							
						
						2901ebc15c
	
				 | 
					
					
						|||
| e992f933ec | |||
| a95ab49690 | |||
| b261779ebf | |||
| db5e7a535e | |||
| 4a8e111a18 | |||
| 2e041c3013 | |||
| 9023405b96 | |||
| 1d047f3c92 | |||
| 253af8193f | |||
| 3d07814efb | |||
| f79acca1d6 | |||
| 4a9b6bc0c4 | |||
| 4dad1df13b | |||
| f67d72a8dd | |||
| da79f24b33 | |||
| b2b7900720 | |||
| de4562dd2f | |||
| fb9303a8de | |||
| 9b2b087d08 | |||
| 1c27ba7261 | |||
| 3a59cd301b | |||
| 4c66d8fb5f | |||
| b634543c5a | |||
| ced812052d | |||
| 32b074b86e | |||
| a0d559a5fd | |||
| c7e554aebc | |||
| e8bd3f447d | |||
| d1086bc9aa | |||
| 461782acdb | |||
| 98a2338dcb | |||
| 74e945ddff | |||
| a3b140b680 | |||
| 880b8620ba | |||
| 788fbb72f0 | |||
| afcc0cc21d | |||
| db3a4955c2 | |||
| d0a9460676 | |||
| add083135e | |||
| 3ae7dab8c7 | |||
| 0c394ad34d | |||
| 4de1932c8a | |||
| 1c74d39faf | |||
| f40348904c | |||
| 2d4a3c0ee2 | |||
| 295da50bc7 | |||
| 3f9bf8e173 | |||
| 4893af07ae | |||
| af8b4d5bc8 | |||
| 2ae89769af | |||
| 4ed7689956 | |||
| 7ceb81f68d | |||
| 6fa53e1869 | |||
| 54328ff357 | |||
| c43d9a5a9a | |||
| 277a6ad33c | |||
| b655c03564 | |||
| 49e15de08a | |||
| 6ef8c62aca | |||
| 695a663a15 | |||
| 94cf42fbeb | |||
| fe1e236466 | |||
| 861ad9e62d | |||
| 5e4032032f | |||
| 3a137762f3 | |||
| 92a0752e18 | |||
| 6ed2fcd904 | |||
| 2c17aff124 | |||
| 3ee9a914cc | |||
| 7a119bab6e | |||
| 147c39d539 | |||
| dcf01d822b | |||
| a660d1d30a | |||
| 0732218249 | |||
| 4b0062e3b2 | |||
| b2a666d432 | |||
| 7cc13d2024 | |||
| 
						
						
							
						
						0872fad7dc
	
				 | 
					
					
						|||
| df4e657ec3 | |||
| 8f7d3dd815 | |||
| 97268af555 | |||
| 322151acf8 | |||
| ecb8de1550 | |||
| 0cd5526de4 | |||
| a87a01d072 | |||
| 07bb293816 | |||
| 73d7f0a1e5 | |||
| c3679f044c | |||
| 68f84e71ff | |||
| f2f33f5049 | |||
| 3314d07942 | |||
| 4155aa8776 | |||
| 727050520b | |||
| 269d5f6a0a | |||
| d6dd943ebf | |||
| 31fdbac8c0 | |||
| 9c0744ae02 | |||
| 86d22affe2 | |||
| 3e9accfa7b | |||
| df4205c71e | |||
| 1b919ceaec | |||
| e130d45f0b | |||
| 9544516cc4 | |||
| 3dbc01bd8a | |||
| 51a3a2f5cf | |||
| cada6e0440 | |||
| a53f1be710 | |||
| 3dd7530c3d | |||
| 931bb5ee28 | |||
| d85a5975c0 | |||
| 456ee156c3 | |||
| 40eae48a1a | |||
| 8da5f4dd44 | |||
| 4bd3cf4d52 | |||
| 07ca95205d | |||
| b56f2b4b0e | |||
| 05738d1e25 | |||
| 
						
						
							
						
						12bc9268f7
	
				 | 
					
					
						|||
| 
						
						
							
						
						a05a8ffb50
	
				 | 
					
					
						|||
| cf875f7883 | |||
| 4bef1bd567 | |||
| 885fddd45f | |||
| fab4cdd0dc | |||
| 693e11bcb2 | |||
| 9196b8b0ed | |||
| 65815e4646 | |||
| a023fe2c7d | |||
| 57ecfadf43 | |||
| 2a4d86de54 | |||
| 71d417710e | |||
| a66b503e57 | |||
| 88f3d92dd8 | |||
| 26199e7317 | |||
| 620dc60342 | |||
| 38305e723f | |||
| cb879ea97f | |||
| f58f4c302c | |||
| fdf3657cf6 | |||
| 8062c5edad | |||
| 0788a3d551 | |||
| b2b6e2e797 | |||
| 5e79293d38 | |||
| 196823b2e0 | |||
| c5b2b5c56c | |||
| 
						
						
							
						
						55d6edcd66
	
				 | 
					
					
						|||
| 
						
						
							
						
						20e920cde2
	
				 | 
					
					
						|||
| 
						
						
							
						
						3fdd1feb94
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4391c0515
	
				 | 
					
					
						|||
| 1acb7d2679 | |||
| ef40391c09 | |||
| 824f445ee1 | |||
| 
						
						
							
						
						407901d990
	
				 | 
					
					
						|||
| 
						
						
							
						
						7132b0c53f
	
				 | 
					
					
						|||
| 
						
						
							
						
						df13fc2e80
	
				 | 
					
					
						|||
| 8adbbf50b2 | |||
| 962c792679 | |||
| c44d8e6437 | |||
| 
						
						
							
						
						4146050807
	
				 | 
					
					
						|||
| bd2f1bf7f2 | |||
| 020daf9a77 | |||
| 
						
						
							
						
						e3ae6260ad
	
				 | 
					
					
						|||
| 
						
						
							
						
						45b9e88915
	
				 | 
					
					
						|||
| 
						
						
							
						
						cf48a18733
	
				 | 
					
					
						|||
| 
						
						
							
						
						9e787a7e44
	
				 | 
					
					
						|||
| 
						
						
							
						
						9cd38a33d4
	
				 | 
					
					
						|||
| 9740435d65 | |||
| b2535662e6 | |||
| 1cf318fca1 | |||
| 
						
						
							
						
						171d4976c3
	
				 | 
					
					
						|||
| 
						
						
							
						
						e13fee75d0
	
				 | 
					
					
						|||
| 
						
						
							
						
						8e1af9cfba
	
				 | 
					
					
						|||
| 
						
						
							
						
						cd6b7d90be
	
				 | 
					
					
						|||
| 
						
						
							
						
						3bdbc67e0d
	
				 | 
					
					
						|||
| 
						
						
							
						
						fe1cc9444d
	
				 | 
					
					
						|||
| 
						
						
							
						
						019d1a7b0d
	
				 | 
					
					
						|||
| 
						
						
							
						
						1453b2abdc
	
				 | 
					
					
						|||
| fe70d2e047 | |||
| 900cb060e4 | |||
| 
						
						
							
						
						bd7f28152a
	
				 | 
					
					
						|||
| 9ec3eca10a | |||
| 4212fbef02 | |||
| 
						
						
							
						
						6c1dfafb2e
	
				 | 
					
					
						|||
| 
						
						
							
						
						18ba3a711a
	
				 | 
					
					
						|||
| 
						
						
							
						
						c1f8512b01
	
				 | 
					
					
						|||
| c14bbe4a93 | |||
| 0e171997d7 | |||
| e08a2b76b9 | |||
| 
						
						
							
						
						6ef593d8f3
	
				 | 
					
					
						|||
| 
						
						
							
						
						08e7a8cf97
	
				 | 
					
					
						|||
| 
						
						
							
						
						d90ccd62f8
	
				 | 
					
					
						|||
| cab20a8c77 | |||
| 6fdd9da2a0 | |||
| 410fd1c425 | |||
| deb154770d | |||
| dcf3b1b1fe | |||
| 06c5344d8a | |||
| 1dd38acee4 | |||
| 26ed774806 | |||
| 06b381d965 | |||
| 4bcfb8f5a2 | |||
| b8064c4a39 | |||
| 5ca96b2dd3 | |||
| 9aec8960b9 | |||
| de35764ede | |||
| 376c359d6e | |||
| a110bf32aa | |||
| f4c9a4bda2 | |||
| 809d25890e | |||
| 7fc934b9df | |||
| 7dbe69ef49 | |||
| 72b5567f73 | |||
| 6a2d5b8161 | |||
| 5058b8905d | |||
| 7d1b99c3f4 | |||
| 8bfacbd5ef | |||
| 8052734028 | |||
| b7eb693295 | |||
| aec383b974 | |||
| caa2800a7a | |||
| e96163f2a5 | |||
| d4b44962f5 | |||
| 58dee642a6 | |||
| a5f9bb3177 | |||
| 939eeb09ec | |||
| a1fec93b25 | |||
| 3be495fc30 | |||
| 73981006a2 | |||
| 5a60558354 | |||
| 6915f0e003 | |||
| a58f51ee91 | |||
| 099eb488ae | |||
| c64ea7f7e6 | |||
| 487b6bf690 | |||
| bd15d7b0e2 | |||
| f8d9925785 | |||
| 4aca7a91e3 | |||
| 0fe7b256ec | |||
| c6664c5cbf | |||
| 3750f1ac57 | |||
| bfa0a0707c | |||
| ffe419e1ab | |||
| 7b38ee3ecc | |||
| f93e299296 | |||
| 004a283163 | |||
| a85b0a4a76 | |||
| 998110dea4 | |||
| 5c79d5e1f7 | |||
| 442b1c94a6 | |||
| 8113a71c79 | |||
| cc60847bd0 | |||
| 0b06bc4c8b | |||
| 9711bb6300 | |||
| 68e4d9be07 | |||
| ec8e8533d6 | |||
| 170cb4d99c | |||
| f4523c8396 | |||
| 23625b2496 | |||
| df69515bd4 | |||
| ddcdc38310 | |||
| 9921522ce0 | |||
| 0aa617d440 | |||
| 1f4880ddec | |||
| 6aa856563e | |||
| ebf5609680 | |||
| 5abcb31e22 | |||
| d400a71626 | |||
| 7811a4cc6b | |||
| b135e2f6a1 | |||
| c5640c9fca | |||
| fe34f69abe | |||
| 899b19f34f | |||
| faeece7210 | |||
| ada77ed53b | |||
| f3cc406495 | |||
| 71eca867ea | |||
| 9c78362ac5 | |||
| a7c6cd017d | |||
| 335394b863 | |||
| de18ebfbe0 | |||
| 93cf6bab01 | |||
| 5afe22bc92 | |||
| 2ff1c0d9d5 | |||
| a6787538f2 | |||
| db79e34d3b | |||
| 016e9dd2df | |||
| d22f948af4 | |||
| 351ca1154b | |||
| 
						
						
							
						
						e1aff4c641
	
				 | 
					
					
						|||
| 
						
						
							
						
						8d041c6753
	
				 | 
					
					
						|||
| 
						
						
							
						
						276501c504
	
				 | 
					
					
						|||
| 65223ad3c7 | |||
| 075c750e4a | |||
| 04f5011e0f | |||
| 832140935f | |||
| 86bc6c4e0e | |||
| 31e24e297f | |||
| 4dacca6df1 | |||
| ce9d00a42a | |||
| 6e4d4cea95 | |||
| 3641dc3bfa | |||
| b899bad0a8 | |||
| 9e0989915c | |||
| 758f2b9d7a | |||
| 46dd662145 | |||
| 8f4bba6fd1 | |||
| a38f5c78ae | |||
| dc36513efa | |||
| ee0646caf1 | |||
| a831ec7bda | |||
| efa9c42345 | |||
| a0b1ac3d06 | |||
| 30bb2da570 | |||
| c45f267e94 | |||
| 13fdaf731c | |||
| d7a35d9818 | |||
| 6cf488d0a6 | |||
| 15139d6944 | |||
| 266abad3b3 | |||
| 042b8fb3c3 | |||
| 303df55a12 | |||
| 50327fb614 | |||
| 7bd2fce86f | |||
| 28beb006b2 | |||
| 7222475985 | |||
| f5a7fd2ffe | |||
| 6bfb0d4fb0 | |||
| 7ac2271eab | |||
| 8efbdf8279 | |||
| 631a1aec42 | |||
| 7eeece6934 | |||
| 04571bbd7a | |||
| 32a4aa48d9 | |||
| 62ae7ff482 | |||
| 5390e947ca | |||
| 9ff154cedc | |||
| 4763ec84fa | |||
| e4fc6e3d2a | |||
| 2543cdf5b7 | |||
| 72b5c7d053 | |||
| d23082283d | |||
| cd514e8125 | |||
| ea9f72b9c4 | |||
| 148a876fc9 | |||
| 9804898d05 | |||
| e04f349e77 | |||
| 8cc4431e22 | |||
| 22dcf10207 | |||
| fa4a40da6e | |||
| a814746c53 | |||
| ed74367f01 | |||
| 3f37c52f67 | |||
| 
						
						
							
						
						a0e305fe1f
	
				 | 
					
					
						|||
| 
						
						
							
						
						d28bc3f74d
	
				 | 
					
					
						|||
| 
						
						
							
						
						b9afeb9c19
	
				 | 
					
					
						|||
| 
						
						
							
						
						7f115303ae
	
				 | 
					
					
						|||
| 
						
						
							
						
						e03df2ebca
	
				 | 
					
					
						|||
| f9e8dc6e60 | |||
| 0179c04472 | |||
| c3b6b0a7ee | |||
| 90b7f069dc | |||
| 4ba9ebf58f | |||
| 8b467ec69e | |||
| 468fa01650 | |||
| 
						
						
							
						
						b39e448ab5
	
				 | 
					
					
						|||
| 8ed3bdc95c | |||
| 04b9ed4504 | |||
| ab6a0c3e4d | |||
| 97a7087827 | |||
| a615ed2d21 | |||
| 3d7d01d6ab | |||
| 78972cd173 | |||
| c8ed7fe20e | |||
| 5ce0a60184 | |||
| fabc6da562 | |||
| 17df79b0d6 | |||
| 178a2183a2 | |||
| ae6b5b491b | |||
| f099cd7688 | |||
| 9fde16c912 | |||
| 770697d5d0 | |||
| af77d083fa | |||
| 9b1ab3eb75 | |||
| 
						
						
							
						
						edf792c4fe
	
				 | 
					
					
						|||
| 
						
						
							
						
						a718d182fc
	
				 | 
					
					
						|||
| 
						
						
							
						
						714e2d07e5
	
				 | 
					
					
						|||
| 
						
						
							
						
						4887dc9e6b
	
				 | 
					
					
						|||
| 
						
						
							
						
						3dc096c42b
	
				 | 
					
					
						|||
| 
						
						
							
						
						ac73e6d2c3
	
				 | 
					
					
						|||
| 
						
						
							
						
						edda42cb61
	
				 | 
					
					
						|||
| 
						
						
							
						
						9887359e31
	
				 | 
					
					
						|||
| 
						
						
							
						
						1f9c9e2407
	
				 | 
					
					
						|||
| 
						
						
							
						
						07d9ab0dd9
	
				 | 
					
					
						|||
| 
						
						
							
						
						a3b119fda6
	
				 | 
					
					
						|||
| 
						
						
							
						
						86241a0052
	
				 | 
					
					
						|||
| 
						
						
							
						
						9715612e46
	
				 | 
					
					
						|||
| 
						
						
							
						
						90d289f56e
	
				 | 
					
					
						|||
| 
						
						
							
						
						9391949369
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b999e7fa7
	
				 | 
					
					
						|||
| 
						
						
							
						
						699fc9a861
	
				 | 
					
					
						|||
| 
						
						
							
						
						66c9a5eea3
	
				 | 
					
					
						|||
| 
						
						
							
						
						af20a36634
	
				 | 
					
					
						|||
| 
						
						
							
						
						ba060be0d6
	
				 | 
					
					
						|||
| a2217b0e64 | |||
| f71a363385 | |||
| 42152ab711 | |||
| 
						
						
							
						
						1820dae3d4
	
				 | 
					
					
						|||
| c9121c5214 | |||
| f079818c42 | |||
| 
						
						
							
						
						29eb0e736f
	
				 | 
					
					
						|||
| 412aaf93bd | |||
| 
						
						
							
						
						0156533385
	
				 | 
					
					
						|||
| 
						
						
							
						
						cbf3315e16
	
				 | 
					
					
						|||
| 
						
						
							
						
						7e6c25901b
	
				 | 
					
					
						|||
| 50d5180076 | |||
| 92fd1548cb | |||
| dbdcf0b0d6 | |||
| bacc46a8dc | |||
| 0fb07fd3d5 | |||
| 98a858876a | |||
| d4fc95ed9f | |||
| 2e00e10e09 | |||
| 4a3af32a65 | |||
| 66ca156ab3 | |||
| d67414e829 | |||
| 0fd18204bf | |||
| f225d9a7c1 | |||
| 9b5fac828b | |||
| 07dd84ff1e | |||
| d5a6feb347 | |||
| 5728d916ef | |||
| e762cc5fb3 | |||
| 119b1c8eb9 | |||
| f72c797f53 | |||
| 71ef1edb68 | |||
| 98ef38f3eb | |||
| 827419ef34 | |||
| 5b4261104e | |||
| ff175170aa | |||
| e4431d20c4 | |||
| 119afe6148 | |||
| ff47fafdc2 | |||
| 0a109e552d | |||
| fa13703394 | |||
| 09ece30304 | |||
| c3604085c2 | |||
| 1274993428 | |||
| a7ccfae04e | |||
| 2c9da6a1e4 | |||
| 2b36195dac | |||
| 758ed22b08 | |||
| 30fba0456b | |||
| 98e69b9a6a | |||
| 531f87cd76 | |||
| 3a0db9c9ad | |||
| c8d1ce40ba | |||
| 32d2ad8f1d | |||
| b34767c870 | |||
| 97567736fb | |||
| 621a6fd401 | |||
| 04b6c7006e | |||
| 8a65aca7b8 | |||
| e3dc39a028 | |||
| 8bb97f5f44 | |||
| 83a373859d | |||
| 52acb3373e | |||
| ad32eee70a | |||
| db3dc80756 | |||
| 65c59352e9 | |||
| 722a4208d4 | |||
| db63757c0c | |||
| 5a9da1a99c | |||
| a71be232ac | |||
| 4e428e6353 | |||
| 6705ede2fc | |||
| 0ff7e0f97a | |||
| e04313b9f3 | |||
| 1166c66c8c | |||
| e78d458f06 | |||
| 4f6f12217c | |||
| ef039c47b8 | |||
| d4b7411de1 | |||
| 2e6a93c479 | |||
| f3a651602b | |||
| 6c00404ca7 | |||
| 1412dd4fb6 | |||
| 1602d5d318 | |||
| 1870bf6405 | |||
| 51b0d897a1 | |||
| 670c753a75 | |||
| 26e48f2f46 | |||
| a352f25029 | |||
| 141438bd24 | |||
| f5e20db03f | |||
| 1cbb7d0af8 | |||
| 09ffcc8804 | |||
| fb062bb4e8 | |||
| 2f58ca8534 | |||
| 5747f73dfe | |||
| 67c0a3b03e | |||
| 490790bd0c | |||
| 7dfc7dc8c1 | |||
| aa63bd1fa5 | |||
| b7383294c9 | |||
| e31a95d1c4 | |||
| 3e9933c7ee | |||
| ee3ef042cd | |||
| 05b0efe851 | |||
| 8ade378a69 | |||
| 045d149946 | |||
| a75f9553be | |||
| f271242d66 | |||
| 1756b5edcc | |||
| 9c1fc44c60 | |||
| f46a705900 | |||
| 9183d18acc | |||
| befa84a74b | |||
| 432b400835 | |||
| 0eb6b7cccb | |||
| 74ee291983 | |||
| a146c34140 | |||
| 61ced11766 | |||
| 468fb096c9 | |||
| 4a2dd19a73 | |||
| 2658cabc9d | |||
| dc83061f80 | |||
| 00da51b6a2 | |||
| f846a18b33 | |||
| ab588b4844 | |||
| d12dca183d | |||
| 701ecbd182 | |||
| bdd2b23ec3 | |||
| d70245b56a | |||
| 9097a3f3c7 | |||
| e05d9d4b2a | |||
| 07572ab3a0 | |||
| 304aabc336 | |||
| 07e8f95a31 | |||
| babea226ab | |||
| 8c24a7310d | |||
| 8f5982fd72 | |||
| 611a2c0b45 | |||
| 3aad452357 | |||
| 61e6b09704 | |||
| 67351d5ada | |||
| a9a0266a84 | |||
| b7e6315be7 | |||
| 740275f57a | |||
| 58dd53def8 | |||
| ddbe30f832 | |||
| 680d496b28 | |||
| 9c163419b2 | |||
| f4fedd20c9 | |||
| 016fab105e | |||
| 767a0eda30 | |||
| f2c71d962a | |||
| 7bf880a29f | |||
| 0185691dba | |||
| 9997aa5470 | |||
| c1ccfe66eb | |||
| ae9f43c707 | |||
| 143002de48 | |||
| d439aedee7 | |||
| b8d010cd39 | |||
| 22370e3e1e | |||
| b98f91f6c1 | |||
| b47bda8ed1 | |||
| 078a04b317 | |||
| d24a983985 | |||
| b964b03b2d | |||
| f0d55f9e5b | |||
| aa54dbbd10 | |||
| 1a62a13d97 | |||
| 500b3b6fc6 | |||
| fa746f910d | |||
| 602c635967 | |||
| 84db92f75e | |||
| 4de71062af | |||
| a4c8319cec | |||
| 379fd6046e | |||
| aa800c4524 | |||
| 7f1fe3a2d8 | |||
| e023220be4 | |||
| 8cf9dd9136 | |||
| 62d18826f1 | |||
| 41f762c6ff | |||
| 644a768778 | |||
| 756ea6d90d | |||
| 2d19d94d09 | |||
| 09a2ba7843 | |||
| 716f2b2832 | |||
| 6934721a42 | |||
| fc8a8ce5a9 | |||
| 5e53795cbe | |||
| 2f2d1c7c7a | |||
| f7be454dae | |||
| ca30fed4c3 | |||
| 54f742bf19 | |||
| 4bfd675073 | |||
| 36420a6855 | |||
| b0a2b5886f | |||
| 33d60ccf7f | |||
| c8472f222c | |||
| e68ac9cc2d | |||
| a306b2a0af | |||
| f112c28391 | |||
| 4693407b68 | |||
| 4e6b3ec9ed | |||
| 38b9a9b34e | |||
| 7c67648b8e | |||
| 9b1d4de9c5 | |||
| 998f93e3fa | |||
| b5e1e0c31b | |||
| 9a65a9f20b | |||
| b2a52b0bfc | |||
| 46862825ec | |||
| dc1e51891e | |||
| 213dba1e75 | |||
| 4e686b4ad0 | |||
| 1e521f0575 | |||
| 53cccc3c13 | |||
| a7c227f8ea | |||
| bc6531f7a5 | |||
| e17b8d2ec4 | |||
| f645b97ba3 | |||
| e79e13416e | |||
| 33773179a7 | |||
| c5b26eade4 | |||
| 28eaf8461a | |||
| 6f67bd500b | |||
| af354bd9fb | |||
| aa746276ae | |||
| 3e3ac9f5be | |||
| ae66820b52 | |||
| 93013d18ff | |||
| 7f3f99c6aa | |||
| 600d0c580d | |||
| 2722e471ef | |||
| d8089489c4 | |||
| cebe6e1423 | |||
| 906aedc911 | |||
| 97df53554e | |||
| a81e939e70 | |||
| b5f4b6cf7b | |||
| f14677ec4e | |||
| 29dc684455 | |||
| 3ff8c6a481 | |||
| f7bc052070 | |||
| 9861772c38 | |||
| d4080fe5cb | |||
| 6b976f1046 | |||
| 673826b131 | |||
| ae729337a2 | |||
| a09cc86336 | |||
| 8620bd0283 | |||
| ea606ce217 | |||
| 99305846f8 | |||
| dd211cdf54 | |||
| 2262a15e35 | |||
| 94431cfdb8 | |||
| 41ec6dc0f2 | |||
| 836ce9a6cd | |||
| ae80eac9a2 | |||
| e063a7148a | |||
| 2808079444 | |||
| 3ba81d19a7 | |||
| 0e6f222ef1 | |||
| 90ca65f9a9 | |||
| f4c156479a | |||
| d9e38d97ee | |||
| 67e94e1ee7 | |||
| b20e38a2bc | |||
| d71031f2e4 | |||
| 98d1da428a | |||
| df7236cfee | |||
| c9cc1d4cfe | |||
| 128bd7d41a | |||
| 061cd0468c | |||
| 2bb0f530fe | |||
| b3f5e74609 | |||
| ff28b628a4 | |||
| 5925de94e7 | |||
| 7c36660000 | |||
| ae8f80bb54 | |||
| 776a53b243 | |||
| 8ad68aca3a | |||
| b1bd7e0215 | |||
| d42b6798e0 | |||
| fa94c67e99 | |||
| 4e9a074e82 | |||
| b82f19ea50 | |||
| 271830422a | |||
| 7869289abc | |||
| 0a84eab0ef | |||
| b816b386cf | |||
| 8d9755c17f | |||
| d552b51c0d | |||
| 52620f3dda | |||
| d7eaceb0fc | |||
| e01fe19d53 | |||
| af1d0759e1 | |||
| af9f346698 | |||
| b6ba2f291a | |||
| c66799b24f | |||
| 18be21a310 | |||
| abef9da9f9 | |||
| 4afddad503 | |||
| cc39acd436 | |||
| 2df556c5be | |||
| aa43912279 | |||
| ece053e5c3 | |||
| 1c0fbace4d | |||
| 2fb7ac7b4b | |||
| c89e332843 | |||
| 10f552f56a | |||
| 310f8f5f3c | |||
| 584b6e3038 | |||
| a81b24b67f | |||
| 6b671cfa65 | |||
| 3408624056 | |||
| 146767b04f | |||
| f4951385fd | |||
| f259face36 | |||
| 8482416ac5 | |||
| a419589a7f | |||
| ebcd0cdfa1 | |||
| 9960fc8ce7 | |||
| 353b9bd322 | |||
| 014ac8b8c2 | |||
| cd8bbaf1f9 | |||
| d98873c9a6 | |||
| aacd4dc088 | |||
| d5d43e8d44 | |||
| 55dd4b28ee | |||
| f9ed42f8a5 | |||
| e9fc0c453d | |||
| ca44b541b1 | |||
| 2968856d71 | |||
| e4530544c2 | |||
| 103800e40c | |||
| aa78d744b4 | |||
| 54c29e893d | |||
| b9d0e4bdd9 | |||
| cdcadf3c18 | |||
| 5243f304af | |||
| a8d19b0ff9 | |||
| 5bdb7414bf | |||
| 77b8c6eb3e | |||
| db669c44f6 | |||
| bfb91f1baa | |||
| 3c33d01089 | |||
| 6156cc0b88 | |||
| bd8389e0c9 | |||
| 58aef99bbc | |||
| 9020014245 | |||
| e523c2fe25 | |||
| 3bd434bbc3 | |||
| 4acf66a020 | |||
| 2af1735cfd | |||
| 13844bce65 | |||
| d7dc3f34c7 | |||
| 086dbcc19e | |||
| 7a53ada4b4 | |||
| c5e18957f5 | |||
| 64b4db98ba | |||
| 3a236a1a3b | |||
| 19006e79b1 | |||
| 44325ee176 | |||
| 397e23f1da | |||
| 3d48f4d046 | |||
| 0d7fe0ff74 | |||
| 543d147b37 | |||
| 34dde2640e | |||
| 205a672680 | |||
| 57b01a5d2c | |||
| 4624d5a2a6 | |||
| 518f9d73f6 | |||
| d8ec121131 | |||
| 3e54bc9c3f | |||
| 65dd0f313b | |||
| 4ca45f348c | |||
| 34a0288987 | |||
| f031c46cb5 | |||
| dbf627cc12 | |||
| b06db0a0fc | |||
| 0a68b50ad7 | |||
| b11ed219a2 | |||
| 67082a6559 | |||
| 39b2a3420c | |||
| 36d5f8fd31 | |||
| cdba7985ea | |||
| 38b7593900 | |||
| 78cc0fc52d | |||
| 4ed112d019 | |||
| 7549a24f6f | |||
| ce7da9f513 | |||
| d53fdf9078 | |||
| 67988dad64 | |||
| 56c5838d15 | |||
| 2950876ce4 | |||
| a875bf55b8 | |||
| a28ba4ec66 | |||
| c65b402361 | |||
| f5e47c6114 | |||
| 600921e3a0 | |||
| 3c38410643 | |||
| 2e0a685507 | |||
| 0ade2ae0ee | |||
| b050047d9a | |||
| 65c231e92d | |||
| 5e93282662 | |||
| 7a7d0e650f | |||
| 4ca8c38c98 | |||
| 0cabe3a9ea | |||
| 845548ed25 | |||
| 858c6c301e | |||
| 9825a8583f | |||
| babc4f80a8 | |||
| 3299260653 | |||
| a0e531445a | |||
| 5e854668b5 | |||
| 52c69f05e6 | |||
| 5dd2638241 | |||
| c835b31e7f | |||
| 57b41701ce | |||
| 69bbe4ea39 | |||
| f2a2c73984 | |||
| 85cf95d6bb | |||
| 08d83c158a | |||
| b0e65867ee | |||
| 106cb1ab35 | |||
| a06d90daad | |||
| 3cc48a4cea | |||
| 04178b8831 | |||
| 28882cc359 | |||
| c9bd922711 | |||
| 94c736d143 | |||
| c4516f53b8 | |||
| f39981deca | |||
| fd8317acd7 | |||
| 7df3308717 | |||
| a76074acf5 | |||
| 697dcab345 | |||
| 104a8cab33 | |||
| 8d4b980c32 | |||
| 677457bbe7 | |||
| 908927ed9f | |||
| 4a287344f4 | |||
| ae0413f7f6 | |||
| 01081cbb29 | |||
| 1d82977ca2 | |||
| bc7bdfe1fe | |||
| 38a0c14940 | |||
| 3941770378 | |||
| e10359077c | |||
| 8d1db69e0d | |||
| 8a2137d5d3 | |||
| e47ba65550 | |||
| 143fb44037 | |||
| 18994f5e65 | |||
| 39a3b4aa6f | |||
| 2b18ab1504 | |||
| 83e0627548 | |||
| 152a3c20cf | |||
| 9e8880c2c5 | |||
| ed8623259e | |||
| 69a3cb20be | |||
| 01b98ca091 | |||
| 0cd246182d | |||
| 9270165bf8 | |||
| 9aedc36e4d | |||
| f5588e9c62 | |||
| afbab6d3f2 | |||
| 6d0bd88cd9 | |||
| 23af9685d6 | |||
| a26d71f745 | |||
| 8404ce237b | |||
| 1610bdecf9 | |||
| 53c88f85d5 | |||
| ac514d9c19 | |||
| e6f0695e1e | |||
| 6b37d292c6 | |||
| e3677f89fe | |||
| 5267bfcd82 | |||
| 99eae0df51 | |||
| 73e2508025 | |||
| 1b2dd12e61 | |||
| 8585114041 | |||
| c4f62842ab | |||
| 800ab7e87f | |||
| 11d9871c0a | |||
| 958abadd65 | |||
| fba856a9a9 | |||
| bc582abcb3 | |||
| ba7a2c3ece | |||
| a8a0299b46 | |||
| f4b47a24c0 | |||
| e9c5bfe324 | |||
| 5dcafa1de0 | |||
| 7522eac9eb | |||
| 847e3bb51d | |||
| 020dfa8278 | |||
| 389b77a092 | |||
| a31f8c934a | |||
| 685a4caace | |||
| 9360dad028 | |||
| 8eac0b5ebd | |||
| 703eaaa9aa | |||
| cab55c79dc | |||
| 62952b89b1 | |||
| b205fb5269 | |||
| 959f37f25a | |||
| 789b0ff7ae | |||
| 601318d7eb | |||
| 87d622c82c | |||
| fc43627abb | |||
| 0878f3882a | |||
| 6a8ddf96b8 | |||
| 6a2f569fc3 | |||
| d2f11b1860 | |||
| cf8dc9ed7d | |||
| f65cf23391 | |||
| b4c6965d9e | |||
| 78d39a3760 | |||
| b58fc90879 | |||
| 2386944ed8 | |||
| 409631fb0a | |||
| 13b8f9b1ec | |||
| d0f641abe0 | |||
| 9b5fc8995c | |||
| 23a4b08709 | |||
| d1775a52aa | |||
| ff6ad60eed | |||
| 95d220c304 | |||
| 65989261b0 | |||
| e365e03c2a | |||
| da36160f6e | |||
| 3f8603967c | |||
| 013692cc41 | |||
| 2f9de8c36e | |||
| fcf3437410 | |||
| f51656a813 | |||
| bb7a616283 | |||
| 028f94a2f7 | |||
| 62ba7a1f80 | |||
| 9d42bb87d9 | |||
| 6c8eeeab31 | |||
| f16d92c1b1 | |||
| 55a22c840c | |||
| caa7c20adf | |||
| 6ee3fe2eef | |||
| 76ea3f7979 | |||
| 3871c8b8de | |||
| e0f94039b4 | |||
| a1380a6e3a | |||
| 795486ae6c | |||
| 4b1221ab99 | |||
| f6f4db525c | |||
| a6e24485e2 | |||
| 74a38dc76b | |||
| 5f6f85a778 | |||
| 6426142039 | |||
| 1541376701 | |||
| 27370fcd44 | |||
| 770fee0097 | |||
| 5903b3ef60 | |||
| 0bf4527e94 | |||
| f695115102 | |||
| a72805d137 | |||
| b7c17fdf0f | |||
| d4ae19ba8e | |||
| e2b36313c1 | |||
| 0c3c61c686 | |||
| 3f72837134 | |||
| 0764dbb662 | |||
| 4336b8c14f | |||
| 9c743eb0d9 | |||
| c35d824fcd | |||
| 3e58e4a8a4 | |||
| 8988905050 | |||
| f29163e8a9 | |||
| 9cfee12774 | |||
| eafc47f7a1 | |||
| 4c57e48399 | |||
| 7a8df782cc | |||
| 4d1fbbcabd | |||
| 053cfed093 | |||
| d09b53f6df | |||
| c474d6ed1d | |||
| def7eca2f2 | |||
| 520b41c53b | |||
| 28d7dcf177 | |||
| 36d7852c1d | |||
| 6a37503154 | |||
| 12c7ed2cb5 | |||
| 33babebb6f | |||
| 5c97020087 | |||
| 0adfb0cd3c | |||
| 0bba9b53ba | |||
| 1f6c986a0c | |||
| 746254a838 | |||
| 437288de1e | |||
| 534945cfec | |||
| 9613d4aa51 | |||
| bc72f59abb | |||
| 00214dc378 | |||
| fb324516bb | |||
| 7023fe5c42 | |||
| 1727168ee5 | |||
| f1774fe80f | |||
| fcb5613aa8 | |||
| 363fc89209 | |||
| 1a0e632d2f | |||
| 6dbb9b5e37 | |||
| 31e2205e71 | |||
| c83afa4e10 | |||
| e10768386d | |||
| be41d4f819 | |||
| 5adde9c1c4 | |||
| 8dfdc62125 | |||
| c53c052876 | |||
| f8ff9c355c | |||
| e0f5d049e3 | |||
| 4c85b5d951 | |||
| 80ad923181 | |||
| ec95792bc3 | |||
| 53c839e389 | |||
| 68bc7f7682 | |||
| efa3c11c7a | |||
| 19723e88d3 | |||
| b469455b9b | |||
| 861bee8083 | |||
| bb8d4fbc57 | |||
| dc92770c01 | |||
| 935f49094f | |||
| 11acfbbc91 | |||
| 3e7901f060 | |||
| 58c343b8de | |||
| 0ef3104e2e | |||
| b92924881b | |||
| 63b50e6101 | |||
| e7eaaa9295 | |||
| 7c700a9e19 | |||
| 9af7b6a39b | |||
| 079da3b0e4 | |||
| cb2fe300b2 | |||
| e9901f3c85 | |||
| c37f26021c | |||
| 58e427d51d | |||
| 3d93431278 | |||
| b301cbc750 | |||
| e69812b48b | |||
| 0301c18af2 | |||
| f71972609c | |||
| 61c26fe53a | |||
| 40c000b183 | |||
| bee8838010 | |||
| ff25f6ff3f | |||
| dd28767d68 | |||
| 13f269e6aa | |||
| 6331aef987 | |||
| 59d40a6794 | |||
| 29ba7b87b7 | |||
| 87e1746d71 | |||
| da386edd05 | |||
| c40a192c48 | |||
| 58058bd402 | |||
| 2fa5024236 | |||
| 3135bb923e | |||
| 6f368ef01a | |||
| d6409b6112 | |||
| 72598e2ae6 | |||
| 9dc0c5bde0 | |||
| ec40044b6e | |||
| bea0c31a12 | |||
| 04e5c212d7 | |||
| fe1fb9425e | |||
| 96bd188e57 | |||
| 90db9785ea | |||
| 506c8a3fa6 | |||
| 8fa5777634 | |||
| 613d7738a8 | |||
| b32e0ef4fb | |||
| 150595b7f7 | |||
| 07f482a98b | |||
| c759e118fa | |||
| 82a9dbd632 | |||
| 7e35a0a481 | |||
| 330e26b2ba | |||
| 7dc587e2df | |||
| 41215c9ae9 | |||
| dce6323090 | |||
| 906413e800 | |||
| ad72301ea0 | |||
| 44d0f1c533 | |||
| 1e1d41270b | |||
| 15b3144760 | |||
| d9284478c4 | |||
| 74603f9969 | |||
| 69bb3922d3 | |||
| 52c439c501 | |||
| f273eaccfb | |||
| 5ec001652f | |||
| cbbac0d7a9 | |||
| 267f900545 | |||
| 012e173487 | |||
| 91b83d477b | |||
| 349332c1e1 | |||
| d226726a27 | |||
| 9d8dfdfd4f | |||
| 1f4c171576 | |||
| 21159107d7 | |||
| e8e01cf198 | |||
| fd235488f7 | |||
| d85fb18112 | |||
| a9efedfc86 | |||
| 175c0f9961 | |||
| fd61a3f243 | |||
| cc4ef09e9f | |||
| 0bced7eca5 | |||
| abf689872d | |||
| 7f36bd365f | |||
| 0bb6c15b97 | |||
| e68918e978 | |||
| 45054cc863 | |||
| e6813efb88 | |||
| 8597e04eaf | |||
| 493f89e0cb | |||
| f622e1afe4 | |||
| 7af2b5ddf9 | |||
| dda8261fc3 | |||
| f61c448a24 | |||
| 884462e793 | |||
| 7a0641b98c | |||
| 7bca418db8 | |||
| 32bab161ef | |||
| 9c735e36b8 | |||
| b5d5dc5ad8 | |||
| b6e08f369a | |||
| 9b088a22b4 | |||
| cf2fb54cc1 | |||
| f749866818 | |||
| 7e675ba35d | |||
| 16441678c9 | |||
| f271da3b04 | |||
| 13defc5053 | |||
| 6f7cde69e5 | |||
| b8a58edf5a | |||
| 9e393f61a1 | |||
| d824f8ba9e | |||
| d6331aab0b | |||
| 56642a11f7 | |||
| f6a0954315 | |||
| 57f5a22b04 | |||
| 2dc22a7d8f | |||
| c611bc824b | |||
| 481b0361f9 | |||
| 60cb56769d | |||
| 140fd9f4f5 | |||
| 7b3265ea91 | |||
| a94e7ed17c | |||
| e5f06fe19f | |||
| ddad5e30a4 | |||
| 7d29da1263 | |||
| dec13c7d13 | |||
| 9c8fc84053 | |||
| 577e45fec3 | |||
| 8611144a70 | |||
| 25de385766 | |||
| 9e719d455a | |||
| fabb643026 | |||
| 0256824e37 | |||
| 24fb8e34f2 | |||
| b9cf144c1f | |||
| bb0c4ac03e | |||
| ce04532759 | |||
| d00cfc420c | |||
| 2153294e6f | |||
| 17b9086974 | |||
| 0fdc79df5e | |||
| 0e5a3a2f6c | |||
| 4277a98c16 | |||
| 34cd92840f | |||
| 3f94bf7855 | |||
| 1b05f45e24 | |||
| be4a6b2434 | |||
| f68f4066be | |||
| 3f1f3fa916 | |||
| b81618344e | |||
| d85ddcdbff | |||
| 092e9fa508 | |||
| 379c868abb | |||
| c9ec0f67bd | |||
| 9003eea07b | |||
| 8464dd1eae | |||
| 6a07471c3a | |||
| beb80e7a0b | |||
| eee829919b | |||
| 3150261e3e | |||
| fe01d3d4b5 | |||
| bc6b492976 | |||
| 11ccd1f535 | |||
| b891198bee | |||
| da831ff789 | |||
| 078299a07c | |||
| 2f5ec84237 | |||
| 9c22e4cab2 | |||
| 2694f0cbc8 | |||
| 6e4d27a454 | |||
| ab74382c12 | |||
| 2be5cdabb0 | |||
| 11e1222a7c | |||
| 573ff334b8 | |||
| 19dd7a0964 | |||
| a92f664770 | |||
| bb27700cc2 | |||
| 3e3355a926 | |||
| 55d32a2bb0 | |||
| 68e68afdd6 | |||
| fede1fc4b3 | |||
| 394f0498c5 | |||
| 809e1ecf88 | |||
| a75b4fd951 | |||
| 2f990d8bbc | |||
| 8482d56fd0 | |||
| e349504b41 | |||
| 0bb5f08d23 | |||
| 0dbe6b9854 | |||
| 043a458f42 | |||
| c682d75aff | |||
| aea4313b7d | |||
| 11c54e270f | |||
| 881a03fbed | |||
| f9e04ed9a2 | |||
| d8f84ed00d | |||
| b516f12a61 | |||
| de4bf6dd55 | |||
| 159da20ef2 | |||
| 22f8d256dd | |||
| 7cf3247cbd | |||
| 8843a0d8c5 | |||
| ec18cb7007 | |||
| 74bb27e61f | |||
| 5890e639fe | |||
| ba9cf5d79d | |||
| 7c2755db26 | |||
| 0b81a92941 | |||
| f39d03afc2 | |||
| b54ced65f6 | |||
| ff8ebfe67a | |||
| 99e6ea6000 | |||
| 4871479ed5 | |||
| a196ab136e | |||
| ba1cc420c4 | |||
| 1dfbb9474c | |||
| 0e8859c278 | |||
| eb46841237 | |||
| d44142ac26 | |||
| a8af3a8447 | |||
| 97a947f5aa | |||
| 5d63160c57 | |||
| a4ba52e76d | |||
| a5318b430b | |||
| 9cec20a550 | |||
| 024da6ceef | |||
| d544792e29 | |||
| 9a5901235c | |||
| e16ee5d6a5 | |||
| 596b6eb46d | |||
| 5b84808d7c | |||
| ce59e66c05 | |||
| af85c883fa | |||
| 1fd5d065b6 | |||
| 509d144117 | |||
| f7be8ea63c | |||
| 3c6eb265c7 | |||
| b1d2f73b01 | |||
| eda1f7e212 | |||
| 56a4378a63 | |||
| a16671762d | |||
| 6da3d6f06a | |||
| 2f0aed97dc | |||
| 350ed59033 | |||
| 52ab77eded | |||
| 4ff1548cf2 | |||
| f6d1a41cb9 | |||
| 1623dd1c80 | |||
| 94ae33a554 | |||
| e3c41dd807 | |||
| 096253a9a3 | |||
| 11e5866f31 | |||
| 9b8092fb09 | |||
| f546df50a1 | |||
| 2f263c6aa6 | |||
| 8201a4140a | |||
| 364342855d | |||
| c688a51838 | |||
| 8c83ec78fd | |||
| 715a69db89 | |||
| dc44af5b29 | |||
| 27f29eda40 | |||
| 50a62b9243 | |||
| da7c450e06 | |||
| a92fa31cb5 | |||
| d273621419 | |||
| f229ebb141 | |||
| 64ec76bfb7 | |||
| a2f2e1b84e | |||
| 19753c43f1 | |||
| 69525b6fd1 | |||
| c1d8eda2c7 | |||
| 7ab01687ce | |||
| 22076ea25e | |||
| 7c54e920ef | |||
| be848ea5e4 | |||
| 8dd22b6ea0 | |||
| 53c38d9c05 | |||
| d894479f75 | |||
| 37e128041f | |||
| bab0bbf82d | |||
| 7d9be35cb4 | |||
| 95a4d88ed4 | |||
| 102228100e | |||
| c4fe772fe7 | |||
| ccf1fcaa79 | |||
| 4fdb2de510 | |||
| 5e2f7fa3ed | |||
| 7ddfdc0978 | |||
| bb895c9e12 | |||
| 8b11302028 | |||
| c1b4a1c164 | |||
| 58212d7081 | |||
| a6e6ee053d | |||
| 3eb5fc7f47 | |||
| 533aaa207c | |||
| 005d5a5223 | |||
| e82777479b | |||
| 2b12cc4fa2 | |||
| ec2db69236 | |||
| 263f4eb25f | |||
| 3e5937db67 | |||
| d322096573 | |||
| a392e31f99 | |||
| 719ffcad2b | |||
| 8fa2d0be0b | |||
| 017171f221 | |||
| f2210010de | |||
| 07394ddfc9 | |||
| a51a680396 | |||
| 9c300298b7 | |||
| dcbf1502a2 | |||
| f8c9ddbc3c | |||
| 74fa81d8f6 | |||
| d3bf70243b | |||
| 66b38fa294 | |||
| 4392598a67 | |||
| 6e049f3ee1 | |||
| 157e7d2b4d | |||
| 882fb02600 | |||
| 6688499128 | |||
| 038a529b06 | |||
| c9e16642c5 | |||
| 1f9935cf22 | |||
| ee3926fe2a | |||
| 26a9dce0a0 | |||
| f358719778 | |||
| 4d74c8ec43 | |||
| e77766ae59 | |||
| 9d1d62aee0 | |||
| bf2d97bd60 | |||
| 79bd349ac7 | |||
| 63f45ec27e | |||
| 9cdc932ad8 | |||
| 721a01409e | |||
| a0d6552781 | |||
| c709b2a526 | |||
| 5793d73ff6 | |||
| f62b312d3c | |||
| c63b13fc40 | |||
| 224a3af6f8 | |||
| 131c508cae | |||
| 7a62624687 | |||
| 337717d271 | |||
| 9c77703ada | |||
| 718d067b40 | |||
| 37b540fd48 | |||
| 36f820a07a | |||
| 73c594a930 | |||
| 88db78fed9 | |||
| 5f3bd5c754 | |||
| 63275df3f0 | |||
| d6f537da5f | |||
| 9a7779cffb | |||
| 0fa1bab94d | |||
| 29179bde0c | |||
| b9a6425078 | |||
| e13636167f | |||
| 9b849d10e9 | |||
| 77b7433caf | 
							
								
								
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -10,9 +10,6 @@
 | 
			
		||||
[submodule "thirdparty/lwgps"]
 | 
			
		||||
	path = thirdparty/lwgps
 | 
			
		||||
	url = https://github.com/rmspacefish/lwgps.git
 | 
			
		||||
[submodule "thirdparty/arcsec_star_tracker"]
 | 
			
		||||
	path = thirdparty/arcsec_star_tracker
 | 
			
		||||
	url = https://egit.irs.uni-stuttgart.de/eive/arcsec_star_tracker.git
 | 
			
		||||
[submodule "thirdparty/json"]
 | 
			
		||||
	path = thirdparty/json
 | 
			
		||||
	url = https://github.com/nlohmann/json.git
 | 
			
		||||
@@ -22,3 +19,6 @@
 | 
			
		||||
[submodule "thirdparty/gomspace-sw"]
 | 
			
		||||
	path = thirdparty/gomspace-sw
 | 
			
		||||
	url = https://egit.irs.uni-stuttgart.de/eive/gomspace-sw.git
 | 
			
		||||
[submodule "thirdparty/sagittactl"]
 | 
			
		||||
	path = thirdparty/sagittactl
 | 
			
		||||
	url = https://egit.irs.uni-stuttgart.de/eive/sagittactl.git
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.idea/cmake.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								.idea/cmake.xml
									
									
									
										generated
									
									
									
								
							@@ -2,8 +2,7 @@
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="CMakeSharedSettings">
 | 
			
		||||
    <configurations>
 | 
			
		||||
      <configuration PROFILE_NAME="Debug" ENABLED="true" CONFIG_NAME="Debug" NO_GENERATOR="true" />
 | 
			
		||||
      <configuration PROFILE_NAME="Debug Q7S" ENABLED="true" CONFIG_NAME="Debug" TOOLCHAIN_NAME="Q7S" GENERATION_OPTIONS="-DTGT_BSP="arm/q7s"" NO_GENERATOR="true">
 | 
			
		||||
      <configuration PROFILE_NAME="Debug Q7S" ENABLED="true" CONFIG_NAME="Debug" TOOLCHAIN_NAME="Default" GENERATION_OPTIONS="-DTGT_BSP="arm/q7s"" NO_GENERATOR="true">
 | 
			
		||||
        <ADDITIONAL_GENERATION_ENVIRONMENT>
 | 
			
		||||
          <envs>
 | 
			
		||||
            <env name="ZYNQ_7020_ROOTFS" value="/opt/xiphos/sdk/ark/sysroots/cortexa9hf-neon-xiphos-linux-gnueabi" />
 | 
			
		||||
@@ -11,6 +10,7 @@
 | 
			
		||||
          </envs>
 | 
			
		||||
        </ADDITIONAL_GENERATION_ENVIRONMENT>
 | 
			
		||||
      </configuration>
 | 
			
		||||
      <configuration PROFILE_NAME="Debug" ENABLED="true" CONFIG_NAME="Debug" NO_GENERATOR="true" />
 | 
			
		||||
    </configurations>
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										969
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										969
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,962 @@ will consitute of a breaking change warranting a new major release:
 | 
			
		||||
 | 
			
		||||
# [unreleased]
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added a new safety mechanism where the ProASIC scratch buffer can be used to trigger an
 | 
			
		||||
  auto-boot to another image. The auto-boot is currently implemented as a one-shot mechanism:
 | 
			
		||||
  The key-value pair which triggers the auto-boot will be removed from the scratch buffer.
 | 
			
		||||
  See more information [here](https://egit.irs.uni-stuttgart.de/redmine/projects/eive-flight-manual/wiki/OBC_Auto_Switch_Image)
 | 
			
		||||
 | 
			
		||||
# [v7.2.0] 2023-10-27
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc` v5.10.1
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- STR: Added new TM sets: Blob, Blobs, MatchedCentroids, Contrast, AutoBlob, Centroid, Centroids
 | 
			
		||||
- STR: Added new mechanism where the secondary TM which is polled can now be a set instead of
 | 
			
		||||
  being temperature only. An API is exposed which allows to add a data set to that set of secondary
 | 
			
		||||
  telemetry, reset it back to temperature only, and read the whole set. This allows more debugging
 | 
			
		||||
  capability.
 | 
			
		||||
- CFDP source handler, which allows file downlink using the standardized
 | 
			
		||||
  CFDP interface.
 | 
			
		||||
- Proper back pressure handling for the CFDP handler, where the `LiveTmTask` is able to throttle
 | 
			
		||||
  the CFDP handler.
 | 
			
		||||
- Added CFDP fault handler events.
 | 
			
		||||
- The EIVE system will command the payload OFF explicitely again when receiving the
 | 
			
		||||
  `power::POWER_LEVEL_CRITICAL` event.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- If the PTME is driven in a way where it fills faster than it can be emptied, the interface
 | 
			
		||||
  can become full during the process of a regular packet write. The interface of the PAPB VC
 | 
			
		||||
  was adapted to be stateful now. Packet generation is started with a `write` call while
 | 
			
		||||
  write transfers are advanced and completed with the `advanceWrite` call if they can not be
 | 
			
		||||
  completed immediately.
 | 
			
		||||
- CFDP Space Packets SSC is now generated properly, was always 0 before.
 | 
			
		||||
- Host build fixes
 | 
			
		||||
- PL Enable set of the power controller is now set to invalid properly if the power controller
 | 
			
		||||
  is not in normal mode.
 | 
			
		||||
- MPSoC debug mode.
 | 
			
		||||
- Possible bugfix for PL PCDU parameter JSON handling which might not have been initialized
 | 
			
		||||
  properly from the JSON file.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Swapped RTD 9 (PLOC HPA Sensor) and RTD 11 (PLOC MPA Sensor) chip select definitions. It is
 | 
			
		||||
  strongly suspected the cables for those devices were swapped during integration. This is probably
 | 
			
		||||
  the easiest way to fix the issue without the need to tweak ground or other OBSW or controller
 | 
			
		||||
  code.
 | 
			
		||||
- Added a 3 second delay in the EIVE system between commanding all PL components except the SUPV,
 | 
			
		||||
  and the SUPV itself OFF when the power level becomes low or critical.
 | 
			
		||||
- SUS FDIR should now trigger less events. The finish event is now only triggered once the
 | 
			
		||||
  SUS has been working properly for a minute again. It will then display the number of periods
 | 
			
		||||
  during which the SUS was not working as well as the maximum amount of invalid messages.
 | 
			
		||||
- Updated battery internal resistance to new value
 | 
			
		||||
 | 
			
		||||
# [v7.1.0] 2023-10-11
 | 
			
		||||
 | 
			
		||||
- Bumped `eive-tmtc` to v5.8.0.
 | 
			
		||||
- Activate Xiphos WDT with a timeout period of 80 seconds using the `libxiphos` API. The WDT
 | 
			
		||||
  calls are done by the new `XiphosWdtHandler` object.
 | 
			
		||||
 | 
			
		||||
# [v7.0.0] 2023-10-11
 | 
			
		||||
 | 
			
		||||
- Bumped `eive-tmtc` to v5.7.1.
 | 
			
		||||
- Bumped `eive-fsfw`
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- EPS Subsystem has been added to EIVE System Tree
 | 
			
		||||
- Power Controller for calculating the State of Charge and FDIR regarding low SoC has been
 | 
			
		||||
  introduced.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Changed internals for MPSoC boot process to make the code more understandable and some
 | 
			
		||||
  parameters better configurable. This should not affect the behaviour of the OBSW, but might
 | 
			
		||||
  make it more reliable and fix some corner cases.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Missing `nullptr` checks for PLOC Supervisor handler, which could lead to crashes.
 | 
			
		||||
- SCEX bugfix for normal and transition commanding.
 | 
			
		||||
 | 
			
		||||
# [v6.6.0] 2023-09-18
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Changed the memory initialized for the PDEC Config Memory and the PDEC RAM by using `mmap`
 | 
			
		||||
  directly and ignoring UIO. This makes the OBSW compatible to a device tree update, where those
 | 
			
		||||
  memory segments are marked reserved and are thus not properly accessible through the UIO API
 | 
			
		||||
  anymore. This change should be downwards compatible to older device trees.
 | 
			
		||||
 | 
			
		||||
# [v6.5.1] 2023-09-12
 | 
			
		||||
 | 
			
		||||
- Bumped `eive-tmtc` to v5.5.0.
 | 
			
		||||
 | 
			
		||||
# [v6.5.0] 2023-09-12
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Relaxed SUS FDIR. The devices have shown to be glitchy in orbit, but still seem to deliver
 | 
			
		||||
  sensible raw values most of the time. Some further testing is necessary, but some changes in the
 | 
			
		||||
  code should cause the SUS devices to remain healthy for now.
 | 
			
		||||
- The primary and the secondary temperature sensors for the PLOC mission boards are exchanged.
 | 
			
		||||
- ACS parameters for the SUSMGM (FLP) safe mode have been adjusted. This safe mode is now the
 | 
			
		||||
  default one.
 | 
			
		||||
- MGM3100 Startup Configuration: Ignore bit 1 of the CMM reply, which is sometimes set to
 | 
			
		||||
  1 in the reply for some reason.
 | 
			
		||||
 | 
			
		||||
# [v6.4.1] 2023-08-21
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- `PDEC_CONFIG_CORRUPTED` event now actually contains the readback instead of the expected
 | 
			
		||||
  config
 | 
			
		||||
- Magnetic field vector was not calculated if only MGM4 was available, but still written to
 | 
			
		||||
  the dataset. This would result in a NaN vector. Allowance for usage of MGM4 is now checked
 | 
			
		||||
  before entering calculation.
 | 
			
		||||
 | 
			
		||||
# [v6.4.0] 2023-08-16
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc`: v5.4.3
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- The handling function of the GPS data is only called once per GPS read. This should remove
 | 
			
		||||
  the fake fix-has-changed events.
 | 
			
		||||
- Fix for PLOC SUPV HK set parsing.
 | 
			
		||||
- The timestamp for the `POSSIBLE_FILE_CORRUPTION` event will be generated properly now.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- PDEC FDIR rework: A full PDEC reboot will now only be performed after a regular PDEC reset has
 | 
			
		||||
  failed 10 times. The mechanism will reset after no PDEC reset has happended for 2 minutes.
 | 
			
		||||
  The PDEC reset will be performed when counting 4 dirty frame events 10 seconds after the count
 | 
			
		||||
  was incremented initially.
 | 
			
		||||
- GPS Fix has changed event is no longer triggered for the EM
 | 
			
		||||
- MGM and SUS rates now will only be calculated, if 2 valid consecutive datapoints are available.
 | 
			
		||||
  The stored value of the last timestep will now be reset, if no actual value is available.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- The PLOC SUPV HK set is requested and downlinked periodically if the SUPV is on now.
 | 
			
		||||
- SGP4 Propagator is now used for propagating the position of EIVE. It will only work once
 | 
			
		||||
  a TLE has been uploaded with the newly added action command for the ACS Controller. In
 | 
			
		||||
  return the actual GPS data will be ignored once SPG4 is running. However, by setting the
 | 
			
		||||
  according parameter, the ACS Controller can be directed to ignore the SGP4 solution.
 | 
			
		||||
- Skyview dataset for more GPS TM has been added
 | 
			
		||||
- `PDEC_CONFIG_CORRUPTED` event which is triggered when the PDEC configuration does not match the
 | 
			
		||||
  expected configuration. P1 will contain the readback of the first word and P2 will contain the
 | 
			
		||||
  readback of the second word.
 | 
			
		||||
- The MGM and SUS vectors being too close together does not prevent the usage of the safe
 | 
			
		||||
  mode controller anymore.
 | 
			
		||||
- Parameter to disable usage of MGM4, which is part of the MTQ and therefore cannot be
 | 
			
		||||
  disabled without disabling the MTQ itself.
 | 
			
		||||
 | 
			
		||||
# [v6.3.0] 2023-08-03
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Small SCEX fix: The temperatur check option was not passed
 | 
			
		||||
  on for commands with a user data size larger than 1.
 | 
			
		||||
- SCEX: Properly check whether filesystem is usable for filesystem checks.
 | 
			
		||||
- ACS Controller strategy is now actually written to the dataset for detumbling.
 | 
			
		||||
- During detumble the fused rotation rate is now calculated.
 | 
			
		||||
- Detumbling is now exited when its exit value is undercut and not its entry value.
 | 
			
		||||
- Rotation rate of last cycle is now stored in all cases for the fused rotational rate
 | 
			
		||||
  calculation.
 | 
			
		||||
- Fused rotation rate estimation during eclipse can be disabled. This will also prevent
 | 
			
		||||
  detumbling during eclipse, as no relevant rotational rate is available for now.
 | 
			
		||||
- `EiveSystem`: Add a small delay between triggering an event for FDIR reboots and sending the
 | 
			
		||||
  command to the core controller.
 | 
			
		||||
- PL PDU: Fixed bounds checking logic. Bound checks will only be performed for modules which are
 | 
			
		||||
  enabled.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- SCEX: Only perform filesystem checks when not in OFF mode.
 | 
			
		||||
- The `EiveSystem` now only sends reboot commands targetting the same image.
 | 
			
		||||
- Added 200 ms delay between switching HPA/MPA/TX/X8 and DRO GPIO pin OFF.
 | 
			
		||||
- PL PCDU ADC set is now automatically enabled for `NORMAL` mode transitions. It is automatically
 | 
			
		||||
  disabled for `OFF` mode transitions.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- PL PCDU for EM build.
 | 
			
		||||
- SCEX: Add warning event if filesystem is unusable.
 | 
			
		||||
 | 
			
		||||
# [v6.2.0] 2023-07-26
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc`: v5.3.1
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- STR missed reply handling is now moved to DHB rather than the COM interface. The COM IF will
 | 
			
		||||
  still trigger an event if a reply is taking too long, and FDIR should still work via reply
 | 
			
		||||
  timeouts.
 | 
			
		||||
- Re-ordered some functions of the core controller in the initialize function.
 | 
			
		||||
- Rad sensor is now only polled every 30 minutes instead of every device cycle to reduce wear of
 | 
			
		||||
  the RADFET electronics.
 | 
			
		||||
- The SD cards will still be switched OFF on a reboot, but this is done in a non-blocking manner
 | 
			
		||||
  now with a timeout of 10 seconds where the reboot will be performed in any case.
 | 
			
		||||
- ACS Controller now includes the safe mode from FLP, which will calculate its rotational rate
 | 
			
		||||
  from SUS and MGM measurements. To accommodate these changes, low-pass filters for SUS
 | 
			
		||||
  measurements and rates as well as MGM measurements and rates are included. Usage of the new
 | 
			
		||||
  controller as well as settings of the low-pass filters can be handled via parameter commands.
 | 
			
		||||
- Simplify and fix the chip and copy protection functions in the core controller. This mechanism
 | 
			
		||||
  now is always performed for the target chip and target copy in the reboot handlers.
 | 
			
		||||
- Improvement in FSFW: HK generation is now countdown based.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- 5 ms delay after pulling RADFET enable pin high before starting
 | 
			
		||||
  the ADC conversion.
 | 
			
		||||
- Set STR time in configuration sequence to firmware mode.
 | 
			
		||||
- The STR `AutoThreshold` parameters are now set from the configuration JSON file at STR
 | 
			
		||||
  startup.
 | 
			
		||||
- The STR handler can now handle the COM error reply and triggers an low severity event accordingly.
 | 
			
		||||
- Add SCEX handler for EM.
 | 
			
		||||
- Radiation sensor handler dummy for the EM.
 | 
			
		||||
- Added event for SD card information in core controller initialize function. This event will also
 | 
			
		||||
  be triggered after the SD state machine has run, so the event will generally be triggered twice
 | 
			
		||||
  at system boot, and once after commanding SD card switches.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- General bugs in the SD card state machine. This might fix some other known bugs for certain
 | 
			
		||||
  combinations of switching ON and OFF SD cards and also makes the whole state machine a lot more
 | 
			
		||||
  robust against hanging up.
 | 
			
		||||
- SUS dummy handler went to `MODE_NORMAL` for ON commands.
 | 
			
		||||
- PL PCDU dummy went to `MODE_NORMAL` for ON commands.
 | 
			
		||||
 | 
			
		||||
# [v6.1.0] 2023-07-13
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc`: v5.2.0
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- TCS: Remove OBC IF board thermal module, which is exactly identical to OBC module and therefore
 | 
			
		||||
  obsolete.
 | 
			
		||||
- Swapped PL and PS I2C, BPX battery and MGT are connected to PS I2C now for firmware versions
 | 
			
		||||
  equal or above v4. However, this software version is compatible to both v3 and v4 of the firmware.
 | 
			
		||||
- The firmware version variables are global statics inititalized early during the program
 | 
			
		||||
  runtime now. This makes it possible to check the firmware version earlier.
 | 
			
		||||
- The TCS controller will now always command heaters OFF when being blind for thermal
 | 
			
		||||
  components (no sensors available), irrespective of current switch state.
 | 
			
		||||
- Make OBSW compatible to prospective FW version v5.0.0, where the Q7 I2C devices were
 | 
			
		||||
  moved to a PL I2C block and the TMP sensor devices were moved to the PS I2C0.
 | 
			
		||||
- Made `Xadc` code a little bit more robust against errors.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- TMP1075: Set dataset invalid on shutdown explicitely
 | 
			
		||||
- Small fixes for TMP1075 FDIR: Use strange and missed reply counters.
 | 
			
		||||
- TCS controller: Last heater (S-band heater) was skipped for transition completion
 | 
			
		||||
  checks.
 | 
			
		||||
- TCS controller: A helper member to track the elapsed heater control cycles was not reset
 | 
			
		||||
  properly, which could lead to switch transitions being completed immediately. This can
 | 
			
		||||
  lead to weird bugs like heaters being commanded ON twice and can potentially lead to
 | 
			
		||||
  other bugs.
 | 
			
		||||
- TMP1075: Devices did not go to OFF mode when being set faulty.
 | 
			
		||||
- Update PL PCDU 1 in TCS mode tree on the EM.
 | 
			
		||||
- TMP1075: Possibly ignored health commands.
 | 
			
		||||
- Bugfix in FSFW where certain packet types could only be sent with source data fields with a
 | 
			
		||||
  maximum size of 255 bytes.
 | 
			
		||||
- TCS CTRL: Limit number of heater handler messages sent in case there are not sensors available
 | 
			
		||||
  anymore.
 | 
			
		||||
- Fix to allow adding real STR device for EM.
 | 
			
		||||
 | 
			
		||||
# Added
 | 
			
		||||
 | 
			
		||||
- Two events for heaters being commanded ON and OFF by the TCS controller
 | 
			
		||||
- Upper limit for burn time of TCS heaters. Currently set to 1 hour for each heater.
 | 
			
		||||
  This mechanism will only track the burn time for heaters which were commanded by the
 | 
			
		||||
  TCS controller.
 | 
			
		||||
- TCS controller is now observable by introducing a new HK dataset which exposes some internal
 | 
			
		||||
  fields related to TCS control.
 | 
			
		||||
 | 
			
		||||
# [v6.0.0] 2023-07-02
 | 
			
		||||
 | 
			
		||||
- `q7s-package` version v3.2.0
 | 
			
		||||
- Important bugfixes for PTME. See `q7s-package` CHANGELOG.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Added back PTME busy bit polling. This is necessary due to changes to the AXI APB interface
 | 
			
		||||
  to the PTME core.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- For the live channel (VC0), telemetry was still only dumped if the transmitter is active.
 | 
			
		||||
  Please note that this fix will lead to crashes for FW versions below v3.2.
 | 
			
		||||
  However, it might not be an issue for the oldest firmware on the satellite (v2.5.1).
 | 
			
		||||
 | 
			
		||||
# [v5.2.0] 2023-07-02
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- The firmware information event was not triggered even when possible because of an ordering
 | 
			
		||||
  bug in the initializer function.
 | 
			
		||||
- Empty dumps (no TM in time range) will now correctly be completed immediately
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- PTME was always reset on submode changes. The reset will now only be performed if the actual data
 | 
			
		||||
  rate changes.
 | 
			
		||||
- Add back ACS board code for the EM. Now that the radiation sensor was removed, the image switching
 | 
			
		||||
  issue has disappeared and adding back the ACS board is worth it for the GPS timekeeping.
 | 
			
		||||
 | 
			
		||||
# [v5.1.0] 2023-06-28
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc` version v5.1.0
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Persistent TM store dumps are now performed in chronological order.
 | 
			
		||||
- Increase Syrlinks RX HK rate to 5.0 seconds during a pass.
 | 
			
		||||
- Various robustness improvements for the heater handler. The heater handler will now only
 | 
			
		||||
  process the command queue if it is not busy with switch commanding which reduces the amount
 | 
			
		||||
  of possible bugs.
 | 
			
		||||
- The heater handler is only able to process messages stricly sequentially now but is scheduled
 | 
			
		||||
  twice in a 0.5 second slot so something like a consecutive heater ON or OFF command can still
 | 
			
		||||
  be handled relatively quickly.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Sequence counters for PUS and CFDP packets are now stored persistently across graceful reboots.
 | 
			
		||||
- The PUS packet message type counter will now be incremented properly for each PUS service.
 | 
			
		||||
- Internal error reporter set is now enabled by default and generated every 120 seconds.
 | 
			
		||||
 | 
			
		||||
# [v5.0.0] 2023-06-26
 | 
			
		||||
 | 
			
		||||
v3.3.1 and all following version will now be moved to v5.0.0 with the additional changes listed
 | 
			
		||||
here. This was done because the firmware update (v4.0.0) is not working right now and it is not
 | 
			
		||||
known when and how it will be fixed. Because of that, all updates to make the SW work with the new
 | 
			
		||||
firmware, which are limited to a few files will be moved to a dev branch so regular development
 | 
			
		||||
compatible to the old firmware can continue.
 | 
			
		||||
 | 
			
		||||
TLDR: This version is compatible to the old firmware and some changes which only work with the new
 | 
			
		||||
firmware have been reverted.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Added `sync` syscall in graceful shutdown handler
 | 
			
		||||
- Graceful shutdown is now performed by the reboot watchdog
 | 
			
		||||
- There is now a separate file for the total reboot counter. The reboot watchdog has its own local
 | 
			
		||||
  counters to determine whether a reboot is necessary.
 | 
			
		||||
 | 
			
		||||
# [v4.0.1] 2023-06-24
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- `PusLiveDemux` packet demultiplexing bugfix where the demultiplexing did not work when there was
 | 
			
		||||
  only one destination available.
 | 
			
		||||
 | 
			
		||||
# [v4.0.0] 2023-06-22
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc` version v5.0.0
 | 
			
		||||
- `q7s-package` version v3.1.1
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Important bugfixes for PTME. See `q7s-package` CHANGELOG.
 | 
			
		||||
- TCS fixes: Set temperature values to invalid value for MAX31865 RTD handler, SUS handler
 | 
			
		||||
  and STR handler. Also set dataset to invakid for RTD handler.
 | 
			
		||||
- Fixed H parameter in SUS converter from 1 mm to 2.5 mm.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Removed PTME busy/ready signals. Those were not used anyway because register reads are used now.
 | 
			
		||||
- APB bus access busy checking is not done anymore as this is performed by the bus itself now.
 | 
			
		||||
- Core controller will now announce version and image information event in addition to reboot
 | 
			
		||||
  event in the `inititalize` function.
 | 
			
		||||
- Core controller will now try to request and announce the firmware version in addition to the
 | 
			
		||||
  OBSW version as well.
 | 
			
		||||
- Added core controller action to read reboot mechansm information
 | 
			
		||||
- GNSS reset pin will now only be asserted for 5 ms instead of 100 ms.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added PL I2C reset pin. It is not used/connected for now but could be used for FDIR procedures to
 | 
			
		||||
  restore the PL I2C.
 | 
			
		||||
- Core controller now announces firmware version as well when requesting a version info event
 | 
			
		||||
 | 
			
		||||
# [v3.3.1] 2023-06-22
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- `PusLiveDemux` packet demultiplexing bugfix where the demultiplexing did not work when there was
 | 
			
		||||
  only one destination available.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fixed H parameter in SUS converter from 1 mm to 2.5 mm.
 | 
			
		||||
 | 
			
		||||
# [v3.3.0] 2023-06-21
 | 
			
		||||
 | 
			
		||||
Like v3.2.0 but without the custom FM changes related to VC0.
 | 
			
		||||
 | 
			
		||||
# [v3.2.0] 2023-06-21
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fix sun vector calculation
 | 
			
		||||
- SUS total vector was not reset to being a zero vector during eclipse due to a wrong memcpy
 | 
			
		||||
  length.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Reverted all changes related to VC0 handling to avoid FM bug possibly related to FPGA bug.
 | 
			
		||||
 | 
			
		||||
# [v3.1.1] 2023-06-14
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- TMP1075 bugfix where negative temperatures could not be measured because of a two's-complement
 | 
			
		||||
  conversion bug.
 | 
			
		||||
 | 
			
		||||
# [v3.1.0] 2023-06-14
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc` version v4.1.0
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- TCS heater switch enumeration naming was old/wrong and was not updated in sync with the object ID
 | 
			
		||||
  update. This lead to the TCS controller commanding the wrong heaters.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Increase number of allowed parallel HK commands to 16
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added `CONFIG_SET`, `MAN_HEATER_ON` and `MAN_HEATER_OFF` support for the BPX battery handler
 | 
			
		||||
 | 
			
		||||
# [v3.0.0] 2023-06-11
 | 
			
		||||
 | 
			
		||||
- `eive-tmtc` version v4.0.0
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Adapt EM configuration to include all GomSpace PCDU devices except the ACU. For the ACU
 | 
			
		||||
  (which broke), a dummy will still be used.
 | 
			
		||||
- Event Manager queue depth is configurable now.
 | 
			
		||||
- Do not construct and schedule broken TMP1075 device anymore.
 | 
			
		||||
- Do not track payload modes in system mode tables.
 | 
			
		||||
- ACS modes derived from system modes.
 | 
			
		||||
- The CMake build generator will now search for the cross-compiler binaries in the environmental
 | 
			
		||||
  variable named `CROSS_COMPILE_BIN_PATH` first when setting up the build system. This prevents
 | 
			
		||||
  CMake from selecting wrong cross-compilers if multiple cross-compilers with the same name are used
 | 
			
		||||
  on the same system.
 | 
			
		||||
- Add ACS board for EM by default now.
 | 
			
		||||
- Add support for MPSoC HK packet.
 | 
			
		||||
- Add support for MPSoC Flash Directory Content Report.
 | 
			
		||||
- Dynamically enable and disable HK packets for MPSoC on `ON` and `OFF` commands.
 | 
			
		||||
- Add support for MPSoC Flash Directory Content Report.
 | 
			
		||||
- Larger allowed path and file sizes for STR and PLOC MPSoC modules.
 | 
			
		||||
- More robust MPSoC flash read and write command data handling.
 | 
			
		||||
- Increase frequency of payload handlers from 0.8 seconds to 0.5 seconds.
 | 
			
		||||
- Disable missed deadlines per default. Not useful in orbit, and triggers all the time on the EM
 | 
			
		||||
  build after a number of subsequent runs, without any apparent reason (deadlines are not actually
 | 
			
		||||
  missed, thread usage displayed is nominal)
 | 
			
		||||
- TM store dumpes will not be cancelled anymore if the transmitter is off. The dump can be cancelled
 | 
			
		||||
  with an OFF command, and the PTME is perfectly capable of dumping without the transmitter being
 | 
			
		||||
  on.
 | 
			
		||||
- Transmitter state is not taken into account anymore for writing into the PTME. The PTME should
 | 
			
		||||
  be perfectly capable of generating a valid CADU, even when the transmitter is not ON for any
 | 
			
		||||
  reason.
 | 
			
		||||
- OFF mode is ignores in TM store for determining whether a store will be written. The modes will
 | 
			
		||||
  only be used to cancel a transfer.
 | 
			
		||||
- Handling of multiple RWs in the ACS Controller is improved and can be changed by parameter
 | 
			
		||||
  commands.
 | 
			
		||||
- The Directory Listing direct dumper now has a state machine to stagger the directory listing dump.
 | 
			
		||||
  This is required because very large dumps will overload the queue capacities in the framework.
 | 
			
		||||
- The PUS Service 8 now has larger queue sizes to handle more action replies. The PUS Service 1
 | 
			
		||||
  also has a larger queue size to handle a lot of step replies now.
 | 
			
		||||
- Moved PDU `vcc` and `vbat` variable from auxiliary dataset to core dataset.
 | 
			
		||||
- Tweak TCP/IP configuration: Only the TCP server will be included on the EM. For the FM, no
 | 
			
		||||
  TCP/IP servers will be included by default.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Add the remaining system modes.
 | 
			
		||||
- PLOC MPSoC flash read command working.
 | 
			
		||||
- BPX battery handler is added for EM by default.
 | 
			
		||||
- ACU dummy HK sets
 | 
			
		||||
- IMTQ HK sets
 | 
			
		||||
- IMTQ dummy now handles power switch
 | 
			
		||||
- Added some new ACS parameters
 | 
			
		||||
- Enabled decimation filter for the ADIS GYRs
 | 
			
		||||
- Enabled second low-pass filter for L3GD20H GYRs
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- CFDP low level protocol bugfix. Requires `fsfw` update and `tmtc` update.
 | 
			
		||||
- Compile fix if SCEX is compiled for the EM.
 | 
			
		||||
- Set up Rad Sensor chip select even for EM to avoid SPI bus issues.
 | 
			
		||||
- Correct ADIS Gyroscope type configuration for the EM, where the 16507 type is used instead of the
 | 
			
		||||
  16505 type.
 | 
			
		||||
- Host build is working again. Added reduced live TM helper which schedules the PUS and CFDP
 | 
			
		||||
  funnel.
 | 
			
		||||
- PLOC Supervisor handler now has a power switcher assigned to make PLOC power switching work
 | 
			
		||||
  without an additional PCDU power switch command.
 | 
			
		||||
- The PLOC Supervisor handler now waits for the replies to the `SET_TIME` command to verify working
 | 
			
		||||
  communication.
 | 
			
		||||
- The PLOC MPSoC now waits 10 cycles before going to on. These wait cycles are necessary because
 | 
			
		||||
  the MPSoC is not ready to process commands without this additional boot time.
 | 
			
		||||
- Fixed correction for `GPS Altitude` in case the sensor data is out of the expected bonds.
 | 
			
		||||
- PLOC MPSoC special communication is now scheduled, which allows flash read and flash write
 | 
			
		||||
  commands to work.
 | 
			
		||||
- Fixed the MPSoC flash write command.
 | 
			
		||||
- Added missing ACS parameter.
 | 
			
		||||
- HK TM store: The HK store dump success event was triggered for cancelled HK dumps.
 | 
			
		||||
- When a PUS parsing error occured while parsing a TM store file, the dump completion procedure
 | 
			
		||||
  was always executed.
 | 
			
		||||
- Some smaller logic fixes in the TM store base class
 | 
			
		||||
- Fixed usage of C `abs` instead of C++ `std::abs`, which results in MTQ commands not being
 | 
			
		||||
  scaled correctly between 1Am² and 0.2Am².
 | 
			
		||||
- TCS Heater Handler: Always trigger mode event if a heater goes `OFF` or `ON`. This event might
 | 
			
		||||
  soon replace the `HEATER_WENT_ON` and `HEATER_WENT_OFF` events.
 | 
			
		||||
- Prevent spam of TCS controller heater unavailability event if all heaters are in external control.
 | 
			
		||||
- TCS heater switch info set contained invalid values because of a faulty `memcpy` in the TCS
 | 
			
		||||
  controller. There is not crash risk but the heater states were invalid.
 | 
			
		||||
- STR datasets were not set to invalid on shutdown.
 | 
			
		||||
- Fixed usage of quaternion valid flag, which does not actually represent the validity of the
 | 
			
		||||
  quaternion.
 | 
			
		||||
- Various fixes for the pointing modes of the `ACS Controller`. All modes should work now as
 | 
			
		||||
  intended.
 | 
			
		||||
- The variance for the ADIS GYRs now represents the used `-3` version and not the `-1` version
 | 
			
		||||
- CFDP funnel did not route packets to live channel VC0
 | 
			
		||||
 | 
			
		||||
# [v2.0.5] 2023-05-11
 | 
			
		||||
 | 
			
		||||
- The dual lane assembly transition failed handler started new transitions towards the current mode
 | 
			
		||||
  instead of the target mode. This means that if the dual lane assembly never reached the initial
 | 
			
		||||
  submode (e.g. mode normal and submode dual side), it will transition back to the current mode,
 | 
			
		||||
  which miht be `MODE_OFF`. Furthermore, this can lead to invalid internal states, so the subsequent
 | 
			
		||||
  recovery handling becomes stuck in the custom recovery sequence when swichting power back on.
 | 
			
		||||
- The dual lane custom recovery handling was adapted to always perform proper power switch handling
 | 
			
		||||
  irrespective of current or target modes.
 | 
			
		||||
 | 
			
		||||
# [v2.0.4] 2023-04-19
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- The dual lane assembly datasets were not marked invalid properly on OFF transitions.
 | 
			
		||||
 | 
			
		||||
# [v2.0.3] 2023-04-17
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v3.1.1
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fixed shadowing within the `SafeCtrl`, which prevented actuator commands to be calculated during
 | 
			
		||||
  eclipse phase.
 | 
			
		||||
- EM build idle mode fixes for RW dummy.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Add `MGT_OVERHEATING` event and fallback to system SAFE mode if the MGT is overheating for
 | 
			
		||||
  whatever reason.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Low-pass filters can no longer be executed if no actual data is available.
 | 
			
		||||
 | 
			
		||||
# [v2.0.2] 2023-04-16
 | 
			
		||||
 | 
			
		||||
- Bump patch version to 2.
 | 
			
		||||
 | 
			
		||||
# [v2.0.1] 2023-04-16
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v3.1.0
 | 
			
		||||
 | 
			
		||||
# [v2.0.0] 2023-04-16
 | 
			
		||||
 | 
			
		||||
This is the version which will fly on the satellite for the initial launch phase.
 | 
			
		||||
 | 
			
		||||
- q7s-package: v2.5.0
 | 
			
		||||
- eive-tmtc: v3.0.0
 | 
			
		||||
- `wire` library is now on version v10.7 as well.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added `mv`, `cp` and `rm` action helpers for the core controller for common filesystem operations.
 | 
			
		||||
- Extended directory listing helpers. There is now a directory listing helper which dumps the
 | 
			
		||||
  directory listing as an action data reply immediately. For smaller directory listings, this
 | 
			
		||||
  allows a listing without requiring a separate file downlink (which also has not been implemented
 | 
			
		||||
  yet)
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- The directory listing action commands now allow compressing of either the target output file
 | 
			
		||||
  for the directory listing into file action command, or compression in the helper which dumps
 | 
			
		||||
  the directory listing directly.
 | 
			
		||||
 | 
			
		||||
# [v1.45.0] 2023-04-14
 | 
			
		||||
 | 
			
		||||
- q7s-package: v2.5.0
 | 
			
		||||
- eive-tmtc: v3.0.0
 | 
			
		||||
- STR firmware was updated to v10.7. `wire` library still needs to be updated.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Small fix for `install-obsw-yocto.sh` script
 | 
			
		||||
- Bugfix for STR firmware update procedure where the last remaining
 | 
			
		||||
  bytes were not written properly.
 | 
			
		||||
- Bugfix for STR where an invalid reply was received for special requests
 | 
			
		||||
  like firmware updates.
 | 
			
		||||
- Bugfix for shell command executors in command controller which lead to a crash.
 | 
			
		||||
- Important bugfix for STR solution set. Missing STR mode u8 parameter.
 | 
			
		||||
- Fix for STR image download.
 | 
			
		||||
- Possible fix for STR image upload.
 | 
			
		||||
- Fixed regression where the reply result for ACS board and SUS board devices was set to FAILED
 | 
			
		||||
  even when going to OFF mode. In that case, it has to be set to OK so the device handler can
 | 
			
		||||
  complete the OFF transition.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- STR `wire` library updated to v10.3. Submodule renamed to `sagittactl`.
 | 
			
		||||
- Custom FDIR for TMP1075 sensors. The device handlers reject `NEEDS_RECOVERY` health commands
 | 
			
		||||
  anyway, so it does not really make sense to use the default FDIR.
 | 
			
		||||
- Reject `NEEDS_RECOVERY` health commands for the heater health devices.
 | 
			
		||||
- Adapted some queue sizes so that EM startup works without queue errors
 | 
			
		||||
  - Event Manager: 120 -> 160
 | 
			
		||||
  - UDP TMTC Bridge: 50 -> 120
 | 
			
		||||
  - TCP TMTC Bridge: 50 -> 120
 | 
			
		||||
  - Service 5: 120 -> 160, number of events handled in one cycle increased to 80
 | 
			
		||||
- EM: PCDU dummy is not a device handler anymore, but a custom power switcher object. This avoids
 | 
			
		||||
  some issues where the event manager could not send an event message to the PCDU dummy because
 | 
			
		||||
  the FDIR event queue was too small.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Add a way for the MAX31865 RTD handlers to recognize faulty/broken/off sensor devices.
 | 
			
		||||
- Add parameter interface for core controller
 | 
			
		||||
- Allow setting the preferred SD card via the new parameter interface of the core controller
 | 
			
		||||
  with domain ID 0 and unque ID 0.
 | 
			
		||||
- Added action commands to reset the PDEC. Also added autonomous reset handling for the PDEC,
 | 
			
		||||
  because there is no way so send TCs with a faulty PDEC.
 | 
			
		||||
- Added `I2C_REBOOT` and `PDEC_REBOOT` events for EIVE system component to ensure ground gets
 | 
			
		||||
  informed.
 | 
			
		||||
 | 
			
		||||
## ACS
 | 
			
		||||
 | 
			
		||||
- Commanding from ACS Controller is now enabled.
 | 
			
		||||
- Safe Controller was reverted to FLP Design. This also introduces safe mode strategies.
 | 
			
		||||
  They contain what the controller does and which data it uses. The controller will
 | 
			
		||||
  automatically based on the available data decide on which strategy to use. If a strategy
 | 
			
		||||
  is undesirable (e.g. the MEKF should not be used) this can be handeld via setting parameters.
 | 
			
		||||
 | 
			
		||||
# [v1.44.1] 2023-04-12
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v2.22.1
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Bugfixes and improvements for SDC state machine. Internal state was not updated correctly due
 | 
			
		||||
  to a regression, so commanding the SDC state machine externally lead to confusing results.
 | 
			
		||||
- Heater states array in TCS controller was too small.
 | 
			
		||||
- Fixed a bug in persistent TM store, where the active file was not reset of SD card switches.
 | 
			
		||||
  SD card switch from 0 to 1 and vice-versa works without errors from persistent TM stores now.
 | 
			
		||||
- Add a way for the SUS polling to detect broken or off devices by checking the retrieved
 | 
			
		||||
  temperature for the all-ones value (0x0fff).
 | 
			
		||||
- Better reply result handling for the ACS board devices.
 | 
			
		||||
- ADIS1650X initial timeout handling now performed in device handler.
 | 
			
		||||
- The RW assembly and TCS board assembly now perform proper power switch handling for their
 | 
			
		||||
  recovery handling.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Added additional logic for SDC state machine so that the SD cards are marked unusable when
 | 
			
		||||
  the active SD card is switched or there is a transition from hot redundant to cold redundant mode.
 | 
			
		||||
  This gives other tasks some time to register the SD cards being unusable, and therefore provides
 | 
			
		||||
  a way for them to perform any re-initialization tasks necessary after SD card switches.
 | 
			
		||||
- TCS controller now only has an OFF mode and an ON mode
 | 
			
		||||
- The TCS controller pauses operations related to the TCS board assembly (reading sensors and 
 | 
			
		||||
  the primary control loop) while a TCS board recovery is on-going.
 | 
			
		||||
- Allow specifying custom OBSW update filename. This allowed keeping a cleaner file structure
 | 
			
		||||
  where each update has a name including the version
 | 
			
		||||
- The files extracted during an update process are deleted after the update was performed to keep
 | 
			
		||||
  the update directory cleaner.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- TCS controller: SUBMODE_NO_HEATER_CTRL (1) added for ON mode. If this submode is
 | 
			
		||||
  commanded, all heaters will be switched off and then no further heater
 | 
			
		||||
  commanding will be done.
 | 
			
		||||
- Fixed a bug in persistent TM store, where the active file was not reset of SD card switches.
 | 
			
		||||
  SD card switch from 0 to 1 and vice-versa works without errors from persistent TM stores now.
 | 
			
		||||
 | 
			
		||||
# [v1.44.0] 2023-04-07
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v2.22.0
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Special I2C recovery handling. If the I2C bus is unavailable for whatever reason, the EIVE
 | 
			
		||||
  system component will power-cycle all I2C devices by first going to the OFF/BOOT mode, then
 | 
			
		||||
  power-cycling the 3V3 stack and rebooting the battery, and finally going back to safe mode.
 | 
			
		||||
  If this does not restore the bus, a full reboot will be performed. This special sequence can
 | 
			
		||||
  be commanded as well.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- RW Assembly: Correctly transition back to off when more than 1 devices is OFF. Also do this
 | 
			
		||||
  when this was due to two devices being marked faulty.
 | 
			
		||||
- RW dummy and STR dummy components: Set/Update modes correctly.
 | 
			
		||||
- RW handlers: Bugfix for TM set retrieval and special request handling in general where the CRC
 | 
			
		||||
  check always failed for special request. Also removed an unnecessary delay for special requests.
 | 
			
		||||
- RW handlers: Polling is now disabled for RWs which are off.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- RW shutdown now waits for the speed to be near 0 or for a OFF transition countdown to be expired
 | 
			
		||||
  before going to off.
 | 
			
		||||
 | 
			
		||||
# [v1.43.2] 2023-04-05
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Adapted HK data rates to new table for LEOP SAFE mode.
 | 
			
		||||
- GPS controller HK is now generated periodically as well.
 | 
			
		||||
- Better mode combination checks for assembly components. This includes:
 | 
			
		||||
  - IMTQ assembly
 | 
			
		||||
  - Syrlinks assembly
 | 
			
		||||
  - Dual Lane Assembly
 | 
			
		||||
- RWs are no longer commanded by the ACS Controller during safe mode. Instead the RW speed command
 | 
			
		||||
  is set to 0 as part or the `doShutDown` of the RW handler.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Dual lane assemblies: Fix handling when health states are overwritten. Also add better handling
 | 
			
		||||
  when some devices are permanent faulty and some are only faulty. In that case, only the faulty
 | 
			
		||||
  devices will be restored.
 | 
			
		||||
- ACS dual lane assembly: Gyro 3 helper mode was assigned to the Gyro 2 mode.
 | 
			
		||||
 | 
			
		||||
# [v1.43.1] 2023-04-04
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Generic HK handling: Bug where HKs were generated a lot more often than required. This is the case
 | 
			
		||||
  if a device handler `PERFORM_OPERATION` step is performed more than once per PST cycle.
 | 
			
		||||
- Syrlinks now goes to `_MODE_TO_ON` when finishing the `doStartUp` transition.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Doubled GS PST interval instead of scheduling everything twice.
 | 
			
		||||
- Syrlinks now only has one `PERFORM_OPERATION` step, but still has two communication steps.
 | 
			
		||||
- PCDU components only allow setting `NEEDS_RECOVERY`, `HEALTHY` and `EXTERNAL_CONTROL` health
 | 
			
		||||
  states now. TMP sensor components only allow `HEALTHY` , `EXTERNAL_CONTROL`, `FAULTY` and
 | 
			
		||||
  `PERMANENT_FAULTY`.
 | 
			
		||||
- TCS controller now does a sanity check on the temperature values: Values below -80 C or above
 | 
			
		||||
  160 C are ignored.
 | 
			
		||||
 | 
			
		||||
# [v1.43.0] 2023-04-04
 | 
			
		||||
 | 
			
		||||
- q7s-package: v2.4.0
 | 
			
		||||
- eive-tmtc: v2.21.0
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Version of thermal controller which performs basic control tasks.
 | 
			
		||||
- PCDU handler can now command switch of the 3V3 stack (switch ID 19)
 | 
			
		||||
- Set STR dev to OFF in assembly when it is faulty.
 | 
			
		||||
- STR: Reset data link layer and flush RX for regular commands and before performing special
 | 
			
		||||
  commands to ensure consistent start state
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- PTME was not reset after configuration changes.
 | 
			
		||||
- GPS health devices: ACS board assembly not reacts to health changes.
 | 
			
		||||
- STR COM helper: Reset reply size after returning a reply
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Poll threshold configuration of the PTME IP core is now configurable via a parameter command
 | 
			
		||||
  and is set to 0b010 (4 polls) instead of 0b001 (1 poll) per default.
 | 
			
		||||
- EIVE system fallback and COM system fallback: Perform general subsystem handling first, then
 | 
			
		||||
  event reception, and finally any new transition handling.
 | 
			
		||||
- IMTQ MGM integration time lowered to 6 ms. This relaxes scheduling requirements a bit.
 | 
			
		||||
- PCDU handler switcher HK set now has additional 3V3 switcher state HK.
 | 
			
		||||
 | 
			
		||||
# [v1.42.0] 2023-04-01
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v2.20.1
 | 
			
		||||
- q7s-package: v2.3.0
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- SCEX filename updates. Also use T as the file ID / date separator between date and time.
 | 
			
		||||
- COM TM store and dump handling: Introduce modes for all 4 TM VC/store tasks. The OFF mode can be
 | 
			
		||||
  used to disable ongoing dumps or to prevent writes to the PTME VC. This allows cleaner reset
 | 
			
		||||
  handling of the PTME. All 4 VC/store tasks were attached to the COM mode tree and are commanded
 | 
			
		||||
  as part of the COM sequence as well to ensure consistent state with the CCSDS IP core handler.
 | 
			
		||||
- Added `PTME_LOCKED` boolean lock which is used to lock the PTME so it is not used by the VC tasks
 | 
			
		||||
  anymore. This lock will be controlled by the CCSDS IP core handler and is locked when the PTME
 | 
			
		||||
  needs to be reset. Examples for this are datarate changes.
 | 
			
		||||
- Simulate real PCDU in PCDU dummy by remembering commandes switch change and triggering appropriate
 | 
			
		||||
  events. Switch feedback is still immediate.
 | 
			
		||||
- GomSpace devices are polled with a doubled frequency. This speeds up power switch commanding.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Bugfix for side lane transitions of the dual lane assemblies, which only worked when the
 | 
			
		||||
  assembly was directly commanded.
 | 
			
		||||
- Syrlinks Handler: Bugfix so transition command is only sent once.
 | 
			
		||||
- SCEX file name bug: Create file name time stamp with `strftime` similarly to how it's done
 | 
			
		||||
  for the persistent TM store.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added GPS0 and GPS1 health device which are used by the ACS board assembly when deciding whether
 | 
			
		||||
  to change to the other side or to go to dual side directly. Setting the health devices to faulty
 | 
			
		||||
  should also trigger a side switch or a switch to dual mode.
 | 
			
		||||
 | 
			
		||||
# [v1.41.0] 2023-03-28
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v2.20.0
 | 
			
		||||
- q7s-package: v2.2.0
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Proper Faulty/External Control handling for the dual lane assemblies.
 | 
			
		||||
- ACS board devices: Go to ON mode instead of going to NORMAL mode directly.
 | 
			
		||||
- SUS device handlers: Go to ON mode on startup instead of NORMAL mode.
 | 
			
		||||
- Tweaks for the delay handling for the persistent TM stores. This allows pushing the full
 | 
			
		||||
  high datarate when dumping telemetry. The most important and interesting fix is that
 | 
			
		||||
  there needs to be a small delay between the polling of the GPIO. Polling the GPIO
 | 
			
		||||
  without any delay consecutively can lead to scheduling issues.
 | 
			
		||||
- Bump FSFW for fix of `ControllerBase` class `startTransition` implementation.
 | 
			
		||||
- Bump FSFW for possible fix of `PowerSwitcherComponent`: Initial mode `MODE_UNDEFINED`.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Enabled periodic hosuekeeping generation for release images.
 | 
			
		||||
- Project structure (linux and mission folder) is subsystem centric now.
 | 
			
		||||
 | 
			
		||||
# [v1.40.0] 2023-03-24
 | 
			
		||||
 | 
			
		||||
- eive-tmtc: v2.19.4
 | 
			
		||||
- q7s-packasge: v2.1.0
 | 
			
		||||
- Bumped fsfwgen for bugfix: Event translation can deal with duplicate event names now.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- PAPB busy polling now implemented properly with an upper bound of how often the PAPB is allowed
 | 
			
		||||
  to be busy before returning the BUSY returnvalue. Also propagate and check for that case properly.
 | 
			
		||||
  Ideally, this will never be an issue and the PAPB VC interface should never block for a longer
 | 
			
		||||
  period.
 | 
			
		||||
- The `mekfInvalidCounter` now resets on setting the STR to faulty.
 | 
			
		||||
- Improve the SD lock handling. The file handling does not need to be locked as it
 | 
			
		||||
  is only handled by one thread.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- The event `MEKF_RECOVERY` will be triggered in case the `MEKF` does manage to recover itself.
 | 
			
		||||
- The persistent TM stores now have low priorities and behave like background threads now. This
 | 
			
		||||
  should prevent them from blocking or slowing down the system even during dumps
 | 
			
		||||
  (at least in theory).
 | 
			
		||||
- STR: Fix weird issues on datalink layer data reception which sometimes occur.
 | 
			
		||||
- Syrlinks FDIR: Fully allow FDIR to do more recoveries. Assembly should take care of preventing
 | 
			
		||||
  the switch to go off.
 | 
			
		||||
- Allow dual lane assembly side switches.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Rework FSFW OSALs to properly support regular scheduling (NICE priorities) and real-time
 | 
			
		||||
  scheduling.
 | 
			
		||||
- STR: Move datalink layer to `StrComHandler` completely. DLL is now completely hidden from
 | 
			
		||||
  device handler.
 | 
			
		||||
- STR: Is now scheduled twice in ACS PST.
 | 
			
		||||
- `StrHelper` renamed to `StrComHandler`, is now a `DeviceHandlerIF` directly and does not wrap
 | 
			
		||||
  a separate UART COM interface anymore.
 | 
			
		||||
- TCS: Local pool variables are members now.
 | 
			
		||||
- Syrlinks: Create dedicated COM helper which uses a ring buffer to parse the Syrlinks datalinklayer
 | 
			
		||||
  and should make communication more reliable even on high CPU loads.
 | 
			
		||||
- Syrlinks: Two communication cycles per PST.
 | 
			
		||||
- Fine-tuning of various task priorities.
 | 
			
		||||
- The CSP router now is scheduled with the `SCHED_RR` policy and the same priority as the PCDU
 | 
			
		||||
  handlers as well.
 | 
			
		||||
- Change project structure to be more subsystem centric for ACS and COM.
 | 
			
		||||
 | 
			
		||||
# [v1.39.1] 2023-03-22
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Bugfix for STR: Some action commands wrongfully declined.
 | 
			
		||||
- STR: No normal command handling while a special request like an image upload is active.
 | 
			
		||||
- RS485 data line was not enabled when the transmitter was switched on.
 | 
			
		||||
 | 
			
		||||
# [v1.39.0] 2023-03-21
 | 
			
		||||
 | 
			
		||||
Requires firmware update for new FPGA design where reset line is routed into the software.
 | 
			
		||||
2 relevant PRs:
 | 
			
		||||
 - https://egit.irs.uni-stuttgart.de/eive/q7s-vivado/pulls/53
 | 
			
		||||
 - https://egit.irs.uni-stuttgart.de/eive/q7s-vivado/pulls/54
 | 
			
		||||
 | 
			
		||||
eive-tmtc: v2.19.3
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added NaN and Inf check for the `MEKF`. If these are detected, the `AcsController` will reset
 | 
			
		||||
  the `MEKF` on its own once. This way, there will not be an event spam and operators will have
 | 
			
		||||
  to look into the reason of wrong outputs. To restore the reset ability, an action command has
 | 
			
		||||
  been added.
 | 
			
		||||
- Contingency handling for non-working I2C bus bug. Reboot the system if the I2C is not working.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fixed transition for dual power lane assemblies: When going from dual side submode to single side
 | 
			
		||||
  submode, perform logical commanding first, similarly to when going to OFF mode.
 | 
			
		||||
- GPS time is only set to valid if at least one satellite is in view.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Bugfixes for STR mode transitions: Booting to mode ON with submode FIRMWARE now works properly.
 | 
			
		||||
  Furthermore, the submode in the NORMAL mode now should be 0 instead of some ON mode submode.
 | 
			
		||||
- Updated GYR bias values to newest measurements. This also corrects the ADIS values to always
 | 
			
		||||
  consit of just one digit.
 | 
			
		||||
- The CCSDS IP core handler now exposes a parameter to enable the priority select mode
 | 
			
		||||
  for the PTME core. This mode prioritizes virtual channels with a lower index, so for example
 | 
			
		||||
  the virtual channel (VC0) will have the highest priority, while VC3 will have the lowestg
 | 
			
		||||
  priority. This mode will be enabled by default for now, but can be set via the parameter IF with
 | 
			
		||||
  the unique parameter ID 0. The update of this mode requires a PTME reset. Therefore, it will only
 | 
			
		||||
  be performed when the transmitter is off to avoid weird bugs.
 | 
			
		||||
- Connect and handle reset line for the PTME core in the software now.
 | 
			
		||||
- Safe mode controller failure event now only triggers once per minute.
 | 
			
		||||
 | 
			
		||||
# [v1.38.0] 2023-03-17
 | 
			
		||||
 | 
			
		||||
eive-tmtc: v2.19.2
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- SA deployment file handling: Use exceptionless API.
 | 
			
		||||
- Fix deadlock in SD card manager constructor: Double lock of preferred SD card lock.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Failure of Safe Mode Ctrl will now trigger an event. As this can only be caused by sensors not
 | 
			
		||||
  being in the correct mode, the assemblies should take care that this will never happen and no
 | 
			
		||||
  additional FDIR is needed.
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Telemetry relevant datasets for the RWs are now set invalid and partially reset on shotdown.
 | 
			
		||||
- I2C PST now has a polling frequency of 0.4 seconds instead of 0.2 seconds.
 | 
			
		||||
- GS PST now has a polling frequency of 0.5 seconds instead of 1 second.
 | 
			
		||||
- Bump FSFW: merged upstream.
 | 
			
		||||
- Move BPX battery scheduling to ACS PST to avoid clashes with IMTQ scheduling / polling
 | 
			
		||||
 | 
			
		||||
# [v1.37.2] 2023-03-14
 | 
			
		||||
 | 
			
		||||
- Changed `PoolManager` bugfix implementation in the FSFW.
 | 
			
		||||
- Some tweaks for IPC and TM store configuration
 | 
			
		||||
 | 
			
		||||
# [v1.37.1] 2023-03-14
 | 
			
		||||
 | 
			
		||||
This version works on the EM as well.
 | 
			
		||||
@@ -25,6 +981,8 @@ eive-tmtc: v2.19.1
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- Added `EXECUTE_SHELL_CMD` action command for `CoreController` to execute arbitrary Linux commands.
 | 
			
		||||
- Added some missing PLOC commands.
 | 
			
		||||
  PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/462
 | 
			
		||||
- Add `PcduHandlerDummy` component.
 | 
			
		||||
- Added parameter for timeout until `MEKF_INVALID_MODE_VIOLATION` event is triggered.
 | 
			
		||||
 | 
			
		||||
@@ -48,6 +1006,17 @@ eive-tmtc: v2.19.1
 | 
			
		||||
- Set `OBSW_ADD_TCS_CTRL` to 1. Always add TCS controller now for both EM and FM.
 | 
			
		||||
- generators module: Bump `fsfwgen` dependency to v0.3.1. The returnvalue CSV files are now sorted.
 | 
			
		||||
- generators module: Always generate subsystem ID CSV files now.
 | 
			
		||||
- The COM subsystem is now not commanded by the EIVE system anymore. Instead,
 | 
			
		||||
  a separate RX_ONLY mode command will be sent at OBSW boot. After that,
 | 
			
		||||
  commanding is done autonomously by the COM subsystem internally or by the operator. This prevents
 | 
			
		||||
  the transmitter from going off during fallbacks to the SAFE mode, which might not always be
 | 
			
		||||
  desired.
 | 
			
		||||
- Initialize switch states to a special `SWITCH_STATE_UNKNOWN` (2) variable. Return
 | 
			
		||||
  `PowerSwitchIF::SWITCH_UNKNOWN` in switch state getter if this is the state.
 | 
			
		||||
- Wait 1 second before commanding SAFE mode. This ensures or at least increases the chance that
 | 
			
		||||
  the switch states were initialized.
 | 
			
		||||
- Dual Lane Assemblies: The returnvalues of the dual lane power state machine FSM are not ignored
 | 
			
		||||
  anymore.
 | 
			
		||||
 | 
			
		||||
# [v1.37.0] 2023-03-11
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,9 +9,9 @@
 | 
			
		||||
# ##############################################################################
 | 
			
		||||
cmake_minimum_required(VERSION 3.13)
 | 
			
		||||
 | 
			
		||||
set(OBSW_VERSION_MAJOR 1)
 | 
			
		||||
set(OBSW_VERSION_MINOR 37)
 | 
			
		||||
set(OBSW_VERSION_REVISION 1)
 | 
			
		||||
set(OBSW_VERSION_MAJOR 7)
 | 
			
		||||
set(OBSW_VERSION_MINOR 2)
 | 
			
		||||
set(OBSW_VERSION_REVISION 0)
 | 
			
		||||
 | 
			
		||||
# set(CMAKE_VERBOSE TRUE)
 | 
			
		||||
 | 
			
		||||
@@ -79,14 +79,21 @@ else()
 | 
			
		||||
  set(INIT_VAL 1)
 | 
			
		||||
  set(OBSW_STAR_TRACKER_GROUND_CONFIG 0)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
set(OBSW_ADD_TMTC_TCP_SERVER
 | 
			
		||||
    ${OBSW_Q7S_EM}
 | 
			
		||||
    CACHE STRING "Add TCP TMTC Server")
 | 
			
		||||
set(OBSW_ADD_TMTC_UDP_SERVER
 | 
			
		||||
    0
 | 
			
		||||
    CACHE STRING "Add UDP TMTC Server")
 | 
			
		||||
set(OBSW_ADD_MGT
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add MGT module")
 | 
			
		||||
set(OBSW_ADD_BPX_BATTERY_HANDLER
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add MGT module")
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add BPX battery module")
 | 
			
		||||
set(OBSW_ADD_STAR_TRACKER
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add Startracker module")
 | 
			
		||||
set(OBSW_ADD_SUN_SENSORS
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
@@ -94,8 +101,11 @@ set(OBSW_ADD_SUN_SENSORS
 | 
			
		||||
set(OBSW_ADD_SUS_BOARD_ASS
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add sun sensor board assembly")
 | 
			
		||||
set(OBSW_ADD_THERMAL_TEMP_INSERTER
 | 
			
		||||
    ${OBSW_Q7S_EM}
 | 
			
		||||
    CACHE STRING "Add thermal sensor temperature inserter")
 | 
			
		||||
set(OBSW_ADD_ACS_BOARD
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add ACS board module")
 | 
			
		||||
set(OBSW_ADD_GPS_CTRL
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
@@ -113,7 +123,7 @@ set(OBSW_ADD_TCS_CTRL
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add TCS controllers")
 | 
			
		||||
set(OBSW_ADD_HEATERS
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add TCS heaters")
 | 
			
		||||
set(OBSW_ADD_PLOC_SUPERVISOR
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
@@ -134,22 +144,25 @@ set(OBSW_ADD_RAD_SENSORS
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add Rad Sensor module")
 | 
			
		||||
set(OBSW_ADD_PL_PCDU
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add Payload PCDU modukle")
 | 
			
		||||
set(OBSW_ADD_SYRLINKS
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add Syrlinks module")
 | 
			
		||||
set(OBSW_ADD_TMP_DEVICES
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add TMP devices")
 | 
			
		||||
set(OBSW_ADD_GOMSPACE_PCDU
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add GomSpace PCDU modules")
 | 
			
		||||
set(OBSW_ADD_GOMSPACE_ACU
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add GomSpace ACU submodule")
 | 
			
		||||
set(OBSW_ADD_RW
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    CACHE STRING "Add RW modules")
 | 
			
		||||
set(OBSW_ADD_SCEX_DEVICE
 | 
			
		||||
    ${INIT_VAL}
 | 
			
		||||
    1
 | 
			
		||||
    CACHE STRING "Add Solar Cell Experiment module")
 | 
			
		||||
set(OBSW_SYRLINKS_SIMULATED
 | 
			
		||||
    0
 | 
			
		||||
@@ -220,13 +233,16 @@ set(LIB_EIVE_MISSION_PATH mission)
 | 
			
		||||
set(LIB_ETL_PATH ${THIRD_PARTY_FOLDER}/etl)
 | 
			
		||||
set(LIB_CATCH2_PATH ${THIRD_PARTY_FOLDER}/Catch2)
 | 
			
		||||
set(LIB_LWGPS_PATH ${THIRD_PARTY_FOLDER}/lwgps)
 | 
			
		||||
set(LIB_ARCSEC_PATH ${THIRD_PARTY_FOLDER}/arcsec_star_tracker)
 | 
			
		||||
set(LIB_ARCSEC_PATH ${THIRD_PARTY_FOLDER}/sagittactl)
 | 
			
		||||
set(LIB_JSON_PATH ${THIRD_PARTY_FOLDER}/json)
 | 
			
		||||
 | 
			
		||||
set(FSFW_WARNING_SHADOW_LOCAL_GCC OFF)
 | 
			
		||||
set(EIVE_ADD_LINUX_FILES OFF)
 | 
			
		||||
set(FSFW_ADD_TMSTORAGE ON)
 | 
			
		||||
 | 
			
		||||
set(FSFW_ADD_COORDINATES ON)
 | 
			
		||||
set(FSFW_ADD_SGP4_PROPAGATOR ON)
 | 
			
		||||
 | 
			
		||||
# Analyse different OS and architecture/target options, determine BSP_PATH,
 | 
			
		||||
# display information about compiler etc.
 | 
			
		||||
pre_source_hw_os_config()
 | 
			
		||||
@@ -297,9 +313,11 @@ include(BuildType)
 | 
			
		||||
set_build_type()
 | 
			
		||||
 | 
			
		||||
set(FSFW_DEBUG_INFO 0)
 | 
			
		||||
set(OBSW_ENABLE_PERIODIC_HK 1)
 | 
			
		||||
set(Q7S_CHECK_FOR_ALREADY_RUNNING_IMG 0)
 | 
			
		||||
if(RELEASE_BUILD MATCHES 0)
 | 
			
		||||
  set(FSFW_DEBUG_INFO 1)
 | 
			
		||||
  set(OBSW_ENABLE_PERIODIC_HK 0)
 | 
			
		||||
  set(Q7S_CHECK_FOR_ALREADY_RUNNING_IMG 1)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
@@ -407,7 +425,6 @@ add_subdirectory(thirdparty)
 | 
			
		||||
if(EIVE_ADD_LINUX_FILES)
 | 
			
		||||
  if(TGT_BSP MATCHES "arm/q7s")
 | 
			
		||||
    add_subdirectory(${LIB_GOMSPACE_PATH})
 | 
			
		||||
    add_subdirectory(${LIB_ARCSEC_PATH})
 | 
			
		||||
  endif()
 | 
			
		||||
  add_subdirectory(${LINUX_PATH})
 | 
			
		||||
endif()
 | 
			
		||||
@@ -485,7 +502,8 @@ endif()
 | 
			
		||||
target_link_libraries(${LIB_EIVE_MISSION} PUBLIC ${LIB_FSFW_NAME}
 | 
			
		||||
                                                 ${LIB_OS_NAME})
 | 
			
		||||
 | 
			
		||||
target_link_libraries(${LIB_DUMMIES} PUBLIC ${LIB_FSFW_NAME} ${LIB_JSON_NAME})
 | 
			
		||||
target_link_libraries(${LIB_DUMMIES} PUBLIC ${LIB_EIVE_MISSION}
 | 
			
		||||
                                            ${LIB_FSFW_NAME} ${LIB_JSON_NAME})
 | 
			
		||||
 | 
			
		||||
target_link_libraries(${OBSW_NAME} PRIVATE ${LIB_EIVE_MISSION} ${LIB_DUMMIES})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								README.md
									
									
									
									
									
								
							@@ -99,11 +99,21 @@ When using Windows, run theses steps in MSYS2.
 | 
			
		||||
   git submodule update --init
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
3. Ensure that the cross-compiler is working with `arm-linux-gnueabihf-gcc --version` and that
 | 
			
		||||
3. Create two system variables to pass the system root path and the cross-compiler path to the
 | 
			
		||||
   build system. You only need to do this once when setting up the build system.
 | 
			
		||||
   Example for Unix:
 | 
			
		||||
 | 
			
		||||
   ```sh
 | 
			
		||||
   export CROSS_COMPILE_BIN_PATH=<absolutePathToCrossCompilerBinPath>
 | 
			
		||||
   export ZYNQ_7020_SYSROOT=<absolutePathToSysroot>
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. Ensure that the cross-compiler is working with
 | 
			
		||||
   `${CROSS_COMPILE_BIN_PATH}/arm-linux-gnueabihf-gcc --version` and that
 | 
			
		||||
   the sysroot environmental variables have been set like specified in the
 | 
			
		||||
   [root filesystem chapter](#sysroot).
 | 
			
		||||
 | 
			
		||||
4. Run the CMake configuration to create the build system in a `build-Debug-Q7S` folder.
 | 
			
		||||
5. Run the CMake configuration to create the build system in a `build-Debug-Q7S` folder.
 | 
			
		||||
   Add `-G "MinGW Makefiles` in MinGW64 on Windows.
 | 
			
		||||
 | 
			
		||||
   ```sh
 | 
			
		||||
@@ -112,7 +122,7 @@ When using Windows, run theses steps in MSYS2.
 | 
			
		||||
   cmake --build . -j
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   You can also use provided shell scripts to perform these commands.
 | 
			
		||||
   Please note that you can also use provided shell scripts to perform these commands.
 | 
			
		||||
   ```sh
 | 
			
		||||
   cp scripts/q7s-env.sh ..
 | 
			
		||||
   cp scripts/q7s-env-em.sh ..
 | 
			
		||||
@@ -144,7 +154,7 @@ When using Windows, run theses steps in MSYS2.
 | 
			
		||||
   There are also different values for `-DTGT_BSP` to build for the Raspberry Pi
 | 
			
		||||
   or the Beagle Bone Black: `arm/raspberrypi` and `arm/beagleboneblack`.
 | 
			
		||||
 | 
			
		||||
5. Build the software with
 | 
			
		||||
6. Build the software with
 | 
			
		||||
 | 
			
		||||
   ```sh
 | 
			
		||||
   cd cmake-build-debug-q7s
 | 
			
		||||
@@ -954,6 +964,12 @@ used by other software components to read the current chip and copy.
 | 
			
		||||
This is a configuration scripts which runs after the Network Time Protocol has run. This script
 | 
			
		||||
currently sets the static IP address `192.168.133.10` and starts the `can` interface.
 | 
			
		||||
 | 
			
		||||
## Initial boot delay
 | 
			
		||||
 | 
			
		||||
You can create a file named `boot_delays_secs.txt` inside the home folder to delay the OBSW boot
 | 
			
		||||
for 6 seconds if the file is empty of for the number of seconds specified inside the file. This
 | 
			
		||||
can be helpful if something inside the OBSW leads to an immediate crash of the OBC.
 | 
			
		||||
 | 
			
		||||
## PCDU
 | 
			
		||||
 | 
			
		||||
Connect to serial console of P60 Dock
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								automation/Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								automation/Jenkinsfile
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
pipeline {
 | 
			
		||||
    environment {
 | 
			
		||||
        BUILDDIR_Q7 = 'build_q7'
 | 
			
		||||
        BUILDDIR_Q7S = 'build_q7s_fm'
 | 
			
		||||
        BUILDDIR_Q7S_EM = 'build_q7s_em'
 | 
			
		||||
        BUILDDIR_LINUX = 'build_linux'
 | 
			
		||||
    }
 | 
			
		||||
    agent {
 | 
			
		||||
@@ -12,15 +13,24 @@ pipeline {
 | 
			
		||||
    stages {
 | 
			
		||||
        stage('Clean') {
 | 
			
		||||
            steps {
 | 
			
		||||
                sh 'rm -rf $BUILDDIR_Q7'
 | 
			
		||||
                sh 'rm -rf $BUILDDIR_Q7S'
 | 
			
		||||
                sh 'rm -rf $BUILDDIR_Q7S_EM'
 | 
			
		||||
                sh 'rm -rf $BUILDDIR_LINUX'
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Build Q7S') {
 | 
			
		||||
            steps {
 | 
			
		||||
                dir(BUILDDIR_Q7) {
 | 
			
		||||
                dir(BUILDDIR_Q7S) {
 | 
			
		||||
                    sh 'cmake -DTGT_BSP="arm/q7s" -DCMAKE_BUILD_TYPE=Debug ..'
 | 
			
		||||
                    sh 'cmake --build . -j4'
 | 
			
		||||
                    sh 'cmake --build . -j8'
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        stage('Build Q7S EM') {
 | 
			
		||||
            steps {
 | 
			
		||||
                dir(BUILDDIR_Q7S_EM) {
 | 
			
		||||
                    sh 'cmake -DTGT_BSP="arm/q7s" -DEIVE_Q7S_EM=ON -DCMAKE_BUILD_TYPE=Debug ..'
 | 
			
		||||
                    sh 'cmake --build . -j8'
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -28,7 +38,7 @@ pipeline {
 | 
			
		||||
            steps {
 | 
			
		||||
                dir(BUILDDIR_LINUX) {
 | 
			
		||||
                    sh 'cmake ..'
 | 
			
		||||
                    sh 'cmake --build . -j4'
 | 
			
		||||
                    sh 'cmake --build . -j8'
 | 
			
		||||
                    sh './eive-unittest'
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
target_sources(${OBSW_NAME} PUBLIC scheduling.cpp main.cpp ObjectFactory.cpp)
 | 
			
		||||
target_sources(${OBSW_NAME} PUBLIC scheduling.cpp main.cpp objectFactory.cpp)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(fsfwconfig)
 | 
			
		||||
add_subdirectory(boardconfig)
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,7 @@
 | 
			
		||||
/** CMake Defines                                                  */
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
 | 
			
		||||
#define OBSW_ADD_TMTC_UDP_SERVER            1
 | 
			
		||||
#define OBSW_ADD_TMTC_UDP_SERVER            0
 | 
			
		||||
#define OBSW_ADD_TMTC_TCP_SERVER            1
 | 
			
		||||
 | 
			
		||||
#cmakedefine EIVE_BUILD_GPSD_GPS_HANDLER
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 277 translations.
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 315 translations.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Generated on: 2023-03-14 17:08:41
 | 
			
		||||
 * Generated on: 2023-10-27 14:24:05
 | 
			
		||||
 */
 | 
			
		||||
#include "translateEvents.h"
 | 
			
		||||
 | 
			
		||||
@@ -92,15 +92,25 @@ const char *MSG_QUEUE_ERROR_STRING = "MSG_QUEUE_ERROR";
 | 
			
		||||
const char *SERIALIZATION_ERROR_STRING = "SERIALIZATION_ERROR";
 | 
			
		||||
const char *FILESTORE_ERROR_STRING = "FILESTORE_ERROR";
 | 
			
		||||
const char *FILENAME_TOO_LARGE_ERROR_STRING = "FILENAME_TOO_LARGE_ERROR";
 | 
			
		||||
const char *HANDLING_CFDP_REQUEST_FAILED_STRING = "HANDLING_CFDP_REQUEST_FAILED";
 | 
			
		||||
const char *SAFE_RATE_VIOLATION_STRING = "SAFE_RATE_VIOLATION";
 | 
			
		||||
const char *SAFE_RATE_RECOVERY_STRING = "SAFE_RATE_RECOVERY";
 | 
			
		||||
const char *MULTIPLE_RW_INVALID_STRING = "MULTIPLE_RW_INVALID";
 | 
			
		||||
const char *MEKF_INVALID_INFO_STRING = "MEKF_INVALID_INFO";
 | 
			
		||||
const char *MEKF_RECOVERY_STRING = "MEKF_RECOVERY";
 | 
			
		||||
const char *MEKF_AUTOMATIC_RESET_STRING = "MEKF_AUTOMATIC_RESET";
 | 
			
		||||
const char *MEKF_INVALID_MODE_VIOLATION_STRING = "MEKF_INVALID_MODE_VIOLATION";
 | 
			
		||||
const char *SAFE_MODE_CONTROLLER_FAILURE_STRING = "SAFE_MODE_CONTROLLER_FAILURE";
 | 
			
		||||
const char *TLE_TOO_OLD_STRING = "TLE_TOO_OLD";
 | 
			
		||||
const char *SWITCH_CMD_SENT_STRING = "SWITCH_CMD_SENT";
 | 
			
		||||
const char *SWITCH_HAS_CHANGED_STRING = "SWITCH_HAS_CHANGED";
 | 
			
		||||
const char *SWITCHING_Q7S_DENIED_STRING = "SWITCHING_Q7S_DENIED";
 | 
			
		||||
const char *FDIR_REACTION_IGNORED_STRING = "FDIR_REACTION_IGNORED";
 | 
			
		||||
const char *DATASET_READ_FAILED_STRING = "DATASET_READ_FAILED";
 | 
			
		||||
const char *VOLTAGE_OUT_OF_BOUNDS_STRING = "VOLTAGE_OUT_OF_BOUNDS";
 | 
			
		||||
const char *TIMEDELTA_OUT_OF_BOUNDS_STRING = "TIMEDELTA_OUT_OF_BOUNDS";
 | 
			
		||||
const char *POWER_LEVEL_LOW_STRING = "POWER_LEVEL_LOW";
 | 
			
		||||
const char *POWER_LEVEL_CRITICAL_STRING = "POWER_LEVEL_CRITICAL";
 | 
			
		||||
const char *GPIO_PULL_HIGH_FAILED_STRING = "GPIO_PULL_HIGH_FAILED";
 | 
			
		||||
const char *GPIO_PULL_LOW_FAILED_STRING = "GPIO_PULL_LOW_FAILED";
 | 
			
		||||
const char *HEATER_WENT_ON_STRING = "HEATER_WENT_ON";
 | 
			
		||||
@@ -124,6 +134,8 @@ const char *EXE_FAILURE_STRING = "EXE_FAILURE";
 | 
			
		||||
const char *MPSOC_HANDLER_CRC_FAILURE_STRING = "MPSOC_HANDLER_CRC_FAILURE";
 | 
			
		||||
const char *MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH_STRING = "MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH";
 | 
			
		||||
const char *MPSOC_SHUTDOWN_FAILED_STRING = "MPSOC_SHUTDOWN_FAILED";
 | 
			
		||||
const char *SUPV_NOT_ON_STRING = "SUPV_NOT_ON";
 | 
			
		||||
const char *SUPV_REPLY_TIMEOUT_STRING = "SUPV_REPLY_TIMEOUT";
 | 
			
		||||
const char *SELF_TEST_I2C_FAILURE_STRING = "SELF_TEST_I2C_FAILURE";
 | 
			
		||||
const char *SELF_TEST_SPI_FAILURE_STRING = "SELF_TEST_SPI_FAILURE";
 | 
			
		||||
const char *SELF_TEST_ADC_FAILURE_STRING = "SELF_TEST_ADC_FAILURE";
 | 
			
		||||
@@ -136,6 +148,7 @@ const char *ERROR_STATE_STRING = "ERROR_STATE";
 | 
			
		||||
const char *RESET_OCCURED_STRING = "RESET_OCCURED";
 | 
			
		||||
const char *BOOTING_FIRMWARE_FAILED_EVENT_STRING = "BOOTING_FIRMWARE_FAILED_EVENT";
 | 
			
		||||
const char *BOOTING_BOOTLOADER_FAILED_EVENT_STRING = "BOOTING_BOOTLOADER_FAILED_EVENT";
 | 
			
		||||
const char *COM_ERROR_REPLY_RECEIVED_STRING = "COM_ERROR_REPLY_RECEIVED";
 | 
			
		||||
const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_FAILURE";
 | 
			
		||||
const char *SUPV_UNKNOWN_TM_STRING = "SUPV_UNKNOWN_TM";
 | 
			
		||||
const char *SUPV_UNINIMPLEMENTED_TM_STRING = "SUPV_UNINIMPLEMENTED_TM";
 | 
			
		||||
@@ -158,8 +171,12 @@ const char *LOST_BIT_LOCK_PDEC_STRING = "LOST_BIT_LOCK_PDEC";
 | 
			
		||||
const char *TOO_MANY_IRQS_STRING = "TOO_MANY_IRQS";
 | 
			
		||||
const char *POLL_SYSCALL_ERROR_PDEC_STRING = "POLL_SYSCALL_ERROR_PDEC";
 | 
			
		||||
const char *WRITE_SYSCALL_ERROR_PDEC_STRING = "WRITE_SYSCALL_ERROR_PDEC";
 | 
			
		||||
const char *PDEC_TRYING_RESET_WITH_INIT_STRING = "PDEC_TRYING_RESET_WITH_INIT";
 | 
			
		||||
const char *PDEC_TRYING_RESET_NO_INIT_STRING = "PDEC_TRYING_RESET_NO_INIT";
 | 
			
		||||
const char *PDEC_RESET_FAILED_STRING = "PDEC_RESET_FAILED";
 | 
			
		||||
const char *OPEN_IRQ_FILE_FAILED_STRING = "OPEN_IRQ_FILE_FAILED";
 | 
			
		||||
const char *PDEC_INIT_FAILED_STRING = "PDEC_INIT_FAILED";
 | 
			
		||||
const char *PDEC_CONFIG_CORRUPTED_STRING = "PDEC_CONFIG_CORRUPTED";
 | 
			
		||||
const char *IMAGE_UPLOAD_FAILED_STRING = "IMAGE_UPLOAD_FAILED";
 | 
			
		||||
const char *IMAGE_DOWNLOAD_FAILED_STRING = "IMAGE_DOWNLOAD_FAILED";
 | 
			
		||||
const char *IMAGE_UPLOAD_SUCCESSFUL_STRING = "IMAGE_UPLOAD_SUCCESSFUL";
 | 
			
		||||
@@ -171,7 +188,7 @@ const char *FIRMWARE_UPDATE_SUCCESSFUL_STRING = "FIRMWARE_UPDATE_SUCCESSFUL";
 | 
			
		||||
const char *FIRMWARE_UPDATE_FAILED_STRING = "FIRMWARE_UPDATE_FAILED";
 | 
			
		||||
const char *STR_HELPER_READING_REPLY_FAILED_STRING = "STR_HELPER_READING_REPLY_FAILED";
 | 
			
		||||
const char *STR_HELPER_COM_ERROR_STRING = "STR_HELPER_COM_ERROR";
 | 
			
		||||
const char *STR_HELPER_NO_REPLY_STRING = "STR_HELPER_NO_REPLY";
 | 
			
		||||
const char *STR_COM_REPLY_TIMEOUT_STRING = "STR_COM_REPLY_TIMEOUT";
 | 
			
		||||
const char *STR_HELPER_DEC_ERROR_STRING = "STR_HELPER_DEC_ERROR";
 | 
			
		||||
const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH";
 | 
			
		||||
const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS";
 | 
			
		||||
@@ -191,6 +208,10 @@ const char *MPSOC_EXE_INVALID_APID_STRING = "MPSOC_EXE_INVALID_APID";
 | 
			
		||||
const char *MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING = "MPSOC_HELPER_SEQ_CNT_MISMATCH";
 | 
			
		||||
const char *MPSOC_TM_SIZE_ERROR_STRING = "MPSOC_TM_SIZE_ERROR";
 | 
			
		||||
const char *MPSOC_TM_CRC_MISSMATCH_STRING = "MPSOC_TM_CRC_MISSMATCH";
 | 
			
		||||
const char *MPSOC_FLASH_READ_PACKET_ERROR_STRING = "MPSOC_FLASH_READ_PACKET_ERROR";
 | 
			
		||||
const char *MPSOC_FLASH_READ_FAILED_STRING = "MPSOC_FLASH_READ_FAILED";
 | 
			
		||||
const char *MPSOC_FLASH_READ_SUCCESSFUL_STRING = "MPSOC_FLASH_READ_SUCCESSFUL";
 | 
			
		||||
const char *MPSOC_READ_TIMEOUT_STRING = "MPSOC_READ_TIMEOUT";
 | 
			
		||||
const char *TRANSITION_BACK_TO_OFF_STRING = "TRANSITION_BACK_TO_OFF";
 | 
			
		||||
const char *NEG_V_OUT_OF_BOUNDS_STRING = "NEG_V_OUT_OF_BOUNDS";
 | 
			
		||||
const char *U_DRO_OUT_OF_BOUNDS_STRING = "U_DRO_OUT_OF_BOUNDS";
 | 
			
		||||
@@ -207,6 +228,11 @@ const char *TRANSITION_OTHER_SIDE_FAILED_STRING = "TRANSITION_OTHER_SIDE_FAILED"
 | 
			
		||||
const char *NOT_ENOUGH_DEVICES_DUAL_MODE_STRING = "NOT_ENOUGH_DEVICES_DUAL_MODE";
 | 
			
		||||
const char *POWER_STATE_MACHINE_TIMEOUT_STRING = "POWER_STATE_MACHINE_TIMEOUT";
 | 
			
		||||
const char *SIDE_SWITCH_TRANSITION_NOT_ALLOWED_STRING = "SIDE_SWITCH_TRANSITION_NOT_ALLOWED";
 | 
			
		||||
const char *DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY_STRING = "DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY";
 | 
			
		||||
const char *TRANSITION_OTHER_SIDE_FAILED_12900_STRING = "TRANSITION_OTHER_SIDE_FAILED_12900";
 | 
			
		||||
const char *NOT_ENOUGH_DEVICES_DUAL_MODE_12901_STRING = "NOT_ENOUGH_DEVICES_DUAL_MODE_12901";
 | 
			
		||||
const char *POWER_STATE_MACHINE_TIMEOUT_12902_STRING = "POWER_STATE_MACHINE_TIMEOUT_12902";
 | 
			
		||||
const char *SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903_STRING = "SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903";
 | 
			
		||||
const char *CHILDREN_LOST_MODE_STRING = "CHILDREN_LOST_MODE";
 | 
			
		||||
const char *GPS_FIX_CHANGE_STRING = "GPS_FIX_CHANGE";
 | 
			
		||||
const char *CANT_GET_FIX_STRING = "CANT_GET_FIX";
 | 
			
		||||
@@ -245,6 +271,7 @@ const char *TX_OFF_STRING = "TX_OFF";
 | 
			
		||||
const char *MISSING_PACKET_STRING = "MISSING_PACKET";
 | 
			
		||||
const char *EXPERIMENT_TIMEDOUT_STRING = "EXPERIMENT_TIMEDOUT";
 | 
			
		||||
const char *MULTI_PACKET_COMMAND_DONE_STRING = "MULTI_PACKET_COMMAND_DONE";
 | 
			
		||||
const char *FS_UNUSABLE_STRING = "FS_UNUSABLE";
 | 
			
		||||
const char *SET_CONFIGFILEVALUE_FAILED_STRING = "SET_CONFIGFILEVALUE_FAILED";
 | 
			
		||||
const char *GET_CONFIGFILEVALUE_FAILED_STRING = "GET_CONFIGFILEVALUE_FAILED";
 | 
			
		||||
const char *INSERT_CONFIGFILEVALUE_FAILED_STRING = "INSERT_CONFIGFILEVALUE_FAILED";
 | 
			
		||||
@@ -259,24 +286,40 @@ const char *VERSION_INFO_STRING = "VERSION_INFO";
 | 
			
		||||
const char *CURRENT_IMAGE_INFO_STRING = "CURRENT_IMAGE_INFO";
 | 
			
		||||
const char *REBOOT_COUNTER_STRING = "REBOOT_COUNTER";
 | 
			
		||||
const char *INDIVIDUAL_BOOT_COUNTS_STRING = "INDIVIDUAL_BOOT_COUNTS";
 | 
			
		||||
const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY";
 | 
			
		||||
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
 | 
			
		||||
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
 | 
			
		||||
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
 | 
			
		||||
const char *ACTIVE_SD_INFO_STRING = "ACTIVE_SD_INFO";
 | 
			
		||||
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
 | 
			
		||||
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
 | 
			
		||||
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
 | 
			
		||||
const char *PLOC_OVERHEATING_STRING = "PLOC_OVERHEATING";
 | 
			
		||||
const char *OBC_OVERHEATING_STRING = "OBC_OVERHEATING";
 | 
			
		||||
const char *HPA_OVERHEATING_STRING = "HPA_OVERHEATING";
 | 
			
		||||
const char *PLPCDU_OVERHEATING_STRING = "PLPCDU_OVERHEATING";
 | 
			
		||||
const char *CAMERA_OVERHEATING_STRING = "CAMERA_OVERHEATING";
 | 
			
		||||
const char *PCDU_SYSTEM_OVERHEATING_STRING = "PCDU_SYSTEM_OVERHEATING";
 | 
			
		||||
const char *HEATER_NOT_OFF_FOR_OFF_MODE_STRING = "HEATER_NOT_OFF_FOR_OFF_MODE";
 | 
			
		||||
const char *MGT_OVERHEATING_STRING = "MGT_OVERHEATING";
 | 
			
		||||
const char *TCS_SWITCHING_HEATER_ON_STRING = "TCS_SWITCHING_HEATER_ON";
 | 
			
		||||
const char *TCS_SWITCHING_HEATER_OFF_STRING = "TCS_SWITCHING_HEATER_OFF";
 | 
			
		||||
const char *TCS_HEATER_MAX_BURN_TIME_REACHED_STRING = "TCS_HEATER_MAX_BURN_TIME_REACHED";
 | 
			
		||||
const char *TX_TIMER_EXPIRED_STRING = "TX_TIMER_EXPIRED";
 | 
			
		||||
const char *BIT_LOCK_TX_ON_STRING = "BIT_LOCK_TX_ON";
 | 
			
		||||
const char *POSSIBLE_FILE_CORRUPTION_STRING = "POSSIBLE_FILE_CORRUPTION";
 | 
			
		||||
const char *FILE_TOO_LARGE_STRING = "FILE_TOO_LARGE";
 | 
			
		||||
const char *BUSY_DUMPING_EVENT_STRING = "BUSY_DUMPING_EVENT";
 | 
			
		||||
const char *DUMP_WAS_CANCELLED_STRING = "DUMP_WAS_CANCELLED";
 | 
			
		||||
const char *DUMP_OK_STORE_DONE_STRING = "DUMP_OK_STORE_DONE";
 | 
			
		||||
const char *DUMP_NOK_STORE_DONE_STRING = "DUMP_NOK_STORE_DONE";
 | 
			
		||||
const char *DUMP_MISC_STORE_DONE_STRING = "DUMP_MISC_STORE_DONE";
 | 
			
		||||
const char *DUMP_HK_STORE_DONE_STRING = "DUMP_HK_STORE_DONE";
 | 
			
		||||
const char *DUMP_CFDP_STORE_DONE_STRING = "DUMP_CFDP_STORE_DONE";
 | 
			
		||||
const char *DUMP_OK_CANCELLED_STRING = "DUMP_OK_CANCELLED";
 | 
			
		||||
const char *DUMP_NOK_CANCELLED_STRING = "DUMP_NOK_CANCELLED";
 | 
			
		||||
const char *DUMP_MISC_CANCELLED_STRING = "DUMP_MISC_CANCELLED";
 | 
			
		||||
const char *DUMP_HK_CANCELLED_STRING = "DUMP_HK_CANCELLED";
 | 
			
		||||
const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED";
 | 
			
		||||
const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START";
 | 
			
		||||
const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY";
 | 
			
		||||
const char *FAULT_HANDLER_TRIGGERED_STRING = "FAULT_HANDLER_TRIGGERED";
 | 
			
		||||
 | 
			
		||||
const char *translateEvents(Event event) {
 | 
			
		||||
  switch ((event & 0xFFFF)) {
 | 
			
		||||
@@ -454,6 +497,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return FILESTORE_ERROR_STRING;
 | 
			
		||||
    case (10804):
 | 
			
		||||
      return FILENAME_TOO_LARGE_ERROR_STRING;
 | 
			
		||||
    case (10805):
 | 
			
		||||
      return HANDLING_CFDP_REQUEST_FAILED_STRING;
 | 
			
		||||
    case (11200):
 | 
			
		||||
      return SAFE_RATE_VIOLATION_STRING;
 | 
			
		||||
    case (11201):
 | 
			
		||||
@@ -463,7 +508,15 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (11203):
 | 
			
		||||
      return MEKF_INVALID_INFO_STRING;
 | 
			
		||||
    case (11204):
 | 
			
		||||
      return MEKF_RECOVERY_STRING;
 | 
			
		||||
    case (11205):
 | 
			
		||||
      return MEKF_AUTOMATIC_RESET_STRING;
 | 
			
		||||
    case (11206):
 | 
			
		||||
      return MEKF_INVALID_MODE_VIOLATION_STRING;
 | 
			
		||||
    case (11207):
 | 
			
		||||
      return SAFE_MODE_CONTROLLER_FAILURE_STRING;
 | 
			
		||||
    case (11208):
 | 
			
		||||
      return TLE_TOO_OLD_STRING;
 | 
			
		||||
    case (11300):
 | 
			
		||||
      return SWITCH_CMD_SENT_STRING;
 | 
			
		||||
    case (11301):
 | 
			
		||||
@@ -472,6 +525,16 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return SWITCHING_Q7S_DENIED_STRING;
 | 
			
		||||
    case (11303):
 | 
			
		||||
      return FDIR_REACTION_IGNORED_STRING;
 | 
			
		||||
    case (11304):
 | 
			
		||||
      return DATASET_READ_FAILED_STRING;
 | 
			
		||||
    case (11305):
 | 
			
		||||
      return VOLTAGE_OUT_OF_BOUNDS_STRING;
 | 
			
		||||
    case (11306):
 | 
			
		||||
      return TIMEDELTA_OUT_OF_BOUNDS_STRING;
 | 
			
		||||
    case (11307):
 | 
			
		||||
      return POWER_LEVEL_LOW_STRING;
 | 
			
		||||
    case (11308):
 | 
			
		||||
      return POWER_LEVEL_CRITICAL_STRING;
 | 
			
		||||
    case (11400):
 | 
			
		||||
      return GPIO_PULL_HIGH_FAILED_STRING;
 | 
			
		||||
    case (11401):
 | 
			
		||||
@@ -518,6 +581,10 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH_STRING;
 | 
			
		||||
    case (11606):
 | 
			
		||||
      return MPSOC_SHUTDOWN_FAILED_STRING;
 | 
			
		||||
    case (11607):
 | 
			
		||||
      return SUPV_NOT_ON_STRING;
 | 
			
		||||
    case (11608):
 | 
			
		||||
      return SUPV_REPLY_TIMEOUT_STRING;
 | 
			
		||||
    case (11701):
 | 
			
		||||
      return SELF_TEST_I2C_FAILURE_STRING;
 | 
			
		||||
    case (11702):
 | 
			
		||||
@@ -542,6 +609,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return BOOTING_FIRMWARE_FAILED_EVENT_STRING;
 | 
			
		||||
    case (11902):
 | 
			
		||||
      return BOOTING_BOOTLOADER_FAILED_EVENT_STRING;
 | 
			
		||||
    case (11903):
 | 
			
		||||
      return COM_ERROR_REPLY_RECEIVED_STRING;
 | 
			
		||||
    case (12001):
 | 
			
		||||
      return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING;
 | 
			
		||||
    case (12002):
 | 
			
		||||
@@ -587,9 +656,17 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (12409):
 | 
			
		||||
      return WRITE_SYSCALL_ERROR_PDEC_STRING;
 | 
			
		||||
    case (12410):
 | 
			
		||||
      return PDEC_RESET_FAILED_STRING;
 | 
			
		||||
      return PDEC_TRYING_RESET_WITH_INIT_STRING;
 | 
			
		||||
    case (12411):
 | 
			
		||||
      return PDEC_TRYING_RESET_NO_INIT_STRING;
 | 
			
		||||
    case (12412):
 | 
			
		||||
      return PDEC_RESET_FAILED_STRING;
 | 
			
		||||
    case (12413):
 | 
			
		||||
      return OPEN_IRQ_FILE_FAILED_STRING;
 | 
			
		||||
    case (12414):
 | 
			
		||||
      return PDEC_INIT_FAILED_STRING;
 | 
			
		||||
    case (12415):
 | 
			
		||||
      return PDEC_CONFIG_CORRUPTED_STRING;
 | 
			
		||||
    case (12500):
 | 
			
		||||
      return IMAGE_UPLOAD_FAILED_STRING;
 | 
			
		||||
    case (12501):
 | 
			
		||||
@@ -613,16 +690,16 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (12510):
 | 
			
		||||
      return STR_HELPER_COM_ERROR_STRING;
 | 
			
		||||
    case (12511):
 | 
			
		||||
      return STR_HELPER_NO_REPLY_STRING;
 | 
			
		||||
    case (12512):
 | 
			
		||||
      return STR_HELPER_DEC_ERROR_STRING;
 | 
			
		||||
      return STR_COM_REPLY_TIMEOUT_STRING;
 | 
			
		||||
    case (12513):
 | 
			
		||||
      return POSITION_MISMATCH_STRING;
 | 
			
		||||
      return STR_HELPER_DEC_ERROR_STRING;
 | 
			
		||||
    case (12514):
 | 
			
		||||
      return STR_HELPER_FILE_NOT_EXISTS_STRING;
 | 
			
		||||
      return POSITION_MISMATCH_STRING;
 | 
			
		||||
    case (12515):
 | 
			
		||||
      return STR_HELPER_SENDING_PACKET_FAILED_STRING;
 | 
			
		||||
      return STR_HELPER_FILE_NOT_EXISTS_STRING;
 | 
			
		||||
    case (12516):
 | 
			
		||||
      return STR_HELPER_SENDING_PACKET_FAILED_STRING;
 | 
			
		||||
    case (12517):
 | 
			
		||||
      return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
 | 
			
		||||
    case (12600):
 | 
			
		||||
      return MPSOC_FLASH_WRITE_FAILED_STRING;
 | 
			
		||||
@@ -652,6 +729,14 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return MPSOC_TM_SIZE_ERROR_STRING;
 | 
			
		||||
    case (12613):
 | 
			
		||||
      return MPSOC_TM_CRC_MISSMATCH_STRING;
 | 
			
		||||
    case (12614):
 | 
			
		||||
      return MPSOC_FLASH_READ_PACKET_ERROR_STRING;
 | 
			
		||||
    case (12615):
 | 
			
		||||
      return MPSOC_FLASH_READ_FAILED_STRING;
 | 
			
		||||
    case (12616):
 | 
			
		||||
      return MPSOC_FLASH_READ_SUCCESSFUL_STRING;
 | 
			
		||||
    case (12617):
 | 
			
		||||
      return MPSOC_READ_TIMEOUT_STRING;
 | 
			
		||||
    case (12700):
 | 
			
		||||
      return TRANSITION_BACK_TO_OFF_STRING;
 | 
			
		||||
    case (12701):
 | 
			
		||||
@@ -684,6 +769,16 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return POWER_STATE_MACHINE_TIMEOUT_STRING;
 | 
			
		||||
    case (12803):
 | 
			
		||||
      return SIDE_SWITCH_TRANSITION_NOT_ALLOWED_STRING;
 | 
			
		||||
    case (12804):
 | 
			
		||||
      return DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY_STRING;
 | 
			
		||||
    case (12900):
 | 
			
		||||
      return TRANSITION_OTHER_SIDE_FAILED_12900_STRING;
 | 
			
		||||
    case (12901):
 | 
			
		||||
      return NOT_ENOUGH_DEVICES_DUAL_MODE_12901_STRING;
 | 
			
		||||
    case (12902):
 | 
			
		||||
      return POWER_STATE_MACHINE_TIMEOUT_12902_STRING;
 | 
			
		||||
    case (12903):
 | 
			
		||||
      return SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903_STRING;
 | 
			
		||||
    case (13000):
 | 
			
		||||
      return CHILDREN_LOST_MODE_STRING;
 | 
			
		||||
    case (13100):
 | 
			
		||||
@@ -760,6 +855,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return EXPERIMENT_TIMEDOUT_STRING;
 | 
			
		||||
    case (13802):
 | 
			
		||||
      return MULTI_PACKET_COMMAND_DONE_STRING;
 | 
			
		||||
    case (13803):
 | 
			
		||||
      return FS_UNUSABLE_STRING;
 | 
			
		||||
    case (13901):
 | 
			
		||||
      return SET_CONFIGFILEVALUE_FAILED_STRING;
 | 
			
		||||
    case (13902):
 | 
			
		||||
@@ -788,20 +885,38 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return REBOOT_COUNTER_STRING;
 | 
			
		||||
    case (14008):
 | 
			
		||||
      return INDIVIDUAL_BOOT_COUNTS_STRING;
 | 
			
		||||
    case (14010):
 | 
			
		||||
      return TRYING_I2C_RECOVERY_STRING;
 | 
			
		||||
    case (14011):
 | 
			
		||||
      return I2C_REBOOT_STRING;
 | 
			
		||||
    case (14012):
 | 
			
		||||
      return PDEC_REBOOT_STRING;
 | 
			
		||||
    case (14013):
 | 
			
		||||
      return FIRMWARE_INFO_STRING;
 | 
			
		||||
    case (14014):
 | 
			
		||||
      return ACTIVE_SD_INFO_STRING;
 | 
			
		||||
    case (14100):
 | 
			
		||||
      return NO_VALID_SENSOR_TEMPERATURE_STRING;
 | 
			
		||||
    case (14101):
 | 
			
		||||
      return NO_HEALTHY_HEATER_AVAILABLE_STRING;
 | 
			
		||||
    case (14102):
 | 
			
		||||
      return SYRLINKS_OVERHEATING_STRING;
 | 
			
		||||
    case (14103):
 | 
			
		||||
      return PLOC_OVERHEATING_STRING;
 | 
			
		||||
    case (14104):
 | 
			
		||||
      return OBC_OVERHEATING_STRING;
 | 
			
		||||
    case (14105):
 | 
			
		||||
      return HPA_OVERHEATING_STRING;
 | 
			
		||||
      return CAMERA_OVERHEATING_STRING;
 | 
			
		||||
    case (14106):
 | 
			
		||||
      return PLPCDU_OVERHEATING_STRING;
 | 
			
		||||
      return PCDU_SYSTEM_OVERHEATING_STRING;
 | 
			
		||||
    case (14107):
 | 
			
		||||
      return HEATER_NOT_OFF_FOR_OFF_MODE_STRING;
 | 
			
		||||
    case (14108):
 | 
			
		||||
      return MGT_OVERHEATING_STRING;
 | 
			
		||||
    case (14109):
 | 
			
		||||
      return TCS_SWITCHING_HEATER_ON_STRING;
 | 
			
		||||
    case (14110):
 | 
			
		||||
      return TCS_SWITCHING_HEATER_OFF_STRING;
 | 
			
		||||
    case (14111):
 | 
			
		||||
      return TCS_HEATER_MAX_BURN_TIME_REACHED_STRING;
 | 
			
		||||
    case (14201):
 | 
			
		||||
      return TX_TIMER_EXPIRED_STRING;
 | 
			
		||||
    case (14202):
 | 
			
		||||
@@ -812,8 +927,6 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return FILE_TOO_LARGE_STRING;
 | 
			
		||||
    case (14302):
 | 
			
		||||
      return BUSY_DUMPING_EVENT_STRING;
 | 
			
		||||
    case (14303):
 | 
			
		||||
      return DUMP_WAS_CANCELLED_STRING;
 | 
			
		||||
    case (14305):
 | 
			
		||||
      return DUMP_OK_STORE_DONE_STRING;
 | 
			
		||||
    case (14306):
 | 
			
		||||
@@ -824,6 +937,22 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return DUMP_HK_STORE_DONE_STRING;
 | 
			
		||||
    case (14309):
 | 
			
		||||
      return DUMP_CFDP_STORE_DONE_STRING;
 | 
			
		||||
    case (14310):
 | 
			
		||||
      return DUMP_OK_CANCELLED_STRING;
 | 
			
		||||
    case (14311):
 | 
			
		||||
      return DUMP_NOK_CANCELLED_STRING;
 | 
			
		||||
    case (14312):
 | 
			
		||||
      return DUMP_MISC_CANCELLED_STRING;
 | 
			
		||||
    case (14313):
 | 
			
		||||
      return DUMP_HK_CANCELLED_STRING;
 | 
			
		||||
    case (14314):
 | 
			
		||||
      return DUMP_CFDP_CANCELLED_STRING;
 | 
			
		||||
    case (14500):
 | 
			
		||||
      return TEMPERATURE_ALL_ONES_START_STRING;
 | 
			
		||||
    case (14501):
 | 
			
		||||
      return TEMPERATURE_ALL_ONES_RECOVERY_STRING;
 | 
			
		||||
    case (14600):
 | 
			
		||||
      return FAULT_HANDLER_TRIGGERED_STRING;
 | 
			
		||||
    default:
 | 
			
		||||
      return "UNKNOWN_EVENT";
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,17 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Auto-generated object translation file.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Contains 169 translations.
 | 
			
		||||
 * Generated on: 2023-03-14 17:08:41
 | 
			
		||||
 * Contains 175 translations.
 | 
			
		||||
 * Generated on: 2023-10-27 14:24:05
 | 
			
		||||
 */
 | 
			
		||||
#include "translateObjects.h"
 | 
			
		||||
 | 
			
		||||
const char *TEST_TASK_STRING = "TEST_TASK";
 | 
			
		||||
const char *ACS_CONTROLLER_STRING = "ACS_CONTROLLER";
 | 
			
		||||
const char *CORE_CONTROLLER_STRING = "CORE_CONTROLLER";
 | 
			
		||||
const char *POWER_CONTROLLER_STRING = "POWER_CONTROLLER";
 | 
			
		||||
const char *GLOBAL_JSON_CFG_STRING = "GLOBAL_JSON_CFG";
 | 
			
		||||
const char *XIPHOS_WDT_STRING = "XIPHOS_WDT";
 | 
			
		||||
const char *THERMAL_CONTROLLER_STRING = "THERMAL_CONTROLLER";
 | 
			
		||||
const char *DUMMY_HANDLER_STRING = "DUMMY_HANDLER";
 | 
			
		||||
const char *MGM_0_LIS3_HANDLER_STRING = "MGM_0_LIS3_HANDLER";
 | 
			
		||||
@@ -38,6 +40,8 @@ const char *GYRO_3_L3G_HANDLER_STRING = "GYRO_3_L3G_HANDLER";
 | 
			
		||||
const char *RW4_STRING = "RW4";
 | 
			
		||||
const char *STAR_TRACKER_STRING = "STAR_TRACKER";
 | 
			
		||||
const char *GPS_CONTROLLER_STRING = "GPS_CONTROLLER";
 | 
			
		||||
const char *GPS_0_HEALTH_DEV_STRING = "GPS_0_HEALTH_DEV";
 | 
			
		||||
const char *GPS_1_HEALTH_DEV_STRING = "GPS_1_HEALTH_DEV";
 | 
			
		||||
const char *IMTQ_POLLING_STRING = "IMTQ_POLLING";
 | 
			
		||||
const char *IMTQ_HANDLER_STRING = "IMTQ_HANDLER";
 | 
			
		||||
const char *PCDU_HANDLER_STRING = "PCDU_HANDLER";
 | 
			
		||||
@@ -50,7 +54,7 @@ const char *PLPCDU_HANDLER_STRING = "PLPCDU_HANDLER";
 | 
			
		||||
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
 | 
			
		||||
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
 | 
			
		||||
const char *PLOC_MEMORY_DUMPER_STRING = "PLOC_MEMORY_DUMPER";
 | 
			
		||||
const char *STR_HELPER_STRING = "STR_HELPER";
 | 
			
		||||
const char *STR_COM_IF_STRING = "STR_COM_IF";
 | 
			
		||||
const char *PLOC_MPSOC_HELPER_STRING = "PLOC_MPSOC_HELPER";
 | 
			
		||||
const char *AXI_PTME_CONFIG_STRING = "AXI_PTME_CONFIG";
 | 
			
		||||
const char *PTME_CONFIG_STRING = "PTME_CONFIG";
 | 
			
		||||
@@ -86,6 +90,7 @@ const char *RTD_13_IC16_PLPCDU_HEATSPREADER_STRING = "RTD_13_IC16_PLPCDU_HEATSPR
 | 
			
		||||
const char *RTD_14_IC17_TCS_BOARD_STRING = "RTD_14_IC17_TCS_BOARD";
 | 
			
		||||
const char *RTD_15_IC18_IMTQ_STRING = "RTD_15_IC18_IMTQ";
 | 
			
		||||
const char *SYRLINKS_HANDLER_STRING = "SYRLINKS_HANDLER";
 | 
			
		||||
const char *SYRLINKS_COM_HANDLER_STRING = "SYRLINKS_COM_HANDLER";
 | 
			
		||||
const char *ARDUINO_COM_IF_STRING = "ARDUINO_COM_IF";
 | 
			
		||||
const char *DUMMY_COM_IF_STRING = "DUMMY_COM_IF";
 | 
			
		||||
const char *SCEX_UART_READER_STRING = "SCEX_UART_READER";
 | 
			
		||||
@@ -156,11 +161,13 @@ const char *PUS_TM_FUNNEL_STRING = "PUS_TM_FUNNEL";
 | 
			
		||||
const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL";
 | 
			
		||||
const char *CFDP_HANDLER_STRING = "CFDP_HANDLER";
 | 
			
		||||
const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR";
 | 
			
		||||
const char *CFDP_FAULT_HANDLER_STRING = "CFDP_FAULT_HANDLER";
 | 
			
		||||
const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM";
 | 
			
		||||
const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM";
 | 
			
		||||
const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM";
 | 
			
		||||
const char *TCS_SUBSYSTEM_STRING = "TCS_SUBSYSTEM";
 | 
			
		||||
const char *COM_SUBSYSTEM_STRING = "COM_SUBSYSTEM";
 | 
			
		||||
const char *EPS_SUBSYSTEM_STRING = "EPS_SUBSYSTEM";
 | 
			
		||||
const char *MISC_TM_STORE_STRING = "MISC_TM_STORE";
 | 
			
		||||
const char *OK_TM_STORE_STRING = "OK_TM_STORE";
 | 
			
		||||
const char *NOT_OK_TM_STORE_STRING = "NOT_OK_TM_STORE";
 | 
			
		||||
@@ -171,7 +178,6 @@ const char *LOG_STORE_AND_TM_TASK_STRING = "LOG_STORE_AND_TM_TASK";
 | 
			
		||||
const char *HK_STORE_AND_TM_TASK_STRING = "HK_STORE_AND_TM_TASK";
 | 
			
		||||
const char *CFDP_STORE_AND_TM_TASK_STRING = "CFDP_STORE_AND_TM_TASK";
 | 
			
		||||
const char *DOWNLINK_RAM_STORE_STRING = "DOWNLINK_RAM_STORE";
 | 
			
		||||
const char *CCSDS_IP_CORE_BRIDGE_STRING = "CCSDS_IP_CORE_BRIDGE";
 | 
			
		||||
const char *THERMAL_TEMP_INSERTER_STRING = "THERMAL_TEMP_INSERTER";
 | 
			
		||||
const char *DUMMY_INTERFACE_STRING = "DUMMY_INTERFACE";
 | 
			
		||||
const char *NO_OBJECT_STRING = "NO_OBJECT";
 | 
			
		||||
@@ -184,8 +190,12 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return ACS_CONTROLLER_STRING;
 | 
			
		||||
    case 0x43000003:
 | 
			
		||||
      return CORE_CONTROLLER_STRING;
 | 
			
		||||
    case 0x43000004:
 | 
			
		||||
      return POWER_CONTROLLER_STRING;
 | 
			
		||||
    case 0x43000006:
 | 
			
		||||
      return GLOBAL_JSON_CFG_STRING;
 | 
			
		||||
    case 0x43000007:
 | 
			
		||||
      return XIPHOS_WDT_STRING;
 | 
			
		||||
    case 0x43400001:
 | 
			
		||||
      return THERMAL_CONTROLLER_STRING;
 | 
			
		||||
    case 0x44000001:
 | 
			
		||||
@@ -242,6 +252,10 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return STAR_TRACKER_STRING;
 | 
			
		||||
    case 0x44130045:
 | 
			
		||||
      return GPS_CONTROLLER_STRING;
 | 
			
		||||
    case 0x44130046:
 | 
			
		||||
      return GPS_0_HEALTH_DEV_STRING;
 | 
			
		||||
    case 0x44130047:
 | 
			
		||||
      return GPS_1_HEALTH_DEV_STRING;
 | 
			
		||||
    case 0x44140013:
 | 
			
		||||
      return IMTQ_POLLING_STRING;
 | 
			
		||||
    case 0x44140014:
 | 
			
		||||
@@ -267,7 +281,7 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
    case 0x44330001:
 | 
			
		||||
      return PLOC_MEMORY_DUMPER_STRING;
 | 
			
		||||
    case 0x44330002:
 | 
			
		||||
      return STR_HELPER_STRING;
 | 
			
		||||
      return STR_COM_IF_STRING;
 | 
			
		||||
    case 0x44330003:
 | 
			
		||||
      return PLOC_MPSOC_HELPER_STRING;
 | 
			
		||||
    case 0x44330004:
 | 
			
		||||
@@ -338,6 +352,8 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return RTD_15_IC18_IMTQ_STRING;
 | 
			
		||||
    case 0x445300A3:
 | 
			
		||||
      return SYRLINKS_HANDLER_STRING;
 | 
			
		||||
    case 0x445300A4:
 | 
			
		||||
      return SYRLINKS_COM_HANDLER_STRING;
 | 
			
		||||
    case 0x49000001:
 | 
			
		||||
      return ARDUINO_COM_IF_STRING;
 | 
			
		||||
    case 0x49000002:
 | 
			
		||||
@@ -478,6 +494,8 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return CFDP_HANDLER_STRING;
 | 
			
		||||
    case 0x73000206:
 | 
			
		||||
      return CFDP_DISTRIBUTOR_STRING;
 | 
			
		||||
    case 0x73000207:
 | 
			
		||||
      return CFDP_FAULT_HANDLER_STRING;
 | 
			
		||||
    case 0x73010000:
 | 
			
		||||
      return EIVE_SYSTEM_STRING;
 | 
			
		||||
    case 0x73010001:
 | 
			
		||||
@@ -488,6 +506,8 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return TCS_SUBSYSTEM_STRING;
 | 
			
		||||
    case 0x73010004:
 | 
			
		||||
      return COM_SUBSYSTEM_STRING;
 | 
			
		||||
    case 0x73010005:
 | 
			
		||||
      return EPS_SUBSYSTEM_STRING;
 | 
			
		||||
    case 0x73020001:
 | 
			
		||||
      return MISC_TM_STORE_STRING;
 | 
			
		||||
    case 0x73020002:
 | 
			
		||||
@@ -508,8 +528,6 @@ const char *translateObject(object_id_t object) {
 | 
			
		||||
      return CFDP_STORE_AND_TM_TASK_STRING;
 | 
			
		||||
    case 0x73040004:
 | 
			
		||||
      return DOWNLINK_RAM_STORE_STRING;
 | 
			
		||||
    case 0x73500000:
 | 
			
		||||
      return CCSDS_IP_CORE_BRIDGE_STRING;
 | 
			
		||||
    case 0x90000003:
 | 
			
		||||
      return THERMAL_TEMP_INSERTER_STRING;
 | 
			
		||||
    case 0xCAFECAFE:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,17 @@
 | 
			
		||||
#include "ObjectFactory.h"
 | 
			
		||||
#include "objectFactory.h"
 | 
			
		||||
 | 
			
		||||
#include <fsfw/power/DummyPowerSwitcher.h>
 | 
			
		||||
#include <fsfw/tmtcservices/CommandingServiceBase.h>
 | 
			
		||||
#include <fsfw/tmtcservices/PusServiceBase.h>
 | 
			
		||||
#include <mission/controller/ThermalController.h>
 | 
			
		||||
#include <mission/core/GenericFactory.h>
 | 
			
		||||
#include <mission/genericFactory.h>
 | 
			
		||||
#include <mission/tmtc/TmFunnelHandler.h>
 | 
			
		||||
#include <objects/systemObjectList.h>
 | 
			
		||||
 | 
			
		||||
#include "../mission/utility/DummySdCardManager.h"
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "fsfw/platform.h"
 | 
			
		||||
#include "fsfw/power/PowerSwitchIF.h"
 | 
			
		||||
#include "fsfw_tests/integration/task/TestTask.h"
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
@@ -29,7 +30,7 @@
 | 
			
		||||
#include <dummies/AcuDummy.h>
 | 
			
		||||
#include <dummies/CoreControllerDummy.h>
 | 
			
		||||
 | 
			
		||||
#include "dummies/helpers.h"
 | 
			
		||||
#include "dummies/helperFactory.h"
 | 
			
		||||
 | 
			
		||||
#ifdef PLATFORM_UNIX
 | 
			
		||||
#include <fsfw_hal/linux/serial/SerialComIF.h>
 | 
			
		||||
@@ -37,10 +38,10 @@
 | 
			
		||||
 | 
			
		||||
#include "devices/gpioIds.h"
 | 
			
		||||
#include "fsfw_hal/linux/gpio/Gpio.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocMPSoCHandler.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocMPSoCHelper.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocSupervisorHandler.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocSupvUartMan.h"
 | 
			
		||||
#include "linux/payload/PlocMpsocHandler.h"
 | 
			
		||||
#include "linux/payload/PlocMpsocSpecialComHelper.h"
 | 
			
		||||
#include "linux/payload/PlocSupervisorHandler.h"
 | 
			
		||||
#include "linux/payload/PlocSupvUartMan.h"
 | 
			
		||||
#include "test/gpio/DummyGpioIF.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -60,13 +61,24 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  CfdpTmFunnel* cfdpFunnel;
 | 
			
		||||
  StorageManagerIF* tmStore;
 | 
			
		||||
  StorageManagerIF* ipcStore;
 | 
			
		||||
  PersistentTmStores persistentStores;
 | 
			
		||||
  PersistentTmStores persistentStores{};
 | 
			
		||||
  bool enableHkSets = false;
 | 
			
		||||
#if OBSW_ENABLE_PERIODIC_HK == 1
 | 
			
		||||
  enableHkSets = true;
 | 
			
		||||
#endif
 | 
			
		||||
  auto sdcMan = new DummySdCardManager("/tmp");
 | 
			
		||||
  ObjectFactory::produceGenericObjects(nullptr, &pusFunnel, &cfdpFunnel, *sdcMan, &ipcStore,
 | 
			
		||||
                                       &tmStore, persistentStores);
 | 
			
		||||
                                       &tmStore, persistentStores, 120, enableHkSets, false);
 | 
			
		||||
 | 
			
		||||
  new TmFunnelHandler(objects::LIVE_TM_TASK, *pusFunnel, *cfdpFunnel);
 | 
			
		||||
  auto* dummyGpioIF = new DummyGpioIF();
 | 
			
		||||
  auto* dummySwitcher = new DummyPowerSwitcher(objects::PCDU_HANDLER, 18, 0);
 | 
			
		||||
  std::vector<ReturnValue_t> switcherList;
 | 
			
		||||
  auto initVal = PowerSwitchIF::SWITCH_OFF;
 | 
			
		||||
  for (unsigned i = 0; i < 18; i++) {
 | 
			
		||||
    switcherList.emplace_back(initVal);
 | 
			
		||||
  }
 | 
			
		||||
  dummySwitcher->setInitialSwitcherList(switcherList);
 | 
			
		||||
#ifdef PLATFORM_UNIX
 | 
			
		||||
  new SerialComIF(objects::UART_COM_IF);
 | 
			
		||||
#if OBSW_ADD_PLOC_MPSOC == 1
 | 
			
		||||
@@ -74,8 +86,8 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  auto mpsocCookie = new UartCookie(objects::PLOC_MPSOC_HANDLER, mpscoDev, uart::PLOC_MPSOC_BAUD,
 | 
			
		||||
                                    mpsoc::MAX_REPLY_SIZE, UartModes::NON_CANONICAL);
 | 
			
		||||
  mpsocCookie->setNoFixedSizeReply();
 | 
			
		||||
  auto plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  new PlocMPSoCHandler(objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocCookie,
 | 
			
		||||
  auto plocMpsocHelper = new PlocMpsocSpecialComHelper(objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  new PlocMpsocHandler(objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocCookie,
 | 
			
		||||
                       plocMpsocHelper, Gpio(gpioIds::ENABLE_MPSOC_UART, dummyGpioIF),
 | 
			
		||||
                       objects::PLOC_SUPERVISOR_HANDLER);
 | 
			
		||||
#endif /* OBSW_ADD_PLOC_MPSOC == 1 */
 | 
			
		||||
@@ -93,7 +105,9 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  dummy::DummyCfg cfg;
 | 
			
		||||
  dummy::createDummies(cfg, *dummySwitcher, dummyGpioIF);
 | 
			
		||||
  cfg.addPlPcduDummy = true;
 | 
			
		||||
  cfg.addCamSwitcherDummy = true;
 | 
			
		||||
  dummy::createDummies(cfg, *dummySwitcher, dummyGpioIF, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  HeaterHandler* heaterHandler = nullptr;
 | 
			
		||||
  // new ThermalController(objects::THERMAL_CONTROLLER);
 | 
			
		||||
@@ -101,7 +115,7 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  if (heaterHandler == nullptr) {
 | 
			
		||||
    sif::error << "HeaterHandler could not be created" << std::endl;
 | 
			
		||||
  } else {
 | 
			
		||||
    ObjectFactory::createThermalController(*heaterHandler);
 | 
			
		||||
    ObjectFactory::createThermalController(*heaterHandler, true);
 | 
			
		||||
  }
 | 
			
		||||
  new TestTask(objects::TEST_TASK);
 | 
			
		||||
}
 | 
			
		||||
@@ -13,8 +13,8 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "ObjectFactory.h"
 | 
			
		||||
#include "mission/core/scheduling.h"
 | 
			
		||||
#include "mission/scheduling.h"
 | 
			
		||||
#include "objectFactory.h"
 | 
			
		||||
#include "scheduling.h"
 | 
			
		||||
 | 
			
		||||
#ifdef LINUX
 | 
			
		||||
@@ -59,35 +59,35 @@ void scheduling::initTasks() {
 | 
			
		||||
      "DIST", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
  ReturnValue_t result = tmtcDistributor->addComponent(objects::CCSDS_PACKET_DISTRIBUTOR);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding CCSDS distributor failed" << std::endl;
 | 
			
		||||
    sif::error << "Adding CCSDS distributor failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = tmtcDistributor->addComponent(objects::PUS_PACKET_DISTRIBUTOR);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding PUS distributor failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = tmtcDistributor->addComponent(objects::TM_FUNNEL);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding TM funnel failed" << std::endl;
 | 
			
		||||
    sif::error << "Adding PUS distributor failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = tmtcDistributor->addComponent(objects::CFDP_DISTRIBUTOR);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding CFDP distributor failed" << std::endl;
 | 
			
		||||
    sif::error << "Adding CFDP distributor failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
  result = tmtcDistributor->addComponent(objects::UDP_TMTC_SERVER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding UDP server failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  result = tmtcDistributor->addComponent(objects::TCP_TMTC_SERVER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "adding TCP server failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
  PeriodicTaskIF* udpPollingTask = factory->createPeriodicTask(
 | 
			
		||||
      "UDP_POLLING", 70, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
  result = udpPollingTask->addComponent(objects::UDP_TMTC_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "Add component UDP Polling failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  PeriodicTaskIF* tcpPollingTask = factory->createPeriodicTask(
 | 
			
		||||
      "TCP_POLLING", 70, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
  result = tcpPollingTask->addComponent(objects::TCP_TMTC_POLLING_TASK);
 | 
			
		||||
@@ -95,6 +95,13 @@ void scheduling::initTasks() {
 | 
			
		||||
    sif::error << "Add component UDP Polling failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* liveTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "LIVE_TM", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, nullptr, &RR_SCHEDULING);
 | 
			
		||||
  result = liveTmTask->addComponent(objects::LIVE_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("LIVE_TM", objects::LIVE_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* pusHighPrio = factory->createPeriodicTask(
 | 
			
		||||
      "PUS_HIGH_PRIO", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.200, missedDeadlineFunc);
 | 
			
		||||
  result = pusHighPrio->addComponent(objects::PUS_SERVICE_1_VERIFICATION);
 | 
			
		||||
@@ -149,13 +156,16 @@ void scheduling::initTasks() {
 | 
			
		||||
      "THERMAL_CTL_TASK", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
  result = thermalTask->addComponent(objects::CORE_CONTROLLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("Core controller dummy", objects::CORE_CONTROLLER);
 | 
			
		||||
    scheduling::printAddObjectError("CORE_CTRL", objects::CORE_CONTROLLER);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  result = thermalTask->addComponent(objects::THERMAL_CONTROLLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("THERMAL_CONTROLLER", objects::THERMAL_CONTROLLER);
 | 
			
		||||
  }
 | 
			
		||||
  result = thermalTask->addComponent(objects::HEATER_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("HEATER_HANDLER", objects::HEATER_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  FixedTimeslotTaskIF* pstTask = factory->createFixedTimeslotTask(
 | 
			
		||||
      "DUMMY_PST", 75, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.5, missedDeadlineFunc);
 | 
			
		||||
@@ -173,6 +183,28 @@ void scheduling::initTasks() {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  // If those are added at a later stage..
 | 
			
		||||
  /*
 | 
			
		||||
  PeriodicTaskIF* logTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "LOG_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = logTmTask->addComponent(objects::LOG_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("LOG_STORE_AND_TM", objects::LOG_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
  PeriodicTaskIF* hkTmTask =
 | 
			
		||||
      factory->createPeriodicTask("HK_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = hkTmTask->addComponent(objects::HK_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("HK_STORE_AND_TM", objects::HK_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
  PeriodicTaskIF* cfdpTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "CFDP_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = cfdpTmTask->addComponent(objects::CFDP_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("CFDP_STORE_AND_TM", objects::CFDP_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1
 | 
			
		||||
  PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask(
 | 
			
		||||
      "PLOC_SUPV_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
@@ -193,8 +225,9 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif /* OBSW_ADD_TEST_CODE == 1 */
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* dummyTask = factory->createPeriodicTask(
 | 
			
		||||
      "DUMMY_TASK", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
  scheduling::scheduleTmpTempSensors(dummyTask);
 | 
			
		||||
      "DUMMY_TASK", 35, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, missedDeadlineFunc);
 | 
			
		||||
  dummyTask->addComponent(objects::THERMAL_TEMP_INSERTER);
 | 
			
		||||
  scheduling::scheduleTmpTempSensors(dummyTask, true);
 | 
			
		||||
  scheduling::scheduleRtdSensors(dummyTask);
 | 
			
		||||
  dummyTask->addComponent(objects::SUS_0_N_LOC_XFYFZM_PT_XF);
 | 
			
		||||
  dummyTask->addComponent(objects::SUS_1_N_LOC_XBYFZM_PT_XB);
 | 
			
		||||
@@ -211,8 +244,11 @@ void scheduling::initTasks() {
 | 
			
		||||
 | 
			
		||||
  sif::info << "Starting tasks.." << std::endl;
 | 
			
		||||
  tmtcDistributor->startTask();
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
  udpPollingTask->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
  tcpPollingTask->startTask();
 | 
			
		||||
  liveTmTask->startTask();
 | 
			
		||||
 | 
			
		||||
  pusHighPrio->startTask();
 | 
			
		||||
  pusMedPrio->startTask();
 | 
			
		||||
@@ -220,6 +256,12 @@ void scheduling::initTasks() {
 | 
			
		||||
  pstTask->startTask();
 | 
			
		||||
  thermalTask->startTask();
 | 
			
		||||
  dummyTask->startTask();
 | 
			
		||||
 | 
			
		||||
  // If those are added at a later stage..
 | 
			
		||||
  // logTmTask->startTask();
 | 
			
		||||
  // cfdpTmTask->startTask();
 | 
			
		||||
  // hkTmTask->startTask();
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1
 | 
			
		||||
  supvHelperTask->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -7,12 +7,12 @@ target_link_libraries(${SIMPLE_OBSW_NAME} PUBLIC ${LIB_FSFW_NAME})
 | 
			
		||||
target_compile_definitions(${SIMPLE_OBSW_NAME} PRIVATE "Q7S_SIMPLE_MODE")
 | 
			
		||||
add_subdirectory(simple)
 | 
			
		||||
 | 
			
		||||
target_sources(${OBSW_NAME} PUBLIC main.cpp obsw.cpp)
 | 
			
		||||
target_sources(${OBSW_NAME} PUBLIC main.cpp obsw.cpp scheduling.cpp
 | 
			
		||||
                                   objectFactory.cpp)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(boardtest)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(boardconfig)
 | 
			
		||||
add_subdirectory(comIF)
 | 
			
		||||
add_subdirectory(core)
 | 
			
		||||
 | 
			
		||||
if(EIVE_Q7S_EM)
 | 
			
		||||
 
 | 
			
		||||
@@ -13,13 +13,18 @@
 | 
			
		||||
/** All of the following flags should be enabled for mission code  */
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
 | 
			
		||||
#define OBSW_ENABLE_PERIODIC_HK                     0
 | 
			
		||||
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT       0
 | 
			
		||||
// This enables a lot of periodically generated telemetry, so it can make sense to
 | 
			
		||||
// disable this for debugging purposes.
 | 
			
		||||
#define OBSW_ENABLE_PERIODIC_HK                     @OBSW_ENABLE_PERIODIC_HK@
 | 
			
		||||
 | 
			
		||||
// This switch will cause the SW to command the EIVE system object to safe mode. This will
 | 
			
		||||
// trigger a lot of events, so it can make sense to disable this for debugging purposes
 | 
			
		||||
// trigger a lot of events, so it can make sense to disable this for debugging purposes.
 | 
			
		||||
#define OBSW_COMMAND_SAFE_MODE_AT_STARTUP           1
 | 
			
		||||
 | 
			
		||||
#define OBSW_ADD_GOMSPACE_PCDU                      @OBSW_ADD_GOMSPACE_PCDU@
 | 
			
		||||
// This define is necessary because the EM setup has the P60 dock module, but no ACU on the P60
 | 
			
		||||
// module because it broke.
 | 
			
		||||
#define OBSW_ADD_GOMSPACE_ACU                       @OBSW_ADD_GOMSPACE_ACU@
 | 
			
		||||
#define OBSW_ADD_MGT                                @OBSW_ADD_MGT@
 | 
			
		||||
#define OBSW_ADD_BPX_BATTERY_HANDLER                @OBSW_ADD_BPX_BATTERY_HANDLER@
 | 
			
		||||
#define OBSW_ADD_STAR_TRACKER                       @OBSW_ADD_STAR_TRACKER@
 | 
			
		||||
@@ -29,8 +34,8 @@
 | 
			
		||||
#define OBSW_ADD_SUS_BOARD_ASS                      @OBSW_ADD_SUS_BOARD_ASS@
 | 
			
		||||
#define OBSW_ADD_ACS_BOARD                          @OBSW_ADD_ACS_BOARD@
 | 
			
		||||
#define OBSW_ADD_ACS_CTRL                           1
 | 
			
		||||
#define OBSW_ADD_TCS_CTRL                           1
 | 
			
		||||
#define OBSW_ADD_GPS_CTRL                           @OBSW_ADD_GPS_CTRL@
 | 
			
		||||
#define OBSW_ADD_TCS_CTRL                           @OBSW_ADD_TCS_CTRL@
 | 
			
		||||
#define OBSW_ADD_RW                                 @OBSW_ADD_RW@
 | 
			
		||||
#define OBSW_ADD_RTD_DEVICES                        @OBSW_ADD_RTD_DEVICES@
 | 
			
		||||
#define OBSW_ADD_SA_DEPL                            @OBSW_ADD_SA_DEPL@
 | 
			
		||||
@@ -41,6 +46,9 @@
 | 
			
		||||
#define OBSW_ADD_PL_PCDU                            @OBSW_ADD_PL_PCDU@
 | 
			
		||||
#define OBSW_ADD_SYRLINKS                           @OBSW_ADD_SYRLINKS@
 | 
			
		||||
#define OBSW_ADD_CCSDS_IP_CORES                     @OBSW_ADD_CCSDS_IP_CORES@
 | 
			
		||||
// Only relevant for EM for TCS tests.
 | 
			
		||||
#define OBSW_ADD_THERMAL_TEMP_INSERTER              @OBSW_ADD_THERMAL_TEMP_INSERTER@
 | 
			
		||||
 | 
			
		||||
// Set to 1 if all telemetry should be sent to the PTME IP Core
 | 
			
		||||
#define OBSW_TM_TO_PTME                             @OBSW_TM_TO_PTME@
 | 
			
		||||
// Set to 1 if telecommands are received via the PDEC IP Core
 | 
			
		||||
@@ -59,12 +67,12 @@
 | 
			
		||||
// because UDP packets are not allowed in the VPN
 | 
			
		||||
// This will cause the OBSW to initialize the TMTC bridge responsible for exchanging data with the
 | 
			
		||||
// CCSDS IP Cores. 
 | 
			
		||||
#define OBSW_ADD_TMTC_TCP_SERVER                    1
 | 
			
		||||
#define OBSW_ADD_TMTC_UDP_SERVER                    1
 | 
			
		||||
#define OBSW_ADD_TMTC_TCP_SERVER                    @OBSW_ADD_TMTC_TCP_SERVER@
 | 
			
		||||
#define OBSW_ADD_TMTC_UDP_SERVER                    @OBSW_ADD_TMTC_UDP_SERVER@
 | 
			
		||||
 | 
			
		||||
// Can be used to switch device to NORMAL mode immediately
 | 
			
		||||
#define OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP    0
 | 
			
		||||
#define OBSW_PRINT_MISSED_DEADLINES                 1
 | 
			
		||||
#define OBSW_PRINT_MISSED_DEADLINES                 0
 | 
			
		||||
 | 
			
		||||
#define OBSW_MPSOC_JTAG_BOOT                        0
 | 
			
		||||
#define OBSW_STAR_TRACKER_GROUND_CONFIG             @OBSW_STAR_TRACKER_GROUND_CONFIG@
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,9 @@ static constexpr char SPI_RW_DEV[] = "/dev/spi_rw";
 | 
			
		||||
static constexpr char I2C_PL_EIVE[] = "/dev/i2c_pl";
 | 
			
		||||
//! I2C bus using the I2C peripheral of the ARM processing system (PS)
 | 
			
		||||
static constexpr char I2C_PS_EIVE[] = "/dev/i2c_ps";
 | 
			
		||||
//! I2C bus using the first I2C peripheral of the ARM processing system (PS).
 | 
			
		||||
//! Named like this because it is used by default for the Q7 devices.
 | 
			
		||||
static constexpr char I2C_Q7_EIVE[] = "/dev/i2c_q7";
 | 
			
		||||
 | 
			
		||||
static constexpr char UART_GNSS_DEV[] = "/dev/gps0";
 | 
			
		||||
static constexpr char UART_PLOC_MPSOC_DEV[] = "/dev/ul_plmpsoc";
 | 
			
		||||
@@ -23,6 +26,7 @@ static constexpr char UART_SCEX_DEV[] = "/dev/scex";
 | 
			
		||||
static constexpr char UIO_PDEC_REGISTERS[] = "/dev/uio_pdec_regs";
 | 
			
		||||
static constexpr char UIO_PTME[] = "/dev/uio_ptme";
 | 
			
		||||
static constexpr char UIO_PDEC_CONFIG_MEMORY[] = "/dev/uio_pdec_cfg_mem";
 | 
			
		||||
static constexpr char UIO_SYS_ROM[] = "/dev/uio_sys_rom";
 | 
			
		||||
static constexpr char UIO_PDEC_RAM[] = "/dev/uio_pdec_ram";
 | 
			
		||||
static constexpr char UIO_PDEC_IRQ[] = "/dev/uio_pdec_irq";
 | 
			
		||||
static constexpr int MAP_ID_PTME_CONFIG = 3;
 | 
			
		||||
@@ -57,6 +61,7 @@ static constexpr char GYRO_0_ENABLE[] = "enable_gyro_0";
 | 
			
		||||
static constexpr char GYRO_2_ENABLE[] = "enable_gyro_2";
 | 
			
		||||
static constexpr char GNSS_SELECT[] = "gnss_mux_select";
 | 
			
		||||
static constexpr char GNSS_MUX_SELECT[] = "gnss_mux_select";
 | 
			
		||||
static constexpr char PL_I2C_ARESETN[] = "pl_i2c_aresetn";
 | 
			
		||||
 | 
			
		||||
static constexpr char HEATER_0[] = "heater0";
 | 
			
		||||
static constexpr char HEATER_1[] = "heater1";
 | 
			
		||||
@@ -82,14 +87,14 @@ static constexpr char EN_RW_4[] = "enable_rw_4";
 | 
			
		||||
 | 
			
		||||
static constexpr char RAD_SENSOR_CHIP_SELECT[] = "rad_sensor_chip_select";
 | 
			
		||||
static constexpr char ENABLE_RADFET[] = "enable_radfet";
 | 
			
		||||
static constexpr char PAPB_BUSY_SIGNAL_VC0[] = "papb_busy_signal_vc0";
 | 
			
		||||
 | 
			
		||||
static constexpr char PAPB_EMPTY_SIGNAL_VC0[] = "papb_empty_signal_vc0";
 | 
			
		||||
static constexpr char PAPB_BUSY_SIGNAL_VC1[] = "papb_busy_signal_vc1";
 | 
			
		||||
static constexpr char PAPB_EMPTY_SIGNAL_VC1[] = "papb_empty_signal_vc1";
 | 
			
		||||
static constexpr char PAPB_BUSY_SIGNAL_VC2[] = "papb_busy_signal_vc2";
 | 
			
		||||
static constexpr char PAPB_EMPTY_SIGNAL_VC2[] = "papb_empty_signal_vc2";
 | 
			
		||||
static constexpr char PAPB_BUSY_SIGNAL_VC3[] = "papb_busy_signal_vc3";
 | 
			
		||||
static constexpr char PAPB_EMPTY_SIGNAL_VC3[] = "papb_empty_signal_vc3";
 | 
			
		||||
 | 
			
		||||
static constexpr char PTME_RESETN[] = "ptme_resetn";
 | 
			
		||||
 | 
			
		||||
static constexpr char RS485_EN_TX_CLOCK[] = "tx_clock_enable_ltc2872";
 | 
			
		||||
static constexpr char RS485_EN_TX_DATA[] = "tx_data_enable_ltc2872";
 | 
			
		||||
static constexpr char RS485_EN_RX_CLOCK[] = "rx_clock_enable_ltc2872";
 | 
			
		||||
 
 | 
			
		||||
@@ -218,15 +218,30 @@ void Q7STestTask::testProtHandler() {
 | 
			
		||||
  bool opPerformed = false;
 | 
			
		||||
  ReturnValue_t result = returnvalue::OK;
 | 
			
		||||
  // If any chips are unlocked, lock them here
 | 
			
		||||
  result = coreController->setBootCopyProtection(xsc::Chip::ALL_CHIP, xsc::Copy::ALL_COPY, true,
 | 
			
		||||
                                                 opPerformed, true);
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_0, xsc::Copy::COPY_0,
 | 
			
		||||
                                                              true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_0, xsc::Copy::COPY_1,
 | 
			
		||||
                                                              true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_1, xsc::Copy::COPY_0,
 | 
			
		||||
                                                              true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_1, xsc::Copy::COPY_1,
 | 
			
		||||
                                                              true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // unlock own copy
 | 
			
		||||
  result = coreController->setBootCopyProtection(xsc::Chip::SELF_CHIP, xsc::Copy::SELF_COPY, false,
 | 
			
		||||
                                                 opPerformed, true);
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::SELF_CHIP,
 | 
			
		||||
                                                              xsc::Copy::SELF_COPY, false);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
@@ -239,8 +254,8 @@ void Q7STestTask::testProtHandler() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // lock own copy
 | 
			
		||||
  result = coreController->setBootCopyProtection(xsc::Chip::SELF_CHIP, xsc::Copy::SELF_COPY, true,
 | 
			
		||||
                                                 opPerformed, true);
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::SELF_CHIP,
 | 
			
		||||
                                                              xsc::Copy::SELF_COPY, true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
@@ -253,8 +268,8 @@ void Q7STestTask::testProtHandler() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // unlock specific copy
 | 
			
		||||
  result = coreController->setBootCopyProtection(xsc::Chip::CHIP_1, xsc::Copy::COPY_1, false,
 | 
			
		||||
                                                 opPerformed, true);
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_1, xsc::Copy::COPY_1,
 | 
			
		||||
                                                              false);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
@@ -267,8 +282,8 @@ void Q7STestTask::testProtHandler() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // lock specific copy
 | 
			
		||||
  result = coreController->setBootCopyProtection(xsc::Chip::CHIP_1, xsc::Copy::COPY_1, true,
 | 
			
		||||
                                                 opPerformed, true);
 | 
			
		||||
  result = coreController->setBootCopyProtectionAndUpdateFile(xsc::Chip::CHIP_1, xsc::Copy::COPY_1,
 | 
			
		||||
                                                              true);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Q7STestTask::testProtHandler: Op failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#ifndef BSP_Q7S_CALLBACKS_PCDUSWITCHCB_H_
 | 
			
		||||
#define BSP_Q7S_CALLBACKS_PCDUSWITCHCB_H_
 | 
			
		||||
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
namespace pcdu {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
#include "fsfw/serviceinterface/ServiceInterface.h"
 | 
			
		||||
#include "fsfw_hal/linux/UnixFileGuard.h"
 | 
			
		||||
#include "fsfw_hal/linux/spi/SpiCookie.h"
 | 
			
		||||
#include "mission/devices/RwHandler.h"
 | 
			
		||||
#include "mission/acs/RwHandler.h"
 | 
			
		||||
 | 
			
		||||
namespace rwSpiCallback {
 | 
			
		||||
 | 
			
		||||
@@ -252,7 +252,7 @@ ReturnValue_t openSpi(const std::string& devname, int flags, GpioIF* gpioIF, gpi
 | 
			
		||||
  fd = open(devname.c_str(), flags);
 | 
			
		||||
  if (fd < 0) {
 | 
			
		||||
    sif::error << "rwSpiCallback::spiCallback: Failed to open device file" << std::endl;
 | 
			
		||||
    return SpiComIF::OPENING_FILE_FAILED;
 | 
			
		||||
    return spi::OPENING_FILE_FAILED;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Pull SPI CS low. For now, no support for active high given
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
target_sources(${OBSW_NAME} PRIVATE)
 | 
			
		||||
@@ -1,4 +1,2 @@
 | 
			
		||||
target_sources(${OBSW_NAME} PRIVATE CoreController.cpp scheduling.cpp
 | 
			
		||||
                                    ObjectFactory.cpp WatchdogHandler.cpp)
 | 
			
		||||
 | 
			
		||||
target_sources(${SIMPLE_OBSW_NAME} PRIVATE scheduling.cpp)
 | 
			
		||||
target_sources(${OBSW_NAME} PRIVATE CoreController.cpp WatchdogHandler.cpp
 | 
			
		||||
                                    XiphosWdtHandler.cpp)
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,32 +1,30 @@
 | 
			
		||||
#ifndef BSP_Q7S_CORE_CORECONTROLLER_H_
 | 
			
		||||
#define BSP_Q7S_CORE_CORECONTROLLER_H_
 | 
			
		||||
 | 
			
		||||
#include <bsp_q7s/core/defs.h>
 | 
			
		||||
#include <fsfw/container/DynamicFIFO.h>
 | 
			
		||||
#include <fsfw/container/SimpleRingBuffer.h>
 | 
			
		||||
#include <fsfw/globalfunctions/PeriodicOperationDivider.h>
 | 
			
		||||
#include <fsfw/parameters/ParameterHelper.h>
 | 
			
		||||
#include <fsfw/parameters/ReceivesParameterMessagesIF.h>
 | 
			
		||||
#include <fsfw_hal/linux/uio/UioMapper.h>
 | 
			
		||||
#include <libxiphos.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <mission/utility/trace.h>
 | 
			
		||||
 | 
			
		||||
#include <atomic>
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
 | 
			
		||||
#include "CoreDefinitions.h"
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/fs/SdCardManager.h"
 | 
			
		||||
#include "events/subsystemIdRanges.h"
 | 
			
		||||
#include "fsfw/controller/ExtendedControllerBase.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/GPSDefinitions.h"
 | 
			
		||||
#include "mission/trace.h"
 | 
			
		||||
#include "mission/sysDefs.h"
 | 
			
		||||
 | 
			
		||||
class Timer;
 | 
			
		||||
class SdCardManager;
 | 
			
		||||
 | 
			
		||||
namespace xsc {
 | 
			
		||||
 | 
			
		||||
enum Chip : int { CHIP_0, CHIP_1, NO_CHIP, SELF_CHIP, ALL_CHIP };
 | 
			
		||||
enum Copy : int { COPY_0, COPY_1, NO_COPY, SELF_COPY, ALL_COPY };
 | 
			
		||||
 | 
			
		||||
}  // namespace xsc
 | 
			
		||||
 | 
			
		||||
struct RebootFile {
 | 
			
		||||
struct RebootWatchdogFile {
 | 
			
		||||
  static constexpr uint8_t DEFAULT_MAX_BOOT_CNT = 10;
 | 
			
		||||
 | 
			
		||||
  bool enabled = true;
 | 
			
		||||
@@ -47,8 +45,97 @@ struct RebootFile {
 | 
			
		||||
  xsc::Copy mechanismNextCopy = xsc::Copy::NO_COPY;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class CoreController : public ExtendedControllerBase {
 | 
			
		||||
class RebootWatchdogPacket : public SerialLinkedListAdapter<SerializeIF> {
 | 
			
		||||
 public:
 | 
			
		||||
  RebootWatchdogPacket(RebootWatchdogFile& rf) {
 | 
			
		||||
    enabled = rf.enabled;
 | 
			
		||||
    maxCount = rf.maxCount;
 | 
			
		||||
    img00Count = rf.img00Cnt;
 | 
			
		||||
    img01Count = rf.img01Cnt;
 | 
			
		||||
    img10Count = rf.img10Cnt;
 | 
			
		||||
    img11Count = rf.img11Cnt;
 | 
			
		||||
    img00Lock = rf.img00Lock;
 | 
			
		||||
    img01Lock = rf.img01Lock;
 | 
			
		||||
    img10Lock = rf.img10Lock;
 | 
			
		||||
    img11Lock = rf.img11Lock;
 | 
			
		||||
    lastChip = static_cast<uint8_t>(rf.lastChip);
 | 
			
		||||
    lastCopy = static_cast<uint8_t>(rf.lastCopy);
 | 
			
		||||
    nextChip = static_cast<uint8_t>(rf.mechanismNextChip);
 | 
			
		||||
    nextCopy = static_cast<uint8_t>(rf.mechanismNextCopy);
 | 
			
		||||
    setLinks();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  void setLinks() {
 | 
			
		||||
    setStart(&enabled);
 | 
			
		||||
    enabled.setNext(&maxCount);
 | 
			
		||||
    maxCount.setNext(&img00Count);
 | 
			
		||||
    img00Count.setNext(&img01Count);
 | 
			
		||||
    img01Count.setNext(&img10Count);
 | 
			
		||||
    img10Count.setNext(&img11Count);
 | 
			
		||||
    img11Count.setNext(&img00Lock);
 | 
			
		||||
    img00Lock.setNext(&img01Lock);
 | 
			
		||||
    img01Lock.setNext(&img10Lock);
 | 
			
		||||
    img10Lock.setNext(&img11Lock);
 | 
			
		||||
    img11Lock.setNext(&lastChip);
 | 
			
		||||
    lastChip.setNext(&lastCopy);
 | 
			
		||||
    lastCopy.setNext(&nextChip);
 | 
			
		||||
    nextChip.setNext(&nextCopy);
 | 
			
		||||
    setLast(&nextCopy);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SerializeElement<uint8_t> enabled = false;
 | 
			
		||||
  SerializeElement<uint32_t> maxCount = 0;
 | 
			
		||||
  SerializeElement<uint32_t> img00Count = 0;
 | 
			
		||||
  SerializeElement<uint32_t> img01Count = 0;
 | 
			
		||||
  SerializeElement<uint32_t> img10Count = 0;
 | 
			
		||||
  SerializeElement<uint32_t> img11Count = 0;
 | 
			
		||||
  SerializeElement<uint8_t> img00Lock = false;
 | 
			
		||||
  SerializeElement<uint8_t> img01Lock = false;
 | 
			
		||||
  SerializeElement<uint8_t> img10Lock = false;
 | 
			
		||||
  SerializeElement<uint8_t> img11Lock = false;
 | 
			
		||||
  SerializeElement<uint8_t> lastChip = 0;
 | 
			
		||||
  SerializeElement<uint8_t> lastCopy = 0;
 | 
			
		||||
  SerializeElement<uint8_t> nextChip = 0;
 | 
			
		||||
  SerializeElement<uint8_t> nextCopy = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct RebootCountersFile {
 | 
			
		||||
  // 16 bit values so all boot counters fit into one event.
 | 
			
		||||
  uint16_t img00Cnt = 0;
 | 
			
		||||
  uint16_t img01Cnt = 0;
 | 
			
		||||
  uint16_t img10Cnt = 0;
 | 
			
		||||
  uint16_t img11Cnt = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class RebootCountersPacket : public SerialLinkedListAdapter<SerializeIF> {
 | 
			
		||||
  RebootCountersPacket(RebootCountersFile& rf) {
 | 
			
		||||
    img00Count = rf.img00Cnt;
 | 
			
		||||
    img01Count = rf.img01Cnt;
 | 
			
		||||
    img10Count = rf.img10Cnt;
 | 
			
		||||
    img11Count = rf.img11Cnt;
 | 
			
		||||
    setLinks();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  void setLinks() {
 | 
			
		||||
    setStart(&img00Count);
 | 
			
		||||
    img00Count.setNext(&img01Count);
 | 
			
		||||
    img01Count.setNext(&img10Count);
 | 
			
		||||
    img10Count.setNext(&img11Count);
 | 
			
		||||
    setLast(&img11Count);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SerializeElement<uint16_t> img00Count = 0;
 | 
			
		||||
  SerializeElement<uint16_t> img01Count = 0;
 | 
			
		||||
  SerializeElement<uint16_t> img10Count = 0;
 | 
			
		||||
  SerializeElement<uint16_t> img11Count = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class CoreController : public ExtendedControllerBase, public ReceivesParameterMessagesIF {
 | 
			
		||||
 public:
 | 
			
		||||
  enum ParamId : uint8_t { PREF_SD = 0, NUM_IDS };
 | 
			
		||||
 | 
			
		||||
  static xsc::Chip CURRENT_CHIP;
 | 
			
		||||
  static xsc::Copy CURRENT_COPY;
 | 
			
		||||
 | 
			
		||||
@@ -56,83 +143,28 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
  static constexpr char CHIP_STATE_FILE[] = "/tmp/chip_prot_status.txt";
 | 
			
		||||
  static constexpr char CURR_COPY_FILE[] = "/tmp/curr_copy.txt";
 | 
			
		||||
 | 
			
		||||
  static constexpr char CONF_FOLDER[] = "conf";
 | 
			
		||||
 | 
			
		||||
  static constexpr char VERSION_FILE_NAME[] = "version.txt";
 | 
			
		||||
  static constexpr char REBOOT_FILE_NAME[] = "reboot.txt";
 | 
			
		||||
  static constexpr char TIME_FILE_NAME[] = "time_backup.txt";
 | 
			
		||||
 | 
			
		||||
  const std::string VERSION_FILE =
 | 
			
		||||
      "/" + std::string(CONF_FOLDER) + "/" + std::string(VERSION_FILE_NAME);
 | 
			
		||||
  const std::string REBOOT_FILE =
 | 
			
		||||
      "/" + std::string(CONF_FOLDER) + "/" + std::string(REBOOT_FILE_NAME);
 | 
			
		||||
      "/" + std::string(core::CONF_FOLDER) + "/" + std::string(core::VERSION_FILE_NAME);
 | 
			
		||||
  const std::string LEGACY_REBOOT_WATCHDOG_FILE =
 | 
			
		||||
      "/" + std::string(core::CONF_FOLDER) + "/" +
 | 
			
		||||
      std::string(core::LEGACY_REBOOT_WATCHDOG_FILE_NAME);
 | 
			
		||||
  const std::string REBOOT_WATCHDOG_FILE =
 | 
			
		||||
      "/" + std::string(core::CONF_FOLDER) + "/" + std::string(core::REBOOT_WATCHDOG_FILE_NAME);
 | 
			
		||||
  const std::string BACKUP_TIME_FILE =
 | 
			
		||||
      "/" + std::string(CONF_FOLDER) + "/" + std::string(TIME_FILE_NAME);
 | 
			
		||||
      "/" + std::string(core::CONF_FOLDER) + "/" + std::string(core::TIME_FILE_NAME);
 | 
			
		||||
  const std::string REBOOT_COUNTERS_FILE =
 | 
			
		||||
      "/" + std::string(core::CONF_FOLDER) + "/" + std::string(core::REBOOT_COUNTER_FILE_NAME);
 | 
			
		||||
 | 
			
		||||
  static constexpr char CHIP_0_COPY_0_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-nom-rootfs";
 | 
			
		||||
  static constexpr char CHIP_0_COPY_1_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-gold-rootfs";
 | 
			
		||||
  static constexpr char CHIP_1_COPY_0_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi1-nom-rootfs";
 | 
			
		||||
  static constexpr char CHIP_1_COPY_1_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi1-gold-rootfs";
 | 
			
		||||
  static constexpr char LIST_DIR_DUMP_WORK_FILE[] = "/tmp/dir_listing.tmp";
 | 
			
		||||
 | 
			
		||||
  static constexpr dur_millis_t INIT_SD_CARD_CHECK_TIMEOUT = 5000;
 | 
			
		||||
  static constexpr dur_millis_t DEFAULT_SD_CARD_CHECK_TIMEOUT = 60000;
 | 
			
		||||
 | 
			
		||||
  static constexpr ActionId_t LIST_DIRECTORY_INTO_FILE = 0;
 | 
			
		||||
  static constexpr ActionId_t ANNOUNCE_VERSION = 1;
 | 
			
		||||
  static constexpr ActionId_t ANNOUNCE_CURRENT_IMAGE = 2;
 | 
			
		||||
  static constexpr ActionId_t ANNOUNCE_BOOT_COUNTS = 3;
 | 
			
		||||
  static constexpr ActionId_t SWITCH_REBOOT_FILE_HANDLING = 5;
 | 
			
		||||
  static constexpr ActionId_t RESET_REBOOT_COUNTERS = 6;
 | 
			
		||||
  static constexpr ActionId_t SWITCH_IMG_LOCK = 7;
 | 
			
		||||
  static constexpr ActionId_t SET_MAX_REBOOT_CNT = 8;
 | 
			
		||||
 | 
			
		||||
  static constexpr ActionId_t OBSW_UPDATE_FROM_SD_0 = 10;
 | 
			
		||||
  static constexpr ActionId_t OBSW_UPDATE_FROM_SD_1 = 11;
 | 
			
		||||
  static constexpr ActionId_t OBSW_UPDATE_FROM_TMP = 12;
 | 
			
		||||
 | 
			
		||||
  static constexpr ActionId_t SWITCH_TO_SD_0 = 16;
 | 
			
		||||
  static constexpr ActionId_t SWITCH_TO_SD_1 = 17;
 | 
			
		||||
  static constexpr ActionId_t SWITCH_TO_BOTH_SD_CARDS = 18;
 | 
			
		||||
 | 
			
		||||
  //! Reboot using the xsc_boot_copy command
 | 
			
		||||
  static constexpr ActionId_t XSC_REBOOT_OBC = 32;
 | 
			
		||||
  static constexpr ActionId_t MOUNT_OTHER_COPY = 33;
 | 
			
		||||
  //! Reboot using the reboot command
 | 
			
		||||
  static constexpr ActionId_t REBOOT_OBC = 34;
 | 
			
		||||
 | 
			
		||||
  static constexpr ActionId_t EXECUTE_SHELL_CMD = 40;
 | 
			
		||||
 | 
			
		||||
  static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CORE;
 | 
			
		||||
 | 
			
		||||
  static constexpr Event ALLOC_FAILURE = event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
 | 
			
		||||
  //! [EXPORT] : [COMMENT]  Software reboot occurred. Can also be a systemd reboot.
 | 
			
		||||
  //! P1: Current Chip, P2: Current Copy
 | 
			
		||||
  static constexpr Event REBOOT_SW = event::makeEvent(SUBSYSTEM_ID, 1, severity::LOW);
 | 
			
		||||
  //! [EXPORT] : [COMMENT] The reboot mechanism was triggered.
 | 
			
		||||
  //! P1: First 16 bits: Last Chip, Last 16 bits: Last Copy,
 | 
			
		||||
  //! P2: Each byte is the respective reboot count for the slots
 | 
			
		||||
  static constexpr Event REBOOT_MECHANISM_TRIGGERED =
 | 
			
		||||
      event::makeEvent(SUBSYSTEM_ID, 2, severity::MEDIUM);
 | 
			
		||||
  //! Trying to find a way how to determine that the reboot came from ProASIC3 or PCDU..
 | 
			
		||||
  static constexpr Event REBOOT_HW = event::makeEvent(SUBSYSTEM_ID, 3, severity::MEDIUM);
 | 
			
		||||
  //! [EXPORT] : [COMMENT] No SD card was active. Core controller will attempt to re-initialize
 | 
			
		||||
  //! a SD card.
 | 
			
		||||
  static constexpr Event NO_SD_CARD_ACTIVE = event::makeEvent(SUBSYSTEM_ID, 4, severity::HIGH);
 | 
			
		||||
  //! [EXPORT] : [COMMENT]
 | 
			
		||||
  //! P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash
 | 
			
		||||
  //! P2: First four letters of Git SHA is the last byte of P1 is set.
 | 
			
		||||
  static constexpr Event VERSION_INFO = event::makeEvent(SUBSYSTEM_ID, 5, severity::INFO);
 | 
			
		||||
  //! [EXPORT] : [COMMENT] P1: Current Chip, P2: Current Copy
 | 
			
		||||
  static constexpr Event CURRENT_IMAGE_INFO = event::makeEvent(SUBSYSTEM_ID, 6, severity::INFO);
 | 
			
		||||
  //! [EXPORT] : [COMMENT] Total reboot counter, which is the sum of the boot count of all
 | 
			
		||||
  //! individual images.
 | 
			
		||||
  static constexpr Event REBOOT_COUNTER = event::makeEvent(SUBSYSTEM_ID, 7, severity::INFO);
 | 
			
		||||
  //! [EXPORT] : [COMMENT] Get the boot count of the individual images.
 | 
			
		||||
  //! P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1.
 | 
			
		||||
  //! P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.
 | 
			
		||||
  static constexpr Event INDIVIDUAL_BOOT_COUNTS = event::makeEvent(SUBSYSTEM_ID, 8, severity::INFO);
 | 
			
		||||
 | 
			
		||||
  CoreController(object_id_t objectId);
 | 
			
		||||
  CoreController(object_id_t objectId, bool enableHkSet);
 | 
			
		||||
  virtual ~CoreController();
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t initialize() override;
 | 
			
		||||
@@ -167,8 +199,8 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
   * @param updateProtFile Specify whether the protection info file is updated
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  ReturnValue_t setBootCopyProtection(xsc::Chip targetChip, xsc::Copy targetCopy, bool protect,
 | 
			
		||||
                                      bool& protOperationPerformed, bool updateProtFile = true);
 | 
			
		||||
  ReturnValue_t setBootCopyProtectionAndUpdateFile(xsc::Chip targetChip, xsc::Copy targetCopy,
 | 
			
		||||
                                                   bool protect);
 | 
			
		||||
 | 
			
		||||
  bool sdInitFinished() const;
 | 
			
		||||
 | 
			
		||||
@@ -176,14 +208,15 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
  static constexpr uint32_t BOOT_OFFSET_SECONDS = 15;
 | 
			
		||||
  static constexpr MutexIF::TimeoutType TIMEOUT_TYPE = MutexIF::TimeoutType::WAITING;
 | 
			
		||||
  static constexpr uint32_t MUTEX_TIMEOUT = 20;
 | 
			
		||||
  bool enableHkSet = false;
 | 
			
		||||
  GpsHyperion::FixMode gpsFix = GpsHyperion::FixMode::UNKNOWN;
 | 
			
		||||
 | 
			
		||||
  // States for SD state machine, which is used in non-blocking mode
 | 
			
		||||
  enum class SdStates {
 | 
			
		||||
    NONE,
 | 
			
		||||
    START,
 | 
			
		||||
    GET_INFO,
 | 
			
		||||
    SET_STATE_SELF,
 | 
			
		||||
    UPDATE_SD_INFO_START,
 | 
			
		||||
    SKIP_TWO_CYCLES_IF_SD_LOCKED,
 | 
			
		||||
    MOUNT_SELF,
 | 
			
		||||
    // Determine operations for other SD card, depending on redundancy configuration
 | 
			
		||||
    DETERMINE_OTHER,
 | 
			
		||||
@@ -193,7 +226,7 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
    // Skip period because the shell command used to generate the info file sometimes is
 | 
			
		||||
    // missing the last performed operation if executed too early
 | 
			
		||||
    SKIP_CYCLE_BEFORE_INFO_UPDATE,
 | 
			
		||||
    UPDATE_INFO,
 | 
			
		||||
    UPDATE_SD_INFO_END,
 | 
			
		||||
    // SD initialization done
 | 
			
		||||
    IDLE
 | 
			
		||||
  };
 | 
			
		||||
@@ -202,26 +235,34 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
 | 
			
		||||
  static constexpr bool BLOCKING_SD_INIT = false;
 | 
			
		||||
 | 
			
		||||
  uint32_t* mappedSysRomAddr = nullptr;
 | 
			
		||||
  SdCardManager* sdcMan = nullptr;
 | 
			
		||||
  MessageQueueIF* eventQueue = nullptr;
 | 
			
		||||
 | 
			
		||||
  uint8_t prefSdRaw = sd::SdCard::SLOT_0;
 | 
			
		||||
  SdStates sdFsmState = SdStates::START;
 | 
			
		||||
  SdStates fsmStateAfterDelay = SdStates::IDLE;
 | 
			
		||||
  enum SdCfgMode { PASSIVE, COLD_REDUNDANT, HOT_REDUNDANT };
 | 
			
		||||
 | 
			
		||||
  struct SdFsmParams {
 | 
			
		||||
    SdCfgMode cfgMode = SdCfgMode::COLD_REDUNDANT;
 | 
			
		||||
    sd::SdCard active = sd::SdCard::NONE;
 | 
			
		||||
    sd::SdCard other = sd::SdCard::NONE;
 | 
			
		||||
    sd::SdState activeState = sd::SdState::OFF;
 | 
			
		||||
    sd::SdState otherState = sd::SdState::OFF;
 | 
			
		||||
    std::string activeChar = "0";
 | 
			
		||||
    std::string otherChar = "1";
 | 
			
		||||
    sd::SdState activeState = sd::SdState::OFF;
 | 
			
		||||
    sd::SdState otherState = sd::SdState::OFF;
 | 
			
		||||
    std::pair<bool, bool> mountSwitch = {true, true};
 | 
			
		||||
    // Used to track whether a command was executed
 | 
			
		||||
    bool commandExecuted = true;
 | 
			
		||||
    // This flag denotes that the SD card usage is locked. This is relevant if SD cards go off
 | 
			
		||||
    // to leave appliation using the SD cards some time to detect the SD card is not usable anymore.
 | 
			
		||||
    // This is relevant if the active SD card is being switched. The SD card will also be locked
 | 
			
		||||
    // when going from hot-redundant mode to cold-redundant mode.
 | 
			
		||||
    bool lockSdCardUsage = false;
 | 
			
		||||
    bool commandPending = true;
 | 
			
		||||
    bool initFinished = false;
 | 
			
		||||
    SdCardManager::SdStatePair currentState;
 | 
			
		||||
    uint16_t cycleCount = 0;
 | 
			
		||||
    uint16_t skippedCyclesCount = 0;
 | 
			
		||||
  } sdInfo;
 | 
			
		||||
 | 
			
		||||
  struct SdCommanding {
 | 
			
		||||
@@ -230,7 +271,22 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
    DeviceCommandId_t actionId;
 | 
			
		||||
  } sdCommandingInfo;
 | 
			
		||||
 | 
			
		||||
  RebootFile rebootFile = {};
 | 
			
		||||
  struct DirListingDumpContext {
 | 
			
		||||
    bool active;
 | 
			
		||||
    bool firstDump;
 | 
			
		||||
    size_t dumpedBytes;
 | 
			
		||||
    size_t totalFileSize;
 | 
			
		||||
    size_t listingDataOffset;
 | 
			
		||||
    size_t maxDumpLen;
 | 
			
		||||
    uint32_t segmentIdx;
 | 
			
		||||
    MessageQueueId_t commander = MessageQueueIF::NO_QUEUE;
 | 
			
		||||
    DeviceCommandId_t actionId;
 | 
			
		||||
  };
 | 
			
		||||
  std::array<uint8_t, 1024> dirListingBuf{};
 | 
			
		||||
  DirListingDumpContext dumpContext{};
 | 
			
		||||
 | 
			
		||||
  RebootWatchdogFile rebootWatchdogFile = {};
 | 
			
		||||
  RebootCountersFile rebootCountersFile = {};
 | 
			
		||||
 | 
			
		||||
  CommandExecutor cmdExecutor;
 | 
			
		||||
  SimpleRingBuffer cmdReplyBuf;
 | 
			
		||||
@@ -248,12 +304,10 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
  Countdown sdCardCheckCd = Countdown(INIT_SD_CARD_CHECK_TIMEOUT);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Index 0: Chip 0 Copy 0
 | 
			
		||||
   * Index 1: Chip 0 Copy 1
 | 
			
		||||
   * Index 2: Chip 1 Copy 0
 | 
			
		||||
   * Index 3: Chip 1 Copy 1
 | 
			
		||||
   * First index: Chip.
 | 
			
		||||
   * Second index: Copy.
 | 
			
		||||
   */
 | 
			
		||||
  std::array<bool, 4> protArray;
 | 
			
		||||
  bool protArray[2][2]{};
 | 
			
		||||
  PeriodicOperationDivider opDivider5;
 | 
			
		||||
  PeriodicOperationDivider opDivider10;
 | 
			
		||||
 | 
			
		||||
@@ -263,10 +317,16 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
 | 
			
		||||
  core::HkSet hkSet;
 | 
			
		||||
 | 
			
		||||
  ParameterHelper paramHelper;
 | 
			
		||||
 | 
			
		||||
#if OBSW_SD_CARD_MUST_BE_ON == 1
 | 
			
		||||
  bool remountAttemptFlag = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  MessageQueueId_t getCommandQueue() const override;
 | 
			
		||||
  ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueIdentifier,
 | 
			
		||||
                             ParameterWrapper* parameterWrapper, const ParameterWrapper* newValues,
 | 
			
		||||
                             uint16_t startAtIndex) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager& poolManager) override;
 | 
			
		||||
 | 
			
		||||
@@ -285,7 +345,7 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
  void initPrint();
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t sdStateMachine();
 | 
			
		||||
  void updateSdInfoOther();
 | 
			
		||||
  void updateInternalSdInfo();
 | 
			
		||||
  ReturnValue_t sdCardSetup(sd::SdCard sdCard, sd::SdState targetState, std::string sdChar,
 | 
			
		||||
                            bool printOutput = true);
 | 
			
		||||
  ReturnValue_t executeSwUpdate(SwUpdateSources sourceDir, const uint8_t* data, size_t size);
 | 
			
		||||
@@ -294,27 +354,40 @@ class CoreController : public ExtendedControllerBase {
 | 
			
		||||
  void currentStateSetter(sd::SdCard sdCard, sd::SdState newState);
 | 
			
		||||
  void executeNextExternalSdCommand();
 | 
			
		||||
  void checkExternalSdCommandStatus();
 | 
			
		||||
  void performRebootFileHandling(bool recreateFile);
 | 
			
		||||
  void performRebootWatchdogHandling(bool recreateFile);
 | 
			
		||||
  void performRebootCountersHandling(bool recreateFile);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t actionListDirectoryIntoFile(ActionId_t actionId, MessageQueueId_t commandedBy,
 | 
			
		||||
                                            const uint8_t* data, size_t size);
 | 
			
		||||
  ReturnValue_t actionListDirectoryDumpDirectly(ActionId_t actionId, MessageQueueId_t commandedBy,
 | 
			
		||||
                                                const uint8_t* data, size_t size);
 | 
			
		||||
  ReturnValue_t performGracefulShutdown(xsc::Chip targetChip, xsc::Copy targetCopy);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t actionListDirectoryCommonCommandCreator(const uint8_t* data, size_t size,
 | 
			
		||||
                                                        std::ostringstream& oss);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t actionXscReboot(const uint8_t* data, size_t size);
 | 
			
		||||
  ReturnValue_t actionReboot(const uint8_t* data, size_t size);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t gracefulShutdownTasks(xsc::Chip chip, xsc::Copy copy, bool& protOpPerformed);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t handleProtInfoUpdateLine(std::string nextLine);
 | 
			
		||||
  int handleBootCopyProtAtIndex(xsc::Chip targetChip, xsc::Copy targetCopy, bool protect,
 | 
			
		||||
                                bool& protOperationPerformed, bool selfChip, bool selfCopy,
 | 
			
		||||
                                bool allChips, bool allCopies, uint8_t arrIdx);
 | 
			
		||||
  void determineAndExecuteReboot(RebootFile& rf, bool& needsReboot, xsc::Chip& tgtChip,
 | 
			
		||||
                                 xsc::Copy& tgtCopy);
 | 
			
		||||
  void resetRebootCount(xsc::Chip tgtChip, xsc::Copy tgtCopy);
 | 
			
		||||
  ReturnValue_t handleSwitchingSdCardsOffNonBlocking();
 | 
			
		||||
  bool handleBootCopyProt(xsc::Chip targetChip, xsc::Copy targetCopy, bool protect);
 | 
			
		||||
  void rebootWatchdogAlgorithm(RebootWatchdogFile& rf, bool& needsReboot, xsc::Chip& tgtChip,
 | 
			
		||||
                               xsc::Copy& tgtCopy);
 | 
			
		||||
  void resetRebootWatchdogCounters(xsc::Chip tgtChip, xsc::Copy tgtCopy);
 | 
			
		||||
  void setRebootMechanismLock(bool lock, xsc::Chip tgtChip, xsc::Copy tgtCopy);
 | 
			
		||||
  bool parseRebootFile(std::string path, RebootFile& file);
 | 
			
		||||
  void rewriteRebootFile(RebootFile file);
 | 
			
		||||
  bool parseRebootWatchdogFile(std::string path, RebootWatchdogFile& file);
 | 
			
		||||
  bool parseRebootCountersFile(std::string path, RebootCountersFile& file);
 | 
			
		||||
  void rewriteRebootWatchdogFile(RebootWatchdogFile file);
 | 
			
		||||
  void rewriteRebootCountersFile(RebootCountersFile file);
 | 
			
		||||
  void announceBootCounts();
 | 
			
		||||
  void announceVersionInfo();
 | 
			
		||||
  void announceCurrentImageInfo();
 | 
			
		||||
  void announceSdInfo(SdCardManager::SdStatePair sdStates);
 | 
			
		||||
  void readHkData();
 | 
			
		||||
  void dirListingDumpHandler();
 | 
			
		||||
  bool isNumber(const std::string& s);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								bsp_q7s/core/XiphosWdtHandler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								bsp_q7s/core/XiphosWdtHandler.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
#include "XiphosWdtHandler.h"
 | 
			
		||||
 | 
			
		||||
#include "fsfw/ipc/QueueFactory.h"
 | 
			
		||||
 | 
			
		||||
XiphosWdtHandler::XiphosWdtHandler(object_id_t objectId)
 | 
			
		||||
    : SystemObject(objectId),
 | 
			
		||||
      requestQueue(QueueFactory::instance()->createMessageQueue()),
 | 
			
		||||
      actionHelper(this, requestQueue) {}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t XiphosWdtHandler::initialize() {
 | 
			
		||||
  ReturnValue_t result = actionHelper.initialize();
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
  int retval = xsc_watchdog_init(&wdtHandle);
 | 
			
		||||
  if (retval != 0) {
 | 
			
		||||
    sif::error << "XiphosWdtHandler: Initiating watchdog failed with code " << retval << ": "
 | 
			
		||||
               << strerror(retval) << std::endl;
 | 
			
		||||
    return ObjectManagerIF::CHILD_INIT_FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  if (wdtHandle == nullptr) {
 | 
			
		||||
    sif::error << "XiphosWdtHandler: WDT handle is nullptr!" << std::endl;
 | 
			
		||||
    return ObjectManagerIF::CHILD_INIT_FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  retval = xsc_watchdog_set_timeout(wdtHandle, timeoutSeconds);
 | 
			
		||||
  if (retval != 0) {
 | 
			
		||||
    // This propably means that the default timeout is used. Still continue with task init.
 | 
			
		||||
    sif::warning << "XiphosWdtHandler: Setting WDT timeout of " << timeoutSeconds
 | 
			
		||||
                 << " seconds failed with code " << result << ": " << strerror(retval) << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  return enableWdt();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t XiphosWdtHandler::performOperation(uint8_t opCode) {
 | 
			
		||||
  CommandMessage command;
 | 
			
		||||
  ReturnValue_t result;
 | 
			
		||||
  for (result = requestQueue->receiveMessage(&command); result == returnvalue::OK;
 | 
			
		||||
       result = requestQueue->receiveMessage(&command)) {
 | 
			
		||||
    result = actionHelper.handleActionMessage(&command);
 | 
			
		||||
    if (result == returnvalue::OK) {
 | 
			
		||||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
    sif::warning << "Can not handle message with message type " << command.getMessageType()
 | 
			
		||||
                 << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  if (enabled) {
 | 
			
		||||
    int retval = xsc_watchdog_keepalive(wdtHandle);
 | 
			
		||||
    if (retval != 0) {
 | 
			
		||||
      sif::warning << "XiphosWdtHandler: Feeding WDT failed with code " << retval << ": "
 | 
			
		||||
                   << strerror(retval) << std::endl;
 | 
			
		||||
      return returnvalue::FAILED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t XiphosWdtHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
 | 
			
		||||
                                              const uint8_t *data, size_t size) {
 | 
			
		||||
  switch (actionId) {
 | 
			
		||||
    case (ActionId::ENABLE): {
 | 
			
		||||
      ReturnValue_t result = enableWdt();
 | 
			
		||||
      if (result != returnvalue::OK) {
 | 
			
		||||
        return result;
 | 
			
		||||
      }
 | 
			
		||||
      return EXECUTION_FINISHED;
 | 
			
		||||
    }
 | 
			
		||||
    case (ActionId::DISABLE): {
 | 
			
		||||
      ReturnValue_t result = disableWdt();
 | 
			
		||||
      if (result != returnvalue::OK) {
 | 
			
		||||
        return result;
 | 
			
		||||
      }
 | 
			
		||||
      return EXECUTION_FINISHED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return HasActionsIF::INVALID_ACTION_ID;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t XiphosWdtHandler::enableWdt() {
 | 
			
		||||
  int nowayout = 0;
 | 
			
		||||
  int status = 0;
 | 
			
		||||
  int retval = xsc_watchdog_get_status(&nowayout, &status);
 | 
			
		||||
  // If this fails for whatever reason, just try enabling in any case.
 | 
			
		||||
  if (retval != 0) {
 | 
			
		||||
    sif::warning << "XiphosWdtHandler: Getting WDT status failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  // Of course the enable API will fail if the device is already on, just perfect, love me some
 | 
			
		||||
  // good C API... :)))
 | 
			
		||||
  if (retval != 0 or status == 0) {
 | 
			
		||||
    retval = xsc_watchdog_enable(wdtHandle);
 | 
			
		||||
    if (retval != 0) {
 | 
			
		||||
      sif::error << "XiphosWdtHandler: Enabling WDT failed with code " << retval << ": "
 | 
			
		||||
                 << strerror(retval) << std::endl;
 | 
			
		||||
      return returnvalue::FAILED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  enabled = true;
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t XiphosWdtHandler::disableWdt() {
 | 
			
		||||
  int nowayout = 0;
 | 
			
		||||
  int status = 0;
 | 
			
		||||
  int retval = xsc_watchdog_get_status(&nowayout, &status);
 | 
			
		||||
  // If this fails for whatever reason, just try disabling in any case.
 | 
			
		||||
  if (retval != 0) {
 | 
			
		||||
    sif::warning << "XiphosWdtHandler: Getting WDT status failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  // Of course the disable API will fail if the device is already off, just perfect, love me some
 | 
			
		||||
  // good C API... :)))
 | 
			
		||||
  if (retval != 0 or status == 1) {
 | 
			
		||||
    retval = xsc_watchdog_disable(wdtHandle);
 | 
			
		||||
    if (retval != 0) {
 | 
			
		||||
      sif::error << "XiphosWdtHandler: Disabling WDT failed with code " << retval << ": "
 | 
			
		||||
                 << strerror(retval) << std::endl;
 | 
			
		||||
      return returnvalue::FAILED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  enabled = false;
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MessageQueueId_t XiphosWdtHandler::getCommandQueue() const { return requestQueue->getId(); }
 | 
			
		||||
							
								
								
									
										36
									
								
								bsp_q7s/core/XiphosWdtHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								bsp_q7s/core/XiphosWdtHandler.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#ifndef BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_
 | 
			
		||||
#define BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/action/HasActionsIF.h>
 | 
			
		||||
#include <fsfw/objectmanager/SystemObject.h>
 | 
			
		||||
#include <fsfw/tasks/ExecutableObjectIF.h>
 | 
			
		||||
#include <libxiphos.h>
 | 
			
		||||
 | 
			
		||||
class XiphosWdtHandler : public SystemObject, public ExecutableObjectIF, public HasActionsIF {
 | 
			
		||||
 public:
 | 
			
		||||
  enum ActionId { ENABLE = 0, DISABLE = 1 };
 | 
			
		||||
 | 
			
		||||
  XiphosWdtHandler(object_id_t objectId);
 | 
			
		||||
  ReturnValue_t performOperation(uint8_t opCode) override;
 | 
			
		||||
  ReturnValue_t initialize() override;
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
 | 
			
		||||
                              const uint8_t* data, size_t size) override;
 | 
			
		||||
  [[nodiscard]] virtual MessageQueueId_t getCommandQueue() const override;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // Wrappers to ensure idempotency of trash C API.
 | 
			
		||||
  ReturnValue_t enableWdt();
 | 
			
		||||
  ReturnValue_t disableWdt();
 | 
			
		||||
  // Timeout duration range specified by Xiphos: 0.001 seconds to 171 seconds. The libxiphos API
 | 
			
		||||
  // expects an int, so I guess this translates to 1 to 171 seconds.
 | 
			
		||||
  // WARNING: DO NOT SET THIS HIGHER THAN 80 SECONDS!
 | 
			
		||||
  // Possible bug in Xiphos/Xilinx kernel driver for watchdog, related to overflow.
 | 
			
		||||
  int timeoutSeconds = 80;
 | 
			
		||||
  bool enabled = false;
 | 
			
		||||
  struct watchdog_s* wdtHandle = nullptr;
 | 
			
		||||
  MessageQueueIF* requestQueue = nullptr;
 | 
			
		||||
  ActionHelper actionHelper;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_ */
 | 
			
		||||
@@ -1,10 +1,16 @@
 | 
			
		||||
#ifndef BSP_Q7S_CORE_COREDEFINITIONS_H_
 | 
			
		||||
#define BSP_Q7S_CORE_COREDEFINITIONS_H_
 | 
			
		||||
#ifndef BSP_Q7S_CORE_DEFS_H_
 | 
			
		||||
#define BSP_Q7S_CORE_DEFS_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
 | 
			
		||||
 | 
			
		||||
namespace core {
 | 
			
		||||
 | 
			
		||||
extern uint8_t FW_VERSION_MAJOR;
 | 
			
		||||
extern uint8_t FW_VERSION_MINOR;
 | 
			
		||||
extern uint8_t FW_VERSION_REVISION;
 | 
			
		||||
extern bool FW_VERSION_HAS_SHA;
 | 
			
		||||
extern char FW_VERSION_GIT_SHA[4];
 | 
			
		||||
 | 
			
		||||
static const uint8_t HK_SET_ENTRIES = 3;
 | 
			
		||||
static const uint32_t HK_SET_ID = 5;
 | 
			
		||||
 | 
			
		||||
@@ -36,4 +42,4 @@ class HkSet : public StaticLocalDataSet<HK_SET_ENTRIES> {
 | 
			
		||||
 | 
			
		||||
}  // namespace core
 | 
			
		||||
 | 
			
		||||
#endif /* BSP_Q7S_CORE_COREDEFINITIONS_H_ */
 | 
			
		||||
#endif /* BSP_Q7S_CORE_DEFS_H_ */
 | 
			
		||||
@@ -1,25 +1,27 @@
 | 
			
		||||
#include <bsp_q7s/callbacks/q7sGpioCallbacks.h>
 | 
			
		||||
#include <bsp_q7s/core/XiphosWdtHandler.h>
 | 
			
		||||
#include <bsp_q7s/objectFactory.h>
 | 
			
		||||
#include <dummies/ComCookieDummy.h>
 | 
			
		||||
#include <dummies/PcduHandlerDummy.h>
 | 
			
		||||
#include <fsfw/health/HealthTableIF.h>
 | 
			
		||||
#include <fsfw/power/DummyPowerSwitcher.h>
 | 
			
		||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/system/tree/system.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
#include <mission/system/systemTree.h>
 | 
			
		||||
#include <mission/utility/DummySdCardManager.h>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/core/CoreController.h"
 | 
			
		||||
#include "bsp_q7s/core/ObjectFactory.h"
 | 
			
		||||
#include "busConf.h"
 | 
			
		||||
#include "common/config/devices/addresses.h"
 | 
			
		||||
#include "devConf.h"
 | 
			
		||||
#include "dummies/helpers.h"
 | 
			
		||||
#include "dummies/helperFactory.h"
 | 
			
		||||
#include "eive/objects.h"
 | 
			
		||||
#include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h"
 | 
			
		||||
#include "linux/ObjectFactory.h"
 | 
			
		||||
#include "linux/callbacks/gpioCallbacks.h"
 | 
			
		||||
#include "mission/core/GenericFactory.h"
 | 
			
		||||
#include "mission/system/tree/comModeTree.h"
 | 
			
		||||
#include "mission/genericFactory.h"
 | 
			
		||||
#include "mission/system/com/comModeTree.h"
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::produce(void* args) {
 | 
			
		||||
  ObjectFactory::setStatics();
 | 
			
		||||
@@ -29,62 +31,107 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  StorageManagerIF* ipcStore = nullptr;
 | 
			
		||||
  StorageManagerIF* tmStore = nullptr;
 | 
			
		||||
 | 
			
		||||
  bool enableHkSets = false;
 | 
			
		||||
#if OBSW_ENABLE_PERIODIC_HK == 1
 | 
			
		||||
  enableHkSets = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PersistentTmStores stores;
 | 
			
		||||
  readFirmwareVersion();
 | 
			
		||||
  new XiphosWdtHandler(objects::XIPHOS_WDT);
 | 
			
		||||
  ObjectFactory::produceGenericObjects(&healthTable, &pusFunnel, &cfdpFunnel,
 | 
			
		||||
                                       *SdCardManager::instance(), &ipcStore, &tmStore, stores);
 | 
			
		||||
                                       *SdCardManager::instance(), &ipcStore, &tmStore, stores, 200,
 | 
			
		||||
                                       enableHkSets, true);
 | 
			
		||||
 | 
			
		||||
  LinuxLibgpioIF* gpioComIF = nullptr;
 | 
			
		||||
  SerialComIF* uartComIF = nullptr;
 | 
			
		||||
  SpiComIF* spiMainComIF = nullptr;
 | 
			
		||||
  I2cComIF* i2cComIF = nullptr;
 | 
			
		||||
  createCommunicationInterfaces(&gpioComIF, &uartComIF, &spiMainComIF, &i2cComIF);
 | 
			
		||||
  /* Adding gpios for chip select decoding to the gpioComIf */
 | 
			
		||||
  // Adding GPIOs for chip select decoding and initializing them.
 | 
			
		||||
  q7s::gpioCallbacks::initSpiCsDecoder(gpioComIF);
 | 
			
		||||
  gpioCallbacks::disableAllDecoder(gpioComIF);
 | 
			
		||||
  createPlI2cResetGpio(gpioComIF);
 | 
			
		||||
 | 
			
		||||
  // Hardware is usually not connected to EM, so we need to create dummies which replace lower
 | 
			
		||||
  // level components.
 | 
			
		||||
  dummy::DummyCfg dummyCfg;
 | 
			
		||||
  dummyCfg.addCoreCtrlCfg = false;
 | 
			
		||||
  dummyCfg.addCamSwitcherDummy = false;
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
  dummyCfg.addSyrlinksDummies = false;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1 || OBSW_ADD_PLOC_MPSOC == 1
 | 
			
		||||
  dummyCfg.addPlocDummies = false;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_TMP_DEVICES == 1
 | 
			
		||||
  std::vector<std::pair<object_id_t, address_t>> tmpDevsToAdd = {{
 | 
			
		||||
      {objects::TMP1075_HANDLER_PLPCDU_0, addresses::TMP1075_PLPCDU_0},
 | 
			
		||||
      {objects::TMP1075_HANDLER_PLPCDU_1, addresses::TMP1075_PLPCDU_1},
 | 
			
		||||
      {objects::TMP1075_HANDLER_IF_BOARD, addresses::TMP1075_IF_BOARD},
 | 
			
		||||
  }};
 | 
			
		||||
  createTmpComponents(tmpDevsToAdd);
 | 
			
		||||
  dummy::Tmp1075Cfg tmpCfg{};
 | 
			
		||||
  tmpCfg.addTcsBrd0 = true;
 | 
			
		||||
  tmpCfg.addTcsBrd1 = true;
 | 
			
		||||
  tmpCfg.addPlPcdu0 = false;
 | 
			
		||||
  tmpCfg.addPlPcdu1 = false;
 | 
			
		||||
  tmpCfg.addIfBrd = false;
 | 
			
		||||
  dummyCfg.tmp1075Cfg = tmpCfg;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_GOMSPACE_PCDU == 1
 | 
			
		||||
  dummyCfg.addPowerDummies = false;
 | 
			
		||||
  // The ACU broke.
 | 
			
		||||
  dummyCfg.addOnlyAcuDummy = true;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_STAR_TRACKER == 1
 | 
			
		||||
  dummyCfg.addStrDummy = false;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_SCEX_DEVICE == 0
 | 
			
		||||
  dummyCfg.addScexDummy = true;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_BPX_BATTERY_HANDLER == 1
 | 
			
		||||
  dummyCfg.addBpxBattDummy = false;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_ACS_BOARD == 1
 | 
			
		||||
  dummyCfg.addAcsBoardDummies = false;
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_PL_PCDU == 0
 | 
			
		||||
  dummyCfg.addPlPcduDummy = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PowerSwitchIF* pwrSwitcher = nullptr;
 | 
			
		||||
#if OBSW_ADD_GOMSPACE_PCDU == 0
 | 
			
		||||
  auto* comCookieDummy = new ComCookieDummy();
 | 
			
		||||
  pwrSwitcher = new PcduHandlerDummy(objects::PCDU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  pwrSwitcher = new PcduHandlerDummy(objects::PCDU_HANDLER);
 | 
			
		||||
#else
 | 
			
		||||
  createPcduComponents(gpioComIF, &pwrSwitcher);
 | 
			
		||||
  createPcduComponents(gpioComIF, &pwrSwitcher, enableHkSets);
 | 
			
		||||
#endif
 | 
			
		||||
  satsystem::EIVE_SYSTEM.setI2cRecoveryParams(pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
  dummy::createDummies(dummyCfg, *pwrSwitcher, gpioComIF);
 | 
			
		||||
  const char* battAndImtqI2cDev = q7s::I2C_PL_EIVE;
 | 
			
		||||
  if (core::FW_VERSION_MAJOR >= 4) {
 | 
			
		||||
    battAndImtqI2cDev = q7s::I2C_PS_EIVE;
 | 
			
		||||
  }
 | 
			
		||||
  static_cast<void>(battAndImtqI2cDev);
 | 
			
		||||
 | 
			
		||||
  new CoreController(objects::CORE_CONTROLLER);
 | 
			
		||||
#if OBSW_ADD_BPX_BATTERY_HANDLER == 1
 | 
			
		||||
  createBpxBatteryComponent(enableHkSets, battAndImtqI2cDev);
 | 
			
		||||
#endif
 | 
			
		||||
  createPowerController(true, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  // Regular FM code, does not work for EM if the hardware is not connected
 | 
			
		||||
  // createPcduComponents(gpioComIF, &pwrSwitcher);
 | 
			
		||||
  // createPlPcduComponents(gpioComIF, spiMainComIF, pwrSwitcher);
 | 
			
		||||
  // createSyrlinksComponents(pwrSwitcher);
 | 
			
		||||
  // createSunSensorComponents(gpioComIF, spiMainComIF, pwrSwitcher, q7s::SPI_DEFAULT_DEV);
 | 
			
		||||
  // createRtdComponents(q7s::SPI_DEFAULT_DEV, gpioComIF, pwrSwitcher, spiMainComIF);
 | 
			
		||||
  // createTmpComponents();
 | 
			
		||||
  // createSolarArrayDeploymentComponents();
 | 
			
		||||
  // createPayloadComponents(gpioComIF);
 | 
			
		||||
  // createHeaterComponents(gpioComIF, pwrSwitcher, healthTable);
 | 
			
		||||
  dummy::createDummies(dummyCfg, *pwrSwitcher, gpioComIF, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  // TODO: Careful! Switching this on somehow messes with the communication with the ProASIC
 | 
			
		||||
  //       and will cause xsc_boot_copy commands to always boot to 0 0
 | 
			
		||||
  // createRadSensorComponent(gpioComIF);
 | 
			
		||||
  new CoreController(objects::CORE_CONTROLLER, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  auto* stackHandler = new Stack5VHandler(*pwrSwitcher);
 | 
			
		||||
  static_cast<void>(stackHandler);
 | 
			
		||||
 | 
			
		||||
  // Initialize chip select to avoid SPI bus issues.
 | 
			
		||||
  createRadSensorChipSelect(gpioComIF);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_ACS_BOARD == 1
 | 
			
		||||
  createAcsBoardComponents(gpioComIF, uartComIF, *pwrSwitcher);
 | 
			
		||||
  createAcsBoardComponents(*spiMainComIF, gpioComIF, uartComIF, *pwrSwitcher, true,
 | 
			
		||||
                           adis1650x::Type::ADIS16507);
 | 
			
		||||
#else
 | 
			
		||||
  // Still add all GPIOs for EM.
 | 
			
		||||
  GpioCookie* acsBoardGpios = new GpioCookie();
 | 
			
		||||
@@ -93,7 +140,7 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_MGT == 1
 | 
			
		||||
  createImtqComponents(pwrSwitcher);
 | 
			
		||||
  createImtqComponents(pwrSwitcher, enableHkSets, battAndImtqI2cDev);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
@@ -104,36 +151,33 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  createReactionWheelComponents(gpioComIF, pwrSwitcher);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_BPX_BATTERY_HANDLER == 1
 | 
			
		||||
  createBpxBatteryComponent();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_STAR_TRACKER == 1
 | 
			
		||||
  createStrComponents(pwrSwitcher);
 | 
			
		||||
#endif /* OBSW_ADD_STAR_TRACKER == 1 */
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_PL_PCDU == 1
 | 
			
		||||
  createPlPcduComponents(gpioComIF, spiMainComIF, pwrSwitcher, *stackHandler);
 | 
			
		||||
#endif
 | 
			
		||||
  createPayloadComponents(gpioComIF, *pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_CCSDS_IP_CORES == 1
 | 
			
		||||
  CcsdsIpCoreHandler* ipCoreHandler = nullptr;
 | 
			
		||||
  CcsdsComponentArgs ccsdsArgs(*gpioComIF, *ipcStore, *tmStore, stores, *pusFunnel, *cfdpFunnel,
 | 
			
		||||
                               &ipCoreHandler);
 | 
			
		||||
  createCcsdsComponents(ccsdsArgs);
 | 
			
		||||
#if OBSW_TM_TO_PTME == 1
 | 
			
		||||
  if (ccsdsArgs.liveDestination != nullptr) {
 | 
			
		||||
    pusFunnel->addLiveDestination("VC0 LIVE TM", *ccsdsArgs.liveDestination, 0);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  createCcsdsIpComponentsAddTmRouting(ccsdsArgs);
 | 
			
		||||
#endif /* OBSW_ADD_CCSDS_IP_CORES == 1 */
 | 
			
		||||
 | 
			
		||||
  /* Test Task */
 | 
			
		||||
#if OBSW_ADD_TEST_CODE == 1
 | 
			
		||||
  createTestComponents(gpioComIF);
 | 
			
		||||
#endif /* OBSW_ADD_TEST_CODE == 1 */
 | 
			
		||||
#if OBSW_ADD_SCEX_DEVICE == 1
 | 
			
		||||
  createScexComponents(q7s::UART_SCEX_DEV, pwrSwitcher, *SdCardManager::instance(), false,
 | 
			
		||||
                       pcdu::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
 | 
			
		||||
                       power::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
 | 
			
		||||
#endif
 | 
			
		||||
  createAcsController(true);
 | 
			
		||||
  HeaterHandler* heaterHandler = nullptr;
 | 
			
		||||
  ObjectFactory::createGenericHeaterComponents(*gpioComIF, *pwrSwitcher, heaterHandler);
 | 
			
		||||
  createThermalController(*heaterHandler);
 | 
			
		||||
  satsystem::init();
 | 
			
		||||
  createAcsController(true, enableHkSets);
 | 
			
		||||
  HeaterHandler* heaterHandler;
 | 
			
		||||
  createHeaterComponents(gpioComIF, pwrSwitcher, healthTable, heaterHandler);
 | 
			
		||||
  createThermalController(*heaterHandler, true);
 | 
			
		||||
  satsystem::init(true);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,19 +1,23 @@
 | 
			
		||||
#include <bsp_q7s/callbacks/q7sGpioCallbacks.h>
 | 
			
		||||
#include <bsp_q7s/core/XiphosWdtHandler.h>
 | 
			
		||||
#include <bsp_q7s/objectFactory.h>
 | 
			
		||||
#include <devices/gpioIds.h>
 | 
			
		||||
#include <fsfw/storagemanager/LocalPool.h>
 | 
			
		||||
#include <fsfw/storagemanager/PoolManager.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
#include <mission/system/EiveSystem.h>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/core/CoreController.h"
 | 
			
		||||
#include "bsp_q7s/core/ObjectFactory.h"
 | 
			
		||||
#include "busConf.h"
 | 
			
		||||
#include "devConf.h"
 | 
			
		||||
#include "devices/addresses.h"
 | 
			
		||||
#include "eive/objects.h"
 | 
			
		||||
#include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h"
 | 
			
		||||
#include "linux/ObjectFactory.h"
 | 
			
		||||
#include "linux/callbacks/gpioCallbacks.h"
 | 
			
		||||
#include "mission/core/GenericFactory.h"
 | 
			
		||||
#include "mission/system/tree/system.h"
 | 
			
		||||
#include "mission/genericFactory.h"
 | 
			
		||||
#include "mission/system/systemTree.h"
 | 
			
		||||
#include "mission/tmtc/tmFilters.h"
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::produce(void* args) {
 | 
			
		||||
@@ -24,9 +28,17 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  StorageManagerIF* ipcStore = nullptr;
 | 
			
		||||
  StorageManagerIF* tmStore = nullptr;
 | 
			
		||||
 | 
			
		||||
  bool enableHkSets = false;
 | 
			
		||||
#if OBSW_ENABLE_PERIODIC_HK == 1
 | 
			
		||||
  enableHkSets = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PersistentTmStores stores;
 | 
			
		||||
  readFirmwareVersion();
 | 
			
		||||
  new XiphosWdtHandler(objects::XIPHOS_WDT);
 | 
			
		||||
  ObjectFactory::produceGenericObjects(&healthTable, &pusFunnel, &cfdpFunnel,
 | 
			
		||||
                                       *SdCardManager::instance(), &ipcStore, &tmStore, stores);
 | 
			
		||||
                                       *SdCardManager::instance(), &ipcStore, &tmStore, stores, 200,
 | 
			
		||||
                                       true, true);
 | 
			
		||||
 | 
			
		||||
  LinuxLibgpioIF* gpioComIF = nullptr;
 | 
			
		||||
  SerialComIF* uartComIF = nullptr;
 | 
			
		||||
@@ -37,9 +49,12 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  /* Adding gpios for chip select decoding to the gpioComIf */
 | 
			
		||||
  q7s::gpioCallbacks::initSpiCsDecoder(gpioComIF);
 | 
			
		||||
  gpioCallbacks::disableAllDecoder(gpioComIF);
 | 
			
		||||
  createPlI2cResetGpio(gpioComIF);
 | 
			
		||||
 | 
			
		||||
  new CoreController(objects::CORE_CONTROLLER, enableHkSets);
 | 
			
		||||
  createPcduComponents(gpioComIF, &pwrSwitcher, enableHkSets);
 | 
			
		||||
  satsystem::EIVE_SYSTEM.setI2cRecoveryParams(pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
  new CoreController(objects::CORE_CONTROLLER);
 | 
			
		||||
  createPcduComponents(gpioComIF, &pwrSwitcher);
 | 
			
		||||
  auto* stackHandler = new Stack5VHandler(*pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_RAD_SENSORS == 1
 | 
			
		||||
@@ -50,29 +65,48 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_ACS_BOARD == 1
 | 
			
		||||
  createAcsBoardComponents(*spiMainComIF, gpioComIF, uartComIF, *pwrSwitcher);
 | 
			
		||||
  createAcsBoardComponents(*spiMainComIF, gpioComIF, uartComIF, *pwrSwitcher, true,
 | 
			
		||||
                           adis1650x::Type::ADIS16505);
 | 
			
		||||
#endif
 | 
			
		||||
  HeaterHandler* heaterHandler;
 | 
			
		||||
  createHeaterComponents(gpioComIF, pwrSwitcher, healthTable, heaterHandler);
 | 
			
		||||
#if OBSW_ADD_TMP_DEVICES == 1
 | 
			
		||||
  createTmpComponents();
 | 
			
		||||
  std::vector<std::pair<object_id_t, address_t>> tmpDevsToAdd = {{
 | 
			
		||||
      {objects::TMP1075_HANDLER_TCS_0, addresses::TMP1075_TCS_0},
 | 
			
		||||
      {objects::TMP1075_HANDLER_TCS_1, addresses::TMP1075_TCS_1},
 | 
			
		||||
      {objects::TMP1075_HANDLER_PLPCDU_0, addresses::TMP1075_PLPCDU_0},
 | 
			
		||||
      // damaged
 | 
			
		||||
      // {objects::TMP1075_HANDLER_PLPCDU_1, addresses::TMP1075_PLPCDU_1},
 | 
			
		||||
      {objects::TMP1075_HANDLER_IF_BOARD, addresses::TMP1075_IF_BOARD},
 | 
			
		||||
  }};
 | 
			
		||||
 | 
			
		||||
  createTmpComponents(tmpDevsToAdd);
 | 
			
		||||
#endif
 | 
			
		||||
  createSolarArrayDeploymentComponents(*pwrSwitcher, *gpioComIF);
 | 
			
		||||
  createPlPcduComponents(gpioComIF, spiMainComIF, pwrSwitcher, *stackHandler);
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
  createSyrlinksComponents(pwrSwitcher);
 | 
			
		||||
#endif /* OBSW_ADD_SYRLINKS == 1 */
 | 
			
		||||
  createRtdComponents(q7s::SPI_DEFAULT_DEV, gpioComIF, pwrSwitcher, spiMainComIF);
 | 
			
		||||
  createPayloadComponents(gpioComIF, *pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
  const char* battAndImtqI2cDev = q7s::I2C_PL_EIVE;
 | 
			
		||||
  if (core::FW_VERSION_MAJOR >= 4) {
 | 
			
		||||
    battAndImtqI2cDev = q7s::I2C_PS_EIVE;
 | 
			
		||||
  }
 | 
			
		||||
#if OBSW_ADD_MGT == 1
 | 
			
		||||
  createImtqComponents(pwrSwitcher);
 | 
			
		||||
  createImtqComponents(pwrSwitcher, enableHkSets, battAndImtqI2cDev);
 | 
			
		||||
#endif
 | 
			
		||||
  createReactionWheelComponents(gpioComIF, pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_BPX_BATTERY_HANDLER == 1
 | 
			
		||||
  createBpxBatteryComponent();
 | 
			
		||||
  createBpxBatteryComponent(enableHkSets, battAndImtqI2cDev);
 | 
			
		||||
#endif
 | 
			
		||||
  createPowerController(true, enableHkSets);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_PL_PCDU == 1
 | 
			
		||||
  createPlPcduComponents(gpioComIF, spiMainComIF, pwrSwitcher, *stackHandler);
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
  createSyrlinksComponents(pwrSwitcher);
 | 
			
		||||
#endif /* OBSW_ADD_SYRLINKS == 1 */
 | 
			
		||||
 | 
			
		||||
  createRtdComponents(q7s::SPI_DEFAULT_DEV, gpioComIF, pwrSwitcher, spiMainComIF);
 | 
			
		||||
  createPayloadComponents(gpioComIF, *pwrSwitcher);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_STAR_TRACKER == 1
 | 
			
		||||
  createStrComponents(pwrSwitcher);
 | 
			
		||||
@@ -82,17 +116,12 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
  CcsdsIpCoreHandler* ipCoreHandler = nullptr;
 | 
			
		||||
  CcsdsComponentArgs ccsdsArgs(*gpioComIF, *ipcStore, *tmStore, stores, *pusFunnel, *cfdpFunnel,
 | 
			
		||||
                               &ipCoreHandler);
 | 
			
		||||
  createCcsdsComponents(ccsdsArgs);
 | 
			
		||||
#if OBSW_TM_TO_PTME == 1
 | 
			
		||||
  if (ccsdsArgs.liveDestination != nullptr) {
 | 
			
		||||
    pusFunnel->addLiveDestination("VC0 LIVE TM", *ccsdsArgs.liveDestination, 0);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  createCcsdsIpComponentsAddTmRouting(ccsdsArgs);
 | 
			
		||||
#endif /* OBSW_ADD_CCSDS_IP_CORES == 1 */
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_SCEX_DEVICE == 1
 | 
			
		||||
  createScexComponents(q7s::UART_SCEX_DEV, pwrSwitcher, *SdCardManager::instance(), false,
 | 
			
		||||
                       pcdu::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
 | 
			
		||||
                       power::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
 | 
			
		||||
#endif
 | 
			
		||||
  /* Test Task */
 | 
			
		||||
#if OBSW_ADD_TEST_CODE == 1
 | 
			
		||||
@@ -100,7 +129,7 @@ void ObjectFactory::produce(void* args) {
 | 
			
		||||
#endif /* OBSW_ADD_TEST_CODE == 1 */
 | 
			
		||||
 | 
			
		||||
  createMiscComponents();
 | 
			
		||||
  createThermalController(*heaterHandler);
 | 
			
		||||
  createAcsController(true);
 | 
			
		||||
  satsystem::init();
 | 
			
		||||
  createThermalController(*heaterHandler, false);
 | 
			
		||||
  createAcsController(true, enableHkSets);
 | 
			
		||||
  satsystem::init(false);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,6 @@ SdCardManager::SdCardManager() : SystemObject(objects::SDC_MANAGER), cmdExecutor
 | 
			
		||||
      sif::warning << "CoreController::sdCardInit: "
 | 
			
		||||
                      "Preferred SD card not set. Setting to 0"
 | 
			
		||||
                   << std::endl;
 | 
			
		||||
      setPreferredSdCard(sd::SdCard::SLOT_0);
 | 
			
		||||
      scratch::writeNumber(scratch::PREFERED_SDC_KEY, static_cast<uint8_t>(sd::SdCard::SLOT_0));
 | 
			
		||||
      prefSdRaw = sd::SdCard::SLOT_0;
 | 
			
		||||
 | 
			
		||||
@@ -126,13 +125,8 @@ ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard, bool doMountSdCar
 | 
			
		||||
  return mountSdCard(sdCard);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, bool doUnmountSdCard,
 | 
			
		||||
                                             SdStatePair* statusPair) {
 | 
			
		||||
  std::pair<sd::SdState, sd::SdState> active;
 | 
			
		||||
  ReturnValue_t result = getSdCardsStatus(active);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, SdStatePair& sdStates,
 | 
			
		||||
                                             bool doUnmountSdCard) {
 | 
			
		||||
  if (doUnmountSdCard) {
 | 
			
		||||
    if (not blocking) {
 | 
			
		||||
      sif::warning << "SdCardManager::switchOffSdCard: Two-step command but manager is"
 | 
			
		||||
@@ -148,17 +142,17 @@ ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, bool doUnmountSd
 | 
			
		||||
    return returnvalue::FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  if (sdCard == sd::SdCard::SLOT_0) {
 | 
			
		||||
    if (active.first == sd::SdState::OFF) {
 | 
			
		||||
    if (sdStates.first == sd::SdState::OFF) {
 | 
			
		||||
      return ALREADY_OFF;
 | 
			
		||||
    }
 | 
			
		||||
  } else if (sdCard == sd::SdCard::SLOT_1) {
 | 
			
		||||
    if (active.second == sd::SdState::OFF) {
 | 
			
		||||
    if (sdStates.second == sd::SdState::OFF) {
 | 
			
		||||
      return ALREADY_OFF;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (doUnmountSdCard) {
 | 
			
		||||
    result = unmountSdCard(sdCard);
 | 
			
		||||
    ReturnValue_t result = unmountSdCard(sdCard);
 | 
			
		||||
    if (result != returnvalue::OK) {
 | 
			
		||||
      return result;
 | 
			
		||||
    }
 | 
			
		||||
@@ -190,7 +184,7 @@ ReturnValue_t SdCardManager::setSdCardState(sd::SdCard sdCard, bool on) {
 | 
			
		||||
  command << "q7hw sd set " << sdstring << " " << statestring;
 | 
			
		||||
  cmdExecutor.load(command.str(), blocking, printCmdOutput);
 | 
			
		||||
  ReturnValue_t result = cmdExecutor.execute();
 | 
			
		||||
  if (blocking and result != returnvalue::OK) {
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::setSdCardState");
 | 
			
		||||
  }
 | 
			
		||||
  return result;
 | 
			
		||||
@@ -205,6 +199,7 @@ ReturnValue_t SdCardManager::getSdCardsStatus(SdStatePair& sdStates) {
 | 
			
		||||
ReturnValue_t SdCardManager::mountSdCard(sd::SdCard sdCard) {
 | 
			
		||||
  using namespace std;
 | 
			
		||||
  if (cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
 | 
			
		||||
    sif::warning << "SdCardManager::mountSdCard: Command still pending" << std::endl;
 | 
			
		||||
    return CommandExecutor::COMMAND_PENDING;
 | 
			
		||||
  }
 | 
			
		||||
  if (sdCard == sd::SdCard::BOTH) {
 | 
			
		||||
@@ -310,33 +305,6 @@ void SdCardManager::resetState() {
 | 
			
		||||
  currentOp = Operations::IDLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t SdCardManager::updateSdStatePair() {
 | 
			
		||||
  using namespace std;
 | 
			
		||||
 | 
			
		||||
  MutexGuard mg(sdLock, LOCK_TYPE, SD_LOCK_TIMEOUT, LOCK_CTX);
 | 
			
		||||
  std::error_code e;
 | 
			
		||||
  if (not filesystem::exists(SD_STATE_FILE, e)) {
 | 
			
		||||
    return STATUS_FILE_NEXISTS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Now the file should exist in any case. Still check whether it exists.
 | 
			
		||||
  fstream sdStatus(SD_STATE_FILE);
 | 
			
		||||
  if (not sdStatus.good()) {
 | 
			
		||||
    return STATUS_FILE_NEXISTS;
 | 
			
		||||
  }
 | 
			
		||||
  string line;
 | 
			
		||||
  uint8_t idx = 0;
 | 
			
		||||
  sd::SdCard currentSd = sd::SdCard::SLOT_0;
 | 
			
		||||
  // Process status file line by line
 | 
			
		||||
  while (std::getline(sdStatus, line)) {
 | 
			
		||||
    processSdStatusLine(line, idx, currentSd);
 | 
			
		||||
  }
 | 
			
		||||
  if (sdStates.first != sd::SdState::MOUNTED && sdStates.second != sd::SdState::MOUNTED) {
 | 
			
		||||
    sdCardActive = false;
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SdCardManager::processSdStatusLine(std::string& line, uint8_t& idx, sd::SdCard& currentSd) {
 | 
			
		||||
  using namespace std;
 | 
			
		||||
  istringstream iss(line);
 | 
			
		||||
@@ -363,6 +331,7 @@ void SdCardManager::processSdStatusLine(std::string& line, uint8_t& idx, sd::SdC
 | 
			
		||||
          sdStates.second = sd::SdState::ON;
 | 
			
		||||
        }
 | 
			
		||||
      } else if (word == "off") {
 | 
			
		||||
        MutexGuard mg(sdLock, LOCK_TYPE, SD_LOCK_TIMEOUT, LOCK_CTX);
 | 
			
		||||
        if (currentSd == sd::SdCard::SLOT_0) {
 | 
			
		||||
          sdStates.first = sd::SdState::OFF;
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -372,6 +341,7 @@ void SdCardManager::processSdStatusLine(std::string& line, uint8_t& idx, sd::SdC
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mountLine) {
 | 
			
		||||
      MutexGuard mg(sdLock, LOCK_TYPE, SD_LOCK_TIMEOUT, LOCK_CTX);
 | 
			
		||||
      if (currentSd == sd::SdCard::SLOT_0) {
 | 
			
		||||
        sdStates.first = sd::SdState::MOUNTED;
 | 
			
		||||
      } else {
 | 
			
		||||
@@ -407,18 +377,39 @@ ReturnValue_t SdCardManager::setPreferredSdCard(sd::SdCard sdCard) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t SdCardManager::updateSdCardStateFile() {
 | 
			
		||||
  using namespace std;
 | 
			
		||||
  if (cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
 | 
			
		||||
    return CommandExecutor::COMMAND_PENDING;
 | 
			
		||||
  }
 | 
			
		||||
  MutexGuard mg(sdLock, LOCK_TYPE, SD_LOCK_TIMEOUT, LOCK_CTX);
 | 
			
		||||
  // Use q7hw utility and pipe the command output into the state file
 | 
			
		||||
  std::string updateCmd = "q7hw sd info all > " + std::string(SD_STATE_FILE);
 | 
			
		||||
  cmdExecutor.load(updateCmd, true, printCmdOutput);
 | 
			
		||||
  ReturnValue_t result = cmdExecutor.execute();
 | 
			
		||||
  if (blocking and result != returnvalue::OK) {
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::mountSdCard");
 | 
			
		||||
  }
 | 
			
		||||
  return result;
 | 
			
		||||
 | 
			
		||||
  std::error_code e;
 | 
			
		||||
  if (not filesystem::exists(SD_STATE_FILE, e)) {
 | 
			
		||||
    return STATUS_FILE_NEXISTS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Now the file should exist in any case. Still check whether it exists.
 | 
			
		||||
  fstream sdStatus(SD_STATE_FILE);
 | 
			
		||||
  if (not sdStatus.good()) {
 | 
			
		||||
    return STATUS_FILE_NEXISTS;
 | 
			
		||||
  }
 | 
			
		||||
  string line;
 | 
			
		||||
  uint8_t idx = 0;
 | 
			
		||||
  sd::SdCard currentSd = sd::SdCard::SLOT_0;
 | 
			
		||||
  // Process status file line by line
 | 
			
		||||
  while (std::getline(sdStatus, line)) {
 | 
			
		||||
    processSdStatusLine(line, idx, currentSd);
 | 
			
		||||
  }
 | 
			
		||||
  if (sdStates.first != sd::SdState::MOUNTED && sdStates.second != sd::SdState::MOUNTED) {
 | 
			
		||||
    sdCardActive = false;
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* SdCardManager::getCurrentMountPrefix() const {
 | 
			
		||||
@@ -586,3 +577,8 @@ void SdCardManager::markUnusable() {
 | 
			
		||||
  MutexGuard mg(defaultLock, LOCK_TYPE, OTHER_TIMEOUT, LOCK_CTX);
 | 
			
		||||
  markedUnusable = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SdCardManager::markUsable() {
 | 
			
		||||
  MutexGuard mg(defaultLock, LOCK_TYPE, OTHER_TIMEOUT, LOCK_CTX);
 | 
			
		||||
  markedUnusable = false;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -114,18 +114,7 @@ class SdCardManager : public SystemObject, public SdCardMountedIF {
 | 
			
		||||
   * @return - returnvalue::OK on success, ALREADY_ON if it is already on,
 | 
			
		||||
   *           SYSTEM_CALL_ERROR on system error
 | 
			
		||||
   */
 | 
			
		||||
  ReturnValue_t switchOffSdCard(sd::SdCard sdCard, bool doUnmountSdCard = true,
 | 
			
		||||
                                SdStatePair* statusPair = nullptr);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Update the state file or creates one if it does not exist. You need to call this
 | 
			
		||||
   * function before calling #sdCardActive
 | 
			
		||||
   * @return
 | 
			
		||||
   *  - returnvalue::OK if the state file was updated successfully
 | 
			
		||||
   *  - CommandExecutor::COMMAND_PENDING: Non-blocking command is pending
 | 
			
		||||
   *  - returnvalue::FAILED: blocking command failed
 | 
			
		||||
   */
 | 
			
		||||
  ReturnValue_t updateSdCardStateFile();
 | 
			
		||||
  ReturnValue_t switchOffSdCard(sd::SdCard sdCard, SdStatePair& sdStates, bool doUnmountSdCard);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Get the state of the SD cards. If the state file does not exist, this function will
 | 
			
		||||
@@ -215,6 +204,7 @@ class SdCardManager : public SystemObject, public SdCardMountedIF {
 | 
			
		||||
  ReturnValue_t performFsck(sd::SdCard sdcard, bool printOutput, int& linuxError);
 | 
			
		||||
 | 
			
		||||
  void markUnusable();
 | 
			
		||||
  void markUsable();
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  CommandExecutor cmdExecutor;
 | 
			
		||||
@@ -228,13 +218,21 @@ class SdCardManager : public SystemObject, public SdCardMountedIF {
 | 
			
		||||
  MutexIF* prefLock = nullptr;
 | 
			
		||||
  MutexIF* defaultLock = nullptr;
 | 
			
		||||
  static constexpr MutexIF::TimeoutType LOCK_TYPE = MutexIF::TimeoutType::WAITING;
 | 
			
		||||
  static constexpr uint32_t SD_LOCK_TIMEOUT = 250;
 | 
			
		||||
  static constexpr uint32_t SD_LOCK_TIMEOUT = 100;
 | 
			
		||||
  static constexpr uint32_t OTHER_TIMEOUT = 20;
 | 
			
		||||
  static constexpr char LOCK_CTX[] = "SdCardManager";
 | 
			
		||||
 | 
			
		||||
  SdCardManager();
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t updateSdStatePair();
 | 
			
		||||
  /**
 | 
			
		||||
   * Update the state file or creates one if it does not exist. You need to call this
 | 
			
		||||
   * function before calling #sdCardActive
 | 
			
		||||
   * @return
 | 
			
		||||
   *  - returnvalue::OK if the state file was updated successfully
 | 
			
		||||
   *  - CommandExecutor::COMMAND_PENDING: Non-blocking command is pending
 | 
			
		||||
   *  - returnvalue::FAILED: blocking command failed
 | 
			
		||||
   */
 | 
			
		||||
  ReturnValue_t updateSdCardStateFile();
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t setSdCardState(sd::SdCard sdCard, bool on);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ namespace scratch {
 | 
			
		||||
 | 
			
		||||
static constexpr char PREFERED_SDC_KEY[] = "PREFSD";
 | 
			
		||||
static constexpr char ALLOC_FAILURE_COUNT[] = "ALLOCERR";
 | 
			
		||||
static constexpr char AUTO_SWITCH_IMAGE[] = "ASWI";
 | 
			
		||||
 | 
			
		||||
static constexpr uint8_t INTERFACE_ID = CLASS_ID::SCRATCH_BUFFER;
 | 
			
		||||
static constexpr ReturnValue_t KEY_NOT_FOUND = returnvalue::makeCode(INTERFACE_ID, 0);
 | 
			
		||||
@@ -76,7 +77,6 @@ ReturnValue_t readToFile(std::string name, std::ifstream& file, std::string& fil
 | 
			
		||||
  int result = std::system(oss.str().c_str());
 | 
			
		||||
  if (result != 0) {
 | 
			
		||||
    if (WEXITSTATUS(result) == 1) {
 | 
			
		||||
      sif::warning << "scratch::readToFile: Key " << name << " does not exist" << std::endl;
 | 
			
		||||
      // Could not find value
 | 
			
		||||
      std::remove(filename.c_str());
 | 
			
		||||
      return KEY_NOT_FOUND;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,40 @@
 | 
			
		||||
#include "ObjectFactory.h"
 | 
			
		||||
#include "objectFactory.h"
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/HealthDevice.h>
 | 
			
		||||
#include <fsfw/subsystem/Subsystem.h>
 | 
			
		||||
#include <linux/devices/AcsBoardPolling.h>
 | 
			
		||||
#include <linux/devices/ImtqPollingTask.h>
 | 
			
		||||
#include <linux/devices/RwPollingTask.h>
 | 
			
		||||
#include <mission/devices/GyrL3gCustomHandler.h>
 | 
			
		||||
#include <mission/devices/MgmLis3CustomHandler.h>
 | 
			
		||||
#include <mission/devices/MgmRm3100CustomHandler.h>
 | 
			
		||||
#include <mission/system/fdir/StrFdir.h>
 | 
			
		||||
#include <fsfw/tasks/TaskFactory.h>
 | 
			
		||||
#include <fsfw_hal/linux/uio/UioMapper.h>
 | 
			
		||||
#include <linux/acs/AcsBoardPolling.h>
 | 
			
		||||
#include <linux/acs/GpsHyperionLinuxController.h>
 | 
			
		||||
#include <linux/acs/ImtqPollingTask.h>
 | 
			
		||||
#include <linux/acs/RwPollingTask.h>
 | 
			
		||||
#include <linux/acs/StrComHandler.h>
 | 
			
		||||
#include <linux/com/SyrlinksComHandler.h>
 | 
			
		||||
#include <linux/payload/PlocMemoryDumper.h>
 | 
			
		||||
#include <linux/payload/PlocMpsocHandler.h>
 | 
			
		||||
#include <linux/payload/PlocMpsocSpecialComHelper.h>
 | 
			
		||||
#include <linux/payload/PlocSupervisorHandler.h>
 | 
			
		||||
#include <linux/payload/ScexUartReader.h>
 | 
			
		||||
#include <linux/payload/plocMpsocHelpers.h>
 | 
			
		||||
#include <linux/power/CspComIF.h>
 | 
			
		||||
#include <mission/acs/GyrL3gCustomHandler.h>
 | 
			
		||||
#include <mission/acs/MgmLis3CustomHandler.h>
 | 
			
		||||
#include <mission/acs/MgmRm3100CustomHandler.h>
 | 
			
		||||
#include <mission/acs/str/StarTrackerHandler.h>
 | 
			
		||||
#include <mission/acs/str/strHelpers.h>
 | 
			
		||||
#include <mission/com/LiveTmTask.h>
 | 
			
		||||
#include <mission/com/PersistentLogTmStoreTask.h>
 | 
			
		||||
#include <mission/com/PersistentSingleTmStoreTask.h>
 | 
			
		||||
#include <mission/power/CspCookie.h>
 | 
			
		||||
#include <mission/system/acs/ImtqAssembly.h>
 | 
			
		||||
#include <mission/system/acs/StrAssembly.h>
 | 
			
		||||
#include <mission/system/acs/StrFdir.h>
 | 
			
		||||
#include <mission/system/com/SyrlinksAssembly.h>
 | 
			
		||||
#include <mission/system/objects/CamSwitcher.h>
 | 
			
		||||
#include <mission/system/objects/ImtqAssembly.h>
 | 
			
		||||
#include <mission/system/objects/StrAssembly.h>
 | 
			
		||||
#include <mission/system/objects/SyrlinksAssembly.h>
 | 
			
		||||
#include <mission/tmtc/LiveTmTask.h>
 | 
			
		||||
#include <mission/tmtc/PersistentLogTmStoreTask.h>
 | 
			
		||||
#include <mission/tmtc/PersistentSingleTmStoreTask.h>
 | 
			
		||||
#include <mission/system/tcs/TmpDevFdir.h>
 | 
			
		||||
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/boardtest/Q7STestTask.h"
 | 
			
		||||
@@ -35,54 +55,56 @@
 | 
			
		||||
#include "linux/boardtest/SpiTestClass.h"
 | 
			
		||||
#include "linux/boardtest/UartTestClass.h"
 | 
			
		||||
#include "linux/callbacks/gpioCallbacks.h"
 | 
			
		||||
#include "linux/csp/CspComIF.h"
 | 
			
		||||
#include "linux/devices/GpsHyperionLinuxController.h"
 | 
			
		||||
#include "linux/devices/ScexUartReader.h"
 | 
			
		||||
#include "linux/devices/devicedefinitions/PlocMPSoCDefinitions.h"
 | 
			
		||||
#include "linux/devices/devicedefinitions/StarTrackerDefinitions.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocMPSoCHandler.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocMPSoCHelper.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocMemoryDumper.h"
 | 
			
		||||
#include "linux/devices/ploc/PlocSupervisorHandler.h"
 | 
			
		||||
#include "linux/devices/startracker/StarTrackerHandler.h"
 | 
			
		||||
#include "linux/devices/startracker/StrHelper.h"
 | 
			
		||||
#include "linux/ipcore/AxiPtmeConfig.h"
 | 
			
		||||
#include "linux/ipcore/PapbVcInterface.h"
 | 
			
		||||
#include "linux/ipcore/PdecHandler.h"
 | 
			
		||||
#include "linux/ipcore/Ptme.h"
 | 
			
		||||
#include "linux/ipcore/PtmeConfig.h"
 | 
			
		||||
#include "mission/config/configfile.h"
 | 
			
		||||
#include "mission/csp/CspCookie.h"
 | 
			
		||||
#include "mission/system/fdir/AcsBoardFdir.h"
 | 
			
		||||
#include "mission/system/fdir/GomspacePowerFdir.h"
 | 
			
		||||
#include "mission/system/fdir/RtdFdir.h"
 | 
			
		||||
#include "mission/system/fdir/SusFdir.h"
 | 
			
		||||
#include "mission/system/fdir/SyrlinksFdir.h"
 | 
			
		||||
#include "mission/system/objects/AcsSubsystem.h"
 | 
			
		||||
#include "mission/system/objects/RwAssembly.h"
 | 
			
		||||
#include "mission/system/objects/TcsBoardAssembly.h"
 | 
			
		||||
#include "mission/system/tree/acsModeTree.h"
 | 
			
		||||
#include "mission/system/tree/comModeTree.h"
 | 
			
		||||
#include "mission/system/acs/AcsBoardFdir.h"
 | 
			
		||||
#include "mission/system/acs/AcsSubsystem.h"
 | 
			
		||||
#include "mission/system/acs/RwAssembly.h"
 | 
			
		||||
#include "mission/system/acs/SusFdir.h"
 | 
			
		||||
#include "mission/system/acs/acsModeTree.h"
 | 
			
		||||
#include "mission/system/com/SyrlinksFdir.h"
 | 
			
		||||
#include "mission/system/com/comModeTree.h"
 | 
			
		||||
#include "mission/system/power/GomspacePowerFdir.h"
 | 
			
		||||
#include "mission/system/tcs/RtdFdir.h"
 | 
			
		||||
#include "mission/system/tcs/TcsBoardAssembly.h"
 | 
			
		||||
#include "mission/system/tcs/tcsModeTree.h"
 | 
			
		||||
#include "mission/system/tree/payloadModeTree.h"
 | 
			
		||||
#include "mission/system/tree/tcsModeTree.h"
 | 
			
		||||
#include "mission/tmtc/tmFilters.h"
 | 
			
		||||
#include "mission/utility/GlobalConfigHandler.h"
 | 
			
		||||
#include "tmtc/pusIds.h"
 | 
			
		||||
 | 
			
		||||
using gpio::Direction;
 | 
			
		||||
using gpio::Levels;
 | 
			
		||||
#if OBSW_TEST_LIBGPIOD == 1
 | 
			
		||||
#include "linux/boardtest/LibgpiodTest.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include <mission/devices/GyrAdis1650XHandler.h>
 | 
			
		||||
#include <mission/devices/ImtqHandler.h>
 | 
			
		||||
#include <mission/devices/PcduHandler.h>
 | 
			
		||||
#include <mission/devices/SyrlinksHandler.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/rwHelpers.h>
 | 
			
		||||
#include <mission/tmtc/VirtualChannelWithQueue.h>
 | 
			
		||||
#include <mission/SolarArrayDeploymentHandler.h>
 | 
			
		||||
#include <mission/acs/GyrAdis1650XHandler.h>
 | 
			
		||||
#include <mission/acs/ImtqHandler.h>
 | 
			
		||||
#include <mission/acs/rwHelpers.h>
 | 
			
		||||
#include <mission/com/SyrlinksHandler.h>
 | 
			
		||||
#include <mission/com/VirtualChannelWithQueue.h>
 | 
			
		||||
#include <mission/payload/PayloadPcduHandler.h>
 | 
			
		||||
#include <mission/payload/RadiationSensorHandler.h>
 | 
			
		||||
#include <mission/payload/payloadPcduDefinitions.h>
 | 
			
		||||
#include <mission/payload/radSensorDefinitions.h>
 | 
			
		||||
#include <mission/power/AcuHandler.h>
 | 
			
		||||
#include <mission/power/BpxBatteryHandler.h>
 | 
			
		||||
#include <mission/power/P60DockHandler.h>
 | 
			
		||||
#include <mission/power/PcduHandler.h>
 | 
			
		||||
#include <mission/power/Pdu1Handler.h>
 | 
			
		||||
#include <mission/power/Pdu2Handler.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
#include <mission/tcs/HeaterHandler.h>
 | 
			
		||||
#include <mission/tcs/Max31865Definitions.h>
 | 
			
		||||
#include <mission/tcs/Max31865PT1000Handler.h>
 | 
			
		||||
#include <mission/tcs/Tmp1075Handler.h>
 | 
			
		||||
 | 
			
		||||
#include <sstream>
 | 
			
		||||
 | 
			
		||||
#include "bsp_q7s/core/defs.h"
 | 
			
		||||
#include "fsfw/datapoollocal/LocalDataPoolManager.h"
 | 
			
		||||
#include "fsfw/tmtcpacket/pus/tm.h"
 | 
			
		||||
#include "fsfw/tmtcservices/CommandingServiceBase.h"
 | 
			
		||||
@@ -99,30 +121,25 @@ using gpio::Levels;
 | 
			
		||||
#include "fsfw_hal/linux/serial/SerialCookie.h"
 | 
			
		||||
#include "fsfw_hal/linux/spi/SpiComIF.h"
 | 
			
		||||
#include "fsfw_hal/linux/spi/SpiCookie.h"
 | 
			
		||||
#include "mission/core/GenericFactory.h"
 | 
			
		||||
#include "mission/devices/ACUHandler.h"
 | 
			
		||||
#include "mission/devices/BpxBatteryHandler.h"
 | 
			
		||||
#include "mission/devices/HeaterHandler.h"
 | 
			
		||||
#include "mission/devices/Max31865PT1000Handler.h"
 | 
			
		||||
#include "mission/devices/P60DockHandler.h"
 | 
			
		||||
#include "mission/devices/PDU1Handler.h"
 | 
			
		||||
#include "mission/devices/PDU2Handler.h"
 | 
			
		||||
#include "mission/devices/PayloadPcduHandler.h"
 | 
			
		||||
#include "mission/devices/RadiationSensorHandler.h"
 | 
			
		||||
#include "mission/devices/RwHandler.h"
 | 
			
		||||
#include "mission/devices/SolarArrayDeploymentHandler.h"
 | 
			
		||||
#include "mission/devices/Tmp1075Handler.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/Max31865Definitions.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/RadSensorDefinitions.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/SyrlinksDefinitions.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/payloadPcduDefinitions.h"
 | 
			
		||||
#include "mission/system/objects/AcsBoardAssembly.h"
 | 
			
		||||
#include "mission/tmtc/CcsdsIpCoreHandler.h"
 | 
			
		||||
#include "mission/acs/RwHandler.h"
 | 
			
		||||
#include "mission/com/CcsdsIpCoreHandler.h"
 | 
			
		||||
#include "mission/com/syrlinksDefs.h"
 | 
			
		||||
#include "mission/genericFactory.h"
 | 
			
		||||
#include "mission/system/acs/AcsBoardAssembly.h"
 | 
			
		||||
#include "mission/tmtc/TmFunnelHandler.h"
 | 
			
		||||
 | 
			
		||||
using gpio::Direction;
 | 
			
		||||
using gpio::Levels;
 | 
			
		||||
 | 
			
		||||
ResetArgs RESET_ARGS_GNSS;
 | 
			
		||||
std::atomic_bool LINK_STATE = CcsdsIpCoreHandler::LINK_DOWN;
 | 
			
		||||
std::atomic_bool PTME_LOCKED = false;
 | 
			
		||||
std::atomic_uint16_t signals::I2C_FATAL_ERRORS = 0;
 | 
			
		||||
uint8_t core::FW_VERSION_MAJOR = 0;
 | 
			
		||||
uint8_t core::FW_VERSION_MINOR = 0;
 | 
			
		||||
uint8_t core::FW_VERSION_REVISION = 0;
 | 
			
		||||
bool core::FW_VERSION_HAS_SHA = false;
 | 
			
		||||
char core::FW_VERSION_GIT_SHA[4] = {};
 | 
			
		||||
 | 
			
		||||
void Factory::setStaticFrameworkObjectIds() {
 | 
			
		||||
  PusServiceBase::PUS_DISTRIBUTOR = objects::PUS_PACKET_DISTRIBUTOR;
 | 
			
		||||
@@ -144,27 +161,23 @@ void Factory::setStaticFrameworkObjectIds() {
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::setStatics() { Factory::setStaticFrameworkObjectIds(); }
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createTmpComponents() {
 | 
			
		||||
  std::vector<std::pair<object_id_t, address_t>> tmpDevIds = {{
 | 
			
		||||
      {objects::TMP1075_HANDLER_TCS_0, addresses::TMP1075_TCS_0},
 | 
			
		||||
      {objects::TMP1075_HANDLER_TCS_1, addresses::TMP1075_TCS_1},
 | 
			
		||||
      {objects::TMP1075_HANDLER_PLPCDU_0, addresses::TMP1075_PLPCDU_0},
 | 
			
		||||
      // damaged
 | 
			
		||||
      // {objects::TMP1075_HANDLER_PLPCDU_1, addresses::TMP1075_PLPCDU_1},
 | 
			
		||||
      {objects::TMP1075_HANDLER_IF_BOARD, addresses::TMP1075_IF_BOARD},
 | 
			
		||||
  }};
 | 
			
		||||
void ObjectFactory::createTmpComponents(
 | 
			
		||||
    std::vector<std::pair<object_id_t, address_t>> tmpDevsToAdd) {
 | 
			
		||||
  const char* tmpI2cDev = q7s::I2C_PS_EIVE;
 | 
			
		||||
  if (core::FW_VERSION_MAJOR == 4) {
 | 
			
		||||
    tmpI2cDev = q7s::I2C_PL_EIVE;
 | 
			
		||||
  } else if (core::FW_VERSION_MAJOR >= 5) {
 | 
			
		||||
    tmpI2cDev = q7s::I2C_Q7_EIVE;
 | 
			
		||||
  }
 | 
			
		||||
  std::vector<I2cCookie*> tmpDevCookies;
 | 
			
		||||
 | 
			
		||||
  for (size_t idx = 0; idx < tmpDevIds.size(); idx++) {
 | 
			
		||||
  for (size_t idx = 0; idx < tmpDevsToAdd.size(); idx++) {
 | 
			
		||||
    tmpDevCookies.push_back(
 | 
			
		||||
        new I2cCookie(tmpDevIds[idx].second, TMP1075::MAX_REPLY_LENGTH, q7s::I2C_PS_EIVE));
 | 
			
		||||
        new I2cCookie(tmpDevsToAdd[idx].second, TMP1075::MAX_REPLY_LENGTH, tmpI2cDev));
 | 
			
		||||
    auto* tmpDevHandler =
 | 
			
		||||
        new Tmp1075Handler(tmpDevIds[idx].first, objects::I2C_COM_IF, tmpDevCookies[idx]);
 | 
			
		||||
        new Tmp1075Handler(tmpDevsToAdd[idx].first, objects::I2C_COM_IF, tmpDevCookies[idx]);
 | 
			
		||||
    tmpDevHandler->setCustomFdir(new TmpDevFdir(tmpDevsToAdd[idx].first));
 | 
			
		||||
    tmpDevHandler->connectModeTreeParent(satsystem::tcs::SUBSYSTEM);
 | 
			
		||||
    // TODO: Remove this after TCS subsystem was added
 | 
			
		||||
    // These devices are connected to the 3V3 stack and should be powered permanently. Therefore,
 | 
			
		||||
    // we set them to normal mode immediately here.
 | 
			
		||||
    tmpDevHandler->setModeNormal();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -178,35 +191,37 @@ void ObjectFactory::createCommunicationInterfaces(LinuxLibgpioIF** gpioComIF,
 | 
			
		||||
  *gpioComIF = new LinuxLibgpioIF(objects::GPIO_IF);
 | 
			
		||||
 | 
			
		||||
  /* Communication interfaces */
 | 
			
		||||
  new CspComIF(objects::CSP_COM_IF);
 | 
			
		||||
  new CspComIF(objects::CSP_COM_IF, "CSP_ROUTER", 60);
 | 
			
		||||
  *i2cComIF = new I2cComIF(objects::I2C_COM_IF);
 | 
			
		||||
  *uartComIF = new SerialComIF(objects::UART_COM_IF);
 | 
			
		||||
  *spiMainComIF = new SpiComIF(objects::SPI_MAIN_COM_IF, q7s::SPI_DEFAULT_DEV, **gpioComIF);
 | 
			
		||||
  //*spiRWComIF = new SpiComIF(objects::SPI_RW_COM_IF, q7s::SPI_RW_DEV, **gpioComIF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF** pwrSwitcher) {
 | 
			
		||||
void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF** pwrSwitcher,
 | 
			
		||||
                                         bool enableHkSets) {
 | 
			
		||||
  CspCookie* p60DockCspCookie = new CspCookie(P60Dock::MAX_REPLY_SIZE, addresses::P60DOCK, 500);
 | 
			
		||||
  CspCookie* pdu1CspCookie = new CspCookie(PDU::MAX_REPLY_SIZE, addresses::PDU1, 500);
 | 
			
		||||
  CspCookie* pdu2CspCookie = new CspCookie(PDU::MAX_REPLY_SIZE, addresses::PDU2, 500);
 | 
			
		||||
  CspCookie* acuCspCookie = new CspCookie(ACU::MAX_REPLY_SIZE, addresses::ACU, 500);
 | 
			
		||||
 | 
			
		||||
  auto p60Fdir = new GomspacePowerFdir(objects::P60DOCK_HANDLER);
 | 
			
		||||
  P60DockHandler* p60dockhandler =
 | 
			
		||||
      new P60DockHandler(objects::P60DOCK_HANDLER, objects::CSP_COM_IF, p60DockCspCookie, p60Fdir);
 | 
			
		||||
  P60DockHandler* p60dockhandler = new P60DockHandler(objects::P60DOCK_HANDLER, objects::CSP_COM_IF,
 | 
			
		||||
                                                      p60DockCspCookie, p60Fdir, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  auto pdu1Fdir = new GomspacePowerFdir(objects::PDU1_HANDLER);
 | 
			
		||||
  PDU1Handler* pdu1handler =
 | 
			
		||||
      new PDU1Handler(objects::PDU1_HANDLER, objects::CSP_COM_IF, pdu1CspCookie, pdu1Fdir);
 | 
			
		||||
  Pdu1Handler* pdu1handler = new Pdu1Handler(objects::PDU1_HANDLER, objects::CSP_COM_IF,
 | 
			
		||||
                                             pdu1CspCookie, pdu1Fdir, enableHkSets);
 | 
			
		||||
 | 
			
		||||
  auto pdu2Fdir = new GomspacePowerFdir(objects::PDU2_HANDLER);
 | 
			
		||||
  PDU2Handler* pdu2handler =
 | 
			
		||||
      new PDU2Handler(objects::PDU2_HANDLER, objects::CSP_COM_IF, pdu2CspCookie, pdu2Fdir);
 | 
			
		||||
  Pdu2Handler* pdu2handler = new Pdu2Handler(objects::PDU2_HANDLER, objects::CSP_COM_IF,
 | 
			
		||||
                                             pdu2CspCookie, pdu2Fdir, enableHkSets);
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_GOMSPACE_ACU == 1
 | 
			
		||||
  CspCookie* acuCspCookie = new CspCookie(ACU::MAX_REPLY_SIZE, addresses::ACU, 500);
 | 
			
		||||
  auto acuFdir = new GomspacePowerFdir(objects::ACU_HANDLER);
 | 
			
		||||
  ACUHandler* acuhandler =
 | 
			
		||||
      new ACUHandler(objects::ACU_HANDLER, objects::CSP_COM_IF, acuCspCookie, acuFdir);
 | 
			
		||||
  auto pcduHandler = new PCDUHandler(objects::PCDU_HANDLER, 50);
 | 
			
		||||
  ACUHandler* acuhandler = new ACUHandler(objects::ACU_HANDLER, objects::CSP_COM_IF, acuCspCookie,
 | 
			
		||||
                                          acuFdir, enableHkSets);
 | 
			
		||||
#endif
 | 
			
		||||
  auto pcduHandler = new PcduHandler(objects::PCDU_HANDLER, 50);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Setting PCDU devices to mode normal immediately after start up because PCDU is always
 | 
			
		||||
@@ -215,7 +230,9 @@ void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchI
 | 
			
		||||
  p60dockhandler->setModeNormal();
 | 
			
		||||
  pdu1handler->setModeNormal();
 | 
			
		||||
  pdu2handler->setModeNormal();
 | 
			
		||||
#if OBSW_ADD_GOMSPACE_ACU == 1
 | 
			
		||||
  acuhandler->setModeNormal();
 | 
			
		||||
#endif
 | 
			
		||||
  if (pwrSwitcher != nullptr) {
 | 
			
		||||
    *pwrSwitcher = pcduHandler;
 | 
			
		||||
  }
 | 
			
		||||
@@ -229,23 +246,10 @@ void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchI
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ObjectFactory::createRadSensorComponent(LinuxLibgpioIF* gpioComIF,
 | 
			
		||||
                                                      Stack5VHandler& stackHandler) {
 | 
			
		||||
  using namespace gpio;
 | 
			
		||||
  if (gpioComIF == nullptr) {
 | 
			
		||||
    return returnvalue::FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  GpioCookie* gpioCookieRadSensor = new GpioCookie;
 | 
			
		||||
  std::stringstream consumer;
 | 
			
		||||
  consumer << "0x" << std::hex << objects::RAD_SENSOR;
 | 
			
		||||
  GpiodRegularByLineName* gpio = new GpiodRegularByLineName(
 | 
			
		||||
      q7s::gpioNames::RAD_SENSOR_CHIP_SELECT, consumer.str(), Direction::OUT, Levels::HIGH);
 | 
			
		||||
  gpioCookieRadSensor->addGpio(gpioIds::CS_RAD_SENSOR, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::ENABLE_RADFET, consumer.str(), Direction::OUT,
 | 
			
		||||
                                    Levels::LOW);
 | 
			
		||||
  gpioCookieRadSensor->addGpio(gpioIds::ENABLE_RADFET, gpio);
 | 
			
		||||
  gpioChecker(gpioComIF->addGpios(gpioCookieRadSensor), "RAD sensor");
 | 
			
		||||
  createRadSensorChipSelect(gpioComIF);
 | 
			
		||||
 | 
			
		||||
  SpiCookie* spiCookieRadSensor =
 | 
			
		||||
      new SpiCookie(addresses::RAD_SENSOR, gpioIds::CS_RAD_SENSOR, RAD_SENSOR::READ_SIZE,
 | 
			
		||||
      new SpiCookie(addresses::RAD_SENSOR, gpioIds::CS_RAD_SENSOR, radSens::READ_SIZE,
 | 
			
		||||
                    spi::DEFAULT_MAX_1227_MODE, spi::DEFAULT_MAX_1227_SPEED);
 | 
			
		||||
  spiCookieRadSensor->setMutexParams(MutexIF::TimeoutType::WAITING, spi::RAD_SENSOR_CS_TIMEOUT);
 | 
			
		||||
  auto radSensor = new RadiationSensorHandler(objects::RAD_SENSOR, objects::SPI_MAIN_COM_IF,
 | 
			
		||||
@@ -355,7 +359,8 @@ void ObjectFactory::createAcsBoardGpios(GpioCookie& cookie) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF* gpioComIF,
 | 
			
		||||
                                             SerialComIF* uartComIF, PowerSwitchIF& pwrSwitcher) {
 | 
			
		||||
                                             SerialComIF* uartComIF, PowerSwitchIF& pwrSwitcher,
 | 
			
		||||
                                             bool enableHkSets, adis1650x::Type adisType) {
 | 
			
		||||
  using namespace gpio;
 | 
			
		||||
  GpioCookie* gpioCookieAcsBoard = new GpioCookie();
 | 
			
		||||
  createAcsBoardGpios(*gpioCookieAcsBoard);
 | 
			
		||||
@@ -441,9 +446,8 @@ void ObjectFactory::createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF*
 | 
			
		||||
      new SpiCookie(addresses::GYRO_0_ADIS, gpioIds::GYRO_0_ADIS_CS, adis1650x::MAXIMUM_REPLY_SIZE,
 | 
			
		||||
                    spi::DEFAULT_ADIS16507_MODE, spi::DEFAULT_ADIS16507_SPEED);
 | 
			
		||||
  spiCookie->setMutexParams(MutexIF::TimeoutType::WAITING, spi::ACS_BOARD_CS_TIMEOUT);
 | 
			
		||||
  auto adisHandler =
 | 
			
		||||
      new GyrAdis1650XHandler(objects::GYRO_0_ADIS_HANDLER, objects::ACS_BOARD_POLLING_TASK,
 | 
			
		||||
                              spiCookie, adis1650x::Type::ADIS16505);
 | 
			
		||||
  auto adisHandler = new GyrAdis1650XHandler(objects::GYRO_0_ADIS_HANDLER,
 | 
			
		||||
                                             objects::ACS_BOARD_POLLING_TASK, spiCookie, adisType);
 | 
			
		||||
  fdir = new AcsBoardFdir(objects::GYRO_0_ADIS_HANDLER);
 | 
			
		||||
  adisHandler->setCustomFdir(fdir);
 | 
			
		||||
  assemblyChildren[4] = adisHandler;
 | 
			
		||||
@@ -476,9 +480,8 @@ void ObjectFactory::createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF*
 | 
			
		||||
      new SpiCookie(addresses::GYRO_2_ADIS, gpioIds::GYRO_2_ADIS_CS, adis1650x::MAXIMUM_REPLY_SIZE,
 | 
			
		||||
                    spi::DEFAULT_ADIS16507_MODE, spi::DEFAULT_ADIS16507_SPEED);
 | 
			
		||||
  spiCookie->setMutexParams(MutexIF::TimeoutType::WAITING, spi::ACS_BOARD_CS_TIMEOUT);
 | 
			
		||||
  adisHandler =
 | 
			
		||||
      new GyrAdis1650XHandler(objects::GYRO_2_ADIS_HANDLER, objects::ACS_BOARD_POLLING_TASK,
 | 
			
		||||
                              spiCookie, adis1650x::Type::ADIS16505);
 | 
			
		||||
  adisHandler = new GyrAdis1650XHandler(objects::GYRO_2_ADIS_HANDLER,
 | 
			
		||||
                                        objects::ACS_BOARD_POLLING_TASK, spiCookie, adisType);
 | 
			
		||||
  fdir = new AcsBoardFdir(objects::GYRO_2_ADIS_HANDLER);
 | 
			
		||||
  adisHandler->setCustomFdir(fdir);
 | 
			
		||||
  assemblyChildren[6] = adisHandler;
 | 
			
		||||
@@ -508,9 +511,9 @@ void ObjectFactory::createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF*
 | 
			
		||||
  debugGps = true;
 | 
			
		||||
#endif
 | 
			
		||||
  RESET_ARGS_GNSS.gpioComIF = gpioComIF;
 | 
			
		||||
  RESET_ARGS_GNSS.waitPeriodMs = 100;
 | 
			
		||||
  auto gpsCtrl =
 | 
			
		||||
      new GpsHyperionLinuxController(objects::GPS_CONTROLLER, objects::NO_OBJECT, debugGps);
 | 
			
		||||
  RESET_ARGS_GNSS.waitPeriodMs = 5;
 | 
			
		||||
  auto gpsCtrl = new GpsHyperionLinuxController(objects::GPS_CONTROLLER, objects::NO_OBJECT,
 | 
			
		||||
                                                enableHkSets, debugGps);
 | 
			
		||||
  gpsCtrl->setResetPinTriggerFunction(gps::triggerGpioResetPin, &RESET_ARGS_GNSS);
 | 
			
		||||
 | 
			
		||||
  ObjectFactory::createAcsBoardAssy(pwrSwitcher, assemblyChildren, gpsCtrl, gpioComIF);
 | 
			
		||||
@@ -585,22 +588,23 @@ void ObjectFactory::createSolarArrayDeploymentComponents(PowerSwitchIF& pwrSwitc
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  new SolarArrayDeploymentHandler(objects::SOLAR_ARRAY_DEPL_HANDLER, gpioIF, pwrSwitcher,
 | 
			
		||||
                                  pcdu::Switches::PDU2_CH5_DEPLOYMENT_MECHANISM_8V,
 | 
			
		||||
                                  power::Switches::PDU2_CH5_DEPLOYMENT_MECHANISM_8V,
 | 
			
		||||
                                  gpioIds::DEPLSA1, gpioIds::DEPLSA2, *SdCardManager::instance());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createSyrlinksComponents(PowerSwitchIF* pwrSwitcher) {
 | 
			
		||||
  auto* syrlinksUartCookie =
 | 
			
		||||
      new SerialCookie(objects::SYRLINKS_HANDLER, q7s::UART_SYRLINKS_DEV, uart::SYRLINKS_BAUD,
 | 
			
		||||
      new SerialCookie(objects::SYRLINKS_HANDLER, q7s::UART_SYRLINKS_DEV, serial::SYRLINKS_BAUD,
 | 
			
		||||
                       syrlinks::MAX_REPLY_SIZE, UartModes::NON_CANONICAL);
 | 
			
		||||
  syrlinksUartCookie->setParityEven();
 | 
			
		||||
 | 
			
		||||
  new SyrlinksComHandler(objects::SYRLINKS_COM_HANDLER);
 | 
			
		||||
  auto* syrlinksAssy = new SyrlinksAssembly(objects::SYRLINKS_ASSY);
 | 
			
		||||
  syrlinksAssy->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
  auto syrlinksFdir = new SyrlinksFdir(objects::SYRLINKS_HANDLER);
 | 
			
		||||
  auto syrlinksHandler =
 | 
			
		||||
      new SyrlinksHandler(objects::SYRLINKS_HANDLER, objects::UART_COM_IF, syrlinksUartCookie,
 | 
			
		||||
                          pcdu::PDU1_CH1_SYRLINKS_12V, syrlinksFdir);
 | 
			
		||||
      new SyrlinksHandler(objects::SYRLINKS_HANDLER, objects::SYRLINKS_COM_HANDLER,
 | 
			
		||||
                          syrlinksUartCookie, power::PDU1_CH1_SYRLINKS_12V, syrlinksFdir);
 | 
			
		||||
  syrlinksHandler->setPowerSwitcher(pwrSwitcher);
 | 
			
		||||
  syrlinksHandler->connectModeTreeParent(*syrlinksAssy);
 | 
			
		||||
#if OBSW_DEBUG_SYRLINKS == 1
 | 
			
		||||
@@ -612,7 +616,7 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF, PowerSwit
 | 
			
		||||
  using namespace gpio;
 | 
			
		||||
  std::stringstream consumer;
 | 
			
		||||
  auto* camSwitcher =
 | 
			
		||||
      new CamSwitcher(objects::CAM_SWITCHER, pwrSwitch, pcdu::PDU2_CH8_PAYLOAD_CAMERA);
 | 
			
		||||
      new CamSwitcher(objects::CAM_SWITCHER, pwrSwitch, power::PDU2_CH8_PAYLOAD_CAMERA);
 | 
			
		||||
  camSwitcher->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
#if OBSW_ADD_PLOC_MPSOC == 1
 | 
			
		||||
  consumer << "0x" << std::hex << objects::PLOC_MPSOC_HANDLER;
 | 
			
		||||
@@ -622,11 +626,11 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF, PowerSwit
 | 
			
		||||
  mpsocGpioCookie->addGpio(gpioIds::ENABLE_MPSOC_UART, gpioConfigMPSoC);
 | 
			
		||||
  gpioChecker(gpioComIF->addGpios(mpsocGpioCookie), "PLOC MPSoC");
 | 
			
		||||
  auto mpsocCookie =
 | 
			
		||||
      new SerialCookie(objects::PLOC_MPSOC_HANDLER, q7s::UART_PLOC_MPSOC_DEV, uart::PLOC_MPSOC_BAUD,
 | 
			
		||||
                       mpsoc::MAX_REPLY_SIZE, UartModes::NON_CANONICAL);
 | 
			
		||||
      new SerialCookie(objects::PLOC_MPSOC_HANDLER, q7s::UART_PLOC_MPSOC_DEV,
 | 
			
		||||
                       serial::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE, UartModes::NON_CANONICAL);
 | 
			
		||||
  mpsocCookie->setNoFixedSizeReply();
 | 
			
		||||
  auto plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  auto* mpsocHandler = new PlocMPSoCHandler(
 | 
			
		||||
  auto plocMpsocHelper = new PlocMpsocSpecialComHelper(objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  auto* mpsocHandler = new PlocMpsocHandler(
 | 
			
		||||
      objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocCookie, plocMpsocHelper,
 | 
			
		||||
      Gpio(gpioIds::ENABLE_MPSOC_UART, gpioComIF), objects::PLOC_SUPERVISOR_HANDLER);
 | 
			
		||||
  mpsocHandler->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
@@ -638,14 +642,15 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF, PowerSwit
 | 
			
		||||
  auto supvGpioCookie = new GpioCookie;
 | 
			
		||||
  supvGpioCookie->addGpio(gpioIds::ENABLE_SUPV_UART, gpioConfigSupv);
 | 
			
		||||
  gpioComIF->addGpios(supvGpioCookie);
 | 
			
		||||
  auto supervisorCookie =
 | 
			
		||||
      new SerialCookie(objects::PLOC_SUPERVISOR_HANDLER, q7s::UART_PLOC_SUPERVSIOR_DEV,
 | 
			
		||||
                       uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20, UartModes::NON_CANONICAL);
 | 
			
		||||
  auto supervisorCookie = new SerialCookie(objects::PLOC_SUPERVISOR_HANDLER,
 | 
			
		||||
                                           q7s::UART_PLOC_SUPERVSIOR_DEV, serial::PLOC_SUPV_BAUD,
 | 
			
		||||
                                           supv::MAX_PACKET_SIZE * 20, UartModes::NON_CANONICAL);
 | 
			
		||||
  supervisorCookie->setNoFixedSizeReply();
 | 
			
		||||
  auto supvHelper = new PlocSupvUartManager(objects::PLOC_SUPERVISOR_HELPER);
 | 
			
		||||
  auto* supvHandler = new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, supervisorCookie,
 | 
			
		||||
                                                Gpio(gpioIds::ENABLE_SUPV_UART, gpioComIF),
 | 
			
		||||
                                                pcdu::PDU1_CH6_PLOC_12V, *supvHelper);
 | 
			
		||||
                                                power::PDU1_CH6_PLOC_12V, *supvHelper);
 | 
			
		||||
  supvHandler->setPowerSwitcher(&pwrSwitch);
 | 
			
		||||
  supvHandler->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
#endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */
 | 
			
		||||
  static_cast<void>(consumer);
 | 
			
		||||
@@ -722,7 +727,7 @@ void ObjectFactory::createReactionWheelComponents(LinuxLibgpioIF* gpioComIF,
 | 
			
		||||
    rws[idx] = rwHandler;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  createRwAssy(*pwrSwitcher, pcdu::Switches::PDU2_CH2_RW_5V, rws, rwIds);
 | 
			
		||||
  createRwAssy(*pwrSwitcher, power::Switches::PDU2_CH2_RW_5V, rws, rwIds);
 | 
			
		||||
#endif /* OBSW_ADD_RW == 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -731,36 +736,32 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) {
 | 
			
		||||
  // GPIO definitions of signals connected to the virtual channel interfaces of the PTME IP Core
 | 
			
		||||
  GpioCookie* gpioCookiePtmeIp = new GpioCookie;
 | 
			
		||||
  GpiodRegularByLineName* gpio = nullptr;
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC0, "PAPB VC0");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC0_PAPB_BUSY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC0, "PAPB VC0");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC0_PAPB_EMPTY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC1, "PAPB VC1");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC1_PAPB_BUSY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC1, "PAPB VC1");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC1_PAPB_EMPTY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC2, "PAPB VC2");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC2_PAPB_BUSY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC2, "PAPB VC2");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC2_PAPB_EMPTY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC3, "PAPB VC3");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC3_PAPB_BUSY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC3, "PAPB VC3");
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::VC3_PAPB_EMPTY, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::PTME_RESETN, "PTME RESETN",
 | 
			
		||||
                                    gpio::Direction::OUT, gpio::Levels::HIGH);
 | 
			
		||||
  gpioCookiePtmeIp->addGpio(gpioIds::PTME_RESETN, gpio);
 | 
			
		||||
  gpioChecker(args.gpioComIF.addGpios(gpioCookiePtmeIp), "PTME PAPB VCs");
 | 
			
		||||
 | 
			
		||||
  // Creating virtual channel interfaces
 | 
			
		||||
  VirtualChannelIF* vc0 =
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC0_PAPB_BUSY, gpioIds::VC0_PAPB_EMPTY,
 | 
			
		||||
                          q7s::UIO_PTME, q7s::uiomapids::PTME_VC0);
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC0_PAPB_EMPTY, q7s::UIO_PTME,
 | 
			
		||||
                          q7s::uiomapids::PTME_VC0, config::MAX_SPACEPACKET_TC_SIZE);
 | 
			
		||||
  VirtualChannelIF* vc1 =
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC1_PAPB_BUSY, gpioIds::VC1_PAPB_EMPTY,
 | 
			
		||||
                          q7s::UIO_PTME, q7s::uiomapids::PTME_VC1);
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC1_PAPB_EMPTY, q7s::UIO_PTME,
 | 
			
		||||
                          q7s::uiomapids::PTME_VC1, config::MAX_SPACEPACKET_TC_SIZE);
 | 
			
		||||
  VirtualChannelIF* vc2 =
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC2_PAPB_BUSY, gpioIds::VC2_PAPB_EMPTY,
 | 
			
		||||
                          q7s::UIO_PTME, q7s::uiomapids::PTME_VC2);
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC2_PAPB_EMPTY, q7s::UIO_PTME,
 | 
			
		||||
                          q7s::uiomapids::PTME_VC2, config::MAX_SPACEPACKET_TC_SIZE);
 | 
			
		||||
  VirtualChannelIF* vc3 =
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC3_PAPB_BUSY, gpioIds::VC3_PAPB_EMPTY,
 | 
			
		||||
                          q7s::UIO_PTME, q7s::uiomapids::PTME_VC3);
 | 
			
		||||
      new PapbVcInterface(&args.gpioComIF, gpioIds::VC3_PAPB_EMPTY, q7s::UIO_PTME,
 | 
			
		||||
                          q7s::uiomapids::PTME_VC3, config::MAX_SPACEPACKET_TC_SIZE);
 | 
			
		||||
  // Creating ptme object and adding virtual channel interfaces
 | 
			
		||||
  Ptme* ptme = new Ptme(objects::PTME);
 | 
			
		||||
  ptme->addVcInterface(ccsds::VC0, vc0);
 | 
			
		||||
@@ -771,36 +772,50 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) {
 | 
			
		||||
      new AxiPtmeConfig(objects::AXI_PTME_CONFIG, q7s::UIO_PTME, q7s::uiomapids::PTME_CONFIG);
 | 
			
		||||
  PtmeConfig* ptmeConfig = new PtmeConfig(objects::PTME_CONFIG, axiPtmeConfig);
 | 
			
		||||
 | 
			
		||||
  *args.ipCoreHandler = new CcsdsIpCoreHandler(
 | 
			
		||||
      objects::CCSDS_HANDLER, objects::CCSDS_PACKET_DISTRIBUTOR, *ptmeConfig, LINK_STATE,
 | 
			
		||||
      &args.gpioComIF, gpioIds::RS485_EN_TX_CLOCK, gpioIds::RS485_EN_TX_DATA);
 | 
			
		||||
  PtmeGpios gpios;
 | 
			
		||||
  gpios.enableTxClock = gpioIds::RS485_EN_TX_CLOCK;
 | 
			
		||||
  gpios.enableTxData = gpioIds::RS485_EN_TX_DATA;
 | 
			
		||||
  gpios.ptmeResetn = gpioIds::PTME_RESETN;
 | 
			
		||||
 | 
			
		||||
  *args.ipCoreHandler =
 | 
			
		||||
      new CcsdsIpCoreHandler(objects::CCSDS_HANDLER, objects::CCSDS_PACKET_DISTRIBUTOR, *ptmeConfig,
 | 
			
		||||
                             LINK_STATE, &args.gpioComIF, gpios, PTME_LOCKED);
 | 
			
		||||
  // This VC will receive all live TM
 | 
			
		||||
  auto* vcWithQueue =
 | 
			
		||||
      new VirtualChannelWithQueue(objects::PTME_VC0_LIVE_TM, ccsds::VC0, "PTME VC0 LIVE TM", *ptme,
 | 
			
		||||
                                  LINK_STATE, args.tmStore, 500);
 | 
			
		||||
  args.liveDestination = vcWithQueue;
 | 
			
		||||
  new LiveTmTask(objects::LIVE_TM_TASK, args.pusFunnel, args.cfdpFunnel, *vcWithQueue);
 | 
			
		||||
  auto* vcWithQueue = new VirtualChannel(objects::PTME_VC0_LIVE_TM, ccsds::VC0, "PTME VC0 LIVE TM",
 | 
			
		||||
                                         *ptme, LINK_STATE);
 | 
			
		||||
  auto* liveTask = new LiveTmTask(objects::LIVE_TM_TASK, args.pusFunnel, args.cfdpFunnel,
 | 
			
		||||
                                  *vcWithQueue, PTME_LOCKED, config::LIVE_CHANNEL_NORMAL_QUEUE_SIZE,
 | 
			
		||||
                                  config::LIVE_CHANNEL_CFDP_QUEUE_SIZE);
 | 
			
		||||
  args.normalLiveTmDest = liveTask->getNormalLiveQueueId();
 | 
			
		||||
  args.cfdpLiveTmDest = liveTask->getCfdpLiveQueueId();
 | 
			
		||||
  liveTask->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
 | 
			
		||||
  // Set up log store.
 | 
			
		||||
  auto* vc = new VirtualChannel(objects::PTME_VC1_LOG_TM, ccsds::VC1, "PTME VC1 LOG TM", *ptme,
 | 
			
		||||
                                LINK_STATE);
 | 
			
		||||
  LogStores logStores(args.stores);
 | 
			
		||||
  // Core task which handles the LOG store and takes care of dumping it as TM using a VC directly
 | 
			
		||||
  new PersistentLogTmStoreTask(objects::LOG_STORE_AND_TM_TASK, args.ipcStore, logStores, *vc,
 | 
			
		||||
                               *SdCardManager::instance());
 | 
			
		||||
  auto* logStore =
 | 
			
		||||
      new PersistentLogTmStoreTask(objects::LOG_STORE_AND_TM_TASK, args.ipcStore, logStores, *vc,
 | 
			
		||||
                                   *SdCardManager::instance(), PTME_LOCKED);
 | 
			
		||||
  logStore->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
 | 
			
		||||
  vc = new VirtualChannel(objects::PTME_VC2_HK_TM, ccsds::VC2, "PTME VC2 HK TM", *ptme, LINK_STATE);
 | 
			
		||||
  // Core task which handles the HK store and takes care of dumping it as TM using a VC directly
 | 
			
		||||
  new PersistentSingleTmStoreTask(objects::HK_STORE_AND_TM_TASK, args.ipcStore,
 | 
			
		||||
                                  *args.stores.hkStore, *vc, persTmStore::DUMP_HK_STORE_DONE,
 | 
			
		||||
                                  *SdCardManager::instance());
 | 
			
		||||
  auto* hkStore = new PersistentSingleTmStoreTask(
 | 
			
		||||
      objects::HK_STORE_AND_TM_TASK, args.ipcStore, *args.stores.hkStore, *vc,
 | 
			
		||||
      persTmStore::DUMP_HK_STORE_DONE, persTmStore::DUMP_HK_CANCELLED, *SdCardManager::instance(),
 | 
			
		||||
      PTME_LOCKED);
 | 
			
		||||
  hkStore->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
 | 
			
		||||
  vc = new VirtualChannel(objects::PTME_VC3_CFDP_TM, ccsds::VC3, "PTME VC3 CFDP TM", *ptme,
 | 
			
		||||
                          LINK_STATE);
 | 
			
		||||
  // Core task which handles the CFDP store and takes care of dumping it as TM using a VC directly
 | 
			
		||||
  new PersistentSingleTmStoreTask(objects::CFDP_STORE_AND_TM_TASK, args.ipcStore,
 | 
			
		||||
                                  *args.stores.cfdpStore, *vc, persTmStore::DUMP_CFDP_STORE_DONE,
 | 
			
		||||
                                  *SdCardManager::instance());
 | 
			
		||||
  auto* cfdpTask = new PersistentSingleTmStoreTask(
 | 
			
		||||
      objects::CFDP_STORE_AND_TM_TASK, args.ipcStore, *args.stores.cfdpStore, *vc,
 | 
			
		||||
      persTmStore::DUMP_CFDP_STORE_DONE, persTmStore::DUMP_CFDP_CANCELLED,
 | 
			
		||||
      *SdCardManager::instance(), PTME_LOCKED);
 | 
			
		||||
  cfdpTask->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t result = (*args.ipCoreHandler)->connectModeTreeParent(satsystem::com::SUBSYSTEM);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
@@ -892,8 +907,6 @@ void ObjectFactory::createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF*
 | 
			
		||||
      new PayloadPcduHandler(objects::PLPCDU_HANDLER, objects::SPI_MAIN_COM_IF, spiCookie,
 | 
			
		||||
                             gpioComIF, SdCardManager::instance(), stackHandler, false);
 | 
			
		||||
  spiCookie->setCallbackMode(PayloadPcduHandler::extConvAsTwoCallback, plPcduHandler);
 | 
			
		||||
//  plPcduHandler->enablePeriodicPrintout(true, 5);
 | 
			
		||||
//  static_cast<void>(plPcduHandler);
 | 
			
		||||
#if OBSW_TEST_PL_PCDU == 1
 | 
			
		||||
  plPcduHandler->setStartUpImmediately();
 | 
			
		||||
#endif
 | 
			
		||||
@@ -922,41 +935,33 @@ void ObjectFactory::createStrComponents(PowerSwitchIF* pwrSwitcher) {
 | 
			
		||||
  auto* strAssy = new StrAssembly(objects::STR_ASSY);
 | 
			
		||||
  strAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
 | 
			
		||||
  auto* starTrackerCookie =
 | 
			
		||||
      new SerialCookie(objects::STAR_TRACKER, q7s::UART_STAR_TRACKER_DEV, uart::STAR_TRACKER_BAUD,
 | 
			
		||||
      new SerialCookie(objects::STAR_TRACKER, q7s::UART_STAR_TRACKER_DEV, serial::STAR_TRACKER_BAUD,
 | 
			
		||||
                       startracker::MAX_FRAME_SIZE * 2 + 2, UartModes::NON_CANONICAL);
 | 
			
		||||
  starTrackerCookie->setNoFixedSizeReply();
 | 
			
		||||
  StrHelper* strHelper = new StrHelper(objects::STR_HELPER);
 | 
			
		||||
  StrComHandler* strComIF = new StrComHandler(objects::STR_COM_IF);
 | 
			
		||||
 | 
			
		||||
  const char* paramJsonFile = nullptr;
 | 
			
		||||
#ifdef EGSE
 | 
			
		||||
  paramJsonFile = "/home/pi/arcsec/json/flight-config.json";
 | 
			
		||||
#else
 | 
			
		||||
#if OBSW_STAR_TRACKER_GROUND_CONFIG == 1
 | 
			
		||||
  paramJsonFile = "/mnt/sd0/startracker/ground-config.json";
 | 
			
		||||
#else
 | 
			
		||||
  paramJsonFile = "/mnt/sd0/startracker/flight-config.json";
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  const char* paramJsonFile = "/mnt/sd0/startracker/flight-config.json";
 | 
			
		||||
  if (paramJsonFile == nullptr) {
 | 
			
		||||
    sif::error << "No valid Star Tracker parameter JSON file" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  auto strFdir = new StrFdir(objects::STAR_TRACKER);
 | 
			
		||||
  auto starTracker =
 | 
			
		||||
      new StarTrackerHandler(objects::STAR_TRACKER, objects::UART_COM_IF, starTrackerCookie,
 | 
			
		||||
                             paramJsonFile, strHelper, pcdu::PDU1_CH2_STAR_TRACKER_5V);
 | 
			
		||||
      new StarTrackerHandler(objects::STAR_TRACKER, objects::STR_COM_IF, starTrackerCookie,
 | 
			
		||||
                             paramJsonFile, strComIF, power::PDU1_CH2_STAR_TRACKER_5V);
 | 
			
		||||
  starTracker->setPowerSwitcher(pwrSwitcher);
 | 
			
		||||
  starTracker->connectModeTreeParent(*strAssy);
 | 
			
		||||
  starTracker->setCustomFdir(strFdir);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createImtqComponents(PowerSwitchIF* pwrSwitcher) {
 | 
			
		||||
void ObjectFactory::createImtqComponents(PowerSwitchIF* pwrSwitcher, bool enableHkSets,
 | 
			
		||||
                                         const char* i2cDev) {
 | 
			
		||||
  auto* imtqAssy = new ImtqAssembly(objects::IMTQ_ASSY);
 | 
			
		||||
  imtqAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
 | 
			
		||||
 | 
			
		||||
  new ImtqPollingTask(objects::IMTQ_POLLING);
 | 
			
		||||
  I2cCookie* imtqI2cCookie = new I2cCookie(addresses::IMTQ, imtq::MAX_REPLY_SIZE, q7s::I2C_PL_EIVE);
 | 
			
		||||
  new ImtqPollingTask(objects::IMTQ_POLLING, signals::I2C_FATAL_ERRORS);
 | 
			
		||||
  I2cCookie* imtqI2cCookie = new I2cCookie(addresses::IMTQ, imtq::MAX_REPLY_SIZE, i2cDev);
 | 
			
		||||
  auto imtqHandler = new ImtqHandler(objects::IMTQ_HANDLER, objects::IMTQ_POLLING, imtqI2cCookie,
 | 
			
		||||
                                     pcdu::Switches::PDU1_CH3_MGT_5V);
 | 
			
		||||
                                     power::Switches::PDU1_CH3_MGT_5V, enableHkSets);
 | 
			
		||||
  imtqHandler->enableThermalModule(ThermalStateCfg());
 | 
			
		||||
  imtqHandler->setPowerSwitcher(pwrSwitcher);
 | 
			
		||||
  imtqHandler->connectModeTreeParent(*imtqAssy);
 | 
			
		||||
@@ -970,10 +975,10 @@ void ObjectFactory::createImtqComponents(PowerSwitchIF* pwrSwitcher) {
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createBpxBatteryComponent() {
 | 
			
		||||
  I2cCookie* bpxI2cCookie = new I2cCookie(addresses::BPX_BATTERY, 100, q7s::I2C_PL_EIVE);
 | 
			
		||||
  BpxBatteryHandler* bpxHandler =
 | 
			
		||||
      new BpxBatteryHandler(objects::BPX_BATT_HANDLER, objects::I2C_COM_IF, bpxI2cCookie);
 | 
			
		||||
void ObjectFactory::createBpxBatteryComponent(bool enableHkSets, const char* i2cDev) {
 | 
			
		||||
  I2cCookie* bpxI2cCookie = new I2cCookie(addresses::BPX_BATTERY, 100, i2cDev);
 | 
			
		||||
  BpxBatteryHandler* bpxHandler = new BpxBatteryHandler(
 | 
			
		||||
      objects::BPX_BATT_HANDLER, objects::I2C_COM_IF, bpxI2cCookie, enableHkSets);
 | 
			
		||||
  bpxHandler->setStartUpImmediately();
 | 
			
		||||
  bpxHandler->setToGoToNormalMode(true);
 | 
			
		||||
#if OBSW_DEBUG_BPX_BATT == 1
 | 
			
		||||
@@ -992,3 +997,81 @@ void ObjectFactory::testAcsBrdAss(AcsBoardAssembly* acsAss) {
 | 
			
		||||
    sif::warning << "Sending mode command failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createRadSensorChipSelect(LinuxLibgpioIF* gpioIF) {
 | 
			
		||||
  using namespace gpio;
 | 
			
		||||
  if (gpioIF == nullptr) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  GpioCookie* gpioCookieRadSensor = new GpioCookie;
 | 
			
		||||
  std::stringstream consumer;
 | 
			
		||||
  consumer << "0x" << std::hex << objects::RAD_SENSOR;
 | 
			
		||||
  GpiodRegularByLineName* gpio = new GpiodRegularByLineName(
 | 
			
		||||
      q7s::gpioNames::RAD_SENSOR_CHIP_SELECT, consumer.str(), Direction::OUT, Levels::HIGH);
 | 
			
		||||
  gpioCookieRadSensor->addGpio(gpioIds::CS_RAD_SENSOR, gpio);
 | 
			
		||||
  gpio = new GpiodRegularByLineName(q7s::gpioNames::ENABLE_RADFET, consumer.str(), Direction::OUT,
 | 
			
		||||
                                    Levels::LOW);
 | 
			
		||||
  gpioCookieRadSensor->addGpio(gpioIds::ENABLE_RADFET, gpio);
 | 
			
		||||
  gpioChecker(gpioIF->addGpios(gpioCookieRadSensor), "RAD sensor");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjectFactory::createPlI2cResetGpio(LinuxLibgpioIF* gpioIF) {
 | 
			
		||||
  using namespace gpio;
 | 
			
		||||
  if (common::OBSW_VERSION_MAJOR >= 6 or common::OBSW_VERSION_MAJOR == 4) {
 | 
			
		||||
    if (gpioIF == nullptr) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    GpioCookie* gpioI2cResetnCookie = new GpioCookie;
 | 
			
		||||
    GpiodRegularByLineName* gpioI2cResetn = new GpiodRegularByLineName(
 | 
			
		||||
        q7s::gpioNames::PL_I2C_ARESETN, "PL_I2C_ARESETN", Direction::OUT, Levels::HIGH);
 | 
			
		||||
    gpioI2cResetnCookie->addGpio(gpioIds::PL_I2C_ARESETN, gpioI2cResetn);
 | 
			
		||||
    gpioChecker(gpioIF->addGpios(gpioI2cResetnCookie), "PL I2C ARESETN");
 | 
			
		||||
    // Reset I2C explicitely again.
 | 
			
		||||
    gpioIF->pullLow(gpioIds::PL_I2C_ARESETN);
 | 
			
		||||
    TaskFactory::delayTask(1);
 | 
			
		||||
    gpioIF->pullHigh(gpioIds::PL_I2C_ARESETN);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ObjectFactory::readFirmwareVersion() {
 | 
			
		||||
  uint32_t* mappedSysRomAddr = nullptr;
 | 
			
		||||
  // The SYS ROM FPGA block is only available in those versions.
 | 
			
		||||
  if (not(common::OBSW_VERSION_MAJOR >= 6) or (common::OBSW_VERSION_MAJOR == 4)) {
 | 
			
		||||
    return returnvalue::OK;
 | 
			
		||||
  }
 | 
			
		||||
  // This has to come before the version announce because it might be required for retrieving
 | 
			
		||||
  // the firmware version.
 | 
			
		||||
  UioMapper sysRomMapper(q7s::UIO_SYS_ROM);
 | 
			
		||||
  ReturnValue_t result =
 | 
			
		||||
      sysRomMapper.getMappedAdress(&mappedSysRomAddr, UioMapper::Permissions::READ_ONLY);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "Getting mapped SYS ROM UIO address failed" << std::endl;
 | 
			
		||||
    return returnvalue::FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  if (mappedSysRomAddr != nullptr) {
 | 
			
		||||
    uint32_t firstEntry = *(reinterpret_cast<uint32_t*>(mappedSysRomAddr));
 | 
			
		||||
    uint32_t secondEntry = *(reinterpret_cast<uint32_t*>(mappedSysRomAddr) + 1);
 | 
			
		||||
    core::FW_VERSION_MAJOR = (firstEntry >> 24) & 0xff;
 | 
			
		||||
    core::FW_VERSION_MINOR = (firstEntry >> 16) & 0xff;
 | 
			
		||||
    core::FW_VERSION_REVISION = (firstEntry >> 8) & 0xff;
 | 
			
		||||
    bool hasGitSha = (firstEntry & 0x0b1);
 | 
			
		||||
    if (hasGitSha) {
 | 
			
		||||
      std::memcpy(core::FW_VERSION_GIT_SHA, &secondEntry, 4);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ObjectFactory::createCcsdsIpComponentsAddTmRouting(CcsdsComponentArgs& ccsdsArgs) {
 | 
			
		||||
  ReturnValue_t result = createCcsdsComponents(ccsdsArgs);
 | 
			
		||||
#if OBSW_TM_TO_PTME == 1
 | 
			
		||||
  if (ccsdsArgs.normalLiveTmDest != MessageQueueIF::NO_QUEUE) {
 | 
			
		||||
    ccsdsArgs.pusFunnel.addLiveDestinationByRawId("VC0 NORMAL LIVE TM", ccsdsArgs.normalLiveTmDest,
 | 
			
		||||
                                                  0);
 | 
			
		||||
  }
 | 
			
		||||
  if (ccsdsArgs.cfdpLiveTmDest != MessageQueueIF::NO_QUEUE) {
 | 
			
		||||
    ccsdsArgs.cfdpFunnel.addLiveDestinationByRawId("VC0 CFDP LIVE TM", ccsdsArgs.cfdpLiveTmDest, 0);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
@@ -3,14 +3,16 @@
 | 
			
		||||
 | 
			
		||||
#include <fsfw/returnvalues/returnvalue.h>
 | 
			
		||||
#include <fsfw_hal/linux/spi/SpiComIF.h>
 | 
			
		||||
#include <mission/core/GenericFactory.h>
 | 
			
		||||
#include <mission/devices/HeaterHandler.h>
 | 
			
		||||
#include <mission/acs/gyroAdisHelpers.h>
 | 
			
		||||
#include <mission/com/CcsdsIpCoreHandler.h>
 | 
			
		||||
#include <mission/com/PersistentLogTmStoreTask.h>
 | 
			
		||||
#include <mission/genericFactory.h>
 | 
			
		||||
#include <mission/system/objects/Stack5VHandler.h>
 | 
			
		||||
#include <mission/tmtc/CcsdsIpCoreHandler.h>
 | 
			
		||||
#include <mission/tcs/HeaterHandler.h>
 | 
			
		||||
#include <mission/tmtc/CfdpTmFunnel.h>
 | 
			
		||||
#include <mission/tmtc/PersistentLogTmStoreTask.h>
 | 
			
		||||
#include <mission/tmtc/PusTmFunnel.h>
 | 
			
		||||
 | 
			
		||||
#include <atomic>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
class LinuxLibgpioIF;
 | 
			
		||||
@@ -22,6 +24,8 @@ class HealthTableIF;
 | 
			
		||||
class AcsBoardAssembly;
 | 
			
		||||
class GpioIF;
 | 
			
		||||
 | 
			
		||||
extern std::atomic_bool PTME_LOCKED;
 | 
			
		||||
 | 
			
		||||
namespace ObjectFactory {
 | 
			
		||||
 | 
			
		||||
struct CcsdsComponentArgs {
 | 
			
		||||
@@ -42,7 +46,8 @@ struct CcsdsComponentArgs {
 | 
			
		||||
  PusTmFunnel& pusFunnel;
 | 
			
		||||
  CfdpTmFunnel& cfdpFunnel;
 | 
			
		||||
  CcsdsIpCoreHandler** ipCoreHandler;
 | 
			
		||||
  AcceptsTelemetryIF* liveDestination = nullptr;
 | 
			
		||||
  MessageQueueId_t normalLiveTmDest = MessageQueueIF::NO_QUEUE;
 | 
			
		||||
  MessageQueueId_t cfdpLiveTmDest = MessageQueueIF::NO_QUEUE;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void setStatics();
 | 
			
		||||
@@ -50,27 +55,33 @@ void produce(void* args);
 | 
			
		||||
 | 
			
		||||
void createCommunicationInterfaces(LinuxLibgpioIF** gpioComIF, SerialComIF** uartComIF,
 | 
			
		||||
                                   SpiComIF** spiMainComIF, I2cComIF** i2cComIF);
 | 
			
		||||
void createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF** pwrSwitcher);
 | 
			
		||||
void createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF** pwrSwitcher,
 | 
			
		||||
                          bool enableHkSets);
 | 
			
		||||
void createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF* spiComIF,
 | 
			
		||||
                            PowerSwitchIF* pwrSwitcher, Stack5VHandler& stackHandler);
 | 
			
		||||
void createTmpComponents();
 | 
			
		||||
void createTmpComponents(std::vector<std::pair<object_id_t, address_t>> tmpDevsToAdd);
 | 
			
		||||
void createRadSensorChipSelect(LinuxLibgpioIF* gpioIF);
 | 
			
		||||
ReturnValue_t createRadSensorComponent(LinuxLibgpioIF* gpioComIF, Stack5VHandler& handler);
 | 
			
		||||
void createAcsBoardGpios(GpioCookie& cookie);
 | 
			
		||||
void createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF* gpioComIF, SerialComIF* uartComIF,
 | 
			
		||||
                              PowerSwitchIF& pwrSwitcher);
 | 
			
		||||
                              PowerSwitchIF& pwrSwitcher, bool enableHkSets,
 | 
			
		||||
                              adis1650x::Type adisType);
 | 
			
		||||
void createHeaterComponents(GpioIF* gpioIF, PowerSwitchIF* pwrSwitcher, HealthTableIF* healthTable,
 | 
			
		||||
                            HeaterHandler*& heaterHandler);
 | 
			
		||||
void createImtqComponents(PowerSwitchIF* pwrSwitcher);
 | 
			
		||||
void createBpxBatteryComponent();
 | 
			
		||||
void createImtqComponents(PowerSwitchIF* pwrSwitcher, bool enableHkSets, const char* i2cDev);
 | 
			
		||||
void createBpxBatteryComponent(bool enableHkSets, const char* i2cDev);
 | 
			
		||||
void createStrComponents(PowerSwitchIF* pwrSwitcher);
 | 
			
		||||
void createSolarArrayDeploymentComponents(PowerSwitchIF& pwrSwitcher, GpioIF& gpioIF);
 | 
			
		||||
void createSyrlinksComponents(PowerSwitchIF* pwrSwitcher);
 | 
			
		||||
void createPayloadComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF& pwrSwitcher);
 | 
			
		||||
void createReactionWheelComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF* pwrSwitcher);
 | 
			
		||||
ReturnValue_t createCcsdsIpComponentsAddTmRouting(CcsdsComponentArgs& args);
 | 
			
		||||
ReturnValue_t createCcsdsComponents(CcsdsComponentArgs& args);
 | 
			
		||||
ReturnValue_t readFirmwareVersion();
 | 
			
		||||
void createMiscComponents();
 | 
			
		||||
 | 
			
		||||
void createTestComponents(LinuxLibgpioIF* gpioComIF);
 | 
			
		||||
void createPlI2cResetGpio(LinuxLibgpioIF* gpioComIF);
 | 
			
		||||
 | 
			
		||||
void testAcsBrdAss(AcsBoardAssembly* assAss);
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
#include "obsw.h"
 | 
			
		||||
 | 
			
		||||
#include <libxiphos.h>
 | 
			
		||||
#include <pwd.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
@@ -11,12 +12,14 @@
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/core/WatchdogHandler.h"
 | 
			
		||||
#include "commonConfig.h"
 | 
			
		||||
#include "core/scheduling.h"
 | 
			
		||||
#include "fsfw/tasks/TaskFactory.h"
 | 
			
		||||
#include "fsfw/version.h"
 | 
			
		||||
#include "mission/acsDefs.h"
 | 
			
		||||
#include "mission/system/tree/system.h"
 | 
			
		||||
#include "memory/scratchApi.h"
 | 
			
		||||
#include "mission/acs/defs.h"
 | 
			
		||||
#include "mission/com/defs.h"
 | 
			
		||||
#include "mission/system/systemTree.h"
 | 
			
		||||
#include "q7sConfig.h"
 | 
			
		||||
#include "scheduling.h"
 | 
			
		||||
#include "watchdog/definitions.h"
 | 
			
		||||
 | 
			
		||||
static constexpr int OBSW_ALREADY_RUNNING = -2;
 | 
			
		||||
@@ -49,6 +52,8 @@ int obsw::obsw(int argc, char* argv[]) {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  autoSwitchHandling();
 | 
			
		||||
 | 
			
		||||
  // Delay the boot if applicable.
 | 
			
		||||
  bootDelayHandling();
 | 
			
		||||
 | 
			
		||||
@@ -66,6 +71,9 @@ int obsw::obsw(int argc, char* argv[]) {
 | 
			
		||||
 | 
			
		||||
  // Command the EIVE system to safe mode
 | 
			
		||||
#if OBSW_COMMAND_SAFE_MODE_AT_STARTUP == 1
 | 
			
		||||
  // This ensures that the PCDU switches were updated.
 | 
			
		||||
  TaskFactory::delayTask(1000);
 | 
			
		||||
  commandComSubsystemRxOnly();
 | 
			
		||||
  commandEiveSystemToSafe();
 | 
			
		||||
#else
 | 
			
		||||
  announceAllModes();
 | 
			
		||||
@@ -78,6 +86,33 @@ int obsw::obsw(int argc, char* argv[]) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void obsw::autoSwitchHandling() {
 | 
			
		||||
  std::string autoSwitchTarget;
 | 
			
		||||
  auto switchToTarget = [&](xsc_libnor_chip_t chip, xsc_libnor_copy_t copy) {
 | 
			
		||||
    sif::warning << "Detected ASWI=" << autoSwitchTarget
 | 
			
		||||
                 << " in ProASIC scratch buffer, auto-switching to image " << int(chip) << " "
 | 
			
		||||
                 << int(copy) << std::endl;
 | 
			
		||||
    scratch::clearValue(scratch::AUTO_SWITCH_IMAGE);
 | 
			
		||||
    // A bit of delay to ensure printout works..
 | 
			
		||||
    TaskFactory::delayTask(500);
 | 
			
		||||
    xsc_boot_copy(chip, copy);
 | 
			
		||||
  };
 | 
			
		||||
  if (scratch::readString(scratch::AUTO_SWITCH_IMAGE, autoSwitchTarget) == returnvalue::OK) {
 | 
			
		||||
    if (autoSwitchTarget == "00") {
 | 
			
		||||
      switchToTarget(XSC_LIBNOR_CHIP_0, XSC_LIBNOR_COPY_NOMINAL);
 | 
			
		||||
    } else if (autoSwitchTarget == "01") {
 | 
			
		||||
      switchToTarget(XSC_LIBNOR_CHIP_0, XSC_LIBNOR_COPY_GOLD);
 | 
			
		||||
    } else if (autoSwitchTarget == "10") {
 | 
			
		||||
      switchToTarget(XSC_LIBNOR_CHIP_1, XSC_LIBNOR_COPY_NOMINAL);
 | 
			
		||||
    } else if (autoSwitchTarget == "11") {
 | 
			
		||||
      switchToTarget(XSC_LIBNOR_CHIP_1, XSC_LIBNOR_COPY_GOLD);
 | 
			
		||||
    } else {
 | 
			
		||||
      sif::warning << "Invalid Auto Switch Image (ASWI) value detected: " << autoSwitchTarget
 | 
			
		||||
                   << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void obsw::bootDelayHandling() {
 | 
			
		||||
  const char* homedir = nullptr;
 | 
			
		||||
  homedir = getenv("HOME");
 | 
			
		||||
@@ -116,7 +151,22 @@ void obsw::commandEiveSystemToSafe() {
 | 
			
		||||
  ReturnValue_t result =
 | 
			
		||||
      MessageQueueSenderIF::sendMessage(sysQueueId, &msg, MessageQueueIF::NO_QUEUE, false);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "Sending safe mode command to EIVE system failed" << std::endl;
 | 
			
		||||
    sif::error << "obsw: Sending safe mode command to EIVE system failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void obsw::commandComSubsystemRxOnly() {
 | 
			
		||||
  auto* comSs = ObjectManager::instance()->get<HasModesIF>(objects::COM_SUBSYSTEM);
 | 
			
		||||
  if (comSs == nullptr) {
 | 
			
		||||
    sif::error << "obsw: Could not retrieve COM subsystem object" << std::endl;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  CommandMessage msg;
 | 
			
		||||
  ModeMessage::setCmdModeMessage(msg, com::RX_ONLY, 0);
 | 
			
		||||
  ReturnValue_t result = MessageQueueSenderIF::sendMessage(comSs->getCommandQueue(), &msg,
 | 
			
		||||
                                                           MessageQueueIF::NO_QUEUE, false);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "obsw: Sending RX_ONLY mode command to COM subsystem failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -127,6 +177,6 @@ void obsw::announceAllModes() {
 | 
			
		||||
  ReturnValue_t result =
 | 
			
		||||
      MessageQueueSenderIF::sendMessage(sysQueueId, &msg, MessageQueueIF::NO_QUEUE, false);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::error << "Sending safe mode command to EIVE system failed" << std::endl;
 | 
			
		||||
    sif::error << "obsw: Sending safe mode command to EIVE system failed" << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,15 @@ namespace obsw {
 | 
			
		||||
 | 
			
		||||
int obsw(int argc, char* argv[]);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is a safety mechanism where the ProASIC scratch buffer can be used to trigger an
 | 
			
		||||
 * auto-boot to another image. The auto-boot is currently implemented as a one-shot mechanism:
 | 
			
		||||
 * The key-value pair which triggers the auto-boot will be removed from the scratch buffer.
 | 
			
		||||
 */
 | 
			
		||||
void autoSwitchHandling();
 | 
			
		||||
void bootDelayHandling();
 | 
			
		||||
void commandEiveSystemToSafe();
 | 
			
		||||
void commandComSubsystemRxOnly();
 | 
			
		||||
void announceAllModes();
 | 
			
		||||
 | 
			
		||||
};  // namespace obsw
 | 
			
		||||
 
 | 
			
		||||
@@ -3,12 +3,12 @@
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceCommunicationIF.h>
 | 
			
		||||
#include <fsfw/subsystem/Subsystem.h>
 | 
			
		||||
#include <linux/scheduling.h>
 | 
			
		||||
#include <mission/tcs/Max31865Definitions.h>
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "bsp_q7s/core/ObjectFactory.h"
 | 
			
		||||
#include "fsfw/objectmanager/ObjectManager.h"
 | 
			
		||||
#include "fsfw/objectmanager/ObjectManagerIF.h"
 | 
			
		||||
#include "fsfw/platform.h"
 | 
			
		||||
@@ -17,10 +17,11 @@
 | 
			
		||||
#include "fsfw/tasks/FixedTimeslotTaskIF.h"
 | 
			
		||||
#include "fsfw/tasks/PeriodicTaskIF.h"
 | 
			
		||||
#include "fsfw/tasks/TaskFactory.h"
 | 
			
		||||
#include "mission/core/pollingSeqTables.h"
 | 
			
		||||
#include "mission/core/scheduling.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/Max31865Definitions.h"
 | 
			
		||||
#include "mission/pollingSeqTables.h"
 | 
			
		||||
#include "mission/scheduling.h"
 | 
			
		||||
#include "mission/utility/InitMission.h"
 | 
			
		||||
#include "objectFactory.h"
 | 
			
		||||
#include "q7sConfig.h"
 | 
			
		||||
 | 
			
		||||
/* This is configured for linux without CR */
 | 
			
		||||
#ifdef PLATFORM_UNIX
 | 
			
		||||
@@ -72,16 +73,27 @@ void scheduling::initTasks() {
 | 
			
		||||
#if OBSW_ADD_SA_DEPL == 1
 | 
			
		||||
  // Could add this to the core controller but the core controller does so many thing that I would
 | 
			
		||||
  // prefer to have the solar array deployment in a seprate task.
 | 
			
		||||
  PeriodicTaskIF* solarArrayDeplTask = factory->createPeriodicTask(
 | 
			
		||||
      "SOLAR_ARRAY_DEPL", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* solarArrayDeplTask =
 | 
			
		||||
      factory->createPeriodicTask("SOLAR_ARRAY_DEPL", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = solarArrayDeplTask->addComponent(objects::SOLAR_ARRAY_DEPL_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("SOLAR_ARRAY_DEPL", objects::SOLAR_ARRAY_DEPL_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  // Medium priority, higher than something like payload, but not the highest priority to also
 | 
			
		||||
  // detect tasks which choke other tasks.
 | 
			
		||||
  PeriodicTaskIF* xiphosWdtTask =
 | 
			
		||||
      factory->createPeriodicTask("XIPHOS_WDT", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = xiphosWdtTask->addComponent(objects::XIPHOS_WDT);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("XIPHOS_WDT", objects::XIPHOS_WDT);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* coreCtrlTask = factory->createPeriodicTask(
 | 
			
		||||
      "CORE_CTRL", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4, missedDeadlineFunc);
 | 
			
		||||
      "CORE_CTRL", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = coreCtrlTask->addComponent(objects::CORE_CONTROLLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("CORE_CTRL", objects::CORE_CONTROLLER);
 | 
			
		||||
@@ -89,7 +101,7 @@ void scheduling::initTasks() {
 | 
			
		||||
 | 
			
		||||
  /* TMTC Distribution */
 | 
			
		||||
  PeriodicTaskIF* tmTcDistributor = factory->createPeriodicTask(
 | 
			
		||||
      "DIST", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
      "TC_DIST", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
#if OBSW_ADD_TCPIP_SERVERS == 1
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
  result = tmTcDistributor->addComponent(objects::UDP_TMTC_SERVER);
 | 
			
		||||
@@ -120,7 +132,7 @@ void scheduling::initTasks() {
 | 
			
		||||
#if OBSW_ADD_TCPIP_SERVERS == 1
 | 
			
		||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
 | 
			
		||||
  PeriodicTaskIF* udpPollingTask = factory->createPeriodicTask(
 | 
			
		||||
      "UDP_TMTC_POLLING", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
      "UDP_TMTC_POLLING", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
  result = udpPollingTask->addComponent(objects::UDP_TMTC_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("UDP_POLLING", objects::UDP_TMTC_POLLING_TASK);
 | 
			
		||||
@@ -128,7 +140,7 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_TMTC_TCP_SERVER == 1
 | 
			
		||||
  PeriodicTaskIF* tcpPollingTask = factory->createPeriodicTask(
 | 
			
		||||
      "TCP_TMTC_POLLING", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
      "TCP_TMTC_POLLING", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
 | 
			
		||||
  result = tcpPollingTask->addComponent(objects::TCP_TMTC_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("UDP_POLLING", objects::TCP_TMTC_POLLING_TASK);
 | 
			
		||||
@@ -136,8 +148,9 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* genericSysTask = factory->createPeriodicTask(
 | 
			
		||||
      "SYSTEM_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* genericSysTask =
 | 
			
		||||
      factory->createPeriodicTask("SYSTEM_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = genericSysTask->addComponent(objects::EIVE_SYSTEM);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("EIVE_SYSTEM", objects::EIVE_SYSTEM);
 | 
			
		||||
@@ -154,6 +167,10 @@ void scheduling::initTasks() {
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PL_SUBSYSTEM", objects::PL_SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  result = genericSysTask->addComponent(objects::EPS_SUBSYSTEM);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("EPS_SUBSYSTEM", objects::EPS_SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  result = genericSysTask->addComponent(objects::INTERNAL_ERROR_REPORTER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("ERROR_REPORTER", objects::INTERNAL_ERROR_REPORTER);
 | 
			
		||||
@@ -171,7 +188,7 @@ void scheduling::initTasks() {
 | 
			
		||||
 | 
			
		||||
  // Runs in IRQ mode, frequency does not really matter
 | 
			
		||||
  PeriodicTaskIF* pdecHandlerTask = factory->createPeriodicTask(
 | 
			
		||||
      "PDEC_HANDLER", 75, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
      "PDEC_HANDLER", 75, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr, &RR_SCHEDULING);
 | 
			
		||||
  result = pdecHandlerTask->addComponent(objects::PDEC_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PDEC Handler", objects::PDEC_HANDLER);
 | 
			
		||||
@@ -179,50 +196,54 @@ void scheduling::initTasks() {
 | 
			
		||||
 | 
			
		||||
#endif /* OBSW_ADD_CCSDS_IP_CORE == 1 */
 | 
			
		||||
  // All the TM store tasks run in permanent loops, frequency does not matter
 | 
			
		||||
  PeriodicTaskIF* liveTmTask =
 | 
			
		||||
      factory->createPeriodicTask("LIVE_TM", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  PeriodicTaskIF* liveTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "LIVE_TM", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr, &RR_SCHEDULING);
 | 
			
		||||
  result = liveTmTask->addComponent(objects::LIVE_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("LIVE_TM", objects::LIVE_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
  PeriodicTaskIF* logTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "LOG_STORE_AND_TM", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
      "LOG_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = logTmTask->addComponent(objects::LOG_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("LOG_STORE_AND_TM", objects::LOG_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
  PeriodicTaskIF* hkTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "HK_STORE_AND_TM", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  PeriodicTaskIF* hkTmTask =
 | 
			
		||||
      factory->createPeriodicTask("HK_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = hkTmTask->addComponent(objects::HK_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("HK_STORE_AND_TM", objects::HK_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
  PeriodicTaskIF* cfdpTmTask = factory->createPeriodicTask(
 | 
			
		||||
      "CFDP_STORE_AND_TM", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
      "CFDP_PSTORE", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
 | 
			
		||||
  result = cfdpTmTask->addComponent(objects::CFDP_STORE_AND_TM_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("CFDP_STORE_AND_TM", objects::CFDP_STORE_AND_TM_TASK);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // TODO: Use user priorities for this task.
 | 
			
		||||
#if OBSW_ADD_CFDP_COMPONENTS == 1
 | 
			
		||||
  PeriodicTaskIF* cfdpTask = factory->createPeriodicTask(
 | 
			
		||||
      "CFDP Handler", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* cfdpTask =
 | 
			
		||||
      factory->createPeriodicTask("CFDP_HANDLER", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.4,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = cfdpTask->addComponent(objects::CFDP_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("CFDP Handler", objects::CFDP_HANDLER);
 | 
			
		||||
    scheduling::printAddObjectError("CFDP", objects::CFDP_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* gpsTask = factory->createPeriodicTask(
 | 
			
		||||
      "GPS_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* gpsTask =
 | 
			
		||||
      factory->createPeriodicTask("GPS_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = gpsTask->addComponent(objects::GPS_CONTROLLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("GPS_CTRL", objects::GPS_CONTROLLER);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_ACS_BOARD == 1
 | 
			
		||||
  PeriodicTaskIF* acsBrdPolling = factory->createPeriodicTask(
 | 
			
		||||
      "ACS_BOARD_POLLING", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* acsBrdPolling =
 | 
			
		||||
      factory->createPeriodicTask("ACS_BOARD_POLLING", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2,
 | 
			
		||||
                                  0.4, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = acsBrdPolling->addComponent(objects::ACS_BOARD_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("ACS_BOARD_POLLING", objects::ACS_BOARD_POLLING_TASK);
 | 
			
		||||
@@ -230,16 +251,18 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_RW == 1
 | 
			
		||||
  PeriodicTaskIF* rwPolling = factory->createPeriodicTask(
 | 
			
		||||
      "RW_POLLING_TASK", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* rwPolling =
 | 
			
		||||
      factory->createPeriodicTask("RW_POLLING_TASK", 75, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2,
 | 
			
		||||
                                  0.4, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = rwPolling->addComponent(objects::RW_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("RW_POLLING_TASK", objects::RW_POLLING_TASK);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_MGT == 1
 | 
			
		||||
  PeriodicTaskIF* imtqPolling = factory->createPeriodicTask(
 | 
			
		||||
      "IMTQ_POLLING_TASK", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* imtqPolling =
 | 
			
		||||
      factory->createPeriodicTask("IMTQ_POLLING_TASK", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2,
 | 
			
		||||
                                  0.4, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = imtqPolling->addComponent(objects::IMTQ_POLLING);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("IMTQ_POLLING_TASK", objects::IMTQ_POLLING);
 | 
			
		||||
@@ -247,16 +270,18 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_SUN_SENSORS == 1
 | 
			
		||||
  PeriodicTaskIF* susPolling = factory->createPeriodicTask(
 | 
			
		||||
      "SUS_POLLING_TASK", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* susPolling =
 | 
			
		||||
      factory->createPeriodicTask("SUS_POLLING_TASK", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2,
 | 
			
		||||
                                  0.4, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = susPolling->addComponent(objects::SUS_POLLING_TASK);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("SUS_POLLING_TASK", objects::SUS_POLLING_TASK);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* acsSysTask = factory->createPeriodicTask(
 | 
			
		||||
      "ACS_SYS_TASK", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* acsSysTask =
 | 
			
		||||
      factory->createPeriodicTask("ACS_SYS_TASK", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = acsSysTask->addComponent(objects::ACS_SUBSYSTEM);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("ACS_SUBSYSTEM", objects::ACS_SUBSYSTEM);
 | 
			
		||||
@@ -281,9 +306,20 @@ void scheduling::initTasks() {
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("STR_ASSY", objects::STR_ASSY);
 | 
			
		||||
  }
 | 
			
		||||
  result = acsSysTask->addComponent(objects::GPS_0_HEALTH_DEV);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("GPS_0_HEALTH_DEV", objects::GPS_0_HEALTH_DEV);
 | 
			
		||||
  }
 | 
			
		||||
  result = acsSysTask->addComponent(objects::GPS_1_HEALTH_DEV);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("GPS_1_HEALTH_DEV", objects::GPS_1_HEALTH_DEV);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* tcsSystemTask = factory->createPeriodicTask(
 | 
			
		||||
      "TCS_TASK", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc);
 | 
			
		||||
      "TCS_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
#if OBSW_ADD_THERMAL_TEMP_INSERTER == 1
 | 
			
		||||
  tcsSystemTask->addComponent(objects::THERMAL_TEMP_INSERTER);
 | 
			
		||||
#endif
 | 
			
		||||
  scheduling::scheduleRtdSensors(tcsSystemTask);
 | 
			
		||||
  result = tcsSystemTask->addComponent(objects::TCS_SUBSYSTEM);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
@@ -299,34 +335,48 @@ void scheduling::initTasks() {
 | 
			
		||||
    scheduling::printAddObjectError("THERMAL_CONTROLLER", objects::THERMAL_CONTROLLER);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_HEATERS == 1
 | 
			
		||||
  result = tcsSystemTask->addComponent(objects::HEATER_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("HEATER_HANDLER", objects::HEATER_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
  result = tcsSystemTask->addComponent(objects::HEATER_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("HEATER_HANDLER", objects::HEATER_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
  PeriodicTaskIF* syrlinksCom = factory->createPeriodicTask(
 | 
			
		||||
      "SYRLINKS_COM", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
  result = syrlinksCom->addComponent(objects::SYRLINKS_COM_HANDLER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("SYRLINKS_COM", objects::SYRLINKS_COM_HANDLER);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_STAR_TRACKER == 1
 | 
			
		||||
  PeriodicTaskIF* strHelperTask = factory->createPeriodicTask(
 | 
			
		||||
      "STR_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
  result = strHelperTask->addComponent(objects::STR_HELPER);
 | 
			
		||||
  // Relatively high priority to make sure STR COM works well.
 | 
			
		||||
  PeriodicTaskIF* strHelperTask =
 | 
			
		||||
      factory->createPeriodicTask("STR_HELPER", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2,
 | 
			
		||||
                                  missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = strHelperTask->addComponent(objects::STR_COM_IF);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("STR_HELPER", objects::STR_HELPER);
 | 
			
		||||
    scheduling::printAddObjectError("STR_HELPER", objects::STR_COM_IF);
 | 
			
		||||
  }
 | 
			
		||||
#endif /* OBSW_ADD_STAR_TRACKER == 1 */
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_PLOC_MPSOC == 1
 | 
			
		||||
  PeriodicTaskIF* mpsocHelperTask = factory->createPeriodicTask(
 | 
			
		||||
      "PLOC_MPSOC_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
      "PLOC_MPSOC_HELPER", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
  result = mpsocHelperTask->addComponent(objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PLOC_MPSOC_HELPER", objects::PLOC_MPSOC_HELPER);
 | 
			
		||||
  }
 | 
			
		||||
#endif /* OBSW_ADD_PLOC_MPSOC */
 | 
			
		||||
 | 
			
		||||
  // TODO: Use regular scheduler for this task
 | 
			
		||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1
 | 
			
		||||
  PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask(
 | 
			
		||||
      "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
      "PLOC_SUPV_HELPER", 0, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc);
 | 
			
		||||
  result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER);
 | 
			
		||||
@@ -334,7 +384,7 @@ void scheduling::initTasks() {
 | 
			
		||||
#endif /* OBSW_ADD_PLOC_SUPERVISOR */
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* plTask = factory->createPeriodicTask(
 | 
			
		||||
      "PL_TASK", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, missedDeadlineFunc);
 | 
			
		||||
      "PL_TASK", 25, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  plTask->addComponent(objects::CAM_SWITCHER);
 | 
			
		||||
  scheduling::addMpsocSupvHandlers(plTask);
 | 
			
		||||
  scheduling::scheduleScexDev(plTask);
 | 
			
		||||
@@ -374,6 +424,7 @@ void scheduling::initTasks() {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  sif::info << "Starting tasks.." << std::endl;
 | 
			
		||||
  xiphosWdtTask->startTask();
 | 
			
		||||
  tmTcDistributor->startTask();
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_TCPIP_SERVERS == 1
 | 
			
		||||
@@ -401,6 +452,9 @@ void scheduling::initTasks() {
 | 
			
		||||
#if OBSW_ADD_ACS_BOARD == 1
 | 
			
		||||
  acsBrdPolling->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_SYRLINKS == 1
 | 
			
		||||
  syrlinksCom->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
#if OBSW_ADD_MGT == 1
 | 
			
		||||
  imtqPolling->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
@@ -437,6 +491,9 @@ void scheduling::initTasks() {
 | 
			
		||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1
 | 
			
		||||
  supvHelperTask->startTask();
 | 
			
		||||
#endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */
 | 
			
		||||
#if OBSW_ADD_PLOC_MPSOC == 1
 | 
			
		||||
  mpsocHelperTask->startTask();
 | 
			
		||||
#endif
 | 
			
		||||
  plTask->startTask();
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_TEST_CODE == 1
 | 
			
		||||
@@ -455,8 +512,9 @@ void scheduling::createPstTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
#else
 | 
			
		||||
  static constexpr float acsPstPeriod = 0.4;
 | 
			
		||||
#endif
 | 
			
		||||
  FixedTimeslotTaskIF* acsTcsPst = factory.createFixedTimeslotTask(
 | 
			
		||||
      "ACS_TCS_PST", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, acsPstPeriod, missedDeadlineFunc);
 | 
			
		||||
  FixedTimeslotTaskIF* acsTcsPst =
 | 
			
		||||
      factory.createFixedTimeslotTask("ACS_TCS_PST", 85, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2,
 | 
			
		||||
                                      acsPstPeriod, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = pst::pstTcsAndAcs(acsTcsPst, cfg);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    if (result == FixedTimeslotTaskIF::SLOT_LIST_EMPTY) {
 | 
			
		||||
@@ -470,8 +528,9 @@ void scheduling::createPstTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
 | 
			
		||||
  /* Polling Sequence Table Default */
 | 
			
		||||
#if OBSW_ADD_SPI_TEST_CODE == 0
 | 
			
		||||
  FixedTimeslotTaskIF* syrlinksPst = factory.createFixedTimeslotTask(
 | 
			
		||||
      "SYRLINKS", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.5, missedDeadlineFunc);
 | 
			
		||||
  FixedTimeslotTaskIF* syrlinksPst =
 | 
			
		||||
      factory.createFixedTimeslotTask("SYRLINKS", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.5,
 | 
			
		||||
                                      missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = pst::pstSyrlinks(syrlinksPst);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    if (result == FixedTimeslotTaskIF::SLOT_LIST_EMPTY) {
 | 
			
		||||
@@ -485,9 +544,18 @@ void scheduling::createPstTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if OBSW_ADD_I2C_TEST_CODE == 0
 | 
			
		||||
  FixedTimeslotTaskIF* i2cPst = factory.createFixedTimeslotTask(
 | 
			
		||||
      "I2C_PST", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.2, missedDeadlineFunc);
 | 
			
		||||
  result = pst::pstI2c(i2cPst);
 | 
			
		||||
  FixedTimeslotTaskIF* i2cPst =
 | 
			
		||||
      factory.createFixedTimeslotTask("I2C_PS_PST", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.6,
 | 
			
		||||
                                      missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  pst::TmpSchedConfig tmpSchedConf;
 | 
			
		||||
#if OBSW_Q7S_EM == 1
 | 
			
		||||
  tmpSchedConf.scheduleTmpDev0 = true;
 | 
			
		||||
  tmpSchedConf.scheduleTmpDev1 = true;
 | 
			
		||||
  tmpSchedConf.schedulePlPcduDev0 = true;
 | 
			
		||||
  tmpSchedConf.schedulePlPcduDev1 = true;
 | 
			
		||||
  tmpSchedConf.scheduleIfBoardDev = true;
 | 
			
		||||
#endif
 | 
			
		||||
  result = pst::pstI2c(tmpSchedConf, i2cPst);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    if (result == FixedTimeslotTaskIF::SLOT_LIST_EMPTY) {
 | 
			
		||||
      sif::warning << "scheduling::initTasks: I2C PST is empty" << std::endl;
 | 
			
		||||
@@ -499,8 +567,9 @@ void scheduling::createPstTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  FixedTimeslotTaskIF* gomSpacePstTask = factory.createFixedTimeslotTask(
 | 
			
		||||
      "GS_PST_TASK", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 1.0, missedDeadlineFunc);
 | 
			
		||||
  FixedTimeslotTaskIF* gomSpacePstTask =
 | 
			
		||||
      factory.createFixedTimeslotTask("GS_PST_TASK", 65, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4,
 | 
			
		||||
                                      0.25, missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = pst::pstGompaceCan(gomSpacePstTask);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    if (result != FixedTimeslotTaskIF::SLOT_LIST_EMPTY) {
 | 
			
		||||
@@ -514,8 +583,9 @@ void scheduling::createPusTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
                                std::vector<PeriodicTaskIF*>& taskVec) {
 | 
			
		||||
  ReturnValue_t result = returnvalue::OK;
 | 
			
		||||
  /* PUS Services */
 | 
			
		||||
  PeriodicTaskIF* pusHighPrio = factory.createPeriodicTask(
 | 
			
		||||
      "PUS_HIGH_PRIO", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* pusHighPrio =
 | 
			
		||||
      factory.createPeriodicTask("PUS_HIGH_PRIO", 60, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2,
 | 
			
		||||
                                 missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = pusHighPrio->addComponent(objects::PUS_SERVICE_1_VERIFICATION);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PUS_VERIF", objects::PUS_SERVICE_1_VERIFICATION);
 | 
			
		||||
@@ -526,16 +596,17 @@ void scheduling::createPusTasks(TaskFactory& factory, TaskDeadlineMissedFunction
 | 
			
		||||
  }
 | 
			
		||||
  result = pusHighPrio->addComponent(objects::EVENT_MANAGER);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PUS_MGMT", objects::EVENT_MANAGER);
 | 
			
		||||
    scheduling::printAddObjectError("EVENT_MGMT", objects::EVENT_MANAGER);
 | 
			
		||||
  }
 | 
			
		||||
  result = pusHighPrio->addComponent(objects::PUS_SERVICE_9_TIME_MGMT);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PUS_9", objects::PUS_SERVICE_9_TIME_MGMT);
 | 
			
		||||
    scheduling::printAddObjectError("PUS_TIME", objects::PUS_SERVICE_9_TIME_MGMT);
 | 
			
		||||
  }
 | 
			
		||||
  taskVec.push_back(pusHighPrio);
 | 
			
		||||
 | 
			
		||||
  PeriodicTaskIF* pusMedPrio = factory.createPeriodicTask(
 | 
			
		||||
      "PUS_MED_PRIO", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, missedDeadlineFunc);
 | 
			
		||||
  PeriodicTaskIF* pusMedPrio =
 | 
			
		||||
      factory.createPeriodicTask("PUS_MED_PRIO", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8,
 | 
			
		||||
                                 missedDeadlineFunc, &RR_SCHEDULING);
 | 
			
		||||
  result = pusMedPrio->addComponent(objects::PUS_SERVICE_3_HOUSEKEEPING);
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    scheduling::printAddObjectError("PUS_3", objects::PUS_SERVICE_3_HOUSEKEEPING);
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "fsfw/tasks/definitions.h"
 | 
			
		||||
#include "mission/core/pollingSeqTables.h"
 | 
			
		||||
#include "mission/pollingSeqTables.h"
 | 
			
		||||
 | 
			
		||||
using pst::AcsPstCfg;
 | 
			
		||||
 | 
			
		||||
@@ -129,7 +129,7 @@ ReturnValue_t Xadc::readValFromFile(const char* filename, T& val) {
 | 
			
		||||
    sif::warning << "Xadc::readValFromFile: Failed to open file " << filename << std::endl;
 | 
			
		||||
    return returnvalue::FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  char valstring[MAX_STR_LENGTH] = "";
 | 
			
		||||
  char valstring[MAX_STR_LENGTH]{};
 | 
			
		||||
  char* returnVal = fgets(valstring, MAX_STR_LENGTH, fp);
 | 
			
		||||
  if (returnVal == nullptr) {
 | 
			
		||||
    sif::warning << "Xadc::readValFromFile: Failed to read string from file " << filename
 | 
			
		||||
@@ -139,6 +139,11 @@ ReturnValue_t Xadc::readValFromFile(const char* filename, T& val) {
 | 
			
		||||
  }
 | 
			
		||||
  std::istringstream valSstream(valstring);
 | 
			
		||||
  valSstream >> val;
 | 
			
		||||
  if (valSstream.bad()) {
 | 
			
		||||
    sif::warning << "Xadc: Conversion of value to target type failed" << std::endl;
 | 
			
		||||
    fclose(fp);
 | 
			
		||||
    return returnvalue::FAILED;
 | 
			
		||||
  }
 | 
			
		||||
  fclose(fp);
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -40,8 +40,8 @@ set(CROSS_COMPILE_OBJCOPY "${CROSS_COMPILE}-objcopy")
 | 
			
		||||
set(CROSS_COMPILE_SIZE "${CROSS_COMPILE}-size")
 | 
			
		||||
 | 
			
		||||
# At the very least, cross compile gcc and g++ have to be set!
 | 
			
		||||
find_program (CMAKE_C_COMPILER ${CROSS_COMPILE_CC} REQUIRED)
 | 
			
		||||
find_program (CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX} REQUIRED)
 | 
			
		||||
find_program (CMAKE_C_COMPILER ${CROSS_COMPILE_CC} HINTS $ENV{CROSS_COMPILE_BIN_PATH} REQUIRED)
 | 
			
		||||
find_program (CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX} HINTS $ENV{CROSS_COMPILE_BIN_PATH} REQUIRED)
 | 
			
		||||
# Useful utilities, not strictly necessary
 | 
			
		||||
find_program(CMAKE_SIZE ${CROSS_COMPILE_SIZE})
 | 
			
		||||
find_program(CMAKE_OBJCOPY ${CROSS_COMPILE_OBJCOPY})
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ static constexpr dur_millis_t ACS_BOARD_CS_TIMEOUT = 50 * CS_FACTOR;
 | 
			
		||||
 | 
			
		||||
}  // namespace spi
 | 
			
		||||
 | 
			
		||||
namespace uart {
 | 
			
		||||
namespace serial {
 | 
			
		||||
 | 
			
		||||
static constexpr size_t HYPERION_GPS_REPLY_MAX_BUFFER = 1024;
 | 
			
		||||
static constexpr UartBaudRate SYRLINKS_BAUD = UartBaudRate::RATE_38400;
 | 
			
		||||
@@ -73,6 +73,6 @@ static constexpr UartBaudRate PLOC_MPSOC_BAUD = UartBaudRate::RATE_115200;
 | 
			
		||||
static constexpr UartBaudRate PLOC_SUPV_BAUD = UartBaudRate::RATE_921600;
 | 
			
		||||
static constexpr UartBaudRate STAR_TRACKER_BAUD = UartBaudRate::RATE_921600;
 | 
			
		||||
 | 
			
		||||
}  // namespace uart
 | 
			
		||||
}  // namespace serial
 | 
			
		||||
 | 
			
		||||
#endif /* COMMON_CONFIG_DEVCONF_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,9 @@ enum I2cAddress : address_t {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum spiAddresses : address_t {
 | 
			
		||||
  RTD_IC_0,
 | 
			
		||||
  RTD_IC_1,
 | 
			
		||||
  RTD_IC_2,
 | 
			
		||||
  RTD_IC_3,
 | 
			
		||||
  RTD_IC_4,
 | 
			
		||||
  RTD_IC_5,
 | 
			
		||||
@@ -67,9 +70,6 @@ enum spiAddresses : address_t {
 | 
			
		||||
  RTD_IC_13,
 | 
			
		||||
  RTD_IC_14,
 | 
			
		||||
  RTD_IC_15,
 | 
			
		||||
  RTD_IC_16,
 | 
			
		||||
  RTD_IC_17,
 | 
			
		||||
  RTD_IC_18,
 | 
			
		||||
  RW1,
 | 
			
		||||
  RW2,
 | 
			
		||||
  RW3,
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,9 @@ enum gpioId_t {
 | 
			
		||||
  TEST_ID_0,
 | 
			
		||||
  TEST_ID_1,
 | 
			
		||||
 | 
			
		||||
  RTD_IC_0,
 | 
			
		||||
  RTD_IC_1,
 | 
			
		||||
  RTD_IC_2,
 | 
			
		||||
  RTD_IC_3,
 | 
			
		||||
  RTD_IC_4,
 | 
			
		||||
  RTD_IC_5,
 | 
			
		||||
@@ -50,9 +53,6 @@ enum gpioId_t {
 | 
			
		||||
  RTD_IC_13,
 | 
			
		||||
  RTD_IC_14,
 | 
			
		||||
  RTD_IC_15,
 | 
			
		||||
  RTD_IC_16,
 | 
			
		||||
  RTD_IC_17,
 | 
			
		||||
  RTD_IC_18,
 | 
			
		||||
 | 
			
		||||
  CS_SUS_0,
 | 
			
		||||
  CS_SUS_1,
 | 
			
		||||
@@ -77,6 +77,8 @@ enum gpioId_t {
 | 
			
		||||
  CS_RAD_SENSOR,
 | 
			
		||||
  ENABLE_RADFET,
 | 
			
		||||
 | 
			
		||||
  PL_I2C_ARESETN,
 | 
			
		||||
 | 
			
		||||
  PAPB_BUSY_N,
 | 
			
		||||
  PAPB_EMPTY,
 | 
			
		||||
 | 
			
		||||
@@ -93,15 +95,11 @@ enum gpioId_t {
 | 
			
		||||
  EN_RW_CS,
 | 
			
		||||
 | 
			
		||||
  SPI_MUX,
 | 
			
		||||
 | 
			
		||||
  VC0_PAPB_EMPTY,
 | 
			
		||||
  VC0_PAPB_BUSY,
 | 
			
		||||
  VC1_PAPB_EMPTY,
 | 
			
		||||
  VC1_PAPB_BUSY,
 | 
			
		||||
  VC2_PAPB_EMPTY,
 | 
			
		||||
  VC2_PAPB_BUSY,
 | 
			
		||||
  VC3_PAPB_EMPTY,
 | 
			
		||||
  VC3_PAPB_BUSY,
 | 
			
		||||
  PTME_RESETN,
 | 
			
		||||
 | 
			
		||||
  PDEC_RESET,
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
#ifndef FSFWCONFIG_DEVICES_HEATERSWITCHERLIST_H_
 | 
			
		||||
#define FSFWCONFIG_DEVICES_HEATERSWITCHERLIST_H_
 | 
			
		||||
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
namespace heater {
 | 
			
		||||
enum Switchers : uint8_t {
 | 
			
		||||
  HEATER_0_OBC_BRD,
 | 
			
		||||
  HEATER_1_PLOC_PROC_BRD,
 | 
			
		||||
  HEATER_2_ACS_BRD,
 | 
			
		||||
  HEATER_3_PCDU_PDU,
 | 
			
		||||
  HEATER_4_CAMERA,
 | 
			
		||||
  HEATER_5_STR,
 | 
			
		||||
  HEATER_6_DRO,
 | 
			
		||||
  HEATER_7_S_BAND,
 | 
			
		||||
  NUMBER_OF_SWITCHES
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* FSFWCONFIG_DEVICES_HEATERSWITCHERLIST_H_ */
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#ifndef FSFWCONFIG_DEVICES_POWERSWITCHERLIST_H_
 | 
			
		||||
#define FSFWCONFIG_DEVICES_POWERSWITCHERLIST_H_
 | 
			
		||||
 | 
			
		||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
#endif /* FSFWCONFIG_DEVICES_POWERSWITCHERLIST_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,15 @@ static constexpr char SD_1_MOUNT_POINT[] = "/mnt/sd1";
 | 
			
		||||
static constexpr char OBSW_UPDATE_ARCHIVE_FILE_NAME[] = "eive-sw-update.tar.xz";
 | 
			
		||||
static constexpr char STRIPPED_OBSW_BINARY_FILE_NAME[] = "eive-obsw-stripped";
 | 
			
		||||
static constexpr char OBSW_VERSION_FILE_NAME[] = "obsw_version.txt";
 | 
			
		||||
static constexpr char PUS_SEQUENCE_COUNT_FILE[] = "pus-sequence-count.txt";
 | 
			
		||||
static constexpr char CFDP_SEQUENCE_COUNT_FILE[] = "cfdp-sequence-count.txt";
 | 
			
		||||
 | 
			
		||||
static constexpr char OBSW_PATH[] = "/usr/bin/eive-obsw";
 | 
			
		||||
static constexpr char OBSW_VERSION_FILE_PATH[] = "/usr/share/eive-obsw/obsw_version.txt";
 | 
			
		||||
 | 
			
		||||
// ISO8601 timestamp.
 | 
			
		||||
static constexpr char FILE_DATE_FORMAT[] = "%FT%H%M%SZ";
 | 
			
		||||
 | 
			
		||||
static constexpr uint16_t EIVE_PUS_APID = 0x65;
 | 
			
		||||
static constexpr uint16_t EIVE_CFDP_APID = 0x66;
 | 
			
		||||
static constexpr uint16_t EIVE_LOCAL_CFDP_ENTITY_ID = EIVE_CFDP_APID;
 | 
			
		||||
@@ -30,9 +35,11 @@ static constexpr uint32_t STR_IMG_HELPER_QUEUE_SIZE = 50;
 | 
			
		||||
 | 
			
		||||
static constexpr uint8_t LIVE_TM = 0;
 | 
			
		||||
 | 
			
		||||
static constexpr size_t MAX_SPACEPACKET_TC_SIZE = 2048;
 | 
			
		||||
 | 
			
		||||
/* Limits for filename and path checks */
 | 
			
		||||
static constexpr uint32_t MAX_PATH_SIZE = 100;
 | 
			
		||||
static constexpr uint32_t MAX_FILENAME_SIZE = 50;
 | 
			
		||||
static constexpr uint32_t MAX_PATH_SIZE = 200;
 | 
			
		||||
static constexpr uint32_t MAX_FILENAME_SIZE = 100;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t SA_DEPL_INIT_BUFFER_SECS = 120;
 | 
			
		||||
// Burn time for autonomous deployment
 | 
			
		||||
@@ -43,6 +50,8 @@ static constexpr uint32_t LEGACY_SA_DEPL_CHANNEL_ALTERNATION_INTERVAL_SECS = 5;
 | 
			
		||||
// Maximum allowed burn time allowed by the software.
 | 
			
		||||
static constexpr uint32_t SA_DEPL_MAX_BURN_TIME = 180;
 | 
			
		||||
 | 
			
		||||
static constexpr size_t CFDP_MAX_FILE_SEGMENT_LEN = 900;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t CCSDS_HANDLER_QUEUE_SIZE = 50;
 | 
			
		||||
static constexpr uint8_t NUMBER_OF_VIRTUAL_CHANNELS = 4;
 | 
			
		||||
static constexpr uint32_t VC0_LIVE_TM_QUEUE_SIZE = 300;
 | 
			
		||||
@@ -53,11 +62,25 @@ static constexpr uint32_t NOK_STORE_QUEUE_SIZE = 350;
 | 
			
		||||
static constexpr uint32_t HK_STORE_QUEUE_SIZE = 300;
 | 
			
		||||
static constexpr uint32_t CFDP_STORE_QUEUE_SIZE = 300;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t MAX_PUS_FUNNEL_QUEUE_DEPTH = 100;
 | 
			
		||||
static constexpr uint32_t MAX_CFDP_FUNNEL_QUEUE_DEPTH = 80;
 | 
			
		||||
static constexpr uint32_t LIVE_CHANNEL_NORMAL_QUEUE_SIZE = 250;
 | 
			
		||||
static constexpr uint32_t LIVE_CHANNEL_CFDP_QUEUE_SIZE = 350;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t MAX_STORED_CMDS_UDP = 150;
 | 
			
		||||
static constexpr uint32_t MAX_STORED_CMDS_TCP = 180;
 | 
			
		||||
static constexpr uint32_t CFDP_MAX_FSM_CALL_COUNT_SRC_HANDLER = 10;
 | 
			
		||||
static constexpr uint32_t CFDP_MAX_FSM_CALL_COUNT_DEST_HANDLER = 300;
 | 
			
		||||
static constexpr uint32_t CFDP_SHORT_DELAY_MS = 40;
 | 
			
		||||
static constexpr uint32_t CFDP_REGULAR_DELAY_MS = 200;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t MAX_PUS_FUNNEL_QUEUE_DEPTH = 100;
 | 
			
		||||
static constexpr uint32_t MAX_CFDP_FUNNEL_QUEUE_DEPTH = LIVE_CHANNEL_CFDP_QUEUE_SIZE;
 | 
			
		||||
static constexpr uint32_t VERIFICATION_SERVICE_QUEUE_DEPTH = 120;
 | 
			
		||||
static constexpr uint32_t HK_SERVICE_QUEUE_DEPTH = 60;
 | 
			
		||||
static constexpr uint32_t ACTION_SERVICE_QUEUE_DEPTH = 60;
 | 
			
		||||
 | 
			
		||||
static constexpr uint32_t UDP_MAX_STORED_CMDS = 200;
 | 
			
		||||
static constexpr uint32_t UDP_MSG_QUEUE_DEPTH = UDP_MAX_STORED_CMDS;
 | 
			
		||||
static constexpr uint32_t TCP_MAX_STORED_CMDS = 350;
 | 
			
		||||
static constexpr uint32_t TCP_MSG_QUEUE_DEPTH = TCP_MAX_STORED_CMDS;
 | 
			
		||||
static constexpr uint32_t TCP_MAX_NUMBER_TMS_SENT_PER_CYCLE = TCP_MSG_QUEUE_DEPTH;
 | 
			
		||||
 | 
			
		||||
namespace spiSched {
 | 
			
		||||
 | 
			
		||||
@@ -71,6 +94,7 @@ static constexpr uint32_t SCHED_BLOCK_RTD = 150;
 | 
			
		||||
static constexpr uint32_t SCHED_BLOCK_7_RW_READ_MS = 300;
 | 
			
		||||
static constexpr uint32_t SCHED_BLOCK_8_PLPCDU_MS = 320;
 | 
			
		||||
static constexpr uint32_t SCHED_BLOCK_9_RAD_SENS_MS = 340;
 | 
			
		||||
static constexpr uint32_t SCHED_BLOCK_10_PWR_CTRL_MS = 350;
 | 
			
		||||
 | 
			
		||||
// 15 ms for FM
 | 
			
		||||
static constexpr float SCHED_BLOCK_1_PERIOD = static_cast<float>(SCHED_BLOCK_1_SUS_READ_MS) / 400.0;
 | 
			
		||||
@@ -86,6 +110,8 @@ static constexpr float SCHED_BLOCK_RTD_PERIOD = static_cast<float>(SCHED_BLOCK_R
 | 
			
		||||
static constexpr float SCHED_BLOCK_7_PERIOD = static_cast<float>(SCHED_BLOCK_7_RW_READ_MS) / 400.0;
 | 
			
		||||
static constexpr float SCHED_BLOCK_8_PERIOD = static_cast<float>(SCHED_BLOCK_8_PLPCDU_MS) / 400.0;
 | 
			
		||||
static constexpr float SCHED_BLOCK_9_PERIOD = static_cast<float>(SCHED_BLOCK_9_RAD_SENS_MS) / 400.0;
 | 
			
		||||
static constexpr float SCHED_BLOCK_10_PERIOD =
 | 
			
		||||
    static_cast<float>(SCHED_BLOCK_10_PWR_CTRL_MS) / 400.0;
 | 
			
		||||
 | 
			
		||||
}  // namespace spiSched
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,9 @@ enum : uint8_t {
 | 
			
		||||
  TCS_CONTROLLER = 141,
 | 
			
		||||
  COM_SUBSYSTEM = 142,
 | 
			
		||||
  PERSISTENT_TM_STORE = 143,
 | 
			
		||||
  SYRLINKS_COM = 144,
 | 
			
		||||
  SUS_HANDLER = 145,
 | 
			
		||||
  CFDP_APP = 146,
 | 
			
		||||
  COMMON_SUBSYSTEM_ID_END
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,9 @@ enum commonObjects : uint32_t {
 | 
			
		||||
  THERMAL_CONTROLLER = 0x43400001,
 | 
			
		||||
  ACS_CONTROLLER = 0x43000002,
 | 
			
		||||
  CORE_CONTROLLER = 0x43000003,
 | 
			
		||||
  POWER_CONTROLLER = 0x43000004,
 | 
			
		||||
  GLOBAL_JSON_CFG = 0x43000006,
 | 
			
		||||
  XIPHOS_WDT = 0x43000007,
 | 
			
		||||
 | 
			
		||||
  /* 0x44 ('D') for device handlers */
 | 
			
		||||
  MGM_0_LIS3_HANDLER = 0x44120006,
 | 
			
		||||
@@ -43,6 +45,8 @@ enum commonObjects : uint32_t {
 | 
			
		||||
  RW4 = 0x44120350,
 | 
			
		||||
  STAR_TRACKER = 0x44130001,
 | 
			
		||||
  GPS_CONTROLLER = 0x44130045,
 | 
			
		||||
  GPS_0_HEALTH_DEV = 0x44130046,
 | 
			
		||||
  GPS_1_HEALTH_DEV = 0x44130047,
 | 
			
		||||
 | 
			
		||||
  IMTQ_POLLING = 0x44140013,
 | 
			
		||||
  IMTQ_HANDLER = 0x44140014,
 | 
			
		||||
@@ -62,7 +66,7 @@ enum commonObjects : uint32_t {
 | 
			
		||||
  RAD_SENSOR = 0x443200A5,
 | 
			
		||||
  PLOC_UPDATER = 0x44330000,
 | 
			
		||||
  PLOC_MEMORY_DUMPER = 0x44330001,
 | 
			
		||||
  STR_HELPER = 0x44330002,
 | 
			
		||||
  STR_COM_IF = 0x44330002,
 | 
			
		||||
  PLOC_MPSOC_HELPER = 0x44330003,
 | 
			
		||||
  AXI_PTME_CONFIG = 0x44330004,
 | 
			
		||||
  PTME_CONFIG = 0x44330005,
 | 
			
		||||
@@ -123,8 +127,7 @@ enum commonObjects : uint32_t {
 | 
			
		||||
  SUS_11_R_LOC_XBYMZB_PT_ZB = 0x44120043,
 | 
			
		||||
 | 
			
		||||
  SYRLINKS_HANDLER = 0x445300A3,
 | 
			
		||||
  // might be obsolete, was not used in Q7S FM SW
 | 
			
		||||
  // CCSDS_IP_CORE_BRIDGE = 0x73500000,
 | 
			
		||||
  SYRLINKS_COM_HANDLER = 0x445300A4,
 | 
			
		||||
 | 
			
		||||
  /* 0x49 ('I') for Communication Interfaces */
 | 
			
		||||
  ACS_BOARD_POLLING_TASK = 0x49060004,
 | 
			
		||||
@@ -156,12 +159,14 @@ enum commonObjects : uint32_t {
 | 
			
		||||
  PL_SUBSYSTEM = 0x73010002,
 | 
			
		||||
  TCS_SUBSYSTEM = 0x73010003,
 | 
			
		||||
  COM_SUBSYSTEM = 0x73010004,
 | 
			
		||||
  EPS_SUBSYSTEM = 0x73010005,
 | 
			
		||||
 | 
			
		||||
  TM_FUNNEL = 0x73000100,
 | 
			
		||||
  PUS_TM_FUNNEL = 0x73000101,
 | 
			
		||||
  CFDP_TM_FUNNEL = 0x73000102,
 | 
			
		||||
  CFDP_HANDLER = 0x73000205,
 | 
			
		||||
  CFDP_DISTRIBUTOR = 0x73000206,
 | 
			
		||||
  CFDP_FAULT_HANDLER = 0x73000207,
 | 
			
		||||
  MISC_TM_STORE = 0x73020001,
 | 
			
		||||
  OK_TM_STORE = 0x73020002,
 | 
			
		||||
  NOT_OK_TM_STORE = 0x73020003,
 | 
			
		||||
 
 | 
			
		||||
@@ -37,13 +37,11 @@ enum commonClassIds : uint8_t {
 | 
			
		||||
  SUPV_RETURN_VALUES_IF,    // SPVRTVIF
 | 
			
		||||
  ACS_CTRL,                 // ACSCTRL
 | 
			
		||||
  ACS_MEKF,                 // ACSMEKF
 | 
			
		||||
  ACS_SAFE,                 // ACSSAF
 | 
			
		||||
  ACS_PTG,                  // ACSPTG
 | 
			
		||||
  ACS_DETUMBLE,             // ACSDTB
 | 
			
		||||
  SD_CARD_MANAGER,          // SDMA
 | 
			
		||||
  LOCAL_PARAM_HANDLER,      // LPH
 | 
			
		||||
  PERSISTENT_TM_STORE,      // PTM
 | 
			
		||||
  TM_SINK,                  // TMS
 | 
			
		||||
  VIRTUAL_CHANNEL,          // VCS
 | 
			
		||||
  COMMON_CLASS_ID_END       // [EXPORT] : [END]
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,12 @@
 | 
			
		||||
#include "AcuDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
AcuDummy::AcuDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
AcuDummy::AcuDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie, bool enableHkSets)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie),
 | 
			
		||||
      coreHk(this),
 | 
			
		||||
      auxHk(this),
 | 
			
		||||
      enableHkSets(enableHkSets) {}
 | 
			
		||||
 | 
			
		||||
AcuDummy::~AcuDummy() {}
 | 
			
		||||
 | 
			
		||||
@@ -37,7 +40,49 @@ uint32_t AcuDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return
 | 
			
		||||
 | 
			
		||||
ReturnValue_t AcuDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                LocalDataPoolManager &poolManager) {
 | 
			
		||||
  using namespace ACU;
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_CURRENT_IN_CHANNELS, new PoolEntry<int16_t>(6));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_VOLTAGE_IN_CHANNELS, new PoolEntry<uint16_t>(6));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_VCC, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_VBAT, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(ACU::pool::ACU_TEMPERATURES,
 | 
			
		||||
                           new PoolEntry<float>({10.0, 10.0, 10.0}, true));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_MPPT_MODE, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_VBOOST_IN_CHANNELS, new PoolEntry<uint16_t>(6));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_POWER_IN_CHANNELS, new PoolEntry<uint16_t>(6));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_DAC_ENABLES, new PoolEntry<uint8_t>(3));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_DAC_RAW_CHANNELS, new PoolEntry<uint16_t>(6));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_BOOTCAUSE, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_BOOTCNT, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_UPTIME, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_RESET_CAUSE, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_MPPT_TIME, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_MPPT_PERIOD, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_DEVICES, new PoolEntry<uint8_t>(8));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_DEVICES_STATUS, new PoolEntry<uint8_t>(8));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_WDT_CNT_GND, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(pool::ACU_WDT_GND_LEFT, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(coreHk.getSid(), enableHkSets, 30.0));
 | 
			
		||||
  poolManager.subscribeForRegularPeriodicPacket(
 | 
			
		||||
      subdp::RegularHkPeriodicParams(auxHk.getSid(), enableHkSets, 6000.0));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *AcuDummy::getDataSetHandle(sid_t sid) {
 | 
			
		||||
  if (sid == coreHk.getSid()) {
 | 
			
		||||
    return &coreHk;
 | 
			
		||||
  } else if (sid == auxHk.getSid()) {
 | 
			
		||||
    return &auxHk;
 | 
			
		||||
  }
 | 
			
		||||
  return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
#define DUMMIES_ACUDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
class AcuDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
@@ -11,10 +12,14 @@ class AcuDummy : public DeviceHandlerBase {
 | 
			
		||||
  static const uint8_t SIMPLE_COMMAND_DATA = 1;
 | 
			
		||||
  static const uint8_t PERIODIC_REPLY_DATA = 2;
 | 
			
		||||
 | 
			
		||||
  AcuDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  AcuDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie, bool enableHkSets);
 | 
			
		||||
  virtual ~AcuDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  ACU::CoreHk coreHk;
 | 
			
		||||
  ACU::AuxHk auxHk;
 | 
			
		||||
  bool enableHkSets;
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
@@ -28,6 +33,7 @@ class AcuDummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* DUMMIES_ACUDUMMY_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#include "BpxDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/BpxBatteryDefinitions.h>
 | 
			
		||||
#include <mission/power/bpxBattDefs.h>
 | 
			
		||||
 | 
			
		||||
BpxDummy::BpxDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
@@ -37,19 +37,19 @@ uint32_t BpxDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return
 | 
			
		||||
 | 
			
		||||
ReturnValue_t BpxDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATT_TEMP_1, &battTemp1);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATT_TEMP_2, &battTemp2);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATT_TEMP_3, &battTemp3);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATT_TEMP_4, &battTemp4);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::CHARGE_CURRENT, &chargeCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::DISCHARGE_CURRENT, &dischargeCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::HEATER_CURRENT, &heaterCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATT_VOLTAGE, &battVolt);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::REBOOT_COUNTER, &rebootCounter);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BOOTCAUSE, &bootCause);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATT_TEMP_1, &battTemp1);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATT_TEMP_2, &battTemp2);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATT_TEMP_3, &battTemp3);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATT_TEMP_4, &battTemp4);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::CHARGE_CURRENT, &chargeCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::DISCHARGE_CURRENT, &dischargeCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::HEATER_CURRENT, &heaterCurrent);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATT_VOLTAGE, &battVolt);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::REBOOT_COUNTER, &rebootCounter);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BOOTCAUSE, &bootCause);
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATTERY_HEATER_MODE, &battheatMode);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATTHEAT_LOW_LIMIT, &battheatLow);
 | 
			
		||||
  localDataPoolMap.emplace(BpxBattery::BATTHEAT_HIGH_LIMIT, &battheatHigh);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATTERY_HEATER_MODE, &battheatMode);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATTHEAT_LOW_LIMIT, &battheatLow);
 | 
			
		||||
  localDataPoolMap.emplace(bpxBat::BATTHEAT_HIGH_LIMIT, &battheatHigh);
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ target_sources(
 | 
			
		||||
         GpsCtrlDummy.cpp
 | 
			
		||||
         GyroAdisDummy.cpp
 | 
			
		||||
         GyroL3GD20Dummy.cpp
 | 
			
		||||
         RadSensorDummy.cpp
 | 
			
		||||
         MgmLIS3MDLDummy.cpp
 | 
			
		||||
         PlPcduDummy.cpp
 | 
			
		||||
         ExecutableComIfDummy.cpp
 | 
			
		||||
@@ -26,6 +27,6 @@ target_sources(
 | 
			
		||||
         CoreControllerDummy.cpp
 | 
			
		||||
         PlocMpsocDummy.cpp
 | 
			
		||||
         PlocSupervisorDummy.cpp
 | 
			
		||||
         helpers.cpp
 | 
			
		||||
         helperFactory.cpp
 | 
			
		||||
         MgmRm3100Dummy.cpp
 | 
			
		||||
         Tmp1075Dummy.cpp)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#include "CoreControllerDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <bsp_q7s/core/CoreDefinitions.h>
 | 
			
		||||
#include <bsp_q7s/core/defs.h>
 | 
			
		||||
#include <objects/systemObjectList.h>
 | 
			
		||||
 | 
			
		||||
#include <cmath>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <fsfw/controller/ExtendedControllerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/susMax1227Helpers.h>
 | 
			
		||||
#include <mission/acs/susMax1227Helpers.h>
 | 
			
		||||
 | 
			
		||||
class CoreControllerDummy : public ExtendedControllerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define DUMMIES_GPSCTRLDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/controller/ExtendedControllerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/GPSDefinitions.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
 | 
			
		||||
class GpsCtrlDummy : public ExtendedControllerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#include <dummies/GpsDhbDummy.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/GPSDefinitions.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
 | 
			
		||||
GpsDhbDummy::GpsDhbDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#include "GyroAdisDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/gyroAdisHelpers.h>
 | 
			
		||||
#include <mission/acs/gyroAdisHelpers.h>
 | 
			
		||||
 | 
			
		||||
GyroAdisDummy::GyroAdisDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie), dataset(this) {}
 | 
			
		||||
@@ -46,7 +46,7 @@ ReturnValue_t GyroAdisDummy::initializeLocalDataPool(localpool::DataPool &localD
 | 
			
		||||
  localDataPoolMap.emplace(adis1650x::ACCELERATION_X, new PoolEntry<double>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(adis1650x::ACCELERATION_Y, new PoolEntry<double>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(adis1650x::ACCELERATION_Z, new PoolEntry<double>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(adis1650x::TEMPERATURE, new PoolEntry<float>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(adis1650x::TEMPERATURE, new PoolEntry<float>({10.0}, true));
 | 
			
		||||
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define DUMMIES_GYROADISDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/gyroAdisHelpers.h>
 | 
			
		||||
#include <mission/acs/gyroAdisHelpers.h>
 | 
			
		||||
 | 
			
		||||
class GyroAdisDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,35 @@
 | 
			
		||||
#include "ImtqDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/imtqHelpers.h>
 | 
			
		||||
#include <mission/acs/imtqHelpers.h>
 | 
			
		||||
 | 
			
		||||
ImtqDummy::ImtqDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
ImtqDummy::ImtqDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie,
 | 
			
		||||
                     power::Switch_t pwrSwitcher, bool enableHkSets)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie),
 | 
			
		||||
      enableHkSets(enableHkSets),
 | 
			
		||||
      statusSet(this),
 | 
			
		||||
      dipoleSet(*this),
 | 
			
		||||
      rawMtmNoTorque(this),
 | 
			
		||||
      hkDatasetNoTorque(this),
 | 
			
		||||
      rawMtmWithTorque(this),
 | 
			
		||||
      hkDatasetWithTorque(this),
 | 
			
		||||
      calMtmMeasurementSet(this),
 | 
			
		||||
      switcher(pwrSwitcher) {}
 | 
			
		||||
 | 
			
		||||
ImtqDummy::~ImtqDummy() = default;
 | 
			
		||||
 | 
			
		||||
void ImtqDummy::doStartUp() { setMode(MODE_NORMAL); }
 | 
			
		||||
void ImtqDummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
 | 
			
		||||
void ImtqDummy::doShutDown() { setMode(_MODE_POWER_DOWN); }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ImtqDummy::getSwitches(const uint8_t **switches, uint8_t *numberOfSwitches) {
 | 
			
		||||
  if (switcher != power::NO_SWITCH) {
 | 
			
		||||
    *numberOfSwitches = 1;
 | 
			
		||||
    *switches = &switcher;
 | 
			
		||||
    return returnvalue::OK;
 | 
			
		||||
  }
 | 
			
		||||
  return DeviceHandlerBase::NO_SWITCH;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ImtqDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) { return NOTHING_TO_SEND; }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t ImtqDummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
@@ -43,5 +62,59 @@ ReturnValue_t ImtqDummy::initializeLocalDataPool(localpool::DataPool &localDataP
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ACTUATION_CAL_STATUS, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::MTM_RAW, new PoolEntry<float>({0.12, 0.76, -0.45}, true));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ACTUATION_RAW_STATUS, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::DIPOLES_ID, new PoolEntry<int16_t>({0, 0, 0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::CURRENT_TORQUE_DURATION, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
 | 
			
		||||
  // ENG HK No Torque
 | 
			
		||||
  localDataPoolMap.emplace(imtq::DIGITAL_VOLTAGE_MV, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ANALOG_VOLTAGE_MV, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::DIGITAL_CURRENT, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ANALOG_CURRENT, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::COIL_CURRENTS, &coilCurrentsMilliampsNoTorque);
 | 
			
		||||
  localDataPoolMap.emplace(imtq::COIL_TEMPERATURES, &coilTempsNoTorque);
 | 
			
		||||
  localDataPoolMap.emplace(imtq::MCU_TEMPERATURE, new PoolEntry<int16_t>({0}));
 | 
			
		||||
 | 
			
		||||
  // ENG HK With Torque
 | 
			
		||||
  localDataPoolMap.emplace(imtq::DIGITAL_VOLTAGE_MV_WT, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ANALOG_VOLTAGE_MV_WT, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::DIGITAL_CURRENT_WT, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::ANALOG_CURRENT_WT, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(imtq::COIL_CURRENTS_WT, &coilCurrentsMilliampsWithTorque);
 | 
			
		||||
  localDataPoolMap.emplace(imtq::COIL_TEMPERATURES_WT, &coilTempsWithTorque);
 | 
			
		||||
  localDataPoolMap.emplace(imtq::MCU_TEMPERATURE_WT, new PoolEntry<int16_t>({0}));
 | 
			
		||||
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(hkDatasetNoTorque.getSid(), enableHkSets, 30.0));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(hkDatasetWithTorque.getSid(), enableHkSets, 30.0));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(rawMtmNoTorque.getSid(), false, 10.0));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(rawMtmWithTorque.getSid(), false, 10.0));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(calMtmMeasurementSet.getSid(), false, 10.0));
 | 
			
		||||
  poolManager.subscribeForRegularPeriodicPacket(
 | 
			
		||||
      subdp::RegularHkPeriodicParams(statusSet.getSid(), false, 10.0));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(dipoleSet.getSid(), false, 10.0));
 | 
			
		||||
  return DeviceHandlerBase::initializeLocalDataPool(localDataPoolMap, poolManager);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *ImtqDummy::getDataSetHandle(sid_t sid) {
 | 
			
		||||
  if (sid == hkDatasetNoTorque.getSid()) {
 | 
			
		||||
    return &hkDatasetNoTorque;
 | 
			
		||||
  } else if (sid == dipoleSet.getSid()) {
 | 
			
		||||
    return &dipoleSet;
 | 
			
		||||
  } else if (sid == statusSet.getSid()) {
 | 
			
		||||
    return &statusSet;
 | 
			
		||||
  } else if (sid == hkDatasetWithTorque.getSid()) {
 | 
			
		||||
    return &hkDatasetWithTorque;
 | 
			
		||||
  } else if (sid == rawMtmWithTorque.getSid()) {
 | 
			
		||||
    return &rawMtmWithTorque;
 | 
			
		||||
  } else if (sid == calMtmMeasurementSet.getSid()) {
 | 
			
		||||
    return &calMtmMeasurementSet;
 | 
			
		||||
  } else if (sid == rawMtmNoTorque.getSid()) {
 | 
			
		||||
    return &rawMtmNoTorque;
 | 
			
		||||
  }
 | 
			
		||||
  return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,8 @@
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/acs/imtqHelpers.h"
 | 
			
		||||
 | 
			
		||||
class ImtqDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  static const DeviceCommandId_t SIMPLE_COMMAND = 1;
 | 
			
		||||
@@ -11,10 +13,44 @@ class ImtqDummy : public DeviceHandlerBase {
 | 
			
		||||
  static const uint8_t SIMPLE_COMMAND_DATA = 1;
 | 
			
		||||
  static const uint8_t PERIODIC_REPLY_DATA = 2;
 | 
			
		||||
 | 
			
		||||
  ImtqDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  ImtqDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie,
 | 
			
		||||
            power::Switch_t pwrSwitcher, bool enableHkSets);
 | 
			
		||||
  ~ImtqDummy() override;
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  bool enableHkSets;
 | 
			
		||||
 | 
			
		||||
  imtq::StatusDataset statusSet;
 | 
			
		||||
  imtq::DipoleActuationSet dipoleSet;
 | 
			
		||||
  imtq::RawMtmMeasurementNoTorque rawMtmNoTorque;
 | 
			
		||||
  imtq::HkDatasetNoTorque hkDatasetNoTorque;
 | 
			
		||||
 | 
			
		||||
  imtq::RawMtmMeasurementWithTorque rawMtmWithTorque;
 | 
			
		||||
  imtq::HkDatasetWithTorque hkDatasetWithTorque;
 | 
			
		||||
 | 
			
		||||
  imtq::CalibratedMtmMeasurementSet calMtmMeasurementSet;
 | 
			
		||||
 | 
			
		||||
  PoolEntry<uint8_t> statusMode = PoolEntry<uint8_t>({0});
 | 
			
		||||
  PoolEntry<uint8_t> statusError = PoolEntry<uint8_t>({0});
 | 
			
		||||
  PoolEntry<uint8_t> statusConfig = PoolEntry<uint8_t>({0});
 | 
			
		||||
  PoolEntry<uint32_t> statusUptime = PoolEntry<uint32_t>({0});
 | 
			
		||||
 | 
			
		||||
  PoolEntry<int32_t> mgmCalEntry = PoolEntry<int32_t>(3);
 | 
			
		||||
  PoolEntry<int16_t> dipolesPoolEntry = PoolEntry<int16_t>({0, 0, 0}, false);
 | 
			
		||||
  PoolEntry<uint16_t> torqueDurationEntry = PoolEntry<uint16_t>({0}, false);
 | 
			
		||||
  PoolEntry<float> coilCurrentsMilliampsNoTorque = PoolEntry<float>(3);
 | 
			
		||||
  PoolEntry<float> coilCurrentsMilliampsWithTorque = PoolEntry<float>(3);
 | 
			
		||||
  PoolEntry<int16_t> coilTempsNoTorque = PoolEntry<int16_t>(3);
 | 
			
		||||
  PoolEntry<int16_t> coilTempsWithTorque = PoolEntry<int16_t>(3);
 | 
			
		||||
  PoolEntry<float> mtmRawNoTorque = PoolEntry<float>(3);
 | 
			
		||||
  PoolEntry<uint8_t> actStatusNoTorque = PoolEntry<uint8_t>(1);
 | 
			
		||||
  PoolEntry<float> mtmRawWithTorque = PoolEntry<float>(3);
 | 
			
		||||
  PoolEntry<uint8_t> actStatusWithTorque = PoolEntry<uint8_t>(1);
 | 
			
		||||
 | 
			
		||||
  power::Switch_t switcher = power::NO_SWITCH;
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t getSwitches(const uint8_t **switches, uint8_t *numberOfSwitches) override;
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
@@ -28,6 +64,7 @@ class ImtqDummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* DUMMIES_IMTQDUMMY_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,19 +1,27 @@
 | 
			
		||||
#include "Max31865Dummy.h"
 | 
			
		||||
 | 
			
		||||
#include "fsfw/datapool/PoolReadGuard.h"
 | 
			
		||||
 | 
			
		||||
using namespace returnvalue;
 | 
			
		||||
 | 
			
		||||
Max31865Dummy::Max31865Dummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie), set(this, EiveMax31855::EXCHANGE_SET_ID) {}
 | 
			
		||||
void Max31865Dummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
void Max31865Dummy::doShutDown() { setMode(_MODE_POWER_DOWN); }
 | 
			
		||||
void Max31865Dummy::doShutDown() {
 | 
			
		||||
  PoolReadGuard pg(&set);
 | 
			
		||||
  set.setValidity(false, true);
 | 
			
		||||
  setMode(MODE_OFF);
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t Max31865Dummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t Max31865Dummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) { return OK; }
 | 
			
		||||
ReturnValue_t Max31865Dummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t Max31865Dummy::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
 | 
			
		||||
                                                     const uint8_t *commandData,
 | 
			
		||||
                                                     size_t commandDataLen) {
 | 
			
		||||
  return 0;
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t Max31865Dummy::scanForReply(const uint8_t *start, size_t len,
 | 
			
		||||
                                          DeviceCommandId_t *foundId, size_t *foundLen) {
 | 
			
		||||
@@ -28,15 +36,20 @@ ReturnValue_t Max31865Dummy::initializeLocalDataPool(localpool::DataPool &localD
 | 
			
		||||
                                                     LocalDataPoolManager &poolManager) {
 | 
			
		||||
  using namespace MAX31865;
 | 
			
		||||
  localDataPoolMap.emplace(static_cast<lp_id_t>(PoolIds::RTD_VALUE), new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(static_cast<lp_id_t>(PoolIds::TEMPERATURE_C), new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(static_cast<lp_id_t>(PoolIds::TEMPERATURE_C),
 | 
			
		||||
                           new PoolEntry<float>({10.0}, true));
 | 
			
		||||
  localDataPoolMap.emplace(static_cast<lp_id_t>(PoolIds::LAST_FAULT_BYTE),
 | 
			
		||||
                           new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(static_cast<lp_id_t>(PoolIds::FAULT_BYTE), new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Max31865Dummy::setTemperature(float temperature) {
 | 
			
		||||
  set.temperatureCelcius.value = temperature;
 | 
			
		||||
void Max31865Dummy::setTemperature(float temperature, bool valid) {
 | 
			
		||||
  PoolReadGuard pg(&set);
 | 
			
		||||
  if (pg.getReadResult() == returnvalue::OK) {
 | 
			
		||||
    set.temperatureCelcius.value = temperature;
 | 
			
		||||
    set.setValidity(valid, true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *Max31865Dummy::getDataSetHandle(sid_t sid) { return &set; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,16 @@
 | 
			
		||||
#ifndef EIVE_OBSW_MAX31865DUMMY_H
 | 
			
		||||
#define EIVE_OBSW_MAX31865DUMMY_H
 | 
			
		||||
 | 
			
		||||
#include <mission/tcs/Max31865Definitions.h>
 | 
			
		||||
 | 
			
		||||
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/Max31865Definitions.h"
 | 
			
		||||
 | 
			
		||||
class Max31865Dummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  Max31865Dummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  Max31865Dummy(object_id_t objectId, CookieIF *comCookie);
 | 
			
		||||
 | 
			
		||||
  void setTemperature(float temperature);
 | 
			
		||||
  void setTemperature(float temperature, bool setValid);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  MAX31865::PrimarySet set;
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ uint32_t MgmLIS3MDLDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) {
 | 
			
		||||
 | 
			
		||||
ReturnValue_t MgmLIS3MDLDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                       LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(mgmLis3::TEMPERATURE_CELCIUS, new PoolEntry<float>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(mgmLis3::TEMPERATURE_CELCIUS, new PoolEntry<float>({10.0}, true));
 | 
			
		||||
  localDataPoolMap.emplace(mgmLis3::FIELD_STRENGTHS,
 | 
			
		||||
                           new PoolEntry<float>({1.02, 0.56, -0.78}, true));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
#include "P60DockDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
#include "fsfw/datapool/PoolReadGuard.h"
 | 
			
		||||
 | 
			
		||||
P60DockDummy::P60DockDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,8 @@
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/power/gsDefs.h"
 | 
			
		||||
 | 
			
		||||
class P60DockDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  static const DeviceCommandId_t SIMPLE_COMMAND = 1;
 | 
			
		||||
@@ -15,6 +17,8 @@ class P60DockDummy : public DeviceHandlerBase {
 | 
			
		||||
  virtual ~P60DockDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  lp_var_t<float> temp1 = lp_var_t<float>(this, P60Dock::pool::P60DOCK_TEMPERATURE_1);
 | 
			
		||||
  lp_var_t<float> temp2 = lp_var_t<float>(this, P60Dock::pool::P60DOCK_TEMPERATURE_2);
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,49 +1,35 @@
 | 
			
		||||
#include "PcduHandlerDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <fsfw/ipc/QueueFactory.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
PcduHandlerDummy::PcduHandlerDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie), dummySwitcher(objectId, 18, 18, false) {}
 | 
			
		||||
#include "mission/power/defs.h"
 | 
			
		||||
 | 
			
		||||
PcduHandlerDummy::PcduHandlerDummy(object_id_t objectId)
 | 
			
		||||
    : SystemObject(objectId), manager(this, nullptr), dummySwitcher(objectId, 18, 18, false) {
 | 
			
		||||
  switcherLock = MutexFactory::instance()->createMutex();
 | 
			
		||||
  queue = QueueFactory::instance()->createMessageQueue(20);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PcduHandlerDummy::~PcduHandlerDummy() {}
 | 
			
		||||
 | 
			
		||||
void PcduHandlerDummy::doStartUp() { setMode(MODE_NORMAL); }
 | 
			
		||||
 | 
			
		||||
void PcduHandlerDummy::doShutDown() { setMode(MODE_OFF); }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
 | 
			
		||||
                                                        const uint8_t *commandData,
 | 
			
		||||
                                                        size_t commandDataLen) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::scanForReply(const uint8_t *start, size_t len,
 | 
			
		||||
                                             DeviceCommandId_t *foundId, size_t *foundLen) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PcduHandlerDummy::fillCommandAndReplyMap() {}
 | 
			
		||||
 | 
			
		||||
uint32_t PcduHandlerDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 500; }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                        LocalDataPoolManager &poolManager) {
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
 | 
			
		||||
                                                        LocalDataPoolManager& poolManager) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::sendSwitchCommand(power::Switch_t switchNr, ReturnValue_t onOff) {
 | 
			
		||||
  if (onOff == SWITCH_ON) {
 | 
			
		||||
    triggerEvent(power::SWITCH_CMD_SENT, true, switchNr);
 | 
			
		||||
  } else {
 | 
			
		||||
    triggerEvent(power::SWITCH_CMD_SENT, false, switchNr);
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    MutexGuard mg(switcherLock);
 | 
			
		||||
    // To simulate a real PCDU, remember the switch change to trigger a SWITCH_HAS_CHANGED event
 | 
			
		||||
    // at a later stage.
 | 
			
		||||
    switchChangeArray[switchNr] = true;
 | 
			
		||||
  }
 | 
			
		||||
  return dummySwitcher.sendSwitchCommand(switchNr, onOff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -60,3 +46,37 @@ ReturnValue_t PcduHandlerDummy::getFuseState(uint8_t fuseNr) const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t PcduHandlerDummy::getSwitchDelayMs(void) const { return dummySwitcher.getSwitchDelayMs(); }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PcduHandlerDummy::performOperation(uint8_t opCode) {
 | 
			
		||||
  // TODO: Handle HK messages in queue.
 | 
			
		||||
  SwitcherBoolArray switcherChangeCopy{};
 | 
			
		||||
  {
 | 
			
		||||
    MutexGuard mg(switcherLock);
 | 
			
		||||
    std::memcpy(switcherChangeCopy.data(), switchChangeArray.data(), switchChangeArray.size());
 | 
			
		||||
  }
 | 
			
		||||
  for (uint8_t idx = 0; idx < switcherChangeCopy.size(); idx++) {
 | 
			
		||||
    if (switcherChangeCopy[idx]) {
 | 
			
		||||
      if (dummySwitcher.getSwitchState(idx) == PowerSwitchIF::SWITCH_ON) {
 | 
			
		||||
        triggerEvent(power::SWITCH_HAS_CHANGED, true, idx);
 | 
			
		||||
      } else {
 | 
			
		||||
        triggerEvent(power::SWITCH_HAS_CHANGED, false, idx);
 | 
			
		||||
      }
 | 
			
		||||
      MutexGuard mg(switcherLock);
 | 
			
		||||
      switchChangeArray[idx] = false;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
object_id_t PcduHandlerDummy::getObjectId() const { return SystemObject::getObjectId(); }
 | 
			
		||||
 | 
			
		||||
MessageQueueId_t PcduHandlerDummy::getCommandQueue() const { return queue->getId(); }
 | 
			
		||||
 | 
			
		||||
dur_millis_t PcduHandlerDummy::getPeriodicOperationFrequency() const {
 | 
			
		||||
  // TODO: dummy value. Retrieve from intiitalize after task creation..
 | 
			
		||||
  return 400;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalDataPoolManager* PcduHandlerDummy::getHkManagerHandle() { return &manager; }
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase* PcduHandlerDummy::getDataSetHandle(sid_t sid) { return nullptr; }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,10 @@
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <fsfw/power/DummyPowerSwitcher.h>
 | 
			
		||||
 | 
			
		||||
class PcduHandlerDummy : public DeviceHandlerBase, public PowerSwitchIF {
 | 
			
		||||
class PcduHandlerDummy : public PowerSwitchIF,
 | 
			
		||||
                         public HasLocalDataPoolIF,
 | 
			
		||||
                         public SystemObject,
 | 
			
		||||
                         public ExecutableObjectIF {
 | 
			
		||||
 public:
 | 
			
		||||
  static const DeviceCommandId_t SIMPLE_COMMAND = 1;
 | 
			
		||||
  static const DeviceCommandId_t PERIODIC_REPLY = 2;
 | 
			
		||||
@@ -11,29 +14,49 @@ class PcduHandlerDummy : public DeviceHandlerBase, public PowerSwitchIF {
 | 
			
		||||
  static const uint8_t SIMPLE_COMMAND_DATA = 1;
 | 
			
		||||
  static const uint8_t PERIODIC_REPLY_DATA = 2;
 | 
			
		||||
 | 
			
		||||
  PcduHandlerDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  PcduHandlerDummy(object_id_t objectId);
 | 
			
		||||
  virtual ~PcduHandlerDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  MessageQueueIF* queue;
 | 
			
		||||
  LocalDataPoolManager manager;
 | 
			
		||||
  MutexIF* switcherLock;
 | 
			
		||||
  DummyPowerSwitcher dummySwitcher;
 | 
			
		||||
  using SwitcherBoolArray = std::array<bool, 18>;
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
  ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
  ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData,
 | 
			
		||||
                                        size_t commandDataLen) override;
 | 
			
		||||
  ReturnValue_t scanForReply(const uint8_t *start, size_t len, DeviceCommandId_t *foundId,
 | 
			
		||||
                             size_t *foundLen) override;
 | 
			
		||||
  ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override;
 | 
			
		||||
  void fillCommandAndReplyMap() override;
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  ReturnValue_t performOperation(uint8_t opCode) override;
 | 
			
		||||
  SwitcherBoolArray switchChangeArray{};
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager& poolManager) override;
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t sendSwitchCommand(power::Switch_t switchNr, ReturnValue_t onOff) override;
 | 
			
		||||
  ReturnValue_t sendFuseOnCommand(uint8_t fuseNr) override;
 | 
			
		||||
  ReturnValue_t getSwitchState(power::Switch_t switchNr) const override;
 | 
			
		||||
  ReturnValue_t getFuseState(uint8_t fuseNr) const override;
 | 
			
		||||
  uint32_t getSwitchDelayMs(void) const override;
 | 
			
		||||
 | 
			
		||||
  object_id_t getObjectId() const override;
 | 
			
		||||
 | 
			
		||||
  /** Command queue for housekeeping messages. */
 | 
			
		||||
  MessageQueueId_t getCommandQueue() const override;
 | 
			
		||||
 | 
			
		||||
  dur_millis_t getPeriodicOperationFrequency() const override;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Every class implementing this interface should have a local data pool manager. This
 | 
			
		||||
   * function will return a reference to the manager.
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  LocalDataPoolManager* getHkManagerHandle() override;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * 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
 | 
			
		||||
   */
 | 
			
		||||
  LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#include "PduDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
PduDummy::PduDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie),
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,7 @@
 | 
			
		||||
#define DUMMIES_PDUDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
class PduDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
#include "PlPcduDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
 | 
			
		||||
PlPcduDummy::PlPcduDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
 | 
			
		||||
PlPcduDummy::~PlPcduDummy() {}
 | 
			
		||||
 | 
			
		||||
void PlPcduDummy::doStartUp() { setMode(MODE_NORMAL); }
 | 
			
		||||
void PlPcduDummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
 | 
			
		||||
void PlPcduDummy::doShutDown() { setMode(MODE_OFF); }
 | 
			
		||||
 | 
			
		||||
@@ -43,3 +43,16 @@ ReturnValue_t PlPcduDummy::initializeLocalDataPool(localpool::DataPool &localDat
 | 
			
		||||
  localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::TEMP, new PoolEntry<float>({0.0}, true));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PlPcduDummy::checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
 | 
			
		||||
                                            uint32_t *msToReachTheMode) {
 | 
			
		||||
  if (commandedMode != MODE_OFF) {
 | 
			
		||||
    PoolReadGuard pg(&enablePl);
 | 
			
		||||
    if (pg.getReadResult() == returnvalue::OK) {
 | 
			
		||||
      if (enablePl.plUseAllowed.isValid() and not enablePl.plUseAllowed.value) {
 | 
			
		||||
        return NON_OP_STATE_OF_CHARGE;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return DeviceHandlerBase::checkModeCommand(commandedMode, commandedSubmode, msToReachTheMode);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
#ifndef DUMMIES_PLPCDUDUMMY_H_
 | 
			
		||||
#define DUMMIES_PLPCDUDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <common/config/eive/objects.h>
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/payloadPcduDefinitions.h>
 | 
			
		||||
#include <mission/controller/controllerdefinitions/PowerCtrlDefinitions.h>
 | 
			
		||||
#include <mission/payload/payloadPcduDefinitions.h>
 | 
			
		||||
 | 
			
		||||
class PlPcduDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
@@ -29,6 +31,10 @@ class PlPcduDummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
 | 
			
		||||
                                 uint32_t *msToReachTheMode) override;
 | 
			
		||||
  pwrctrl::EnablePl enablePl = pwrctrl::EnablePl(objects::POWER_CONTROLLER);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* DUMMIES_PLPCDUDUMMY_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,19 @@ ReturnValue_t PlocMpsocDummy::buildCommandFromCommand(DeviceCommandId_t deviceCo
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PlocMpsocDummy::checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
 | 
			
		||||
                                               uint32_t *msToReachTheMode) {
 | 
			
		||||
  if (commandedMode != MODE_OFF) {
 | 
			
		||||
    PoolReadGuard pg(&enablePl);
 | 
			
		||||
    if (pg.getReadResult() == returnvalue::OK) {
 | 
			
		||||
      if (enablePl.plUseAllowed.isValid() and not enablePl.plUseAllowed.value) {
 | 
			
		||||
        return NON_OP_STATE_OF_CHARGE;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return DeviceHandlerBase::checkModeCommand(commandedMode, commandedSubmode, msToReachTheMode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PlocMpsocDummy::scanForReply(const uint8_t *start, size_t len,
 | 
			
		||||
                                           DeviceCommandId_t *foundId, size_t *foundLen) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,10 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <common/config/eive/objects.h>
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/controller/controllerdefinitions/PowerCtrlDefinitions.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/power/defs.h"
 | 
			
		||||
 | 
			
		||||
class PlocMpsocDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
@@ -22,6 +26,9 @@ class PlocMpsocDummy : public DeviceHandlerBase {
 | 
			
		||||
                                        size_t commandDataLen) override;
 | 
			
		||||
  ReturnValue_t scanForReply(const uint8_t *start, size_t len, DeviceCommandId_t *foundId,
 | 
			
		||||
                             size_t *foundLen) override;
 | 
			
		||||
  ReturnValue_t checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
 | 
			
		||||
                                 uint32_t *msToReachTheMode) override;
 | 
			
		||||
  pwrctrl::EnablePl enablePl = pwrctrl::EnablePl(objects::POWER_CONTROLLER);
 | 
			
		||||
  ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override;
 | 
			
		||||
  void fillCommandAndReplyMap() override;
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
#include "PlocSupervisorDummy.h"
 | 
			
		||||
 | 
			
		||||
PlocSupervisorDummy::PlocSupervisorDummy(object_id_t objectId, object_id_t comif,
 | 
			
		||||
                                         CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
                                         CookieIF *comCookie, PowerSwitchIF &pwrSwitcher)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {
 | 
			
		||||
  setPowerSwitcher(&pwrSwitcher);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PlocSupervisorDummy::~PlocSupervisorDummy() {}
 | 
			
		||||
 | 
			
		||||
@@ -42,3 +44,24 @@ ReturnValue_t PlocSupervisorDummy::initializeLocalDataPool(localpool::DataPool &
 | 
			
		||||
                                                           LocalDataPoolManager &poolManager) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PlocSupervisorDummy::getSwitches(const uint8_t **switches,
 | 
			
		||||
                                               uint8_t *numberOfSwitches) {
 | 
			
		||||
  *numberOfSwitches = 1;
 | 
			
		||||
  *switches = reinterpret_cast<const uint8_t *>(&switchId);
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t PlocSupervisorDummy::checkModeCommand(Mode_t commandedMode,
 | 
			
		||||
                                                    Submode_t commandedSubmode,
 | 
			
		||||
                                                    uint32_t *msToReachTheMode) {
 | 
			
		||||
  if (commandedMode != MODE_OFF) {
 | 
			
		||||
    PoolReadGuard pg(&enablePl);
 | 
			
		||||
    if (pg.getReadResult() == returnvalue::OK) {
 | 
			
		||||
      if (enablePl.plUseAllowed.isValid() and not enablePl.plUseAllowed.value) {
 | 
			
		||||
        return NON_OP_STATE_OF_CHARGE;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return DeviceHandlerBase::checkModeCommand(commandedMode, commandedSubmode, msToReachTheMode);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,9 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <common/config/eive/objects.h>
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/controller/controllerdefinitions/PowerCtrlDefinitions.h>
 | 
			
		||||
#include <mission/power/defs.h>
 | 
			
		||||
 | 
			
		||||
class PlocSupervisorDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
@@ -10,10 +13,13 @@ class PlocSupervisorDummy : public DeviceHandlerBase {
 | 
			
		||||
  static const uint8_t SIMPLE_COMMAND_DATA = 1;
 | 
			
		||||
  static const uint8_t PERIODIC_REPLY_DATA = 2;
 | 
			
		||||
 | 
			
		||||
  PlocSupervisorDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  PlocSupervisorDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie,
 | 
			
		||||
                      PowerSwitchIF &pwrSwitcher);
 | 
			
		||||
  virtual ~PlocSupervisorDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  const power::Switches switchId = power::Switches::PDU1_CH6_PLOC_12V;
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
@@ -27,4 +33,8 @@ class PlocSupervisorDummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  ReturnValue_t getSwitches(const uint8_t **switches, uint8_t *numberOfSwitches) override;
 | 
			
		||||
  ReturnValue_t checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
 | 
			
		||||
                                 uint32_t *msToReachTheMode) override;
 | 
			
		||||
  pwrctrl::EnablePl enablePl = pwrctrl::EnablePl(objects::POWER_CONTROLLER);
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								dummies/RadSensorDummy.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								dummies/RadSensorDummy.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#include "RadSensorDummy.h"
 | 
			
		||||
 | 
			
		||||
RadSensorDummy::RadSensorDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie), sensorSet(this) {}
 | 
			
		||||
 | 
			
		||||
RadSensorDummy::~RadSensorDummy() {}
 | 
			
		||||
 | 
			
		||||
void RadSensorDummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
 | 
			
		||||
void RadSensorDummy::doShutDown() { setMode(MODE_OFF); }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
 | 
			
		||||
                                                      const uint8_t *commandData,
 | 
			
		||||
                                                      size_t commandDataLen) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::scanForReply(const uint8_t *start, size_t len,
 | 
			
		||||
                                           DeviceCommandId_t *foundId, size_t *foundLen) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) {
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadSensorDummy::fillCommandAndReplyMap() {}
 | 
			
		||||
 | 
			
		||||
uint32_t RadSensorDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 500; }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RadSensorDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                      LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(radSens::TEMPERATURE_C, new PoolEntry<float>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN0, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN1, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN4, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN5, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN6, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(radSens::AIN7, new PoolEntry<uint16_t>({0}));
 | 
			
		||||
  poolManager.subscribeForRegularPeriodicPacket(
 | 
			
		||||
      subdp::RegularHkPeriodicParams(sensorSet.getSid(), false, 20.0));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *RadSensorDummy::getDataSetHandle(sid_t sid) { return &sensorSet; }
 | 
			
		||||
							
								
								
									
										35
									
								
								dummies/RadSensorDummy.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								dummies/RadSensorDummy.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
 | 
			
		||||
#include "mission/payload/radSensorDefinitions.h"
 | 
			
		||||
 | 
			
		||||
class RadSensorDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  static const DeviceCommandId_t SIMPLE_COMMAND = 1;
 | 
			
		||||
  static const DeviceCommandId_t PERIODIC_REPLY = 2;
 | 
			
		||||
 | 
			
		||||
  static const uint8_t SIMPLE_COMMAND_DATA = 1;
 | 
			
		||||
  static const uint8_t PERIODIC_REPLY_DATA = 2;
 | 
			
		||||
 | 
			
		||||
  RadSensorDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  virtual ~RadSensorDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  radSens::RadSensorDataset sensorSet;
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
  ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
  ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData,
 | 
			
		||||
                                        size_t commandDataLen) override;
 | 
			
		||||
  ReturnValue_t scanForReply(const uint8_t *start, size_t len, DeviceCommandId_t *foundId,
 | 
			
		||||
                             size_t *foundLen) override;
 | 
			
		||||
  ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override;
 | 
			
		||||
  void fillCommandAndReplyMap() override;
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
 | 
			
		||||
};
 | 
			
		||||
@@ -1,15 +1,26 @@
 | 
			
		||||
#include "RwDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/rwHelpers.h>
 | 
			
		||||
#include <mission/acs/rwHelpers.h>
 | 
			
		||||
 | 
			
		||||
RwDummy::RwDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie),
 | 
			
		||||
 | 
			
		||||
      statusSet(this),
 | 
			
		||||
      lastResetStatusSet(this),
 | 
			
		||||
      tmDataset(this),
 | 
			
		||||
      rwSpeedActuationSet(*this) {}
 | 
			
		||||
 | 
			
		||||
RwDummy::~RwDummy() {}
 | 
			
		||||
 | 
			
		||||
void RwDummy::doStartUp() {}
 | 
			
		||||
void RwDummy::doStartUp() {
 | 
			
		||||
  statusSet.setReportingEnabled(true);
 | 
			
		||||
  setMode(MODE_ON);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RwDummy::doShutDown() {}
 | 
			
		||||
void RwDummy::doShutDown() {
 | 
			
		||||
  statusSet.setReportingEnabled(false);
 | 
			
		||||
  setMode(MODE_OFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RwDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) { return NOTHING_TO_SEND; }
 | 
			
		||||
 | 
			
		||||
@@ -37,6 +48,9 @@ uint32_t RwDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return
 | 
			
		||||
 | 
			
		||||
ReturnValue_t RwDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                               LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(rws::RW_SPEED, &rwSpeed);
 | 
			
		||||
  localDataPoolMap.emplace(rws::RAMP_TIME, &rampTime);
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(rws::TEMPERATURE_C, new PoolEntry<int32_t>({0}));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(rws::CURR_SPEED, new PoolEntry<int32_t>({0}));
 | 
			
		||||
@@ -71,5 +85,29 @@ ReturnValue_t RwDummy::initializeLocalDataPool(localpool::DataPool &localDataPoo
 | 
			
		||||
  localDataPoolMap.emplace(rws::SPI_BYTES_READ, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(rws::SPI_REG_OVERRUN_ERRORS, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(rws::SPI_TOTAL_ERRORS, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  poolManager.subscribeForDiagPeriodicPacket(
 | 
			
		||||
      subdp::DiagnosticsHkPeriodicParams(statusSet.getSid(), false, 12.0));
 | 
			
		||||
  poolManager.subscribeForRegularPeriodicPacket(
 | 
			
		||||
      subdp::RegularHkPeriodicParams(tmDataset.getSid(), false, 30.0));
 | 
			
		||||
  poolManager.subscribeForRegularPeriodicPacket(
 | 
			
		||||
      subdp::RegularHkPeriodicParams(lastResetStatusSet.getSid(), false, 30.0));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *RwDummy::getDataSetHandle(sid_t sid) {
 | 
			
		||||
  switch (sid.ownerSetId) {
 | 
			
		||||
    case (rws::SetIds::STATUS_SET_ID): {
 | 
			
		||||
      return &statusSet;
 | 
			
		||||
    }
 | 
			
		||||
    case (rws::SetIds::LAST_RESET_ID): {
 | 
			
		||||
      return &lastResetStatusSet;
 | 
			
		||||
    }
 | 
			
		||||
    case (rws::SetIds::SPEED_CMD_SET): {
 | 
			
		||||
      return &rwSpeedActuationSet;
 | 
			
		||||
    }
 | 
			
		||||
    case (rws::SetIds::TM_SET_ID): {
 | 
			
		||||
      return &tmDataset;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
#define DUMMIES_RWDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/acs/rwHelpers.h>
 | 
			
		||||
 | 
			
		||||
class RwDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
@@ -15,6 +16,14 @@ class RwDummy : public DeviceHandlerBase {
 | 
			
		||||
  virtual ~RwDummy();
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  rws::StatusSet statusSet;
 | 
			
		||||
  rws::LastResetSatus lastResetStatusSet;
 | 
			
		||||
  rws::TmDataset tmDataset;
 | 
			
		||||
  rws::RwSpeedActuationSet rwSpeedActuationSet;
 | 
			
		||||
 | 
			
		||||
  PoolEntry<int32_t> rwSpeed = PoolEntry<int32_t>({0});
 | 
			
		||||
  PoolEntry<uint16_t> rampTime = PoolEntry<uint16_t>({10});
 | 
			
		||||
 | 
			
		||||
  void doStartUp() override;
 | 
			
		||||
  void doShutDown() override;
 | 
			
		||||
  ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
 | 
			
		||||
@@ -28,6 +37,7 @@ class RwDummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* DUMMIES_RWDUMMY_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,15 @@
 | 
			
		||||
#include "StarTrackerDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <linux/devices/devicedefinitions/StarTrackerDefinitions.h>
 | 
			
		||||
#include <mission/acs/str/strHelpers.h>
 | 
			
		||||
 | 
			
		||||
StarTrackerDummy::StarTrackerDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
 | 
			
		||||
StarTrackerDummy::~StarTrackerDummy() {}
 | 
			
		||||
 | 
			
		||||
void StarTrackerDummy::doStartUp() {}
 | 
			
		||||
void StarTrackerDummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
 | 
			
		||||
void StarTrackerDummy::doShutDown() {}
 | 
			
		||||
void StarTrackerDummy::doShutDown() { setMode(_MODE_POWER_DOWN); }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t StarTrackerDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
@@ -40,7 +40,7 @@ uint32_t StarTrackerDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo)
 | 
			
		||||
 | 
			
		||||
ReturnValue_t StarTrackerDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                        LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(startracker::MCU_TEMPERATURE, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::MCU_TEMPERATURE, new PoolEntry<float>({10.0}, true));
 | 
			
		||||
 | 
			
		||||
  localDataPoolMap.emplace(startracker::TICKS_SOLUTION_SET, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::TIME_SOLUTION_SET, new PoolEntry<uint64_t>({0}));
 | 
			
		||||
@@ -64,6 +64,7 @@ ReturnValue_t StarTrackerDummy::initializeLocalDataPool(localpool::DataPool &loc
 | 
			
		||||
  localDataPoolMap.emplace(startracker::LISA_NR_CLOSE, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::TRUST_WORTHY, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::STABLE_COUNT, new PoolEntry<uint32_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::STR_MODE, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(startracker::SOLUTION_STRATEGY, new PoolEntry<uint8_t>({0}));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ SusDummy::SusDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
 | 
			
		||||
SusDummy::~SusDummy() {}
 | 
			
		||||
 | 
			
		||||
void SusDummy::doStartUp() { setMode(MODE_NORMAL); }
 | 
			
		||||
void SusDummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
 | 
			
		||||
void SusDummy::doShutDown() { setMode(MODE_OFF); }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define DUMMIES_SUSDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/susMax1227Helpers.h>
 | 
			
		||||
#include <mission/acs/susMax1227Helpers.h>
 | 
			
		||||
 | 
			
		||||
class SusDummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#include "SyrlinksDummy.h"
 | 
			
		||||
 | 
			
		||||
#include <mission/devices/devicedefinitions/SyrlinksDefinitions.h>
 | 
			
		||||
#include <mission/com/syrlinksDefs.h>
 | 
			
		||||
 | 
			
		||||
SyrlinksDummy::SyrlinksDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
@@ -40,7 +40,7 @@ uint32_t SyrlinksDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { r
 | 
			
		||||
 | 
			
		||||
ReturnValue_t SyrlinksDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                     LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(syrlinks::TEMP_BASEBAND_BOARD, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(syrlinks::TEMP_POWER_AMPLIFIER, new PoolEntry<float>({0}));
 | 
			
		||||
  localDataPoolMap.emplace(syrlinks::TEMP_BASEBAND_BOARD, new PoolEntry<float>({10}, true));
 | 
			
		||||
  localDataPoolMap.emplace(syrlinks::TEMP_POWER_AMPLIFIER, new PoolEntry<float>({10}, true));
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +1,149 @@
 | 
			
		||||
#include "TemperatureSensorInserter.h"
 | 
			
		||||
 | 
			
		||||
#include <fsfw/datapool/PoolReadGuard.h>
 | 
			
		||||
#include <objects/systemObjectList.h>
 | 
			
		||||
 | 
			
		||||
#include <cmath>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <utility>
 | 
			
		||||
 | 
			
		||||
TemperatureSensorInserter::TemperatureSensorInserter(object_id_t objectId,
 | 
			
		||||
                                                     Max31865DummyMap tempSensorDummies_,
 | 
			
		||||
                                                     Tmp1075DummyMap tempTmpSensorDummies_)
 | 
			
		||||
    : SystemObject(objects::THERMAL_TEMP_INSERTER),
 | 
			
		||||
TemperatureSensorInserter::TemperatureSensorInserter(
 | 
			
		||||
    object_id_t objectId, Max31865DummyMap tempSensorDummies_,
 | 
			
		||||
    std::optional<Tmp1075DummyMap> tempTmpSensorDummies_)
 | 
			
		||||
    : SystemObject(objectId),
 | 
			
		||||
      max31865DummyMap(std::move(tempSensorDummies_)),
 | 
			
		||||
      tmp1075DummyMap(std::move(tempTmpSensorDummies_)) {}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t TemperatureSensorInserter::initialize() {
 | 
			
		||||
  if (performTest) {
 | 
			
		||||
    if (testCase == TestCase::COOL_SYRLINKS) {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  testCase = TestCase::NONE;
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t TemperatureSensorInserter::performOperation(uint8_t opCode) {
 | 
			
		||||
  /*
 | 
			
		||||
  ReturnValue_t result = max31865PlocHeatspreaderSet.read();
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
    sif::warning << "Failed to read temperature from MAX31865 dataset" << std::endl;
 | 
			
		||||
  // TODO: deviceSensors
 | 
			
		||||
  if (not tempsWereInitialized) {
 | 
			
		||||
    for (auto& rtdDummy : max31865DummyMap) {
 | 
			
		||||
      rtdDummy.second->setTemperature(10, true);
 | 
			
		||||
    }
 | 
			
		||||
    if (tmp1075DummyMap.has_value()) {
 | 
			
		||||
      for (auto& tmpDummy : tmp1075DummyMap.value()) {
 | 
			
		||||
        tmpDummy.second->setTemperature(10, true);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    tempsWereInitialized = true;
 | 
			
		||||
  }
 | 
			
		||||
  max31865PlocHeatspreaderSet.rtdValue = value - 5;
 | 
			
		||||
  max31865PlocHeatspreaderSet.temperatureCelcius = value;
 | 
			
		||||
  if ((iteration % 100) < 20) {
 | 
			
		||||
    max31865PlocHeatspreaderSet.setValidity(false, true);
 | 
			
		||||
  } else {
 | 
			
		||||
    max31865PlocHeatspreaderSet.setValidity(true, true);
 | 
			
		||||
 | 
			
		||||
  switch (testCase) {
 | 
			
		||||
    case (TestCase::NONE): {
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_SYRLINKS): {
 | 
			
		||||
      // TODO: How do I insert this?
 | 
			
		||||
      // Does not work on EM, where a real syrlinks device is connected.
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        lp_var_t<float> tempSyrlinksBasebandBoard =
 | 
			
		||||
            lp_var_t<float>(objects::SYRLINKS_HANDLER, syrlinks::TEMP_BASEBAND_BOARD);
 | 
			
		||||
        PoolReadGuard pg(&tempSyrlinksBasebandBoard);
 | 
			
		||||
        tempSyrlinksBasebandBoard.value = -50;
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        lp_var_t<float> tempSyrlinksBasebandBoard =
 | 
			
		||||
            lp_var_t<float>(objects::SYRLINKS_HANDLER, syrlinks::TEMP_BASEBAND_BOARD);
 | 
			
		||||
        PoolReadGuard pg(&tempSyrlinksBasebandBoard);
 | 
			
		||||
        tempSyrlinksBasebandBoard.value = 0;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_HPA): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold HPA temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_9_IC12_HPA]->setTemperature(-60, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        sif::debug << "Setting HPA temperature back to normal" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_9_IC12_HPA]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_MGT): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold MGT temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_15_IC18_IMTQ]->setTemperature(-60, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        sif::debug << "Setting MGT temperature back to normal" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_15_IC18_IMTQ]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_STR):
 | 
			
		||||
    case (TestCase::COLD_STR_CONSECUTIVE): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold STR temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_4_IC7_STARTRACKER]->setTemperature(-40, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        sif::debug << "Setting STR temperature back to normal" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_4_IC7_STARTRACKER]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (testCase == TestCase::COLD_STR_CONSECUTIVE) {
 | 
			
		||||
        if (cycles == 45) {
 | 
			
		||||
          sif::debug << "Setting cold STR temperature again" << std::endl;
 | 
			
		||||
          max31865DummyMap[objects::RTD_4_IC7_STARTRACKER]->setTemperature(-40, true);
 | 
			
		||||
        }
 | 
			
		||||
        if (cycles == 60) {
 | 
			
		||||
          sif::debug << "Setting STR temperature back to normal again" << std::endl;
 | 
			
		||||
          max31865DummyMap[objects::RTD_4_IC7_STARTRACKER]->setTemperature(0, true);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_PLOC_CONSECUTIVE): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold PLOC temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_0_IC3_PLOC_HEATSPREADER]->setTemperature(-15, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        sif::debug << "Setting warmer PLOC temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_0_IC3_PLOC_HEATSPREADER]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 45) {
 | 
			
		||||
        sif::debug << "Setting cold PLOC temperature again" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_0_IC3_PLOC_HEATSPREADER]->setTemperature(-15, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 60) {
 | 
			
		||||
        sif::debug << "Setting warmer PLOC temperature again" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_0_IC3_PLOC_HEATSPREADER]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_CAMERA): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold CAM temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_2_IC5_4K_CAMERA]->setTemperature(-40, true);
 | 
			
		||||
      }
 | 
			
		||||
      if (cycles == 30) {
 | 
			
		||||
        sif::debug << "Setting CAM temperature back to normal" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_2_IC5_4K_CAMERA]->setTemperature(0, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_PLOC_STAYS_COLD): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold PLOC temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_0_IC3_PLOC_HEATSPREADER]->setTemperature(-40, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case (TestCase::COLD_CAMERA_STAYS_COLD): {
 | 
			
		||||
      if (cycles == 15) {
 | 
			
		||||
        sif::debug << "Setting cold PLOC temperature" << std::endl;
 | 
			
		||||
        max31865DummyMap[objects::RTD_2_IC5_4K_CAMERA]->setTemperature(-40, true);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  max31865PlocHeatspreaderSet.commit();
 | 
			
		||||
  */
 | 
			
		||||
  cycles++;
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t TemperatureSensorInserter::initializeAfterTaskCreation() { return returnvalue::OK; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <fsfw/controller/ExtendedControllerBase.h>
 | 
			
		||||
#include <mission/devices/devicedefinitions/Max31865Definitions.h>
 | 
			
		||||
#include <mission/com/syrlinksDefs.h>
 | 
			
		||||
#include <mission/tcs/Max31865Definitions.h>
 | 
			
		||||
 | 
			
		||||
#include "Max31865Dummy.h"
 | 
			
		||||
#include "Tmp1075Dummy.h"
 | 
			
		||||
@@ -11,19 +12,33 @@ class TemperatureSensorInserter : public ExecutableObjectIF, public SystemObject
 | 
			
		||||
  using Max31865DummyMap = std::map<object_id_t, Max31865Dummy*>;
 | 
			
		||||
  using Tmp1075DummyMap = std::map<object_id_t, Tmp1075Dummy*>;
 | 
			
		||||
  explicit TemperatureSensorInserter(object_id_t objectId, Max31865DummyMap tempSensorDummies_,
 | 
			
		||||
                                     Tmp1075DummyMap tempTmpSensorDummies_);
 | 
			
		||||
                                     std::optional<Tmp1075DummyMap> tempTmpSensorDummies_);
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t initialize() override;
 | 
			
		||||
  ReturnValue_t initializeAfterTaskCreation() override;
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  ReturnValue_t performOperation(uint8_t opCode) override;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  Max31865DummyMap max31865DummyMap;
 | 
			
		||||
  Tmp1075DummyMap tmp1075DummyMap;
 | 
			
		||||
  enum TestCase { NONE = 0, COOL_SYRLINKS = 1 };
 | 
			
		||||
  std::optional<Tmp1075DummyMap> tmp1075DummyMap;
 | 
			
		||||
 | 
			
		||||
  enum TestCase {
 | 
			
		||||
    NONE = 0,
 | 
			
		||||
    COLD_SYRLINKS = 1,
 | 
			
		||||
    COLD_HPA = 2,
 | 
			
		||||
    COLD_MGT = 3,
 | 
			
		||||
    COLD_STR = 4,
 | 
			
		||||
    COLD_STR_CONSECUTIVE = 5,
 | 
			
		||||
    COLD_CAMERA = 6,
 | 
			
		||||
    COLD_PLOC_CONSECUTIVE = 7,
 | 
			
		||||
    COLD_PLOC_STAYS_COLD = 8,
 | 
			
		||||
    COLD_CAMERA_STAYS_COLD = 9
 | 
			
		||||
  };
 | 
			
		||||
  int iteration = 0;
 | 
			
		||||
  bool performTest = false;
 | 
			
		||||
  uint32_t cycles = 0;
 | 
			
		||||
  bool tempsWereInitialized = false;
 | 
			
		||||
  TestCase testCase = TestCase::NONE;
 | 
			
		||||
 | 
			
		||||
  // void noise();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +1,64 @@
 | 
			
		||||
#include "Tmp1075Dummy.h"
 | 
			
		||||
 | 
			
		||||
#include "mission/devices/devicedefinitions/Tmp1075Definitions.h"
 | 
			
		||||
#include <fsfw/datapool/PoolReadGuard.h>
 | 
			
		||||
#include <mission/tcs/Tmp1075Definitions.h>
 | 
			
		||||
 | 
			
		||||
using namespace returnvalue;
 | 
			
		||||
 | 
			
		||||
Tmp1075Dummy::Tmp1075Dummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie), set(this) {}
 | 
			
		||||
 | 
			
		||||
void Tmp1075Dummy::doStartUp() { setMode(MODE_NORMAL); }
 | 
			
		||||
void Tmp1075Dummy::doShutDown() { setMode(MODE_OFF); }
 | 
			
		||||
void Tmp1075Dummy::doStartUp() { setMode(MODE_ON); }
 | 
			
		||||
void Tmp1075Dummy::doShutDown() {
 | 
			
		||||
  PoolReadGuard pg(&set);
 | 
			
		||||
  set.setValidity(false, true);
 | 
			
		||||
  setMode(MODE_OFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) { return OK; }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
 | 
			
		||||
                                                    const uint8_t *commandData,
 | 
			
		||||
                                                    size_t commandDataLen) {
 | 
			
		||||
  return 0;
 | 
			
		||||
  return NOTHING_TO_SEND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::scanForReply(const uint8_t *start, size_t len,
 | 
			
		||||
                                         DeviceCommandId_t *foundId, size_t *foundLen) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Tmp1075Dummy::setTemperature(float temperature, bool valid) {
 | 
			
		||||
  PoolReadGuard pg(&set);
 | 
			
		||||
  set.temperatureCelcius.value = temperature;
 | 
			
		||||
  set.setValidity(valid, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Tmp1075Dummy::fillCommandAndReplyMap() {}
 | 
			
		||||
 | 
			
		||||
uint32_t Tmp1075Dummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 1000; }
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                                    LocalDataPoolManager &poolManager) {
 | 
			
		||||
  localDataPoolMap.emplace(TMP1075::TEMPERATURE_C_TMP1075, new PoolEntry<float>({0.0}));
 | 
			
		||||
  localDataPoolMap.emplace(TMP1075::TEMPERATURE_C_TMP1075, new PoolEntry<float>({10.0}, true));
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t Tmp1075Dummy::setHealth(HealthState health) {
 | 
			
		||||
  if (health == FAULTY or health == PERMANENT_FAULTY) {
 | 
			
		||||
    setMode(_MODE_SHUT_DOWN);
 | 
			
		||||
  }
 | 
			
		||||
  return DeviceHandlerBase::setHealth(health);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LocalPoolDataSetBase *Tmp1075Dummy::getDataSetHandle(sid_t sid) { return &set; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,14 @@
 | 
			
		||||
#ifndef EIVE_OBSW_TMP1075DUMMY_H
 | 
			
		||||
#define EIVE_OBSW_TMP1075DUMMY_H
 | 
			
		||||
 | 
			
		||||
#include <mission/tcs/Tmp1075Definitions.h>
 | 
			
		||||
 | 
			
		||||
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/Tmp1075Definitions.h"
 | 
			
		||||
 | 
			
		||||
class Tmp1075Dummy : public DeviceHandlerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  Tmp1075Dummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie);
 | 
			
		||||
  void setTemperature(float temperature, bool setValid);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  TMP1075::Tmp1075Dataset set;
 | 
			
		||||
@@ -24,6 +26,7 @@ class Tmp1075Dummy : public DeviceHandlerBase {
 | 
			
		||||
  uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
 | 
			
		||||
  ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
 | 
			
		||||
                                        LocalDataPoolManager &poolManager) override;
 | 
			
		||||
  ReturnValue_t setHealth(HealthState health) override;
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
#include "helpers.h"
 | 
			
		||||
#include "helperFactory.h"
 | 
			
		||||
 | 
			
		||||
#include <dummies/AcuDummy.h>
 | 
			
		||||
#include <dummies/BpxDummy.h>
 | 
			
		||||
@@ -18,32 +18,39 @@
 | 
			
		||||
#include <dummies/PlPcduDummy.h>
 | 
			
		||||
#include <dummies/PlocMpsocDummy.h>
 | 
			
		||||
#include <dummies/PlocSupervisorDummy.h>
 | 
			
		||||
#include <dummies/RadSensorDummy.h>
 | 
			
		||||
#include <dummies/RwDummy.h>
 | 
			
		||||
#include <dummies/SaDeploymentDummy.h>
 | 
			
		||||
#include <dummies/ScexDummy.h>
 | 
			
		||||
#include <dummies/StarTrackerDummy.h>
 | 
			
		||||
#include <dummies/SusDummy.h>
 | 
			
		||||
#include <dummies/SyrlinksDummy.h>
 | 
			
		||||
#include <fsfw/devicehandlers/HealthDevice.h>
 | 
			
		||||
#include <fsfw_hal/common/gpio/GpioIF.h>
 | 
			
		||||
#include <mission/power/gsDefs.h>
 | 
			
		||||
#include <mission/system/acs/ImtqAssembly.h>
 | 
			
		||||
#include <mission/system/acs/StrAssembly.h>
 | 
			
		||||
#include <mission/system/objects/CamSwitcher.h>
 | 
			
		||||
#include <mission/system/objects/ImtqAssembly.h>
 | 
			
		||||
#include <mission/system/objects/StrAssembly.h>
 | 
			
		||||
#include <mission/system/objects/TcsBoardAssembly.h>
 | 
			
		||||
#include <mission/system/tcs/TcsBoardAssembly.h>
 | 
			
		||||
 | 
			
		||||
#include "TemperatureSensorInserter.h"
 | 
			
		||||
#include "dummies/Max31865Dummy.h"
 | 
			
		||||
#include "dummies/SusDummy.h"
 | 
			
		||||
#include "dummies/Tmp1075Dummy.h"
 | 
			
		||||
#include "mission/core/GenericFactory.h"
 | 
			
		||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
 | 
			
		||||
#include "mission/system/tree/acsModeTree.h"
 | 
			
		||||
#include "mission/system/tree/comModeTree.h"
 | 
			
		||||
#include "mission/genericFactory.h"
 | 
			
		||||
#include "mission/system/acs/acsModeTree.h"
 | 
			
		||||
#include "mission/system/com/comModeTree.h"
 | 
			
		||||
#include "mission/system/tcs/tcsModeTree.h"
 | 
			
		||||
#include "mission/system/tree/payloadModeTree.h"
 | 
			
		||||
#include "mission/system/tree/tcsModeTree.h"
 | 
			
		||||
#include "mission/tcs/defs.h"
 | 
			
		||||
 | 
			
		||||
void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpioIF) {
 | 
			
		||||
void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpioIF,
 | 
			
		||||
                          bool enableHkSets) {
 | 
			
		||||
  new ComIFDummy(objects::DUMMY_COM_IF);
 | 
			
		||||
  auto* comCookieDummy = new ComCookieDummy();
 | 
			
		||||
  new BpxDummy(objects::BPX_BATT_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  if (cfg.addBpxBattDummy) {
 | 
			
		||||
    new BpxDummy(objects::BPX_BATT_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addCoreCtrlCfg) {
 | 
			
		||||
    new CoreControllerDummy(objects::CORE_CONTROLLER);
 | 
			
		||||
  }
 | 
			
		||||
@@ -56,13 +63,16 @@ void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpio
 | 
			
		||||
  rws[1] = new RwDummy(objects::RW2, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  rws[2] = new RwDummy(objects::RW3, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  rws[3] = new RwDummy(objects::RW4, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  ObjectFactory::createRwAssy(pwrSwitcher, pcdu::Switches::PDU2_CH2_RW_5V, rws, rwIds);
 | 
			
		||||
  ObjectFactory::createRwAssy(pwrSwitcher, power::Switches::PDU2_CH2_RW_5V, rws, rwIds);
 | 
			
		||||
  new SaDeplDummy(objects::SOLAR_ARRAY_DEPL_HANDLER);
 | 
			
		||||
  auto* strAssy = new StrAssembly(objects::STR_ASSY);
 | 
			
		||||
  strAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
 | 
			
		||||
  auto* strDummy =
 | 
			
		||||
      new StarTrackerDummy(objects::STAR_TRACKER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  strDummy->connectModeTreeParent(*strAssy);
 | 
			
		||||
 | 
			
		||||
  if (cfg.addStrDummy) {
 | 
			
		||||
    auto* strAssy = new StrAssembly(objects::STR_ASSY);
 | 
			
		||||
    strAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
 | 
			
		||||
    auto* strDummy =
 | 
			
		||||
        new StarTrackerDummy(objects::STAR_TRACKER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    strDummy->connectModeTreeParent(*strAssy);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addSyrlinksDummies) {
 | 
			
		||||
    auto* syrlinksDummy =
 | 
			
		||||
        new SyrlinksDummy(objects::SYRLINKS_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
@@ -70,18 +80,22 @@ void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpio
 | 
			
		||||
  }
 | 
			
		||||
  auto* imtqAssy = new ImtqAssembly(objects::IMTQ_ASSY);
 | 
			
		||||
  imtqAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
 | 
			
		||||
  auto* imtqDummy = new ImtqDummy(objects::IMTQ_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  auto* imtqDummy = new ImtqDummy(objects::IMTQ_HANDLER, objects::DUMMY_COM_IF, comCookieDummy,
 | 
			
		||||
                                  power::Switches::PDU1_CH3_MGT_5V, enableHkSets);
 | 
			
		||||
  imtqDummy->enableThermalModule(ThermalStateCfg());
 | 
			
		||||
  imtqDummy->setPowerSwitcher(&pwrSwitcher);
 | 
			
		||||
  imtqDummy->connectModeTreeParent(*imtqAssy);
 | 
			
		||||
  if (cfg.addPowerDummies) {
 | 
			
		||||
    new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  if (cfg.addOnlyAcuDummy) {
 | 
			
		||||
    new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy, enableHkSets);
 | 
			
		||||
  } else if (cfg.addPowerDummies) {
 | 
			
		||||
    new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy, enableHkSets);
 | 
			
		||||
    new PduDummy(objects::PDU1_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    new PduDummy(objects::PDU2_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    new P60DockDummy(objects::P60DOCK_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (cfg.addAcsBoardDummies) {
 | 
			
		||||
    std::array<DeviceHandlerBase*, 8> assemblyDhbs;
 | 
			
		||||
    std::array<DeviceHandlerBase*, 8> assemblyDhbs{};
 | 
			
		||||
    assemblyDhbs[0] =
 | 
			
		||||
        new MgmLIS3MDLDummy(objects::MGM_0_LIS3_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    assemblyDhbs[1] =
 | 
			
		||||
@@ -103,7 +117,7 @@ void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpio
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (cfg.addSusDummies) {
 | 
			
		||||
    std::array<DeviceHandlerBase*, 12> suses;
 | 
			
		||||
    std::array<DeviceHandlerBase*, 12> suses{};
 | 
			
		||||
    suses[0] =
 | 
			
		||||
        new SusDummy(objects::SUS_0_N_LOC_XFYFZM_PT_XF, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    suses[1] =
 | 
			
		||||
@@ -182,47 +196,74 @@ void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitcher, GpioIF* gpio
 | 
			
		||||
        objects::RTD_15_IC18_IMTQ,
 | 
			
		||||
        new Max31865Dummy(objects::RTD_15_IC18_IMTQ, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
 | 
			
		||||
    std::map<object_id_t, Tmp1075Dummy*> tmpSensorDummies;
 | 
			
		||||
    tmpSensorDummies.emplace(
 | 
			
		||||
        objects::TMP1075_HANDLER_TCS_0,
 | 
			
		||||
        new Tmp1075Dummy(objects::TMP1075_HANDLER_TCS_0, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
    tmpSensorDummies.emplace(
 | 
			
		||||
        objects::TMP1075_HANDLER_TCS_1,
 | 
			
		||||
        new Tmp1075Dummy(objects::TMP1075_HANDLER_TCS_1, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
    tmpSensorDummies.emplace(
 | 
			
		||||
        objects::TMP1075_HANDLER_PLPCDU_0,
 | 
			
		||||
        new Tmp1075Dummy(objects::TMP1075_HANDLER_PLPCDU_0, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
    tmpSensorDummies.emplace(
 | 
			
		||||
        objects::TMP1075_HANDLER_PLPCDU_1,
 | 
			
		||||
        new Tmp1075Dummy(objects::TMP1075_HANDLER_PLPCDU_1, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
    tmpSensorDummies.emplace(
 | 
			
		||||
        objects::TMP1075_HANDLER_IF_BOARD,
 | 
			
		||||
        new Tmp1075Dummy(objects::TMP1075_HANDLER_IF_BOARD, objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
 | 
			
		||||
    std::optional<TemperatureSensorInserter::Tmp1075DummyMap> tmpSensorDummies;
 | 
			
		||||
    if (cfg.addTmpDummies) {
 | 
			
		||||
      TemperatureSensorInserter::Tmp1075DummyMap tmpDummyMap;
 | 
			
		||||
      if (cfg.tmp1075Cfg.addTcsBrd0) {
 | 
			
		||||
        tmpDummyMap.emplace(objects::TMP1075_HANDLER_TCS_0,
 | 
			
		||||
                            new Tmp1075Dummy(objects::TMP1075_HANDLER_TCS_0, objects::DUMMY_COM_IF,
 | 
			
		||||
                                             comCookieDummy));
 | 
			
		||||
      }
 | 
			
		||||
      if (cfg.tmp1075Cfg.addTcsBrd1) {
 | 
			
		||||
        tmpDummyMap.emplace(objects::TMP1075_HANDLER_TCS_1,
 | 
			
		||||
                            new Tmp1075Dummy(objects::TMP1075_HANDLER_TCS_1, objects::DUMMY_COM_IF,
 | 
			
		||||
                                             comCookieDummy));
 | 
			
		||||
      }
 | 
			
		||||
      if (cfg.tmp1075Cfg.addPlPcdu0) {
 | 
			
		||||
        tmpDummyMap.emplace(objects::TMP1075_HANDLER_PLPCDU_0,
 | 
			
		||||
                            new Tmp1075Dummy(objects::TMP1075_HANDLER_PLPCDU_0,
 | 
			
		||||
                                             objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
      }
 | 
			
		||||
      if (cfg.tmp1075Cfg.addPlPcdu1) {
 | 
			
		||||
        tmpDummyMap.emplace(objects::TMP1075_HANDLER_PLPCDU_1,
 | 
			
		||||
                            new Tmp1075Dummy(objects::TMP1075_HANDLER_PLPCDU_1,
 | 
			
		||||
                                             objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
      }
 | 
			
		||||
      if (cfg.tmp1075Cfg.addIfBrd) {
 | 
			
		||||
        tmpDummyMap.emplace(objects::TMP1075_HANDLER_IF_BOARD,
 | 
			
		||||
                            new Tmp1075Dummy(objects::TMP1075_HANDLER_IF_BOARD,
 | 
			
		||||
                                             objects::DUMMY_COM_IF, comCookieDummy));
 | 
			
		||||
      }
 | 
			
		||||
      tmpSensorDummies = std::move(tmpDummyMap);
 | 
			
		||||
    }
 | 
			
		||||
    new TemperatureSensorInserter(objects::THERMAL_TEMP_INSERTER, rtdSensorDummies,
 | 
			
		||||
                                  tmpSensorDummies);
 | 
			
		||||
    TcsBoardAssembly* tcsBoardAssy = ObjectFactory::createTcsBoardAssy(pwrSwitcher);
 | 
			
		||||
    TcsBoardAssembly* tcsBoardAssy =
 | 
			
		||||
        ObjectFactory::createTcsBoardAssy(pwrSwitcher, tcs::TCS_BOARD_SHORTLY_UNAVAILABLE);
 | 
			
		||||
    for (auto& rtd : rtdSensorDummies) {
 | 
			
		||||
      rtd.second->connectModeTreeParent(*tcsBoardAssy);
 | 
			
		||||
    }
 | 
			
		||||
    for (auto& tmp : tmpSensorDummies) {
 | 
			
		||||
      tmp.second->connectModeTreeParent(satsystem::tcs::SUBSYSTEM);
 | 
			
		||||
    if (tmpSensorDummies.has_value()) {
 | 
			
		||||
      for (auto& tmp : tmpSensorDummies.value()) {
 | 
			
		||||
        tmp.second->connectModeTreeParent(satsystem::tcs::SUBSYSTEM);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  auto* camSwitcher =
 | 
			
		||||
      new CamSwitcher(objects::CAM_SWITCHER, pwrSwitcher, pcdu::Switches::PDU2_CH8_PAYLOAD_CAMERA);
 | 
			
		||||
  camSwitcher->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  auto* scexDummy = new ScexDummy(objects::SCEX, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  scexDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  auto* plPcduDummy =
 | 
			
		||||
      new PlPcduDummy(objects::PLPCDU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
  plPcduDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  if (cfg.addCamSwitcherDummy) {
 | 
			
		||||
    auto* camSwitcher = new CamSwitcher(objects::CAM_SWITCHER, pwrSwitcher,
 | 
			
		||||
                                        power::Switches::PDU2_CH8_PAYLOAD_CAMERA);
 | 
			
		||||
    camSwitcher->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addScexDummy) {
 | 
			
		||||
    auto* scexDummy = new ScexDummy(objects::SCEX, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    scexDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addPlPcduDummy) {
 | 
			
		||||
    auto* plPcduDummy =
 | 
			
		||||
        new PlPcduDummy(objects::PLPCDU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    plPcduDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addPlocDummies) {
 | 
			
		||||
    auto* plocMpsocDummy =
 | 
			
		||||
        new PlocMpsocDummy(objects::PLOC_MPSOC_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    plocMpsocDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
    auto* plocSupervisorDummy = new PlocSupervisorDummy(objects::PLOC_SUPERVISOR_HANDLER,
 | 
			
		||||
                                                        objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    auto* plocSupervisorDummy = new PlocSupervisorDummy(
 | 
			
		||||
        objects::PLOC_SUPERVISOR_HANDLER, objects::DUMMY_COM_IF, comCookieDummy, pwrSwitcher);
 | 
			
		||||
    plocSupervisorDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
  if (cfg.addRadSensorDummy) {
 | 
			
		||||
    auto* radSensorDummy =
 | 
			
		||||
        new RadSensorDummy(objects::RAD_SENSOR, objects::DUMMY_COM_IF, comCookieDummy);
 | 
			
		||||
    radSensorDummy->connectModeTreeParent(satsystem::payload::SUBSYSTEM);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								dummies/helperFactory.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								dummies/helperFactory.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <fsfw/power/PowerSwitchIF.h>
 | 
			
		||||
 | 
			
		||||
class GpioIF;
 | 
			
		||||
 | 
			
		||||
namespace dummy {
 | 
			
		||||
 | 
			
		||||
struct Tmp1075Cfg {
 | 
			
		||||
  bool addTcsBrd0 = true;
 | 
			
		||||
  bool addTcsBrd1 = true;
 | 
			
		||||
  bool addPlPcdu0 = true;
 | 
			
		||||
  bool addPlPcdu1 = true;
 | 
			
		||||
  bool addIfBrd = true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Default values targeted towards EM.
 | 
			
		||||
struct DummyCfg {
 | 
			
		||||
  bool addCoreCtrlCfg = true;
 | 
			
		||||
  // Special variant because the ACU broke. Overrides addPowerDummies, only ACU dummy will be added.
 | 
			
		||||
  bool addOnlyAcuDummy = false;
 | 
			
		||||
  bool addPowerDummies = true;
 | 
			
		||||
  bool addBpxBattDummy = true;
 | 
			
		||||
  bool addSyrlinksDummies = true;
 | 
			
		||||
  bool addAcsBoardDummies = true;
 | 
			
		||||
  bool addSusDummies = true;
 | 
			
		||||
  bool addTempSensorDummies = true;
 | 
			
		||||
  bool addRtdComIFDummy = true;
 | 
			
		||||
  bool addPlocDummies = true;
 | 
			
		||||
  bool addStrDummy = true;
 | 
			
		||||
  bool addTmpDummies = true;
 | 
			
		||||
  bool addRadSensorDummy = true;
 | 
			
		||||
  bool addPlPcduDummy = false;
 | 
			
		||||
  Tmp1075Cfg tmp1075Cfg;
 | 
			
		||||
  bool addCamSwitcherDummy = false;
 | 
			
		||||
  bool addScexDummy = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitch, GpioIF* gpioIF, bool enableHkSets);
 | 
			
		||||
 | 
			
		||||
}  // namespace dummy
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <fsfw/power/PowerSwitchIF.h>
 | 
			
		||||
 | 
			
		||||
class GpioIF;
 | 
			
		||||
 | 
			
		||||
namespace dummy {
 | 
			
		||||
 | 
			
		||||
struct DummyCfg {
 | 
			
		||||
  bool addCoreCtrlCfg = true;
 | 
			
		||||
  bool addPowerDummies = true;
 | 
			
		||||
  bool addSyrlinksDummies = true;
 | 
			
		||||
  bool addAcsBoardDummies = true;
 | 
			
		||||
  bool addSusDummies = true;
 | 
			
		||||
  bool addTempSensorDummies = true;
 | 
			
		||||
  bool addRtdComIFDummy = true;
 | 
			
		||||
  bool addPlocDummies = true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitch, GpioIF* gpioIF);
 | 
			
		||||
 | 
			
		||||
}  // namespace dummy
 | 
			
		||||
							
								
								
									
										2
									
								
								fsfw
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								fsfw
									
									
									
									
									
								
							 Submodule fsfw updated: 5250423d1d...cc3e64e70d
									
								
							@@ -86,193 +86,231 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
10802;0x2a32;SERIALIZATION_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
10803;0x2a33;FILESTORE_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
10804;0x2a34;FILENAME_TOO_LARGE_ERROR;LOW;P1: Transaction step ID, P2: 0 for source file name, 1 for dest file name;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;No description;mission/acsDefs.h
 | 
			
		||||
11201;0x2bc1;SAFE_RATE_RECOVERY;MEDIUM;No description;mission/acsDefs.h
 | 
			
		||||
11202;0x2bc2;MULTIPLE_RW_INVALID;HIGH;No description;mission/acsDefs.h
 | 
			
		||||
11203;0x2bc3;MEKF_INVALID_INFO;INFO;No description;mission/acsDefs.h
 | 
			
		||||
11204;0x2bc4;MEKF_INVALID_MODE_VIOLATION;HIGH;No description;mission/acsDefs.h
 | 
			
		||||
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;No description;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11402;0x2c8a;HEATER_WENT_ON;INFO;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11403;0x2c8b;HEATER_WENT_OFF;INFO;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11404;0x2c8c;SWITCH_ALREADY_ON;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11405;0x2c8d;SWITCH_ALREADY_OFF;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/ImtqHandler.h
 | 
			
		||||
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
10805;0x2a35;HANDLING_CFDP_REQUEST_FAILED;LOW;CFDP request handling failed. P2: Returncode.;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;The limits for the rotation in safe mode were violated.;mission/acs/defs.h
 | 
			
		||||
11201;0x2bc1;SAFE_RATE_RECOVERY;MEDIUM;The system has recovered from a safe rate rotation violation.;mission/acs/defs.h
 | 
			
		||||
11202;0x2bc2;MULTIPLE_RW_INVALID;HIGH;Multiple RWs are invalid, uncommandable and therefore higher ACS modes cannot be maintained.;mission/acs/defs.h
 | 
			
		||||
11203;0x2bc3;MEKF_INVALID_INFO;INFO;MEKF was not able to compute a solution. P1: MEKF state on exit;mission/acs/defs.h
 | 
			
		||||
11204;0x2bc4;MEKF_RECOVERY;INFO;MEKF is able to compute a solution again.;mission/acs/defs.h
 | 
			
		||||
11205;0x2bc5;MEKF_AUTOMATIC_RESET;INFO;MEKF performed an automatic reset after detection of nonfinite values.;mission/acs/defs.h
 | 
			
		||||
11206;0x2bc6;MEKF_INVALID_MODE_VIOLATION;HIGH;MEKF was not able to compute a solution during any pointing ACS mode for a prolonged time.;mission/acs/defs.h
 | 
			
		||||
11207;0x2bc7;SAFE_MODE_CONTROLLER_FAILURE;HIGH;The ACS safe mode controller was not able to compute a solution and has failed. P1: Missing information about magnetic field, P2: Missing information about rotational rate;mission/acs/defs.h
 | 
			
		||||
11208;0x2bc8;TLE_TOO_OLD;INFO;The TLE for the SGP4 Propagator has become too old.;mission/acs/defs.h
 | 
			
		||||
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/power/defs.h
 | 
			
		||||
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/power/defs.h
 | 
			
		||||
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;No description;mission/power/defs.h
 | 
			
		||||
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/power/defs.h
 | 
			
		||||
11304;0x2c28;DATASET_READ_FAILED;INFO;The dataset read for the inputs of the Power Controller has failed.;mission/power/defs.h
 | 
			
		||||
11305;0x2c29;VOLTAGE_OUT_OF_BOUNDS;HIGH;No description;mission/power/defs.h
 | 
			
		||||
11306;0x2c2a;TIMEDELTA_OUT_OF_BOUNDS;LOW;Time difference for Coulomb Counter was too large. P1: time in s * 10;mission/power/defs.h
 | 
			
		||||
11307;0x2c2b;POWER_LEVEL_LOW;HIGH;The State of Charge is below the limit for payload use. Setting Payload to faulty.;mission/power/defs.h
 | 
			
		||||
11308;0x2c2c;POWER_LEVEL_CRITICAL;HIGH;The State of Charge is below the limit for higher modes. Setting Reaction Wheels to faulty.;mission/power/defs.h
 | 
			
		||||
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11402;0x2c8a;HEATER_WENT_ON;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11403;0x2c8b;HEATER_WENT_OFF;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11404;0x2c8c;SWITCH_ALREADY_ON;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11405;0x2c8d;SWITCH_ALREADY_OFF;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11607;0x2d57;SUPV_NOT_ON;LOW;SUPV not on for boot or shutdown process. P1: 0 for OFF transition, 1 for ON transition.;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11608;0x2d58;SUPV_REPLY_TIMEOUT;LOW;No description;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/acs/ImtqHandler.h
 | 
			
		||||
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/acs/rwHelpers.h
 | 
			
		||||
11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/acs/rwHelpers.h
 | 
			
		||||
11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
11903;0x2e7f;COM_ERROR_REPLY_RECEIVED;LOW;Received COM error. P1:  Communication Error ID (datasheet p32);mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12100;0x2f44;SANITIZATION_FAILED;LOW;No description;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
12101;0x2f45;MOUNTED_SD_CARD;INFO;No description;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12401;0x3071;INVALID_TC_FRAME;HIGH;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/PdecHandler.h
 | 
			
		||||
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/PdecHandler.h
 | 
			
		||||
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/PdecHandler.h
 | 
			
		||||
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/PdecHandler.h
 | 
			
		||||
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/PdecHandler.h
 | 
			
		||||
12407;0x3077;TOO_MANY_IRQS;MEDIUM;Too many IRQs over the time window of one second. P1: Allowed TCs;linux/ipcore/PdecHandler.h
 | 
			
		||||
12408;0x3078;POLL_SYSCALL_ERROR_PDEC;MEDIUM;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12409;0x3079;WRITE_SYSCALL_ERROR_PDEC;HIGH;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12410;0x307a;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/PdecHandler.h
 | 
			
		||||
12411;0x307b;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/PdecHandler.h
 | 
			
		||||
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12511;0x30df;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12512;0x30e0;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12513;0x30e1;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12514;0x30e2;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12515;0x30e3;STR_HELPER_SENDING_PACKET_FAILED;LOW;No description;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12516;0x30e4;STR_HELPER_REQUESTING_MSG_FAILED;LOW;No description;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/SusAssembly.h
 | 
			
		||||
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/objects/TcsBoardAssembly.h
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/devices/devicedefinitions/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;LOW;Could not get fix in maximum allowed time. P1: Maximum allowed time to get a fix after the GPS was switched on.;mission/devices/devicedefinitions/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/devices/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/devices/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/devices/P60DockHandler.h
 | 
			
		||||
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13632;0x3540;HDLC_CRC_ERROR;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13700;0x3584;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13800;0x35e8;MISSING_PACKET;LOW;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12401;0x3071;INVALID_TC_FRAME;HIGH;No description;linux/ipcore/pdec.h
 | 
			
		||||
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/pdec.h
 | 
			
		||||
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/pdec.h
 | 
			
		||||
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/pdec.h
 | 
			
		||||
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/pdec.h
 | 
			
		||||
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/pdec.h
 | 
			
		||||
12407;0x3077;TOO_MANY_IRQS;MEDIUM;Too many IRQs over the time window of one second. P1: Allowed TCs;linux/ipcore/pdec.h
 | 
			
		||||
12408;0x3078;POLL_SYSCALL_ERROR_PDEC;MEDIUM;No description;linux/ipcore/pdec.h
 | 
			
		||||
12409;0x3079;WRITE_SYSCALL_ERROR_PDEC;HIGH;No description;linux/ipcore/pdec.h
 | 
			
		||||
12410;0x307a;PDEC_TRYING_RESET_WITH_INIT;LOW;Trying a PDEC reset with complete re-initialization;linux/ipcore/pdec.h
 | 
			
		||||
12411;0x307b;PDEC_TRYING_RESET_NO_INIT;LOW;Trying a PDEC reset without re-initialization.;linux/ipcore/pdec.h
 | 
			
		||||
12412;0x307c;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/pdec.h
 | 
			
		||||
12413;0x307d;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/pdec.h
 | 
			
		||||
12414;0x307e;PDEC_INIT_FAILED;HIGH;PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues.;linux/ipcore/pdec.h
 | 
			
		||||
12415;0x307f;PDEC_CONFIG_CORRUPTED;HIGH;The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word;linux/ipcore/pdec.h
 | 
			
		||||
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/acs/StrComHandler.h
 | 
			
		||||
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/acs/StrComHandler.h
 | 
			
		||||
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/acs/StrComHandler.h
 | 
			
		||||
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/acs/StrComHandler.h
 | 
			
		||||
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/acs/StrComHandler.h
 | 
			
		||||
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/acs/StrComHandler.h
 | 
			
		||||
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/acs/StrComHandler.h
 | 
			
		||||
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/acs/StrComHandler.h
 | 
			
		||||
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/acs/StrComHandler.h
 | 
			
		||||
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
 | 
			
		||||
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
 | 
			
		||||
12511;0x30df;STR_COM_REPLY_TIMEOUT;LOW;Star tracker did not send a valid reply for a certain timeout. P1: Position of upload or download packet for which the packet wa sent. P2: Timeout;linux/acs/StrComHandler.h
 | 
			
		||||
12513;0x30e1;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/acs/StrComHandler.h
 | 
			
		||||
12514;0x30e2;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/acs/StrComHandler.h
 | 
			
		||||
12515;0x30e3;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/acs/StrComHandler.h
 | 
			
		||||
12516;0x30e4;STR_HELPER_SENDING_PACKET_FAILED;LOW;No description;linux/acs/StrComHandler.h
 | 
			
		||||
12517;0x30e5;STR_HELPER_REQUESTING_MSG_FAILED;LOW;No description;linux/acs/StrComHandler.h
 | 
			
		||||
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;INFO;Flash write successful;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12614;0x3146;MPSOC_FLASH_READ_PACKET_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12615;0x3147;MPSOC_FLASH_READ_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12616;0x3148;MPSOC_FLASH_READ_SUCCESSFUL;INFO;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12617;0x3149;MPSOC_READ_TIMEOUT;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12804;0x3204;DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY;MEDIUM;This is triggered when the assembly would have normally switched the board side, but the GPS device of the other side was marked faulty. P1: Current submode.;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/SusAssembly.h
 | 
			
		||||
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/tcs/TcsBoardAssembly.h
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/acs/archive/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;LOW;Could not get fix in maximum allowed time. P1: Maximum allowed time to get a fix after the GPS was switched on.;mission/acs/archive/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
 | 
			
		||||
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13632;0x3540;HDLC_CRC_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/com/syrlinksDefs.h
 | 
			
		||||
13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/com/syrlinksDefs.h
 | 
			
		||||
13800;0x35e8;MISSING_PACKET;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13803;0x35eb;FS_UNUSABLE;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13901;0x364d;SET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13902;0x364e;GET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
14000;0x36b0;ALLOC_FAILURE;MEDIUM;No description;bsp_q7s/core/CoreController.h
 | 
			
		||||
14001;0x36b1;REBOOT_SW;LOW; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
 | 
			
		||||
14002;0x36b2;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h
 | 
			
		||||
14003;0x36b3;REBOOT_HW;MEDIUM;No description;bsp_q7s/core/CoreController.h
 | 
			
		||||
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14005;0x36b5;VERSION_INFO;INFO;P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
 | 
			
		||||
14007;0x36b7;REBOOT_COUNTER;INFO;Total reboot counter, which is the sum of the boot count of all individual images.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14008;0x36b8;INDIVIDUAL_BOOT_COUNTS;INFO;Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/ThermalController.h
 | 
			
		||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/ThermalController.h
 | 
			
		||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14103;0x3717;PLOC_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14104;0x3718;OBC_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14105;0x3719;HPA_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14106;0x371a;PLPCDU_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14201;0x3779;TX_TIMER_EXPIRED;INFO;The transmit timer to protect the Syrlinks expired P1: The current timer value;mission/system/objects/ComSubsystem.h
 | 
			
		||||
14202;0x377a;BIT_LOCK_TX_ON;INFO;Transmitter will be turned on due to detection of bitlock;mission/system/objects/ComSubsystem.h
 | 
			
		||||
14000;0x36b0;ALLOC_FAILURE;MEDIUM;No description;mission/sysDefs.h
 | 
			
		||||
14001;0x36b1;REBOOT_SW;LOW; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;mission/sysDefs.h
 | 
			
		||||
14002;0x36b2;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;mission/sysDefs.h
 | 
			
		||||
14003;0x36b3;REBOOT_HW;MEDIUM;No description;mission/sysDefs.h
 | 
			
		||||
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;mission/sysDefs.h
 | 
			
		||||
14005;0x36b5;VERSION_INFO;INFO;P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
 | 
			
		||||
14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;mission/sysDefs.h
 | 
			
		||||
14007;0x36b7;REBOOT_COUNTER;INFO;Total reboot counter, which is the sum of the boot count of all individual images.;mission/sysDefs.h
 | 
			
		||||
14008;0x36b8;INDIVIDUAL_BOOT_COUNTS;INFO;Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.;mission/sysDefs.h
 | 
			
		||||
14010;0x36ba;TRYING_I2C_RECOVERY;HIGH;I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices.;mission/sysDefs.h
 | 
			
		||||
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
 | 
			
		||||
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
 | 
			
		||||
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
 | 
			
		||||
14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED. P1: Active SD Card Index, 0 if none is active P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1;mission/sysDefs.h
 | 
			
		||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14104;0x3718;OBC_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14105;0x3719;CAMERA_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14106;0x371a;PCDU_SYSTEM_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14107;0x371b;HEATER_NOT_OFF_FOR_OFF_MODE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14108;0x371c;MGT_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14109;0x371d;TCS_SWITCHING_HEATER_ON;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
 | 
			
		||||
14110;0x371e;TCS_SWITCHING_HEATER_OFF;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
 | 
			
		||||
14111;0x371f;TCS_HEATER_MAX_BURN_TIME_REACHED;MEDIUM;P1: Heater index. P2: Maximum burn time for heater.;mission/controller/tcsDefs.h
 | 
			
		||||
14201;0x3779;TX_TIMER_EXPIRED;INFO;The transmit timer to protect the Syrlinks expired P1: The current timer value;mission/system/com/ComSubsystem.h
 | 
			
		||||
14202;0x377a;BIT_LOCK_TX_ON;INFO;Transmitter will be turned on due to detection of bitlock;mission/system/com/ComSubsystem.h
 | 
			
		||||
14300;0x37dc;POSSIBLE_FILE_CORRUPTION;LOW;P1: Result code of TM packet parser. P2: Timestamp of possibly corrupt file as a unix timestamp.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14301;0x37dd;FILE_TOO_LARGE;LOW;File in store too large. P1: Detected file size P2: Allowed file size;mission/persistentTmStoreDefs.h
 | 
			
		||||
14302;0x37de;BUSY_DUMPING_EVENT;INFO;No description;mission/persistentTmStoreDefs.h
 | 
			
		||||
14303;0x37df;DUMP_WAS_CANCELLED;LOW;Dump was cancelled. P1: Object ID of store.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14305;0x37e1;DUMP_OK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14306;0x37e2;DUMP_NOK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14307;0x37e3;DUMP_MISC_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14308;0x37e4;DUMP_HK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14309;0x37e5;DUMP_CFDP_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14310;0x37e6;DUMP_OK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14311;0x37e7;DUMP_NOK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14312;0x37e8;DUMP_MISC_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14313;0x37e9;DUMP_HK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
 | 
			
		||||
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values for a prolonged time again, resetting all counters. P1: Number of periods with invalid messages. P2: Maximum invalid message counter.;mission/acs/SusHandler.h
 | 
			
		||||
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -1,7 +1,9 @@
 | 
			
		||||
0x42694269;TEST_TASK
 | 
			
		||||
0x43000002;ACS_CONTROLLER
 | 
			
		||||
0x43000003;CORE_CONTROLLER
 | 
			
		||||
0x43000004;POWER_CONTROLLER
 | 
			
		||||
0x43000006;GLOBAL_JSON_CFG
 | 
			
		||||
0x43000007;XIPHOS_WDT
 | 
			
		||||
0x43400001;THERMAL_CONTROLLER
 | 
			
		||||
0x44000001;DUMMY_HANDLER
 | 
			
		||||
0x44120006;MGM_0_LIS3_HANDLER
 | 
			
		||||
@@ -30,6 +32,8 @@
 | 
			
		||||
0x44120350;RW4
 | 
			
		||||
0x44130001;STAR_TRACKER
 | 
			
		||||
0x44130045;GPS_CONTROLLER
 | 
			
		||||
0x44130046;GPS_0_HEALTH_DEV
 | 
			
		||||
0x44130047;GPS_1_HEALTH_DEV
 | 
			
		||||
0x44140013;IMTQ_POLLING
 | 
			
		||||
0x44140014;IMTQ_HANDLER
 | 
			
		||||
0x442000A1;PCDU_HANDLER
 | 
			
		||||
@@ -42,7 +46,7 @@
 | 
			
		||||
0x443200A5;RAD_SENSOR
 | 
			
		||||
0x44330000;PLOC_UPDATER
 | 
			
		||||
0x44330001;PLOC_MEMORY_DUMPER
 | 
			
		||||
0x44330002;STR_HELPER
 | 
			
		||||
0x44330002;STR_COM_IF
 | 
			
		||||
0x44330003;PLOC_MPSOC_HELPER
 | 
			
		||||
0x44330004;AXI_PTME_CONFIG
 | 
			
		||||
0x44330005;PTME_CONFIG
 | 
			
		||||
@@ -78,6 +82,7 @@
 | 
			
		||||
0x44420030;RTD_14_IC17_TCS_BOARD
 | 
			
		||||
0x44420031;RTD_15_IC18_IMTQ
 | 
			
		||||
0x445300A3;SYRLINKS_HANDLER
 | 
			
		||||
0x445300A4;SYRLINKS_COM_HANDLER
 | 
			
		||||
0x49000001;ARDUINO_COM_IF
 | 
			
		||||
0x49000002;DUMMY_COM_IF
 | 
			
		||||
0x49010006;SCEX_UART_READER
 | 
			
		||||
@@ -148,11 +153,13 @@
 | 
			
		||||
0x73000102;CFDP_TM_FUNNEL
 | 
			
		||||
0x73000205;CFDP_HANDLER
 | 
			
		||||
0x73000206;CFDP_DISTRIBUTOR
 | 
			
		||||
0x73000207;CFDP_FAULT_HANDLER
 | 
			
		||||
0x73010000;EIVE_SYSTEM
 | 
			
		||||
0x73010001;ACS_SUBSYSTEM
 | 
			
		||||
0x73010002;PL_SUBSYSTEM
 | 
			
		||||
0x73010003;TCS_SUBSYSTEM
 | 
			
		||||
0x73010004;COM_SUBSYSTEM
 | 
			
		||||
0x73010005;EPS_SUBSYSTEM
 | 
			
		||||
0x73020001;MISC_TM_STORE
 | 
			
		||||
0x73020002;OK_TM_STORE
 | 
			
		||||
0x73020003;NOT_OK_TM_STORE
 | 
			
		||||
@@ -163,7 +170,6 @@
 | 
			
		||||
0x73040002;HK_STORE_AND_TM_TASK
 | 
			
		||||
0x73040003;CFDP_STORE_AND_TM_TASK
 | 
			
		||||
0x73040004;DOWNLINK_RAM_STORE
 | 
			
		||||
0x73500000;CCSDS_IP_CORE_BRIDGE
 | 
			
		||||
0x90000003;THERMAL_TEMP_INSERTER
 | 
			
		||||
0xCAFECAFE;DUMMY_INTERFACE
 | 
			
		||||
0xFFFFFFFF;NO_OBJECT
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -210,6 +210,7 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
 | 
			
		||||
0x27a8;DHI_NoReplyExpected;No description;168;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27a9;DHI_NonOpTemperature;No description;169;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27aa;DHI_CommandNotImplemented;No description;170;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27ab;DHI_NonOpStateOfCharge;No description;171;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b0;DHI_ChecksumError;No description;176;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b1;DHI_LengthMissmatch;No description;177;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b2;DHI_InvalidData;No description;178;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
@@ -321,160 +322,204 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
 | 
			
		||||
0x3404;DC_InvalidCookieType;No description;4;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3405;DC_NotActive;No description;5;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3406;DC_TooMuchData;No description;6;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3601;CFDP_InvalidTlvType;No description;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3602;CFDP_InvalidDirectiveField;No description;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3603;CFDP_InvalidPduDatafieldLen;No description;3;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3604;CFDP_InvalidAckDirectiveFields;No description;4;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3605;CFDP_MetadataCantParseOptions;No description;5;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3606;CFDP_NakCantParseOptions;No description;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3607;CFDP_FinishedCantParseFsResponses;No description;7;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3608;CFDP_FilestoreRequiresSecondFile;No description;8;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3609;CFDP_FilestoreResponseCantParseFsMessage;No description;9;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x360a;CFDP_InvalidPduFormat;No description;10;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3701;TSI_BadTimestamp;No description;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
 | 
			
		||||
0x38a1;SGP4_InvalidEccentricity;No description;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a2;SGP4_InvalidMeanMotion;No description;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a3;SGP4_InvalidPerturbationElements;No description;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a4;SGP4_InvalidSemiLatusRectum;No description;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a5;SGP4_InvalidEpochElements;No description;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a6;SGP4_SatelliteHasDecayed;No description;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38b1;SGP4_TleTooOld;No description;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38b2;SGP4_TleNotInitialized;No description;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x3901;MUX_NotEnoughResources;No description;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3902;MUX_InsufficientMemory;No description;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3903;MUX_NoPrivilege;No description;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3904;MUX_WrongAttributeSetting;No description;4;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3905;MUX_MutexAlreadyLocked;No description;5;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3906;MUX_MutexNotFound;No description;6;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3907;MUX_MutexMaxLocks;No description;7;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3908;MUX_CurrThreadAlreadyOwnsMutex;No description;8;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3909;MUX_CurrThreadDoesNotOwnMutex;No description;9;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390a;MUX_MutexTimeout;No description;10;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390b;MUX_MutexInvalidId;No description;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390c;MUX_MutexDestroyedWhileWaiting;No description;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a01;MQI_Empty;No description;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b00;SPH_ConnBroken;No description;0;SEMAPHORE_IF;fsfw/src/fsfw/osal/common/TcpTmTcServer.h
 | 
			
		||||
0x3b01;SPH_SemaphoreTimeout;No description;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3b02;SPH_SemaphoreNotOwned;No description;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3b03;SPH_SemaphoreInvalid;No description;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c00;LPIF_PoolEntryNotFound;No description;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3c01;LPIF_PoolEntryTypeConflict;No description;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3da0;PVA_InvalidReadWriteMode;No description;160;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3da1;PVA_InvalidPoolEntry;No description;161;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3e00;HKM_QueueOrDestinationInvalid;No description;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e01;HKM_WrongHkPacketType;No description;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e02;HKM_ReportingStatusUnchanged;No description;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e03;HKM_PeriodicHelperInvalid;No description;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e04;HKM_PoolobjectNotFound;No description;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e05;HKM_DatasetNotFound;No description;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f01;DLEE_NoPacketFound;No description;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
 | 
			
		||||
0x3f02;DLEE_PossiblePacketLoss;No description;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
 | 
			
		||||
0x4201;PUS11_InvalidTypeTimeWindow;No description;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4202;PUS11_InvalidTimeWindow;No description;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4203;PUS11_TimeshiftingNotPossible;No description;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4204;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4205;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4206;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4300;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4301;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4302;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4303;FILS_GenericRenameError;No description;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4304;FILS_IsBusy;No description;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4305;FILS_InvalidParameters;No description;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430a;FILS_FileDoesNotExist;No description;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430b;FILS_FileAlreadyExists;No description;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430c;FILS_NotAFile;No description;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430d;FILS_FileLocked;No description;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430e;FILS_PermissionDenied;No description;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4315;FILS_DirectoryDoesNotExist;No description;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4316;FILS_DirectoryAlreadyExists;No description;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4317;FILS_NotADirectory;No description;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4318;FILS_DirectoryNotEmpty;No description;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x431e;FILS_SequencePacketMissingWrite;No description;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x431f;FILS_SequencePacketMissingRead;No description;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4400;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4401;UXOS_CommandPending;Command is pending. This will also be returned if the user tries to load another command but a command is still pending;1;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4402;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4403;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4404;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4406;UXOS_PcloseCallError;No description;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4500;HSPI_OpeningFileFailed;No description;0;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4501;HSPI_FullDuplexTransferFailed;No description;1;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4502;HSPI_HalfDuplexTransferFailed;No description;2;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4601;HURT_UartReadFailure;No description;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4602;HURT_UartReadSizeMissmatch;No description;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4603;HURT_UartRxBufferTooSmall;No description;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4801;HGIO_UnknownGpioId;No description;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4802;HGIO_DriveGpioFailure;No description;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4803;HGIO_GpioTypeFailure;No description;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4804;HGIO_GpioInvalidInstance;No description;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4805;HGIO_GpioDuplicateDetected;No description;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4806;HGIO_GpioInitFailed;No description;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4807;HGIO_GpioGetValueFailed;No description;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4c00;SPPA_NoPacketFound;No description;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4c01;SPPA_SplitPacket;No description;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4fa1;HEATER_CommandNotSupported;No description;161;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa2;HEATER_InitFailed;No description;162;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa3;HEATER_InvalidSwitchNr;No description;163;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa4;HEATER_MainSwitchSetTimeout;No description;164;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa5;HEATER_CommandAlreadyWaiting;No description;165;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x50a0;SYRLINKS_CrcFailure;No description;160;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a1;SYRLINKS_UartFraminOrParityErrorAck;No description;161;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a2;SYRLINKS_BadCharacterAck;No description;162;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a3;SYRLINKS_BadParameterValueAck;No description;163;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a4;SYRLINKS_BadEndOfFrameAck;No description;164;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a5;SYRLINKS_UnknownCommandIdAck;No description;165;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a6;SYRLINKS_BadCrcAck;No description;166;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a7;SYRLINKS_ReplyWrongSize;No description;167;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a8;SYRLINKS_MissingStartFrameCharacter;No description;168;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x5100;IMTQ_InvalidCommandCode;No description;0;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5101;IMTQ_MgmMeasurementLowLevelError;No description;1;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5102;IMTQ_ActuateCmdLowLevelError;No description;2;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5103;IMTQ_ParameterMissing;No description;3;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5104;IMTQ_ParameterInvalid;No description;4;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5105;IMTQ_CcUnavailable;No description;5;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5106;IMTQ_InternalProcessingError;No description;6;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5107;IMTQ_RejectedWithoutReason;No description;7;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5108;IMTQ_CmdErrUnknown;No description;8;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x51a7;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;167;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x52b0;RWHA_SpiWriteFailure;No description;176;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;177;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;178;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;179;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;180;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;181;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b6;RWHA_NoStartMarker;Expected a start marker as first byte;182;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b7;RWHA_SpiReadTimeout;Timeout when reading reply;183;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x58a0;SUSS_ErrorUnlockMutex;No description;160;SUS_HANDLER;mission/devices/LegacySusHandler.h
 | 
			
		||||
0x58a1;SUSS_ErrorLockMutex;No description;161;SUS_HANDLER;mission/devices/LegacySusHandler.h
 | 
			
		||||
0x5d00;GOMS_PacketTooLong;No description;0;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d01;GOMS_InvalidTableId;No description;1;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d02;GOMS_InvalidAddress;No description;2;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d03;GOMS_InvalidParamSize;No description;3;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d04;GOMS_InvalidPayloadSize;No description;4;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d05;GOMS_UnknownReplyId;No description;5;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x60a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/tmtc/CcsdsIpCoreHandler.h
 | 
			
		||||
0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NvmParameterBase.h
 | 
			
		||||
0x66a0;SADPL_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000, 1000] or [1000, 65000];160;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a1;SADPL_InvalidRampTime;Action Message with invalid ramp time was received.;161;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a2;SADPL_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a3;SADPL_ExecutionFailed;Command execution failed;163;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a4;SADPL_CrcError;Reaction wheel reply has invalid crc;164;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a5;SADPL_ValueNotRead;No description;165;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x6900;ACSCTRL_FileDeletionFailed;No description;0;ACS_CTRL;mission/controller/AcsController.h
 | 
			
		||||
0x6a02;ACSMEKF_MekfUninitialized;No description;2;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a03;ACSMEKF_MekfNoGyrData;No description;3;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a04;ACSMEKF_MekfNoModelVectors;No description;4;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a05;ACSMEKF_MekfNoSusMgmStrData;No description;5;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a06;ACSMEKF_MekfCovarianceInversionFailed;No description;6;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a07;ACSMEKF_MekfInitialized;No description;7;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a08;ACSMEKF_MekfRunning;No description;8;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b01;ACSSAF_SafectrlMekfInputInvalid;No description;1;ACS_SAFE;mission/controller/acs/control/SafeCtrl.h
 | 
			
		||||
0x6c01;ACSPTG_PtgctrlMekfInputInvalid;No description;1;ACS_PTG;mission/controller/acs/control/PtgCtrl.h
 | 
			
		||||
0x6d01;ACSDTB_DetumbleNoSensordata;No description;1;ACS_DETUMBLE;mission/controller/acs/control/Detumble.h
 | 
			
		||||
0x7000;PTM_DumpDone;No description;0;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x7001;PTM_BusyDumping;No description;1;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x7100;TMS_IsBusy;No description;0;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x3407;DC_Busy;No description;7;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3601;CFDP_InvalidTlvType;No description;1;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3602;CFDP_InvalidDirectiveField;No description;2;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3603;CFDP_InvalidPduDatafieldLen;No description;3;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3604;CFDP_InvalidAckDirectiveFields;No description;4;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3605;CFDP_MetadataCantParseOptions;No description;5;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3606;CFDP_NakCantParseOptions;No description;6;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3607;CFDP_FinishedCantParseFsResponses;No description;7;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3608;CFDP_FilestoreRequiresSecondFile;No description;8;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3609;CFDP_FilestoreResponseCantParseFsMessage;No description;9;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x360a;CFDP_InvalidPduFormat;No description;10;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3700;CFDP_SourceTransactionPending;No description;0;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3701;CFDP_FileDoesNotExist;No description;1;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3702;CFDP_FileSegmentLenInvalid;No description;2;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3703;CFDP_SourceNameEmpty;No description;3;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3704;CFDP_DestNameEmpty;No description;4;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3705;CFDP_WrongRemoteCfgEntityId;No description;5;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3706;CFDP_TargetMsgQueueFull;No description;6;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3707;CFDP_TmStoreFull;No description;7;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3801;TSI_BadTimestamp;No description;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
 | 
			
		||||
0x39a1;SGP4_InvalidEccentricity;No description;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a2;SGP4_InvalidMeanMotion;No description;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a3;SGP4_InvalidPerturbationElements;No description;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a4;SGP4_InvalidSemiLatusRectum;No description;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a5;SGP4_InvalidEpochElements;No description;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a6;SGP4_SatelliteHasDecayed;No description;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39b1;SGP4_TleTooOld;No description;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39b2;SGP4_TleNotInitialized;No description;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x3a01;MUX_NotEnoughResources;No description;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a02;MUX_InsufficientMemory;No description;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a03;MUX_NoPrivilege;No description;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a04;MUX_WrongAttributeSetting;No description;4;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a05;MUX_MutexAlreadyLocked;No description;5;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a06;MUX_MutexNotFound;No description;6;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a07;MUX_MutexMaxLocks;No description;7;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a08;MUX_CurrThreadAlreadyOwnsMutex;No description;8;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a09;MUX_CurrThreadDoesNotOwnMutex;No description;9;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0a;MUX_MutexTimeout;No description;10;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0b;MUX_MutexInvalidId;No description;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0c;MUX_MutexDestroyedWhileWaiting;No description;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3b01;MQI_Empty;No description;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3c01;SPH_SemaphoreTimeout;No description;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c02;SPH_SemaphoreNotOwned;No description;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c03;SPH_SemaphoreInvalid;No description;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3d00;LPIF_PoolEntryNotFound;No description;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3d01;LPIF_PoolEntryTypeConflict;No description;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3ea0;PVA_InvalidReadWriteMode;No description;160;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3ea1;PVA_InvalidPoolEntry;No description;161;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3f00;HKM_QueueOrDestinationInvalid;No description;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f01;HKM_WrongHkPacketType;No description;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f02;HKM_ReportingStatusUnchanged;No description;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f03;HKM_PeriodicHelperInvalid;No description;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f04;HKM_PoolobjectNotFound;No description;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f05;HKM_DatasetNotFound;No description;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x4001;DLEE_StreamTooShort;No description;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
 | 
			
		||||
0x4002;DLEE_DecodingError;No description;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
 | 
			
		||||
0x4301;PUS11_InvalidTypeTimeWindow;No description;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4302;PUS11_InvalidTimeWindow;No description;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4303;PUS11_TimeshiftingNotPossible;No description;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4304;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4305;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4306;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4400;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4401;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4402;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4403;FILS_GenericRenameError;No description;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4404;FILS_IsBusy;No description;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4405;FILS_InvalidParameters;No description;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440a;FILS_FileDoesNotExist;No description;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440b;FILS_FileAlreadyExists;No description;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440c;FILS_NotAFile;No description;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440d;FILS_FileLocked;No description;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440e;FILS_PermissionDenied;No description;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4415;FILS_DirectoryDoesNotExist;No description;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4416;FILS_DirectoryAlreadyExists;No description;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4417;FILS_NotADirectory;No description;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4418;FILS_DirectoryNotEmpty;No description;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x441e;FILS_SequencePacketMissingWrite;No description;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x441f;FILS_SequencePacketMissingRead;No description;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4500;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4501;UXOS_CommandPending;Command is pending. This will also be returned if the user tries to load another command but a command is still pending;1;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4502;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4503;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4504;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4506;UXOS_PcloseCallError;No description;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4600;HSPI_OpeningFileFailed;No description;0;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4601;HSPI_FullDuplexTransferFailed;No description;1;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4602;HSPI_HalfDuplexTransferFailed;No description;2;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4603;HSPI_Timeout;No description;3;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4604;HSPI_Busy;No description;4;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4605;HSPI_GenericError;No description;5;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4701;HURT_UartReadFailure;No description;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4702;HURT_UartReadSizeMissmatch;No description;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4703;HURT_UartRxBufferTooSmall;No description;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4901;HGIO_UnknownGpioId;No description;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4902;HGIO_DriveGpioFailure;No description;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4903;HGIO_GpioTypeFailure;No description;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4904;HGIO_GpioInvalidInstance;No description;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4905;HGIO_GpioDuplicateDetected;No description;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4906;HGIO_GpioInitFailed;No description;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4907;HGIO_GpioGetValueFailed;No description;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4d00;SPPA_NoPacketFound;No description;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4d01;SPPA_SplitPacket;No description;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x50a1;HEATER_CommandNotSupported;No description;161;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a2;HEATER_InitFailed;No description;162;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a3;HEATER_InvalidSwitchNr;No description;163;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a4;HEATER_MainSwitchSetTimeout;No description;164;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a5;HEATER_CommandAlreadyWaiting;No description;165;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x51a0;SYRLINKS_CrcFailure;No description;160;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a1;SYRLINKS_UartFraminOrParityErrorAck;No description;161;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a2;SYRLINKS_BadCharacterAck;No description;162;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a3;SYRLINKS_BadParameterValueAck;No description;163;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a4;SYRLINKS_BadEndOfFrameAck;No description;164;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a5;SYRLINKS_UnknownCommandIdAck;No description;165;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a6;SYRLINKS_BadCrcAck;No description;166;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a7;SYRLINKS_ReplyWrongSize;No description;167;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a8;SYRLINKS_MissingStartFrameCharacter;No description;168;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x5200;IMTQ_InvalidCommandCode;No description;0;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5201;IMTQ_MgmMeasurementLowLevelError;No description;1;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5202;IMTQ_ActuateCmdLowLevelError;No description;2;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5203;IMTQ_ParameterMissing;No description;3;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5204;IMTQ_ParameterInvalid;No description;4;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5205;IMTQ_CcUnavailable;No description;5;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5206;IMTQ_InternalProcessingError;No description;6;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5207;IMTQ_RejectedWithoutReason;No description;7;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5208;IMTQ_CmdErrUnknown;No description;8;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5209;IMTQ_StartupCfgError;No description;9;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x520a;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;10;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x53b0;RWHA_SpiWriteFailure;No description;176;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;177;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;178;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;179;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;180;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;181;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b6;RWHA_NoStartMarker;Expected a start marker as first byte;182;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b7;RWHA_SpiReadTimeout;Timeout when reading reply;183;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x54a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;160;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a1;STRH_PingFailed;Ping command failed;161;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a2;STRH_VersionReqFailed;Status in version reply signals error;162;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a3;STRH_InterfaceReqFailed;Status in interface reply signals error;163;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a4;STRH_PowerReqFailed;Status in power reply signals error;164;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;165;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a6;STRH_ActionFailed;Status of reply to action command signals error;166;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;167;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a8;STRH_FilenameTooLong;Name of file received with command is too long;168;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a9;STRH_InvalidProgram;Received version reply with invalid program ID;169;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54aa;STRH_ReplyError;Status field reply signals error;170;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);171;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);172;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ad;STRH_RegionMismatch;Region mismatch between send and received data;173;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ae;STRH_AddressMismatch;Address mismatch between send and received data;174;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54af;STRH_LengthMismatch;Length field mismatch between send and received data;175;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b0;STRH_FileNotExists;Specified file does not exist;176;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b1;STRH_InvalidType;Download blob pixel command has invalid type field;177;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b2;STRH_InvalidId;Received FPGA action command with invalid ID;178;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b3;STRH_ReplyTooShort;Received reply is too short;179;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b4;STRH_CrcFailure;Received reply with invalid CRC;180;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;181;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;182;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b7;STRH_StartrackerNotRunningFirmware;Star tracker must be in firmware mode to run this command;183;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b8;STRH_StartrackerNotRunningBootloader;Star tracker must be in bootloader mode to run this command;184;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x59a0;SUSS_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000, 1000] or [1000, 65000];160;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a1;SUSS_InvalidRampTime;Action Message with invalid ramp time was received.;161;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a2;SUSS_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a3;SUSS_ExecutionFailed;Command execution failed;163;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a4;SUSS_CrcError;Reaction wheel reply has invalid crc;164;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a5;SUSS_ValueNotRead;No description;165;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x5e00;GOMS_PacketTooLong;No description;0;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e01;GOMS_InvalidTableId;No description;1;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e02;GOMS_InvalidAddress;No description;2;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e03;GOMS_InvalidParamSize;No description;3;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e04;GOMS_InvalidPayloadSize;No description;4;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e05;GOMS_UnknownReplyId;No description;5;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x61a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/com/CcsdsIpCoreHandler.h
 | 
			
		||||
0x6301;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x6302;JSONBASE_SetNotExists;Requested set does not exist in json file;2;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x6303;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x64a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NvmParameterBase.h
 | 
			
		||||
0x67a0;SADPL_CommandNotSupported;No description;160;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a1;SADPL_DeploymentAlreadyExecuting;No description;161;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a2;SADPL_MainSwitchTimeoutFailure;No description;162;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a3;SADPL_SwitchingDeplSa1Failed;No description;163;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a4;SADPL_SwitchingDeplSa2Failed;No description;164;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x6a00;ACSCTRL_FileDeletionFailed;File deletion failed and at least one file is still existent.;0;ACS_CTRL;mission/controller/AcsController.h
 | 
			
		||||
0x6b02;ACSMEKF_MekfUninitialized;No description;2;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b03;ACSMEKF_MekfNoGyrData;No description;3;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b04;ACSMEKF_MekfNoModelVectors;No description;4;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b05;ACSMEKF_MekfNoSusMgmStrData;No description;5;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b06;ACSMEKF_MekfCovarianceInversionFailed;No description;6;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b07;ACSMEKF_MekfNotFinite;No description;7;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b08;ACSMEKF_MekfInitialized;No description;8;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b09;ACSMEKF_MekfRunning;No description;9;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6e00;PTM_DumpDone;No description;0;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x6e01;PTM_BusyDumping;No description;1;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x6f00;TMS_IsBusy;No description;0;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x6f01;TMS_PartiallyWritten;No description;1;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x6f02;TMS_NoWriteActive;No description;2;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x7000;VCS_ChannelDoesNotExist;No description;0;VIRTUAL_CHANNEL;mission/com/VirtualChannel.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -59,3 +59,6 @@
 | 
			
		||||
141;TCS_CONTROLLER
 | 
			
		||||
142;COM_SUBSYSTEM
 | 
			
		||||
143;PERSISTENT_TM_STORE
 | 
			
		||||
144;SYRLINKS_COM
 | 
			
		||||
145;SUS_HANDLER
 | 
			
		||||
146;CFDP_APP
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -86,193 +86,231 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
10802;0x2a32;SERIALIZATION_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
10803;0x2a33;FILESTORE_ERROR;LOW;No description;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
10804;0x2a34;FILENAME_TOO_LARGE_ERROR;LOW;P1: Transaction step ID, P2: 0 for source file name, 1 for dest file name;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;No description;mission/acsDefs.h
 | 
			
		||||
11201;0x2bc1;SAFE_RATE_RECOVERY;MEDIUM;No description;mission/acsDefs.h
 | 
			
		||||
11202;0x2bc2;MULTIPLE_RW_INVALID;HIGH;No description;mission/acsDefs.h
 | 
			
		||||
11203;0x2bc3;MEKF_INVALID_INFO;INFO;No description;mission/acsDefs.h
 | 
			
		||||
11204;0x2bc4;MEKF_INVALID_MODE_VIOLATION;HIGH;No description;mission/acsDefs.h
 | 
			
		||||
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;No description;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/devices/devicedefinitions/powerDefinitions.h
 | 
			
		||||
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11402;0x2c8a;HEATER_WENT_ON;INFO;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11403;0x2c8b;HEATER_WENT_OFF;INFO;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11404;0x2c8c;SWITCH_ALREADY_ON;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11405;0x2c8d;SWITCH_ALREADY_OFF;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;No description;mission/devices/HeaterHandler.h
 | 
			
		||||
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;No description;mission/devices/SolarArrayDeploymentHandler.h
 | 
			
		||||
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/devices/ploc/PlocMPSoCHandler.h
 | 
			
		||||
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/ImtqHandler.h
 | 
			
		||||
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/ImtqHandler.h
 | 
			
		||||
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h
 | 
			
		||||
10805;0x2a35;HANDLING_CFDP_REQUEST_FAILED;LOW;CFDP request handling failed. P2: Returncode.;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;The limits for the rotation in safe mode were violated.;mission/acs/defs.h
 | 
			
		||||
11201;0x2bc1;SAFE_RATE_RECOVERY;MEDIUM;The system has recovered from a safe rate rotation violation.;mission/acs/defs.h
 | 
			
		||||
11202;0x2bc2;MULTIPLE_RW_INVALID;HIGH;Multiple RWs are invalid, uncommandable and therefore higher ACS modes cannot be maintained.;mission/acs/defs.h
 | 
			
		||||
11203;0x2bc3;MEKF_INVALID_INFO;INFO;MEKF was not able to compute a solution. P1: MEKF state on exit;mission/acs/defs.h
 | 
			
		||||
11204;0x2bc4;MEKF_RECOVERY;INFO;MEKF is able to compute a solution again.;mission/acs/defs.h
 | 
			
		||||
11205;0x2bc5;MEKF_AUTOMATIC_RESET;INFO;MEKF performed an automatic reset after detection of nonfinite values.;mission/acs/defs.h
 | 
			
		||||
11206;0x2bc6;MEKF_INVALID_MODE_VIOLATION;HIGH;MEKF was not able to compute a solution during any pointing ACS mode for a prolonged time.;mission/acs/defs.h
 | 
			
		||||
11207;0x2bc7;SAFE_MODE_CONTROLLER_FAILURE;HIGH;The ACS safe mode controller was not able to compute a solution and has failed. P1: Missing information about magnetic field, P2: Missing information about rotational rate;mission/acs/defs.h
 | 
			
		||||
11208;0x2bc8;TLE_TOO_OLD;INFO;The TLE for the SGP4 Propagator has become too old.;mission/acs/defs.h
 | 
			
		||||
11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/power/defs.h
 | 
			
		||||
11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a switch state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/power/defs.h
 | 
			
		||||
11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;No description;mission/power/defs.h
 | 
			
		||||
11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/power/defs.h
 | 
			
		||||
11304;0x2c28;DATASET_READ_FAILED;INFO;The dataset read for the inputs of the Power Controller has failed.;mission/power/defs.h
 | 
			
		||||
11305;0x2c29;VOLTAGE_OUT_OF_BOUNDS;HIGH;No description;mission/power/defs.h
 | 
			
		||||
11306;0x2c2a;TIMEDELTA_OUT_OF_BOUNDS;LOW;Time difference for Coulomb Counter was too large. P1: time in s * 10;mission/power/defs.h
 | 
			
		||||
11307;0x2c2b;POWER_LEVEL_LOW;HIGH;The State of Charge is below the limit for payload use. Setting Payload to faulty.;mission/power/defs.h
 | 
			
		||||
11308;0x2c2c;POWER_LEVEL_CRITICAL;HIGH;The State of Charge is below the limit for higher modes. Setting Reaction Wheels to faulty.;mission/power/defs.h
 | 
			
		||||
11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11402;0x2c8a;HEATER_WENT_ON;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11403;0x2c8b;HEATER_WENT_OFF;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11404;0x2c8c;SWITCH_ALREADY_ON;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11405;0x2c8d;SWITCH_ALREADY_OFF;INFO;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11407;0x2c8f;FAULTY_HEATER_WAS_ON;LOW;No description;mission/tcs/HeaterHandler.h
 | 
			
		||||
11500;0x2cec;BURN_PHASE_START;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11501;0x2ced;BURN_PHASE_DONE;INFO;P1: Burn duration in milliseconds, P2: Dry run flag;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11502;0x2cee;MAIN_SWITCH_ON_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11503;0x2cef;MAIN_SWITCH_OFF_TIMEOUT;LOW;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11504;0x2cf0;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11505;0x2cf1;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11506;0x2cf2;DEPL_SA1_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11507;0x2cf3;DEPL_SA2_GPIO_SWTICH_OFF_FAILED;HIGH;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11508;0x2cf4;AUTONOMOUS_DEPLOYMENT_COMPLETED;INFO;No description;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11605;0x2d55;MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11607;0x2d57;SUPV_NOT_ON;LOW;SUPV not on for boot or shutdown process. P1: 0 for OFF transition, 1 for ON transition.;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11608;0x2d58;SUPV_REPLY_TIMEOUT;LOW;No description;linux/payload/PlocMpsocHandler.h
 | 
			
		||||
11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/acs/ImtqHandler.h
 | 
			
		||||
11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/acs/ImtqHandler.h
 | 
			
		||||
11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/acs/rwHelpers.h
 | 
			
		||||
11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/acs/rwHelpers.h
 | 
			
		||||
11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
11903;0x2e7f;COM_ERROR_REPLY_RECEIVED;LOW;Received COM error. P1:  Communication Error ID (datasheet p32);mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12004;0x2ee4;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12005;0x2ee5;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12006;0x2ee6;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12007;0x2ee7;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12008;0x2ee8;SUPV_MPSOC_SHUTDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/payload/PlocSupervisorHandler.h
 | 
			
		||||
12100;0x2f44;SANITIZATION_FAILED;LOW;No description;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
12101;0x2f45;MOUNTED_SD_CARD;INFO;No description;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
12401;0x3071;INVALID_TC_FRAME;HIGH;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/PdecHandler.h
 | 
			
		||||
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/PdecHandler.h
 | 
			
		||||
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/PdecHandler.h
 | 
			
		||||
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/PdecHandler.h
 | 
			
		||||
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/PdecHandler.h
 | 
			
		||||
12407;0x3077;TOO_MANY_IRQS;MEDIUM;Too many IRQs over the time window of one second. P1: Allowed TCs;linux/ipcore/PdecHandler.h
 | 
			
		||||
12408;0x3078;POLL_SYSCALL_ERROR_PDEC;MEDIUM;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12409;0x3079;WRITE_SYSCALL_ERROR_PDEC;HIGH;No description;linux/ipcore/PdecHandler.h
 | 
			
		||||
12410;0x307a;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/PdecHandler.h
 | 
			
		||||
12411;0x307b;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/PdecHandler.h
 | 
			
		||||
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12511;0x30df;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12512;0x30e0;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12513;0x30e1;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12514;0x30e2;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12515;0x30e3;STR_HELPER_SENDING_PACKET_FAILED;LOW;No description;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12516;0x30e4;STR_HELPER_REQUESTING_MSG_FAILED;LOW;No description;linux/devices/startracker/StrHelper.h
 | 
			
		||||
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;No description;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
 | 
			
		||||
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/AcsBoardAssembly.h
 | 
			
		||||
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/objects/SusAssembly.h
 | 
			
		||||
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/objects/SusAssembly.h
 | 
			
		||||
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/objects/TcsBoardAssembly.h
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/devices/devicedefinitions/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;LOW;Could not get fix in maximum allowed time. P1: Maximum allowed time to get a fix after the GPS was switched on.;mission/devices/devicedefinitions/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/devices/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/devices/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/devices/P60DockHandler.h
 | 
			
		||||
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13632;0x3540;HDLC_CRC_ERROR;INFO;No description;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
13700;0x3584;FDIR_REACTION_IGNORED;MEDIUM;No description;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/devices/devicedefinitions/SyrlinksDefinitions.h
 | 
			
		||||
13800;0x35e8;MISSING_PACKET;LOW;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;No description;mission/devices/devicedefinitions/ScexDefinitions.h
 | 
			
		||||
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
12401;0x3071;INVALID_TC_FRAME;HIGH;No description;linux/ipcore/pdec.h
 | 
			
		||||
12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/ipcore/pdec.h
 | 
			
		||||
12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/ipcore/pdec.h
 | 
			
		||||
12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/ipcore/pdec.h
 | 
			
		||||
12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/ipcore/pdec.h
 | 
			
		||||
12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;linux/ipcore/pdec.h
 | 
			
		||||
12407;0x3077;TOO_MANY_IRQS;MEDIUM;Too many IRQs over the time window of one second. P1: Allowed TCs;linux/ipcore/pdec.h
 | 
			
		||||
12408;0x3078;POLL_SYSCALL_ERROR_PDEC;MEDIUM;No description;linux/ipcore/pdec.h
 | 
			
		||||
12409;0x3079;WRITE_SYSCALL_ERROR_PDEC;HIGH;No description;linux/ipcore/pdec.h
 | 
			
		||||
12410;0x307a;PDEC_TRYING_RESET_WITH_INIT;LOW;Trying a PDEC reset with complete re-initialization;linux/ipcore/pdec.h
 | 
			
		||||
12411;0x307b;PDEC_TRYING_RESET_NO_INIT;LOW;Trying a PDEC reset without re-initialization.;linux/ipcore/pdec.h
 | 
			
		||||
12412;0x307c;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/pdec.h
 | 
			
		||||
12413;0x307d;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/pdec.h
 | 
			
		||||
12414;0x307e;PDEC_INIT_FAILED;HIGH;PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues.;linux/ipcore/pdec.h
 | 
			
		||||
12415;0x307f;PDEC_CONFIG_CORRUPTED;HIGH;The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word;linux/ipcore/pdec.h
 | 
			
		||||
12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/acs/StrComHandler.h
 | 
			
		||||
12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/acs/StrComHandler.h
 | 
			
		||||
12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/acs/StrComHandler.h
 | 
			
		||||
12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/acs/StrComHandler.h
 | 
			
		||||
12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/acs/StrComHandler.h
 | 
			
		||||
12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/acs/StrComHandler.h
 | 
			
		||||
12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/acs/StrComHandler.h
 | 
			
		||||
12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/acs/StrComHandler.h
 | 
			
		||||
12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/acs/StrComHandler.h
 | 
			
		||||
12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
 | 
			
		||||
12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/acs/StrComHandler.h
 | 
			
		||||
12511;0x30df;STR_COM_REPLY_TIMEOUT;LOW;Star tracker did not send a valid reply for a certain timeout. P1: Position of upload or download packet for which the packet wa sent. P2: Timeout;linux/acs/StrComHandler.h
 | 
			
		||||
12513;0x30e1;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/acs/StrComHandler.h
 | 
			
		||||
12514;0x30e2;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/acs/StrComHandler.h
 | 
			
		||||
12515;0x30e3;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/acs/StrComHandler.h
 | 
			
		||||
12516;0x30e4;STR_HELPER_SENDING_PACKET_FAILED;LOW;No description;linux/acs/StrComHandler.h
 | 
			
		||||
12517;0x30e5;STR_HELPER_REQUESTING_MSG_FAILED;LOW;No description;linux/acs/StrComHandler.h
 | 
			
		||||
12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;INFO;Flash write successful;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12602;0x313a;MPSOC_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12605;0x313d;MPSOC_MISSING_ACK;LOW;Did not receive acknowledgment report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12606;0x313e;MPSOC_MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12607;0x313f;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12608;0x3140;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12610;0x3142;MPSOC_EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12614;0x3146;MPSOC_FLASH_READ_PACKET_ERROR;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12615;0x3147;MPSOC_FLASH_READ_FAILED;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12616;0x3148;MPSOC_FLASH_READ_SUCCESSFUL;INFO;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12617;0x3149;MPSOC_READ_TIMEOUT;LOW;No description;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/payload/PayloadPcduHandler.h
 | 
			
		||||
12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12804;0x3204;DIRECT_TRANSITION_TO_DUAL_OTHER_GPS_FAULTY;MEDIUM;This is triggered when the assembly would have normally switched the board side, but the GPS device of the other side was marked faulty. P1: Current submode.;mission/system/acs/AcsBoardAssembly.h
 | 
			
		||||
12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/SusAssembly.h
 | 
			
		||||
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/SusAssembly.h
 | 
			
		||||
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/tcs/TcsBoardAssembly.h
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/acs/archive/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;LOW;Could not get fix in maximum allowed time. P1: Maximum allowed time to get a fix after the GPS was switched on.;mission/acs/archive/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
 | 
			
		||||
13600;0x3520;SUPV_UPDATE_FAILED;LOW;update failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13601;0x3521;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13602;0x3522;SUPV_CONTINUE_UPDATE_FAILED;LOW;Continue update command failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13603;0x3523;SUPV_CONTINUE_UPDATE_SUCCESSFUL;LOW;Continue update command successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13604;0x3524;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13608;0x3528;SUPV_MEM_CHECK_OK;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13617;0x3531;SUPV_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13618;0x3532;SUPV_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13632;0x3540;HDLC_CRC_ERROR;INFO;No description;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/com/syrlinksDefs.h
 | 
			
		||||
13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/com/syrlinksDefs.h
 | 
			
		||||
13800;0x35e8;MISSING_PACKET;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13803;0x35eb;FS_UNUSABLE;LOW;No description;mission/payload/scexHelpers.h
 | 
			
		||||
13901;0x364d;SET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13902;0x364e;GET_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;No description;mission/utility/GlobalConfigHandler.h
 | 
			
		||||
14000;0x36b0;ALLOC_FAILURE;MEDIUM;No description;bsp_q7s/core/CoreController.h
 | 
			
		||||
14001;0x36b1;REBOOT_SW;LOW; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
 | 
			
		||||
14002;0x36b2;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h
 | 
			
		||||
14003;0x36b3;REBOOT_HW;MEDIUM;No description;bsp_q7s/core/CoreController.h
 | 
			
		||||
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14005;0x36b5;VERSION_INFO;INFO;P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
 | 
			
		||||
14007;0x36b7;REBOOT_COUNTER;INFO;Total reboot counter, which is the sum of the boot count of all individual images.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14008;0x36b8;INDIVIDUAL_BOOT_COUNTS;INFO;Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.;bsp_q7s/core/CoreController.h
 | 
			
		||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/ThermalController.h
 | 
			
		||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/ThermalController.h
 | 
			
		||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14103;0x3717;PLOC_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14104;0x3718;OBC_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14105;0x3719;HPA_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14106;0x371a;PLPCDU_OVERHEATING;HIGH;No description;mission/controller/ThermalController.h
 | 
			
		||||
14201;0x3779;TX_TIMER_EXPIRED;INFO;The transmit timer to protect the Syrlinks expired P1: The current timer value;mission/system/objects/ComSubsystem.h
 | 
			
		||||
14202;0x377a;BIT_LOCK_TX_ON;INFO;Transmitter will be turned on due to detection of bitlock;mission/system/objects/ComSubsystem.h
 | 
			
		||||
14000;0x36b0;ALLOC_FAILURE;MEDIUM;No description;mission/sysDefs.h
 | 
			
		||||
14001;0x36b1;REBOOT_SW;LOW; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;mission/sysDefs.h
 | 
			
		||||
14002;0x36b2;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;mission/sysDefs.h
 | 
			
		||||
14003;0x36b3;REBOOT_HW;MEDIUM;No description;mission/sysDefs.h
 | 
			
		||||
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;mission/sysDefs.h
 | 
			
		||||
14005;0x36b5;VERSION_INFO;INFO;P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
 | 
			
		||||
14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;mission/sysDefs.h
 | 
			
		||||
14007;0x36b7;REBOOT_COUNTER;INFO;Total reboot counter, which is the sum of the boot count of all individual images.;mission/sysDefs.h
 | 
			
		||||
14008;0x36b8;INDIVIDUAL_BOOT_COUNTS;INFO;Get the boot count of the individual images. P1: First 16 bits boot count of image 0 0, last 16 bits boot count of image 0 1. P2: First 16 bits boot count of image 1 0, last 16 bits boot count of image 1 1.;mission/sysDefs.h
 | 
			
		||||
14010;0x36ba;TRYING_I2C_RECOVERY;HIGH;I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices.;mission/sysDefs.h
 | 
			
		||||
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
 | 
			
		||||
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
 | 
			
		||||
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
 | 
			
		||||
14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED. P1: Active SD Card Index, 0 if none is active P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1;mission/sysDefs.h
 | 
			
		||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14104;0x3718;OBC_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14105;0x3719;CAMERA_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14106;0x371a;PCDU_SYSTEM_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14107;0x371b;HEATER_NOT_OFF_FOR_OFF_MODE;MEDIUM;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14108;0x371c;MGT_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
 | 
			
		||||
14109;0x371d;TCS_SWITCHING_HEATER_ON;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
 | 
			
		||||
14110;0x371e;TCS_SWITCHING_HEATER_OFF;INFO;P1: Module index. P2: Heater index;mission/controller/tcsDefs.h
 | 
			
		||||
14111;0x371f;TCS_HEATER_MAX_BURN_TIME_REACHED;MEDIUM;P1: Heater index. P2: Maximum burn time for heater.;mission/controller/tcsDefs.h
 | 
			
		||||
14201;0x3779;TX_TIMER_EXPIRED;INFO;The transmit timer to protect the Syrlinks expired P1: The current timer value;mission/system/com/ComSubsystem.h
 | 
			
		||||
14202;0x377a;BIT_LOCK_TX_ON;INFO;Transmitter will be turned on due to detection of bitlock;mission/system/com/ComSubsystem.h
 | 
			
		||||
14300;0x37dc;POSSIBLE_FILE_CORRUPTION;LOW;P1: Result code of TM packet parser. P2: Timestamp of possibly corrupt file as a unix timestamp.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14301;0x37dd;FILE_TOO_LARGE;LOW;File in store too large. P1: Detected file size P2: Allowed file size;mission/persistentTmStoreDefs.h
 | 
			
		||||
14302;0x37de;BUSY_DUMPING_EVENT;INFO;No description;mission/persistentTmStoreDefs.h
 | 
			
		||||
14303;0x37df;DUMP_WAS_CANCELLED;LOW;Dump was cancelled. P1: Object ID of store.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14305;0x37e1;DUMP_OK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14306;0x37e2;DUMP_NOK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14307;0x37e3;DUMP_MISC_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14308;0x37e4;DUMP_HK_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14309;0x37e5;DUMP_CFDP_STORE_DONE;INFO;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14310;0x37e6;DUMP_OK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14311;0x37e7;DUMP_NOK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14312;0x37e8;DUMP_MISC_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14313;0x37e9;DUMP_HK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
 | 
			
		||||
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
 | 
			
		||||
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values for a prolonged time again, resetting all counters. P1: Number of periods with invalid messages. P2: Maximum invalid message counter.;mission/acs/SusHandler.h
 | 
			
		||||
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -1,7 +1,9 @@
 | 
			
		||||
0x00005060;P60DOCK_TEST_TASK
 | 
			
		||||
0x43000002;ACS_CONTROLLER
 | 
			
		||||
0x43000003;CORE_CONTROLLER
 | 
			
		||||
0x43000004;POWER_CONTROLLER
 | 
			
		||||
0x43000006;GLOBAL_JSON_CFG
 | 
			
		||||
0x43000007;XIPHOS_WDT
 | 
			
		||||
0x43400001;THERMAL_CONTROLLER
 | 
			
		||||
0x44120006;MGM_0_LIS3_HANDLER
 | 
			
		||||
0x44120010;GYRO_0_ADIS_HANDLER
 | 
			
		||||
@@ -29,6 +31,8 @@
 | 
			
		||||
0x44120350;RW4
 | 
			
		||||
0x44130001;STAR_TRACKER
 | 
			
		||||
0x44130045;GPS_CONTROLLER
 | 
			
		||||
0x44130046;GPS_0_HEALTH_DEV
 | 
			
		||||
0x44130047;GPS_1_HEALTH_DEV
 | 
			
		||||
0x44140013;IMTQ_POLLING
 | 
			
		||||
0x44140014;IMTQ_HANDLER
 | 
			
		||||
0x442000A1;PCDU_HANDLER
 | 
			
		||||
@@ -41,7 +45,7 @@
 | 
			
		||||
0x443200A5;RAD_SENSOR
 | 
			
		||||
0x44330000;PLOC_UPDATER
 | 
			
		||||
0x44330001;PLOC_MEMORY_DUMPER
 | 
			
		||||
0x44330002;STR_HELPER
 | 
			
		||||
0x44330002;STR_COM_IF
 | 
			
		||||
0x44330003;PLOC_MPSOC_HELPER
 | 
			
		||||
0x44330004;AXI_PTME_CONFIG
 | 
			
		||||
0x44330005;PTME_CONFIG
 | 
			
		||||
@@ -77,6 +81,7 @@
 | 
			
		||||
0x44420030;RTD_14_IC17_TCS_BOARD
 | 
			
		||||
0x44420031;RTD_15_IC18_IMTQ
 | 
			
		||||
0x445300A3;SYRLINKS_HANDLER
 | 
			
		||||
0x445300A4;SYRLINKS_COM_HANDLER
 | 
			
		||||
0x49000000;ARDUINO_COM_IF
 | 
			
		||||
0x49010005;GPIO_IF
 | 
			
		||||
0x49010006;SCEX_UART_READER
 | 
			
		||||
@@ -153,11 +158,13 @@
 | 
			
		||||
0x73000102;CFDP_TM_FUNNEL
 | 
			
		||||
0x73000205;CFDP_HANDLER
 | 
			
		||||
0x73000206;CFDP_DISTRIBUTOR
 | 
			
		||||
0x73000207;CFDP_FAULT_HANDLER
 | 
			
		||||
0x73010000;EIVE_SYSTEM
 | 
			
		||||
0x73010001;ACS_SUBSYSTEM
 | 
			
		||||
0x73010002;PL_SUBSYSTEM
 | 
			
		||||
0x73010003;TCS_SUBSYSTEM
 | 
			
		||||
0x73010004;COM_SUBSYSTEM
 | 
			
		||||
0x73010005;EPS_SUBSYSTEM
 | 
			
		||||
0x73020001;MISC_TM_STORE
 | 
			
		||||
0x73020002;OK_TM_STORE
 | 
			
		||||
0x73020003;NOT_OK_TM_STORE
 | 
			
		||||
@@ -168,6 +175,5 @@
 | 
			
		||||
0x73040002;HK_STORE_AND_TM_TASK
 | 
			
		||||
0x73040003;CFDP_STORE_AND_TM_TASK
 | 
			
		||||
0x73040004;DOWNLINK_RAM_STORE
 | 
			
		||||
0x73500000;CCSDS_IP_CORE_BRIDGE
 | 
			
		||||
0x90000003;THERMAL_TEMP_INSERTER
 | 
			
		||||
0xFFFFFFFF;NO_OBJECT
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -210,6 +210,7 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
 | 
			
		||||
0x27a8;DHI_NoReplyExpected;No description;168;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27a9;DHI_NonOpTemperature;No description;169;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27aa;DHI_CommandNotImplemented;No description;170;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27ab;DHI_NonOpStateOfCharge;No description;171;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b0;DHI_ChecksumError;No description;176;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b1;DHI_LengthMissmatch;No description;177;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
0x27b2;DHI_InvalidData;No description;178;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
 | 
			
		||||
@@ -321,283 +322,300 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
 | 
			
		||||
0x3404;DC_InvalidCookieType;No description;4;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3405;DC_NotActive;No description;5;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3406;DC_TooMuchData;No description;6;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3601;CFDP_InvalidTlvType;No description;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3602;CFDP_InvalidDirectiveField;No description;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3603;CFDP_InvalidPduDatafieldLen;No description;3;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3604;CFDP_InvalidAckDirectiveFields;No description;4;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3605;CFDP_MetadataCantParseOptions;No description;5;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3606;CFDP_NakCantParseOptions;No description;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3607;CFDP_FinishedCantParseFsResponses;No description;7;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3608;CFDP_FilestoreRequiresSecondFile;No description;8;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3609;CFDP_FilestoreResponseCantParseFsMessage;No description;9;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x360a;CFDP_InvalidPduFormat;No description;10;CFDP;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3701;TSI_BadTimestamp;No description;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
 | 
			
		||||
0x38a1;SGP4_InvalidEccentricity;No description;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a2;SGP4_InvalidMeanMotion;No description;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a3;SGP4_InvalidPerturbationElements;No description;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a4;SGP4_InvalidSemiLatusRectum;No description;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a5;SGP4_InvalidEpochElements;No description;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38a6;SGP4_SatelliteHasDecayed;No description;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38b1;SGP4_TleTooOld;No description;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x38b2;SGP4_TleNotInitialized;No description;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x3901;MUX_NotEnoughResources;No description;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3902;MUX_InsufficientMemory;No description;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3903;MUX_NoPrivilege;No description;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3904;MUX_WrongAttributeSetting;No description;4;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3905;MUX_MutexAlreadyLocked;No description;5;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3906;MUX_MutexNotFound;No description;6;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3907;MUX_MutexMaxLocks;No description;7;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3908;MUX_CurrThreadAlreadyOwnsMutex;No description;8;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3909;MUX_CurrThreadDoesNotOwnMutex;No description;9;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390a;MUX_MutexTimeout;No description;10;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390b;MUX_MutexInvalidId;No description;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x390c;MUX_MutexDestroyedWhileWaiting;No description;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a01;MQI_Empty;No description;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3a04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b00;SPH_ConnBroken;No description;0;SEMAPHORE_IF;fsfw/src/fsfw/osal/common/TcpTmTcServer.h
 | 
			
		||||
0x3b01;SPH_SemaphoreTimeout;No description;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3b02;SPH_SemaphoreNotOwned;No description;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3b03;SPH_SemaphoreInvalid;No description;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c00;LPIF_PoolEntryNotFound;No description;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3c01;LPIF_PoolEntryTypeConflict;No description;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3da0;PVA_InvalidReadWriteMode;No description;160;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3da1;PVA_InvalidPoolEntry;No description;161;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3e00;HKM_QueueOrDestinationInvalid;No description;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e01;HKM_WrongHkPacketType;No description;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e02;HKM_ReportingStatusUnchanged;No description;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e03;HKM_PeriodicHelperInvalid;No description;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e04;HKM_PoolobjectNotFound;No description;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3e05;HKM_DatasetNotFound;No description;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f01;DLEE_NoPacketFound;No description;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
 | 
			
		||||
0x3f02;DLEE_PossiblePacketLoss;No description;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
 | 
			
		||||
0x4201;PUS11_InvalidTypeTimeWindow;No description;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4202;PUS11_InvalidTimeWindow;No description;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4203;PUS11_TimeshiftingNotPossible;No description;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4204;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4205;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4206;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4300;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4301;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4302;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4303;FILS_GenericRenameError;No description;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4304;FILS_IsBusy;No description;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4305;FILS_InvalidParameters;No description;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430a;FILS_FileDoesNotExist;No description;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430b;FILS_FileAlreadyExists;No description;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430c;FILS_NotAFile;No description;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430d;FILS_FileLocked;No description;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x430e;FILS_PermissionDenied;No description;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4315;FILS_DirectoryDoesNotExist;No description;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4316;FILS_DirectoryAlreadyExists;No description;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4317;FILS_NotADirectory;No description;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4318;FILS_DirectoryNotEmpty;No description;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x431e;FILS_SequencePacketMissingWrite;No description;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x431f;FILS_SequencePacketMissingRead;No description;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4400;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4401;UXOS_CommandPending;Command is pending. This will also be returned if the user tries to load another command but a command is still pending;1;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4402;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4403;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4404;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4406;UXOS_PcloseCallError;No description;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4500;HSPI_OpeningFileFailed;No description;0;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4501;HSPI_FullDuplexTransferFailed;No description;1;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4502;HSPI_HalfDuplexTransferFailed;No description;2;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
 | 
			
		||||
0x4601;HURT_UartReadFailure;No description;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4602;HURT_UartReadSizeMissmatch;No description;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4603;HURT_UartRxBufferTooSmall;No description;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4801;HGIO_UnknownGpioId;No description;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4802;HGIO_DriveGpioFailure;No description;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4803;HGIO_GpioTypeFailure;No description;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4804;HGIO_GpioInvalidInstance;No description;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4805;HGIO_GpioDuplicateDetected;No description;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4806;HGIO_GpioInitFailed;No description;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4807;HGIO_GpioGetValueFailed;No description;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4c00;SPPA_NoPacketFound;No description;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4c01;SPPA_SplitPacket;No description;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4fa1;HEATER_CommandNotSupported;No description;161;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa2;HEATER_InitFailed;No description;162;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa3;HEATER_InvalidSwitchNr;No description;163;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa4;HEATER_MainSwitchSetTimeout;No description;164;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x4fa5;HEATER_CommandAlreadyWaiting;No description;165;HEATER_HANDLER;mission/devices/HeaterHandler.h
 | 
			
		||||
0x50a0;SYRLINKS_CrcFailure;No description;160;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a1;SYRLINKS_UartFraminOrParityErrorAck;No description;161;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a2;SYRLINKS_BadCharacterAck;No description;162;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a3;SYRLINKS_BadParameterValueAck;No description;163;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a4;SYRLINKS_BadEndOfFrameAck;No description;164;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a5;SYRLINKS_UnknownCommandIdAck;No description;165;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a6;SYRLINKS_BadCrcAck;No description;166;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a7;SYRLINKS_ReplyWrongSize;No description;167;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x50a8;SYRLINKS_MissingStartFrameCharacter;No description;168;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
 | 
			
		||||
0x5100;IMTQ_InvalidCommandCode;No description;0;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5101;IMTQ_MgmMeasurementLowLevelError;No description;1;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5102;IMTQ_ActuateCmdLowLevelError;No description;2;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5103;IMTQ_ParameterMissing;No description;3;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5104;IMTQ_ParameterInvalid;No description;4;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5105;IMTQ_CcUnavailable;No description;5;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5106;IMTQ_InternalProcessingError;No description;6;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5107;IMTQ_RejectedWithoutReason;No description;7;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x5108;IMTQ_CmdErrUnknown;No description;8;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x51a7;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;167;IMTQ_HANDLER;mission/devices/devicedefinitions/imtqHelpers.h
 | 
			
		||||
0x52b0;RWHA_SpiWriteFailure;No description;176;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;177;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;178;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;179;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;180;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;181;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b6;RWHA_NoStartMarker;Expected a start marker as first byte;182;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x52b7;RWHA_SpiReadTimeout;Timeout when reading reply;183;RW_HANDLER;mission/devices/devicedefinitions/rwHelpers.h
 | 
			
		||||
0x5300;STRH_NoReplyAvailable;No description;0;STR_HANDLER;linux/devices/ImtqPollingTask.h
 | 
			
		||||
0x5302;STRH_InvalidCrc;No description;2;STR_HANDLER;linux/devices/ScexHelper.h
 | 
			
		||||
0x53a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;160;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a1;STRH_PingFailed;Ping command failed;161;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a2;STRH_VersionReqFailed;Status in version reply signals error;162;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a3;STRH_InterfaceReqFailed;Status in interface reply signals error;163;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a4;STRH_PowerReqFailed;Status in power reply signals error;164;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;165;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a6;STRH_ActionFailed;Status of reply to action command signals error;166;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;167;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a8;STRH_FilenameTooLong;Name of file received with command is too long;168;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53a9;STRH_InvalidProgram;Received version reply with invalid program ID;169;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53aa;STRH_ReplyError;Status field reply signals error;170;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);171;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);172;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53ad;STRH_RegionMismatch;Region mismatch between send and received data;173;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53ae;STRH_AddressMismatch;Address mismatch between send and received data;174;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53af;STRH_LengthMismatch;Length field mismatch between send and received data;175;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b0;STRH_FileNotExists;Specified file does not exist;176;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b1;STRH_InvalidType;Download blob pixel command has invalid type field;177;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b2;STRH_InvalidId;Received FPGA action command with invalid ID;178;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b3;STRH_ReplyTooShort;Received reply is too short;179;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b4;STRH_CrcFailure;Received reply with invalid CRC;180;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;181;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;182;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;183;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x53b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;184;STR_HANDLER;linux/devices/startracker/StarTrackerHandler.h
 | 
			
		||||
0x54e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);224;DWLPWRON_CMD;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h
 | 
			
		||||
0x54e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);225;DWLPWRON_CMD;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h
 | 
			
		||||
0x5700;PLSPVhLP_RequestDone;No description;0;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x5701;PLSPVhLP_NoPacketFound;No description;1;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x5702;PLSPVhLP_DecodeBufTooSmall;No description;2;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x5703;PLSPVhLP_PossiblePacketLossConsecutiveStart;No description;3;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x5704;PLSPVhLP_PossiblePacketLossConsecutiveEnd;No description;4;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x5705;PLSPVhLP_HdlcError;No description;5;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x57a0;PLSPVhLP_FileClosedAccidentally;File accidentally close;160;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x57a1;PLSPVhLP_ProcessTerminated;Process has been terminated by command;161;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x57a2;PLSPVhLP_PathNotExists;Received command with invalid pathname;162;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x57a3;PLSPVhLP_EventBufferReplyInvalidApid;Expected event buffer TM but received space packet with other APID;163;PLOC_SUPV_HELPER;linux/devices/ploc/PlocSupvUartMan.h
 | 
			
		||||
0x58a0;SUSS_ErrorUnlockMutex;No description;160;SUS_HANDLER;mission/devices/LegacySusHandler.h
 | 
			
		||||
0x58a1;SUSS_ErrorLockMutex;No description;161;SUS_HANDLER;mission/devices/LegacySusHandler.h
 | 
			
		||||
0x59a0;IPCI_PapbBusy;No description;160;CCSDS_IP_CORE_BRIDGE;linux/ipcore/PapbVcInterface.h
 | 
			
		||||
0x5aa0;PTME_UnknownVcId;No description;160;PTME;linux/ipcore/Ptme.h
 | 
			
		||||
0x5ca0;STRHLP_SdNotMounted;SD card specified in path string not mounted;160;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca1;STRHLP_FileNotExists;Specified file does not exist on filesystem;161;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca2;STRHLP_PathNotExists;Specified path does not exist;162;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;163;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;164;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;165;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;166;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca7;STRHLP_StatusError;Status field in reply signals error;167;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5ca8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);168;STR_HELPER;linux/devices/startracker/StrHelper.h
 | 
			
		||||
0x5d00;GOMS_PacketTooLong;No description;0;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d01;GOMS_InvalidTableId;No description;1;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d02;GOMS_InvalidAddress;No description;2;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d03;GOMS_InvalidParamSize;No description;3;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d04;GOMS_InvalidPayloadSize;No description;4;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5d05;GOMS_UnknownReplyId;No description;5;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
 | 
			
		||||
0x5ea0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;160;PLOC_MEMORY_DUMPER;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
0x5ea1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;161;PLOC_MEMORY_DUMPER;linux/devices/ploc/PlocMemoryDumper.h
 | 
			
		||||
0x5fa0;PDEC_AbandonedCltuRetval;No description;160;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa1;PDEC_FrameDirtyRetval;No description;161;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa2;PDEC_FrameIllegalMultipleReasons;No description;162;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa3;PDEC_AdDiscardedLockoutRetval;No description;163;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa4;PDEC_AdDiscardedWaitRetval;No description;164;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa5;PDEC_AdDiscardedNsVs;No description;165;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa6;PDEC_NoReportRetval;No description;166;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa7;PDEC_ErrorVersionNumberRetval;No description;167;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa8;PDEC_IllegalCombinationRetval;No description;168;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fa9;PDEC_InvalidScIdRetval;No description;169;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5faa;PDEC_InvalidVcIdMsbRetval;No description;170;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fab;PDEC_InvalidVcIdLsbRetval;No description;171;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fac;PDEC_NsNotZeroRetval;No description;172;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fae;PDEC_InvalidBcCc;No description;174;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x5fb0;PDEC_CommandNotImplemented;Received action message with unknown action id;176;PDEC_HANDLER;linux/ipcore/PdecHandler.h
 | 
			
		||||
0x60a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/tmtc/CcsdsIpCoreHandler.h
 | 
			
		||||
0x61a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;160;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x61a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);161;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x61a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;162;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x61a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;163;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x6201;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;ARCSEC_JSON_BASE;linux/devices/startracker/ArcsecJsonParamBase.h
 | 
			
		||||
0x6202;JSONBASE_SetNotExists;Requested set does not exist in json file;2;ARCSEC_JSON_BASE;linux/devices/startracker/ArcsecJsonParamBase.h
 | 
			
		||||
0x6203;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;ARCSEC_JSON_BASE;linux/devices/startracker/ArcsecJsonParamBase.h
 | 
			
		||||
0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NvmParameterBase.h
 | 
			
		||||
0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
 | 
			
		||||
0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
 | 
			
		||||
0x65a0;PLMPHLP_FileClosedAccidentally;File accidentally close;160;PLOC_MPSOC_HELPER;linux/devices/ploc/PlocMPSoCHelper.h
 | 
			
		||||
0x66a0;SADPL_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000, 1000] or [1000, 65000];160;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a1;SADPL_InvalidRampTime;Action Message with invalid ramp time was received.;161;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a2;SADPL_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a3;SADPL_ExecutionFailed;Command execution failed;163;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a4;SADPL_CrcError;Reaction wheel reply has invalid crc;164;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x66a5;SADPL_ValueNotRead;No description;165;SA_DEPL_HANDLER;mission/devices/RwHandler.h
 | 
			
		||||
0x67a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;160;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;161;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;162;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;163;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;164;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;165;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;166;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);167;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;168;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x67a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;169;MPSOC_RETURN_VALUES_IF;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h
 | 
			
		||||
0x68a0;SPVRTVIF_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;160;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a1;SPVRTVIF_InvalidServiceId;No description;161;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a2;SPVRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;162;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a3;SPVRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;163;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a4;SPVRTVIF_InvalidApid;Received space packet with invalid APID from PLOC supervisor;164;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a5;SPVRTVIF_GetTimeFailure;Failed to read current system time;165;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a6;SPVRTVIF_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;166;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a7;SPVRTVIF_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;167;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a8;SPVRTVIF_InvalidLatchupId;Received latchup config command with invalid latchup ID;168;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68a9;SPVRTVIF_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;169;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68aa;SPVRTVIF_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;170;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68ab;SPVRTVIF_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;171;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68ac;SPVRTVIF_InvalidMramAddresses;Returned when the start and stop addresses of the MRAM dump or MRAM  wipe commands are invalid (e.g. start address bigger than stop address);172;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68ad;SPVRTVIF_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;173;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68ae;SPVRTVIF_PathDoesNotExist;Path to PLOC directory on SD card does not exist;174;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68af;SPVRTVIF_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;175;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b0;SPVRTVIF_InvalidReplyLength;No description;176;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b1;SPVRTVIF_InvalidLength;Received action command has invalid length;177;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b2;SPVRTVIF_FilenameTooLong;Filename too long;178;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b3;SPVRTVIF_UpdateStatusReportInvalidLength;Received update status report with invalid packet length field;179;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b4;SPVRTVIF_UpdateCrcFailure;Update status report does not contain expected CRC. There might be a bit flip in the update memory region.;180;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68b5;SPVRTVIF_SupvHelperExecuting;Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command);181;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68c0;SPVRTVIF_BufTooSmall;No description;192;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x68c1;SPVRTVIF_NoReplyTimeout;No description;193;SUPV_RETURN_VALUES_IF;linux/devices/devicedefinitions/PlocSupervisorDefinitions.h
 | 
			
		||||
0x6900;ACSCTRL_FileDeletionFailed;No description;0;ACS_CTRL;mission/controller/AcsController.h
 | 
			
		||||
0x6a02;ACSMEKF_MekfUninitialized;No description;2;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a03;ACSMEKF_MekfNoGyrData;No description;3;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a04;ACSMEKF_MekfNoModelVectors;No description;4;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a05;ACSMEKF_MekfNoSusMgmStrData;No description;5;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a06;ACSMEKF_MekfCovarianceInversionFailed;No description;6;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a07;ACSMEKF_MekfInitialized;No description;7;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6a08;ACSMEKF_MekfRunning;No description;8;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b01;ACSSAF_SafectrlMekfInputInvalid;No description;1;ACS_SAFE;mission/controller/acs/control/SafeCtrl.h
 | 
			
		||||
0x6c01;ACSPTG_PtgctrlMekfInputInvalid;No description;1;ACS_PTG;mission/controller/acs/control/PtgCtrl.h
 | 
			
		||||
0x6d01;ACSDTB_DetumbleNoSensordata;No description;1;ACS_DETUMBLE;mission/controller/acs/control/Detumble.h
 | 
			
		||||
0x6e00;SDMA_OpOngoing;No description;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e01;SDMA_AlreadyOn;No description;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e02;SDMA_AlreadyMounted;No description;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e03;SDMA_AlreadyOff;No description;3;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0a;SDMA_StatusFileNexists;No description;10;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0b;SDMA_StatusFileFormatInvalid;No description;11;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0c;SDMA_MountError;No description;12;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0d;SDMA_UnmountError;No description;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0e;SDMA_SystemCallError;No description;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6e0f;SDMA_PopenCallError;No description;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6f00;LPH_SdNotReady;No description;0;LOCAL_PARAM_HANDLER;bsp_q7s/memory/LocalParameterHandler.h
 | 
			
		||||
0x7000;PTM_DumpDone;No description;0;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x7001;PTM_BusyDumping;No description;1;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x7100;TMS_IsBusy;No description;0;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x7300;SCBU_KeyNotFound;No description;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h
 | 
			
		||||
0x3407;DC_Busy;No description;7;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
 | 
			
		||||
0x3601;CFDP_InvalidTlvType;No description;1;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3602;CFDP_InvalidDirectiveField;No description;2;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3603;CFDP_InvalidPduDatafieldLen;No description;3;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3604;CFDP_InvalidAckDirectiveFields;No description;4;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3605;CFDP_MetadataCantParseOptions;No description;5;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3606;CFDP_NakCantParseOptions;No description;6;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3607;CFDP_FinishedCantParseFsResponses;No description;7;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3608;CFDP_FilestoreRequiresSecondFile;No description;8;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3609;CFDP_FilestoreResponseCantParseFsMessage;No description;9;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x360a;CFDP_InvalidPduFormat;No description;10;CFDP_BASE;fsfw/src/fsfw/cfdp/definitions.h
 | 
			
		||||
0x3700;CFDP_SourceTransactionPending;No description;0;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3701;CFDP_FileDoesNotExist;No description;1;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3702;CFDP_FileSegmentLenInvalid;No description;2;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3703;CFDP_SourceNameEmpty;No description;3;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3704;CFDP_DestNameEmpty;No description;4;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3705;CFDP_WrongRemoteCfgEntityId;No description;5;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3706;CFDP_TargetMsgQueueFull;No description;6;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3707;CFDP_TmStoreFull;No description;7;CFDP_HANDLER;fsfw/src/fsfw/cfdp/handler/defs.h
 | 
			
		||||
0x3801;TSI_BadTimestamp;No description;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
 | 
			
		||||
0x39a1;SGP4_InvalidEccentricity;No description;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a2;SGP4_InvalidMeanMotion;No description;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a3;SGP4_InvalidPerturbationElements;No description;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a4;SGP4_InvalidSemiLatusRectum;No description;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a5;SGP4_InvalidEpochElements;No description;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39a6;SGP4_SatelliteHasDecayed;No description;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39b1;SGP4_TleTooOld;No description;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x39b2;SGP4_TleNotInitialized;No description;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
 | 
			
		||||
0x3a01;MUX_NotEnoughResources;No description;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a02;MUX_InsufficientMemory;No description;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a03;MUX_NoPrivilege;No description;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a04;MUX_WrongAttributeSetting;No description;4;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a05;MUX_MutexAlreadyLocked;No description;5;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a06;MUX_MutexNotFound;No description;6;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a07;MUX_MutexMaxLocks;No description;7;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a08;MUX_CurrThreadAlreadyOwnsMutex;No description;8;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a09;MUX_CurrThreadDoesNotOwnMutex;No description;9;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0a;MUX_MutexTimeout;No description;10;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0b;MUX_MutexInvalidId;No description;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3a0c;MUX_MutexDestroyedWhileWaiting;No description;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
 | 
			
		||||
0x3b01;MQI_Empty;No description;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3b04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
 | 
			
		||||
0x3c01;SPH_SemaphoreTimeout;No description;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c02;SPH_SemaphoreNotOwned;No description;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3c03;SPH_SemaphoreInvalid;No description;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
 | 
			
		||||
0x3d00;LPIF_PoolEntryNotFound;No description;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3d01;LPIF_PoolEntryTypeConflict;No description;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
 | 
			
		||||
0x3ea0;PVA_InvalidReadWriteMode;No description;160;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3ea1;PVA_InvalidPoolEntry;No description;161;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
 | 
			
		||||
0x3f00;HKM_QueueOrDestinationInvalid;No description;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f01;HKM_WrongHkPacketType;No description;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f02;HKM_ReportingStatusUnchanged;No description;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f03;HKM_PeriodicHelperInvalid;No description;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f04;HKM_PoolobjectNotFound;No description;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x3f05;HKM_DatasetNotFound;No description;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
 | 
			
		||||
0x4001;DLEE_StreamTooShort;No description;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
 | 
			
		||||
0x4002;DLEE_DecodingError;No description;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
 | 
			
		||||
0x4301;PUS11_InvalidTypeTimeWindow;No description;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4302;PUS11_InvalidTimeWindow;No description;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4303;PUS11_TimeshiftingNotPossible;No description;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4304;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4305;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4306;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
0x4400;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4401;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4402;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4403;FILS_GenericRenameError;No description;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4404;FILS_IsBusy;No description;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4405;FILS_InvalidParameters;No description;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440a;FILS_FileDoesNotExist;No description;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440b;FILS_FileAlreadyExists;No description;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440c;FILS_NotAFile;No description;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440d;FILS_FileLocked;No description;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x440e;FILS_PermissionDenied;No description;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4415;FILS_DirectoryDoesNotExist;No description;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4416;FILS_DirectoryAlreadyExists;No description;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4417;FILS_NotADirectory;No description;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4418;FILS_DirectoryNotEmpty;No description;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x441e;FILS_SequencePacketMissingWrite;No description;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x441f;FILS_SequencePacketMissingRead;No description;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
 | 
			
		||||
0x4500;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4501;UXOS_CommandPending;Command is pending. This will also be returned if the user tries to load another command but a command is still pending;1;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4502;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4503;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4504;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4506;UXOS_PcloseCallError;No description;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
 | 
			
		||||
0x4600;HSPI_OpeningFileFailed;No description;0;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4601;HSPI_FullDuplexTransferFailed;No description;1;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4602;HSPI_HalfDuplexTransferFailed;No description;2;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4603;HSPI_Timeout;No description;3;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4604;HSPI_Busy;No description;4;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4605;HSPI_GenericError;No description;5;HAL_SPI;fsfw/src/fsfw_hal/common/spi/spiCommon.h
 | 
			
		||||
0x4701;HURT_UartReadFailure;No description;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4702;HURT_UartReadSizeMissmatch;No description;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4703;HURT_UartRxBufferTooSmall;No description;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
 | 
			
		||||
0x4901;HGIO_UnknownGpioId;No description;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4902;HGIO_DriveGpioFailure;No description;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4903;HGIO_GpioTypeFailure;No description;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4904;HGIO_GpioInvalidInstance;No description;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4905;HGIO_GpioDuplicateDetected;No description;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4906;HGIO_GpioInitFailed;No description;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4907;HGIO_GpioGetValueFailed;No description;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
 | 
			
		||||
0x4d00;SPPA_NoPacketFound;No description;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x4d01;SPPA_SplitPacket;No description;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
 | 
			
		||||
0x50a1;HEATER_CommandNotSupported;No description;161;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a2;HEATER_InitFailed;No description;162;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a3;HEATER_InvalidSwitchNr;No description;163;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a4;HEATER_MainSwitchSetTimeout;No description;164;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x50a5;HEATER_CommandAlreadyWaiting;No description;165;HEATER_HANDLER;mission/tcs/HeaterHandler.h
 | 
			
		||||
0x51a0;SYRLINKS_CrcFailure;No description;160;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a1;SYRLINKS_UartFraminOrParityErrorAck;No description;161;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a2;SYRLINKS_BadCharacterAck;No description;162;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a3;SYRLINKS_BadParameterValueAck;No description;163;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a4;SYRLINKS_BadEndOfFrameAck;No description;164;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a5;SYRLINKS_UnknownCommandIdAck;No description;165;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a6;SYRLINKS_BadCrcAck;No description;166;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a7;SYRLINKS_ReplyWrongSize;No description;167;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x51a8;SYRLINKS_MissingStartFrameCharacter;No description;168;SYRLINKS_HANDLER;mission/com/SyrlinksHandler.h
 | 
			
		||||
0x5200;IMTQ_InvalidCommandCode;No description;0;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5201;IMTQ_MgmMeasurementLowLevelError;No description;1;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5202;IMTQ_ActuateCmdLowLevelError;No description;2;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5203;IMTQ_ParameterMissing;No description;3;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5204;IMTQ_ParameterInvalid;No description;4;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5205;IMTQ_CcUnavailable;No description;5;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5206;IMTQ_InternalProcessingError;No description;6;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5207;IMTQ_RejectedWithoutReason;No description;7;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5208;IMTQ_CmdErrUnknown;No description;8;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x5209;IMTQ_StartupCfgError;No description;9;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x520a;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;10;IMTQ_HANDLER;mission/acs/imtqHelpers.h
 | 
			
		||||
0x53b0;RWHA_SpiWriteFailure;No description;176;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;177;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;178;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;179;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;180;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;181;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b6;RWHA_NoStartMarker;Expected a start marker as first byte;182;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x53b7;RWHA_SpiReadTimeout;Timeout when reading reply;183;RW_HANDLER;mission/acs/rwHelpers.h
 | 
			
		||||
0x54a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;160;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a1;STRH_PingFailed;Ping command failed;161;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a2;STRH_VersionReqFailed;Status in version reply signals error;162;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a3;STRH_InterfaceReqFailed;Status in interface reply signals error;163;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a4;STRH_PowerReqFailed;Status in power reply signals error;164;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;165;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a6;STRH_ActionFailed;Status of reply to action command signals error;166;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;167;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a8;STRH_FilenameTooLong;Name of file received with command is too long;168;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54a9;STRH_InvalidProgram;Received version reply with invalid program ID;169;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54aa;STRH_ReplyError;Status field reply signals error;170;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);171;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);172;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ad;STRH_RegionMismatch;Region mismatch between send and received data;173;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54ae;STRH_AddressMismatch;Address mismatch between send and received data;174;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54af;STRH_LengthMismatch;Length field mismatch between send and received data;175;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b0;STRH_FileNotExists;Specified file does not exist;176;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b1;STRH_InvalidType;Download blob pixel command has invalid type field;177;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b2;STRH_InvalidId;Received FPGA action command with invalid ID;178;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b3;STRH_ReplyTooShort;Received reply is too short;179;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b4;STRH_CrcFailure;Received reply with invalid CRC;180;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;181;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;182;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b7;STRH_StartrackerNotRunningFirmware;Star tracker must be in firmware mode to run this command;183;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x54b8;STRH_StartrackerNotRunningBootloader;Star tracker must be in bootloader mode to run this command;184;STR_HANDLER;mission/acs/str/StarTrackerHandler.h
 | 
			
		||||
0x55e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);224;DWLPWRON_CMD;linux/payload/plocMpsocHelpers.h
 | 
			
		||||
0x55e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);225;DWLPWRON_CMD;linux/payload/plocMpsocHelpers.h
 | 
			
		||||
0x5800;PLSPVhLP_RequestDone;No description;0;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x5801;PLSPVhLP_NoPacketFound;No description;1;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x5802;PLSPVhLP_DecodeBufTooSmall;No description;2;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x5803;PLSPVhLP_PossiblePacketLossConsecutiveStart;No description;3;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x5804;PLSPVhLP_PossiblePacketLossConsecutiveEnd;No description;4;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x5805;PLSPVhLP_HdlcError;No description;5;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x58a0;PLSPVhLP_FileClosedAccidentally;File accidentally close;160;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x58a1;PLSPVhLP_ProcessTerminated;Process has been terminated by command;161;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x58a2;PLSPVhLP_PathNotExists;Received command with invalid pathname;162;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x58a3;PLSPVhLP_EventBufferReplyInvalidApid;Expected event buffer TM but received space packet with other APID;163;PLOC_SUPV_HELPER;linux/payload/PlocSupvUartMan.h
 | 
			
		||||
0x59a0;SUSS_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000, 1000] or [1000, 65000];160;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a1;SUSS_InvalidRampTime;Action Message with invalid ramp time was received.;161;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a2;SUSS_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a3;SUSS_ExecutionFailed;Command execution failed;163;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a4;SUSS_CrcError;Reaction wheel reply has invalid crc;164;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x59a5;SUSS_ValueNotRead;No description;165;SUS_HANDLER;mission/acs/RwHandler.h
 | 
			
		||||
0x5aa0;IPCI_PapbBusy;No description;160;CCSDS_IP_CORE_BRIDGE;linux/ipcore/PapbVcInterface.h
 | 
			
		||||
0x5ba0;PTME_UnknownVcId;No description;160;PTME;linux/ipcore/Ptme.h
 | 
			
		||||
0x5d01;STRHLP_SdNotMounted;SD card specified in path string not mounted;1;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d02;STRHLP_FileNotExists;Specified file does not exist on filesystem;2;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d03;STRHLP_PathNotExists;Specified path does not exist;3;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d04;STRHLP_FileCreationFailed;Failed to create download image or read flash file;4;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d05;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;5;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d06;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;6;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d07;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;7;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d08;STRHLP_StatusError;Status field in reply signals error;8;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d09;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);9;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d0a;STRHLP_ReceptionTimeout;No description;10;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5d0b;STRHLP_DecodingError;No description;11;STR_HELPER;linux/acs/StrComHandler.h
 | 
			
		||||
0x5e00;GOMS_PacketTooLong;No description;0;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e01;GOMS_InvalidTableId;No description;1;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e02;GOMS_InvalidAddress;No description;2;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e03;GOMS_InvalidParamSize;No description;3;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e04;GOMS_InvalidPayloadSize;No description;4;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5e05;GOMS_UnknownReplyId;No description;5;GOM_SPACE_HANDLER;mission/power/GomspaceDeviceHandler.h
 | 
			
		||||
0x5fa0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;160;PLOC_MEMORY_DUMPER;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
0x5fa1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;161;PLOC_MEMORY_DUMPER;linux/payload/PlocMemoryDumper.h
 | 
			
		||||
0x60a0;PDEC_AbandonedCltuRetval;No description;160;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a1;PDEC_FrameDirtyRetval;No description;161;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a2;PDEC_FrameIllegalMultipleReasons;No description;162;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a3;PDEC_AdDiscardedLockoutRetval;No description;163;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a4;PDEC_AdDiscardedWaitRetval;No description;164;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a5;PDEC_AdDiscardedNsVs;No description;165;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a6;PDEC_NoReportRetval;No description;166;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a7;PDEC_ErrorVersionNumberRetval;No description;167;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a8;PDEC_IllegalCombinationRetval;No description;168;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60a9;PDEC_InvalidScIdRetval;No description;169;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60aa;PDEC_InvalidVcIdMsbRetval;No description;170;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60ab;PDEC_InvalidVcIdLsbRetval;No description;171;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60ac;PDEC_NsNotZeroRetval;No description;172;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60ae;PDEC_InvalidBcCc;No description;174;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x60b0;PDEC_CommandNotImplemented;Received action message with unknown action id;176;PDEC_HANDLER;linux/ipcore/pdec.h
 | 
			
		||||
0x61a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/com/CcsdsIpCoreHandler.h
 | 
			
		||||
0x62a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;160;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x62a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);161;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x62a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;162;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x62a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;163;RATE_SETTER;linux/ipcore/PtmeConfig.h
 | 
			
		||||
0x6301;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x6302;JSONBASE_SetNotExists;Requested set does not exist in json file;2;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x6303;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;ARCSEC_JSON_BASE;mission/acs/str/ArcsecJsonParamBase.h
 | 
			
		||||
0x64a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NvmParameterBase.h
 | 
			
		||||
0x65a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
 | 
			
		||||
0x65a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
 | 
			
		||||
0x66a0;PLMPHLP_FileWriteError;File error occured for file transfers from OBC to the MPSoC.;160;PLOC_MPSOC_HELPER;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
0x66a1;PLMPHLP_FileReadError;File error occured for file transfers from MPSoC to OBC.;161;PLOC_MPSOC_HELPER;linux/payload/PlocMpsocSpecialComHelper.h
 | 
			
		||||
0x67a0;SADPL_CommandNotSupported;No description;160;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a1;SADPL_DeploymentAlreadyExecuting;No description;161;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a2;SADPL_MainSwitchTimeoutFailure;No description;162;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a3;SADPL_SwitchingDeplSa1Failed;No description;163;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x67a4;SADPL_SwitchingDeplSa2Failed;No description;164;SA_DEPL_HANDLER;mission/SolarArrayDeploymentHandler.h
 | 
			
		||||
0x68a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;160;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;161;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;162;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;163;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;164;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;165;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;166;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);167;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;168;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x68a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;169;MPSOC_RETURN_VALUES_IF;linux/payload/mpsocRetvals.h
 | 
			
		||||
0x69a0;SPVRTVIF_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;160;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a1;SPVRTVIF_InvalidServiceId;No description;161;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a2;SPVRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;162;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a3;SPVRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;163;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a4;SPVRTVIF_InvalidApid;Received space packet with invalid APID from PLOC supervisor;164;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a5;SPVRTVIF_GetTimeFailure;Failed to read current system time;165;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a6;SPVRTVIF_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;166;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a7;SPVRTVIF_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;167;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a8;SPVRTVIF_InvalidLatchupId;Received latchup config command with invalid latchup ID;168;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69a9;SPVRTVIF_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;169;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69aa;SPVRTVIF_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;170;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69ab;SPVRTVIF_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;171;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69ac;SPVRTVIF_InvalidMramAddresses;Returned when the start and stop addresses of the MRAM dump or MRAM  wipe commands are invalid (e.g. start address bigger than stop address);172;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69ad;SPVRTVIF_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;173;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69ae;SPVRTVIF_PathDoesNotExist;Path to PLOC directory on SD card does not exist;174;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69af;SPVRTVIF_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;175;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b0;SPVRTVIF_InvalidReplyLength;No description;176;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b1;SPVRTVIF_InvalidLength;Received action command has invalid length;177;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b2;SPVRTVIF_FilenameTooLong;Filename too long;178;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b3;SPVRTVIF_UpdateStatusReportInvalidLength;Received update status report with invalid packet length field;179;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b4;SPVRTVIF_UpdateCrcFailure;Update status report does not contain expected CRC. There might be a bit flip in the update memory region.;180;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69b5;SPVRTVIF_SupvHelperExecuting;Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command);181;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69c0;SPVRTVIF_BufTooSmall;No description;192;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x69c1;SPVRTVIF_NoReplyTimeout;No description;193;SUPV_RETURN_VALUES_IF;linux/payload/plocSupvDefs.h
 | 
			
		||||
0x6a00;ACSCTRL_FileDeletionFailed;File deletion failed and at least one file is still existent.;0;ACS_CTRL;mission/controller/AcsController.h
 | 
			
		||||
0x6b02;ACSMEKF_MekfUninitialized;No description;2;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b03;ACSMEKF_MekfNoGyrData;No description;3;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b04;ACSMEKF_MekfNoModelVectors;No description;4;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b05;ACSMEKF_MekfNoSusMgmStrData;No description;5;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b06;ACSMEKF_MekfCovarianceInversionFailed;No description;6;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b07;ACSMEKF_MekfNotFinite;No description;7;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b08;ACSMEKF_MekfInitialized;No description;8;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6b09;ACSMEKF_MekfRunning;No description;9;ACS_MEKF;mission/controller/acs/MultiplicativeKalmanFilter.h
 | 
			
		||||
0x6c00;SDMA_OpOngoing;No description;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c01;SDMA_AlreadyOn;No description;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c02;SDMA_AlreadyMounted;No description;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c03;SDMA_AlreadyOff;No description;3;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0a;SDMA_StatusFileNexists;No description;10;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0b;SDMA_StatusFileFormatInvalid;No description;11;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0c;SDMA_MountError;No description;12;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0d;SDMA_UnmountError;No description;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0e;SDMA_SystemCallError;No description;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6c0f;SDMA_PopenCallError;No description;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
 | 
			
		||||
0x6d00;LPH_SdNotReady;No description;0;LOCAL_PARAM_HANDLER;bsp_q7s/memory/LocalParameterHandler.h
 | 
			
		||||
0x6e00;PTM_DumpDone;No description;0;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x6e01;PTM_BusyDumping;No description;1;PERSISTENT_TM_STORE;mission/tmtc/PersistentTmStore.h
 | 
			
		||||
0x6f00;TMS_IsBusy;No description;0;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x6f01;TMS_PartiallyWritten;No description;1;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x6f02;TMS_NoWriteActive;No description;2;TM_SINK;mission/tmtc/DirectTmSinkIF.h
 | 
			
		||||
0x7000;VCS_ChannelDoesNotExist;No description;0;VIRTUAL_CHANNEL;mission/com/VirtualChannel.h
 | 
			
		||||
0x7200;SCBU_KeyNotFound;No description;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -59,3 +59,6 @@
 | 
			
		||||
141;TCS_CONTROLLER
 | 
			
		||||
142;COM_SUBSYSTEM
 | 
			
		||||
143;PERSISTENT_TM_STORE
 | 
			
		||||
144;SYRLINKS_COM
 | 
			
		||||
145;SUS_HANDLER
 | 
			
		||||
146;CFDP_APP
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -54,9 +54,13 @@ class BspConfig:
 | 
			
		||||
 | 
			
		||||
        # Store this file in the root of the generators folder
 | 
			
		||||
        self.csv_filename = Path(f"{ROOT_DIR}/{self.bsp_dir_name}_events.csv")
 | 
			
		||||
        self.subsystems_csv_filename = Path(f"{ROOT_DIR}/{self.bsp_dir_name}_subsystems.csv")
 | 
			
		||||
        self.subsystems_csv_filename = Path(
 | 
			
		||||
            f"{ROOT_DIR}/{self.bsp_dir_name}_subsystems.csv"
 | 
			
		||||
        )
 | 
			
		||||
        self.csv_copy_dest = Path(f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/events.csv")
 | 
			
		||||
        self.subsystem_csv_copy_dest = Path(f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/subsystems.csv")
 | 
			
		||||
        self.subsystem_csv_copy_dest = Path(
 | 
			
		||||
            f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/subsystems.csv"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if (
 | 
			
		||||
            self.bsp_select == BspType.BSP_Q7S
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user