Merge remote-tracking branch 'origin/develop' into mueller/pcdu-hk-core-sets
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit

This commit is contained in:
2022-04-08 14:15:58 +02:00
16 changed files with 939 additions and 753 deletions

View File

@ -3,6 +3,8 @@
#include "OBSWConfig.h"
#include "fsfw/datapool/PoolReadGuard.h"
#include "fsfw/timemanager/Clock.h"
#include "linux/utility/utility.h"
#include "mission/utility/compileTime.h"
#if FSFW_DEV_HYPERION_GPS_CREATE_NMEA_CSV == 1
@ -126,8 +128,17 @@ void GPSHyperionLinuxController::readGpsDataFromGpsd() {
return;
}
bool validFix = false;
static_cast<void>(validFix);
// 0: Not seen, 1: No fix, 2: 2D-Fix, 3: 3D-Fix
gpsSet.fixMode.value = gps->fix.mode;
int newFixMode = gps->fix.mode;
if (newFixMode == 2 or newFixMode == 3) {
validFix = true;
}
if (gpsSet.fixMode.value != newFixMode) {
triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, newFixMode);
}
gpsSet.fixMode.value = newFixMode;
if (gps->fix.mode == 0 or gps->fix.mode == 1) {
if (modeCommanded and maxTimeToReachFix.hasTimedOut()) {
// We are supposed to be on and functioning, but not fix was found
@ -180,11 +191,24 @@ void GPSHyperionLinuxController::readGpsDataFromGpsd() {
} else {
timeIsConstantCounter = 0;
}
if (timeInit and validFix) {
if (not utility::timeSanityCheck()) {
#if OBSW_VERBOSE_LEVEL >= 1
time_t timeRaw = time.tv_sec;
std::tm *timeTm = std::gmtime(&timeRaw);
sif::info << "Setting invalid system time from GPS data directly: "
<< std::put_time(timeTm, "%c %Z") << std::endl;
#endif
// For some reason, the clock needs to be somewhat correct for NTP to work. Really dumb..
Clock::setClock(&time);
}
timeInit = false;
}
// If the received time does not change anymore for whatever reason, do not set it here
// to avoid stale times. Also, don't do it too often often to avoid jumping times
if (timeIsConstantCounter < 20 and timeUpdateCd.hasTimedOut()) {
// Update the system time here for now. NTP seems to be unable to do so for whatever reason.
// Further tests have shown that the time seems to be set by NTPD after sme time..
// Further tests have shown that the time seems to be set by NTPD after some time..
// Clock::setClock(&time);
timeUpdateCd.resetTimer();
}

View File

@ -1,6 +1,7 @@
#ifndef MISSION_DEVICES_GPSHYPERIONHANDLER_H_
#define MISSION_DEVICES_GPSHYPERIONHANDLER_H_
#include "commonSubsystemIds.h"
#include "fsfw/FSFW.h"
#include "fsfw/controller/ExtendedControllerBase.h"
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
@ -22,6 +23,7 @@
class GPSHyperionLinuxController : public ExtendedControllerBase {
public:
static constexpr uint32_t MAX_SECONDS_TO_REACH_FIX = 60 * 60 * 5;
GPSHyperionLinuxController(object_id_t objectId, object_id_t parentId,
bool debugHyperionGps = false);
virtual ~GPSHyperionLinuxController();
@ -49,6 +51,7 @@ class GPSHyperionLinuxController : public ExtendedControllerBase {
GpsPrimaryDataset gpsSet;
Countdown maxTimeToReachFix = Countdown(MAX_SECONDS_TO_REACH_FIX * 1000);
bool modeCommanded = true;
bool timeInit = true;
gpsmm myGpsmm;
bool debugHyperionGps = false;
uint32_t timeIsConstantCounter = 0;

View File

@ -1,7 +1,7 @@
/**
* @brief Auto-generated event translation file. Contains 181 translations.
* @brief Auto-generated event translation file. Contains 186 translations.
* @details
* Generated on: 2022-03-28 12:48:26
* Generated on: 2022-04-08 14:13:35
*/
#include "translateEvents.h"
@ -102,6 +102,7 @@ const char *ACK_FAILURE_STRING = "ACK_FAILURE";
const char *EXE_FAILURE_STRING = "EXE_FAILURE";
const char *MPSOC_HANDLER_CRC_FAILURE_STRING = "MPSOC_HANDLER_CRC_FAILURE";
const char *MPSOC_HANDLER_SEQ_CNT_MISMATCH_STRING = "MPSOC_HANDLER_SEQ_CNT_MISMATCH";
const char *MPSOC_SHUTDOWN_FAILED_STRING = "MPSOC_SHUTDOWN_FAILED";
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";
@ -178,6 +179,10 @@ 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 *CHILDREN_LOST_MODE_STRING = "CHILDREN_LOST_MODE";
const char *GPS_FIX_CHANGE_STRING = "GPS_FIX_CHANGE";
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";
const char *ALLOC_FAILURE_STRING = "ALLOC_FAILURE";
const char *REBOOT_SW_STRING = "REBOOT_SW";
const char *REBOOT_MECHANISM_TRIGGERED_STRING = "REBOOT_MECHANISM_TRIGGERED";
@ -343,194 +348,204 @@ const char *translateEvents(Event event) {
return TEST_STRING;
case (10600):
return CHANGE_OF_SETUP_PARAMETER_STRING;
case (10800):
case (11300):
return SWITCH_CMD_SENT_STRING;
case (10801):
return SWITCH_HAS_CHANGED_STRING;
case (10802):
return SWITCHING_Q7S_DENIED_STRING;
case (10900):
return GPIO_PULL_HIGH_FAILED_STRING;
case (10901):
return GPIO_PULL_LOW_FAILED_STRING;
case (10902):
return SWITCH_ALREADY_ON_STRING;
case (10903):
return SWITCH_ALREADY_OFF_STRING;
case (10904):
return MAIN_SWITCH_TIMEOUT_STRING;
case (11000):
return MAIN_SWITCH_ON_TIMEOUT_STRING;
case (11001):
return MAIN_SWITCH_OFF_TIMEOUT_STRING;
case (11002):
return DEPLOYMENT_FAILED_STRING;
case (11003):
return DEPL_SA1_GPIO_SWTICH_ON_FAILED_STRING;
case (11004):
return DEPL_SA2_GPIO_SWTICH_ON_FAILED_STRING;
case (11101):
return MEMORY_READ_RPT_CRC_FAILURE_STRING;
case (11102):
return ACK_FAILURE_STRING;
case (11103):
return EXE_FAILURE_STRING;
case (11104):
return MPSOC_HANDLER_CRC_FAILURE_STRING;
case (11105):
return MPSOC_HANDLER_SEQ_CNT_MISMATCH_STRING;
case (11201):
return SELF_TEST_I2C_FAILURE_STRING;
case (11202):
return SELF_TEST_SPI_FAILURE_STRING;
case (11203):
return SELF_TEST_ADC_FAILURE_STRING;
case (11204):
return SELF_TEST_PWM_FAILURE_STRING;
case (11205):
return SELF_TEST_TC_FAILURE_STRING;
case (11206):
return SELF_TEST_MTM_RANGE_FAILURE_STRING;
case (11207):
return SELF_TEST_COIL_CURRENT_FAILURE_STRING;
case (11208):
return INVALID_ERROR_BYTE_STRING;
case (11301):
return ERROR_STATE_STRING;
return SWITCH_HAS_CHANGED_STRING;
case (11302):
return SWITCHING_Q7S_DENIED_STRING;
case (11400):
return GPIO_PULL_HIGH_FAILED_STRING;
case (11401):
return BOOTING_FIRMWARE_FAILED_STRING;
return GPIO_PULL_LOW_FAILED_STRING;
case (11402):
return BOOTING_BOOTLOADER_FAILED_STRING;
return SWITCH_ALREADY_ON_STRING;
case (11403):
return SWITCH_ALREADY_OFF_STRING;
case (11404):
return MAIN_SWITCH_TIMEOUT_STRING;
case (11500):
return MAIN_SWITCH_ON_TIMEOUT_STRING;
case (11501):
return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING;
return MAIN_SWITCH_OFF_TIMEOUT_STRING;
case (11502):
return SUPV_ACK_FAILURE_STRING;
return DEPLOYMENT_FAILED_STRING;
case (11503):
return SUPV_EXE_FAILURE_STRING;
return DEPL_SA1_GPIO_SWTICH_ON_FAILED_STRING;
case (11504):
return SUPV_CRC_FAILURE_EVENT_STRING;
case (11600):
return SANITIZATION_FAILED_STRING;
return DEPL_SA2_GPIO_SWTICH_ON_FAILED_STRING;
case (11601):
return MOUNTED_SD_CARD_STRING;
case (11700):
return UPDATE_FILE_NOT_EXISTS_STRING;
return MEMORY_READ_RPT_CRC_FAILURE_STRING;
case (11602):
return ACK_FAILURE_STRING;
case (11603):
return EXE_FAILURE_STRING;
case (11604):
return MPSOC_HANDLER_CRC_FAILURE_STRING;
case (11605):
return MPSOC_HANDLER_SEQ_CNT_MISMATCH_STRING;
case (11606):
return MPSOC_SHUTDOWN_FAILED_STRING;
case (11701):
return ACTION_COMMANDING_FAILED_STRING;
return SELF_TEST_I2C_FAILURE_STRING;
case (11702):
return UPDATE_AVAILABLE_FAILED_STRING;
return SELF_TEST_SPI_FAILURE_STRING;
case (11703):
return UPDATE_TRANSFER_FAILED_STRING;
return SELF_TEST_ADC_FAILURE_STRING;
case (11704):
return UPDATE_VERIFY_FAILED_STRING;
return SELF_TEST_PWM_FAILURE_STRING;
case (11705):
return UPDATE_FINISHED_STRING;
case (11800):
return SEND_MRAM_DUMP_FAILED_STRING;
return SELF_TEST_TC_FAILURE_STRING;
case (11706):
return SELF_TEST_MTM_RANGE_FAILURE_STRING;
case (11707):
return SELF_TEST_COIL_CURRENT_FAILURE_STRING;
case (11708):
return INVALID_ERROR_BYTE_STRING;
case (11801):
return MRAM_DUMP_FAILED_STRING;
case (11802):
return MRAM_DUMP_FINISHED_STRING;
return ERROR_STATE_STRING;
case (11901):
return INVALID_TC_FRAME_STRING;
return BOOTING_FIRMWARE_FAILED_STRING;
case (11902):
return INVALID_FAR_STRING;
case (11903):
return CARRIER_LOCK_STRING;
case (11904):
return BIT_LOCK_PDEC_STRING;
case (12000):
return IMAGE_UPLOAD_FAILED_STRING;
return BOOTING_BOOTLOADER_FAILED_STRING;
case (12001):
return IMAGE_DOWNLOAD_FAILED_STRING;
return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING;
case (12002):
return IMAGE_UPLOAD_SUCCESSFUL_STRING;
return SUPV_ACK_FAILURE_STRING;
case (12003):
return IMAGE_DOWNLOAD_SUCCESSFUL_STRING;
return SUPV_EXE_FAILURE_STRING;
case (12004):
return FLASH_WRITE_SUCCESSFUL_STRING;
case (12005):
return FLASH_READ_SUCCESSFUL_STRING;
case (12006):
return FLASH_READ_FAILED_STRING;
case (12007):
return FIRMWARE_UPDATE_SUCCESSFUL_STRING;
case (12008):
return FIRMWARE_UPDATE_FAILED_STRING;
case (12009):
return STR_HELPER_READING_REPLY_FAILED_STRING;
case (12010):
return STR_HELPER_COM_ERROR_STRING;
case (12011):
return STR_HELPER_NO_REPLY_STRING;
case (12012):
return STR_HELPER_DEC_ERROR_STRING;
case (12013):
return POSITION_MISMATCH_STRING;
case (12014):
return STR_HELPER_FILE_NOT_EXISTS_STRING;
case (12015):
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
case (12016):
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
return SUPV_CRC_FAILURE_EVENT_STRING;
case (12100):
return MPSOC_FLASH_WRITE_FAILED_STRING;
return SANITIZATION_FAILED_STRING;
case (12101):
return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING;
case (12102):
return SENDING_COMMAND_FAILED_STRING;
case (12103):
return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING;
case (12104):
return MPSOC_HELPER_READING_REPLY_FAILED_STRING;
case (12105):
return MISSING_ACK_STRING;
case (12106):
return MISSING_EXE_STRING;
case (12107):
return ACK_FAILURE_REPORT_STRING;
case (12108):
return EXE_FAILURE_REPORT_STRING;
case (12109):
return ACK_INVALID_APID_STRING;
case (12110):
return EXE_INVALID_APID_STRING;
case (12111):
return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING;
return MOUNTED_SD_CARD_STRING;
case (12200):
return TRANSITION_BACK_TO_OFF_STRING;
return UPDATE_FILE_NOT_EXISTS_STRING;
case (12201):
return NEG_V_OUT_OF_BOUNDS_STRING;
return ACTION_COMMANDING_FAILED_STRING;
case (12202):
return U_DRO_OUT_OF_BOUNDS_STRING;
return UPDATE_AVAILABLE_FAILED_STRING;
case (12203):
return I_DRO_OUT_OF_BOUNDS_STRING;
return UPDATE_TRANSFER_FAILED_STRING;
case (12204):
return U_X8_OUT_OF_BOUNDS_STRING;
return UPDATE_VERIFY_FAILED_STRING;
case (12205):
return I_X8_OUT_OF_BOUNDS_STRING;
case (12206):
return U_TX_OUT_OF_BOUNDS_STRING;
case (12207):
return I_TX_OUT_OF_BOUNDS_STRING;
case (12208):
return U_MPA_OUT_OF_BOUNDS_STRING;
case (12209):
return I_MPA_OUT_OF_BOUNDS_STRING;
case (12210):
return U_HPA_OUT_OF_BOUNDS_STRING;
case (12211):
return I_HPA_OUT_OF_BOUNDS_STRING;
return UPDATE_FINISHED_STRING;
case (12300):
return TRANSITION_OTHER_SIDE_FAILED_STRING;
return SEND_MRAM_DUMP_FAILED_STRING;
case (12301):
return NOT_ENOUGH_DEVICES_DUAL_MODE_STRING;
return MRAM_DUMP_FAILED_STRING;
case (12302):
return POWER_STATE_MACHINE_TIMEOUT_STRING;
case (12303):
return SIDE_SWITCH_TRANSITION_NOT_ALLOWED_STRING;
return MRAM_DUMP_FINISHED_STRING;
case (12401):
return INVALID_TC_FRAME_STRING;
case (12402):
return INVALID_FAR_STRING;
case (12403):
return CARRIER_LOCK_STRING;
case (12404):
return BIT_LOCK_PDEC_STRING;
case (12500):
return IMAGE_UPLOAD_FAILED_STRING;
case (12501):
return IMAGE_DOWNLOAD_FAILED_STRING;
case (12502):
return IMAGE_UPLOAD_SUCCESSFUL_STRING;
case (12503):
return IMAGE_DOWNLOAD_SUCCESSFUL_STRING;
case (12504):
return FLASH_WRITE_SUCCESSFUL_STRING;
case (12505):
return FLASH_READ_SUCCESSFUL_STRING;
case (12506):
return FLASH_READ_FAILED_STRING;
case (12507):
return FIRMWARE_UPDATE_SUCCESSFUL_STRING;
case (12508):
return FIRMWARE_UPDATE_FAILED_STRING;
case (12509):
return STR_HELPER_READING_REPLY_FAILED_STRING;
case (12510):
return STR_HELPER_COM_ERROR_STRING;
case (12511):
return STR_HELPER_NO_REPLY_STRING;
case (12512):
return STR_HELPER_DEC_ERROR_STRING;
case (12513):
return POSITION_MISMATCH_STRING;
case (12514):
return STR_HELPER_FILE_NOT_EXISTS_STRING;
case (12515):
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
case (12516):
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
case (12600):
return MPSOC_FLASH_WRITE_FAILED_STRING;
case (12601):
return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING;
case (12602):
return SENDING_COMMAND_FAILED_STRING;
case (12603):
return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING;
case (12604):
return MPSOC_HELPER_READING_REPLY_FAILED_STRING;
case (12605):
return MISSING_ACK_STRING;
case (12606):
return MISSING_EXE_STRING;
case (12607):
return ACK_FAILURE_REPORT_STRING;
case (12608):
return EXE_FAILURE_REPORT_STRING;
case (12609):
return ACK_INVALID_APID_STRING;
case (12610):
return EXE_INVALID_APID_STRING;
case (12611):
return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING;
case (12700):
return TRANSITION_BACK_TO_OFF_STRING;
case (12701):
return NEG_V_OUT_OF_BOUNDS_STRING;
case (12702):
return U_DRO_OUT_OF_BOUNDS_STRING;
case (12703):
return I_DRO_OUT_OF_BOUNDS_STRING;
case (12704):
return U_X8_OUT_OF_BOUNDS_STRING;
case (12705):
return I_X8_OUT_OF_BOUNDS_STRING;
case (12706):
return U_TX_OUT_OF_BOUNDS_STRING;
case (12707):
return I_TX_OUT_OF_BOUNDS_STRING;
case (12708):
return U_MPA_OUT_OF_BOUNDS_STRING;
case (12709):
return I_MPA_OUT_OF_BOUNDS_STRING;
case (12710):
return U_HPA_OUT_OF_BOUNDS_STRING;
case (12711):
return I_HPA_OUT_OF_BOUNDS_STRING;
case (12800):
return TRANSITION_OTHER_SIDE_FAILED_STRING;
case (12801):
return NOT_ENOUGH_DEVICES_DUAL_MODE_STRING;
case (12802):
return POWER_STATE_MACHINE_TIMEOUT_STRING;
case (12803):
return SIDE_SWITCH_TRANSITION_NOT_ALLOWED_STRING;
case (13000):
return CHILDREN_LOST_MODE_STRING;
case (13100):
return GPS_FIX_CHANGE_STRING;
case (13200):
return P60_BOOT_COUNT_STRING;
case (13201):
return BATT_MODE_STRING;
case (13202):
return BATT_MODE_CHANGED_STRING;
case (13600):
return ALLOC_FAILURE_STRING;
case (13601):

View File

@ -2,7 +2,7 @@
* @brief Auto-generated object translation file.
* @details
* Contains 117 translations.
* Generated on: 2022-03-28 12:48:33
* Generated on: 2022-04-08 14:13:35
*/
#include "translateObjects.h"

View File

@ -1,3 +1,4 @@
#include "utility.h"
#include <cstring>
@ -5,6 +6,7 @@
#include "FSFWConfig.h"
#include "OBSWConfig.h"
#include "fsfw/serviceinterface/ServiceInterface.h"
#include "fsfw/timemanager/Clock.h"
void utility::handleSystemError(int retcode, std::string function) {
#if OBSW_VERBOSE_LEVEL >= 1
@ -12,3 +14,14 @@ void utility::handleSystemError(int retcode, std::string function) {
<< strerror(retcode) << std::endl;
#endif
}
bool utility::timeSanityCheck() {
timeval currentTime = {};
Clock::getUptime(&currentTime);
Clock::TimeOfDay_t currTimeOfDay = {};
Clock::convertTimevalToTimeOfDay(&currentTime, &currTimeOfDay);
if (currTimeOfDay.year == 2000) {
return false;
}
return true;
}

View File

@ -9,6 +9,8 @@ namespace utility {
void handleSystemError(int retcode, std::string function);
}
bool timeSanityCheck();
} // namespace utility
#endif /* LINUX_UTILITY_UTILITY_H_ */