Compare commits
	
		
			81 Commits
		
	
	
		
			v7.7.3
			...
			mpsoc-file
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						d60f4dd3e3
	
				 | 
					
					
						|||
| 
						
						
							
						
						6a0b18ffd0
	
				 | 
					
					
						|||
| 
						
						
							
						
						398e7a3a05
	
				 | 
					
					
						|||
| 4ed516e0bc | |||
| e2ee6a492c | |||
| a6422f2d73 | |||
| ceb2130726 | |||
| fcd3b7815c | |||
| 1067abba9a | |||
| 53376fd9ed | |||
| c2d05b2045 | |||
| 48914a2aba | |||
| ef8736bd81 | |||
| 584a16a67c | |||
| addfadddb6 | |||
| df392d3319 | |||
| b079ce85f2 | |||
| bc9b8efdb8 | |||
| 5a7df626ab | |||
| 7b53275d61 | |||
| 709c53d533 | |||
| 3a70155105 | |||
| 7a12c1c8fe | |||
| 0f1c41e828 | |||
| c4340c3515 | |||
| b01d4f6363 | |||
| d9789a48d8 | |||
| c3237cae3c | |||
| 427c53df8c | |||
| c89e81cac9 | |||
| fb54d976d2 | |||
| 25a1e4ea25 | |||
| a63eb331eb | |||
| 1c36f36b1f | |||
| 0f3eeb42d6 | |||
| 887f165484 | |||
| d4eb124cdf | |||
| 47cedb90f9 | |||
| f3d4e09487 | |||
| 2057ab9c10 | |||
| 1f0e2d99e9 | |||
| 35181a2693 | |||
| e1b5625086 | |||
| 72626582f6 | |||
| 3e6d26669a | |||
| 69f378f8b6 | |||
| a46f6f34d6 | |||
| e6855120f3 | |||
| e59235fd75 | |||
| 
						
						
							
						
						3875ddf92b
	
				 | 
					
					
						|||
| 
						
						
							
						
						4171b11928
	
				 | 
					
					
						|||
| 
						
						
							
						
						43de097812
	
				 | 
					
					
						|||
| 
						
						
							
						
						56512fae0d
	
				 | 
					
					
						|||
| 
						
						
							
						
						76d00ddd37
	
				 | 
					
					
						|||
| 539221a458 | |||
| 9f03341108 | |||
| 4193a565a4 | |||
| c1c254330b | |||
| c46c6cd28b | |||
| aeb8b92bc4 | |||
| 8011686fbe | |||
| 58be09bd4b | |||
| ad82573a35 | |||
| a1be15e939 | |||
| ba7c9e1c26 | |||
| 46c125d9fe | |||
| 889dd04c6b | |||
| c52746a2df | |||
| f2f856e227 | |||
| 0cbac07f15 | |||
| 18d3c8fa91 | |||
| 3e1ef8bcaf | |||
| 7a43e1bc67 | |||
| 3c869e5215 | |||
| 8374a02ae2 | |||
| f2d1e16697 | |||
| b7bf927288 | |||
| 8fe7307a58 | |||
| 7e7d8c249e | |||
| ffce866ad0 | |||
| 236916bf67 | 
							
								
								
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,48 @@ will consitute of a breaking change warranting a new major release:
 | 
			
		||||
 | 
			
		||||
# [unreleased]
 | 
			
		||||
 | 
			
		||||
# [v7.8.0] 2024-04-10
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Reverted lower OP limit of `PLOC` to -10°C.
 | 
			
		||||
- All pointing laws are now allowed to use the `MEKF` per default.
 | 
			
		||||
- Changed limits in `PWR Controller`.
 | 
			
		||||
- PUS time service: Now dumps the time before and after relative timeshift or setting absolute time
 | 
			
		||||
- The `GPS Controller` does not set itself to `OFF` anymore, if it has not detected a valid fix for 
 | 
			
		||||
  some time. Instead it attempts to reset both GNSS devices once.
 | 
			
		||||
- The maximum time to reach a fix is shortened from 30min to 15min.
 | 
			
		||||
- The time the reset pin of the GNSS devices is pulled is prolonged from 5ms to 10s.
 | 
			
		||||
- A `GPS FIX HAS CHANGED` is now only triggered if no fix change has been detected within the past
 | 
			
		||||
  2min. This means, this event might be thrown with a 2min delay. It is instantly thrown, if the mode
 | 
			
		||||
  of the controller is changed. As arguments it now displays the new fix and the numer of fix changes
 | 
			
		||||
  missed.
 | 
			
		||||
- The number of satellites seen and used is reset to 0, in case they are set to invalid.
 | 
			
		||||
- Altitude, latitude and longitude messages are not checked anymore, in case the mode message was 
 | 
			
		||||
  already invalid.
 | 
			
		||||
 | 
			
		||||
## Added
 | 
			
		||||
 | 
			
		||||
- PUS timeservice relative timeshift.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fixed wrong order in quaternion multiplication for computation of the error quaternion.
 | 
			
		||||
- Re-worked some FDIR logic in the FSFW. The former logic prevented events with a severity
 | 
			
		||||
  higher than INFO if the device was in EXTERNAL CONTROL. The new logic will allow to trigger
 | 
			
		||||
  events but still inhibit FDIR reactions if the device is in EXTERNAL CONTROL.
 | 
			
		||||
 | 
			
		||||
# [v7.7.4] 2024-03-21
 | 
			
		||||
 | 
			
		||||
## Changed
 | 
			
		||||
 | 
			
		||||
- Rotational rate limit for the GS target pointing is now seperated from controller limit. It
 | 
			
		||||
  is also reduced to 0.75°/s now.
 | 
			
		||||
 | 
			
		||||
## Fixed
 | 
			
		||||
 | 
			
		||||
- Fixed wrong sign in calculation of total current within the `PWR Controller`.
 | 
			
		||||
 | 
			
		||||
# [v7.7.3] 2024-03-18
 | 
			
		||||
 | 
			
		||||
- Bumped `eive-fsfw`
 | 
			
		||||
 
 | 
			
		||||
@@ -10,8 +10,8 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.13)
 | 
			
		||||
 | 
			
		||||
set(OBSW_VERSION_MAJOR 7)
 | 
			
		||||
set(OBSW_VERSION_MINOR 7)
 | 
			
		||||
set(OBSW_VERSION_REVISION 3)
 | 
			
		||||
set(OBSW_VERSION_MINOR 8)
 | 
			
		||||
set(OBSW_VERSION_REVISION 0)
 | 
			
		||||
 | 
			
		||||
# set(CMAKE_VERBOSE TRUE)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,7 @@
 | 
			
		||||
#define OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP    1
 | 
			
		||||
#define OBSW_PRINT_MISSED_DEADLINES                 1
 | 
			
		||||
 | 
			
		||||
#define OBSW_MPSOC_JTAG_BOOT                        0
 | 
			
		||||
#define OBSW_SYRLINKS_SIMULATED                     1
 | 
			
		||||
#define OBSW_ADD_TEST_CODE                          0
 | 
			
		||||
#define OBSW_ADD_TEST_TASK                          0
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 320 translations.
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 324 translations.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateEvents.h"
 | 
			
		||||
 | 
			
		||||
@@ -82,8 +82,11 @@ const char *BIT_LOCK_STRING = "BIT_LOCK";
 | 
			
		||||
const char *BIT_LOCK_LOST_STRING = "BIT_LOCK_LOST";
 | 
			
		||||
const char *FRAME_PROCESSING_FAILED_STRING = "FRAME_PROCESSING_FAILED";
 | 
			
		||||
const char *CLOCK_SET_STRING = "CLOCK_SET";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_LEGACY_STRING = "CLOCK_DUMP_LEGACY";
 | 
			
		||||
const char *CLOCK_SET_FAILURE_STRING = "CLOCK_SET_FAILURE";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_BEFORE_SETTING_TIME_STRING = "CLOCK_DUMP_BEFORE_SETTING_TIME";
 | 
			
		||||
const char *CLOCK_DUMP_AFTER_SETTING_TIME_STRING = "CLOCK_DUMP_AFTER_SETTING_TIME";
 | 
			
		||||
const char *TC_DELETION_FAILED_STRING = "TC_DELETION_FAILED";
 | 
			
		||||
const char *TEST_STRING = "TEST";
 | 
			
		||||
const char *CHANGE_OF_SETUP_PARAMETER_STRING = "CHANGE_OF_SETUP_PARAMETER";
 | 
			
		||||
@@ -241,6 +244,7 @@ const char *SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903_STRING = "SIDE_SWITCH_TRANS
 | 
			
		||||
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";
 | 
			
		||||
const char *RESET_FAIL_STRING = "RESET_FAIL";
 | 
			
		||||
const char *P60_BOOT_COUNT_STRING = "P60_BOOT_COUNT";
 | 
			
		||||
const char *BATT_MODE_STRING = "BATT_MODE";
 | 
			
		||||
const char *BATT_MODE_CHANGED_STRING = "BATT_MODE_CHANGED";
 | 
			
		||||
@@ -483,9 +487,15 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (8900):
 | 
			
		||||
      return CLOCK_SET_STRING;
 | 
			
		||||
    case (8901):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
      return CLOCK_DUMP_LEGACY_STRING;
 | 
			
		||||
    case (8902):
 | 
			
		||||
      return CLOCK_SET_FAILURE_STRING;
 | 
			
		||||
    case (8903):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
    case (8904):
 | 
			
		||||
      return CLOCK_DUMP_BEFORE_SETTING_TIME_STRING;
 | 
			
		||||
    case (8905):
 | 
			
		||||
      return CLOCK_DUMP_AFTER_SETTING_TIME_STRING;
 | 
			
		||||
    case (9100):
 | 
			
		||||
      return TC_DELETION_FAILED_STRING;
 | 
			
		||||
    case (9700):
 | 
			
		||||
@@ -800,6 +810,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return GPS_FIX_CHANGE_STRING;
 | 
			
		||||
    case (13101):
 | 
			
		||||
      return CANT_GET_FIX_STRING;
 | 
			
		||||
    case (13102):
 | 
			
		||||
      return RESET_FAIL_STRING;
 | 
			
		||||
    case (13200):
 | 
			
		||||
      return P60_BOOT_COUNT_STRING;
 | 
			
		||||
    case (13201):
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @brief  Auto-generated object translation file.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Contains 175 translations.
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateObjects.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2150,8 +2150,7 @@ ReturnValue_t CoreController::initClockFromTimeFile() {
 | 
			
		||||
  std::string fileName = currMntPrefix + BACKUP_TIME_FILE;
 | 
			
		||||
  std::error_code e;
 | 
			
		||||
  if (sdcMan->isSdCardUsable(std::nullopt) and std::filesystem::exists(fileName, e) and
 | 
			
		||||
      ((gpsFix == FixMode::UNKNOWN or gpsFix == FixMode::NOT_SEEN) or
 | 
			
		||||
       not utility::timeSanityCheck())) {
 | 
			
		||||
      ((gpsFix == FixMode::NOT_SEEN) or not utility::timeSanityCheck())) {
 | 
			
		||||
    ifstream timeFile(fileName);
 | 
			
		||||
    string nextWord;
 | 
			
		||||
    getline(timeFile, nextWord);
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
#include <fsfw/parameters/ReceivesParameterMessagesIF.h>
 | 
			
		||||
#include <fsfw_hal/linux/uio/UioMapper.h>
 | 
			
		||||
#include <libxiphos.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <linux/acs/GPSDefinitions.h>
 | 
			
		||||
#include <mission/utility/trace.h>
 | 
			
		||||
 | 
			
		||||
#include <atomic>
 | 
			
		||||
@@ -211,7 +211,7 @@ class CoreController : public ExtendedControllerBase, public ReceivesParameterMe
 | 
			
		||||
  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;
 | 
			
		||||
  GpsHyperion::FixMode gpsFix = GpsHyperion::FixMode::NOT_SEEN;
 | 
			
		||||
 | 
			
		||||
  // States for SD state machine, which is used in non-blocking mode
 | 
			
		||||
  enum class SdStates {
 | 
			
		||||
 
 | 
			
		||||
@@ -510,7 +510,7 @@ void ObjectFactory::createAcsBoardComponents(SpiComIF& spiComIF, LinuxLibgpioIF*
 | 
			
		||||
  debugGps = true;
 | 
			
		||||
#endif
 | 
			
		||||
  RESET_ARGS_GNSS.gpioComIF = gpioComIF;
 | 
			
		||||
  RESET_ARGS_GNSS.waitPeriodMs = 5;
 | 
			
		||||
  RESET_ARGS_GNSS.waitPeriodMs = 10 * 1e3;
 | 
			
		||||
  auto gpsCtrl = new GpsHyperionLinuxController(objects::GPS_CONTROLLER, objects::NO_OBJECT,
 | 
			
		||||
                                                enableHkSets, debugGps);
 | 
			
		||||
  gpsCtrl->setResetPinTriggerFunction(gps::triggerGpioResetPin, &RESET_ARGS_GNSS);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define DUMMIES_GPSCTRLDUMMY_H_
 | 
			
		||||
 | 
			
		||||
#include <fsfw/controller/ExtendedControllerBase.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <linux/acs/GPSDefinitions.h>
 | 
			
		||||
 | 
			
		||||
class GpsCtrlDummy : public ExtendedControllerBase {
 | 
			
		||||
 public:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#include <dummies/GpsDhbDummy.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <linux/acs/GPSDefinitions.h>
 | 
			
		||||
 | 
			
		||||
GpsDhbDummy::GpsDhbDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
 | 
			
		||||
    : DeviceHandlerBase(objectId, comif, comCookie) {}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								fsfw
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								fsfw
									
									
									
									
									
								
							 Submodule fsfw updated: 43ea29cb84...8b21dd276d
									
								
							@@ -75,9 +75,12 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
8900;0x22c4;CLOCK_SET;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8901;0x22c5;CLOCK_DUMP;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8900;0x22c4;CLOCK_SET;INFO;Clock has been set. P1: old timeval seconds. P2: new timeval seconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8901;0x22c5;CLOCK_DUMP_LEGACY;INFO;Clock dump event. P1: timeval seconds P2: timeval milliseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;Clock could not be set. P1: Returncode.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8903;0x22c7;CLOCK_DUMP;INFO;Clock dump event. P1: timeval seconds P2: timeval microseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8904;0x22c8;CLOCK_DUMP_BEFORE_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8905;0x22c9;CLOCK_DUMP_AFTER_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
9100;0x238c;TC_DELETION_FAILED;MEDIUM;Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
9700;0x25e4;TEST;INFO;No description;fsfw/src/fsfw/pus/Service17Test.h
 | 
			
		||||
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;No description;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
 | 
			
		||||
@@ -233,8 +236,9 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
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
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: New fix. P2: Missed fix changes 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;linux/acs/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;MEDIUM;Could not get fix in maximum allowed time. Trying to reset both GNSS devices. P1: Maximum allowed time to get a fix after the GPS was switched on.;linux/acs/GPSDefinitions.h
 | 
			
		||||
13102;0x332e;RESET_FAIL;HIGH;Failed to reset an GNNS Device. P1: Board-Side.;linux/acs/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -75,9 +75,12 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
 | 
			
		||||
8900;0x22c4;CLOCK_SET;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8901;0x22c5;CLOCK_DUMP;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8900;0x22c4;CLOCK_SET;INFO;Clock has been set. P1: old timeval seconds. P2: new timeval seconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8901;0x22c5;CLOCK_DUMP_LEGACY;INFO;Clock dump event. P1: timeval seconds P2: timeval milliseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;Clock could not be set. P1: Returncode.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8903;0x22c7;CLOCK_DUMP;INFO;Clock dump event. P1: timeval seconds P2: timeval microseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8904;0x22c8;CLOCK_DUMP_BEFORE_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
8905;0x22c9;CLOCK_DUMP_AFTER_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
 | 
			
		||||
9100;0x238c;TC_DELETION_FAILED;MEDIUM;Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
 | 
			
		||||
9700;0x25e4;TEST;INFO;No description;fsfw/src/fsfw/pus/Service17Test.h
 | 
			
		||||
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;No description;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
 | 
			
		||||
@@ -233,8 +236,9 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
 | 
			
		||||
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
 | 
			
		||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: New fix. P2: Missed fix changes 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;linux/acs/GPSDefinitions.h
 | 
			
		||||
13101;0x332d;CANT_GET_FIX;MEDIUM;Could not get fix in maximum allowed time. Trying to reset both GNSS devices. P1: Maximum allowed time to get a fix after the GPS was switched on.;linux/acs/GPSDefinitions.h
 | 
			
		||||
13102;0x332e;RESET_FAIL;HIGH;Failed to reset an GNNS Device. P1: Board-Side.;linux/acs/GPSDefinitions.h
 | 
			
		||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
 | 
			
		||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
 | 
			
		||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 320 translations.
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 324 translations.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateEvents.h"
 | 
			
		||||
 | 
			
		||||
@@ -82,8 +82,11 @@ const char *BIT_LOCK_STRING = "BIT_LOCK";
 | 
			
		||||
const char *BIT_LOCK_LOST_STRING = "BIT_LOCK_LOST";
 | 
			
		||||
const char *FRAME_PROCESSING_FAILED_STRING = "FRAME_PROCESSING_FAILED";
 | 
			
		||||
const char *CLOCK_SET_STRING = "CLOCK_SET";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_LEGACY_STRING = "CLOCK_DUMP_LEGACY";
 | 
			
		||||
const char *CLOCK_SET_FAILURE_STRING = "CLOCK_SET_FAILURE";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_BEFORE_SETTING_TIME_STRING = "CLOCK_DUMP_BEFORE_SETTING_TIME";
 | 
			
		||||
const char *CLOCK_DUMP_AFTER_SETTING_TIME_STRING = "CLOCK_DUMP_AFTER_SETTING_TIME";
 | 
			
		||||
const char *TC_DELETION_FAILED_STRING = "TC_DELETION_FAILED";
 | 
			
		||||
const char *TEST_STRING = "TEST";
 | 
			
		||||
const char *CHANGE_OF_SETUP_PARAMETER_STRING = "CHANGE_OF_SETUP_PARAMETER";
 | 
			
		||||
@@ -241,6 +244,7 @@ const char *SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903_STRING = "SIDE_SWITCH_TRANS
 | 
			
		||||
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";
 | 
			
		||||
const char *RESET_FAIL_STRING = "RESET_FAIL";
 | 
			
		||||
const char *P60_BOOT_COUNT_STRING = "P60_BOOT_COUNT";
 | 
			
		||||
const char *BATT_MODE_STRING = "BATT_MODE";
 | 
			
		||||
const char *BATT_MODE_CHANGED_STRING = "BATT_MODE_CHANGED";
 | 
			
		||||
@@ -483,9 +487,15 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (8900):
 | 
			
		||||
      return CLOCK_SET_STRING;
 | 
			
		||||
    case (8901):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
      return CLOCK_DUMP_LEGACY_STRING;
 | 
			
		||||
    case (8902):
 | 
			
		||||
      return CLOCK_SET_FAILURE_STRING;
 | 
			
		||||
    case (8903):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
    case (8904):
 | 
			
		||||
      return CLOCK_DUMP_BEFORE_SETTING_TIME_STRING;
 | 
			
		||||
    case (8905):
 | 
			
		||||
      return CLOCK_DUMP_AFTER_SETTING_TIME_STRING;
 | 
			
		||||
    case (9100):
 | 
			
		||||
      return TC_DELETION_FAILED_STRING;
 | 
			
		||||
    case (9700):
 | 
			
		||||
@@ -800,6 +810,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return GPS_FIX_CHANGE_STRING;
 | 
			
		||||
    case (13101):
 | 
			
		||||
      return CANT_GET_FIX_STRING;
 | 
			
		||||
    case (13102):
 | 
			
		||||
      return RESET_FAIL_STRING;
 | 
			
		||||
    case (13200):
 | 
			
		||||
      return P60_BOOT_COUNT_STRING;
 | 
			
		||||
    case (13201):
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @brief  Auto-generated object translation file.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Contains 179 translations.
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateObjects.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,15 +7,19 @@
 | 
			
		||||
 | 
			
		||||
namespace GpsHyperion {
 | 
			
		||||
 | 
			
		||||
enum class FixMode : uint8_t { NOT_SEEN = 0, NO_FIX = 1, FIX_2D = 2, FIX_3D = 3, UNKNOWN = 4 };
 | 
			
		||||
enum FixMode : uint8_t { NOT_SEEN = 0, NO_FIX = 1, FIX_2D = 2, FIX_3D = 3 };
 | 
			
		||||
 | 
			
		||||
enum GnssChip : uint8_t { A_SIDE = 0, B_SIDE = 1 };
 | 
			
		||||
 | 
			
		||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::GPS_HANDLER;
 | 
			
		||||
//! [EXPORT] : [COMMENT] Fix has changed. P1: Old fix. P2: New fix
 | 
			
		||||
//! [EXPORT] : [COMMENT] Fix has changed. P1: New fix. P2: Missed fix changes
 | 
			
		||||
//! 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix
 | 
			
		||||
static constexpr Event GPS_FIX_CHANGE = event::makeEvent(SUBSYSTEM_ID, 0, severity::INFO);
 | 
			
		||||
//! [EXPORT] : [COMMENT] Could not get fix in maximum allowed time. P1: Maximum allowed time
 | 
			
		||||
//! to get a fix after the GPS was switched on.
 | 
			
		||||
static constexpr Event CANT_GET_FIX = event::makeEvent(SUBSYSTEM_ID, 1, severity::LOW);
 | 
			
		||||
//! [EXPORT] : [COMMENT] Could not get fix in maximum allowed time. Trying to reset both GNSS
 | 
			
		||||
//! devices. P1: Maximum allowed time to get a fix after the GPS was switched on.
 | 
			
		||||
static constexpr Event CANT_GET_FIX = event::makeEvent(SUBSYSTEM_ID, 1, severity::MEDIUM);
 | 
			
		||||
//! [EXPORT] : [COMMENT] Failed to reset an GNNS Device. P1: Board-Side.
 | 
			
		||||
static constexpr Event RESET_FAIL = event::makeEvent(SUBSYSTEM_ID, 2, severity::HIGH);
 | 
			
		||||
 | 
			
		||||
static constexpr DeviceCommandId_t GPS_REPLY = 0;
 | 
			
		||||
static constexpr DeviceCommandId_t TRIGGER_RESET_PIN_GNSS = 5;
 | 
			
		||||
@@ -53,8 +57,6 @@ static constexpr uint8_t SKYVIEW_ENTRIES = 6;
 | 
			
		||||
 | 
			
		||||
static constexpr uint8_t MAX_SATELLITES = 30;
 | 
			
		||||
 | 
			
		||||
enum GpsFixModes : uint8_t { INVALID = 0, NO_FIX = 1, FIX_2D = 2, FIX_3D = 3 };
 | 
			
		||||
 | 
			
		||||
}  // namespace GpsHyperion
 | 
			
		||||
 | 
			
		||||
class GpsPrimaryDataset : public StaticLocalDataSet<GpsHyperion::CORE_DATASET_ENTRIES> {
 | 
			
		||||
@@ -44,24 +44,21 @@ LocalPoolDataSetBase *GpsHyperionLinuxController::getDataSetHandle(sid_t sid) {
 | 
			
		||||
 | 
			
		||||
ReturnValue_t GpsHyperionLinuxController::checkModeCommand(Mode_t mode, Submode_t submode,
 | 
			
		||||
                                                           uint32_t *msToReachTheMode) {
 | 
			
		||||
  if (not modeCommanded) {
 | 
			
		||||
    if (mode == MODE_ON or mode == MODE_OFF) {
 | 
			
		||||
      // 5h time to reach fix
 | 
			
		||||
      *msToReachTheMode = MAX_SECONDS_TO_REACH_FIX;
 | 
			
		||||
      maxTimeToReachFix.resetTimer();
 | 
			
		||||
      modeCommanded = true;
 | 
			
		||||
    } else if (mode == MODE_NORMAL) {
 | 
			
		||||
      return HasModesIF::INVALID_MODE;
 | 
			
		||||
    }
 | 
			
		||||
  if (mode == MODE_ON) {
 | 
			
		||||
    maxTimeToReachFix.resetTimer();
 | 
			
		||||
    gainedNewFix.timeOut();
 | 
			
		||||
  } else if (mode == MODE_NORMAL) {
 | 
			
		||||
    return HasModesIF::INVALID_MODE;
 | 
			
		||||
  }
 | 
			
		||||
  if (mode == MODE_OFF) {
 | 
			
		||||
    maxTimeToReachFix.timeOut();
 | 
			
		||||
    gainedNewFix.timeOut();
 | 
			
		||||
    PoolReadGuard pg(&gpsSet);
 | 
			
		||||
    gpsSet.setValidity(false, true);
 | 
			
		||||
    // There can't be a fix with a device that is off.
 | 
			
		||||
    triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, 0);
 | 
			
		||||
    gpsSet.fixMode.value = 0;
 | 
			
		||||
    // The ctrl is off, so it cannot detect the data from the devices.
 | 
			
		||||
    handleFixChangedEvent(GpsHyperion::FixMode::NOT_SEEN);
 | 
			
		||||
    gpsSet.fixMode.value = GpsHyperion::FixMode::NOT_SEEN;
 | 
			
		||||
    oneShotSwitches.reset();
 | 
			
		||||
    modeCommanded = false;
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
}
 | 
			
		||||
@@ -75,13 +72,16 @@ ReturnValue_t GpsHyperionLinuxController::executeAction(ActionId_t actionId,
 | 
			
		||||
        PoolReadGuard pg(&gpsSet);
 | 
			
		||||
        // Set HK entries invalid
 | 
			
		||||
        gpsSet.setValidity(false, true);
 | 
			
		||||
        resetCallback(data, size, resetCallbackArgs);
 | 
			
		||||
        ReturnValue_t result = resetCallback(data, size, resetCallbackArgs);
 | 
			
		||||
        if (result != returnvalue::OK) {
 | 
			
		||||
          return result;
 | 
			
		||||
        }
 | 
			
		||||
        return HasActionsIF::EXECUTION_FINISHED;
 | 
			
		||||
      }
 | 
			
		||||
      return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return returnvalue::OK;
 | 
			
		||||
  return HasActionsIF::INVALID_ACTION_ID;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReturnValue_t GpsHyperionLinuxController::initializeLocalDataPool(
 | 
			
		||||
@@ -216,15 +216,9 @@ ReturnValue_t GpsHyperionLinuxController::handleGpsReadData() {
 | 
			
		||||
  bool modeIsSet = true;
 | 
			
		||||
  if (MODE_SET != (MODE_SET & gps.set)) {
 | 
			
		||||
    if (mode != MODE_OFF) {
 | 
			
		||||
      if (maxTimeToReachFix.hasTimedOut() and oneShotSwitches.cantGetFixSwitch) {
 | 
			
		||||
        sif::warning << "GpsHyperionLinuxController: No mode could be set in allowed "
 | 
			
		||||
                     << maxTimeToReachFix.getTimeoutMs() / 1000 << " seconds" << std::endl;
 | 
			
		||||
        triggerEvent(GpsHyperion::CANT_GET_FIX, maxTimeToReachFix.getTimeoutMs());
 | 
			
		||||
        oneShotSwitches.cantGetFixSwitch = false;
 | 
			
		||||
      }
 | 
			
		||||
      modeIsSet = false;
 | 
			
		||||
    } else {
 | 
			
		||||
      // GPS device is off anyway, so do other handling
 | 
			
		||||
      // GPS ctrl is off anyway, so do other handling
 | 
			
		||||
      return returnvalue::FAILED;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -249,27 +243,44 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
 | 
			
		||||
  uint8_t newFix = 0;
 | 
			
		||||
  if (modeIsSet) {
 | 
			
		||||
    // 0: Not seen, 1: No fix, 2: 2D-Fix, 3: 3D-Fix
 | 
			
		||||
    if (gps.fix.mode == 2 or gps.fix.mode == 3) {
 | 
			
		||||
    if (gps.fix.mode == GpsHyperion::FixMode::FIX_2D or
 | 
			
		||||
        gps.fix.mode == GpsHyperion::FixMode::FIX_3D) {
 | 
			
		||||
      validFix = true;
 | 
			
		||||
      maxTimeToReachFix.resetTimer();
 | 
			
		||||
    }
 | 
			
		||||
    newFix = gps.fix.mode;
 | 
			
		||||
    if (newFix == 0 or newFix == 1) {
 | 
			
		||||
      if (modeCommanded and maxTimeToReachFix.hasTimedOut()) {
 | 
			
		||||
        // We are supposed to be on and functioning, but no fix was found
 | 
			
		||||
        if (mode == MODE_ON or mode == MODE_NORMAL) {
 | 
			
		||||
          mode = MODE_OFF;
 | 
			
		||||
        }
 | 
			
		||||
        modeCommanded = false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (gpsSet.fixMode.value != newFix) {
 | 
			
		||||
#if OBSW_Q7S_EM != 1
 | 
			
		||||
    triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, newFix);
 | 
			
		||||
#endif
 | 
			
		||||
    handleFixChangedEvent(newFix);
 | 
			
		||||
  }
 | 
			
		||||
  gpsSet.fixMode = newFix;
 | 
			
		||||
  gpsSet.fixMode.setValid(modeIsSet);
 | 
			
		||||
  // We are supposed to be on and functioning, but no fix was found
 | 
			
		||||
  if (not validFix) {
 | 
			
		||||
    if (maxTimeToReachFix.hasTimedOut()) {
 | 
			
		||||
      // Set HK entries invalid
 | 
			
		||||
      gpsSet.setValidity(false, true);
 | 
			
		||||
      if (oneShotSwitches.cantGetFixSwitch) {
 | 
			
		||||
        sif::warning << "GpsHyperionLinuxController: No fix detected in allowed "
 | 
			
		||||
                     << maxTimeToReachFix.getTimeoutMs() / 1000 << " seconds" << std::endl;
 | 
			
		||||
        triggerEvent(GpsHyperion::CANT_GET_FIX, maxTimeToReachFix.getTimeoutMs());
 | 
			
		||||
        oneShotSwitches.cantGetFixSwitch = false;
 | 
			
		||||
        // Try resetting the devices
 | 
			
		||||
        if (resetCallback != nullptr) {
 | 
			
		||||
          uint8_t chip = GpsHyperion::GnssChip::A_SIDE;
 | 
			
		||||
          ReturnValue_t result = resetCallback(&chip, 1, resetCallbackArgs);
 | 
			
		||||
          if (result != returnvalue::OK) {
 | 
			
		||||
            triggerEvent(GpsHyperion::RESET_FAIL, chip);
 | 
			
		||||
          }
 | 
			
		||||
          chip = GpsHyperion::GnssChip::B_SIDE;
 | 
			
		||||
          result = resetCallback(&chip, 1, resetCallbackArgs);
 | 
			
		||||
          if (result != returnvalue::OK) {
 | 
			
		||||
            triggerEvent(GpsHyperion::RESET_FAIL, chip);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Only set on specific messages, so only set a valid flag to invalid
 | 
			
		||||
  // if not set for more than a full message set (10 messages here)
 | 
			
		||||
@@ -282,9 +293,12 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
 | 
			
		||||
    }
 | 
			
		||||
    satNotSetCounter = 0;
 | 
			
		||||
  } else {
 | 
			
		||||
    satNotSetCounter++;
 | 
			
		||||
    if (gpsSet.satInUse.isValid() and satNotSetCounter >= 10) {
 | 
			
		||||
    if (satNotSetCounter < 10) {
 | 
			
		||||
      satNotSetCounter++;
 | 
			
		||||
    } else {
 | 
			
		||||
      gpsSet.satInUse.value = 0;
 | 
			
		||||
      gpsSet.satInUse.setValid(false);
 | 
			
		||||
      gpsSet.satInView.value = 0;
 | 
			
		||||
      gpsSet.satInView.setValid(false);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -292,22 +306,24 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
 | 
			
		||||
  // LATLON is set for every message, no need for a counter
 | 
			
		||||
  bool latValid = false;
 | 
			
		||||
  bool longValid = false;
 | 
			
		||||
  if (LATLON_SET == (LATLON_SET & gps.set)) {
 | 
			
		||||
    if (std::isfinite(gps.fix.latitude)) {
 | 
			
		||||
      // Negative latitude -> South direction
 | 
			
		||||
      gpsSet.latitude.value = gps.fix.latitude;
 | 
			
		||||
      // As specified in gps.h: Only valid if mode >= 2
 | 
			
		||||
      if (gps.fix.mode >= 2) {
 | 
			
		||||
        latValid = true;
 | 
			
		||||
  if (modeIsSet) {
 | 
			
		||||
    if (LATLON_SET == (LATLON_SET & gps.set)) {
 | 
			
		||||
      if (std::isfinite(gps.fix.latitude)) {
 | 
			
		||||
        // Negative latitude -> South direction
 | 
			
		||||
        gpsSet.latitude.value = gps.fix.latitude;
 | 
			
		||||
        // As specified in gps.h: Only valid if mode >= 2
 | 
			
		||||
        if (gps.fix.mode >= GpsHyperion::FixMode::FIX_2D) {
 | 
			
		||||
          latValid = true;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (std::isfinite(gps.fix.longitude)) {
 | 
			
		||||
      // Negative longitude -> West direction
 | 
			
		||||
      gpsSet.longitude.value = gps.fix.longitude;
 | 
			
		||||
      // As specified in gps.h: Only valid if mode >= 2
 | 
			
		||||
      if (gps.fix.mode >= 2) {
 | 
			
		||||
        longValid = true;
 | 
			
		||||
      if (std::isfinite(gps.fix.longitude)) {
 | 
			
		||||
        // Negative longitude -> West direction
 | 
			
		||||
        gpsSet.longitude.value = gps.fix.longitude;
 | 
			
		||||
        // As specified in gps.h: Only valid if mode >= 2
 | 
			
		||||
        if (gps.fix.mode >= GpsHyperion::FixMode::FIX_2D) {
 | 
			
		||||
          longValid = true;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -316,20 +332,24 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
 | 
			
		||||
 | 
			
		||||
  // ALTITUDE is set for every message, no need for a counter
 | 
			
		||||
  bool altitudeValid = false;
 | 
			
		||||
  if (ALTITUDE_SET == (ALTITUDE_SET & gps.set) && std::isfinite(gps.fix.altitude)) {
 | 
			
		||||
    gpsSet.altitude.value = gps.fix.altitude;
 | 
			
		||||
    // As specified in gps.h: Only valid if mode == 3
 | 
			
		||||
    if (gps.fix.mode == 3) {
 | 
			
		||||
      altitudeValid = true;
 | 
			
		||||
  if (modeIsSet) {
 | 
			
		||||
    if (ALTITUDE_SET == (ALTITUDE_SET & gps.set) && std::isfinite(gps.fix.altitude)) {
 | 
			
		||||
      gpsSet.altitude.value = gps.fix.altitude;
 | 
			
		||||
      // As specified in gps.h: Only valid if mode == 3
 | 
			
		||||
      if (gps.fix.mode == GpsHyperion::FixMode::FIX_3D) {
 | 
			
		||||
        altitudeValid = true;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  gpsSet.altitude.setValid(altitudeValid);
 | 
			
		||||
 | 
			
		||||
  // SPEED is set for every message, no need for a counter
 | 
			
		||||
  bool speedValid = false;
 | 
			
		||||
  if (SPEED_SET == (SPEED_SET & gps.set) && std::isfinite(gps.fix.speed)) {
 | 
			
		||||
    gpsSet.speed.value = gps.fix.speed;
 | 
			
		||||
    speedValid = true;
 | 
			
		||||
  if (modeIsSet) {
 | 
			
		||||
    if (SPEED_SET == (SPEED_SET & gps.set) && std::isfinite(gps.fix.speed)) {
 | 
			
		||||
      gpsSet.speed.value = gps.fix.speed;
 | 
			
		||||
      speedValid = true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  gpsSet.speed.setValid(speedValid);
 | 
			
		||||
 | 
			
		||||
@@ -430,3 +450,14 @@ void GpsHyperionLinuxController::overwriteTimeIfNotSane(timeval time, bool valid
 | 
			
		||||
    timeInit = true;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GpsHyperionLinuxController::handleFixChangedEvent(uint8_t newFix) {
 | 
			
		||||
  if (gainedNewFix.hasTimedOut()) {
 | 
			
		||||
    triggerEvent(GpsHyperion::GPS_FIX_CHANGE, newFix, fixChangeCounter);
 | 
			
		||||
    fixChangeCounter = 0;
 | 
			
		||||
    gainedNewFix.resetTimer();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  fixChangeCounter++;
 | 
			
		||||
  gainedNewFix.resetTimer();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,13 @@
 | 
			
		||||
#ifndef MISSION_DEVICES_GPSHYPERIONHANDLER_H_
 | 
			
		||||
#define MISSION_DEVICES_GPSHYPERIONHANDLER_H_
 | 
			
		||||
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <common/config/eive/eventSubsystemIds.h>
 | 
			
		||||
#include <fsfw/FSFW.h>
 | 
			
		||||
#include <fsfw/controller/ExtendedControllerBase.h>
 | 
			
		||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
 | 
			
		||||
#include <linux/acs/GPSDefinitions.h>
 | 
			
		||||
#include <mission/utility/trace.h>
 | 
			
		||||
 | 
			
		||||
#include "eive/eventSubsystemIds.h"
 | 
			
		||||
#include "fsfw/FSFW.h"
 | 
			
		||||
#include "fsfw/controller/ExtendedControllerBase.h"
 | 
			
		||||
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
 | 
			
		||||
 | 
			
		||||
#ifdef FSFW_OSAL_LINUX
 | 
			
		||||
#include <gps.h>
 | 
			
		||||
#include <libgpsmm.h>
 | 
			
		||||
@@ -24,8 +23,8 @@
 | 
			
		||||
 */
 | 
			
		||||
class GpsHyperionLinuxController : public ExtendedControllerBase {
 | 
			
		||||
 public:
 | 
			
		||||
  // 30 minutes
 | 
			
		||||
  static constexpr uint32_t MAX_SECONDS_TO_REACH_FIX = 60 * 30;
 | 
			
		||||
  // 15 minutes
 | 
			
		||||
  static constexpr uint32_t MAX_SECONDS_TO_REACH_FIX = 60 * 15;
 | 
			
		||||
 | 
			
		||||
  enum ReadModes { SHM = 0, SOCKET = 1 };
 | 
			
		||||
 | 
			
		||||
@@ -65,7 +64,8 @@ class GpsHyperionLinuxController : public ExtendedControllerBase {
 | 
			
		||||
  const char* currentClientBuf = nullptr;
 | 
			
		||||
  ReadModes readMode = ReadModes::SOCKET;
 | 
			
		||||
  Countdown maxTimeToReachFix = Countdown(MAX_SECONDS_TO_REACH_FIX * 1000);
 | 
			
		||||
  bool modeCommanded = false;
 | 
			
		||||
  Countdown gainedNewFix = Countdown(60 * 2 * 1000);
 | 
			
		||||
  uint32_t fixChangeCounter = 0;
 | 
			
		||||
  bool timeInit = false;
 | 
			
		||||
  uint8_t satNotSetCounter = 0;
 | 
			
		||||
 | 
			
		||||
@@ -92,6 +92,8 @@ class GpsHyperionLinuxController : public ExtendedControllerBase {
 | 
			
		||||
  // we set it with the roughly valid time from the GPS. For some reason, NTP might only work
 | 
			
		||||
  // if the time difference between sys time and current time is not too large
 | 
			
		||||
  void overwriteTimeIfNotSane(timeval time, bool validFix);
 | 
			
		||||
 | 
			
		||||
  void handleFixChangedEvent(uint8_t newFix);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* MISSION_DEVICES_GPSHYPERIONHANDLER_H_ */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 320 translations.
 | 
			
		||||
 * @brief    Auto-generated event translation file. Contains 324 translations.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateEvents.h"
 | 
			
		||||
 | 
			
		||||
@@ -82,8 +82,11 @@ const char *BIT_LOCK_STRING = "BIT_LOCK";
 | 
			
		||||
const char *BIT_LOCK_LOST_STRING = "BIT_LOCK_LOST";
 | 
			
		||||
const char *FRAME_PROCESSING_FAILED_STRING = "FRAME_PROCESSING_FAILED";
 | 
			
		||||
const char *CLOCK_SET_STRING = "CLOCK_SET";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_LEGACY_STRING = "CLOCK_DUMP_LEGACY";
 | 
			
		||||
const char *CLOCK_SET_FAILURE_STRING = "CLOCK_SET_FAILURE";
 | 
			
		||||
const char *CLOCK_DUMP_STRING = "CLOCK_DUMP";
 | 
			
		||||
const char *CLOCK_DUMP_BEFORE_SETTING_TIME_STRING = "CLOCK_DUMP_BEFORE_SETTING_TIME";
 | 
			
		||||
const char *CLOCK_DUMP_AFTER_SETTING_TIME_STRING = "CLOCK_DUMP_AFTER_SETTING_TIME";
 | 
			
		||||
const char *TC_DELETION_FAILED_STRING = "TC_DELETION_FAILED";
 | 
			
		||||
const char *TEST_STRING = "TEST";
 | 
			
		||||
const char *CHANGE_OF_SETUP_PARAMETER_STRING = "CHANGE_OF_SETUP_PARAMETER";
 | 
			
		||||
@@ -241,6 +244,7 @@ const char *SIDE_SWITCH_TRANSITION_NOT_ALLOWED_12903_STRING = "SIDE_SWITCH_TRANS
 | 
			
		||||
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";
 | 
			
		||||
const char *RESET_FAIL_STRING = "RESET_FAIL";
 | 
			
		||||
const char *P60_BOOT_COUNT_STRING = "P60_BOOT_COUNT";
 | 
			
		||||
const char *BATT_MODE_STRING = "BATT_MODE";
 | 
			
		||||
const char *BATT_MODE_CHANGED_STRING = "BATT_MODE_CHANGED";
 | 
			
		||||
@@ -483,9 +487,15 @@ const char *translateEvents(Event event) {
 | 
			
		||||
    case (8900):
 | 
			
		||||
      return CLOCK_SET_STRING;
 | 
			
		||||
    case (8901):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
      return CLOCK_DUMP_LEGACY_STRING;
 | 
			
		||||
    case (8902):
 | 
			
		||||
      return CLOCK_SET_FAILURE_STRING;
 | 
			
		||||
    case (8903):
 | 
			
		||||
      return CLOCK_DUMP_STRING;
 | 
			
		||||
    case (8904):
 | 
			
		||||
      return CLOCK_DUMP_BEFORE_SETTING_TIME_STRING;
 | 
			
		||||
    case (8905):
 | 
			
		||||
      return CLOCK_DUMP_AFTER_SETTING_TIME_STRING;
 | 
			
		||||
    case (9100):
 | 
			
		||||
      return TC_DELETION_FAILED_STRING;
 | 
			
		||||
    case (9700):
 | 
			
		||||
@@ -800,6 +810,8 @@ const char *translateEvents(Event event) {
 | 
			
		||||
      return GPS_FIX_CHANGE_STRING;
 | 
			
		||||
    case (13101):
 | 
			
		||||
      return CANT_GET_FIX_STRING;
 | 
			
		||||
    case (13102):
 | 
			
		||||
      return RESET_FAIL_STRING;
 | 
			
		||||
    case (13200):
 | 
			
		||||
      return P60_BOOT_COUNT_STRING;
 | 
			
		||||
    case (13201):
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @brief  Auto-generated object translation file.
 | 
			
		||||
 * @details
 | 
			
		||||
 * Contains 179 translations.
 | 
			
		||||
 * Generated on: 2024-02-29 13:15:00
 | 
			
		||||
 * Generated on: 2024-04-10 11:49:35
 | 
			
		||||
 */
 | 
			
		||||
#include "translateObjects.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,10 @@
 | 
			
		||||
#include <linux/payload/mpsocRetvals.h>
 | 
			
		||||
#include <mission/payload/plocSpBase.h>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "eive/definitions.h"
 | 
			
		||||
#include "fsfw/globalfunctions/CRC.h"
 | 
			
		||||
#include "fsfw/returnvalues/returnvalue.h"
 | 
			
		||||
#include "fsfw/serialize/SerializeAdapter.h"
 | 
			
		||||
#include "fsfw/serialize/SerializeIF.h"
 | 
			
		||||
 | 
			
		||||
namespace mpsoc {
 | 
			
		||||
 | 
			
		||||
@@ -838,20 +838,47 @@ class TcSimplexSendFile : public TcBase {
 | 
			
		||||
      : TcBase(params, apid::TC_SIMPLEX_SEND_FILE, sequenceCount) {}
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t setPayload(const uint8_t* commandData, size_t commandDataLen) {
 | 
			
		||||
    if (commandDataLen < MIN_DATA_LENGTH) {
 | 
			
		||||
      return INVALID_LENGTH;
 | 
			
		||||
    }
 | 
			
		||||
    if (commandDataLen > MAX_DATA_LENGTH) {
 | 
			
		||||
      return INVALID_LENGTH;
 | 
			
		||||
    }
 | 
			
		||||
    std::string fileName(reinterpret_cast<const char*>(commandData));
 | 
			
		||||
    const uint8_t** dataPtr = &commandData;
 | 
			
		||||
    ReturnValue_t result = SerializeAdapter::deSerialize(&chunkParameter, dataPtr, &commandDataLen,
 | 
			
		||||
                                                         SerializeIF::Endianness::NETWORK);
 | 
			
		||||
    if (result != returnvalue::OK) {
 | 
			
		||||
      return result;
 | 
			
		||||
    }
 | 
			
		||||
    /// No chunks makes no sense, and DIV str can not be longer than whats representable with 3
 | 
			
		||||
    /// decimal digits.
 | 
			
		||||
    if (chunkParameter == 0 or chunkParameter > 999) {
 | 
			
		||||
      return INVALID_PARAMETER;
 | 
			
		||||
    }
 | 
			
		||||
    std::string fileName(reinterpret_cast<const char*>(*dataPtr));
 | 
			
		||||
    if (fileName.size() + sizeof(NULL_TERMINATOR) > MAX_FILENAME_SIZE) {
 | 
			
		||||
      return FILENAME_TOO_LONG;
 | 
			
		||||
    }
 | 
			
		||||
    spParams.setFullPayloadLen(commandDataLen + CRC_SIZE);
 | 
			
		||||
    std::memcpy(payloadStart, commandData, commandDataLen);
 | 
			
		||||
    size_t currentCopyIdx = 0;
 | 
			
		||||
    size_t payloadLen = fileName.length() + sizeof(NULL_TERMINATOR) + CRC_SIZE;
 | 
			
		||||
    if (chunkParameter > 1) {
 | 
			
		||||
      char divStr[16]{};
 | 
			
		||||
      sprintf(divStr, "DIV%03u", chunkParameter);
 | 
			
		||||
      std::memcpy(payloadStart, divStr, DIV_STR_LEN);
 | 
			
		||||
      payloadLen += DIV_STR_LEN;
 | 
			
		||||
      currentCopyIdx += DIV_STR_LEN;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::memcpy(payloadStart + currentCopyIdx, *dataPtr, fileName.length());
 | 
			
		||||
    spParams.setFullPayloadLen(payloadLen);
 | 
			
		||||
    return returnvalue::OK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  static const size_t MAX_DATA_LENGTH = 256;
 | 
			
		||||
  uint32_t chunkParameter = 0;
 | 
			
		||||
  static constexpr size_t MAX_DATA_LENGTH = 256;
 | 
			
		||||
  static constexpr size_t MIN_DATA_LENGTH = 4;
 | 
			
		||||
  static constexpr size_t DIV_STR_LEN = 6;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -182,7 +182,7 @@ void PowerController::calculateStateOfCharge() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // calculate total battery current
 | 
			
		||||
  iBat = p60CoreHk.batteryCurrent.value + bpxBatteryHk.dischargeCurrent.value;
 | 
			
		||||
  iBat = p60CoreHk.batteryCurrent.value - bpxBatteryHk.dischargeCurrent.value;
 | 
			
		||||
 | 
			
		||||
  result = calculateOpenCircuitVoltageCharge();
 | 
			
		||||
  if (result != returnvalue::OK) {
 | 
			
		||||
 
 | 
			
		||||
@@ -57,9 +57,9 @@ class PowerController : public ExtendedControllerBase, public ReceivesParameterM
 | 
			
		||||
  float batteryMaximumCapacity = 2.6 * 2;            // [Ah]
 | 
			
		||||
  float coulombCounterVoltageUpperThreshold = 16.2;  // [V]
 | 
			
		||||
  double maxAllowedTimeDiff = 1.5;                   // [s]
 | 
			
		||||
  float payloadOpLimitOn = 0.90;                     // [%]
 | 
			
		||||
  float payloadOpLimitLow = 0.75;                    // [%]
 | 
			
		||||
  float higherModesLimit = 0.6;                      // [%]
 | 
			
		||||
  float payloadOpLimitOn = 0.80;                     // [%]
 | 
			
		||||
  float payloadOpLimitLow = 0.65;                    // [%]
 | 
			
		||||
  float higherModesLimit = 0.60;                     // [%]
 | 
			
		||||
 | 
			
		||||
  // OCV Look-up-Table {[Ah],[V]}
 | 
			
		||||
  static constexpr uint8_t LOOK_UP_TABLE_MAX_IDX = 99;
 | 
			
		||||
 
 | 
			
		||||
@@ -197,9 +197,9 @@ class ThermalController : public ExtendedControllerBase {
 | 
			
		||||
  tcsCtrl::TempLimits pcduAcuLimits = tcsCtrl::TempLimits(-35.0, -35.0, 80.0, 85.0, 85.0);
 | 
			
		||||
  tcsCtrl::TempLimits pcduPduLimits = tcsCtrl::TempLimits(-35.0, -35.0, 80.0, 85.0, 85.0);
 | 
			
		||||
  tcsCtrl::TempLimits plPcduBoardLimits = tcsCtrl::TempLimits(-55.0, -40.0, 80.0, 85.0, 125.0);
 | 
			
		||||
  tcsCtrl::TempLimits plocMissionBoardLimits = tcsCtrl::TempLimits(-30.0, -5.0, 40.0, 45.0, 60);
 | 
			
		||||
  tcsCtrl::TempLimits plocMissionBoardLimits = tcsCtrl::TempLimits(-30.0, -10.0, 40.0, 45.0, 60);
 | 
			
		||||
  tcsCtrl::TempLimits plocProcessingBoardLimits =
 | 
			
		||||
      tcsCtrl::TempLimits(-30.0, -5.0, 40.0, 45.0, 60.0);
 | 
			
		||||
      tcsCtrl::TempLimits(-30.0, -10.0, 40.0, 45.0, 60.0);
 | 
			
		||||
  tcsCtrl::TempLimits dacLimits = tcsCtrl::TempLimits(-65.0, -40.0, 113.0, 118.0, 150.0);
 | 
			
		||||
  tcsCtrl::TempLimits cameraLimits = tcsCtrl::TempLimits(-40.0, -30.0, 60.0, 65.0, 85.0);
 | 
			
		||||
  tcsCtrl::TempLimits droLimits = tcsCtrl::TempLimits(-40.0, -30.0, 75.0, 80.0, 90.0);
 | 
			
		||||
 
 | 
			
		||||
@@ -554,6 +554,9 @@ ReturnValue_t AcsParameters::getParameter(uint8_t domainId, uint8_t parameterId,
 | 
			
		||||
        case 0xE:
 | 
			
		||||
          parameterWrapper->set(gsTargetModeControllerParameters.altitudeTgt);
 | 
			
		||||
          break;
 | 
			
		||||
        case 0xF:
 | 
			
		||||
          parameterWrapper->set(gsTargetModeControllerParameters.rotRateLimit);
 | 
			
		||||
          break;
 | 
			
		||||
        default:
 | 
			
		||||
          return INVALID_IDENTIFIER_ID;
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -866,7 +866,7 @@ class AcsParameters : public HasParametersIF {
 | 
			
		||||
    double desatMomentumRef[3] = {0, 0, 0};
 | 
			
		||||
    double deSatGainFactor = 1000;
 | 
			
		||||
    uint8_t desatOn = true;
 | 
			
		||||
    uint8_t useMekf = false;
 | 
			
		||||
    uint8_t useMekf = true;
 | 
			
		||||
  } pointingLawParameters;
 | 
			
		||||
 | 
			
		||||
  struct IdleModeControllerParameters : PointingLawParameters {
 | 
			
		||||
@@ -898,6 +898,7 @@ class AcsParameters : public HasParametersIF {
 | 
			
		||||
    double latitudeTgt = 48.7495 * DEG2RAD;   // [rad] Latitude
 | 
			
		||||
    double longitudeTgt = 9.10384 * DEG2RAD;  // [rad] Longitude
 | 
			
		||||
    double altitudeTgt = 500;                 // [m]
 | 
			
		||||
    double rotRateLimit = .75 * DEG2RAD;
 | 
			
		||||
  } gsTargetModeControllerParameters;
 | 
			
		||||
 | 
			
		||||
  struct NadirModeControllerParameters : PointingLawParameters {
 | 
			
		||||
 
 | 
			
		||||
@@ -251,7 +251,7 @@ void Guidance::limitReferenceRotation(const double xAxisIX[3], double quatIX[4])
 | 
			
		||||
  QuaternionOperations::inverse(quatIXprev, quatXprevI);
 | 
			
		||||
  QuaternionOperations::multiply(quatIX, quatXprevI, quatXprevX);
 | 
			
		||||
  QuaternionOperations::normalize(quatXprevX);
 | 
			
		||||
  double phiMax = acsParameters->gsTargetModeControllerParameters.omMax *
 | 
			
		||||
  double phiMax = acsParameters->gsTargetModeControllerParameters.rotRateLimit *
 | 
			
		||||
                  acsParameters->onBoardParams.sampleTime;
 | 
			
		||||
  if (2 * std::acos(quatXprevX[3]) < phiMax) {
 | 
			
		||||
    return;
 | 
			
		||||
@@ -303,9 +303,9 @@ void Guidance::comparePtg(double currentQuat[4], double currentSatRotRate[3], do
 | 
			
		||||
  // First calculate error quaternion between current and target orientation without reference
 | 
			
		||||
  // quaternion
 | 
			
		||||
  double errorQuatWoRef[4] = {0, 0, 0, 0};
 | 
			
		||||
  QuaternionOperations::multiply(currentQuat, targetQuat, errorQuatWoRef);
 | 
			
		||||
  QuaternionOperations::multiply(targetQuat, currentQuat, errorQuatWoRef);
 | 
			
		||||
  // Then add rotation from reference quaternion
 | 
			
		||||
  QuaternionOperations::multiply(refQuat, errorQuatWoRef, errorQuat);
 | 
			
		||||
  QuaternionOperations::multiply(errorQuatWoRef, refQuat, errorQuat);
 | 
			
		||||
  // Keep scalar part of quaternion positive
 | 
			
		||||
  if (errorQuat[3] < 0) {
 | 
			
		||||
    VectorOperations<double>::mulScalar(errorQuat, -1, errorQuat, 4);
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
#include <fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h>
 | 
			
		||||
#include <fsfw_hal/devicehandlers/MgmRM3100Handler.h>
 | 
			
		||||
#include <fsfw_hal/devicehandlers/devicedefinitions/gyroL3gHelpers.h>
 | 
			
		||||
#include <mission/acs/archive/GPSDefinitions.h>
 | 
			
		||||
#include <linux/acs/GPSDefinitions.h>
 | 
			
		||||
#include <mission/acs/gyroAdisHelpers.h>
 | 
			
		||||
#include <mission/acs/imtqHelpers.h>
 | 
			
		||||
#include <mission/acs/rwHelpers.h>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tmtc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								tmtc
									
									
									
									
									
								
							 Submodule tmtc updated: c843356c8a...37eafb722b
									
								
							@@ -6,5 +6,6 @@ target_sources(${UNITTEST_NAME} PRIVATE
 | 
			
		||||
    testEnvironment.cpp
 | 
			
		||||
    testGenericFilesystem.cpp
 | 
			
		||||
    hdlcEncodingRw.cpp
 | 
			
		||||
    mpsocTests.cpp
 | 
			
		||||
    printChar.cpp
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								unittest/mpsocTests.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								unittest/mpsocTests.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
 | 
			
		||||
#include <catch2/catch_test_macros.hpp>
 | 
			
		||||
 | 
			
		||||
TEST_CASE("MPSoC helper tests", "[payload]") {
 | 
			
		||||
  char divStr[16]{};
 | 
			
		||||
  uint32_t divParam = 0;
 | 
			
		||||
 | 
			
		||||
  SECTION("Simple Test") {
 | 
			
		||||
    divParam = 3;
 | 
			
		||||
    CHECK(divParam < 999);
 | 
			
		||||
    sprintf(divStr, "DIV%03u", divParam);
 | 
			
		||||
    REQUIRE(strcmp(divStr, "DIV003") == 0);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user