From 9837a1b62cf0d5029cc8e022fd3203f0c9afe4c0 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 6 Apr 2022 07:10:20 +0200 Subject: [PATCH 001/115] changes in supervisor commands --- .../PlocSupervisorDefinitions.h | 128 ++++++++++++------ linux/devices/ploc/PlocSupervisorHandler.cpp | 108 ++++++++++----- linux/devices/ploc/PlocSupervisorHandler.h | 2 + 3 files changed, 157 insertions(+), 81 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 58166e98..9aac6b0f 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -56,6 +56,10 @@ static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40; static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41; static const DeviceCommandId_t UPDATE_VERIFY = 42; static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 43; +static const DeviceCommandId_t PREPARE_UPDATE = 44; +static const DeviceCommandId_t START_MPSOC_QUIET = 45; +static const DeviceCommandId_t SET_SHUTDOWN_TIMEOUT = 46; +static const DeviceCommandId_t FACTORY_FLASH = 47; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -66,9 +70,9 @@ static const DeviceCommandId_t LATCHUP_REPORT = 54; static const uint16_t SIZE_ACK_REPORT = 14; static const uint16_t SIZE_EXE_REPORT = 14; -static const uint16_t SIZE_HK_REPORT = 48; -static const uint16_t SIZE_BOOT_STATUS_REPORT = 22; -static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 55; +static const uint16_t SIZE_HK_REPORT = 52; +static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; +static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; /** * SpacePacket apids of telemetry packets @@ -99,6 +103,10 @@ static const uint16_t APID_SET_BOOT_TIMEOUT = 0xA4; static const uint16_t APID_SET_MAX_RESTART_TRIES = 0xA5; static const uint16_t APID_RESET_MPSOC = 0xA6; static const uint16_t APID_GET_BOOT_STATUS_RPT = 0xA8; +static const uint16_t APID_PREPARE_UPDATE = 0xA9; +static const uint16_t APID_START_MPSOC_QUIET = 0xAA; +static const uint16_t APID_SET_SHUTDOWN_TIMEOUT = 0xAB; +static const uint16_t APID_FACTORY_FLASH = 0xAC; static const uint16_t APID_UPDATE_AVAILABLE = 0xB0; static const uint16_t APID_UPDATE_IMAGE_DATA = 0xB1; static const uint16_t APID_UPDATE_VERIFY = 0xB2; @@ -182,6 +190,8 @@ enum PoolIds : lp_id_t { BP0_STATE, BP1_STATE, BP2_STATE, + BOOT_STATE, + BOOT_CYCLES, LATCHUP_ID, CNT0, @@ -199,7 +209,6 @@ enum PoolIds : lp_id_t { LATCHUP_RPT_TIME_YEAR, LATCHUP_RPT_TIME_MSEC, LATCHUP_RPT_TIME_USEC, - LATCHUP_RPT_TIME_IS_SET, }; static const uint8_t HK_SET_ENTRIES = 13; @@ -307,38 +316,41 @@ class SetTimeRef : public SpacePacket { } private: - static const uint16_t DATA_FIELD_LENGTH = 34; + static const uint16_t DATA_FIELD_LENGTH = 10; static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; + static const uint16_t SYNC = 0x8000; void initPacket(Clock::TimeOfDay_t* time) { size_t serializedSize = 0; uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&time->second, &data_field_ptr, &serializedSize, - sizeof(time->second), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&time->minute, &data_field_ptr, &serializedSize, - sizeof(time->minute), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&time->hour, &data_field_ptr, &serializedSize, - sizeof(time->hour), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&time->day, &data_field_ptr, &serializedSize, - sizeof(time->day), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&time->month, &data_field_ptr, &serializedSize, - sizeof(time->month), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&time->year, &data_field_ptr, &serializedSize, - sizeof(time->year), SerializeIF::Endianness::BIG); - serializedSize = 0; - uint32_t milliseconds = time->usecond / 1000; - SerializeAdapter::serialize(&milliseconds, &data_field_ptr, &serializedSize, + uint16_t milliseconds = static_cast(time->usecond / 1000) | SYNC; + SerializeAdapter::serialize(&milliseconds, &data_field_ptr, &serializedSize, sizeof(milliseconds), SerializeIF::Endianness::BIG); + uint8_t second = static_cast(time->second); serializedSize = 0; - uint32_t isSet = 0xFFFFFFFF; - SerializeAdapter::serialize(&isSet, &data_field_ptr, &serializedSize, sizeof(isSet), - SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&second, &data_field_ptr, &serializedSize, + sizeof(time->second), SerializeIF::Endianness::BIG); + uint8_t minute = static_cast(time->minute); + serializedSize = 0; + SerializeAdapter::serialize(&minute, &data_field_ptr, &serializedSize, + sizeof(time->minute), SerializeIF::Endianness::BIG); + uint8_t hour = static_cast(time->hour); + serializedSize = 0; + SerializeAdapter::serialize(&hour, &data_field_ptr, &serializedSize, + sizeof(time->hour), SerializeIF::Endianness::BIG); + uint8_t day = static_cast(time->day); + serializedSize = 0; + SerializeAdapter::serialize(&day, &data_field_ptr, &serializedSize, sizeof(time->day), + SerializeIF::Endianness::BIG); + uint8_t month = static_cast(time->month); + serializedSize = 0; + SerializeAdapter::serialize(&month, &data_field_ptr, &serializedSize, + sizeof(time->month), SerializeIF::Endianness::BIG); + uint8_t year = static_cast(time->year); + serializedSize = 0; + SerializeAdapter::serialize(&year, &data_field_ptr, &serializedSize, + sizeof(time->year), SerializeIF::Endianness::BIG); serializedSize = 0; /* Calculate crc */ uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1359,6 +1371,36 @@ class FactoryReset : public SpacePacket { } }; +class SetShutdownTimeout : public SpacePacket { + public: + + SetShutdownTimeout(uint32_t timeout) + : SpacePacket(0, true, APID_SET_SHUTDOWN_TIMEOUT, DEFAULT_SEQUENCE_COUNT), timeout(timeout) { + initPacket(); + } + + private: + uint16_t PACKET_LEN = 1; // uint32_t timeout + CRC - 1 + static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; + + uint32_t timeout = 0; + uint8_t crcOffset = 0; + + void initPacket() { + uint8_t* data_field_ptr = this->localData.fields.buffer; + size_t serializedSize = 0; + SerializeAdapter::serialize(&timeout, data_field_ptr, &serializedSize, + sizeof(timeout), SerializeIF::Endianness::BIG); + this->setPacketDataLength(PACKET_LEN); + serializedSize = 0; + uint16_t crc = + CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + PACKET_LEN - 1); + uint8_t* crcPos = this->localData.fields.buffer + crcOffset; + SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), + SerializeIF::Endianness::BIG); + } +}; + class SupvTcSpacePacket : public SpacePacket { public: SupvTcSpacePacket(size_t payloadDataLen, uint16_t apid) @@ -1480,6 +1522,8 @@ class BootStatusReport : public StaticLocalDataSet { lp_var_t bp0State = lp_var_t(sid.objectId, PoolIds::BP0_STATE, this); lp_var_t bp1State = lp_var_t(sid.objectId, PoolIds::BP1_STATE, this); lp_var_t bp2State = lp_var_t(sid.objectId, PoolIds::BP2_STATE, this); + lp_var_t bootState = lp_var_t(sid.objectId, PoolIds::BOOT_STATE, this); + lp_var_t bootCycles = lp_var_t(sid.objectId, PoolIds::BOOT_CYCLES, this); }; /** @@ -1494,7 +1538,7 @@ class HkSet : public StaticLocalDataSet { lp_var_t tempPs = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); lp_var_t tempPl = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); lp_var_t tempSup = lp_var_t(sid.objectId, PoolIds::TEMP_SUP, this); - lp_var_t uptime = lp_var_t(sid.objectId, PoolIds::UPTIME, this); + lp_var_t uptime = lp_var_t(sid.objectId, PoolIds::UPTIME, this); lp_var_t cpuLoad = lp_var_t(sid.objectId, PoolIds::CPULOAD, this); lp_var_t availableHeap = lp_var_t(sid.objectId, PoolIds::AVAILABLEHEAP, this); lp_var_t numTcs = lp_var_t(sid.objectId, PoolIds::NUM_TCS, this); @@ -1524,22 +1568,16 @@ class LatchupStatusReport : public StaticLocalDataSet { lp_var_t cnt4 = lp_var_t(sid.objectId, PoolIds::CNT4, this); lp_var_t cnt5 = lp_var_t(sid.objectId, PoolIds::CNT5, this); lp_var_t cnt6 = lp_var_t(sid.objectId, PoolIds::CNT6, this); - lp_var_t timeSec = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_SEC, this); - lp_var_t timeMin = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MIN, this); - lp_var_t timeHour = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_HOUR, this); - lp_var_t timeDay = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_DAY, this); - lp_var_t timeMon = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MON, this); - lp_var_t timeYear = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_YEAR, this); - lp_var_t timeMsec = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MSEC, this); - lp_var_t isSet = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_IS_SET, this); + lp_var_t timeMsec = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MSEC, this); + lp_var_t timeSec = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_SEC, this); + lp_var_t timeMin = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MIN, this); + lp_var_t timeHour = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_HOUR, this); + lp_var_t timeDay = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_DAY, this); + lp_var_t timeMon = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MON, this); + lp_var_t timeYear = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_YEAR, this); }; } // namespace supv diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 5065c7dd..88cfb1fb 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -259,6 +259,26 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d nextReplyId = supv::ACK_REPORT; result = RETURN_OK; break; + case (supv::PREPARE_UPDATE): { + prepareEmptyCmd(supv::APID_PREPARE_UPDATE); + result = RETURN_OK; + break; + } + case (supv::START_MPSOC_QUIET): { + prepareEmptyCmd(supv::APID_START_MPSOC_QUIET); + result = RETURN_OK; + break; + } + case (supv::SET_SHUTDOWN_TIMEOUT): { + prepareSetShutdownTimeoutCmd(commandData); + result = RETURN_OK; + break; + } + case (supv::FACTORY_FLASH): { + prepareEmptyCmd(supv::APID_FACTORY_FLASH); + result = RETURN_OK; + break; + } default: sif::debug << "PlocSupervisorHandler::buildCommandFromCommand: Command not implemented" << std::endl; @@ -317,6 +337,10 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_MIRROR); this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_CIRCULAR); this->insertInCommandMap(supv::CAN_LOOPBACK_TEST); + this->insertInCommandMap(supv::PREPARE_UPDATE); + this->insertInCommandMap(supv::START_MPSOC_QUIET); + this->insertInCommandMap(supv::SET_SHUTDOWN_TIMEOUT); + this->insertInCommandMap(supv::FACTORY_FLASH); this->insertInCommandAndReplyMap(supv::FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(supv::CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(supv::ACK_REPORT, 3, nullptr, supv::SIZE_ACK_REPORT); @@ -445,7 +469,7 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::MISSION_IO_STATE, new PoolEntry({0})); localDataPoolMap.emplace(supv::FMC_STATE, new PoolEntry({0})); localDataPoolMap.emplace(supv::NUM_TCS, new PoolEntry({0})); - localDataPoolMap.emplace(supv::UPTIME, new PoolEntry({0})); + localDataPoolMap.emplace(supv::UPTIME, new PoolEntry({0})); localDataPoolMap.emplace(supv::CPULOAD, new PoolEntry({0})); localDataPoolMap.emplace(supv::AVAILABLEHEAP, new PoolEntry({0})); @@ -466,14 +490,13 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::CNT4, new PoolEntry({0})); localDataPoolMap.emplace(supv::CNT5, new PoolEntry({0})); localDataPoolMap.emplace(supv::CNT6, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_SEC, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MIN, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_HOUR, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_DAY, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MON, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_YEAR, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MSEC, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_IS_SET, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MSEC, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_SEC, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MIN, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_HOUR, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_DAY, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MON, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_YEAR, new PoolEntry({0})); return HasReturnvaluesIF::RETURN_OK; } @@ -575,6 +598,10 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case supv::FACTORY_RESET_CLEAR_CIRCULAR: case supv::REQUEST_LOGGING_DATA: case supv::DISABLE_PERIOIC_HK_TRANSMISSION: + case supv::PREPARE_UPDATE: + case supv::START_MPSOC_QUIET: + case supv::SET_SHUTDOWN_TIMEOUT: + case supv::FACTORY_FLASH: enabledReplies = 2; break; default: @@ -722,9 +749,10 @@ ReturnValue_t PlocSupervisorHandler::handleHkReport(const uint8_t* data) { hkset.tempSup = *(data + offset) << 24 | *(data + offset + 1) << 16 | *(data + offset + 2) << 8 | *(data + offset + 3); offset += 4; - hkset.uptime = *(data + offset) << 24 | *(data + offset + 1) << 16 | *(data + offset + 2) << 8 | - *(data + offset + 3); - offset += 4; + size_t size = sizeof(hkset.uptime.value); + result = SerializeAdapter::deSerialize(&hkset.uptime, data + offset, &size, + SerializeIF::Endianness::BIG); + offset += 8; hkset.cpuLoad = *(data + offset) << 24 | *(data + offset + 1) << 16 | *(data + offset + 2) << 8 | *(data + offset + 3); offset += 4; @@ -806,6 +834,10 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) bootStatusReport.bp1State = *(data + offset); offset += 1; bootStatusReport.bp2State = *(data + offset); + offset += 1; + bootStatusReport.bootState = *(data + offset); + offset += 1; + bootStatusReport.bootCycles = *(data + offset); nextReplyId = supv::EXE_REPORT; @@ -859,30 +891,19 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da offset += 2; latchupStatusReport.cnt6 = *(data + offset) << 8 | *(data + offset + 1); offset += 2; - latchupStatusReport.timeSec = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeMin = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeHour = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeDay = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeMon = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeYear = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.timeMsec = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; - latchupStatusReport.isSet = *(data + offset) << 24 | *(data + offset + 1) << 16 | - *(data + offset + 2) << 8 | *(data + offset + 3); - offset += 4; + latchupStatusReport.timeMsec = *(data + offset) << 8 | *(data + offset + 1); + offset += 2; + latchupStatusReport.timeSec = *(data + offset); + offset += 1; + latchupStatusReport.timeMin = *(data + offset); + offset += 1; + latchupStatusReport.timeHour = *(data + offset); + offset += 1; + latchupStatusReport.timeDay = *(data + offset); + offset += 1; + latchupStatusReport.timeMon = *(data + offset); + offset += 1; + latchupStatusReport.timeYear = *(data + offset); nextReplyId = supv::EXE_REPORT; @@ -1267,6 +1288,21 @@ void PlocSupervisorHandler::packetToOutBuffer(uint8_t* packetData, size_t fullSi nextReplyId = supv::ACK_REPORT; } +void PlocSupervisorHandler::prepareSetShutdownTimeoutCmd(const uint8_t* commandData) { + uint32_t timeout = 0; + ReturnValue_t result = RETURN_OK; + size_t size = sizeof(timeout); + result = + SerializeAdapter::deSerialize(&timeout, &commandData, &size, SerializeIF::Endianness::BIG); + if (result != RETURN_OK) { + sif::warning + << "PlocSupervisorHandler::prepareSetShutdownTimeoutCmd: Failed to deserialize timeout" + << std::endl; + } + supv::SetShutdownTimeout packet(timeout); + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); +} + void PlocSupervisorHandler::disableAllReplies() { DeviceReplyMap::iterator iter; diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index b21ecf91..5b5b3478 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -348,6 +348,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t createMramDumpFile(); ReturnValue_t getTimeStampString(std::string& timeStamp); + + void prepareSetShutdownTimeoutCmd(const uint8_t* commandData); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ From f058cf5e3108474921dabb51e87b17d4085406f1 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 6 Apr 2022 08:36:34 +0200 Subject: [PATCH 002/115] supervisor udpate wip --- .../PlocSupervisorDefinitions.h | 133 ++++++-- linux/devices/ploc/PlocSupvHelper.cpp | 311 ++++++++++++++++++ linux/devices/ploc/PlocSupvHelper.h | 153 +++++++++ 3 files changed, 563 insertions(+), 34 deletions(-) create mode 100644 linux/devices/ploc/PlocSupvHelper.cpp create mode 100644 linux/devices/ploc/PlocSupvHelper.h diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 9aac6b0f..52fdad64 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1486,44 +1486,47 @@ class UpdateInfo : public SupvTcSpacePacket { */ class UpdatePacket : public SupvTcSpacePacket { public: - /** - * @brief Constructor - * - * @param payloadLength Update data length (data field length without CRC) - */ - UpdatePacket(uint16_t payloadLength) : SupvTcSpacePacket(payloadLength, APID_UPDATE_IMAGE_DATA) {} - /** - * @brief Returns the pointer to the beginning of the data field. - */ - uint8_t* getDataFieldPointer() { return this->localData.fields.buffer; } -}; + /** + * @brief Constrcutor + * + * @param updateData Pointer to buffer containing update data + */ + UpdatePacket(uint8_t memoryId, uint32_t startAddress, uint16_t length, uint8_t* updateData) + : SupvTcSpacePacket(META_DATA_LENGTH + length, apid), + memoryId(memoryId), + startAddress(startAddress), + length(length) { + initPacket(updateData); + makeCrc(); + } -/** - * @brief This dataset stores the boot status report of the supervisor. - */ -class BootStatusReport : public StaticLocalDataSet { - public: - BootStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, BOOT_REPORT_SET_ID) {} + static const uint16_t MAX_UPDATE_DATA = 1010; - BootStatusReport(object_id_t objectId) - : StaticLocalDataSet(sid_t(objectId, BOOT_REPORT_SET_ID)) {} + private: + static const uint16_t META_DATA_LENGTH = 8; - /** Information about boot status of MPSoC */ - lp_var_t bootSignal = lp_var_t(sid.objectId, PoolIds::BOOT_SIGNAL, this); - lp_var_t resetCounter = lp_var_t(sid.objectId, PoolIds::RESET_COUNTER, this); - /** Time the MPSoC needs for last boot */ - lp_var_t bootAfterMs = lp_var_t(sid.objectId, PoolIds::BOOT_AFTER_MS, this); - /** The currently set boot timeout */ - lp_var_t bootTimeoutMs = - lp_var_t(sid.objectId, PoolIds::BOOT_TIMEOUT_MS, this); - lp_var_t activeNvm = lp_var_t(sid.objectId, PoolIds::ACTIVE_NVM, this); - /** States of the boot partition pins */ - lp_var_t bp0State = lp_var_t(sid.objectId, PoolIds::BP0_STATE, this); - lp_var_t bp1State = lp_var_t(sid.objectId, PoolIds::BP1_STATE, this); - lp_var_t bp2State = lp_var_t(sid.objectId, PoolIds::BP2_STATE, this); - lp_var_t bootState = lp_var_t(sid.objectId, PoolIds::BOOT_STATE, this); - lp_var_t bootCycles = lp_var_t(sid.objectId, PoolIds::BOOT_CYCLES, this); + uint8_t memoryId =0; + uint8_t n = 1; + uint32_t startAddress = 0; + uint16_t length = 0; + + void initPacket(uint8_t* updateData) { + size_t serializedSize = 0; + uint8_t* data_field_ptr = this->localData.fields.buffer; + SerializeAdapter::serialize(&memoryId, &data_field_ptr, &serializedSize, + sizeof(memoryId), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&n, &data_field_ptr, &serializedSize, + sizeof(n), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&startAddress, &data_field_ptr, &serializedSize, + sizeof(startAddress), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&length, &data_field_ptr, &serializedSize, + sizeof(length), SerializeIF::Endianness::BIG); + std::memcpy(data_field_ptr, updateData, length); + } }; /** @@ -1579,6 +1582,68 @@ class LatchupStatusReport : public StaticLocalDataSet { lp_var_t timeYear = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_YEAR, this); }; + +/** + * @brief Class for handling tm replies of the supervisor. + */ +class TmPacket : public SpacePacket, public MPSoCReturnValuesIF { + public: + /** + * @brief Constructor creates idle packet and sets length field to maximum allowed size. + */ + TmPacket() : SpacePacket(PACKET_MAX_SIZE) {} + + ReturnValue_t checkCrc() { + uint8_t* crcPtr = this->getPacketData() + this->getPacketDataLength() - 1; + uint16_t receivedCrc = *(crcPtr) << 8 | *(crcPtr + 1); + uint16_t recalculatedCrc = + CRC::crc16ccitt(this->localData.byteStream, this->getFullSize() - CRC_SIZE); + if (recalculatedCrc != receivedCrc) { + return CRC_FAILURE; + } + return HasReturnvaluesIF::RETURN_OK; + } +}; + +/** + * @brief This class can be used to package the update available or update verify command. + */ +class EraseMemory : public SupvTcSpacePacket { + public: + + EraseMemory(uint8_t memoryId, uint32_t startAddress, uint32_t length) + : SupvTcSpacePacket(PAYLOAD_LENGTH, apid), + memoryId(memoryId), + startAddress(startAddress), + length(length) { + initPacket(); + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 10; // length without CRC field + + uint8_t memoryId =0; + uint8_t n = 1; + uint32_t startAddress = 0; + uint32_t length = 0; + + void initPacket() { + size_t serializedSize = 0; + uint8_t* data_field_ptr = this->localData.fields.buffer; + SerializeAdapter::serialize(&memoryId, &data_field_ptr, &serializedSize, + sizeof(memoryId), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&n, &data_field_ptr, &serializedSize, + sizeof(n), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&startAddress, &data_field_ptr, &serializedSize, + sizeof(startAddress), SerializeIF::Endianness::BIG); + serializedSize = 0; + SerializeAdapter::serialize(&length, &data_field_ptr, &serializedSize, + sizeof(length), SerializeIF::Endianness::BIG); + } +}; } // namespace supv #endif /* MISSION_DEVICES_DEVICEDEFINITIONS_PLOCSVPDEFINITIONS_H_ */ diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp new file mode 100644 index 00000000..65abb843 --- /dev/null +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -0,0 +1,311 @@ +#include "PlocSupvHelper.h" + +#include +#include + +#include "OBSWConfig.h" +#ifdef XIPHOS_Q7S +#include "bsp_q7s/memory/FilesystemHelper.h" +#endif + +#include "mission/utility/Timestamp.h" + +PlocSupvHelper::PlocSupvHelper(object_id_t objectId) : SystemObject(objectId) {} + +PlocSupvHelper::~PlocSupvHelper() {} + +ReturnValue_t PlocSupvHelper::initialize() { +#ifdef XIPHOS_Q7S + sdcMan = SdCardManager::instance(); + if (sdcMan == nullptr) { + sif::warning << "PlocSupvHelper::initialize: Invalid SD Card Manager" << std::endl; + return RETURN_FAILED; + } +#endif + return RETURN_OK; +} + +ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { + ReturnValue_t result = RETURN_OK; + semaphore.acquire(); + while (true) { + switch (internalState) { + case InternalState::IDLE: { + semaphore.acquire(); + break; + } + case InternalState::FLASH_WRITE: { + result = performUpdate(); + if (result == RETURN_OK) { + triggerEvent(MPSOC_FLASH_WRITE_SUCCESSFUL); + } else { + triggerEvent(MPSOC_FLASH_WRITE_FAILED); + } + internalState = InternalState::IDLE; + break; + } + default: + sif::debug << "PlocSupvHelper::performOperation: Invalid state" << std::endl; + break; + } + } +} + +ReturnValue_t PlocSupvHelper::setComIF(DeviceCommunicationIF* communicationInterface_) { + uartComIF = dynamic_cast(communicationInterface_); + if (uartComIF == nullptr) { + sif::warning << "PlocSupvHelper::initialize: Invalid uart com if" << std::endl; + return RETURN_FAILED; + } + return RETURN_OK; +} + +void PlocSupvHelper::setComCookie(CookieIF* comCookie_) { comCookie = comCookie_; } + +void PlocSupvHelper::setSequenceCount(SourceSequenceCounter* sequenceCount_) { + sequenceCount = sequenceCount_; +} + +ReturnValue_t PlocSupvHelper::startFlashWrite(std::string obcFile, std::string mpsocFile) { + ReturnValue_t result = RETURN_OK; +#ifdef XIPHOS_Q7S + result = FilesystemHelper::checkPath(obcFile); + if (result != RETURN_OK) { + return result; + } + result = FilesystemHelper::fileExists(mpsocFile); + if (result != RETURN_OK) { + return result; + } +#endif +#ifdef TE0720_1CFA + if (not std::filesystem::exists(obcFile)) { + sif::warning << "PlocSupvHelper::startFlashWrite: File " << obcFile << "does not exist" + << std::endl; + return RETURN_FAILED; + } +#endif + + flashWrite.obcFile = obcFile; + flashWrite.mpsocFile = mpsocFile; + internalState = InternalState::FLASH_WRITE; + result = resetHelper(); + if (result != RETURN_OK) { + return result; + } + return result; +} + +ReturnValue_t PlocSupvHelper::resetHelper() { + ReturnValue_t result = RETURN_OK; + semaphore.release(); + terminate = false; + result = uartComIF->flushUartRxBuffer(comCookie); + return result; +} + +void PlocSupvHelper::stopProcess() { terminate = true; } + +ReturnValue_t PlocSupvHelper::performUpdate() { + ReturnValue_t result = RETURN_OK; + result = eraseMemory(); + if (result != RETURN_OK) { + return result; + } + uint8_t tempData[supv::UpdatePacket::MAX_UPDATE_DATA]; + std::ifstream file(update.file, std::ifstream::binary); + // Set position of next character to end of file input stream + file.seekg(0, file.end); + // tellg returns position of character in input stream + size_t remainingSize = file.tellg(); + size_t dataLength = 0; + size_t bytesRead = 0; + while (remainingSize > 0) { + update.startAddress = bytesRead; + if (terminate) { + return RETURN_OK; + } + if (remainingSize > supv::UpdatePacket::MAX_UPDATE_DATA) { + dataLength = supv::UpdatePacket::MAX_UPDATE_DATA; + } else { + dataLength = remainingSize; + } + if (file.is_open()) { + file.seekg(bytesRead, file.beg); + file.read(reinterpret_cast(tempData), dataLength); + bytesRead += dataLength; + remainingSize -= dataLength; + } else { + return FILE_CLOSED_ACCIDENTALLY; + } + supv::UpdatePacket tc(update.memoryId, update.startAddress, tempData); + result = handlePacketTransmission(tc); + if (result != RETURN_OK) { + return result; + } + } + return result; +} + +ReturnValue_t PlocSupvHelper::eraseMemory() { + ReturnValue_t result = RETURN_OK; + supv::EraseMemory eraseMemory(memoryId, startAddress, length); + result = handlePacketTransmission(eraseMemory); + if (result != RETURN_OK) { + return result; + } + return RETURN_OK; +} + +ReturnValue_t PlocSupvHelper::flashfclose() { + ReturnValue_t result = RETURN_OK; + (*sequenceCount)++; + supv::FlashFclose flashFclose(*sequenceCount); + result = flashFclose.createPacket(flashWrite.mpsocFile); + if (result != RETURN_OK) { + return result; + } + result = handlePacketTransmission(flashFclose); + if (result != RETURN_OK) { + return result; + } + return RETURN_OK; +} + +ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& tc) { + ReturnValue_t result = RETURN_OK; + result = sendCommand(tc); + if (result != RETURN_OK) { + return result; + } + result = handleAck(); + if (result != RETURN_OK) { + return result; + } + result = handleExe(); + if (result != RETURN_OK) { + return result; + } + return RETURN_OK; +} + +ReturnValue_t PlocSupvHelper::sendCommand(supv::TcBase& tc) { + ReturnValue_t result = RETURN_OK; + result = uartComIF->sendMessage(comCookie, tc.getWholeData(), tc.getFullSize()); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::sendCommand: Failed to send command" << std::endl; + triggerEvent(SENDING_COMMAND_FAILED, result, static_cast(internalState)); + return result; + } + return result; +} + +ReturnValue_t PlocSupvHelper::handleAck() { + ReturnValue_t result = RETURN_OK; + supv::TmPacket tmPacket; + result = handleTmReception(&tmPacket, supv::SIZE_ACK_REPORT); + if (result != RETURN_OK) { + return result; + } + uint16_t apid = tmPacket.getAPID(); + if (apid != supv::APID_ACK_SUCCESS) { + handleAckApidFailure(apid); + return RETURN_FAILED; + } + return RETURN_OK; +} + +void PlocSupvHelper::handleAckApidFailure(uint16_t apid) { + if (apid == supv::APID_ACK_FAILURE) { + triggerEvent(ACK_FAILURE_REPORT, static_cast(internalState)); + sif::warning << "PlocSupvHelper::handleAckApidFailure: Received acknowledgement failure " + << "report" << std::endl; + } else { + triggerEvent(ACK_INVALID_APID, apid, static_cast(internalState)); + sif::warning << "PlocSupvHelper::handleAckApidFailure: Expected acknowledgement report " + << "but received space packet with apid " << std::hex << apid << std::endl; + } +} + +ReturnValue_t PlocSupvHelper::handleExe() { + ReturnValue_t result = RETURN_OK; + supv::TmPacket tmPacket; + result = handleTmReception(&tmPacket, supv::SIZE_EXE_REPORT); + if (result != RETURN_OK) { + return result; + } + uint16_t apid = tmPacket.getAPID(); + if (apid != supv::apid::EXE_SUCCESS) { + handleExeApidFailure(apid); + return RETURN_FAILED; + } + return RETURN_OK; +} + +void PlocSupvHelper::handleExeApidFailure(uint16_t apid) { + if (apid == supv::apid::EXE_FAILURE) { + triggerEvent(EXE_FAILURE_REPORT, static_cast(internalState)); + sif::warning << "PlocSupvHelper::handleExeApidFailure: Received execution failure " + << "report" << std::endl; + } else { + triggerEvent(EXE_INVALID_APID, apid, static_cast(internalState)); + sif::warning << "PlocSupvHelper::handleExeApidFailure: Expected execution report " + << "but received space packet with apid " << std::hex << apid << std::endl; + } +} + +ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes) { + ReturnValue_t result = RETURN_OK; + size_t readBytes = 0; + size_t currentBytes = 0; + for (int retries = 0; retries < RETRIES; retries++) { + result = receive(tmPacket->getWholeData() + readBytes, ¤tBytes, remainingBytes); + if (result != RETURN_OK) { + return result; + } + readBytes += currentBytes; + remainingBytes = remainingBytes - currentBytes; + if (remainingBytes == 0) { + break; + } + } + if (remainingBytes != 0) { + sif::warning << "PlocSupvHelper::handleTmReception: Failed to receive reply" << std::endl; + triggerEvent(MISSING_EXE, remainingBytes, static_cast(internalState)); + return RETURN_FAILED; + } + result = tmPacket->checkCrc(); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::handleTmReception: CRC check failed" << std::endl; + return result; + } + (*sequenceCount)++; + uint16_t recvSeqCnt = tmPacket->getPacketSequenceCount(); + if (recvSeqCnt != *sequenceCount) { + triggerEvent(MPSOC_HELPER_SEQ_CNT_MISMATCH, *sequenceCount, recvSeqCnt); + *sequenceCount = recvSeqCnt; + } + return result; +} + +ReturnValue_t PlocSupvHelper::receive(uint8_t* data, size_t* readBytes, size_t requestBytes) { + ReturnValue_t result = RETURN_OK; + uint8_t* buffer = nullptr; + result = uartComIF->requestReceiveMessage(comCookie, requestBytes); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::receive: Failed to request reply" << std::endl; + triggerEvent(MPSOC_HELPER_REQUESTING_REPLY_FAILED, result, + static_cast(static_cast(internalState))); + return RETURN_FAILED; + } + result = uartComIF->readReceivedMessage(comCookie, &buffer, readBytes); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::receive: Failed to read received message" << std::endl; + triggerEvent(MPSOC_HELPER_READING_REPLY_FAILED, result, static_cast(internalState)); + return RETURN_FAILED; + } + if (*readBytes > 0) { + std::memcpy(data, buffer, *readBytes); + } + return result; +} diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h new file mode 100644 index 00000000..fade2069 --- /dev/null +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -0,0 +1,153 @@ +#ifndef BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ +#define BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ + +#include + +#include "fsfw/devicehandlers/CookieIF.h" +#include "fsfw/objectmanager/SystemObject.h" +#include "fsfw/osal/linux/BinarySemaphore.h" +#include "fsfw/returnvalues/HasReturnvaluesIF.h" +#include "fsfw/tasks/ExecutableObjectIF.h" +#include "fsfw/tmtcservices/SourceSequenceCounter.h" +#include "fsfw_hal/linux/uart/UartComIF.h" +#include "linux/devices/devicedefinitions/PlocMPSoCDefinitions.h" +#ifdef XIPHOS_Q7S +#include "bsp_q7s/memory/SdCardManager.h" +#endif + +/** + * @brief Helper class for supervisor of PLOC intended to accelerate large data transfers between + * the supervisor and the OBC. + * @author J. Meier + */ +class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public HasReturnvaluesIF { + public: + static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_MPSOC_HELPER; + + //! [EXPORT] : [COMMENT] update failed + static const Event SUPV_UPDATE_FAILED = MAKE_EVENT(0, severity::LOW); + //! [EXPORT] : [COMMENT] update successful + static const Event SUPV_UPDATE_SUCCESSFUL = MAKE_EVENT(1, severity::LOW); + //! [EXPORT] : [COMMENT] Communication interface returned failure when trying to send the command + //! ot the PLOC + //! P1: Return value returned by the communication interface sendMessage function + //! P2: Internal state of MPSoC helper + static const Event SENDING_COMMAND_FAILED = MAKE_EVENT(2, severity::LOW); + //! [EXPORT] : [COMMENT] Request receive message of communication interface failed + //! P1: Return value returned by the communication interface requestReceiveMessage function + //! P2: Internal state of MPSoC helper + static const Event MPSOC_HELPER_REQUESTING_REPLY_FAILED = MAKE_EVENT(3, severity::LOW); + //! [EXPORT] : [COMMENT] Reading receive message of communication interface failed + //! P1: Return value returned by the communication interface readingReceivedMessage function + //! P2: Internal state of MPSoC helper + static const Event MPSOC_HELPER_READING_REPLY_FAILED = MAKE_EVENT(4, severity::LOW); + //! [EXPORT] : [COMMENT] Did not receive acknowledgement report + //! P1: Number of bytes missing + //! P2: Internal state of MPSoC helper + static const Event MISSING_ACK = MAKE_EVENT(5, severity::LOW); + //! [EXPORT] : [COMMENT] Did not receive execution report + //! P1: Number of bytes missing + //! P2: Internal state of MPSoC helper + static const Event MISSING_EXE = MAKE_EVENT(6, severity::LOW); + //! [EXPORT] : [COMMENT] Received acknowledgement failure report + //! P1: Internal state of MPSoC + static const Event ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); + //! [EXPORT] : [COMMENT] Received execution failure report + //! P1: Internal state of MPSoC + static const Event EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); + //! [EXPORT] : [COMMENT] Expected acknowledgement report but received space packet with other apid + //! P1: Apid of received space packet + //! P2: Internal state of MPSoC + static const Event ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); + //! [EXPORT] : [COMMENT] Expected execution report but received space packet with other apid + //! P1: Apid of received space packet + //! P2: Internal state of MPSoC + static const Event EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); + //! [EXPORT] : [COMMENT] Received sequence count does not match expected sequence count + //! P1: Expected sequence count + //! P2: Received sequence count + static const Event MPSOC_HELPER_SEQ_CNT_MISMATCH = MAKE_EVENT(11, severity::LOW); + + PlocSupvHelper(object_id_t objectId); + virtual ~PlocSupvHelper(); + + ReturnValue_t initialize() override; + ReturnValue_t performOperation(uint8_t operationCode = 0) override; + + ReturnValue_t setComIF(DeviceCommunicationIF* communicationInterface_); + void setComCookie(CookieIF* comCookie_); + + /** + * @brief Starts flash write sequence + * + * @param obcFile File where to read from the data + * @param mpsocFile The file of the MPSoC where should be written to + * + * @return RETURN_OK if successful, otherwise error return value + */ + ReturnValue_t startUpdate(std::string file, std::string mpsocFile); + + /** + * @brief Can be used to interrupt a running data transfer. + */ + void stopProcess(); + + /** + * @brief Sets the sequence count object responsible for the sequence count handling + */ + void setSequenceCount(SourceSequenceCounter* sequenceCount_); + + private: + static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_MPSOC_HELPER; + + //! [EXPORT] : [COMMENT] File accidentally close + static const ReturnValue_t FILE_CLOSED_ACCIDENTALLY = MAKE_RETURN_CODE(0xA0); + + // Maximum number of times the communication interface retries polling data from the reply + // buffer + static const int RETRIES = 10000; + + struct Update { + uint8_t memoryId; + uint32_t startAddress; + uint32_t length; + // Absolute name of file containing update data + std::string file; + }; + + struct Update update; + + enum class InternalState { IDLE, UPDATE }; + + InternalState internalState = InternalState::IDLE; + + BinarySemaphore semaphore; +#ifdef XIPHOS_Q7S + SdCardManager* sdcMan = nullptr; +#endif + uint8_t commandBuffer[supv::MAX_COMMAND_SIZE]; + + bool terminate = false; + + /** + * Communication interface of MPSoC responsible for low level access. Must be set by the + * MPSoC Handler. + */ + UartComIF* uartComIF = nullptr; + // Communication cookie. Must be set by the MPSoC Handler + CookieIF* comCookie = nullptr; + // Sequence count, must be set by Ploc MPSoC Handler + SourceSequenceCounter* sequenceCount; + + ReturnValue_t performUpdate(); + ReturnValue_t handlePacketTransmission(SpacePacket& tc); + ReturnValue_t sendCommand(SpacePacket& tc); + ReturnValue_t receive(uint8_t* data, size_t* readBytes, size_t requestBytes); + ReturnValue_t handleAck(); + ReturnValue_t handleExe(); + void handleAckApidFailure(uint16_t apid); + void handleExeApidFailure(uint16_t apid); + ReturnValue_t handleTmReception(SpacePacket* tmPacket, size_t remainingBytes); +}; + +#endif /* BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ */ From 3f6a534db5f123ee0fc334b6d0583db87edfee85 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Wed, 6 Apr 2022 17:27:44 +0200 Subject: [PATCH 003/115] fixes identified during tests --- bsp_q7s/main.cpp | 1 + .../PlocSupervisorDefinitions.h | 7 +++-- linux/devices/ploc/PlocSupervisorHandler.cpp | 28 +++++++++++-------- linux/devices/ploc/PlocSupervisorHandler.h | 1 + 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/bsp_q7s/main.cpp b/bsp_q7s/main.cpp index dfcaebf0..81616954 100644 --- a/bsp_q7s/main.cpp +++ b/bsp_q7s/main.cpp @@ -6,6 +6,7 @@ #include "simple/simple.h" #endif + #include /** diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 9aac6b0f..650e8628 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -70,7 +70,8 @@ static const DeviceCommandId_t LATCHUP_REPORT = 54; static const uint16_t SIZE_ACK_REPORT = 14; static const uint16_t SIZE_EXE_REPORT = 14; -static const uint16_t SIZE_HK_REPORT = 52; +//static const uint16_t SIZE_HK_REPORT = 52; +static const uint16_t SIZE_HK_REPORT = 56; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; @@ -212,7 +213,7 @@ enum PoolIds : lp_id_t { }; static const uint8_t HK_SET_ENTRIES = 13; -static const uint8_t BOOT_REPORT_SET_ENTRIES = 8; +static const uint8_t BOOT_REPORT_SET_ENTRIES = 10; static const uint8_t LATCHUP_RPT_SET_ENTRIES = 16; static const uint32_t HK_SET_ID = HK_REPORT; @@ -347,7 +348,7 @@ class SetTimeRef : public SpacePacket { serializedSize = 0; SerializeAdapter::serialize(&month, &data_field_ptr, &serializedSize, sizeof(time->month), SerializeIF::Endianness::BIG); - uint8_t year = static_cast(time->year); + uint8_t year = static_cast(time->year - 1900); serializedSize = 0; SerializeAdapter::serialize(&year, &data_field_ptr, &serializedSize, sizeof(time->year), SerializeIF::Endianness::BIG); diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 88cfb1fb..7174ec89 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -344,7 +344,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandAndReplyMap(supv::FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(supv::CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(supv::ACK_REPORT, 3, nullptr, supv::SIZE_ACK_REPORT); - this->insertInReplyMap(supv::EXE_REPORT, 3, nullptr, supv::SIZE_EXE_REPORT); + this->insertInReplyMap(supv::EXE_REPORT, 120, nullptr, supv::SIZE_EXE_REPORT); this->insertInReplyMap(supv::HK_REPORT, 3, &hkset, supv::SIZE_HK_REPORT); this->insertInReplyMap(supv::BOOT_STATUS_REPORT, 3, &bootStatusReport, supv::SIZE_BOOT_STATUS_REPORT); @@ -713,6 +713,8 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) sif::debug << "PlocSupervisorHandler::handleExecutionReport: Unknown command id" << std::endl; } + uint16_t status = *(data + EXE_STATUS_OFFSET) << 8 | *(data + EXE_STATUS_OFFSET + 1); + sif::info << "Execution status: 0x" << std::hex << status << std::endl; sendFailureReport(supv::EXE_REPORT, RECEIVED_EXE_FAILURE); disableExeReportReply(); result = IGNORE_REPLY_DATA; @@ -794,7 +796,7 @@ ReturnValue_t PlocSupervisorHandler::handleHkReport(const uint8_t* data) { << static_cast(hkset.nvm0_1_state.value) << std::endl; sif::info << "PlocSupervisorHandler::handleHkReport: nvm3_state: " << static_cast(hkset.nvm3_state.value) << std::endl; - sif::info << "PlocSupervisorHandler::handleHkReport: missoin_io_state: " + sif::info << "PlocSupervisorHandler::handleHkReport: mission_io_state: " << static_cast(hkset.missionIoState.value) << std::endl; sif::info << "PlocSupervisorHandler::handleHkReport: fmc_state: " << static_cast(hkset.fmcState.value) << std::endl; @@ -849,7 +851,7 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootAfterMs: " << bootStatusReport.bootAfterMs << " ms" << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootTimeoutMs: " - << bootStatusReport.bootTimeoutMs << " ms" << std::endl; + << std::dec << bootStatusReport.bootTimeoutMs << " ms" << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Active NVM: " << static_cast(bootStatusReport.activeNvm.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BP0: " @@ -858,6 +860,10 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) << static_cast(bootStatusReport.bp1State.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BP2: " << static_cast(bootStatusReport.bp2State.value) << std::endl; + sif::info << "PlocSupervisorHandler::handleBootStatusReport: Boot state: " + << static_cast(bootStatusReport.bootState.value) << std::endl; + sif::info << "PlocSupervisorHandler::handleBootStatusReport: Boot cycles: " + << static_cast(bootStatusReport.bootCycles.value) << std::endl; #endif return result; @@ -891,7 +897,7 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da offset += 2; latchupStatusReport.cnt6 = *(data + offset) << 8 | *(data + offset + 1); offset += 2; - latchupStatusReport.timeMsec = *(data + offset) << 8 | *(data + offset + 1); + latchupStatusReport.timeMsec = (*(data + offset) << 8 | *(data + offset + 1)) & 0x7FFF; offset += 2; latchupStatusReport.timeSec = *(data + offset); offset += 1; @@ -925,19 +931,19 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: CNT6: " << latchupStatusReport.cnt6 << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Sec: " - << latchupStatusReport.timeSec << std::endl; + << static_cast(latchupStatusReport.timeSec.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Min: " - << latchupStatusReport.timeMin << std::endl; + << static_cast(latchupStatusReport.timeMin.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Hour: " - << latchupStatusReport.timeHour << std::endl; + << static_cast(latchupStatusReport.timeHour.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Day: " - << latchupStatusReport.timeDay << std::endl; + << static_cast(latchupStatusReport.timeDay.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Mon: " - << latchupStatusReport.timeMon << std::endl; + << static_cast(latchupStatusReport.timeMon.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Year: " - << latchupStatusReport.timeYear << std::endl; + << static_cast(latchupStatusReport.timeYear.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Msec: " - << latchupStatusReport.timeMsec << std::endl; + << static_cast(latchupStatusReport.timeMsec.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: isSet: 0x" << std::hex << latchupStatusReport.timeMsec << std::dec << std::endl; #endif diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 5b5b3478..698b314b 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -104,6 +104,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint16_t APID_MASK = 0x7FF; static const uint16_t PACKET_SEQUENCE_COUNT_MASK = 0x3FFF; + static const uint8_t EXE_STATUS_OFFSET = 10; uint8_t commandBuffer[supv::MAX_COMMAND_SIZE]; From d51a73f15b9d20833d76278ab06ef25691c6585a Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Wed, 6 Apr 2022 17:51:31 +0200 Subject: [PATCH 004/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 28ca0aa3..7ef7f17c 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 28ca0aa36313798c16ffe1e4424c2b1a6409a4a6 +Subproject commit 7ef7f17c5c9732c5c05b2235e21d3189f627b439 From df2295b430e6b7bf3c34b5871cbd290b628b7175 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Wed, 6 Apr 2022 17:53:23 +0200 Subject: [PATCH 005/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 7ef7f17c..d8cff25c 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 7ef7f17c5c9732c5c05b2235e21d3189f627b439 +Subproject commit d8cff25c4a5383e918c0a10b36ff455616fb6e8b From c0fd9aee6fcf498fdcf1167a2594d60594210bee Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 7 Apr 2022 11:00:07 +0200 Subject: [PATCH 006/115] update helper wip --- common/config/commonClassIds.h | 1 + linux/devices/ploc/PlocSupvHelper.cpp | 51 ++++++---------------- linux/devices/ploc/PlocSupvHelper.h | 62 +++++++++++---------------- 3 files changed, 39 insertions(+), 75 deletions(-) diff --git a/common/config/commonClassIds.h b/common/config/commonClassIds.h index 03d51888..153ac6cb 100644 --- a/common/config/commonClassIds.h +++ b/common/config/commonClassIds.h @@ -30,6 +30,7 @@ enum commonClassIds: uint8_t { NVM_PARAM_BASE, //NVMB FILE_SYSTEM_HELPER, //FSHLP PLOC_MPSOC_HELPER, // PLMPHLP + PLOC_SUPV_HELPER, // PLSPVHLP SA_DEPL_HANDLER, //SADPL MPSOC_RETURN_VALUES_IF, //MPSOCRTVIF COMMON_CLASS_ID_END // [EXPORT] : [END] diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index 65abb843..630062d8 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -34,12 +34,12 @@ ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { semaphore.acquire(); break; } - case InternalState::FLASH_WRITE: { + case InternalState::UPDATE: { result = performUpdate(); if (result == RETURN_OK) { - triggerEvent(MPSOC_FLASH_WRITE_SUCCESSFUL); + triggerEvent(SUPV_UPDATE_SUCCESSFUL); } else { - triggerEvent(MPSOC_FLASH_WRITE_FAILED); + triggerEvent(SUPV_UPDATE_FAILED); } internalState = InternalState::IDLE; break; @@ -62,45 +62,20 @@ ReturnValue_t PlocSupvHelper::setComIF(DeviceCommunicationIF* communicationInter void PlocSupvHelper::setComCookie(CookieIF* comCookie_) { comCookie = comCookie_; } -void PlocSupvHelper::setSequenceCount(SourceSequenceCounter* sequenceCount_) { - sequenceCount = sequenceCount_; -} - -ReturnValue_t PlocSupvHelper::startFlashWrite(std::string obcFile, std::string mpsocFile) { +ReturnValue_t PlocSupvHelper::startUpdate(std::string file, uint8_t memoryId, + uint32_t startAddress) { ReturnValue_t result = RETURN_OK; #ifdef XIPHOS_Q7S - result = FilesystemHelper::checkPath(obcFile); - if (result != RETURN_OK) { - return result; - } - result = FilesystemHelper::fileExists(mpsocFile); + result = FilesystemHelper::checkPath(file); if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::startUpdate: File " << file << " does not exists" << std::endl; return result; } #endif -#ifdef TE0720_1CFA - if (not std::filesystem::exists(obcFile)) { - sif::warning << "PlocSupvHelper::startFlashWrite: File " << obcFile << "does not exist" - << std::endl; - return RETURN_FAILED; - } -#endif - - flashWrite.obcFile = obcFile; - flashWrite.mpsocFile = mpsocFile; - internalState = InternalState::FLASH_WRITE; - result = resetHelper(); - if (result != RETURN_OK) { - return result; - } - return result; -} - -ReturnValue_t PlocSupvHelper::resetHelper() { - ReturnValue_t result = RETURN_OK; - semaphore.release(); - terminate = false; - result = uartComIF->flushUartRxBuffer(comCookie); + update.file = file; + update.memoryId = memoryId; + update.startAddress = startAddress; + internalState = InternalState::UPDATE; return result; } @@ -244,11 +219,11 @@ ReturnValue_t PlocSupvHelper::handleExe() { void PlocSupvHelper::handleExeApidFailure(uint16_t apid) { if (apid == supv::apid::EXE_FAILURE) { - triggerEvent(EXE_FAILURE_REPORT, static_cast(internalState)); + triggerEvent(SUPV_EXE_FAILURE_REPORT, static_cast(internalState)); sif::warning << "PlocSupvHelper::handleExeApidFailure: Received execution failure " << "report" << std::endl; } else { - triggerEvent(EXE_INVALID_APID, apid, static_cast(internalState)); + triggerEvent(SUPV_EXE_INVALID_APID, apid, static_cast(internalState)); sif::warning << "PlocSupvHelper::handleExeApidFailure: Expected execution report " << "but received space packet with apid " << std::hex << apid << std::endl; } diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index fade2069..dbe712dc 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -8,7 +8,6 @@ #include "fsfw/osal/linux/BinarySemaphore.h" #include "fsfw/returnvalues/HasReturnvaluesIF.h" #include "fsfw/tasks/ExecutableObjectIF.h" -#include "fsfw/tmtcservices/SourceSequenceCounter.h" #include "fsfw_hal/linux/uart/UartComIF.h" #include "linux/devices/devicedefinitions/PlocMPSoCDefinitions.h" #ifdef XIPHOS_Q7S @@ -44,29 +43,25 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Did not receive acknowledgement report //! P1: Number of bytes missing //! P2: Internal state of MPSoC helper - static const Event MISSING_ACK = MAKE_EVENT(5, severity::LOW); - //! [EXPORT] : [COMMENT] Did not receive execution report + static const Event SUPV_MISSING_ACK = MAKE_EVENT(5, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor did not receive execution report //! P1: Number of bytes missing - //! P2: Internal state of MPSoC helper - static const Event MISSING_EXE = MAKE_EVENT(6, severity::LOW); - //! [EXPORT] : [COMMENT] Received acknowledgement failure report - //! P1: Internal state of MPSoC - static const Event ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); - //! [EXPORT] : [COMMENT] Received execution failure report - //! P1: Internal state of MPSoC - static const Event EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); - //! [EXPORT] : [COMMENT] Expected acknowledgement report but received space packet with other apid + //! P2: Internal state of supervisor helper + static const Event SUPV_MISSING_EXE = MAKE_EVENT(6, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor received acknowledgment failure report + //! P1: Internal state of supervisor helper + static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor received execution failure report + //! P1: Internal state of supervisor + static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with other apid //! P1: Apid of received space packet - //! P2: Internal state of MPSoC - static const Event ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); - //! [EXPORT] : [COMMENT] Expected execution report but received space packet with other apid + //! P2: Internal state of supervisor helper + static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor helper expected execution report but received space packet with other apid //! P1: Apid of received space packet - //! P2: Internal state of MPSoC - static const Event EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); - //! [EXPORT] : [COMMENT] Received sequence count does not match expected sequence count - //! P1: Expected sequence count - //! P2: Received sequence count - static const Event MPSOC_HELPER_SEQ_CNT_MISMATCH = MAKE_EVENT(11, severity::LOW); + //! P2: Internal state of supervisor helper + static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); PlocSupvHelper(object_id_t objectId); virtual ~PlocSupvHelper(); @@ -78,27 +73,23 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha void setComCookie(CookieIF* comCookie_); /** - * @brief Starts flash write sequence + * @brief Starts update procedure * - * @param obcFile File where to read from the data - * @param mpsocFile The file of the MPSoC where should be written to + * @param file File containing the update data + * @param memoryId ID of the memory where to write to + * @param startAddress Address where to write data * * @return RETURN_OK if successful, otherwise error return value */ - ReturnValue_t startUpdate(std::string file, std::string mpsocFile); + ReturnValue_t startUpdate(std::string file, uint8_t memoryId, uint32_t startAddress); /** * @brief Can be used to interrupt a running data transfer. */ void stopProcess(); - /** - * @brief Sets the sequence count object responsible for the sequence count handling - */ - void setSequenceCount(SourceSequenceCounter* sequenceCount_); - private: - static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_MPSOC_HELPER; + static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_SUPV_HELPER; //! [EXPORT] : [COMMENT] File accidentally close static const ReturnValue_t FILE_CLOSED_ACCIDENTALLY = MAKE_RETURN_CODE(0xA0); @@ -110,7 +101,6 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha struct Update { uint8_t memoryId; uint32_t startAddress; - uint32_t length; // Absolute name of file containing update data std::string file; }; @@ -130,14 +120,11 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha bool terminate = false; /** - * Communication interface of MPSoC responsible for low level access. Must be set by the - * MPSoC Handler. + * Communication interface responsible for data transactions between OBC and Supervisor. */ UartComIF* uartComIF = nullptr; - // Communication cookie. Must be set by the MPSoC Handler + // Communication cookie. Must be set by the supervisor Handler CookieIF* comCookie = nullptr; - // Sequence count, must be set by Ploc MPSoC Handler - SourceSequenceCounter* sequenceCount; ReturnValue_t performUpdate(); ReturnValue_t handlePacketTransmission(SpacePacket& tc); @@ -148,6 +135,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha void handleAckApidFailure(uint16_t apid); void handleExeApidFailure(uint16_t apid); ReturnValue_t handleTmReception(SpacePacket* tmPacket, size_t remainingBytes); + ReturnValue_t eraseMemory(); }; #endif /* BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ */ From b440fc3df680c8bb82e8684889e5b74fa1a2323b Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sun, 10 Apr 2022 18:46:39 +0200 Subject: [PATCH 007/115] ploc update --- bsp_q7s/core/InitMission.cpp | 9 + bsp_q7s/core/ObjectFactory.cpp | 4 +- bsp_q7s/memory/FilesystemHelper.h | 6 +- bsp_te0720_1cfa/InitMission.cpp | 14 +- bsp_te0720_1cfa/ObjectFactory.cpp | 56 +- common/config/commonClassIds.h | 3 +- fsfw | 2 +- generators/bsp_q7s_events.csv | 358 +++--- generators/bsp_q7s_returnvalues.csv | 1101 +++++++++-------- generators/events/translateEvents.cpp | 76 +- generators/fsfwgen | 2 +- generators/objects/translateObjects.cpp | 2 +- .../devicedefinitions/PlocMPSoCDefinitions.h | 3 + .../PlocSupervisorDefinitions.h | 449 +++---- linux/devices/ploc/CMakeLists.txt | 2 +- linux/devices/ploc/PlocMPSoCHelper.cpp | 12 +- linux/devices/ploc/PlocMPSoCHelper.h | 22 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 243 +++- linux/devices/ploc/PlocSupervisorHandler.h | 73 +- linux/devices/ploc/PlocSupvHelper.cpp | 203 ++- linux/devices/ploc/PlocSupvHelper.h | 69 +- linux/devices/ploc/PlocUpdater.cpp | 385 ------ linux/devices/ploc/PlocUpdater.h | 174 --- linux/fsfwconfig/OBSWConfig.h.in | 2 +- linux/fsfwconfig/events/translateEvents.cpp | 76 +- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- tmtc | 2 +- 27 files changed, 1533 insertions(+), 1817 deletions(-) delete mode 100644 linux/devices/ploc/PlocUpdater.cpp delete mode 100644 linux/devices/ploc/PlocUpdater.h diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index ced1d12a..b6e65eca 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -167,6 +167,15 @@ void initmission::initTasks() { } #endif /* OBSW_ADD_PLOC_MPSOC */ +#if OBSW_ADD_PLOC_SUPERVISOR == 1 + PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( + "PLOC_SUPV_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc); + result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); + if (result != HasReturnvaluesIF::RETURN_OK) { + initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); + } +#endif /* OBSW_ADD_PLOC_SUPERVISOR */ + #if OBSW_TEST_CCSDS_BRIDGE == 1 PeriodicTaskIF* ptmeTestTask = factory->createPeriodicTask( "PTME_TEST", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc); diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index d72beb8d..463df337 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -29,7 +29,7 @@ #include "linux/devices/ploc/PlocMPSoCHelper.h" #include "linux/devices/ploc/PlocMemoryDumper.h" #include "linux/devices/ploc/PlocSupervisorHandler.h" -#include "linux/devices/ploc/PlocUpdater.h" +#include "linux/devices/ploc/PlocSupvHelper.h" #include "linux/devices/startracker/StarTrackerHandler.h" #include "linux/devices/startracker/StrHelper.h" #include "linux/obc/AxiPtmeConfig.h" @@ -205,7 +205,6 @@ void ObjectFactory::produce(void* args) { createTestComponents(gpioComIF); #endif /* OBSW_ADD_TEST_CODE == 1 */ - new PlocUpdater(objects::PLOC_UPDATER); new PlocMemoryDumper(objects::PLOC_MEMORY_DUMPER); } @@ -666,6 +665,7 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF) { q7s::UART_PLOC_SUPERVSIOR_DEV, UartModes::NON_CANONICAL, uart::PLOC_SUPERVISOR_BAUD, supv::MAX_PACKET_SIZE * 20); supervisorCookie->setNoFixedSizeReply(); + new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, gpioComIF), pcduSwitches::PDU1_CH6_PLOC_12V); diff --git a/bsp_q7s/memory/FilesystemHelper.h b/bsp_q7s/memory/FilesystemHelper.h index cb8e27a8..ab20eec5 100644 --- a/bsp_q7s/memory/FilesystemHelper.h +++ b/bsp_q7s/memory/FilesystemHelper.h @@ -7,7 +7,7 @@ #include "fsfw/returnvalues/HasReturnvaluesIF.h" /** - * @brief This class implements often used functions concerning the file system management. + * @brief This class implements often used functions related to the file system management. * * @author J. Meier */ @@ -39,9 +39,9 @@ class FilesystemHelper : public HasReturnvaluesIF { /** * @brief Checks if the file exists on the filesystem. * - * param file File to check + * @param file File to check * - * @return RETURN_OK if fiel exists, otherwise return error code. + * @return RETURN_OK if file exists, otherwise return error code. */ static ReturnValue_t fileExists(std::string file); }; diff --git a/bsp_te0720_1cfa/InitMission.cpp b/bsp_te0720_1cfa/InitMission.cpp index 6b39cfb6..66f0fdd8 100644 --- a/bsp_te0720_1cfa/InitMission.cpp +++ b/bsp_te0720_1cfa/InitMission.cpp @@ -89,13 +89,21 @@ void initmission::initTasks() { } pstTasks.push_back(pst); +#if OBSW_ADD_PLOC_MPSOC == 1 PeriodicTaskIF* mpsocHelperTask = factory->createPeriodicTask( "PLOC_MPSOC_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc); result = mpsocHelperTask->addComponent(objects::PLOC_MPSOC_HELPER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("PLOC_MPSOC_HELPER", objects::PLOC_MPSOC_HELPER); } - pstTasks.push_back(mpsocHelperTask); +#endif /* OBSW_ADD_PLOC_MPSOC == 1*/ + + PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( + "PLOC_SUPV_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc); + result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); + if (result != HasReturnvaluesIF::RETURN_OK) { + initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); + } auto taskStarter = [](std::vector& taskVector, std::string name) { for (const auto& task : taskVector) { @@ -111,6 +119,10 @@ void initmission::initTasks() { tmtcDistributor->startTask(); tmtcBridgeTask->startTask(); tmtcPollingTask->startTask(); + supvHelperTask->startTask(); +#if OBSW_ADD_PLOC_MPSOC == 1 + mpsocHelperTask->startTask(); +#endif /* OBSW_ADD_PLOC_MPSOC == 1 */ taskStarter(pstTasks, "PST Tasks"); taskStarter(pusTasks, "PUS Tasks"); diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index 757cf31c..4cd90c45 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -1,27 +1,29 @@ #include "ObjectFactory.h" #include -#include "fsfw_hal/linux/uart/UartComIF.h" -#include "fsfw_hal/linux/i2c/I2cComIF.h" -#include "fsfw_hal/linux/uart/UartCookie.h" #include "OBSWConfig.h" #include "busConf.h" #include "devConf.h" +#include "devices/addresses.h" +#include "devices/gpioIds.h" #include "fsfw/datapoollocal/LocalDataPoolManager.h" #include "fsfw/tmtcpacket/pus/tm.h" #include "fsfw/tmtcservices/CommandingServiceBase.h" #include "fsfw/tmtcservices/PusServiceBase.h" +#include "fsfw_hal/linux/i2c/I2cComIF.h" #include "fsfw_hal/linux/i2c/I2cCookie.h" +#include "fsfw_hal/linux/uart/UartComIF.h" +#include "fsfw_hal/linux/uart/UartCookie.h" #include "linux/devices/ploc/PlocMPSoCHandler.h" #include "linux/devices/ploc/PlocMPSoCHelper.h" -#include "mission/devices/Tmp1075Handler.h" +#include "linux/devices/ploc/PlocSupervisorHandler.h" +#include "linux/devices/ploc/PlocSupvHelper.h" #include "mission/core/GenericFactory.h" +#include "mission/devices/Tmp1075Handler.h" #include "mission/utility/TmFunnel.h" -#include "test/gpio/DummyGpioIF.h" #include "objects/systemObjectList.h" -#include "devices/addresses.h" -#include "devices/gpioIds.h" +#include "test/gpio/DummyGpioIF.h" #include "tmtc/apid.h" #include "tmtc/pusIds.h" @@ -43,17 +45,18 @@ void ObjectFactory::produce(void* args) { Factory::setStaticFrameworkObjectIds(); ObjectFactory::produceGenericObjects(); +new UartComIF(objects::UART_COM_IF); + #if OBSW_ADD_PLOC_MPSOC == 1 UartCookie* mpsocUartCookie = new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, UartModes::NON_CANONICAL, uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); mpsocUartCookie->setNoFixedSizeReply(); PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); - new UartComIF(objects::UART_COM_IF); - auto dummyGpioIF = new DummyGpioIF(); - PlocMPSoCHandler* plocMPSoCHandler = - new PlocMPSoCHandler(objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, - plocMpsocHelper, Gpio(gpioIds::ENABLE_MPSOC_UART, dummyGpioIF)); + auto mpsocGpioIF = new DummyGpioIF(); + PlocMPSoCHandler* plocMPSoCHandler = new PlocMPSoCHandler( + objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, plocMpsocHelper, + Gpio(gpioIds::ENABLE_MPSOC_UART, mpsocGpioIF), objects::PLOC_SUPERVISOR_HANDLER); plocMPSoCHandler->setStartUpImmediately(); #endif /* OBSW_ADD_PLOC_MPSOC == 1 */ @@ -130,23 +133,26 @@ void ObjectFactory::produce(void* args) { #if OBSW_ADD_PLOC_SUPERVISOR == 1 /* Configuration for MIO0 on TE0720-03-1CFA */ - UartCookie* plocSupervisorCookie = + UartCookie* supervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, std::string("/dev/ttyPS1"), - UartModes::NON_CANONICAL, 115200, PLOC_SPV::MAX_PACKET_SIZE * 20); - plocSupervisorCookie->setNoFixedSizeReply(); - PlocSupervisorHandler* plocSupervisor = new PlocSupervisorHandler( - objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, plocSupervisorCookie); + UartModes::NON_CANONICAL, 115200, supv::MAX_PACKET_SIZE * 20); + supervisorCookie->setNoFixedSizeReply(); + auto supvGpioIF = new DummyGpioIF(); + auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); + auto plocSupervisor = new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, + supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, supvGpioIF), + pcduSwitches::PDU1_CH6_PLOC_12V, supvHelper); plocSupervisor->setStartUpImmediately(); #endif -new I2cComIF(objects::I2C_COM_IF); + new I2cComIF(objects::I2C_COM_IF); -I2cCookie* i2cCookieTmp1075tcs1 = - new I2cCookie(addresses::TMP1075_TCS_1, TMP1075::MAX_REPLY_LENGTH, std::string("/dev/i2c-0")); -I2cCookie* i2cCookieTmp1075tcs2 = - new I2cCookie(addresses::TMP1075_TCS_2, TMP1075::MAX_REPLY_LENGTH, std::string("/dev/i2c-0")); + I2cCookie* i2cCookieTmp1075tcs1 = + new I2cCookie(addresses::TMP1075_TCS_1, TMP1075::MAX_REPLY_LENGTH, std::string("/dev/i2c-0")); + I2cCookie* i2cCookieTmp1075tcs2 = + new I2cCookie(addresses::TMP1075_TCS_2, TMP1075::MAX_REPLY_LENGTH, std::string("/dev/i2c-0")); -/* Temperature sensors */ -new Tmp1075Handler(objects::TMP1075_HANDLER_1, objects::I2C_COM_IF, i2cCookieTmp1075tcs1); -new Tmp1075Handler(objects::TMP1075_HANDLER_2, objects::I2C_COM_IF, i2cCookieTmp1075tcs2); + /* Temperature sensors */ + new Tmp1075Handler(objects::TMP1075_HANDLER_1, objects::I2C_COM_IF, i2cCookieTmp1075tcs1); + new Tmp1075Handler(objects::TMP1075_HANDLER_2, objects::I2C_COM_IF, i2cCookieTmp1075tcs2); } diff --git a/common/config/commonClassIds.h b/common/config/commonClassIds.h index 153ac6cb..d95ff67d 100644 --- a/common/config/commonClassIds.h +++ b/common/config/commonClassIds.h @@ -16,6 +16,7 @@ enum commonClassIds: uint8_t { DWLPWRON_CMD, //DWLPWRON MPSOC_TM, //MPTM PLOC_SUPERVISOR_HANDLER, //PLSV + PLOC_SUPV_HELPER, //PLSPVhLP SUS_HANDLER, //SUSS CCSDS_IP_CORE_BRIDGE, //IPCI PTME, //PTME @@ -30,9 +31,9 @@ enum commonClassIds: uint8_t { NVM_PARAM_BASE, //NVMB FILE_SYSTEM_HELPER, //FSHLP PLOC_MPSOC_HELPER, // PLMPHLP - PLOC_SUPV_HELPER, // PLSPVHLP SA_DEPL_HANDLER, //SADPL MPSOC_RETURN_VALUES_IF, //MPSOCRTVIF + SUPV_RETURN_VALUES_IF, //SPVRTVIF COMMON_CLASS_ID_END // [EXPORT] : [END] }; diff --git a/fsfw b/fsfw index 7df51f72..43917d98 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 7df51f72029d7b0f1571a74cd2a71ca74bbaa086 +Subproject commit 43917d98c025b446aa0d79d2166b1f031fb288ae diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 994e7517..c9726958 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -1,181 +1,177 @@ -2200;0x0898;STORE_SEND_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2201;0x0899;STORE_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2202;0x089a;STORE_SEND_READ_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2203;0x089b;STORE_READ_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2204;0x089c;UNEXPECTED_MSG;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2205;0x089d;STORING_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2206;0x089e;TM_DUMP_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2207;0x089f;STORE_INIT_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2208;0x08a0;STORE_INIT_EMPTY;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2209;0x08a1;STORE_CONTENT_CORRUPTED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2210;0x08a2;STORE_INITIALIZE;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2211;0x08a3;INIT_DONE;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2212;0x08a4;DUMP_FINISHED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2213;0x08a5;DELETION_FINISHED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2214;0x08a6;DELETION_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2215;0x08a7;AUTO_CATALOGS_SENDING_FAILED;INFO;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h -2600;0x0a28;GET_DATA_FAILED;LOW;;fsfw/src/fsfw/storagemanager/StorageManagerIF.h -2601;0x0a29;STORE_DATA_FAILED;LOW;;fsfw/src/fsfw/storagemanager/StorageManagerIF.h -2800;0x0af0;DEVICE_BUILDING_COMMAND_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2801;0x0af1;DEVICE_SENDING_COMMAND_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2802;0x0af2;DEVICE_REQUESTING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2803;0x0af3;DEVICE_READING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2804;0x0af4;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2805;0x0af5;DEVICE_MISSED_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2806;0x0af6;DEVICE_UNKNOWN_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2807;0x0af7;DEVICE_UNREQUESTED_REPLY;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2808;0x0af8;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2809;0x0af9;MONITORING_LIMIT_EXCEEDED;LOW;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2810;0x0afa;MONITORING_AMBIGUOUS;HIGH;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -2811;0x0afb;DEVICE_WANTS_HARD_REBOOT;HIGH;;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h -4201;0x1069;FUSE_CURRENT_HIGH;LOW;;fsfw/src/fsfw/power/Fuse.h -4202;0x106a;FUSE_WENT_OFF;LOW;;fsfw/src/fsfw/power/Fuse.h -4204;0x106c;POWER_ABOVE_HIGH_LIMIT;LOW;;fsfw/src/fsfw/power/Fuse.h -4205;0x106d;POWER_BELOW_LOW_LIMIT;LOW;;fsfw/src/fsfw/power/Fuse.h -4300;0x10cc;SWITCH_WENT_OFF;LOW;;fsfw/src/fsfw/power/PowerSwitchIF.h -5000;0x1388;HEATER_ON;INFO;;fsfw/src/fsfw/thermal/Heater.h -5001;0x1389;HEATER_OFF;INFO;;fsfw/src/fsfw/thermal/Heater.h -5002;0x138a;HEATER_TIMEOUT;LOW;;fsfw/src/fsfw/thermal/Heater.h -5003;0x138b;HEATER_STAYED_ON;LOW;;fsfw/src/fsfw/thermal/Heater.h -5004;0x138c;HEATER_STAYED_OFF;LOW;;fsfw/src/fsfw/thermal/Heater.h -5200;0x1450;TEMP_SENSOR_HIGH;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h -5201;0x1451;TEMP_SENSOR_LOW;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h -5202;0x1452;TEMP_SENSOR_GRADIENT;LOW;;fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h -5901;0x170d;COMPONENT_TEMP_LOW;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h -5902;0x170e;COMPONENT_TEMP_HIGH;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h -5903;0x170f;COMPONENT_TEMP_OOL_LOW;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h -5904;0x1710;COMPONENT_TEMP_OOL_HIGH;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h -5905;0x1711;TEMP_NOT_IN_OP_RANGE;LOW;;fsfw/src/fsfw/thermal/ThermalComponentIF.h -7101;0x1bbd;FDIR_CHANGED_STATE;INFO;;fsfw/src/fsfw/fdir/FailureIsolationBase.h -7102;0x1bbe;FDIR_STARTS_RECOVERY;MEDIUM;;fsfw/src/fsfw/fdir/FailureIsolationBase.h -7103;0x1bbf;FDIR_TURNS_OFF_DEVICE;MEDIUM;;fsfw/src/fsfw/fdir/FailureIsolationBase.h -7201;0x1c21;MONITOR_CHANGED_STATE;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h -7202;0x1c22;VALUE_BELOW_LOW_LIMIT;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h -7203;0x1c23;VALUE_ABOVE_HIGH_LIMIT;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h -7204;0x1c24;VALUE_OUT_OF_RANGE;LOW;;fsfw/src/fsfw/monitoring/MonitoringIF.h -7400;0x1ce8;CHANGING_MODE;INFO;;fsfw/src/fsfw/modes/HasModesIF.h -7401;0x1ce9;MODE_INFO;INFO;;fsfw/src/fsfw/modes/HasModesIF.h -7402;0x1cea;FALLBACK_FAILED;HIGH;;fsfw/src/fsfw/modes/HasModesIF.h -7403;0x1ceb;MODE_TRANSITION_FAILED;LOW;;fsfw/src/fsfw/modes/HasModesIF.h -7404;0x1cec;CANT_KEEP_MODE;HIGH;;fsfw/src/fsfw/modes/HasModesIF.h -7405;0x1ced;OBJECT_IN_INVALID_MODE;LOW;;fsfw/src/fsfw/modes/HasModesIF.h -7406;0x1cee;FORCING_MODE;MEDIUM;;fsfw/src/fsfw/modes/HasModesIF.h -7407;0x1cef;MODE_CMD_REJECTED;LOW;;fsfw/src/fsfw/modes/HasModesIF.h -7506;0x1d52;HEALTH_INFO;INFO;;fsfw/src/fsfw/health/HasHealthIF.h -7507;0x1d53;CHILD_CHANGED_HEALTH;INFO;;fsfw/src/fsfw/health/HasHealthIF.h -7508;0x1d54;CHILD_PROBLEMS;LOW;;fsfw/src/fsfw/health/HasHealthIF.h -7509;0x1d55;OVERWRITING_HEALTH;LOW;;fsfw/src/fsfw/health/HasHealthIF.h -7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h -7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h -7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h -7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h -7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h -7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h -7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h -7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h -8900;0x22c4;CLOCK_SET;INFO;;fsfw/src/fsfw/pus/Service9TimeManagement.h -8901;0x22c5;CLOCK_SET_FAILURE;LOW;;fsfw/src/fsfw/pus/Service9TimeManagement.h -9700;0x25e4;TEST;INFO;;fsfw/src/fsfw/pus/Service17Test.h -10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;;fsfw/hal/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h -10800;0x2a30;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 -10801;0x2a31;SWITCH_HAS_CHANGED;INFO;Indicated that a swithc state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h -10802;0x2a32;SWITCHING_Q7S_DENIED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h -10900;0x2a94;GPIO_PULL_HIGH_FAILED;LOW;;mission/devices/HeaterHandler.h -10901;0x2a95;GPIO_PULL_LOW_FAILED;LOW;;mission/devices/HeaterHandler.h -10902;0x2a96;SWITCH_ALREADY_ON;LOW;;mission/devices/HeaterHandler.h -10903;0x2a97;SWITCH_ALREADY_OFF;LOW;;mission/devices/HeaterHandler.h -10904;0x2a98;MAIN_SWITCH_TIMEOUT;LOW;;mission/devices/HeaterHandler.h -11000;0x2af8;MAIN_SWITCH_ON_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h -11001;0x2af9;MAIN_SWITCH_OFF_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h -11002;0x2afa;DEPLOYMENT_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h -11003;0x2afb;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h -11004;0x2afc;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h -11101;0x2b5d;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h -11102;0x2b5e;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 -11103;0x2b5f;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 -11104;0x2b60;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h -11105;0x2b61;MPSOC_HANDLER_SEQ_CNT_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 -11201;0x2bc1;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 -11202;0x2bc2;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 -11203;0x2bc3;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 -11204;0x2bc4;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 -11205;0x2bc5;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 -11206;0x2bc6;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 -11207;0x2bc7;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 -11208;0x2bc8;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/IMTQHandler.h -11301;0x2c25;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/RwHandler.h -11401;0x2c89;BOOTING_FIRMWARE_FAILED;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h -11402;0x2c8a;BOOTING_BOOTLOADER_FAILED;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h -11501;0x2ced;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h -11502;0x2cee;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h -11503;0x2cef;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;linux/devices/ploc/PlocSupervisorHandler.h -11504;0x2cf0;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h -11600;0x2d50;SANITIZATION_FAILED;LOW;;bsp_q7s/memory/SdCardManager.h -11601;0x2d51;MOUNTED_SD_CARD;INFO;;bsp_q7s/memory/SdCardManager.h -11700;0x2db4;UPDATE_FILE_NOT_EXISTS;LOW;;linux/devices/ploc/PlocUpdater.h -11701;0x2db5;ACTION_COMMANDING_FAILED;LOW;Failed to send command to supervisor handler P1: Return value of CommandActionHelper::commandAction P2: Action ID of command to send;linux/devices/ploc/PlocUpdater.h -11702;0x2db6;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;linux/devices/ploc/PlocUpdater.h -11703;0x2db7;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent (inclusive the failed packet);linux/devices/ploc/PlocUpdater.h -11704;0x2db8;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;linux/devices/ploc/PlocUpdater.h -11705;0x2db9;UPDATE_FINISHED;INFO;MPSoC update successful completed;linux/devices/ploc/PlocUpdater.h -11800;0x2e18;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 -11801;0x2e19;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 -11802;0x2e1a;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h -11901;0x2e7d;INVALID_TC_FRAME;HIGH;;linux/obc/PdecHandler.h -11902;0x2e7e;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/obc/PdecHandler.h -11903;0x2e7f;CARRIER_LOCK;INFO;Carrier lock detected;linux/obc/PdecHandler.h -11904;0x2e80;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/obc/PdecHandler.h -12000;0x2ee0;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h -12001;0x2ee1;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h -12002;0x2ee2;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h -12003;0x2ee3;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h -12004;0x2ee4;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h -12005;0x2ee5;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h -12006;0x2ee6;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h -12007;0x2ee7;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h -12008;0x2ee8;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h -12009;0x2ee9;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 -12010;0x2eea;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 -12011;0x2eeb;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 -12012;0x2eec;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 -12013;0x2eed;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 -12014;0x2eee;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h -12015;0x2eef;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux/devices/startracker/StrHelper.h -12016;0x2ef0;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux/devices/startracker/StrHelper.h -12100;0x2f44;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h -12101;0x2f45;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h -12102;0x2f46;SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocMPSoCHelper.h -12103;0x2f47;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 -12104;0x2f48;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 -12105;0x2f49;MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h -12106;0x2f4a;MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h -12107;0x2f4b;ACK_FAILURE_REPORT;LOW;Received acknowledgement failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h -12108;0x2f4c;EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h -12109;0x2f4d;ACK_INVALID_APID;LOW;Expected acknowledgement report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h -12110;0x2f4e;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 -12111;0x2f4f;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 -12200;0x2fa8;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h -12201;0x2fa9;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12202;0x2faa;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12203;0x2fab;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12204;0x2fac;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12205;0x2fad;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12206;0x2fae;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12207;0x2faf;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12208;0x2fb0;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12209;0x2fb1;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12210;0x2fb2;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12211;0x2fb3;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h -12300;0x300c;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/AcsBoardAssembly.h -12301;0x300d;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/AcsBoardAssembly.h -12302;0x300e;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/AcsBoardAssembly.h -12303;0x300f;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/AcsBoardAssembly.h -12400;0x3070;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/SusAssembly.h -12401;0x3071;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/SusAssembly.h -12402;0x3072;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/SusAssembly.h -12403;0x3073;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/SusAssembly.h -12500;0x30d4;CHILDREN_LOST_MODE;MEDIUM;;mission/system/TcsBoardAssembly.h -13600;0x3520;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h -13601;0x3521;REBOOT_SW;MEDIUM; Software reboot occured. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h -13602;0x3522;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 -13603;0x3523;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h +2200;0x0898;STORE_SEND_WRITE_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2201;0x0899;STORE_WRITE_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2202;0x089a;STORE_SEND_READ_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2203;0x089b;STORE_READ_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2204;0x089c;UNEXPECTED_MSG;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2205;0x089d;STORING_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2206;0x089e;TM_DUMP_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2207;0x089f;STORE_INIT_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2208;0x08a0;STORE_INIT_EMPTY;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2209;0x08a1;STORE_CONTENT_CORRUPTED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2210;0x08a2;STORE_INITIALIZE;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2211;0x08a3;INIT_DONE;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2212;0x08a4;DUMP_FINISHED;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2213;0x08a5;DELETION_FINISHED;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2214;0x08a6;DELETION_FAILED;LOW;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2215;0x08a7;AUTO_CATALOGS_SENDING_FAILED;INFO;;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h +2600;0x0a28;GET_DATA_FAILED;LOW;;fsfw\src\fsfw\storagemanager\StorageManagerIF.h +2601;0x0a29;STORE_DATA_FAILED;LOW;;fsfw\src\fsfw\storagemanager\StorageManagerIF.h +2800;0x0af0;DEVICE_BUILDING_COMMAND_FAILED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2801;0x0af1;DEVICE_SENDING_COMMAND_FAILED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2802;0x0af2;DEVICE_REQUESTING_REPLY_FAILED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2803;0x0af3;DEVICE_READING_REPLY_FAILED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2804;0x0af4;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2805;0x0af5;DEVICE_MISSED_REPLY;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2806;0x0af6;DEVICE_UNKNOWN_REPLY;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2807;0x0af7;DEVICE_UNREQUESTED_REPLY;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2808;0x0af8;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2809;0x0af9;MONITORING_LIMIT_EXCEEDED;LOW;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2810;0x0afa;MONITORING_AMBIGUOUS;HIGH;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +2811;0x0afb;DEVICE_WANTS_HARD_REBOOT;HIGH;;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h +4201;0x1069;FUSE_CURRENT_HIGH;LOW;;fsfw\src\fsfw\power\Fuse.h +4202;0x106a;FUSE_WENT_OFF;LOW;;fsfw\src\fsfw\power\Fuse.h +4204;0x106c;POWER_ABOVE_HIGH_LIMIT;LOW;;fsfw\src\fsfw\power\Fuse.h +4205;0x106d;POWER_BELOW_LOW_LIMIT;LOW;;fsfw\src\fsfw\power\Fuse.h +4300;0x10cc;SWITCH_WENT_OFF;LOW;;fsfw\src\fsfw\power\PowerSwitchIF.h +5000;0x1388;HEATER_ON;INFO;;fsfw\src\fsfw\thermal\Heater.h +5001;0x1389;HEATER_OFF;INFO;;fsfw\src\fsfw\thermal\Heater.h +5002;0x138a;HEATER_TIMEOUT;LOW;;fsfw\src\fsfw\thermal\Heater.h +5003;0x138b;HEATER_STAYED_ON;LOW;;fsfw\src\fsfw\thermal\Heater.h +5004;0x138c;HEATER_STAYED_OFF;LOW;;fsfw\src\fsfw\thermal\Heater.h +5200;0x1450;TEMP_SENSOR_HIGH;LOW;;fsfw\src\fsfw\thermal\AbstractTemperatureSensor.h +5201;0x1451;TEMP_SENSOR_LOW;LOW;;fsfw\src\fsfw\thermal\AbstractTemperatureSensor.h +5202;0x1452;TEMP_SENSOR_GRADIENT;LOW;;fsfw\src\fsfw\thermal\AbstractTemperatureSensor.h +5901;0x170d;COMPONENT_TEMP_LOW;LOW;;fsfw\src\fsfw\thermal\ThermalComponentIF.h +5902;0x170e;COMPONENT_TEMP_HIGH;LOW;;fsfw\src\fsfw\thermal\ThermalComponentIF.h +5903;0x170f;COMPONENT_TEMP_OOL_LOW;LOW;;fsfw\src\fsfw\thermal\ThermalComponentIF.h +5904;0x1710;COMPONENT_TEMP_OOL_HIGH;LOW;;fsfw\src\fsfw\thermal\ThermalComponentIF.h +5905;0x1711;TEMP_NOT_IN_OP_RANGE;LOW;;fsfw\src\fsfw\thermal\ThermalComponentIF.h +7101;0x1bbd;FDIR_CHANGED_STATE;INFO;;fsfw\src\fsfw\fdir\FailureIsolationBase.h +7102;0x1bbe;FDIR_STARTS_RECOVERY;MEDIUM;;fsfw\src\fsfw\fdir\FailureIsolationBase.h +7103;0x1bbf;FDIR_TURNS_OFF_DEVICE;MEDIUM;;fsfw\src\fsfw\fdir\FailureIsolationBase.h +7201;0x1c21;MONITOR_CHANGED_STATE;LOW;;fsfw\src\fsfw\monitoring\MonitoringIF.h +7202;0x1c22;VALUE_BELOW_LOW_LIMIT;LOW;;fsfw\src\fsfw\monitoring\MonitoringIF.h +7203;0x1c23;VALUE_ABOVE_HIGH_LIMIT;LOW;;fsfw\src\fsfw\monitoring\MonitoringIF.h +7204;0x1c24;VALUE_OUT_OF_RANGE;LOW;;fsfw\src\fsfw\monitoring\MonitoringIF.h +7400;0x1ce8;CHANGING_MODE;INFO;;fsfw\src\fsfw\modes\HasModesIF.h +7401;0x1ce9;MODE_INFO;INFO;;fsfw\src\fsfw\modes\HasModesIF.h +7402;0x1cea;FALLBACK_FAILED;HIGH;;fsfw\src\fsfw\modes\HasModesIF.h +7403;0x1ceb;MODE_TRANSITION_FAILED;LOW;;fsfw\src\fsfw\modes\HasModesIF.h +7404;0x1cec;CANT_KEEP_MODE;HIGH;;fsfw\src\fsfw\modes\HasModesIF.h +7405;0x1ced;OBJECT_IN_INVALID_MODE;LOW;;fsfw\src\fsfw\modes\HasModesIF.h +7406;0x1cee;FORCING_MODE;MEDIUM;;fsfw\src\fsfw\modes\HasModesIF.h +7407;0x1cef;MODE_CMD_REJECTED;LOW;;fsfw\src\fsfw\modes\HasModesIF.h +7506;0x1d52;HEALTH_INFO;INFO;;fsfw\src\fsfw\health\HasHealthIF.h +7507;0x1d53;CHILD_CHANGED_HEALTH;INFO;;fsfw\src\fsfw\health\HasHealthIF.h +7508;0x1d54;CHILD_PROBLEMS;LOW;;fsfw\src\fsfw\health\HasHealthIF.h +7509;0x1d55;OVERWRITING_HEALTH;LOW;;fsfw\src\fsfw\health\HasHealthIF.h +7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw\src\fsfw\health\HasHealthIF.h +7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw\src\fsfw\health\HasHealthIF.h +7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw\src\fsfw\health\HasHealthIF.h +7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw\src\fsfw\datalinklayer\DataLinkLayer.h +7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw\src\fsfw\datalinklayer\DataLinkLayer.h +7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw\src\fsfw\datalinklayer\DataLinkLayer.h +7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw\src\fsfw\datalinklayer\DataLinkLayer.h +7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw\src\fsfw\datalinklayer\DataLinkLayer.h +8900;0x22c4;CLOCK_SET;INFO;;fsfw\src\fsfw\pus\Service9TimeManagement.h +8901;0x22c5;CLOCK_SET_FAILURE;LOW;;fsfw\src\fsfw\pus\Service9TimeManagement.h +9700;0x25e4;TEST;INFO;;fsfw\src\fsfw\pus\Service17Test.h +10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;;fsfw\hal\src\fsfw_hal\devicehandlers\MgmLIS3MDLHandler.h +10800;0x2a30;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 +10801;0x2a31;SWITCH_HAS_CHANGED;INFO;Indicated that a swithc state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission\devices\devicedefinitions\powerDefinitions.h +10802;0x2a32;SWITCHING_Q7S_DENIED;MEDIUM;;mission\devices\devicedefinitions\powerDefinitions.h +10900;0x2a94;GPIO_PULL_HIGH_FAILED;LOW;;mission\devices\HeaterHandler.h +10901;0x2a95;GPIO_PULL_LOW_FAILED;LOW;;mission\devices\HeaterHandler.h +10902;0x2a96;SWITCH_ALREADY_ON;LOW;;mission\devices\HeaterHandler.h +10903;0x2a97;SWITCH_ALREADY_OFF;LOW;;mission\devices\HeaterHandler.h +10904;0x2a98;MAIN_SWITCH_TIMEOUT;LOW;;mission\devices\HeaterHandler.h +11000;0x2af8;MAIN_SWITCH_ON_TIMEOUT;LOW;;mission\devices\SolarArrayDeploymentHandler.h +11001;0x2af9;MAIN_SWITCH_OFF_TIMEOUT;LOW;;mission\devices\SolarArrayDeploymentHandler.h +11002;0x2afa;DEPLOYMENT_FAILED;HIGH;;mission\devices\SolarArrayDeploymentHandler.h +11003;0x2afb;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;mission\devices\SolarArrayDeploymentHandler.h +11004;0x2afc;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;mission\devices\SolarArrayDeploymentHandler.h +11101;0x2b5d;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux\devices\ploc\PlocMPSoCHandler.h +11102;0x2b5e;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 +11103;0x2b5f;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 +11104;0x2b60;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux\devices\ploc\PlocMPSoCHandler.h +11105;0x2b61;MPSOC_HANDLER_SEQ_CNT_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 +11106;0x2b62;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 +11201;0x2bc1;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 +11202;0x2bc2;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 +11203;0x2bc3;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 +11204;0x2bc4;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 +11205;0x2bc5;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 +11206;0x2bc6;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 +11207;0x2bc7;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 +11208;0x2bc8;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission\devices\IMTQHandler.h +11301;0x2c25;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission\devices\RwHandler.h +11401;0x2c89;BOOTING_FIRMWARE_FAILED;LOW;Failed to boot firmware;linux\devices\startracker\StarTrackerHandler.h +11402;0x2c8a;BOOTING_BOOTLOADER_FAILED;LOW;Failed to boot star tracker into bootloader mode;linux\devices\startracker\StarTrackerHandler.h +11501;0x2ced;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux\devices\ploc\PlocSupervisorHandler.h +11502;0x2cee;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux\devices\ploc\PlocSupervisorHandler.h +11503;0x2cef;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;linux\devices\ploc\PlocSupervisorHandler.h +11504;0x2cf0;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux\devices\ploc\PlocSupervisorHandler.h +11505;0x2cf1;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux\devices\ploc\PlocSupervisorHandler.h +11600;0x2d50;SANITIZATION_FAILED;LOW;;bsp_q7s\memory\SdCardManager.h +11601;0x2d51;MOUNTED_SD_CARD;INFO;;bsp_q7s\memory\SdCardManager.h +11800;0x2e18;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 +11801;0x2e19;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 +11802;0x2e1a;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux\devices\ploc\PlocMemoryDumper.h +11901;0x2e7d;INVALID_TC_FRAME;HIGH;;linux\obc\PdecHandler.h +11902;0x2e7e;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux\obc\PdecHandler.h +11903;0x2e7f;CARRIER_LOCK;INFO;Carrier lock detected;linux\obc\PdecHandler.h +11904;0x2e80;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux\obc\PdecHandler.h +12000;0x2ee0;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux\devices\startracker\StrHelper.h +12001;0x2ee1;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux\devices\startracker\StrHelper.h +12002;0x2ee2;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux\devices\startracker\StrHelper.h +12003;0x2ee3;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux\devices\startracker\StrHelper.h +12004;0x2ee4;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux\devices\startracker\StrHelper.h +12005;0x2ee5;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux\devices\startracker\StrHelper.h +12006;0x2ee6;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux\devices\startracker\StrHelper.h +12007;0x2ee7;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux\devices\startracker\StrHelper.h +12008;0x2ee8;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux\devices\startracker\StrHelper.h +12009;0x2ee9;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 +12010;0x2eea;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 +12011;0x2eeb;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 +12012;0x2eec;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 +12013;0x2eed;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 +12014;0x2eee;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux\devices\startracker\StrHelper.h +12015;0x2eef;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux\devices\startracker\StrHelper.h +12016;0x2ef0;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux\devices\startracker\StrHelper.h +12100;0x2f44;SUPV_UPDATE_FAILED;LOW;update failed;linux\devices\ploc\PlocSupvHelper.h +12101;0x2f45;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux\devices\ploc\PlocSupvHelper.h +12102;0x2f46;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux\devices\ploc\PlocSupvHelper.h +12103;0x2f47;SUPV_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocSupvHelper.h +12104;0x2f48;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\PlocSupvHelper.h +12105;0x2f49;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\PlocSupvHelper.h +12106;0x2f4a;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h +12107;0x2f4b;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +12108;0x2f4c;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +12109;0x2f4d;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h +12110;0x2f4e;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\PlocSupvHelper.h +12111;0x2f4f;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\PlocSupvHelper.h +12200;0x2fa8;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission\devices\PayloadPcduHandler.h +12201;0x2fa9;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12202;0x2faa;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12203;0x2fab;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12204;0x2fac;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12205;0x2fad;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12206;0x2fae;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12207;0x2faf;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12208;0x2fb0;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12209;0x2fb1;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12210;0x2fb2;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12211;0x2fb3;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h +12300;0x300c;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission\system\AcsBoardAssembly.h +12301;0x300d;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission\system\AcsBoardAssembly.h +12302;0x300e;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission\system\AcsBoardAssembly.h +12303;0x300f;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\AcsBoardAssembly.h +12400;0x3070;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission\system\SusAssembly.h +12401;0x3071;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission\system\SusAssembly.h +12402;0x3072;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission\system\SusAssembly.h +12403;0x3073;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\SusAssembly.h +12500;0x30d4;CHILDREN_LOST_MODE;MEDIUM;;mission\system\TcsBoardAssembly.h +13600;0x3520;ALLOC_FAILURE;MEDIUM;;bsp_q7s\core\CoreController.h +13601;0x3521;REBOOT_SW;MEDIUM; Software reboot occured. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s\core\CoreController.h +13602;0x3522;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 +13603;0x3523;REBOOT_HW;MEDIUM;;bsp_q7s\core\CoreController.h diff --git a/generators/bsp_q7s_returnvalues.csv b/generators/bsp_q7s_returnvalues.csv index 01b2f676..a66555cc 100644 --- a/generators/bsp_q7s_returnvalues.csv +++ b/generators/bsp_q7s_returnvalues.csv @@ -1,551 +1,554 @@ 0x0;OK;System-wide code for ok.;RETURN_OK;HasReturnvaluesIF.h;HasReturnvaluesIF 0x1;Failed;Unspecified system-wide code for failed.;RETURN_FAILED;HasReturnvaluesIF.h;HasReturnvaluesIF -0x62a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission/tmtc/CCSDSHandler.h;CCSDS_HANDLER -0x68a0;SADPL_CommandNotSupported;;0xA0;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission/devices/SusHandler.h;SUS_HANDLER -0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission/devices/SusHandler.h;SUS_HANDLER -0x55b0;RWHA_SpiWriteFailure;;0xB0;mission/devices/RwHandler.h;RW_HANDLER -0x55b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission/devices/RwHandler.h;RW_HANDLER -0x55b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;mission/devices/RwHandler.h;RW_HANDLER -0x55b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;mission/devices/RwHandler.h;RW_HANDLER -0x55b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;mission/devices/RwHandler.h;RW_HANDLER -0x55b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;mission/devices/RwHandler.h;RW_HANDLER -0x55b6;RWHA_NoStartMarker;Expected a start marker as first byte;0xB6;mission/devices/RwHandler.h;RW_HANDLER -0x55a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;mission/devices/RwHandler.h;RW_HANDLER -0x55a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;mission/devices/RwHandler.h;RW_HANDLER -0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission/devices/RwHandler.h;RW_HANDLER -0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission/devices/RwHandler.h;RW_HANDLER -0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission/devices/RwHandler.h;RW_HANDLER -0x54a0;IMTQ_InvalidCommandCode;;0xA0;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a1;IMTQ_ParameterMissing;;0xA1;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a2;IMTQ_ParameterInvalid;;0xA2;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a3;IMTQ_CcUnavailable;;0xA3;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a4;IMTQ_InternalProcessingError;;0xA4;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a5;IMTQ_RejectedWithoutReason;;0xA5;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a6;IMTQ_CmdErrUnknown;;0xA6;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x54a7;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.;0xA7;mission/devices/IMTQHandler.h;IMTQ_HANDLER -0x52a1;HEATER_CommandNotSupported;;0xA1;mission/devices/HeaterHandler.h;HEATER_HANDLER -0x52a2;HEATER_InitFailed;;0xA2;mission/devices/HeaterHandler.h;HEATER_HANDLER -0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission/devices/HeaterHandler.h;HEATER_HANDLER -0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission/devices/HeaterHandler.h;HEATER_HANDLER -0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission/devices/HeaterHandler.h;HEATER_HANDLER -0x5f00;GOMS_PacketTooLong;;0;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f01;GOMS_InvalidTableId;;1;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f02;GOMS_InvalidAddress;;2;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f03;GOMS_InvalidParamSize;;3;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f04;GOMS_InvalidPayloadSize;;4;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f05;GOMS_UnknownReplyId;;5;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x53a0;SYRLINKS_CrcFailure;;0xA0;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a3;SYRLINKS_BadParameterValueAck;;0xA3;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a4;SYRLINKS_BadEndOfFrameAck;;0xA4;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a5;SYRLINKS_UnknownCommandIdAck;;0xA5;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x65a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission/memory/NVMParameterBase.h;NVM_PARAM_BASE -0x4300; HSPI_OpeningFileFailed;;0;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI -0x4301; HSPI_FullDuplexTransferFailed;;1;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI -0x4302; HSPI_HalfDuplexTransferFailed;;2;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI -0x4401; HURT_UartReadFailure;;1;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART -0x4402; HURT_UartReadSizeMissmatch;;2;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART -0x4403; HURT_UartRxBufferTooSmall;;3;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART -0x4601; HGIO_UnknownGpioId;;1;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO -0x4602; HGIO_DriveGpioFailure;;2;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO -0x4603; HGIO_GpioTypeFailure;;3;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO -0x4604; HGIO_GpioInvalidInstance;;4;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO -0x4605; HGIO_GpioDuplicateDetected;;5;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO -0x4200; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x4201; 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;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x4202; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x4203; UXOS_CommandError;Command execution failed;3;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x4204; UXOS_NoCommandLoadedOrPending;;4;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x4206; UXOS_PcloseCallError;;6;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL -0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF -0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF -0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d01; HKM_WrongHkPacketType;;1;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d04; HKM_PoolobjectNotFound;;4;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d05; HKM_DatasetNotFound;;5;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3501; CFDP_InvalidTlvType;;1;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3502; CFDP_InvalidDirectiveFields;;2;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3505; CFDP_MetadataCantParseOptions;;5;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw/src/fsfw/cfdp/definitions.h;CFDP -0x3101; CF_ObjectHasNoFunctions;;1;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF -0x3102; CF_AlreadyCommanding;;2;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF -0x3201; HF_IsBusy;;1;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF -0x3202; HF_InvalidParameters;;2;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF -0x3203; HF_ExecutionFinished;;3;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF -0x3204; HF_InvalidActionId;;4;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF -0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF -0x2d02; HPA_InvalidDomainId;;0x02;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF -0x2d03; HPA_InvalidValue;;0x03;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF -0x2d05; HPA_ReadOnly;;0x05;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF -0x2c01; PAW_UnknownDatatype;;0x01;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c03; PAW_Readonly;;0x03;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c04; PAW_TooBig;;0x04;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c05; PAW_SourceNotSet;;0x05;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c06; PAW_OutOfBounds;;0x06;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c07; PAW_NotSet;;0x07;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER -0x1701; HHI_ObjectNotHealthy;;1;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF -0x1702; HHI_InvalidHealthState;;2;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF -0x2701; SM_DataTooLarge;;1;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2702; SM_DataStorageFull;;2;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2703; SM_IllegalStorageId;;3;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2704; SM_DataDoesNotExist;;4;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2705; SM_IllegalAddress;;5;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2706; SM_PoolTooLarge;;6;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF -0x2301; MT_TooDetailedRequest;;1;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS -0x2302; MT_TooGeneralRequest;;2;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS -0x2303; MT_NoMatch;;3;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS -0x2304; MT_Full;;4;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS -0x2305; MT_NewNodeCreated;;5;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS -0x3e01; DLEE_StreamTooShort;;0x01;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER -0x3e02; DLEE_DecodingError;;0x02;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER -0x2e01; ASC_TooLongForTargetType;;1;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER -0x2e02; ASC_InvalidCharacters;;2;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER -0x2e03; ASC_BufferTooSmall;;0x3;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER -0x1c01; TCD_PacketLost;;1;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION -0x1c02; TCD_DestinationNotFound;;2;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION -0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION -0x1b00; TCC_IllegalApid;;0;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b01; TCC_IncompletePacket;;1;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b02; TCC_IncorrectChecksum;;2;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b03; TCC_IllegalPacketType;;3;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b04; TCC_IllegalPacketSubtype;;4;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK -0x3901; MQI_Empty;;1;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3902; MQI_Full;No space left for more messages;2;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF -0xf01; CM_UnknownCommand;;1;fsfw/src/fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE -0x3801; MUX_NotEnoughResources;;1;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3802; MUX_InsufficientMemory;;2;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3803; MUX_NoPrivilege;;3;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3804; MUX_WrongAttributeSetting;;4;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3805; MUX_MutexAlreadyLocked;;5;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3806; MUX_MutexNotFound;;6;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3807; MUX_MutexMaxLocks;;7;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x380a; MUX_MutexTimeout;;10;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x380b; MUX_MutexInvalidId;;11;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF -0x2801; TC_InvalidTargetState;;1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x801; DPS_InvalidParameterDefinition;;1;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x802; DPS_SetWasAlreadyRead;;2;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x803; DPS_CommitingWithoutReading;;3;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x804; DPS_DataSetUninitialised;;4;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x805; DPS_DataSetFull;;5;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x806; DPS_PoolVarNull;;6;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS -0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF -0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF -0xc02; MS_InvalidEntry;;0x02;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF -0xc03; MS_TooManyElements;;0x03;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF -0xc04; MS_CantStoreEmpty;;0x04;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF -0xd01; SS_SequenceAlreadyExists;;0x01;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd02; SS_TableAlreadyExists;;0x02;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd03; SS_TableDoesNotExist;;0x03;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd05; SS_SequenceDoesNotExist;;0x05;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd08; SS_NoTargetTable;;0x08;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd0b; SS_IsFallbackSequence;;0x0B;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd0c; SS_AccessDenied;;0x0C;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xd0e; SS_TableInUse;;0x0E;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xda1; SS_TargetTableNotReached;;0xA1;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xda2; SS_TableCheckFailed;;0xA2;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM -0xb01; SB_ChildNotFound;;0x01;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE -0xb02; SB_ChildInfoUpdated;;0x02;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE -0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE -0xb04; SB_CouldNotInsertChild;;0x04;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE -0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE -0xb00; SB_ConnBroken;;0;fsfw/src/fsfw/osal/common/TcpTmTcServer.h;SUBSYSTEM_BASE -0x2901; IEC_NoConfigurationTable;;0x01;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2902; IEC_NoCpuTable;;0x02;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2903; IEC_InvalidWorkspaceAddress;;0x03;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2904; IEC_TooLittleWorkspace;;0x04;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2905; IEC_WorkspaceAllocation;;0x05;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2906; IEC_InterruptStackTooSmall;;0x06;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2907; IEC_ThreadExitted;;0x07;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2908; IEC_InconsistentMpInformation;;0x08;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2909; IEC_InvalidNode;;0x09;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290a; IEC_NoMpci;;0x0a;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290b; IEC_BadPacket;;0x0b;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290c; IEC_OutOfPackets;;0x0c;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290d; IEC_OutOfGlobalObjects;;0x0d;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290e; IEC_OutOfProxies;;0x0e;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290f; IEC_InvalidGlobalId;;0x0f;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2910; IEC_BadStackHook;;0x10;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2911; IEC_BadAttributes;;0x11;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2912; IEC_ImplementationKeyCreateInconsistency;;0x12;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2913; IEC_ImplementationBlockingOperationCancel;;0x13;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2914; IEC_MutexObtainFromBadState;;0x14;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2915; IEC_UnlimitedAndMaximumIs0;;0x15;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x1401; SE_BufferTooShort;;1;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF -0x1402; SE_StreamTooShort;;2;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF -0x1403; SE_TooManyElements;;3;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF -0x4a00; SPPA_NoPacketFound;;0x00;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER -0x4a01; SPPA_SplitPacket;;0x01;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER -0x1d01; PUS_ActivityStarted;;1;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d02; PUS_InvalidSubservice;;2;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d03; PUS_IllegalApplicationData;;3;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d04; PUS_SendTmFailed;;4;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d05; PUS_Timeout;;5;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1f01; CSB_ExecutionComplete;;1;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f02; CSB_NoStepMessage;;2;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f03; CSB_ObjectBusy;;3;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f04; CSB_Busy;;4;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f05; CSB_InvalidTc;;5;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f06; CSB_InvalidObject;;6;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f07; CSB_InvalidReply;;7;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x2500; FDI_YourFault;;0;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x2501; FDI_MyFault;;1;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x2502; FDI_ConfirmLater;;2;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x4e1; RMP_CommandNoDescriptorsAvailable;;0xE1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e2; RMP_CommandBufferFull;;0xE2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e3; RMP_CommandChannelOutOfRange;;0xE3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e6; RMP_CommandChannelDeactivated;;0xE6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e7; RMP_CommandPortOutOfRange;;0xE7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e8; RMP_CommandPortInUse;;0xE8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4e9; RMP_CommandNoChannel;;0xE9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4ea; RMP_NoHwCrc;;0xEA;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4d0; RMP_ReplyNoReply;;0xD0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4d1; RMP_ReplyNotSent;;0xD1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4d2; RMP_ReplyNotYetSent;;0xD2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4d3; RMP_ReplyMissmatch;;0xD3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4d4; RMP_ReplyTimeout;;0xD4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4c0; RMP_ReplyInterfaceBusy;;0xC0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4c1; RMP_ReplyTransmissionError;;0xC1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4c2; RMP_ReplyInvalidData;;0xC2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4c3; RMP_ReplyNotSupported;;0xC3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f0; RMP_LinkDown;;0xF0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f1; RMP_SpwCredit;;0xF1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f2; RMP_SpwEscape;;0xF2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f3; RMP_SpwDisconnect;;0xF3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f4; RMP_SpwParity;;0xF4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f5; RMP_SpwWriteSync;;0xF5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f6; RMP_SpwInvalidAddress;;0xF6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f7; RMP_SpwEarlyEop;;0xF7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f8; RMP_SpwDma;;0xF8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x4f9; RMP_SpwLinkError;;0xF9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x400; RMP_ReplyOk;;0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x401; RMP_ReplyGeneralErrorCode;;1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x402; RMP_ReplyUnusedPacketTypeOrCommandCode;;2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x403; RMP_ReplyInvalidKey;;3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x404; RMP_ReplyInvalidDataCrc;;4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x405; RMP_ReplyEarlyEop;;5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x406; RMP_ReplyTooMuchData;;6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x407; RMP_ReplyEep;;7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x408; RMP_ReplyReserved;;8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x409; RMP_ReplyVerifyBufferOverrun;;9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x40a; RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x40b; RMP_ReplyRmwDataLengthError;;11;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x40c; RMP_ReplyInvalidTargetLogicalAddress;;12;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL -0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf0; CCS_NsPositiveW;;0xF0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf1; CCS_NsNegativeW;;0xF1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf2; CCS_NsLockout;;0xF2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf3; CCS_FarmInLockout;;0xF3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf4; CCS_FarmInWait;;0xF4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be0; CCS_WrongSymbol;;0xE0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be1; CCS_DoubleStart;;0xE1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be3; CCS_EndWithoutStart;;0xE3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be4; CCS_TooLarge;;0xE4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be5; CCS_TooShort;;0xE5;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be6; CCS_WrongTfVersion;;0xE6;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be8; CCS_NoValidFrameType;;0xE8;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be9; CCS_CrcFailed;;0xE9;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bea; CCS_VcNotFound;;0xEA;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2beb; CCS_ForwardingFailed;;0xEB;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bec; CCS_ContentTooLarge;;0xEC;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bed; CCS_ResidualData;;0xED;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bee; CCS_DataCorrupted;;0xEE;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x37a1; SGP4_InvalidEccentricity;;0xA1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a2; SGP4_InvalidMeanMotion;;0xA2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a3; SGP4_InvalidPerturbationElements;;0xA3;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a4; SGP4_InvalidSemiLatusRectum;;0xA4;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a5; SGP4_InvalidEpochElements;;0xA5;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a6; SGP4_SatelliteHasDecayed;;0xA6;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37b1; SGP4_TleTooOld;;0xB1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37b2; SGP4_TleNotInitialized;;0xB2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x13e0; MH_UnknownCmd;;0xE0;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER -0x13e1; MH_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER -0x13e2; MH_InvalidSize;;0xE2;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER -0x13e3; MH_StateMismatch;;0xE3;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER -0x4100; FILS_GenericFileError;;0;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4101; FILS_IsBusy;;1;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4102; FILS_InvalidParameters;;2;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4105; FILS_FileDoesNotExist;;5;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4106; FILS_FileAlreadyExists;;6;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4107; FILS_FileLocked;;7;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x410a; FILS_DirectoryDoesNotExist;;10;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x410b; FILS_DirectoryAlreadyExists;;11;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x410c; FILS_DirectoryNotEmpty;;12;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x410f; FILS_SequencePacketMissingWrite;;15;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x4110; FILS_SequencePacketMissingRead;;16;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM -0x601; PP_DoItMyself;;1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x602; PP_PointsToVariable;;2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x603; PP_PointsToMemory;;3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x604; PP_ActivityCompleted;;4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x605; PP_PointsToVectorUint8;;5;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x606; PP_PointsToVectorUint16;;6;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x607; PP_PointsToVectorUint32;;7;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x608; PP_PointsToVectorFloat;;8;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6a0; PP_DumpNotSupported;;0xA0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6e0; PP_InvalidSize;;0xE0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6e1; PP_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6e2; PP_InvalidContent;;0xE2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6e3; PP_UnalignedAccess;;0xE3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x6e4; PP_WriteProtected;;0xE4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF -0x201; OM_InsertionFailed;;1;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF -0x202; OM_NotFound;;2;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF -0x203; OM_ChildInitFailed;;3;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF -0x204; OM_InternalErrReporterUninit;;4;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF -0x501; PS_SwitchOn;;1;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF -0x500; PS_SwitchOff;;0;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF -0x502; PS_SwitchTimeout;;2;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF -0x503; PS_FuseOn;;3;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF -0x504; PS_FuseOff;;4;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF -0x2f01; POS_InPowerTransition;;1;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER -0x2f02; POS_SwitchStateMismatch;;2;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER -0x1000; TIM_UnsupportedTimeFormat;;0;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1002; TIM_LengthMismatch;;2;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1003; TIM_InvalidTimeFormat;;3;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1004; TIM_InvalidDayOfYear;;4;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x3601; TSI_BadTimestamp;;1;fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF -0x2101; TMF_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2102; TMF_LastPacketFound;;2;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2103; TMF_StopFetch;;3;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2104; TMF_Timeout;;4;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2105; TMF_TmChannelFull;;5;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2106; TMF_NotStored;;6;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2107; TMF_AllDeleted;;7;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2108; TMF_InvalidData;;8;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2109; TMF_NotReady;;9;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2001; TMB_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2002; TMB_Full;;2;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2003; TMB_Empty;;3;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2004; TMB_NullRequested;;4;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2005; TMB_TooLarge;;5;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2006; TMB_NotReady;;6;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2007; TMB_DumpError;;7;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2008; TMB_CrcError;;8;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2009; TMB_Timeout;;9;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200a; TMB_IdlePacketFound;;10;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200b; TMB_TelecommandFound;;11;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200c; TMB_NoPusATm;;12;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200d; TMB_TooSmall;;13;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200e; TMB_BlockNotFound;;14;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200f; TMB_InvalidRequest;;15;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0xe01; HM_InvalidMode;;0x01;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF -0xe02; HM_TransNotAllowed;;0x02;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF -0xe03; HM_InTransition;;0x03;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF -0xe04; HM_InvalidSubmode;;0x04;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF -0x1501; FM_KeyAlreadyExists;;0x01;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP -0x1502; FM_MapFull;;0x02;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP -0x1503; FM_KeyDoesNotExist;;0x03;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP -0x1101; AL_Full;;0x01;fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST -0x1601; FMM_MapFull;;0x01;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP -0x1602; FMM_KeyDoesNotExist;;0x02;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP -0x1801; FF_Full;;1;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS -0x1802; FF_Empty;;2;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS -0x3a0; DHB_InvalidChannel;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b0; DHB_AperiodicReply;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b1; DHB_IgnoreReplyData;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b2; DHB_IgnoreFullPacket;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3c0; DHB_NothingToSend;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3c2; DHB_CommandMapError;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3d0; DHB_NoSwitch;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3e0; DHB_ChildTimeout;;0xE0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3e1; DHB_SwitchFailed;;0xE1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x1201; AB_NeedSecondStep;;0x01;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x1202; AB_NeedToReconfigure;;0x02;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x1203; AB_ModeFallback;;0x03;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x1204; AB_ChildNotCommandable;;0x04;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x1205; AB_NeedToChangeHealth;;0x05;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE -0x26a0; DHI_NoCommandData;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a1; DHI_CommandNotSupported;;0xA1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a2; DHI_CommandAlreadySent;;0xA2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a3; DHI_CommandWasNotSent;;0xA3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a4; DHI_CantSwitchAddress;;0xA4;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a5; DHI_WrongModeForCommand;;0xA5;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a6; DHI_Timeout;;0xA6;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a7; DHI_Busy;;0xA7;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a8; DHI_NoReplyExpected;;0xA8;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a9; DHI_NonOpTemperature;;0xA9;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26aa; DHI_CommandNotImplemented;;0xAA;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b0; DHI_ChecksumError;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b1; DHI_LengthMissmatch;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b2; DHI_InvalidData;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b3; DHI_ProtocolError;;0xB3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c0; DHI_DeviceDidNotExecute;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c1; DHI_DeviceReportedError;;0xC1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c2; DHI_UnknownDeviceReply;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c3; DHI_DeviceReplyInvalid;;0xC3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26d0; DHI_InvalidCommandParameter;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26d1; DHI_InvalidNumberOrLengthOfParameters;;0xD1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x3301; DC_NoReplyReceived;;0x01;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3302; DC_ProtocolError;;0x02;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3303; DC_Nullpointer;;0x03;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3304; DC_InvalidCookieType;;0x04;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3305; DC_NotActive;;0x05;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3306; DC_TooMuchData;;0x06;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x2401; EV_ListenerNotFound;;1;fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF -0x1a01; TRC_NotEnoughSensors;;1;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a02; TRC_LowestValueOol;;2;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a03; TRC_HighestValueOol;;3;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a04; TRC_BothValuesOol;;4;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a05; TRC_DuplexOol;;5;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x3001; LIM_Unchecked;;1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3002; LIM_Invalid;;2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3003; LIM_Unselected;;3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3004; LIM_BelowLowLimit;;4;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3005; LIM_AboveHighLimit;;5;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3006; LIM_UnexpectedValue;;6;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3007; LIM_OutOfRange;;7;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30a0; LIM_FirstSample;;0xA0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30e0; LIM_InvalidSize;;0xE0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30e1; LIM_WrongType;;0xE1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30e2; LIM_WrongPid;;0xE2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30e3; LIM_WrongLimitId;;0xE3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x30ee; LIM_MonitorNotFound;;0xEE;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF -0x3a01; SPH_SemaphoreTimeout;;1;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF -0x3a02; SPH_SemaphoreNotOwned;;2;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF -0x3a03; SPH_SemaphoreInvalid;;3;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF -0x7000; SDMA_OpOngoing;;0;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x7001; SDMA_AlreadyOn;;1;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x7002; SDMA_AlreadyMounted;;2;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x7003; SDMA_AlreadyOff;;3;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700a; SDMA_StatusFileNexists;;10;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700c; SDMA_MountError;;12;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700d; SDMA_UnmountError;;13;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700e; SDMA_SystemCallError;;14;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x700f; SDMA_PopenCallError;;15;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER -0x7100; SCBU_KeyNotFound;;0;bsp_q7s/memory/scratchApi.h;SCRATCH_BUFFER -0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER -0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER -0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocMPSoCHelper.h;PLOC_MPSOC_HELPER -0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER -0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER -0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER -0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER -0x59a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a3;PLSV_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a4;PLSV_GetTimeFailure;Failed to read current system time;0xA4;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a5;PLSV_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a6;PLSV_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a7;PLSV_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a8;PLSV_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a9;PLSV_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59aa;PLSV_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ab;PLSV_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);0xAB;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ac;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ad;PLSV_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ae;PLSV_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59d0;PLSV_NameTooLong;Received command has file string with invalid length;0xD0;linux/devices/ploc/PlocMPSoCHandler.h;PLOC_SUPERVISOR_HANDLER -0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a6;STRH_ActionFailed;Status of reply to action command signals error;0xA6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;0xA7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a8;STRH_FilenameTooLong;Name of file received with command is too long;0xA8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56a9;STRH_InvalidProgram;Received version reply with invalid program ID;0xA9;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56aa;STRH_ReplyError;Status field reply signals error;0xAA;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);0xAB;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);0xAC;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56ad;STRH_RegionMismatch;Region mismatch between send and received data;0xAD;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56ae;STRH_AddressMismatch;Address mismatch between send and received data;0xAE;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56af;STRH_LengthMismatch;Length field mismatch between send and received data;0xAF;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b0;STRH_FileNotExists;Specified file does not exist;0xB0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b1;STRH_InvalidType;Download blob pixel command has invalid type field;0xB1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b2;STRH_InvalidId;Received FPGA action command with invalid ID;0xB2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b3;STRH_ReplyTooShort;Received reply is too short;0xB3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b4;STRH_CrcFailure;Received reply with invalid CRC;0xB4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;0xB5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x56b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER -0x5ea0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ea8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux/devices/startracker/StrHelper.h;STR_HELPER -0x5ba0;IPCI_PapbBusy;;0xA0;linux/obc/PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE -0x5ca0;PTME_UnknownVcId;;0xA0;linux/obc/Ptme.h;PTME -0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux/obc/PtmeConfig.h;RATE_SETTER -0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux/obc/PtmeConfig.h;RATE_SETTER -0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux/obc/PtmeConfig.h;RATE_SETTER -0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux/obc/PtmeConfig.h;RATE_SETTER -0x61a0;PDEC_AbandonedCltu;;0xA0;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a1;PDEC_FrameDirty;;0xA1;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a3;PDEC_AdDiscardedLockout;;0xA3;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a4;PDEC_AdDiscardedWait;;0xA4;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a5;PDEC_AdDiscardedNsVs;;0xA5;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61b0;PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a6;PDEC_NoReport;;0xA6;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a7;PDEC_ErrorVersionNumber;;0xA7;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a8;PDEC_IllegalCombination;;0xA8;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61a9;PDEC_InvalidScId;;0xA9;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61aa;PDEC_InvalidVcIdMsb;;0xAA;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61ab;PDEC_InvalidVcIdLsb;;0xAB;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61ac;PDEC_NsNotZero;;0xAC;linux/obc/PdecHandler.h;PDEC_HANDLER -0x61ae;PDEC_InvalidBcCc;;0xAE;linux/obc/PdecHandler.h;PDEC_HANDLER +0x6000;GOMS_PacketTooLong;;0;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x6001;GOMS_InvalidTableId;;1;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x6002;GOMS_InvalidAddress;;2;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x6003;GOMS_InvalidParamSize;;3;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x6004;GOMS_InvalidPayloadSize;;4;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x6005;GOMS_UnknownReplyId;;5;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x52a1;HEATER_CommandNotSupported;;0xA1;mission\devices\HeaterHandler.h;HEATER_HANDLER +0x52a2;HEATER_InitFailed;;0xA2;mission\devices\HeaterHandler.h;HEATER_HANDLER +0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission\devices\HeaterHandler.h;HEATER_HANDLER +0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission\devices\HeaterHandler.h;HEATER_HANDLER +0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission\devices\HeaterHandler.h;HEATER_HANDLER +0x54a0;IMTQ_InvalidCommandCode;;0xA0;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a1;IMTQ_ParameterMissing;;0xA1;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a2;IMTQ_ParameterInvalid;;0xA2;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a3;IMTQ_CcUnavailable;;0xA3;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a4;IMTQ_InternalProcessingError;;0xA4;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a5;IMTQ_RejectedWithoutReason;;0xA5;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a6;IMTQ_CmdErrUnknown;;0xA6;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x54a7;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.;0xA7;mission\devices\IMTQHandler.h;IMTQ_HANDLER +0x55b0;RWHA_SpiWriteFailure;;0xB0;mission\devices\RwHandler.h;RW_HANDLER +0x55b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission\devices\RwHandler.h;RW_HANDLER +0x55b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;mission\devices\RwHandler.h;RW_HANDLER +0x55b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;mission\devices\RwHandler.h;RW_HANDLER +0x55b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;mission\devices\RwHandler.h;RW_HANDLER +0x55b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;mission\devices\RwHandler.h;RW_HANDLER +0x55b6;RWHA_NoStartMarker;Expected a start marker as first byte;0xB6;mission\devices\RwHandler.h;RW_HANDLER +0x55a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;mission\devices\RwHandler.h;RW_HANDLER +0x55a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;mission\devices\RwHandler.h;RW_HANDLER +0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission\devices\RwHandler.h;RW_HANDLER +0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission\devices\RwHandler.h;RW_HANDLER +0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission\devices\RwHandler.h;RW_HANDLER +0x69a0;SADPL_CommandNotSupported;;0xA0;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x69a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x69a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x69a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x69a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x5ba0;SUSS_ErrorUnlockMutex;;0xA0;mission\devices\SusHandler.h;SUS_HANDLER +0x5ba1;SUSS_ErrorLockMutex;;0xA1;mission\devices\SusHandler.h;SUS_HANDLER +0x53a0;SYRLINKS_CrcFailure;;0xA0;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a3;SYRLINKS_BadParameterValueAck;;0xA3;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a4;SYRLINKS_BadEndOfFrameAck;;0xA4;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a5;SYRLINKS_UnknownCommandIdAck;;0xA5;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x66a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission\memory\NVMParameterBase.h;NVM_PARAM_BASE +0x63a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission\tmtc\CCSDSHandler.h;CCSDS_HANDLER +0x4601; HGIO_UnknownGpioId;;1;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO +0x4602; HGIO_DriveGpioFailure;;2;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO +0x4603; HGIO_GpioTypeFailure;;3;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO +0x4604; HGIO_GpioInvalidInstance;;4;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO +0x4605; HGIO_GpioDuplicateDetected;;5;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO +0x4300; HSPI_HalTimeoutRetval;;0;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI +0x4301; HSPI_HalBusyRetval;;1;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI +0x4302; HSPI_HalErrorRetval;;2;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI +0x4401; HURT_UartReadFailure;;1;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART +0x4402; HURT_UartReadSizeMissmatch;;2;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART +0x4403; HURT_UartRxBufferTooSmall;;3;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART +0x4200; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x4201; 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;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x4202; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x4203; UXOS_CommandError;Command execution failed;3;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x4204; UXOS_NoCommandLoadedOrPending;;4;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x4206; UXOS_PcloseCallError;;6;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL +0x3101; CF_ObjectHasNoFunctions;;1;fsfw\src\fsfw\action\CommandsActionsIF.h;COMMANDS_ACTIONS_IF +0x3102; CF_AlreadyCommanding;;2;fsfw\src\fsfw\action\CommandsActionsIF.h;COMMANDS_ACTIONS_IF +0x3201; HF_IsBusy;;1;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF +0x3202; HF_InvalidParameters;;2;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF +0x3203; HF_ExecutionFinished;;3;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF +0x3204; HF_InvalidActionId;;4;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF +0x3501; CFDP_InvalidTlvType;;1;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3502; CFDP_InvalidDirectiveFields;;2;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3505; CFDP_MetadataCantParseOptions;;5;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw\src\fsfw\cfdp\definitions.h;CFDP +0x1101; AL_Full;;0x01;fsfw\src\fsfw\container\ArrayList.h;ARRAY_LIST +0x1801; FF_Full;;1;fsfw\src\fsfw\container\FIFOBase.h;FIFO_CLASS +0x1802; FF_Empty;;2;fsfw\src\fsfw\container\FIFOBase.h;FIFO_CLASS +0x1501; FM_KeyAlreadyExists;;0x01;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP +0x1502; FM_MapFull;;0x02;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP +0x1503; FM_KeyDoesNotExist;;0x03;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP +0x1601; FMM_MapFull;;0x01;fsfw\src\fsfw\container\FixedOrderedMultimap.h;FIXED_MULTIMAP +0x1602; FMM_KeyDoesNotExist;;0x02;fsfw\src\fsfw\container\FixedOrderedMultimap.h;FIXED_MULTIMAP +0x37a1; SGP4_InvalidEccentricity;;0xA1;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a2; SGP4_InvalidMeanMotion;;0xA2;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a3; SGP4_InvalidPerturbationElements;;0xA3;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a4; SGP4_InvalidSemiLatusRectum;;0xA4;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a5; SGP4_InvalidEpochElements;;0xA5;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a6; SGP4_SatelliteHasDecayed;;0xA6;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37b1; SGP4_TleTooOld;;0xB1;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37b2; SGP4_TleNotInitialized;;0xB2;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf0; CCS_NsPositiveW;;0xF0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf1; CCS_NsNegativeW;;0xF1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf2; CCS_NsLockout;;0xF2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf3; CCS_FarmInLockout;;0xF3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf4; CCS_FarmInWait;;0xF4;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be0; CCS_WrongSymbol;;0xE0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be1; CCS_DoubleStart;;0xE1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be3; CCS_EndWithoutStart;;0xE3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be4; CCS_TooLarge;;0xE4;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be5; CCS_TooShort;;0xE5;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be6; CCS_WrongTfVersion;;0xE6;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be8; CCS_NoValidFrameType;;0xE8;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be9; CCS_CrcFailed;;0xE9;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bea; CCS_VcNotFound;;0xEA;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2beb; CCS_ForwardingFailed;;0xEB;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bec; CCS_ContentTooLarge;;0xEC;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bed; CCS_ResidualData;;0xED;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bee; CCS_DataCorrupted;;0xEE;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x801; DPS_InvalidParameterDefinition;;1;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x802; DPS_SetWasAlreadyRead;;2;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x803; DPS_CommitingWithoutReading;;3;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x804; DPS_DataSetUninitialised;;4;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x805; DPS_DataSetFull;;5;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x806; DPS_PoolVarNull;;6;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS +0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw\src\fsfw\datapool\PoolVariableIF.h;POOL_VARIABLE_IF +0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw\src\fsfw\datapool\PoolVariableIF.h;POOL_VARIABLE_IF +0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d01; HKM_WrongHkPacketType;;1;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d04; HKM_PoolobjectNotFound;;4;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d05; HKM_DatasetNotFound;;5;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw\src\fsfw\datapoollocal\localPoolDefinitions.h;LOCAL_POOL_OWNER_IF +0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw\src\fsfw\datapoollocal\localPoolDefinitions.h;LOCAL_POOL_OWNER_IF +0x1201; AB_NeedSecondStep;;0x01;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x1202; AB_NeedToReconfigure;;0x02;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x1203; AB_ModeFallback;;0x03;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x1204; AB_ChildNotCommandable;;0x04;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x1205; AB_NeedToChangeHealth;;0x05;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE +0x3301; DC_NoReplyReceived;;0x01;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3302; DC_ProtocolError;;0x02;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3303; DC_Nullpointer;;0x03;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3304; DC_InvalidCookieType;;0x04;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3305; DC_NotActive;;0x05;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3306; DC_TooMuchData;;0x06;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3a0; DHB_InvalidChannel;;0xA0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b0; DHB_AperiodicReply;;0xB0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b1; DHB_IgnoreReplyData;;0xB1;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b2; DHB_IgnoreFullPacket;;0xB2;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3c0; DHB_NothingToSend;;0xC0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3c2; DHB_CommandMapError;;0xC2;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3d0; DHB_NoSwitch;;0xD0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3e0; DHB_ChildTimeout;;0xE0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3e1; DHB_SwitchFailed;;0xE1;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x26a0; DHI_NoCommandData;;0xA0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a1; DHI_CommandNotSupported;;0xA1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a2; DHI_CommandAlreadySent;;0xA2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a3; DHI_CommandWasNotSent;;0xA3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a4; DHI_CantSwitchAddress;;0xA4;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a5; DHI_WrongModeForCommand;;0xA5;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a6; DHI_Timeout;;0xA6;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a7; DHI_Busy;;0xA7;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a8; DHI_NoReplyExpected;;0xA8;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a9; DHI_NonOpTemperature;;0xA9;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26aa; DHI_CommandNotImplemented;;0xAA;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b0; DHI_ChecksumError;;0xB0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b1; DHI_LengthMissmatch;;0xB1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b2; DHI_InvalidData;;0xB2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b3; DHI_ProtocolError;;0xB3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c0; DHI_DeviceDidNotExecute;;0xC0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c1; DHI_DeviceReportedError;;0xC1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c2; DHI_UnknownDeviceReply;;0xC2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c3; DHI_DeviceReplyInvalid;;0xC3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26d0; DHI_InvalidCommandParameter;;0xD0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26d1; DHI_InvalidNumberOrLengthOfParameters;;0xD1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x2401; EV_ListenerNotFound;;1;fsfw\src\fsfw\events\EventManagerIF.h;EVENT_MANAGER_IF +0x2500; FDI_YourFault;;0;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x2501; FDI_MyFault;;1;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x2502; FDI_ConfirmLater;;2;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x2301; MT_TooDetailedRequest;;1;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS +0x2302; MT_TooGeneralRequest;;2;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS +0x2303; MT_NoMatch;;3;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS +0x2304; MT_Full;;4;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS +0x2305; MT_NewNodeCreated;;5;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS +0x2e01; ASC_TooLongForTargetType;;1;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER +0x2e02; ASC_InvalidCharacters;;2;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER +0x2e03; ASC_BufferTooSmall;;0x3;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER +0x3e01; DLEE_StreamTooShort;;0x01;fsfw\src\fsfw\globalfunctions\DleEncoder.h;DLE_ENCODER +0x3e02; DLEE_DecodingError;;0x02;fsfw\src\fsfw\globalfunctions\DleEncoder.h;DLE_ENCODER +0x1701; HHI_ObjectNotHealthy;;1;fsfw\src\fsfw\health\HasHealthIF.h;HAS_HEALTH_IF +0x1702; HHI_InvalidHealthState;;2;fsfw\src\fsfw\health\HasHealthIF.h;HAS_HEALTH_IF +0xf01; CM_UnknownCommand;;1;fsfw\src\fsfw\ipc\CommandMessageIF.h;COMMAND_MESSAGE +0x3901; MQI_Empty;;1;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3902; MQI_Full;No space left for more messages;2;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3801; MUX_NotEnoughResources;;1;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3802; MUX_InsufficientMemory;;2;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3803; MUX_NoPrivilege;;3;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3804; MUX_WrongAttributeSetting;;4;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3805; MUX_MutexAlreadyLocked;;5;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3806; MUX_MutexNotFound;;6;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3807; MUX_MutexMaxLocks;;7;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x380a; MUX_MutexTimeout;;10;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x380b; MUX_MutexInvalidId;;11;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF +0x4100; FILS_GenericFileError;;0;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4101; FILS_IsBusy;;1;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4102; FILS_InvalidParameters;;2;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4105; FILS_FileDoesNotExist;;5;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4106; FILS_FileAlreadyExists;;6;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4107; FILS_FileLocked;;7;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x410a; FILS_DirectoryDoesNotExist;;10;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x410b; FILS_DirectoryAlreadyExists;;11;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x410c; FILS_DirectoryNotEmpty;;12;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x410f; FILS_SequencePacketMissingWrite;;15;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x4110; FILS_SequencePacketMissingRead;;16;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM +0x601; PP_DoItMyself;;1;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x602; PP_PointsToVariable;;2;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x603; PP_PointsToMemory;;3;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x604; PP_ActivityCompleted;;4;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x605; PP_PointsToVectorUint8;;5;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x606; PP_PointsToVectorUint16;;6;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x607; PP_PointsToVectorUint32;;7;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x608; PP_PointsToVectorFloat;;8;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6a0; PP_DumpNotSupported;;0xA0;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6e0; PP_InvalidSize;;0xE0;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6e1; PP_InvalidAddress;;0xE1;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6e2; PP_InvalidContent;;0xE2;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6e3; PP_UnalignedAccess;;0xE3;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x6e4; PP_WriteProtected;;0xE4;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF +0x13e0; MH_UnknownCmd;;0xE0;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER +0x13e1; MH_InvalidAddress;;0xE1;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER +0x13e2; MH_InvalidSize;;0xE2;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER +0x13e3; MH_StateMismatch;;0xE3;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER +0xe01; HM_InvalidMode;;0x01;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF +0xe02; HM_TransNotAllowed;;0x02;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF +0xe03; HM_InTransition;;0x03;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF +0xe04; HM_InvalidSubmode;;0x04;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF +0x3001; LIM_Unchecked;;1;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3002; LIM_Invalid;;2;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3003; LIM_Unselected;;3;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3004; LIM_BelowLowLimit;;4;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3005; LIM_AboveHighLimit;;5;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3006; LIM_UnexpectedValue;;6;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x3007; LIM_OutOfRange;;7;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30a0; LIM_FirstSample;;0xA0;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30e0; LIM_InvalidSize;;0xE0;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30e1; LIM_WrongType;;0xE1;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30e2; LIM_WrongPid;;0xE2;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30e3; LIM_WrongLimitId;;0xE3;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x30ee; LIM_MonitorNotFound;;0xEE;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF +0x1a01; TRC_NotEnoughSensors;;1;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a02; TRC_LowestValueOol;;2;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a03; TRC_HighestValueOol;;3;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a04; TRC_BothValuesOol;;4;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a05; TRC_DuplexOol;;5;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x201; OM_InsertionFailed;;1;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF +0x202; OM_NotFound;;2;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF +0x203; OM_ChildInitFailed;;3;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF +0x204; OM_InternalErrReporterUninit;;4;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF +0x200; OM_ConnBroken;;0;fsfw\src\fsfw\osal\common\TcpTmTcServer.h;OBJECT_MANAGER_IF +0x2901; IEC_NoConfigurationTable;;0x01;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2902; IEC_NoCpuTable;;0x02;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2903; IEC_InvalidWorkspaceAddress;;0x03;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2904; IEC_TooLittleWorkspace;;0x04;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2905; IEC_WorkspaceAllocation;;0x05;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2906; IEC_InterruptStackTooSmall;;0x06;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2907; IEC_ThreadExitted;;0x07;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2908; IEC_InconsistentMpInformation;;0x08;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2909; IEC_InvalidNode;;0x09;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290a; IEC_NoMpci;;0x0a;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290b; IEC_BadPacket;;0x0b;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290c; IEC_OutOfPackets;;0x0c;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290d; IEC_OutOfGlobalObjects;;0x0d;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290e; IEC_OutOfProxies;;0x0e;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290f; IEC_InvalidGlobalId;;0x0f;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2910; IEC_BadStackHook;;0x10;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2911; IEC_BadAttributes;;0x11;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2912; IEC_ImplementationKeyCreateInconsistency;;0x12;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2913; IEC_ImplementationBlockingOperationCancel;;0x13;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2914; IEC_MutexObtainFromBadState;;0x14;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2915; IEC_UnlimitedAndMaximumIs0;;0x15;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF +0x2d02; HPA_InvalidDomainId;;0x02;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF +0x2d03; HPA_InvalidValue;;0x03;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF +0x2d05; HPA_ReadOnly;;0x05;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF +0x2c01; PAW_UnknownDatatype;;0x01;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c03; PAW_Readonly;;0x03;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c04; PAW_TooBig;;0x04;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c05; PAW_SourceNotSet;;0x05;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c06; PAW_OutOfBounds;;0x06;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c07; PAW_NotSet;;0x07;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER +0x2f01; POS_InPowerTransition;;1;fsfw\src\fsfw\power\PowerSwitcher.h;POWER_SWITCHER +0x2f02; POS_SwitchStateMismatch;;2;fsfw\src\fsfw\power\PowerSwitcher.h;POWER_SWITCHER +0x501; PS_SwitchOn;;1;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF +0x500; PS_SwitchOff;;0;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF +0x502; PS_SwitchTimeout;;2;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF +0x503; PS_FuseOn;;3;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF +0x504; PS_FuseOff;;4;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF +0x4e1; RMP_CommandNoDescriptorsAvailable;;0xE1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e2; RMP_CommandBufferFull;;0xE2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e3; RMP_CommandChannelOutOfRange;;0xE3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e6; RMP_CommandChannelDeactivated;;0xE6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e7; RMP_CommandPortOutOfRange;;0xE7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e8; RMP_CommandPortInUse;;0xE8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4e9; RMP_CommandNoChannel;;0xE9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4ea; RMP_NoHwCrc;;0xEA;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4d0; RMP_ReplyNoReply;;0xD0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4d1; RMP_ReplyNotSent;;0xD1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4d2; RMP_ReplyNotYetSent;;0xD2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4d3; RMP_ReplyMissmatch;;0xD3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4d4; RMP_ReplyTimeout;;0xD4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4c0; RMP_ReplyInterfaceBusy;;0xC0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4c1; RMP_ReplyTransmissionError;;0xC1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4c2; RMP_ReplyInvalidData;;0xC2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4c3; RMP_ReplyNotSupported;;0xC3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f0; RMP_LinkDown;;0xF0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f1; RMP_SpwCredit;;0xF1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f2; RMP_SpwEscape;;0xF2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f3; RMP_SpwDisconnect;;0xF3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f4; RMP_SpwParity;;0xF4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f5; RMP_SpwWriteSync;;0xF5;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f6; RMP_SpwInvalidAddress;;0xF6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f7; RMP_SpwEarlyEop;;0xF7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f8; RMP_SpwDma;;0xF8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x4f9; RMP_SpwLinkError;;0xF9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x400; RMP_ReplyOk;;0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x401; RMP_ReplyGeneralErrorCode;;1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x402; RMP_ReplyUnusedPacketTypeOrCommandCode;;2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x403; RMP_ReplyInvalidKey;;3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x404; RMP_ReplyInvalidDataCrc;;4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x405; RMP_ReplyEarlyEop;;5;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x406; RMP_ReplyTooMuchData;;6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x407; RMP_ReplyEep;;7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x408; RMP_ReplyReserved;;8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x409; RMP_ReplyVerifyBufferOverrun;;9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x40a; RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x40b; RMP_ReplyRmwDataLengthError;;11;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x40c; RMP_ReplyInvalidTargetLogicalAddress;;12;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL +0x1401; SE_BufferTooShort;;1;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF +0x1402; SE_StreamTooShort;;2;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF +0x1403; SE_TooManyElements;;3;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF +0x2701; SM_DataTooLarge;;1;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0x2702; SM_DataStorageFull;;2;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0x2703; SM_IllegalStorageId;;3;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0x2704; SM_DataDoesNotExist;;4;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0x2705; SM_IllegalAddress;;5;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0x2706; SM_PoolTooLarge;;6;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF +0xc02; MS_InvalidEntry;;0x02;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF +0xc03; MS_TooManyElements;;0x03;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF +0xc04; MS_CantStoreEmpty;;0x04;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF +0xd01; SS_SequenceAlreadyExists;;0x01;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd02; SS_TableAlreadyExists;;0x02;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd03; SS_TableDoesNotExist;;0x03;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd05; SS_SequenceDoesNotExist;;0x05;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd08; SS_NoTargetTable;;0x08;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd0b; SS_IsFallbackSequence;;0x0B;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd0c; SS_AccessDenied;;0x0C;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xd0e; SS_TableInUse;;0x0E;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xda1; SS_TargetTableNotReached;;0xA1;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xda2; SS_TableCheckFailed;;0xA2;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM +0xb01; SB_ChildNotFound;;0x01;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE +0xb02; SB_ChildInfoUpdated;;0x02;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE +0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE +0xb04; SB_CouldNotInsertChild;;0x04;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE +0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE +0x3a01; SPH_SemaphoreTimeout;;1;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF +0x3a02; SPH_SemaphoreNotOwned;;2;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF +0x3a03; SPH_SemaphoreInvalid;;3;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF +0x1c01; TCD_PacketLost;;1;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION +0x1c02; TCD_DestinationNotFound;;2;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION +0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION +0x1b00; TCC_IllegalApid;;0;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b01; TCC_IncompletePacket;;1;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b02; TCC_IncorrectChecksum;;2;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b03; TCC_IllegalPacketType;;3;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b04; TCC_IllegalPacketSubtype;;4;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK +0x2801; TC_InvalidTargetState;;1;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x1000; TIM_UnsupportedTimeFormat;;0;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1002; TIM_LengthMismatch;;2;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1003; TIM_InvalidTimeFormat;;3;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1004; TIM_InvalidDayOfYear;;4;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x3601; TSI_BadTimestamp;;1;fsfw\src\fsfw\timemanager\TimeStamperIF.h;TIME_STAMPER_IF +0x2001; TMB_Busy;;1;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2002; TMB_Full;;2;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2003; TMB_Empty;;3;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2004; TMB_NullRequested;;4;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2005; TMB_TooLarge;;5;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2006; TMB_NotReady;;6;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2007; TMB_DumpError;;7;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2008; TMB_CrcError;;8;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2009; TMB_Timeout;;9;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200a; TMB_IdlePacketFound;;10;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200b; TMB_TelecommandFound;;11;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200c; TMB_NoPusATm;;12;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200d; TMB_TooSmall;;13;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200e; TMB_BlockNotFound;;14;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200f; TMB_InvalidRequest;;15;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2101; TMF_Busy;;1;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2102; TMF_LastPacketFound;;2;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2103; TMF_StopFetch;;3;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2104; TMF_Timeout;;4;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2105; TMF_TmChannelFull;;5;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2106; TMF_NotStored;;6;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2107; TMF_AllDeleted;;7;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2108; TMF_InvalidData;;8;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2109; TMF_NotReady;;9;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x1d01; PUS_ActivityStarted;;1;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d02; PUS_InvalidSubservice;;2;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d03; PUS_IllegalApplicationData;;3;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d04; PUS_SendTmFailed;;4;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d05; PUS_Timeout;;5;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1f01; CSB_ExecutionComplete;;1;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f02; CSB_NoStepMessage;;2;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f03; CSB_ObjectBusy;;3;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f04; CSB_Busy;;4;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f05; CSB_InvalidTc;;5;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f06; CSB_InvalidObject;;6;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f07; CSB_InvalidReply;;7;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x4a00; SPPA_NoPacketFound;;0x00;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER +0x4a01; SPPA_SplitPacket;;0x01;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER +0x67a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER +0x67a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER +0x7300; SCBU_KeyNotFound;;0;bsp_q7s\memory\scratchApi.h;SCRATCH_BUFFER +0x7200; SDMA_OpOngoing;;0;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x7201; SDMA_AlreadyOn;;1;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x7202; SDMA_AlreadyMounted;;2;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x7203; SDMA_AlreadyOff;;3;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720a; SDMA_StatusFileNexists;;10;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720c; SDMA_MountError;;12;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720d; SDMA_UnmountError;;13;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720e; SDMA_SystemCallError;;14;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x720f; SDMA_PopenCallError;;15;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER +0x6aa0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x6aa9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD +0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD +0x6ba0;SPVRTVIF_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba1;SPVRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba2;SPVRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba3;SPVRTVIF_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba4;SPVRTVIF_GetTimeFailure;Failed to read current system time;0xA4;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba5;SPVRTVIF_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba6;SPVRTVIF_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba7;SPVRTVIF_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba8;SPVRTVIF_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6ba9;SPVRTVIF_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6baa;SPVRTVIF_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bab;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);0xAB;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bac;SPVRTVIF_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bad;SPVRTVIF_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bae;SPVRTVIF_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6baf;SPVRTVIF_InvalidLength;Received action command has invalid length;0xAF;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bb0;SPVRTVIF_FilenameTooLong;Filename too long;0xB0;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bb1;SPVRTVIF_UpdateStatusReportInvalidLength;Received update status report with invalid packet length field;0xB1;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bb2;SPVRTVIF_UpdateCrcFailure;Update status report does not contain expected CRC. There might be a bit flip in the update memory region.;0xB2;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x6bb3;SPVRTVIF_SupvHelperExecuting;Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command);0xB3;linux\devices\devicedefinitions\SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF +0x61a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER +0x61a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER +0x68a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocMPSoCHelper.h;PLOC_MPSOC_HELPER +0x5aa0;PLSPVhLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER +0x5aa1;PLSPVhLP_ProcessTerminated;;0xA1;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER +0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x6501;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x6502;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x6503;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a6;STRH_ActionFailed;Status of reply to action command signals error;0xA6;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;0xA7;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a8;STRH_FilenameTooLong;Name of file received with command is too long;0xA8;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56a9;STRH_InvalidProgram;Received version reply with invalid program ID;0xA9;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56aa;STRH_ReplyError;Status field reply signals error;0xAA;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);0xAB;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);0xAC;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56ad;STRH_RegionMismatch;Region mismatch between send and received data;0xAD;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56ae;STRH_AddressMismatch;Address mismatch between send and received data;0xAE;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56af;STRH_LengthMismatch;Length field mismatch between send and received data;0xAF;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b0;STRH_FileNotExists;Specified file does not exist;0xB0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b1;STRH_InvalidType;Download blob pixel command has invalid type field;0xB1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b2;STRH_InvalidId;Received FPGA action command with invalid ID;0xB2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b3;STRH_ReplyTooShort;Received reply is too short;0xB3;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b4;STRH_CrcFailure;Received reply with invalid CRC;0xB4;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;0xB5;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x56b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER +0x5fa0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5fa8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux\devices\startracker\StrHelper.h;STR_HELPER +0x5ca0;IPCI_PapbBusy;;0xA0;linux\obc\PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE +0x62a0;PDEC_AbandonedCltu;;0xA0;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a1;PDEC_FrameDirty;;0xA1;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a3;PDEC_AdDiscardedLockout;;0xA3;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a4;PDEC_AdDiscardedWait;;0xA4;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a5;PDEC_AdDiscardedNsVs;;0xA5;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62b0;PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a6;PDEC_NoReport;;0xA6;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a7;PDEC_ErrorVersionNumber;;0xA7;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a8;PDEC_IllegalCombination;;0xA8;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62a9;PDEC_InvalidScId;;0xA9;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62aa;PDEC_InvalidVcIdMsb;;0xAA;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62ab;PDEC_InvalidVcIdLsb;;0xAB;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62ac;PDEC_NsNotZero;;0xAC;linux\obc\PdecHandler.h;PDEC_HANDLER +0x62ae;PDEC_InvalidBcCc;;0xAE;linux\obc\PdecHandler.h;PDEC_HANDLER +0x5da0;PTME_UnknownVcId;;0xA0;linux\obc\Ptme.h;PTME +0x64a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux\obc\PtmeConfig.h;RATE_SETTER +0x64a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux\obc\PtmeConfig.h;RATE_SETTER +0x64a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux\obc\PtmeConfig.h;RATE_SETTER +0x64a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux\obc\PtmeConfig.h;RATE_SETTER diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index ece0bf14..0f4e7e7f 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 181 translations. + * @brief Auto-generated event translation file. Contains 177 translations. * @details - * Generated on: 2022-03-28 12:48:26 + * Generated on: 2022-04-10 13:17:48 */ #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"; @@ -117,14 +118,9 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE"; const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE"; const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; +const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; -const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS"; -const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED"; -const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED"; -const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED"; -const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED"; -const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FAILED_STRING = "MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FINISHED_STRING = "MRAM_DUMP_FINISHED"; @@ -149,18 +145,18 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH"; const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS"; const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED"; const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED"; -const char *MPSOC_FLASH_WRITE_FAILED_STRING = "MPSOC_FLASH_WRITE_FAILED"; -const char *MPSOC_FLASH_WRITE_SUCCESSFUL_STRING = "MPSOC_FLASH_WRITE_SUCCESSFUL"; -const char *SENDING_COMMAND_FAILED_STRING = "SENDING_COMMAND_FAILED"; -const char *MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING = "MPSOC_HELPER_REQUESTING_REPLY_FAILED"; -const char *MPSOC_HELPER_READING_REPLY_FAILED_STRING = "MPSOC_HELPER_READING_REPLY_FAILED"; -const char *MISSING_ACK_STRING = "MISSING_ACK"; -const char *MISSING_EXE_STRING = "MISSING_EXE"; -const char *ACK_FAILURE_REPORT_STRING = "ACK_FAILURE_REPORT"; -const char *EXE_FAILURE_REPORT_STRING = "EXE_FAILURE_REPORT"; -const char *ACK_INVALID_APID_STRING = "ACK_INVALID_APID"; -const char *EXE_INVALID_APID_STRING = "EXE_INVALID_APID"; -const char *MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING = "MPSOC_HELPER_SEQ_CNT_MISMATCH"; +const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; +const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; +const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; +const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; +const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; +const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; +const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; +const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; +const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; +const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; +const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; 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"; @@ -379,6 +375,8 @@ const char *translateEvents(Event event) { return MPSOC_HANDLER_CRC_FAILURE_STRING; case (11105): return MPSOC_HANDLER_SEQ_CNT_MISMATCH_STRING; + case (11106): + return MPSOC_SHUTDOWN_FAILED_STRING; case (11201): return SELF_TEST_I2C_FAILURE_STRING; case (11202): @@ -409,22 +407,12 @@ const char *translateEvents(Event event) { return SUPV_EXE_FAILURE_STRING; case (11504): return SUPV_CRC_FAILURE_EVENT_STRING; + case (11505): + return SUPV_HELPER_EXECUTING_STRING; case (11600): return SANITIZATION_FAILED_STRING; case (11601): return MOUNTED_SD_CARD_STRING; - case (11700): - return UPDATE_FILE_NOT_EXISTS_STRING; - case (11701): - return ACTION_COMMANDING_FAILED_STRING; - case (11702): - return UPDATE_AVAILABLE_FAILED_STRING; - case (11703): - return UPDATE_TRANSFER_FAILED_STRING; - case (11704): - return UPDATE_VERIFY_FAILED_STRING; - case (11705): - return UPDATE_FINISHED_STRING; case (11800): return SEND_MRAM_DUMP_FAILED_STRING; case (11801): @@ -474,29 +462,29 @@ const char *translateEvents(Event event) { case (12016): return STR_HELPER_REQUESTING_MSG_FAILED_STRING; case (12100): - return MPSOC_FLASH_WRITE_FAILED_STRING; + return SUPV_UPDATE_FAILED_STRING; case (12101): - return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING; + return SUPV_UPDATE_SUCCESSFUL_STRING; case (12102): - return SENDING_COMMAND_FAILED_STRING; + return TERMINATED_UPDATE_PROCEDURE_STRING; case (12103): - return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING; + return SUPV_SENDING_COMMAND_FAILED_STRING; case (12104): - return MPSOC_HELPER_READING_REPLY_FAILED_STRING; + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12105): - return MISSING_ACK_STRING; + return SUPV_HELPER_READING_REPLY_FAILED_STRING; case (12106): - return MISSING_EXE_STRING; + return SUPV_MISSING_ACK_STRING; case (12107): - return ACK_FAILURE_REPORT_STRING; + return SUPV_MISSING_EXE_STRING; case (12108): - return EXE_FAILURE_REPORT_STRING; + return SUPV_ACK_FAILURE_REPORT_STRING; case (12109): - return ACK_INVALID_APID_STRING; + return SUPV_EXE_FAILURE_REPORT_STRING; case (12110): - return EXE_INVALID_APID_STRING; + return SUPV_ACK_INVALID_APID_STRING; case (12111): - return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING; + return SUPV_EXE_INVALID_APID_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; case (12201): diff --git a/generators/fsfwgen b/generators/fsfwgen index a3ea5dd2..5ad9fb94 160000 --- a/generators/fsfwgen +++ b/generators/fsfwgen @@ -1 +1 @@ -Subproject commit a3ea5dd2e7223c52e4f494e170850609b7b3a572 +Subproject commit 5ad9fb94af3312d29863527106396395f7b808a5 diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index 32799af0..b041aa1d 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -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-10 13:17:55 */ #include "translateObjects.h" diff --git a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h index 9a73a8b4..4b872afb 100644 --- a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h +++ b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h @@ -567,6 +567,9 @@ class TcReplayWriteSeq : public TcBase { } }; +/** + * @brief Helps to extract the fields of the flash write command from the PUS packet. + */ class FlashWritePusCmd : public MPSoCReturnValuesIF { public: FlashWritePusCmd(){}; diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index fd922766..ed5ed19b 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -7,6 +7,7 @@ #include #include #include +#include "linux/devices/devicedefinitions/SupvReturnValuesIF.h" namespace supv { @@ -24,7 +25,6 @@ static const DeviceCommandId_t SET_TIME_REF = 9; static const DeviceCommandId_t DISABLE_PERIOIC_HK_TRANSMISSION = 10; static const DeviceCommandId_t GET_BOOT_STATUS_REPORT = 11; /** Notifies the supervisor that a new update is available for the MPSoC */ -static const DeviceCommandId_t UPDATE_AVAILABLE = 12; static const DeviceCommandId_t WATCHDOGS_ENABLE = 13; static const DeviceCommandId_t WATCHDOGS_CONFIG_TIMEOUT = 14; static const DeviceCommandId_t ENABLE_LATCHUP_ALERT = 15; @@ -51,15 +51,15 @@ static const DeviceCommandId_t READ_GPIO = 35; static const DeviceCommandId_t RESTART_SUPERVISOR = 36; static const DeviceCommandId_t FACTORY_RESET_CLEAR_ALL = 37; static const DeviceCommandId_t REQUEST_LOGGING_DATA = 38; -static const DeviceCommandId_t UPDATE_IMAGE_DATA = 39; static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40; static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41; -static const DeviceCommandId_t UPDATE_VERIFY = 42; static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 43; static const DeviceCommandId_t PREPARE_UPDATE = 44; static const DeviceCommandId_t START_MPSOC_QUIET = 45; static const DeviceCommandId_t SET_SHUTDOWN_TIMEOUT = 46; static const DeviceCommandId_t FACTORY_FLASH = 47; +static const DeviceCommandId_t PERFORM_UPDATE = 48; +static const DeviceCommandId_t TERMINATE_SUPV_HELPER = 49; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -70,7 +70,7 @@ static const DeviceCommandId_t LATCHUP_REPORT = 54; static const uint16_t SIZE_ACK_REPORT = 14; static const uint16_t SIZE_EXE_REPORT = 14; -//static const uint16_t SIZE_HK_REPORT = 52; +// static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_HK_REPORT = 56; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; @@ -108,9 +108,9 @@ static const uint16_t APID_PREPARE_UPDATE = 0xA9; static const uint16_t APID_START_MPSOC_QUIET = 0xAA; static const uint16_t APID_SET_SHUTDOWN_TIMEOUT = 0xAB; static const uint16_t APID_FACTORY_FLASH = 0xAC; -static const uint16_t APID_UPDATE_AVAILABLE = 0xB0; -static const uint16_t APID_UPDATE_IMAGE_DATA = 0xB1; -static const uint16_t APID_UPDATE_VERIFY = 0xB2; +static const uint16_t APID_ERASE_MEMORY = 0xB0; +static const uint16_t APID_WRITE_MEMORY = 0xB1; +static const uint16_t APID_CHECK_MEMORY = 0xB2; static const uint16_t APID_WTD_ENABLE = 0xC0; static const uint16_t APID_WTD_CONFIG_TIMEOUT = 0xC1; static const uint16_t APID_SET_TIME_REF = 0xC2; @@ -221,9 +221,9 @@ static const uint32_t BOOT_REPORT_SET_ID = BOOT_STATUS_REPORT; static const uint32_t LATCHUP_RPT_ID = LATCHUP_REPORT; /** - * @brief With this class a space packet can be created which does not contain any data. + * @brief This class creates a space packet containing only the header data and the CRC. */ -class EmptyPacket : public SpacePacket { +class ApidOnlyPacket : public SpacePacket { public: /** * @brief Constructor @@ -232,7 +232,7 @@ class EmptyPacket : public SpacePacket { * * @note Sequence count of empty packet is always 1. */ - EmptyPacket(uint16_t apid) : SpacePacket(LENGTH_EMPTY_TC - 1, true, apid, 1) { calcCrc(); } + ApidOnlyPacket(uint16_t apid) : SpacePacket(LENGTH_EMPTY_TC - 1, true, apid, 1) { calcCrc(); } private: /** @@ -324,39 +324,39 @@ class SetTimeRef : public SpacePacket { void initPacket(Clock::TimeOfDay_t* time) { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; + uint8_t* dataFieldPtr = this->localData.fields.buffer; uint16_t milliseconds = static_cast(time->usecond / 1000) | SYNC; - SerializeAdapter::serialize(&milliseconds, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&milliseconds, &dataFieldPtr, &serializedSize, sizeof(milliseconds), SerializeIF::Endianness::BIG); uint8_t second = static_cast(time->second); serializedSize = 0; - SerializeAdapter::serialize(&second, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&second, &dataFieldPtr, &serializedSize, sizeof(time->second), SerializeIF::Endianness::BIG); uint8_t minute = static_cast(time->minute); serializedSize = 0; - SerializeAdapter::serialize(&minute, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&minute, &dataFieldPtr, &serializedSize, sizeof(time->minute), SerializeIF::Endianness::BIG); uint8_t hour = static_cast(time->hour); serializedSize = 0; - SerializeAdapter::serialize(&hour, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&hour, &dataFieldPtr, &serializedSize, sizeof(time->hour), SerializeIF::Endianness::BIG); uint8_t day = static_cast(time->day); serializedSize = 0; - SerializeAdapter::serialize(&day, &data_field_ptr, &serializedSize, sizeof(time->day), + SerializeAdapter::serialize(&day, &dataFieldPtr, &serializedSize, sizeof(time->day), SerializeIF::Endianness::BIG); uint8_t month = static_cast(time->month); serializedSize = 0; - SerializeAdapter::serialize(&month, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&month, &dataFieldPtr, &serializedSize, sizeof(time->month), SerializeIF::Endianness::BIG); uint8_t year = static_cast(time->year - 1900); serializedSize = 0; - SerializeAdapter::serialize(&year, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&year, &dataFieldPtr, &serializedSize, sizeof(time->year), SerializeIF::Endianness::BIG); serializedSize = 0; /* Calculate crc */ uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - SerializeAdapter::serialize(&crc, &data_field_ptr, &serializedSize, sizeof(crc), + SerializeAdapter::serialize(&crc, &dataFieldPtr, &serializedSize, sizeof(crc), SerializeIF::Endianness::BIG); } }; @@ -384,15 +384,15 @@ class SetBootTimeout : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&timeout, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, sizeof(timeout), SerializeIF::Endianness::BIG); /* Calculate crc */ uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); /* Add crc to packet data field of space packet */ serializedSize = 0; - SerializeAdapter::serialize(&crc, &data_field_ptr, &serializedSize, sizeof(crc), + SerializeAdapter::serialize(&crc, &dataFieldPtr, &serializedSize, sizeof(crc), SerializeIF::Endianness::BIG); } }; @@ -420,81 +420,17 @@ class SetRestartTries : public SpacePacket { static const uint16_t DATA_FIELD_LENGTH = 3; void initPacket() { - uint8_t* data_field_ptr = this->localData.fields.buffer; - *data_field_ptr = restartTries; + uint8_t* dataFieldPtr = this->localData.fields.buffer; + *dataFieldPtr = restartTries; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); size_t serializedSize = 0; - uint8_t* crcPtr = data_field_ptr + 1; + uint8_t* crcPtr = dataFieldPtr + 1; SerializeAdapter::serialize(&crc, &crcPtr, &serializedSize, sizeof(crc), SerializeIF::Endianness::BIG); } }; -/** - * @brief This class packages the command to notify the supervisor that a new update for the - * MPSoC is available. - */ -class UpdateAvailable : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param imageSelect - * @param imagePartition - * @param imageSize - * @param imageCrc - * @param numberOfPackets - */ - UpdateAvailable(uint8_t imageSelect, uint8_t imagePartition, uint32_t imageSize, - uint32_t imageCrc, uint32_t numberOfPackets) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_UPDATE_AVAILABLE, DEFAULT_SEQUENCE_COUNT), - imageSelect(imageSelect), - imagePartition(imagePartition), - imageSize(imageSize), - imageCrc(imageCrc), - numberOfPackets(numberOfPackets) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 16; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t imageSelect = 0; - uint8_t imagePartition = 0; - uint32_t imageSize = 0; - uint32_t imageCrc = 0; - uint32_t numberOfPackets = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&imageSelect, &data_field_ptr, &serializedSize, - sizeof(imageSelect), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&imagePartition, &data_field_ptr, &serializedSize, - sizeof(imagePartition), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&imageSize, &data_field_ptr, &serializedSize, - sizeof(imageSize), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&imageCrc, &data_field_ptr, &serializedSize, - sizeof(imageCrc), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&numberOfPackets, &data_field_ptr, &serializedSize, - sizeof(numberOfPackets), SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief With this class the space packet can be generated to disable to periodic transmission * of housekeeping data. Normally, this will be disabled by default. However, adding this @@ -516,12 +452,12 @@ class DisablePeriodicHkTransmission : public SpacePacket { static const uint16_t DATA_FIELD_LENGTH = 3; void initPacket() { - uint8_t* data_field_ptr = this->localData.fields.buffer; - *data_field_ptr = disableHk; + uint8_t* dataFieldPtr = this->localData.fields.buffer; + *dataFieldPtr = disableHk; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); size_t serializedSize = 0; - uint8_t* crcPtr = data_field_ptr + 1; + uint8_t* crcPtr = dataFieldPtr + 1; SerializeAdapter::serialize(&crc, &crcPtr, &serializedSize, sizeof(crc), SerializeIF::Endianness::BIG); } @@ -559,14 +495,14 @@ class WatchdogsEnable : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&watchdogPs, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&watchdogPs, &dataFieldPtr, &serializedSize, sizeof(watchdogPs), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&watchdogPl, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&watchdogPl, &dataFieldPtr, &serializedSize, sizeof(watchdogPl), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&watchdogInt, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&watchdogInt, &dataFieldPtr, &serializedSize, sizeof(watchdogInt), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -607,11 +543,11 @@ class WatchdogsConfigTimeout : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&watchdog, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&watchdog, &dataFieldPtr, &serializedSize, sizeof(watchdog), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&timeout, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, sizeof(timeout), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -657,8 +593,8 @@ class LatchupAlert : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, sizeof(latchupId), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -699,11 +635,11 @@ class AutoCalibrateAlert : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, sizeof(latchupId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&mg, &data_field_ptr, &serializedSize, sizeof(mg), + SerializeAdapter::serialize(&mg, &dataFieldPtr, &serializedSize, sizeof(mg), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -741,11 +677,11 @@ class SetAlertlimit : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, sizeof(latchupId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&dutycycle, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&dutycycle, &dataFieldPtr, &serializedSize, sizeof(dutycycle), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -785,14 +721,14 @@ class SetAlertIrqFilter : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, sizeof(latchupId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&tp, &data_field_ptr, &serializedSize, sizeof(tp), + SerializeAdapter::serialize(&tp, &dataFieldPtr, &serializedSize, sizeof(tp), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&div, &data_field_ptr, &serializedSize, sizeof(div), + SerializeAdapter::serialize(&div, &dataFieldPtr, &serializedSize, sizeof(div), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -829,8 +765,8 @@ class SetAdcSweepPeriod : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&sweepPeriod, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&sweepPeriod, &dataFieldPtr, &serializedSize, sizeof(sweepPeriod), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -868,8 +804,8 @@ class SetAdcEnabledChannels : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&ch, &data_field_ptr, &serializedSize, sizeof(ch), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&ch, &dataFieldPtr, &serializedSize, sizeof(ch), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -911,11 +847,11 @@ class SetAdcWindowAndStride : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&windowSize, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&windowSize, &dataFieldPtr, &serializedSize, sizeof(windowSize), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&stridingStepSize, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&stridingStepSize, &dataFieldPtr, &serializedSize, sizeof(stridingStepSize), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -952,8 +888,8 @@ class SetAdcThreshold : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&threshold, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&threshold, &dataFieldPtr, &serializedSize, sizeof(threshold), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -990,8 +926,8 @@ class SelectNvm : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&mem, &data_field_ptr, &serializedSize, sizeof(mem), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&mem, &dataFieldPtr, &serializedSize, sizeof(mem), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1031,11 +967,11 @@ class EnableNvms : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&n01, &data_field_ptr, &serializedSize, sizeof(n01), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&n01, &dataFieldPtr, &serializedSize, sizeof(n01), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&n3, &data_field_ptr, &serializedSize, sizeof(n3), + SerializeAdapter::serialize(&n3, &dataFieldPtr, &serializedSize, sizeof(n3), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1072,8 +1008,8 @@ class RunAutoEmTests : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&test, &data_field_ptr, &serializedSize, sizeof(test), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&test, &dataFieldPtr, &serializedSize, sizeof(test), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1111,8 +1047,8 @@ class PrintCpuStats : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&en, &data_field_ptr, &serializedSize, sizeof(en), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&en, &dataFieldPtr, &serializedSize, sizeof(en), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1150,8 +1086,8 @@ class SetDbgVerbosity : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&vb, &data_field_ptr, &serializedSize, sizeof(vb), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&vb, &dataFieldPtr, &serializedSize, sizeof(vb), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1209,8 +1145,8 @@ class MramCmd : public SpacePacket { concatBuffer[3] = static_cast(stop >> 16); concatBuffer[4] = static_cast(stop >> 8); concatBuffer[5] = static_cast(stop); - uint8_t* data_field_ptr = this->localData.fields.buffer; - std::memcpy(data_field_ptr, concatBuffer, sizeof(concatBuffer)); + uint8_t* dataFieldPtr = this->localData.fields.buffer; + std::memcpy(dataFieldPtr, concatBuffer, sizeof(concatBuffer)); size_t serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); @@ -1253,14 +1189,14 @@ class SetGpio : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&port, &data_field_ptr, &serializedSize, sizeof(port), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&port, &dataFieldPtr, &serializedSize, sizeof(port), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&pin, &data_field_ptr, &serializedSize, sizeof(pin), + SerializeAdapter::serialize(&pin, &dataFieldPtr, &serializedSize, sizeof(pin), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&val, &data_field_ptr, &serializedSize, sizeof(val), + SerializeAdapter::serialize(&val, &dataFieldPtr, &serializedSize, sizeof(val), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1301,11 +1237,11 @@ class ReadGpio : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&port, &data_field_ptr, &serializedSize, sizeof(port), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&port, &dataFieldPtr, &serializedSize, sizeof(port), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&pin, &data_field_ptr, &serializedSize, sizeof(pin), + SerializeAdapter::serialize(&pin, &dataFieldPtr, &serializedSize, sizeof(pin), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -1346,16 +1282,16 @@ class FactoryReset : public SpacePacket { Op op = Op::CLEAR_ALL; void initPacket() { - uint8_t* data_field_ptr = this->localData.fields.buffer; + uint8_t* dataFieldPtr = this->localData.fields.buffer; switch (op) { case Op::MIRROR_ENTRIES: - *data_field_ptr = 1; + *dataFieldPtr = 1; packetLen = 2; crcOffset = 1; break; case Op::CIRCULAR_ENTRIES: - *data_field_ptr = 2; + *dataFieldPtr = 2; packetLen = 2; crcOffset = 1; break; @@ -1374,7 +1310,6 @@ class FactoryReset : public SpacePacket { class SetShutdownTimeout : public SpacePacket { public: - SetShutdownTimeout(uint32_t timeout) : SpacePacket(0, true, APID_SET_SHUTDOWN_TIMEOUT, DEFAULT_SEQUENCE_COUNT), timeout(timeout) { initPacket(); @@ -1388,9 +1323,9 @@ class SetShutdownTimeout : public SpacePacket { uint8_t crcOffset = 0; void initPacket() { - uint8_t* data_field_ptr = this->localData.fields.buffer; + uint8_t* dataFieldPtr = this->localData.fields.buffer; size_t serializedSize = 0; - SerializeAdapter::serialize(&timeout, data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&timeout, dataFieldPtr, &serializedSize, sizeof(timeout), SerializeIF::Endianness::BIG); this->setPacketDataLength(PACKET_LEN); serializedSize = 0; @@ -1426,110 +1361,141 @@ class SupvTcSpacePacket : public SpacePacket { }; /** - * @brief This class can be used to package the update available or update verify command. + * @brief Command to request CRC over memory region of the supervisor. */ -class UpdateInfo : public SupvTcSpacePacket { +class CheckMemory : public SupvTcSpacePacket { public: /** * @brief Constructor * - * @param apid Packet can be used to generate the update available and the update verify - * packet. Thus the APID must be specified here. - * @param image The image to update on a NVM (A - 0, B - 1) - * @param partition The partition to update. uboot - 1, bitstream - 2, linux - 3, - * application - 4 - * @param imageSize The size of the update image - * param numPackets The number of space packets required to transfer all data. + * @param memoryId + * @param startAddress Start address of CRC calculation + * @param length Length in bytes of memory region */ - UpdateInfo(uint16_t apid, uint8_t image, uint8_t partition, uint32_t imageSize, uint32_t imageCrc, - uint32_t numPackets) - : SupvTcSpacePacket(PAYLOAD_LENGTH, apid), - image(image), - partition(partition), - imageSize(imageSize), - imageCrc(imageCrc), - numPackets(numPackets) { + CheckMemory(uint8_t memoryId, uint32_t startAddress, uint32_t length) + : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_CHECK_MEMORY), + memoryId(memoryId), + startAddress(startAddress), + length(length) { initPacket(); makeCrc(); } private: - static const uint16_t PAYLOAD_LENGTH = 14; // length without CRC field + static const uint16_t PAYLOAD_LENGTH = 10; // length without CRC field - uint8_t image = 0; - uint8_t partition = 0; - uint32_t imageSize = 0; - uint32_t imageCrc = 0; - uint32_t numPackets = 0; + uint8_t memoryId = 0; + uint8_t n = 1; + uint32_t startAddress = 0; + uint32_t length = 0; void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&image, &data_field_ptr, &serializedSize, sizeof(image), + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&memoryId, &dataFieldPtr, &serializedSize, sizeof(memoryId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&partition, &data_field_ptr, &serializedSize, - sizeof(partition), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&n, &dataFieldPtr, &serializedSize, sizeof(n), + SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&imageSize, &data_field_ptr, &serializedSize, - sizeof(imageSize), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&startAddress, &dataFieldPtr, &serializedSize, + sizeof(startAddress), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&imageCrc, &data_field_ptr, &serializedSize, - sizeof(imageCrc), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&numPackets, &data_field_ptr, &serializedSize, - sizeof(numPackets), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&length, &dataFieldPtr, &serializedSize, + sizeof(length), SerializeIF::Endianness::BIG); } }; /** * @brief This class packages the space packet transporting a part of an MPSoC update. */ -class UpdatePacket : public SupvTcSpacePacket { +class WriteMemory : public SupvTcSpacePacket { public: - - /** - * @brief Constrcutor - * - * @param updateData Pointer to buffer containing update data - */ - UpdatePacket(uint8_t memoryId, uint32_t startAddress, uint16_t length, uint8_t* updateData) - : SupvTcSpacePacket(META_DATA_LENGTH + length, apid), + /** + * @brief Constructor + * + * @param seqFlags Sequence flags + * @param sequenceCount Sequence count (first update packet expects 1 as sequence count) + * @param updateData Pointer to buffer containing update data + */ + WriteMemory(SequenceFlags seqFlags, uint16_t sequenceCount, uint8_t memoryId, + uint32_t startAddress, uint16_t length, uint8_t* updateData) + : SupvTcSpacePacket(META_DATA_LENGTH + length, APID_WRITE_MEMORY), memoryId(memoryId), startAddress(startAddress), length(length) { + if (this->length > CHUNK_MAX) { + sif::error << "WriteMemory::WriteMemory: Invalid length" << std::endl; + } initPacket(updateData); + this->setSequenceFlags(static_cast(seqFlags)); + this->setPacketSequenceCount(sequenceCount); makeCrc(); } - static const uint16_t MAX_UPDATE_DATA = 1010; + // Although the space packet has space left for 1010 bytes of data to supervisor can only process + // update packets with maximum 512 bytes of update data. + static const uint16_t CHUNK_MAX = 512; private: static const uint16_t META_DATA_LENGTH = 8; - uint8_t memoryId =0; + uint8_t memoryId = 0; uint8_t n = 1; uint32_t startAddress = 0; uint16_t length = 0; void initPacket(uint8_t* updateData) { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&memoryId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&memoryId, &dataFieldPtr, &serializedSize, sizeof(memoryId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&n, &data_field_ptr, &serializedSize, - sizeof(n), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&n, &dataFieldPtr, &serializedSize, sizeof(n), + SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&startAddress, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&startAddress, &dataFieldPtr, &serializedSize, sizeof(startAddress), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&length, &data_field_ptr, &serializedSize, - sizeof(length), SerializeIF::Endianness::BIG); - std::memcpy(data_field_ptr, updateData, length); + SerializeAdapter::serialize(&length, &dataFieldPtr, &serializedSize, sizeof(length), + SerializeIF::Endianness::BIG); + std::memcpy(dataFieldPtr, updateData, length); + if (length % 2 != 0) { + this->setPacketDataLength(this->getFullSize() + 1); + // The data field must be two bytes aligned. Thus, in case the number of bytes to write is odd + // a value of zero is added here + *(dataFieldPtr + length + 1) = 0; + } } }; +/** + * @brief This dataset stores the boot status report of the supervisor. + */ +class BootStatusReport : public StaticLocalDataSet { + public: + BootStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, BOOT_REPORT_SET_ID) {} + + BootStatusReport(object_id_t objectId) + : StaticLocalDataSet(sid_t(objectId, BOOT_REPORT_SET_ID)) {} + + /** Information about boot status of MPSoC */ + lp_var_t bootSignal = lp_var_t(sid.objectId, PoolIds::BOOT_SIGNAL, this); + lp_var_t resetCounter = lp_var_t(sid.objectId, PoolIds::RESET_COUNTER, this); + /** Time the MPSoC needs for last boot */ + lp_var_t bootAfterMs = lp_var_t(sid.objectId, PoolIds::BOOT_AFTER_MS, this); + /** The currently set boot timeout */ + lp_var_t bootTimeoutMs = + lp_var_t(sid.objectId, PoolIds::BOOT_TIMEOUT_MS, this); + lp_var_t activeNvm = lp_var_t(sid.objectId, PoolIds::ACTIVE_NVM, this); + /** States of the boot partition pins */ + lp_var_t bp0State = lp_var_t(sid.objectId, PoolIds::BP0_STATE, this); + lp_var_t bp1State = lp_var_t(sid.objectId, PoolIds::BP1_STATE, this); + lp_var_t bp2State = lp_var_t(sid.objectId, PoolIds::BP2_STATE, this); + lp_var_t bootState = lp_var_t(sid.objectId, PoolIds::BOOT_STATE, this); + lp_var_t bootCycles = lp_var_t(sid.objectId, PoolIds::BOOT_CYCLES, this); +}; + /** * @brief This dataset stores the housekeeping data of the supervisor. */ @@ -1587,7 +1553,7 @@ class LatchupStatusReport : public StaticLocalDataSet { /** * @brief Class for handling tm replies of the supervisor. */ -class TmPacket : public SpacePacket, public MPSoCReturnValuesIF { +class TmPacket : public SpacePacket { public: /** * @brief Constructor creates idle packet and sets length field to maximum allowed size. @@ -1600,7 +1566,7 @@ class TmPacket : public SpacePacket, public MPSoCReturnValuesIF { uint16_t recalculatedCrc = CRC::crc16ccitt(this->localData.byteStream, this->getFullSize() - CRC_SIZE); if (recalculatedCrc != receivedCrc) { - return CRC_FAILURE; + return SupvReturnValuesIF::CRC_FAILURE; } return HasReturnvaluesIF::RETURN_OK; } @@ -1611,9 +1577,8 @@ class TmPacket : public SpacePacket, public MPSoCReturnValuesIF { */ class EraseMemory : public SupvTcSpacePacket { public: - - EraseMemory(uint8_t memoryId, uint32_t startAddress, uint32_t length) - : SupvTcSpacePacket(PAYLOAD_LENGTH, apid), + EraseMemory(uint8_t memoryId, uint32_t startAddress, uint32_t length) + : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_ERASE_MEMORY), memoryId(memoryId), startAddress(startAddress), length(length) { @@ -1624,25 +1589,85 @@ class EraseMemory : public SupvTcSpacePacket { private: static const uint16_t PAYLOAD_LENGTH = 10; // length without CRC field - uint8_t memoryId =0; + uint8_t memoryId = 0; uint8_t n = 1; uint32_t startAddress = 0; uint32_t length = 0; void initPacket() { size_t serializedSize = 0; - uint8_t* data_field_ptr = this->localData.fields.buffer; - SerializeAdapter::serialize(&memoryId, &data_field_ptr, &serializedSize, + uint8_t* dataFieldPtr = this->localData.fields.buffer; + SerializeAdapter::serialize(&memoryId, &dataFieldPtr, &serializedSize, sizeof(memoryId), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&n, &data_field_ptr, &serializedSize, - sizeof(n), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&n, &dataFieldPtr, &serializedSize, sizeof(n), + SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&startAddress, &data_field_ptr, &serializedSize, + SerializeAdapter::serialize(&startAddress, &dataFieldPtr, &serializedSize, sizeof(startAddress), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&length, &data_field_ptr, &serializedSize, - sizeof(length), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&length, &dataFieldPtr, &serializedSize, sizeof(length), + SerializeIF::Endianness::BIG); + } +}; + +class UpdateStatusReport : public TmPacket { + public: + UpdateStatusReport() : TmPacket() {} + + ReturnValue_t parseDataField() { + ReturnValue_t result = lengthCheck(); + if (result != HasReturnvaluesIF::RETURN_OK) { + return result; + } + uint8_t* dataFieldPtr = this->localData.fields.buffer; + size_t size = sizeof(memoryId); + SerializeAdapter::deSerialize(&memoryId, dataFieldPtr, &size, SerializeIF::Endianness::BIG); + dataFieldPtr += size; + size = sizeof(n); + SerializeAdapter::deSerialize(&n, dataFieldPtr, &size, SerializeIF::Endianness::BIG); + dataFieldPtr += size; + size = sizeof(startAddress); + SerializeAdapter::deSerialize(&startAddress, dataFieldPtr, &size, SerializeIF::Endianness::BIG); + dataFieldPtr += size; + size = sizeof(length); + SerializeAdapter::deSerialize(&length, dataFieldPtr, &size, SerializeIF::Endianness::BIG); + dataFieldPtr += size; + size = sizeof(crc); + SerializeAdapter::deSerialize(&crc, dataFieldPtr, &size, SerializeIF::Endianness::BIG); + return HasReturnvaluesIF::RETURN_OK; + } + + ReturnValue_t verifycrc(uint16_t goodCrc) const { + if (crc != goodCrc) { + return SupvReturnValuesIF::UPDATE_CRC_FAILURE; + } + return HasReturnvaluesIF::RETURN_OK; + } + + uint16_t getCrc() const { + return crc; + } + + uint16_t getNominalSize() const { + return FULL_SIZE; + } + + private: + // Nominal size of the space packet + static const uint16_t FULL_SIZE = 20; // header, data field and crc + + uint8_t memoryId = 0; + uint8_t n = 0; + uint32_t startAddress = 0; + uint32_t length = 0; + uint16_t crc = 0; + + ReturnValue_t lengthCheck() { + if (this->getFullSize() != FULL_SIZE) { + return SupvReturnValuesIF::UPDATE_STATUS_REPORT_INVALID_LENGTH; + } + return HasReturnvaluesIF::RETURN_OK; } }; } // namespace supv diff --git a/linux/devices/ploc/CMakeLists.txt b/linux/devices/ploc/CMakeLists.txt index 2d1e1998..bd3d6b6e 100644 --- a/linux/devices/ploc/CMakeLists.txt +++ b/linux/devices/ploc/CMakeLists.txt @@ -1,7 +1,7 @@ target_sources(${OBSW_NAME} PRIVATE PlocSupervisorHandler.cpp - PlocUpdater.cpp PlocMemoryDumper.cpp PlocMPSoCHandler.cpp PlocMPSoCHelper.cpp + PlocSupvHelper.cpp ) diff --git a/linux/devices/ploc/PlocMPSoCHelper.cpp b/linux/devices/ploc/PlocMPSoCHelper.cpp index e940e8f3..5e6da78b 100644 --- a/linux/devices/ploc/PlocMPSoCHelper.cpp +++ b/linux/devices/ploc/PlocMPSoCHelper.cpp @@ -204,7 +204,7 @@ ReturnValue_t PlocMPSoCHelper::sendCommand(mpsoc::TcBase& tc) { result = uartComIF->sendMessage(comCookie, tc.getWholeData(), tc.getFullSize()); if (result != RETURN_OK) { sif::warning << "PlocMPSoCHelper::sendCommand: Failed to send command" << std::endl; - triggerEvent(SENDING_COMMAND_FAILED, result, static_cast(internalState)); + triggerEvent(MPSOC_SENDING_COMMAND_FAILED, result, static_cast(internalState)); return result; } return result; @@ -227,11 +227,11 @@ ReturnValue_t PlocMPSoCHelper::handleAck() { void PlocMPSoCHelper::handleAckApidFailure(uint16_t apid) { if (apid == mpsoc::apid::ACK_FAILURE) { - triggerEvent(ACK_FAILURE_REPORT, static_cast(internalState)); + triggerEvent(MPSOC_ACK_FAILURE_REPORT, static_cast(internalState)); sif::warning << "PlocMPSoCHelper::handleAckApidFailure: Received acknowledgement failure " << "report" << std::endl; } else { - triggerEvent(ACK_INVALID_APID, apid, static_cast(internalState)); + triggerEvent(MPSOC_ACK_INVALID_APID, apid, static_cast(internalState)); sif::warning << "PlocMPSoCHelper::handleAckApidFailure: Expected acknowledgement report " << "but received space packet with apid " << std::hex << apid << std::endl; } @@ -254,11 +254,11 @@ ReturnValue_t PlocMPSoCHelper::handleExe() { void PlocMPSoCHelper::handleExeApidFailure(uint16_t apid) { if (apid == mpsoc::apid::EXE_FAILURE) { - triggerEvent(EXE_FAILURE_REPORT, static_cast(internalState)); + triggerEvent(MPSOC_EXE_FAILURE_REPORT, static_cast(internalState)); sif::warning << "PlocMPSoCHelper::handleExeApidFailure: Received execution failure " << "report" << std::endl; } else { - triggerEvent(EXE_INVALID_APID, apid, static_cast(internalState)); + triggerEvent(MPSOC_EXE_INVALID_APID, apid, static_cast(internalState)); sif::warning << "PlocMPSoCHelper::handleExeApidFailure: Expected execution report " << "but received space packet with apid " << std::hex << apid << std::endl; } @@ -281,7 +281,7 @@ ReturnValue_t PlocMPSoCHelper::handleTmReception(mpsoc::TmPacket* tmPacket, size } if (remainingBytes != 0) { sif::warning << "PlocMPSoCHelper::handleTmReception: Failed to receive reply" << std::endl; - triggerEvent(MISSING_EXE, remainingBytes, static_cast(internalState)); + triggerEvent(MPSOC_MISSING_EXE, remainingBytes, static_cast(internalState)); return RETURN_FAILED; } result = tmPacket->checkCrc(); diff --git a/linux/devices/ploc/PlocMPSoCHelper.h b/linux/devices/ploc/PlocMPSoCHelper.h index 4cb882c7..3c011b6a 100644 --- a/linux/devices/ploc/PlocMPSoCHelper.h +++ b/linux/devices/ploc/PlocMPSoCHelper.h @@ -29,10 +29,10 @@ class PlocMPSoCHelper : public SystemObject, public ExecutableObjectIF, public H //! [EXPORT] : [COMMENT] Flash write successful static const Event MPSOC_FLASH_WRITE_SUCCESSFUL = MAKE_EVENT(1, severity::LOW); //! [EXPORT] : [COMMENT] Communication interface returned failure when trying to send the command - //! ot the PLOC + //! to the MPSoC //! P1: Return value returned by the communication interface sendMessage function //! P2: Internal state of MPSoC helper - static const Event SENDING_COMMAND_FAILED = MAKE_EVENT(2, severity::LOW); + static const Event MPSOC_SENDING_COMMAND_FAILED = MAKE_EVENT(2, severity::LOW); //! [EXPORT] : [COMMENT] Request receive message of communication interface failed //! P1: Return value returned by the communication interface requestReceiveMessage function //! P2: Internal state of MPSoC helper @@ -41,28 +41,28 @@ class PlocMPSoCHelper : public SystemObject, public ExecutableObjectIF, public H //! P1: Return value returned by the communication interface readingReceivedMessage function //! P2: Internal state of MPSoC helper static const Event MPSOC_HELPER_READING_REPLY_FAILED = MAKE_EVENT(4, severity::LOW); - //! [EXPORT] : [COMMENT] Did not receive acknowledgement report + //! [EXPORT] : [COMMENT] Did not receive acknowledgment report //! P1: Number of bytes missing //! P2: Internal state of MPSoC helper - static const Event MISSING_ACK = MAKE_EVENT(5, severity::LOW); + static const Event MPSOC_MISSING_ACK = MAKE_EVENT(5, severity::LOW); //! [EXPORT] : [COMMENT] Did not receive execution report //! P1: Number of bytes missing //! P2: Internal state of MPSoC helper - static const Event MISSING_EXE = MAKE_EVENT(6, severity::LOW); - //! [EXPORT] : [COMMENT] Received acknowledgement failure report + static const Event MPSOC_MISSING_EXE = MAKE_EVENT(6, severity::LOW); + //! [EXPORT] : [COMMENT] Received acknowledgment failure report //! P1: Internal state of MPSoC - static const Event ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); + static const Event MPSOC_ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); //! [EXPORT] : [COMMENT] Received execution failure report //! P1: Internal state of MPSoC - static const Event EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); - //! [EXPORT] : [COMMENT] Expected acknowledgement report but received space packet with other apid + static const Event MPSOC_EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); + //! [EXPORT] : [COMMENT] Expected acknowledgment report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of MPSoC - static const Event ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); + static const Event MPSOC_ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); //! [EXPORT] : [COMMENT] Expected execution report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of MPSoC - static const Event EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); + static const Event MPSOC_EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); //! [EXPORT] : [COMMENT] Received sequence count does not match expected sequence count //! P1: Expected sequence count //! P2: Received sequence count diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 7174ec89..1825a01b 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -1,28 +1,32 @@ #include "PlocSupervisorHandler.h" -#include -#include -#include - #include #include #include #include #include "OBSWConfig.h" +#include "eive/definitions.h" +#include "fsfw/datapool/PoolReadGuard.h" +#include "fsfw/globalfunctions/CRC.h" +#include "fsfw/ipc/QueueFactory.h" +#include "fsfw/timemanager/Clock.h" PlocSupervisorHandler::PlocSupervisorHandler(object_id_t objectId, object_id_t uartComIFid, CookieIF* comCookie, Gpio uartIsolatorSwitch, - power::Switch_t powerSwitch) + power::Switch_t powerSwitch, + PlocSupvHelper* supvHelper) : DeviceHandlerBase(objectId, uartComIFid, comCookie), uartIsolatorSwitch(uartIsolatorSwitch), hkset(this), bootStatusReport(this), latchupStatusReport(this), - powerSwitch(powerSwitch) { + powerSwitch(powerSwitch), + supvHelper(supvHelper) { if (comCookie == NULL) { sif::error << "PlocSupervisorHandler: Invalid com cookie" << std::endl; } + eventQueue = QueueFactory::instance()->createMessageQueue(EventMessage::EVENT_MESSAGE_SIZE * 5); } PlocSupervisorHandler::~PlocSupervisorHandler() {} @@ -38,12 +42,85 @@ ReturnValue_t PlocSupervisorHandler::initialize() { sif::warning << "PlocSupervisorHandler::initialize: Invalid uart com if" << std::endl; return ObjectManagerIF::CHILD_INIT_FAILED; } -#ifdef TE0720_1CFA +#ifndef TE0720_1CFA sdcMan = SdCardManager::instance(); -#endif /* BOARD_TE0720 == 0 */ +#endif /* TE0720_1CFA */ + if (supvHelper == nullptr) { + sif::warning << "PlocSupervisorHandler::initialize: Invalid supervisor helper" << std::endl; + return ObjectManagerIF::CHILD_INIT_FAILED; + } + result = supvHelper->setComIF(uartComIf); + if (result != RETURN_OK) { + return ObjectManagerIF::CHILD_INIT_FAILED; + } + supvHelper->setComCookie(comCookie); + + result = eventSubscription(); + if (result != RETURN_OK) { + return result; + } return result; } +void PlocSupervisorHandler::performOperationHook() { + EventMessage event; + for (ReturnValue_t result = eventQueue->receiveMessage(&event); result == RETURN_OK; + result = eventQueue->receiveMessage(&event)) { + switch (event.getMessageId()) { + case EventMessage::EVENT_MESSAGE: + handleEvent(&event); + break; + default: + sif::debug << "PlocMPSoCHandler::performOperationHook: Did not subscribe to this event" + << " message" << std::endl; + break; + } + } +} + +ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, + MessageQueueId_t commandedBy, + const uint8_t* data, size_t size) { + ReturnValue_t result = RETURN_OK; + + switch (actionId) { + case supv::TERMINATE_SUPV_HELPER: { + supvHelper->stopProcess(); + break; + } + default: + break; + } + + if (plocSupvHelperExecuting) { + return SupvReturnValuesIF::SUPV_HELPER_EXECUTING; + } + + switch (actionId) { + case supv::PERFORM_UPDATE: { + if (size > config::MAX_PATH_SIZE + config::MAX_FILENAME_SIZE) { + return SupvReturnValuesIF::FILENAME_TOO_LONG; + } + std::string file = ""; + uint8_t memoryId = 0; + uint32_t startAddress = 0; + result = extractUpdateCommand(data, size, &file, &memoryId, &startAddress); + if (result != RETURN_OK) { + return result; + } + result = supvHelper->startUpdate(file, memoryId, startAddress); + if (result != RETURN_OK) { + return result; + } + plocSupvHelperExecuting = true; + return EXECUTION_FINISHED; + } + default: + break; + } + return DeviceHandlerBase::executeAction(actionId, commandedBy, data, size); +} + void PlocSupervisorHandler::doStartUp() { setMode(_MODE_TO_ON); uartIsolatorSwitch.pullHigh(); @@ -249,16 +326,6 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } - case (supv::UPDATE_AVAILABLE): - case (supv::UPDATE_IMAGE_DATA): - case (supv::UPDATE_VERIFY): - // Simply forward data from PLOC Updater to supervisor - std::memcpy(commandBuffer, commandData, commandDataLen); - rawPacket = commandBuffer; - rawPacketLen = commandDataLen; - nextReplyId = supv::ACK_REPORT; - result = RETURN_OK; - break; case (supv::PREPARE_UPDATE): { prepareEmptyCmd(supv::APID_PREPARE_UPDATE); result = RETURN_OK; @@ -308,9 +375,6 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(supv::SET_TIME_REF); this->insertInCommandMap(supv::DISABLE_PERIOIC_HK_TRANSMISSION); this->insertInCommandMap(supv::GET_BOOT_STATUS_REPORT); - this->insertInCommandMap(supv::UPDATE_AVAILABLE); - this->insertInCommandMap(supv::UPDATE_VERIFY); - this->insertInCommandMap(supv::UPDATE_IMAGE_DATA); this->insertInCommandMap(supv::WATCHDOGS_ENABLE); this->insertInCommandMap(supv::WATCHDOGS_CONFIG_TIMEOUT); this->insertInCommandMap(supv::ENABLE_LATCHUP_ALERT); @@ -398,7 +462,7 @@ ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t r default: { sif::debug << "PlocSupervisorHandler::scanForReply: Reply has invalid apid" << std::endl; *foundLen = remainingSize; - return INVALID_APID; + return SupvReturnValuesIF::INVALID_APID; } } @@ -501,6 +565,19 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool return HasReturnvaluesIF::RETURN_OK; } +void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { + object_id_t objectId = eventMessage->getReporter(); + switch (objectId) { + case objects::PLOC_SUPERVISOR_HELPER: { + plocSupvHelperExecuting = false; + break; + } + default: + sif::debug << "PlocMPSoCHandler::handleEvent: Did not subscribe to this event" << std::endl; + break; + } +} + ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, uint8_t expectedReplies, bool useAlternateId, @@ -568,9 +645,6 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case supv::SET_MAX_RESTART_TRIES: case supv::RESET_MPSOC: case supv::SET_TIME_REF: - case supv::UPDATE_AVAILABLE: - case supv::UPDATE_IMAGE_DATA: - case supv::UPDATE_VERIFY: case supv::WATCHDOGS_ENABLE: case supv::WATCHDOGS_CONFIG_TIMEOUT: case supv::ENABLE_LATCHUP_ALERT: @@ -634,7 +708,7 @@ ReturnValue_t PlocSupervisorHandler::verifyPacket(const uint8_t* start, size_t f uint16_t receivedCrc = *(start + foundLen - 2) << 8 | *(start + foundLen - 1); uint16_t recalculatedCrc = CRC::crc16ccitt(start, foundLen - 2); if (receivedCrc != recalculatedCrc) { - return CRC_FAILURE; + return SupvReturnValuesIF::CRC_FAILURE; } return RETURN_OK; } @@ -643,12 +717,12 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { ReturnValue_t result = RETURN_OK; result = verifyPacket(data, supv::SIZE_ACK_REPORT); - if (result == CRC_FAILURE) { + if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::error << "PlocSupervisorHandler::handleAckReport: CRC failure" << std::endl; nextReplyId = supv::NONE; replyRawReplyIfnotWiretapped(data, supv::SIZE_ACK_REPORT); triggerEvent(SUPV_CRC_FAILURE_EVENT); - sendFailureReport(supv::ACK_REPORT, CRC_FAILURE); + sendFailureReport(supv::ACK_REPORT, SupvReturnValuesIF::CRC_FAILURE); disableAllReplies(); return RETURN_OK; } @@ -664,7 +738,7 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { triggerEvent(SUPV_ACK_FAILURE, commandId); } - sendFailureReport(supv::ACK_REPORT, RECEIVED_ACK_FAILURE); + sendFailureReport(supv::ACK_REPORT, SupvReturnValuesIF::RECEIVED_ACK_FAILURE); disableAllReplies(); nextReplyId = supv::NONE; result = IGNORE_REPLY_DATA; @@ -689,7 +763,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) ReturnValue_t result = RETURN_OK; result = verifyPacket(data, supv::SIZE_EXE_REPORT); - if (result == CRC_FAILURE) { + if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::error << "PlocSupervisorHandler::handleExecutionReport: CRC failure" << std::endl; nextReplyId = supv::NONE; return result; @@ -715,7 +789,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) } uint16_t status = *(data + EXE_STATUS_OFFSET) << 8 | *(data + EXE_STATUS_OFFSET + 1); sif::info << "Execution status: 0x" << std::hex << status << std::endl; - sendFailureReport(supv::EXE_REPORT, RECEIVED_EXE_FAILURE); + sendFailureReport(supv::EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); disableExeReportReply(); result = IGNORE_REPLY_DATA; break; @@ -737,7 +811,7 @@ ReturnValue_t PlocSupervisorHandler::handleHkReport(const uint8_t* data) { result = verifyPacket(data, supv::SIZE_HK_REPORT); - if (result == CRC_FAILURE) { + if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::error << "PlocSupervisorHandler::handleHkReport: Hk report has invalid crc" << std::endl; } @@ -811,7 +885,7 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) result = verifyPacket(data, supv::SIZE_BOOT_STATUS_REPORT); - if (result == CRC_FAILURE) { + if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::error << "PlocSupervisorHandler::handleBootStatusReport: Boot status report has invalid" " crc" << std::endl; @@ -850,8 +924,8 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) << static_cast(bootStatusReport.resetCounter.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootAfterMs: " << bootStatusReport.bootAfterMs << " ms" << std::endl; - sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootTimeoutMs: " - << std::dec << bootStatusReport.bootTimeoutMs << " ms" << std::endl; + sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootTimeoutMs: " << std::dec + << bootStatusReport.bootTimeoutMs << " ms" << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Active NVM: " << static_cast(bootStatusReport.activeNvm.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BP0: " @@ -861,9 +935,9 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) sif::info << "PlocSupervisorHandler::handleBootStatusReport: BP2: " << static_cast(bootStatusReport.bp2State.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Boot state: " - << static_cast(bootStatusReport.bootState.value) << std::endl; + << static_cast(bootStatusReport.bootState.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Boot cycles: " - << static_cast(bootStatusReport.bootCycles.value) << std::endl; + << static_cast(bootStatusReport.bootCycles.value) << std::endl; #endif return result; @@ -874,7 +948,7 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da result = verifyPacket(data, supv::SIZE_LATCHUP_STATUS_REPORT); - if (result == CRC_FAILURE) { + if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::error << "PlocSupervisorHandler::handleLatchupStatusReport: Latchup status report has " << "invalid crc" << std::endl; return result; @@ -1034,7 +1108,7 @@ void PlocSupervisorHandler::handleDeviceTM(const uint8_t* data, size_t dataSize, } void PlocSupervisorHandler::prepareEmptyCmd(uint16_t apid) { - supv::EmptyPacket packet(apid); + supv::ApidOnlyPacket packet(apid); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); } @@ -1050,7 +1124,7 @@ ReturnValue_t PlocSupervisorHandler::prepareSetTimeRefCmd() { if (result != RETURN_OK) { sif::warning << "PlocSupervisorHandler::prepareSetTimeRefCmd: Failed to get current time" << std::endl; - return GET_TIME_FAILURE; + return SupvReturnValuesIF::GET_TIME_FAILURE; } supv::SetTimeRef packet(&time); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1091,12 +1165,12 @@ ReturnValue_t PlocSupervisorHandler::prepareWatchdogsConfigTimeoutCmd(const uint uint8_t watchdog = *(commandData + offset); offset += 1; if (watchdog > 2) { - return INVALID_WATCHDOG; + return SupvReturnValuesIF::INVALID_WATCHDOG; } uint32_t timeout = *(commandData + offset) << 24 | *(commandData + offset + 1) << 16 | *(commandData + offset + 2) << 8 | *(commandData + offset + 3); if (timeout < 1000 || timeout > 360000) { - return INVALID_WATCHDOG_TIMEOUT; + return SupvReturnValuesIF::INVALID_WATCHDOG_TIMEOUT; } supv::WatchdogsConfigTimeout packet(watchdog, timeout); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1108,7 +1182,7 @@ ReturnValue_t PlocSupervisorHandler::prepareLatchupConfigCmd(const uint8_t* comm ReturnValue_t result = RETURN_OK; uint8_t latchupId = *commandData; if (latchupId > 6) { - return INVALID_LATCHUP_ID; + return SupvReturnValuesIF::INVALID_LATCHUP_ID; } switch (deviceCommand) { case (supv::ENABLE_LATCHUP_ALERT): { @@ -1138,7 +1212,7 @@ ReturnValue_t PlocSupervisorHandler::prepareAutoCalibrateAlertCmd(const uint8_t* uint32_t mg = *(commandData + offset) << 24 | *(commandData + offset + 1) << 16 | *(commandData + offset + 2) << 8 | *(commandData + offset + 3); if (latchupId > 6) { - return INVALID_LATCHUP_ID; + return SupvReturnValuesIF::INVALID_LATCHUP_ID; } supv::AutoCalibrateAlert packet(latchupId, mg); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1150,7 +1224,7 @@ ReturnValue_t PlocSupervisorHandler::prepareSetAlertIrqFilterCmd(const uint8_t* uint8_t tp = *(commandData + 1); uint8_t div = *(commandData + 2); if (latchupId > 6) { - return INVALID_LATCHUP_ID; + return SupvReturnValuesIF::INVALID_LATCHUP_ID; } supv::SetAlertIrqFilter packet(latchupId, tp, div); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1164,7 +1238,7 @@ ReturnValue_t PlocSupervisorHandler::prepareSetAlertLimitCmd(const uint8_t* comm uint32_t dutycycle = *(commandData + offset) << 24 | *(commandData + offset + 1) << 16 | *(commandData + offset + 2) << 8 | *(commandData + offset + 3); if (latchupId > 6) { - return INVALID_LATCHUP_ID; + return SupvReturnValuesIF::INVALID_LATCHUP_ID; } supv::SetAlertlimit packet(latchupId, dutycycle); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1175,7 +1249,7 @@ ReturnValue_t PlocSupervisorHandler::prepareSetAdcSweetPeriodCmd(const uint8_t* uint32_t sweepPeriod = *(commandData) << 24 | *(commandData + 1) << 16 | *(commandData + 2) << 8 | *(commandData + 3); if (sweepPeriod < 21) { - return SWEEP_PERIOD_TOO_SMALL; + return SupvReturnValuesIF::SWEEP_PERIOD_TOO_SMALL; } supv::SetAdcSweepPeriod packet(sweepPeriod); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1220,7 +1294,7 @@ void PlocSupervisorHandler::prepareSelectNvmCmd(const uint8_t* commandData) { ReturnValue_t PlocSupervisorHandler::prepareRunAutoEmTest(const uint8_t* commandData) { uint8_t test = *commandData; if (test != 1 && test != 2) { - return INVALID_TEST_PARAM; + return SupvReturnValuesIF::INVALID_TEST_PARAM; } supv::RunAutoEmTests packet(test); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1234,7 +1308,7 @@ ReturnValue_t PlocSupervisorHandler::prepareWipeMramCmd(const uint8_t* commandDa SerializeAdapter::deSerialize(&start, &commandData, &size, SerializeIF::Endianness::BIG); SerializeAdapter::deSerialize(&stop, &commandData, &size, SerializeIF::Endianness::BIG); if ((stop - start) <= 0) { - return INVALID_MRAM_ADDRESSES; + return SupvReturnValuesIF::INVALID_MRAM_ADDRESSES; } supv::MramCmd packet(start, stop, supv::MramCmd::MramAction::WIPE); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -1250,7 +1324,7 @@ ReturnValue_t PlocSupervisorHandler::prepareDumpMramCmd(const uint8_t* commandDa supv::MramCmd packet(start, stop, supv::MramCmd::MramAction::DUMP); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); if ((stop - start) <= 0) { - return INVALID_MRAM_ADDRESSES; + return SupvReturnValuesIF::INVALID_MRAM_ADDRESSES; } expectedMramDumpPackets = (stop - start) / supv::MAX_DATA_CAPACITY; if ((stop - start) % supv::MAX_DATA_CAPACITY) { @@ -1393,7 +1467,7 @@ ReturnValue_t PlocSupervisorHandler::parseMramPackets(const uint8_t* packet, siz *foundLen = remainingSize; disableAllReplies(); bufferTop = 0; - return MRAM_PACKET_PARSING_FAILURE; + return SupvReturnValuesIF::MRAM_PACKET_PARSING_FAILURE; } } @@ -1477,7 +1551,7 @@ void PlocSupervisorHandler::increaseExpectedMramReplies(DeviceCommandId_t id) { ReturnValue_t PlocSupervisorHandler::checkMramPacketApid() { uint16_t apid = (spacePacketBuffer[0] << 8 | spacePacketBuffer[1]) & supv::APID_MASK; if (apid != supv::APID_MRAM_DUMP_TM) { - return NO_MRAM_PACKET; + return SupvReturnValuesIF::NO_MRAM_PACKET; } return APERIODIC_REPLY; } @@ -1498,7 +1572,7 @@ ReturnValue_t PlocSupervisorHandler::handleMramDumpFile(DeviceCommandId_t id) { if (not std::filesystem::exists(activeMramFile)) { sif::warning << "PlocSupervisorHandler::handleMramDumpFile: MRAM file does not exist" << std::endl; - return MRAM_FILE_NOT_EXISTS; + return SupvReturnValuesIF::MRAM_FILE_NOT_EXISTS; } std::ofstream file(activeMramFile, std::ios_base::app | std::ios_base::out); file.write(reinterpret_cast(spacePacketBuffer + supv::SPACE_PACKET_HEADER_LENGTH), @@ -1525,7 +1599,7 @@ ReturnValue_t PlocSupervisorHandler::createMramDumpFile() { std::string filename = "mram-dump--" + timeStamp + ".bin"; -#ifdef TE0720_1CFA +#ifndef TE0720_1CFA std::string currentMountPrefix = sdcMan->getCurrentMountPrefix(); #else std::string currentMountPrefix("/mnt/sd0"); @@ -1535,7 +1609,7 @@ ReturnValue_t PlocSupervisorHandler::createMramDumpFile() { if (not std::filesystem::exists(std::string(currentMountPrefix + "/" + plocFilePath))) { sif::warning << "PlocSupervisorHandler::createMramDumpFile: Ploc path does not exist" << std::endl; - return PATH_DOES_NOT_EXIST; + return SupvReturnValuesIF::PATH_DOES_NOT_EXIST; } activeMramFile = currentMountPrefix + "/" + plocFilePath + "/" + filename; // Create new file @@ -1551,10 +1625,67 @@ ReturnValue_t PlocSupervisorHandler::getTimeStampString(std::string& timeStamp) if (result != RETURN_OK) { sif::warning << "PlocSupervisorHandler::createMramDumpFile: Failed to get current time" << std::endl; - return GET_TIME_FAILURE; + return SupvReturnValuesIF::GET_TIME_FAILURE; } timeStamp = std::to_string(time.year) + "-" + std::to_string(time.month) + "-" + std::to_string(time.day) + "--" + std::to_string(time.hour) + "-" + std::to_string(time.minute) + "-" + std::to_string(time.second); return RETURN_OK; } + +ReturnValue_t PlocSupervisorHandler::extractUpdateCommand(const uint8_t* commandData, size_t size, + std::string* file, uint8_t* memoryId, + uint32_t* startAddress) { + ReturnValue_t result = RETURN_OK; + if (size > (config::MAX_FILENAME_SIZE + config::MAX_PATH_SIZE + sizeof(*memoryId)) + + sizeof(*startAddress)) { + sif::warning << "PlocSupervisorHandler::extractUpdateCommand: Data size too big" << std::endl; + return SupvReturnValuesIF::INVALID_LENGTH; + } + *file = std::string(reinterpret_cast(commandData)); + if (file->size() > (config::MAX_FILENAME_SIZE + config::MAX_PATH_SIZE)) { + sif::warning << "PlocSupervisorHandler::extractUpdateCommand: Filename too long" << std::endl; + return SupvReturnValuesIF::FILENAME_TOO_LONG; + } + *memoryId = *(commandData + file->size() + SIZE_NULL_TERMINATOR); + const uint8_t* startAddressPtr = + commandData + file->size() + SIZE_NULL_TERMINATOR + sizeof(*memoryId); + size_t remainingSize = 4; + result = SerializeAdapter::deSerialize(startAddress, startAddressPtr, &remainingSize, + SerializeIF::Endianness::BIG); + if (result != RETURN_OK) { + sif::warning + << "PlocSupervisorHandler::extractUpdateCommand: Failed to deserialize start address" + << std::endl; + return result; + } + return RETURN_OK; +} + +ReturnValue_t PlocSupervisorHandler::eventSubscription() { + ReturnValue_t result = RETURN_OK; + EventManagerIF* manager = ObjectManager::instance()->get(objects::EVENT_MANAGER); + if (manager == nullptr) { +#if FSFW_CPP_OSTREAM_ENABLED == 1 + sif::error << "PlocSupervisorHandler::eventSubscritpion: Invalid event manager" << std::endl; +#endif + return ObjectManagerIF::CHILD_INIT_FAILED; + ; + } + result = manager->registerListener(eventQueue->getId()); + if (result != RETURN_OK) { + return result; + } + result = manager->subscribeToEventRange( + eventQueue->getId(), event::getEventId(PlocSupvHelper::SUPV_UPDATE_FAILED), + event::getEventId(PlocSupvHelper::TERMINATED_UPDATE_PROCEDURE)); + if (result != RETURN_OK) { +#if FSFW_CPP_OSTREAM_ENABLED == 1 + sif::warning << "PlocSupervisorHandler::eventSubscritpion: Failed to subscribe to events from " + " ploc supervisor helper" + << std::endl; +#endif + return ObjectManagerIF::CHILD_INIT_FAILED; + } + return result; +} diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 698b314b..a570cc5d 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -9,12 +9,14 @@ #include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h" #include "fsfw_hal/linux/uart/UartComIF.h" #include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" +#include "linux/devices/devicedefinitions/SupvReturnValuesIF.h" +#include "PlocSupvHelper.h" /** * @brief This is the device handler for the supervisor of the PLOC which is programmed by * Thales. * - * @details The PLOC uses the space packet protocol for communication. To each command the PLOC + * @details The PLOC uses the space packet protocol for communication. On each command the PLOC * answers with at least one acknowledgment and one execution report. * Flight manual: * https://egit.irs.uni-stuttgart.de/redmine/projects/eive-flight-manual/wiki/PLOC_Commands @@ -25,10 +27,14 @@ class PlocSupervisorHandler : public DeviceHandlerBase { public: PlocSupervisorHandler(object_id_t objectId, object_id_t uartComIFid, CookieIF* comCookie, - Gpio uartIsolatorSwitch, power::Switch_t powerSwitch); + Gpio uartIsolatorSwitch, power::Switch_t powerSwitch, + PlocSupvHelper* supvHelper); virtual ~PlocSupervisorHandler(); virtual ReturnValue_t initialize() override; + void performOperationHook() override; + ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, + const uint8_t* data, size_t size) override; protected: void doStartUp() override; @@ -51,45 +57,6 @@ class PlocSupervisorHandler : public DeviceHandlerBase { size_t getNextReplyLength(DeviceCommandId_t deviceCommand) override; private: - static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_SUPERVISOR_HANDLER; - - //! [EXPORT] : [COMMENT] Space Packet received from PLOC supervisor has invalid CRC - static const ReturnValue_t CRC_FAILURE = MAKE_RETURN_CODE(0xA0); - //! [EXPORT] : [COMMENT] Received ACK failure reply from PLOC supervisor - static const ReturnValue_t RECEIVED_ACK_FAILURE = MAKE_RETURN_CODE(0xA1); - //! [EXPORT] : [COMMENT] Received execution failure reply from PLOC supervisor - static const ReturnValue_t RECEIVED_EXE_FAILURE = MAKE_RETURN_CODE(0xA2); - //! [EXPORT] : [COMMENT] Received space packet with invalid APID from PLOC supervisor - static const ReturnValue_t INVALID_APID = MAKE_RETURN_CODE(0xA3); - //! [EXPORT] : [COMMENT] Failed to read current system time - static const ReturnValue_t GET_TIME_FAILURE = MAKE_RETURN_CODE(0xA4); - //! [EXPORT] : [COMMENT] Received command with invalid watchdog parameter. Valid watchdogs are 0 - //! for PS, 1 for PL and 2 for INT - static const ReturnValue_t INVALID_WATCHDOG = MAKE_RETURN_CODE(0xA5); - //! [EXPORT] : [COMMENT] Received watchdog timeout config command with invalid timeout. Valid - //! timeouts must be in the range between 1000 and 360000 ms. - static const ReturnValue_t INVALID_WATCHDOG_TIMEOUT = MAKE_RETURN_CODE(0xA6); - //! [EXPORT] : [COMMENT] Received latchup config command with invalid latchup ID - static const ReturnValue_t INVALID_LATCHUP_ID = MAKE_RETURN_CODE(0xA7); - //! [EXPORT] : [COMMENT] Received set adc sweep period command with invalid sweep period. Must be - //! larger than 21. - static const ReturnValue_t SWEEP_PERIOD_TOO_SMALL = MAKE_RETURN_CODE(0xA8); - //! [EXPORT] : [COMMENT] Receive auto EM test command with invalid test param. Valid params are 1 - //! and 2. - static const ReturnValue_t INVALID_TEST_PARAM = MAKE_RETURN_CODE(0xA9); - //! [EXPORT] : [COMMENT] Returned when scanning for MRAM dump packets failed. - static const ReturnValue_t MRAM_PACKET_PARSING_FAILURE = MAKE_RETURN_CODE(0xAA); - //! [EXPORT] : [COMMENT] 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) - static const ReturnValue_t INVALID_MRAM_ADDRESSES = MAKE_RETURN_CODE(0xAB); - //! [EXPORT] : [COMMENT] Expect reception of an MRAM dump packet but received space packet with - //! other apid. - static const ReturnValue_t NO_MRAM_PACKET = MAKE_RETURN_CODE(0xAC); - //! [EXPORT] : [COMMENT] Path to PLOC directory on SD card does not exist - static const ReturnValue_t PATH_DOES_NOT_EXIST = MAKE_RETURN_CODE(0xAD); - //! [EXPORT] : [COMMENT] MRAM dump file does not exists. The file should actually already have - //! been created with the reception of the first dump packet. - static const ReturnValue_t MRAM_FILE_NOT_EXISTS = MAKE_RETURN_CODE(0xAE); static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_SUPERVISOR_HANDLER; @@ -101,10 +68,13 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const Event SUPV_EXE_FAILURE = MAKE_EVENT(3, severity::LOW); //! [EXPORT] : [COMMENT] PLOC supervisor reply has invalid crc static const Event SUPV_CRC_FAILURE_EVENT = MAKE_EVENT(4, severity::LOW); + //! [EXPORT] : [COMMENT] Supervisor helper currently executing a command + static const Event SUPV_HELPER_EXECUTING = MAKE_EVENT(5, severity::LOW); static const uint16_t APID_MASK = 0x7FF; static const uint16_t PACKET_SEQUENCE_COUNT_MASK = 0x3FFF; static const uint8_t EXE_STATUS_OFFSET = 10; + static const uint8_t SIZE_NULL_TERMINATOR = 1; uint8_t commandBuffer[supv::MAX_COMMAND_SIZE]; @@ -125,6 +95,9 @@ class PlocSupervisorHandler : public DeviceHandlerBase { const power::Switch_t powerSwitch = power::NO_SWITCH; + PlocSupvHelper* supvHelper = nullptr; + MessageQueueIF* eventQueue = nullptr; + /** Number of expected replies following the MRAM dump command */ uint32_t expectedMramDumpPackets = 0; uint32_t receivedMramDumpPackets = 0; @@ -136,17 +109,25 @@ class PlocSupervisorHandler : public DeviceHandlerBase { /** This buffer is used to concatenate space packets received in two different read steps */ uint8_t spacePacketBuffer[supv::MAX_PACKET_SIZE]; -#ifdef TE0720_1CFA +#ifndef TE0720_1CFA SdCardManager* sdcMan = nullptr; #endif /* BOARD_TE0720 == 0 */ - /** Path to PLOC specific files on SD card */ + // Path to PLOC specific files on SD card std::string plocFilePath = "ploc"; std::string activeMramFile; - /** Setting this variable to true will enable direct downlink of MRAM packets */ + // Setting this variable to true will enable direct downlink of MRAM packets bool downlinkMramDump = false; + // Supervisor helper class currently executing a command + bool plocSupvHelperExecuting = false; + + /** + * @brief Handles event messages received from the supervisor helper + */ + void handleEvent(EventMessage* eventMessage); + ReturnValue_t getSwitches(const uint8_t** switches, uint8_t* numberOfSwitches); /** @@ -351,6 +332,10 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t getTimeStampString(std::string& timeStamp); void prepareSetShutdownTimeoutCmd(const uint8_t* commandData); + + ReturnValue_t extractUpdateCommand(const uint8_t* commandData, size_t size, std::string* file, + uint8_t* memoryId, uint32_t* startAddress); + ReturnValue_t eventSubscription(); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index 630062d8..2c33d3ec 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -8,6 +8,8 @@ #include "bsp_q7s/memory/FilesystemHelper.h" #endif +#include "bsp_q7s/memory/FilesystemHelper.h" +#include "fsfw/globalfunctions/CRC.h" #include "mission/utility/Timestamp.h" PlocSupvHelper::PlocSupvHelper(object_id_t objectId) : SystemObject(objectId) {} @@ -51,12 +53,12 @@ ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { } } -ReturnValue_t PlocSupvHelper::setComIF(DeviceCommunicationIF* communicationInterface_) { - uartComIF = dynamic_cast(communicationInterface_); - if (uartComIF == nullptr) { - sif::warning << "PlocSupvHelper::initialize: Invalid uart com if" << std::endl; +ReturnValue_t PlocSupvHelper::setComIF(UartComIF* uartComIF_) { + if (uartComIF_ == nullptr) { + sif::warning << "PlocSupvHelper::initialize: Provided invalid uart com if" << std::endl; return RETURN_FAILED; } + uartComIF = uartComIF_; return RETURN_OK; } @@ -68,14 +70,34 @@ ReturnValue_t PlocSupvHelper::startUpdate(std::string file, uint8_t memoryId, #ifdef XIPHOS_Q7S result = FilesystemHelper::checkPath(file); if (result != RETURN_OK) { - sif::warning << "PlocSupvHelper::startUpdate: File " << file << " does not exists" << std::endl; + sif::warning << "PlocSupvHelper::startUpdate: File " << file << " does not exist" << std::endl; return result; } + result = FileSytemHelper::fileExists(file); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::startUpdate: The file " << file << " does not exist" + << std::endl; + reurn result; + } +#endif +#ifdef TE0720_1CFA + if (not std::filesystem::exists(file)) { + sif::warning << "PlocSupvHelper::startUpdate: The file " << file << " does not exist" + << std::endl; + return RETURN_FAILED; + } #endif update.file = file; + update.length = getFileSize(update.file); update.memoryId = memoryId; update.startAddress = startAddress; + result = calcImageCrc(); + if (result != RETURN_OK) { + return result; + } internalState = InternalState::UPDATE; + uartComIF->flushUartTxAndRxBuf(comCookie); + semaphore.release(); return result; } @@ -83,48 +105,73 @@ void PlocSupvHelper::stopProcess() { terminate = true; } ReturnValue_t PlocSupvHelper::performUpdate() { ReturnValue_t result = RETURN_OK; + result = prepareUpdate(); + if (result != RETURN_OK) { + return result; + } result = eraseMemory(); if (result != RETURN_OK) { return result; } - uint8_t tempData[supv::UpdatePacket::MAX_UPDATE_DATA]; + uint8_t tempData[supv::WriteMemory::CHUNK_MAX]; std::ifstream file(update.file, std::ifstream::binary); - // Set position of next character to end of file input stream - file.seekg(0, file.end); - // tellg returns position of character in input stream - size_t remainingSize = file.tellg(); - size_t dataLength = 0; - size_t bytesRead = 0; + size_t remainingSize = update.length; + uint16_t dataLength = 0; + size_t bytesWritten = 0; + uint16_t sequenceCount = 1; + supv::SequenceFlags seqFlags = supv::SequenceFlags::FIRST_PKT; while (remainingSize > 0) { - update.startAddress = bytesRead; if (terminate) { - return RETURN_OK; + return PROCESS_TERMINATED; } - if (remainingSize > supv::UpdatePacket::MAX_UPDATE_DATA) { - dataLength = supv::UpdatePacket::MAX_UPDATE_DATA; + if (remainingSize > supv::WriteMemory::CHUNK_MAX) { + dataLength = supv::WriteMemory::CHUNK_MAX; } else { dataLength = remainingSize; } if (file.is_open()) { - file.seekg(bytesRead, file.beg); + file.seekg(bytesWritten, file.beg); file.read(reinterpret_cast(tempData), dataLength); - bytesRead += dataLength; remainingSize -= dataLength; } else { return FILE_CLOSED_ACCIDENTALLY; } - supv::UpdatePacket tc(update.memoryId, update.startAddress, tempData); - result = handlePacketTransmission(tc); + if (bytesWritten == 0) { + seqFlags = supv::SequenceFlags::FIRST_PKT; + } else if (remainingSize == 0) { + seqFlags = supv::SequenceFlags::LAST_PKT; + } else { + seqFlags = supv::SequenceFlags::CONTINUED_PKT; + } + supv::WriteMemory packet(seqFlags, sequenceCount++, update.memoryId, + update.startAddress + bytesWritten, dataLength, tempData); + result = handlePacketTransmission(packet); if (result != RETURN_OK) { return result; } + bytesWritten += dataLength; + } + + result = handleCheckMemoryCommand(); + if (result != RETURN_OK) { + return result; } return result; } +ReturnValue_t PlocSupvHelper::prepareUpdate() { + ReturnValue_t result = RETURN_OK; + supv::ApidOnlyPacket packet(supv::APID_PREPARE_UPDATE); + result = handlePacketTransmission(packet); + if (result != RETURN_OK) { + return result; + } + return RETURN_OK; +} + ReturnValue_t PlocSupvHelper::eraseMemory() { ReturnValue_t result = RETURN_OK; - supv::EraseMemory eraseMemory(memoryId, startAddress, length); + supv::EraseMemory eraseMemory(update.memoryId, update.startAddress, update.length); result = handlePacketTransmission(eraseMemory); if (result != RETURN_OK) { return result; @@ -132,24 +179,9 @@ ReturnValue_t PlocSupvHelper::eraseMemory() { return RETURN_OK; } -ReturnValue_t PlocSupvHelper::flashfclose() { +ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& packet) { ReturnValue_t result = RETURN_OK; - (*sequenceCount)++; - supv::FlashFclose flashFclose(*sequenceCount); - result = flashFclose.createPacket(flashWrite.mpsocFile); - if (result != RETURN_OK) { - return result; - } - result = handlePacketTransmission(flashFclose); - if (result != RETURN_OK) { - return result; - } - return RETURN_OK; -} - -ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& tc) { - ReturnValue_t result = RETURN_OK; - result = sendCommand(tc); + result = sendCommand(packet); if (result != RETURN_OK) { return result; } @@ -164,12 +196,12 @@ ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& tc) { return RETURN_OK; } -ReturnValue_t PlocSupvHelper::sendCommand(supv::TcBase& tc) { +ReturnValue_t PlocSupvHelper::sendCommand(SpacePacket& packet) { ReturnValue_t result = RETURN_OK; - result = uartComIF->sendMessage(comCookie, tc.getWholeData(), tc.getFullSize()); + result = uartComIF->sendMessage(comCookie, packet.getWholeData(), packet.getFullSize()); if (result != RETURN_OK) { sif::warning << "PlocSupvHelper::sendCommand: Failed to send command" << std::endl; - triggerEvent(SENDING_COMMAND_FAILED, result, static_cast(internalState)); + triggerEvent(SUPV_SENDING_COMMAND_FAILED, result, static_cast(internalState)); return result; } return result; @@ -180,6 +212,8 @@ ReturnValue_t PlocSupvHelper::handleAck() { supv::TmPacket tmPacket; result = handleTmReception(&tmPacket, supv::SIZE_ACK_REPORT); if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::handleAck: Error in reception of acknowledgment report" + << std::endl; return result; } uint16_t apid = tmPacket.getAPID(); @@ -192,11 +226,11 @@ ReturnValue_t PlocSupvHelper::handleAck() { void PlocSupvHelper::handleAckApidFailure(uint16_t apid) { if (apid == supv::APID_ACK_FAILURE) { - triggerEvent(ACK_FAILURE_REPORT, static_cast(internalState)); + triggerEvent(SUPV_ACK_FAILURE_REPORT, static_cast(internalState)); sif::warning << "PlocSupvHelper::handleAckApidFailure: Received acknowledgement failure " << "report" << std::endl; } else { - triggerEvent(ACK_INVALID_APID, apid, static_cast(internalState)); + triggerEvent(SUPV_ACK_INVALID_APID, apid, static_cast(internalState)); sif::warning << "PlocSupvHelper::handleAckApidFailure: Expected acknowledgement report " << "but received space packet with apid " << std::hex << apid << std::endl; } @@ -207,10 +241,12 @@ ReturnValue_t PlocSupvHelper::handleExe() { supv::TmPacket tmPacket; result = handleTmReception(&tmPacket, supv::SIZE_EXE_REPORT); if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::handleExe: Error in reception of execution report" + << std::endl; return result; } uint16_t apid = tmPacket.getAPID(); - if (apid != supv::apid::EXE_SUCCESS) { + if (apid != supv::APID_EXE_SUCCESS) { handleExeApidFailure(apid); return RETURN_FAILED; } @@ -218,7 +254,7 @@ ReturnValue_t PlocSupvHelper::handleExe() { } void PlocSupvHelper::handleExeApidFailure(uint16_t apid) { - if (apid == supv::apid::EXE_FAILURE) { + if (apid == supv::APID_EXE_FAILURE) { triggerEvent(SUPV_EXE_FAILURE_REPORT, static_cast(internalState)); sif::warning << "PlocSupvHelper::handleExeApidFailure: Received execution failure " << "report" << std::endl; @@ -246,7 +282,7 @@ ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t } if (remainingBytes != 0) { sif::warning << "PlocSupvHelper::handleTmReception: Failed to receive reply" << std::endl; - triggerEvent(MISSING_EXE, remainingBytes, static_cast(internalState)); + triggerEvent(SUPV_MISSING_EXE, remainingBytes, static_cast(internalState)); return RETURN_FAILED; } result = tmPacket->checkCrc(); @@ -254,12 +290,6 @@ ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t sif::warning << "PlocSupvHelper::handleTmReception: CRC check failed" << std::endl; return result; } - (*sequenceCount)++; - uint16_t recvSeqCnt = tmPacket->getPacketSequenceCount(); - if (recvSeqCnt != *sequenceCount) { - triggerEvent(MPSOC_HELPER_SEQ_CNT_MISMATCH, *sequenceCount, recvSeqCnt); - *sequenceCount = recvSeqCnt; - } return result; } @@ -269,14 +299,14 @@ ReturnValue_t PlocSupvHelper::receive(uint8_t* data, size_t* readBytes, size_t r result = uartComIF->requestReceiveMessage(comCookie, requestBytes); if (result != RETURN_OK) { sif::warning << "PlocSupvHelper::receive: Failed to request reply" << std::endl; - triggerEvent(MPSOC_HELPER_REQUESTING_REPLY_FAILED, result, + triggerEvent(SUPV_HELPER_REQUESTING_REPLY_FAILED, result, static_cast(static_cast(internalState))); return RETURN_FAILED; } result = uartComIF->readReceivedMessage(comCookie, &buffer, readBytes); if (result != RETURN_OK) { sif::warning << "PlocSupvHelper::receive: Failed to read received message" << std::endl; - triggerEvent(MPSOC_HELPER_READING_REPLY_FAILED, result, static_cast(internalState)); + triggerEvent(SUPV_HELPER_READING_REPLY_FAILED, result, static_cast(internalState)); return RETURN_FAILED; } if (*readBytes > 0) { @@ -284,3 +314,68 @@ ReturnValue_t PlocSupvHelper::receive(uint8_t* data, size_t* readBytes, size_t r } return result; } + +ReturnValue_t PlocSupvHelper::calcImageCrc() { + ReturnValue_t result = RETURN_OK; +#ifdef XIPHOS_Q7S + result = FilesystemHelper::checkPath(update.file); +#endif + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::calcImageCrc: File " << update.file << " does not exist" + << std::endl; + return result; + } + std::ifstream file(update.file, std::ifstream::binary); + uint16_t remainder = CRC16_INIT; + uint8_t input; + for (uint32_t byteCount = 0; byteCount < update.length; byteCount++) { + file.seekg(byteCount, file.beg); + file.read(reinterpret_cast(&input), 1); + remainder = CRC::crc16ccitt(&input, sizeof(input), remainder); + } + file.close(); + update.crc = remainder; + return result; +} + +ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { + ReturnValue_t result = RETURN_OK; + // Verification of update write procedure + supv::CheckMemory packet(update.memoryId, update.startAddress, update.length); + result = sendCommand(packet); + if (result != RETURN_OK) { + return result; + } + result = handleAck(); + if (result != RETURN_OK) { + return result; + } + supv::UpdateStatusReport updateStatusReport; + result = handleTmReception(&updateStatusReport, + static_cast(updateStatusReport.getNominalSize())); + if (result != RETURN_OK) { + return result; + } + result = handleExe(); + if (result != RETURN_OK) { + return result; + } + result = updateStatusReport.parseDataField(); + if (result != RETURN_OK) { + return result; + } + result = updateStatusReport.verifycrc(update.crc); + if (result != RETURN_OK) { + sif::warning << "PlocSupvHelper::performUpdate: CRC failure. Expected CRC 0x" << std::hex + << update.crc << " but received CRC 0x" << updateStatusReport.getCrc() + << std::endl; + return result; + } + return result; +} + +uint32_t PlocSupvHelper::getFileSize(std::string filename) { + std::ifstream file(filename, std::ifstream::binary); + file.seekg(0, file.end); + return file.tellg(); +} diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index dbe712dc..6a0053d8 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -9,7 +9,7 @@ #include "fsfw/returnvalues/HasReturnvaluesIF.h" #include "fsfw/tasks/ExecutableObjectIF.h" #include "fsfw_hal/linux/uart/UartComIF.h" -#include "linux/devices/devicedefinitions/PlocMPSoCDefinitions.h" +#include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" #ifdef XIPHOS_Q7S #include "bsp_q7s/memory/SdCardManager.h" #endif @@ -27,41 +27,43 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha static const Event SUPV_UPDATE_FAILED = MAKE_EVENT(0, severity::LOW); //! [EXPORT] : [COMMENT] update successful static const Event SUPV_UPDATE_SUCCESSFUL = MAKE_EVENT(1, severity::LOW); + //! [EXPORT] : [COMMENT] Terminated update procedure by command + static const Event TERMINATED_UPDATE_PROCEDURE = MAKE_EVENT(2, severity::LOW); //! [EXPORT] : [COMMENT] Communication interface returned failure when trying to send the command - //! ot the PLOC + //! to the supervisor //! P1: Return value returned by the communication interface sendMessage function - //! P2: Internal state of MPSoC helper - static const Event SENDING_COMMAND_FAILED = MAKE_EVENT(2, severity::LOW); + //! P2: Internal state of supervisor helper + static const Event SUPV_SENDING_COMMAND_FAILED = MAKE_EVENT(3, severity::LOW); //! [EXPORT] : [COMMENT] Request receive message of communication interface failed //! P1: Return value returned by the communication interface requestReceiveMessage function - //! P2: Internal state of MPSoC helper - static const Event MPSOC_HELPER_REQUESTING_REPLY_FAILED = MAKE_EVENT(3, severity::LOW); + //! P2: Internal state of supervisor helper + static const Event SUPV_HELPER_REQUESTING_REPLY_FAILED = MAKE_EVENT(4, severity::LOW); //! [EXPORT] : [COMMENT] Reading receive message of communication interface failed //! P1: Return value returned by the communication interface readingReceivedMessage function - //! P2: Internal state of MPSoC helper - static const Event MPSOC_HELPER_READING_REPLY_FAILED = MAKE_EVENT(4, severity::LOW); + //! P2: Internal state of supervisor helper + static const Event SUPV_HELPER_READING_REPLY_FAILED = MAKE_EVENT(5, severity::LOW); //! [EXPORT] : [COMMENT] Did not receive acknowledgement report //! P1: Number of bytes missing //! P2: Internal state of MPSoC helper - static const Event SUPV_MISSING_ACK = MAKE_EVENT(5, severity::LOW); + static const Event SUPV_MISSING_ACK = MAKE_EVENT(6, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor did not receive execution report //! P1: Number of bytes missing //! P2: Internal state of supervisor helper - static const Event SUPV_MISSING_EXE = MAKE_EVENT(6, severity::LOW); + static const Event SUPV_MISSING_EXE = MAKE_EVENT(7, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor received acknowledgment failure report //! P1: Internal state of supervisor helper - static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(7, severity::LOW); + static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor received execution failure report //! P1: Internal state of supervisor - static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); + static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(9, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of supervisor helper - static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(9, severity::LOW); + static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(10, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor helper expected execution report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of supervisor helper - static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(10, severity::LOW); + static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(11, severity::LOW); PlocSupvHelper(object_id_t objectId); virtual ~PlocSupvHelper(); @@ -69,7 +71,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha ReturnValue_t initialize() override; ReturnValue_t performOperation(uint8_t operationCode = 0) override; - ReturnValue_t setComIF(DeviceCommunicationIF* communicationInterface_); + ReturnValue_t setComIF(UartComIF* uartComfIF_); void setComCookie(CookieIF* comCookie_); /** @@ -93,16 +95,21 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] File accidentally close static const ReturnValue_t FILE_CLOSED_ACCIDENTALLY = MAKE_RETURN_CODE(0xA0); + static const ReturnValue_t PROCESS_TERMINATED = MAKE_RETURN_CODE(0xA1); // Maximum number of times the communication interface retries polling data from the reply // buffer static const int RETRIES = 10000; + static const uint16_t CRC16_INIT = 0xFFFF; struct Update { uint8_t memoryId; uint32_t startAddress; // Absolute name of file containing update data std::string file; + // Size of update + uint32_t length; + uint32_t crc; }; struct Update update; @@ -127,15 +134,41 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha CookieIF* comCookie = nullptr; ReturnValue_t performUpdate(); - ReturnValue_t handlePacketTransmission(SpacePacket& tc); - ReturnValue_t sendCommand(SpacePacket& tc); + ReturnValue_t handlePacketTransmission(SpacePacket& packet); + ReturnValue_t sendCommand(SpacePacket& packet); + /** + * @brief Function which reads form the communication interface + * + * @param data Pointer to buffer where read data will be written to + * @param raedBytes Actual number of bytes read + * @param requestBytes Number of bytes to read + */ ReturnValue_t receive(uint8_t* data, size_t* readBytes, size_t requestBytes); ReturnValue_t handleAck(); ReturnValue_t handleExe(); void handleAckApidFailure(uint16_t apid); void handleExeApidFailure(uint16_t apid); - ReturnValue_t handleTmReception(SpacePacket* tmPacket, size_t remainingBytes); + /** + * @brief Handles reading of TM packets from the communication interface + * + * @param tmPacket Pointer to space packet where received data will be written to + * @param reaminingBytes Number of bytes to read in the space packet + */ + ReturnValue_t handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes); + ReturnValue_t prepareUpdate(); ReturnValue_t eraseMemory(); + // Calculates CRC over image. Will be used for verification after update writing has + // finished. + ReturnValue_t calcImageCrc(); + ReturnValue_t handleCheckMemoryCommand(); + /** + * @brief Return size of file with name filename + * + * @param filename + * + * @return The size of the file + */ + uint32_t getFileSize(std::string filename); }; #endif /* BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ */ diff --git a/linux/devices/ploc/PlocUpdater.cpp b/linux/devices/ploc/PlocUpdater.cpp deleted file mode 100644 index 37a553da..00000000 --- a/linux/devices/ploc/PlocUpdater.cpp +++ /dev/null @@ -1,385 +0,0 @@ -#include "PlocUpdater.h" - -#include -#include -#include - -#include "fsfw/ipc/QueueFactory.h" - -PlocUpdater::PlocUpdater(object_id_t objectId) - : SystemObject(objectId), commandActionHelper(this), actionHelper(this, nullptr) { - auto mqArgs = MqArgs(this->getObjectId()); - commandQueue = QueueFactory::instance()->createMessageQueue( - QUEUE_SIZE, MessageQueueMessage::MAX_MESSAGE_SIZE, &mqArgs); -} - -PlocUpdater::~PlocUpdater() {} - -ReturnValue_t PlocUpdater::initialize() { -#ifdef XIPHOS_Q7S - sdcMan = SdCardManager::instance(); -#endif - ReturnValue_t result = SystemObject::initialize(); - if (result != HasReturnvaluesIF::RETURN_OK) { - return result; - } - result = commandActionHelper.initialize(); - if (result != HasReturnvaluesIF::RETURN_OK) { - return result; - } - result = actionHelper.initialize(commandQueue); - if (result != HasReturnvaluesIF::RETURN_OK) { - return result; - } - - return HasReturnvaluesIF::RETURN_OK; -} - -ReturnValue_t PlocUpdater::performOperation(uint8_t operationCode) { - readCommandQueue(); - doStateMachine(); - return HasReturnvaluesIF::RETURN_OK; -} - -ReturnValue_t PlocUpdater::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size) { - ReturnValue_t result = RETURN_FAILED; - - if (state != State::IDLE) { - return IS_BUSY; - } - - if (size > MAX_PLOC_UPDATE_PATH) { - return NAME_TOO_LONG; - } - - switch (actionId) { - case UPDATE_A_UBOOT: - image = Image::A; - partition = Partition::UBOOT; - break; - case UPDATE_A_BITSTREAM: - image = Image::A; - partition = Partition::BITSTREAM; - break; - case UPDATE_A_LINUX: - image = Image::A; - partition = Partition::LINUX_OS; - break; - case UPDATE_A_APP_SW: - image = Image::A; - partition = Partition::APP_SW; - break; - case UPDATE_B_UBOOT: - image = Image::B; - partition = Partition::UBOOT; - break; - case UPDATE_B_BITSTREAM: - image = Image::B; - partition = Partition::BITSTREAM; - break; - case UPDATE_B_LINUX: - image = Image::B; - partition = Partition::LINUX_OS; - break; - case UPDATE_B_APP_SW: - image = Image::B; - partition = Partition::APP_SW; - break; - default: - return INVALID_ACTION_ID; - } - - result = getImageLocation(data, size); - - if (result != RETURN_OK) { - return result; - } - - state = State::UPDATE_AVAILABLE; - - return EXECUTION_FINISHED; -} - -MessageQueueId_t PlocUpdater::getCommandQueue() const { return commandQueue->getId(); } - -MessageQueueIF* PlocUpdater::getCommandQueuePtr() { return commandQueue; } - -void PlocUpdater::readCommandQueue() { - CommandMessage message; - ReturnValue_t result; - - for (result = commandQueue->receiveMessage(&message); result == HasReturnvaluesIF::RETURN_OK; - result = commandQueue->receiveMessage(&message)) { - if (result != RETURN_OK) { - continue; - } - result = actionHelper.handleActionMessage(&message); - if (result == HasReturnvaluesIF::RETURN_OK) { - continue; - } - - result = commandActionHelper.handleReply(&message); - if (result == HasReturnvaluesIF::RETURN_OK) { - continue; - } - } -} - -void PlocUpdater::doStateMachine() { - switch (state) { - case State::IDLE: - break; - case State::UPDATE_AVAILABLE: - commandUpdateAvailable(); - break; - case State::UPDATE_TRANSFER: - commandUpdatePacket(); - break; - case State::UPDATE_VERIFY: - commandUpdateVerify(); - break; - case State::COMMAND_EXECUTING: - break; - default: - break; - } -} - -ReturnValue_t PlocUpdater::checkNameLength(size_t size) { - if (size > MAX_PLOC_UPDATE_PATH) { - return NAME_TOO_LONG; - } - return RETURN_OK; -} - -ReturnValue_t PlocUpdater::getImageLocation(const uint8_t* data, size_t size) { - ReturnValue_t result = checkNameLength(size); - if (result != RETURN_OK) { - return result; - } - -#ifdef XIPHOS_Q7S - // Check if file is stored on SD card and if associated SD card is mounted - if (std::string(reinterpret_cast(data), SD_PREFIX_LENGTH) == - std::string(SdCardManager::SD_0_MOUNT_POINT)) { - if (!sdcMan->isSdCardMounted(sd::SLOT_0)) { - sif::warning << "PlocUpdater::getImageLocation: SD card 0 not mounted" << std::endl; - return SD_NOT_MOUNTED; - } - } else if (std::string(reinterpret_cast(data), SD_PREFIX_LENGTH) == - std::string(SdCardManager::SD_1_MOUNT_POINT)) { - if (!sdcMan->isSdCardMounted(sd::SLOT_0)) { - sif::warning << "PlocUpdater::getImageLocation: SD card 1 not mounted" << std::endl; - return SD_NOT_MOUNTED; - } - } else { - // update image not stored on SD card - } -#endif /* BOARD_TE0720 == 0 */ - - updateFile = std::string(reinterpret_cast(data), size); - - // Check if file exists - if (not std::filesystem::exists(updateFile)) { - return FILE_NOT_EXISTS; - } - return RETURN_OK; -} - -void PlocUpdater::stepSuccessfulReceived(ActionId_t actionId, uint8_t step) {} - -void PlocUpdater::stepFailedReceived(ActionId_t actionId, uint8_t step, ReturnValue_t returnCode) {} - -void PlocUpdater::dataReceived(ActionId_t actionId, const uint8_t* data, uint32_t size) {} - -void PlocUpdater::completionSuccessfulReceived(ActionId_t actionId) { - switch (pendingCommand) { - case (supv::UPDATE_AVAILABLE): - state = State::UPDATE_TRANSFER; - break; - case (supv::UPDATE_IMAGE_DATA): - if (remainingPackets == 0) { - packetsSent = 0; // Reset packets sent variable for next update sequence - state = State::UPDATE_VERIFY; - } else { - state = State::UPDATE_TRANSFER; - } - break; - case (supv::UPDATE_VERIFY): - triggerEvent(UPDATE_FINISHED); - state = State::IDLE; - pendingCommand = supv::NONE; - break; - default: - state = State::IDLE; - break; - } -} - -void PlocUpdater::completionFailedReceived(ActionId_t actionId, ReturnValue_t returnCode) { - switch (pendingCommand) { - case (supv::UPDATE_AVAILABLE): { - triggerEvent(UPDATE_AVAILABLE_FAILED); - break; - } - case (supv::UPDATE_IMAGE_DATA): { - triggerEvent(UPDATE_TRANSFER_FAILED, packetsSent); - break; - } - case (supv::UPDATE_VERIFY): { - triggerEvent(UPDATE_VERIFY_FAILED); - break; - } - default: - break; - } - state = State::IDLE; -} - -void PlocUpdater::commandUpdateAvailable() { - ReturnValue_t result = RETURN_OK; - - if (not std::filesystem::exists(updateFile)) { - triggerEvent(UPDATE_FILE_NOT_EXISTS, static_cast(state)); - state = State::IDLE; - return; - } - - std::ifstream file(updateFile, std::ifstream::binary); - file.seekg(0, file.end); - imageSize = static_cast(file.tellg()); - file.close(); - - numOfUpdatePackets = imageSize / MAX_SP_DATA; - if (imageSize % MAX_SP_DATA) { - numOfUpdatePackets++; - } - - remainingPackets = numOfUpdatePackets; - packetsSent = 0; - - calcImageCrc(); - - supv::UpdateInfo packet(supv::APID_UPDATE_AVAILABLE, static_cast(image), - static_cast(partition), imageSize, imageCrc, numOfUpdatePackets); - - result = - commandActionHelper.commandAction(objects::PLOC_SUPERVISOR_HANDLER, supv::UPDATE_AVAILABLE, - packet.getWholeData(), packet.getFullSize()); - if (result != RETURN_OK) { - sif::warning << "PlocUpdater::commandUpdateAvailable: Failed to send update available" - << " packet to supervisor handler" << std::endl; - triggerEvent(ACTION_COMMANDING_FAILED, result, supv::UPDATE_AVAILABLE); - state = State::IDLE; - pendingCommand = supv::NONE; - return; - } - - pendingCommand = supv::UPDATE_AVAILABLE; - state = State::COMMAND_EXECUTING; - return; -} - -void PlocUpdater::commandUpdatePacket() { - ReturnValue_t result = RETURN_OK; - uint16_t payloadLength = 0; - - if (not std::filesystem::exists(updateFile)) { - triggerEvent(UPDATE_FILE_NOT_EXISTS, static_cast(state), packetsSent); - state = State::IDLE; - return; - } - - std::ifstream file(updateFile, std::ifstream::binary); - file.seekg(packetsSent * MAX_SP_DATA, file.beg); - - if (remainingPackets == 1) { - payloadLength = imageSize - static_cast(file.tellg()); - } else { - payloadLength = MAX_SP_DATA; - } - - supv::UpdatePacket packet(payloadLength); - file.read(reinterpret_cast(packet.getDataFieldPointer()), payloadLength); - file.close(); - // sequence count of first packet is 1 - packet.setPacketSequenceCount((packetsSent + 1) & supv::SEQUENCE_COUNT_MASK); - if (numOfUpdatePackets > 1) { - adjustSequenceFlags(packet); - } - packet.makeCrc(); - - result = - commandActionHelper.commandAction(objects::PLOC_SUPERVISOR_HANDLER, supv::UPDATE_IMAGE_DATA, - packet.getWholeData(), packet.getFullSize()); - - if (result != RETURN_OK) { - sif::warning << "PlocUpdater::commandUpdateAvailable: Failed to send update" - << " packet to supervisor handler" << std::endl; - triggerEvent(ACTION_COMMANDING_FAILED, result, supv::UPDATE_IMAGE_DATA); - state = State::IDLE; - pendingCommand = supv::NONE; - return; - } - - remainingPackets--; - packetsSent++; - - pendingCommand = supv::UPDATE_IMAGE_DATA; - state = State::COMMAND_EXECUTING; -} - -void PlocUpdater::commandUpdateVerify() { - ReturnValue_t result = RETURN_OK; - - supv::UpdateInfo packet(supv::APID_UPDATE_VERIFY, static_cast(image), - static_cast(partition), imageSize, imageCrc, numOfUpdatePackets); - - result = commandActionHelper.commandAction(objects::PLOC_SUPERVISOR_HANDLER, supv::UPDATE_VERIFY, - packet.getWholeData(), packet.getFullSize()); - if (result != RETURN_OK) { - sif::warning << "PlocUpdater::commandUpdateAvailable: Failed to send update available" - << " packet to supervisor handler" << std::endl; - triggerEvent(ACTION_COMMANDING_FAILED, result, supv::UPDATE_VERIFY); - state = State::IDLE; - pendingCommand = supv::NONE; - return; - } - state = State::COMMAND_EXECUTING; - pendingCommand = supv::UPDATE_VERIFY; - return; -} - -void PlocUpdater::calcImageCrc() { - std::ifstream file(updateFile, std::ifstream::binary); - file.seekg(0, file.end); - uint32_t count; - uint32_t bit; - uint32_t remainder = INITIAL_REMAINDER_32; - char input; - for (count = 0; count < imageSize; count++) { - file.seekg(count, file.beg); - file.read(&input, 1); - remainder ^= (input << 16); - for (bit = 8; bit > 0; --bit) { - if (remainder & TOPBIT_32) { - remainder = (remainder << 1) ^ POLYNOMIAL_32; - } else { - remainder = (remainder << 1); - } - } - } - file.close(); - imageCrc = (remainder ^ FINAL_XOR_VALUE_32); -} - -void PlocUpdater::adjustSequenceFlags(supv::UpdatePacket& packet) { - if (packetsSent == 0) { - packet.setSequenceFlags(static_cast(supv::SequenceFlags::FIRST_PKT)); - } else if (remainingPackets == 1) { - packet.setSequenceFlags(static_cast(supv::SequenceFlags::LAST_PKT)); - } else { - packet.setSequenceFlags(static_cast(supv::SequenceFlags::CONTINUED_PKT)); - } -} diff --git a/linux/devices/ploc/PlocUpdater.h b/linux/devices/ploc/PlocUpdater.h deleted file mode 100644 index 1bb9a1bd..00000000 --- a/linux/devices/ploc/PlocUpdater.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef MISSION_DEVICES_PLOCUPDATER_H_ -#define MISSION_DEVICES_PLOCUPDATER_H_ - -#include - -#include "OBSWConfig.h" -#include "bsp_q7s/memory/SdCardManager.h" -#include "eive/definitions.h" -#include "fsfw/action/ActionHelper.h" -#include "fsfw/action/CommandActionHelper.h" -#include "fsfw/action/CommandsActionsIF.h" -#include "fsfw/action/HasActionsIF.h" -#include "fsfw/objectmanager/SystemObject.h" -#include "fsfw/returnvalues/HasReturnvaluesIF.h" -#include "fsfw/tasks/ExecutableObjectIF.h" -#include "fsfw/tmtcpacket/SpacePacket.h" -#include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" -#include "linux/fsfwconfig/objects/systemObjectList.h" - -/** - * @brief An object of this class can be used to perform the software updates of the PLOC. The - * software update will be read from one of the SD cards, split into multiple space - * packets and sent to the PlocSupervisorHandler. - * - * @details The MPSoC has two boot memories (NVM0 and NVM1) where each stores two images (Partition - * A and Partition B) - * - * @author J. Meier - */ -class PlocUpdater : public SystemObject, - public HasActionsIF, - public ExecutableObjectIF, - public HasReturnvaluesIF, - public CommandsActionsIF { - public: - static const ActionId_t UPDATE_A_UBOOT = 0; - static const ActionId_t UPDATE_A_BITSTREAM = 1; - static const ActionId_t UPDATE_A_LINUX = 2; - static const ActionId_t UPDATE_A_APP_SW = 3; - static const ActionId_t UPDATE_B_UBOOT = 4; - static const ActionId_t UPDATE_B_BITSTREAM = 5; - static const ActionId_t UPDATE_B_LINUX = 6; - static const ActionId_t UPDATE_B_APP_SW = 7; - - PlocUpdater(object_id_t objectId); - virtual ~PlocUpdater(); - - ReturnValue_t performOperation(uint8_t operationCode = 0) override; - ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size); - MessageQueueId_t getCommandQueue() const; - ReturnValue_t initialize() override; - MessageQueueIF* getCommandQueuePtr() override; - void stepSuccessfulReceived(ActionId_t actionId, uint8_t step) override; - void stepFailedReceived(ActionId_t actionId, uint8_t step, ReturnValue_t returnCode) override; - void dataReceived(ActionId_t actionId, const uint8_t* data, uint32_t size) override; - void completionSuccessfulReceived(ActionId_t actionId) override; - void completionFailedReceived(ActionId_t actionId, ReturnValue_t returnCode) override; - - private: - static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_UPDATER; - - //! [EXPORT] : [COMMENT] Updater is already performing an update - static const ReturnValue_t UPDATER_BUSY = MAKE_RETURN_CODE(0xA0); - //! [EXPORT] : [COMMENT] Received update command with invalid path string (too long). - static const ReturnValue_t NAME_TOO_LONG = MAKE_RETURN_CODE(0xA1); - //! [EXPORT] : [COMMENT] Received command to initiate update but SD card with update image not - //! mounted. - static const ReturnValue_t SD_NOT_MOUNTED = MAKE_RETURN_CODE(0xA2); - //! [EXPORT] : [COMMENT] Update file received with update command does not exist. - static const ReturnValue_t FILE_NOT_EXISTS = MAKE_RETURN_CODE(0xA3); - - static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_UPDATER; - - //! [EXPORT] : [COMMENT] Try to read update file but the file does not exist. - //! P1: Indicates in which state the file read fails - //! P2: During the update transfer the second parameter gives information about the number of - //! already sent packets - static const Event UPDATE_FILE_NOT_EXISTS = MAKE_EVENT(0, severity::LOW); - //! [EXPORT] : [COMMENT] Failed to send command to supervisor handler - //! P1: Return value of CommandActionHelper::commandAction - //! P2: Action ID of command to send - static const Event ACTION_COMMANDING_FAILED = MAKE_EVENT(1, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor handler replied action message indicating a command execution - //! failure of the update available command - static const Event UPDATE_AVAILABLE_FAILED = MAKE_EVENT(2, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor handler failed to transfer an update space packet. - //! P1: Parameter holds the number of update packets already sent (inclusive the failed packet) - static const Event UPDATE_TRANSFER_FAILED = MAKE_EVENT(3, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor failed to execute the update verify command. - static const Event UPDATE_VERIFY_FAILED = MAKE_EVENT(4, severity::LOW); - //! [EXPORT] : [COMMENT] MPSoC update successful completed - static const Event UPDATE_FINISHED = MAKE_EVENT(5, severity::INFO); - - static const uint32_t QUEUE_SIZE = config::PLOC_UPDATER_QUEUE_SIZE; - static const size_t MAX_PLOC_UPDATE_PATH = 50; - static const size_t SD_PREFIX_LENGTH = 8; - // Maximum size of update payload data per space packet (max size of space packet is 1024 bytes) - static const size_t MAX_SP_DATA = 1016; - - static const uint32_t TOPBIT_32 = (1 << 31); - static const uint32_t POLYNOMIAL_32 = 0x04C11DB7; - static const uint32_t INITIAL_REMAINDER_32 = 0xFFFFFFFF; - static const uint32_t FINAL_XOR_VALUE_32 = 0xFFFFFFFF; - - MessageQueueIF* commandQueue = nullptr; - -#ifdef XIPHOS_Q7S - SdCardManager* sdcMan = nullptr; -#endif - CommandActionHelper commandActionHelper; - - ActionHelper actionHelper; - - enum class State : uint8_t { - IDLE, - UPDATE_AVAILABLE, - UPDATE_TRANSFER, - UPDATE_VERIFY, - COMMAND_EXECUTING - }; - - State state = State::IDLE; - - ActionId_t pendingCommand = supv::NONE; - - enum class Image : uint8_t { NONE, A, B }; - - Image image = Image::NONE; - - enum class Partition : uint8_t { NONE, UBOOT, BITSTREAM, LINUX_OS, APP_SW }; - - Partition partition = Partition::NONE; - - uint32_t packetsSent = 0; - uint32_t remainingPackets = 0; - // Number of packets required to transfer the update image - uint32_t numOfUpdatePackets = 0; - - std::string updateFile; - uint32_t imageSize = 0; - uint32_t imageCrc = 0; - - void readCommandQueue(); - void doStateMachine(); - - /** - * @brief Extracts the path and name of the update image from the service 8 command data. - */ - ReturnValue_t getImageLocation(const uint8_t* data, size_t size); - - ReturnValue_t checkNameLength(size_t size); - - /** - * @brief Prepares and sends update available command to PLOC supervisor handler. - */ - void commandUpdateAvailable(); - - /** - * @brief Prepares and sends and update packet to the PLOC supervisor handler. - */ - void commandUpdatePacket(); - - /** - * @brief Prepares and sends the update verification packet to the PLOC supervisor handler. - */ - void commandUpdateVerify(); - - void calcImageCrc(); - - void adjustSequenceFlags(supv::UpdatePacket& packet); -}; - -#endif /* MISSION_DEVICES_PLOCUPDATER_H_ */ diff --git a/linux/fsfwconfig/OBSWConfig.h.in b/linux/fsfwconfig/OBSWConfig.h.in index bbf8da64..2ea69ea5 100644 --- a/linux/fsfwconfig/OBSWConfig.h.in +++ b/linux/fsfwconfig/OBSWConfig.h.in @@ -77,7 +77,7 @@ debugging. */ #define OBSW_ADD_MGT 0 #define OBSW_ADD_BPX_BATTERY_HANDLER 0 #define OBSW_ADD_STAR_TRACKER 0 -#define OBSW_ADD_PLOC_SUPERVISOR 0 +#define OBSW_ADD_PLOC_SUPERVISOR 1 #define OBSW_ADD_PLOC_MPSOC 1 #define OBSW_ADD_SUN_SENSORS 0 #define OBSW_ADD_ACS_BOARD 1 diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index ece0bf14..0f4e7e7f 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 181 translations. + * @brief Auto-generated event translation file. Contains 177 translations. * @details - * Generated on: 2022-03-28 12:48:26 + * Generated on: 2022-04-10 13:17:48 */ #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"; @@ -117,14 +118,9 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE"; const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE"; const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; +const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; -const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS"; -const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED"; -const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED"; -const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED"; -const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED"; -const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FAILED_STRING = "MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FINISHED_STRING = "MRAM_DUMP_FINISHED"; @@ -149,18 +145,18 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH"; const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS"; const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED"; const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED"; -const char *MPSOC_FLASH_WRITE_FAILED_STRING = "MPSOC_FLASH_WRITE_FAILED"; -const char *MPSOC_FLASH_WRITE_SUCCESSFUL_STRING = "MPSOC_FLASH_WRITE_SUCCESSFUL"; -const char *SENDING_COMMAND_FAILED_STRING = "SENDING_COMMAND_FAILED"; -const char *MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING = "MPSOC_HELPER_REQUESTING_REPLY_FAILED"; -const char *MPSOC_HELPER_READING_REPLY_FAILED_STRING = "MPSOC_HELPER_READING_REPLY_FAILED"; -const char *MISSING_ACK_STRING = "MISSING_ACK"; -const char *MISSING_EXE_STRING = "MISSING_EXE"; -const char *ACK_FAILURE_REPORT_STRING = "ACK_FAILURE_REPORT"; -const char *EXE_FAILURE_REPORT_STRING = "EXE_FAILURE_REPORT"; -const char *ACK_INVALID_APID_STRING = "ACK_INVALID_APID"; -const char *EXE_INVALID_APID_STRING = "EXE_INVALID_APID"; -const char *MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING = "MPSOC_HELPER_SEQ_CNT_MISMATCH"; +const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; +const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; +const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; +const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; +const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; +const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; +const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; +const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; +const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; +const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; +const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; 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"; @@ -379,6 +375,8 @@ const char *translateEvents(Event event) { return MPSOC_HANDLER_CRC_FAILURE_STRING; case (11105): return MPSOC_HANDLER_SEQ_CNT_MISMATCH_STRING; + case (11106): + return MPSOC_SHUTDOWN_FAILED_STRING; case (11201): return SELF_TEST_I2C_FAILURE_STRING; case (11202): @@ -409,22 +407,12 @@ const char *translateEvents(Event event) { return SUPV_EXE_FAILURE_STRING; case (11504): return SUPV_CRC_FAILURE_EVENT_STRING; + case (11505): + return SUPV_HELPER_EXECUTING_STRING; case (11600): return SANITIZATION_FAILED_STRING; case (11601): return MOUNTED_SD_CARD_STRING; - case (11700): - return UPDATE_FILE_NOT_EXISTS_STRING; - case (11701): - return ACTION_COMMANDING_FAILED_STRING; - case (11702): - return UPDATE_AVAILABLE_FAILED_STRING; - case (11703): - return UPDATE_TRANSFER_FAILED_STRING; - case (11704): - return UPDATE_VERIFY_FAILED_STRING; - case (11705): - return UPDATE_FINISHED_STRING; case (11800): return SEND_MRAM_DUMP_FAILED_STRING; case (11801): @@ -474,29 +462,29 @@ const char *translateEvents(Event event) { case (12016): return STR_HELPER_REQUESTING_MSG_FAILED_STRING; case (12100): - return MPSOC_FLASH_WRITE_FAILED_STRING; + return SUPV_UPDATE_FAILED_STRING; case (12101): - return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING; + return SUPV_UPDATE_SUCCESSFUL_STRING; case (12102): - return SENDING_COMMAND_FAILED_STRING; + return TERMINATED_UPDATE_PROCEDURE_STRING; case (12103): - return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING; + return SUPV_SENDING_COMMAND_FAILED_STRING; case (12104): - return MPSOC_HELPER_READING_REPLY_FAILED_STRING; + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12105): - return MISSING_ACK_STRING; + return SUPV_HELPER_READING_REPLY_FAILED_STRING; case (12106): - return MISSING_EXE_STRING; + return SUPV_MISSING_ACK_STRING; case (12107): - return ACK_FAILURE_REPORT_STRING; + return SUPV_MISSING_EXE_STRING; case (12108): - return EXE_FAILURE_REPORT_STRING; + return SUPV_ACK_FAILURE_REPORT_STRING; case (12109): - return ACK_INVALID_APID_STRING; + return SUPV_EXE_FAILURE_REPORT_STRING; case (12110): - return EXE_INVALID_APID_STRING; + return SUPV_ACK_INVALID_APID_STRING; case (12111): - return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING; + return SUPV_EXE_INVALID_APID_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; case (12201): diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index 32799af0..b041aa1d 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -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-10 13:17:55 */ #include "translateObjects.h" diff --git a/tmtc b/tmtc index d8cff25c..ec852631 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit d8cff25c4a5383e918c0a10b36ff455616fb6e8b +Subproject commit ec8526314d662dc86ec9cd1d952911037d275b4e From 05a85ab8a1acbe85ba8917826390fca6d6c77db6 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 11 Apr 2022 16:52:50 +0200 Subject: [PATCH 008/115] implemeted ICD changes --- .../PlocSupervisorDefinitions.h | 352 ++++++++++-------- .../devicedefinitions/SupvReturnValuesIF.h | 59 +++ linux/devices/ploc/PlocSupervisorHandler.cpp | 50 ++- 3 files changed, 280 insertions(+), 181 deletions(-) create mode 100644 linux/devices/devicedefinitions/SupvReturnValuesIF.h diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index ed5ed19b..8360c61d 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -7,6 +7,7 @@ #include #include #include + #include "linux/devices/devicedefinitions/SupvReturnValuesIF.h" namespace supv { @@ -54,12 +55,13 @@ static const DeviceCommandId_t REQUEST_LOGGING_DATA = 38; static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40; static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41; static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 43; -static const DeviceCommandId_t PREPARE_UPDATE = 44; static const DeviceCommandId_t START_MPSOC_QUIET = 45; static const DeviceCommandId_t SET_SHUTDOWN_TIMEOUT = 46; static const DeviceCommandId_t FACTORY_FLASH = 47; static const DeviceCommandId_t PERFORM_UPDATE = 48; static const DeviceCommandId_t TERMINATE_SUPV_HELPER = 49; +static const DeviceCommandId_t ENABLE_AUTO_TM = 50; +static const DeviceCommandId_t DISABLE_AUTO_TM = 51; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -70,8 +72,7 @@ static const DeviceCommandId_t LATCHUP_REPORT = 54; static const uint16_t SIZE_ACK_REPORT = 14; static const uint16_t SIZE_EXE_REPORT = 14; -// static const uint16_t SIZE_HK_REPORT = 52; -static const uint16_t SIZE_HK_REPORT = 56; +static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; @@ -115,6 +116,7 @@ static const uint16_t APID_WTD_ENABLE = 0xC0; static const uint16_t APID_WTD_CONFIG_TIMEOUT = 0xC1; static const uint16_t APID_SET_TIME_REF = 0xC2; static const uint16_t APID_DISABLE_HK = 0xC3; +static const uint16_t APID_AUTO_TM = 0xC5; static const uint16_t APID_ENABLE_LATCHUP_ALERT = 0xD0; static const uint16_t APID_DISABLE_LATCHUP_ALERT = 0xD1; static const uint16_t APID_AUTO_CALIBRATE_ALERT = 0xD2; @@ -173,7 +175,7 @@ enum PoolIds : lp_id_t { NUM_TMS, TEMP_PS, TEMP_PL, - SOC_STATE, + HK_SOC_STATE, NVM0_1_STATE, NVM3_STATE, MISSION_IO_STATE, @@ -183,8 +185,8 @@ enum PoolIds : lp_id_t { UPTIME, CPULOAD, AVAILABLEHEAP, - BOOT_SIGNAL, - RESET_COUNTER, + BR_SOC_STATE, + POWER_CYCLES, BOOT_AFTER_MS, BOOT_TIMEOUT_MS, ACTIVE_NVM, @@ -209,7 +211,7 @@ enum PoolIds : lp_id_t { LATCHUP_RPT_TIME_MON, LATCHUP_RPT_TIME_YEAR, LATCHUP_RPT_TIME_MSEC, - LATCHUP_RPT_TIME_USEC, + LATCHUP_RPT_IS_SET, }; static const uint8_t HK_SET_ENTRIES = 13; @@ -338,8 +340,8 @@ class SetTimeRef : public SpacePacket { sizeof(time->minute), SerializeIF::Endianness::BIG); uint8_t hour = static_cast(time->hour); serializedSize = 0; - SerializeAdapter::serialize(&hour, &dataFieldPtr, &serializedSize, - sizeof(time->hour), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&hour, &dataFieldPtr, &serializedSize, sizeof(time->hour), + SerializeIF::Endianness::BIG); uint8_t day = static_cast(time->day); serializedSize = 0; SerializeAdapter::serialize(&day, &dataFieldPtr, &serializedSize, sizeof(time->day), @@ -350,8 +352,8 @@ class SetTimeRef : public SpacePacket { sizeof(time->month), SerializeIF::Endianness::BIG); uint8_t year = static_cast(time->year - 1900); serializedSize = 0; - SerializeAdapter::serialize(&year, &dataFieldPtr, &serializedSize, - sizeof(time->year), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&year, &dataFieldPtr, &serializedSize, sizeof(time->year), + SerializeIF::Endianness::BIG); serializedSize = 0; /* Calculate crc */ uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -385,8 +387,8 @@ class SetBootTimeout : public SpacePacket { void initPacket() { size_t serializedSize = 0; uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, - sizeof(timeout), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, sizeof(timeout), + SerializeIF::Endianness::BIG); /* Calculate crc */ uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); @@ -547,8 +549,8 @@ class WatchdogsConfigTimeout : public SpacePacket { SerializeAdapter::serialize(&watchdog, &dataFieldPtr, &serializedSize, sizeof(watchdog), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, - sizeof(timeout), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, sizeof(timeout), + SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); @@ -1308,38 +1310,14 @@ class FactoryReset : public SpacePacket { } }; -class SetShutdownTimeout : public SpacePacket { - public: - SetShutdownTimeout(uint32_t timeout) - : SpacePacket(0, true, APID_SET_SHUTDOWN_TIMEOUT, DEFAULT_SEQUENCE_COUNT), timeout(timeout) { - initPacket(); - } - - private: - uint16_t PACKET_LEN = 1; // uint32_t timeout + CRC - 1 - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - uint32_t timeout = 0; - uint8_t crcOffset = 0; - - void initPacket() { - uint8_t* dataFieldPtr = this->localData.fields.buffer; - size_t serializedSize = 0; - SerializeAdapter::serialize(&timeout, dataFieldPtr, &serializedSize, - sizeof(timeout), SerializeIF::Endianness::BIG); - this->setPacketDataLength(PACKET_LEN); - serializedSize = 0; - uint16_t crc = - CRC::crc16ccitt(this->localData.byteStream, sizeof(CCSDSPrimaryHeader) + PACKET_LEN - 1); - uint8_t* crcPos = this->localData.fields.buffer + crcOffset; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - class SupvTcSpacePacket : public SpacePacket { public: - SupvTcSpacePacket(size_t payloadDataLen, uint16_t apid) + /** + * @brief Constructor + * + * @param payloadDataLen Length of data field without CRC + */ + SupvTcSpacePacket(uint16_t payloadDataLen, uint16_t apid) : SpacePacket(payloadDataLen + 1, true, apid, DEFAULT_SEQUENCE_COUNT), payloadDataLen(payloadDataLen) {} @@ -1360,6 +1338,27 @@ class SupvTcSpacePacket : public SpacePacket { size_t payloadDataLen = 0; }; +class SetShutdownTimeout : public SupvTcSpacePacket { + public: + SetShutdownTimeout(uint32_t timeout) + : SupvTcSpacePacket(PACKET_LEN, APID_SET_SHUTDOWN_TIMEOUT), timeout(timeout) { + initPacket(); + makeCrc(); + } + + private: + static const uint16_t PACKET_LEN = 4; // uint32_t timeout + + uint32_t timeout = 0; + + void initPacket() { + uint8_t* dataFieldPtr = this->localData.fields.buffer; + size_t serializedSize = 0; + SerializeAdapter::serialize(&timeout, dataFieldPtr, &serializedSize, sizeof(timeout), + SerializeIF::Endianness::BIG); + } +}; + /** * @brief Command to request CRC over memory region of the supervisor. */ @@ -1392,8 +1391,8 @@ class CheckMemory : public SupvTcSpacePacket { void initPacket() { size_t serializedSize = 0; uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&memoryId, &dataFieldPtr, &serializedSize, sizeof(memoryId), - SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&memoryId, &dataFieldPtr, &serializedSize, + sizeof(memoryId), SerializeIF::Endianness::BIG); serializedSize = 0; SerializeAdapter::serialize(&n, &dataFieldPtr, &serializedSize, sizeof(n), SerializeIF::Endianness::BIG); @@ -1401,8 +1400,8 @@ class CheckMemory : public SupvTcSpacePacket { SerializeAdapter::serialize(&startAddress, &dataFieldPtr, &serializedSize, sizeof(startAddress), SerializeIF::Endianness::BIG); serializedSize = 0; - SerializeAdapter::serialize(&length, &dataFieldPtr, &serializedSize, - sizeof(length), SerializeIF::Endianness::BIG); + SerializeAdapter::serialize(&length, &dataFieldPtr, &serializedSize, sizeof(length), + SerializeIF::Endianness::BIG); } }; @@ -1469,109 +1468,6 @@ class WriteMemory : public SupvTcSpacePacket { } }; -/** - * @brief This dataset stores the boot status report of the supervisor. - */ -class BootStatusReport : public StaticLocalDataSet { - public: - BootStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, BOOT_REPORT_SET_ID) {} - - BootStatusReport(object_id_t objectId) - : StaticLocalDataSet(sid_t(objectId, BOOT_REPORT_SET_ID)) {} - - /** Information about boot status of MPSoC */ - lp_var_t bootSignal = lp_var_t(sid.objectId, PoolIds::BOOT_SIGNAL, this); - lp_var_t resetCounter = lp_var_t(sid.objectId, PoolIds::RESET_COUNTER, this); - /** Time the MPSoC needs for last boot */ - lp_var_t bootAfterMs = lp_var_t(sid.objectId, PoolIds::BOOT_AFTER_MS, this); - /** The currently set boot timeout */ - lp_var_t bootTimeoutMs = - lp_var_t(sid.objectId, PoolIds::BOOT_TIMEOUT_MS, this); - lp_var_t activeNvm = lp_var_t(sid.objectId, PoolIds::ACTIVE_NVM, this); - /** States of the boot partition pins */ - lp_var_t bp0State = lp_var_t(sid.objectId, PoolIds::BP0_STATE, this); - lp_var_t bp1State = lp_var_t(sid.objectId, PoolIds::BP1_STATE, this); - lp_var_t bp2State = lp_var_t(sid.objectId, PoolIds::BP2_STATE, this); - lp_var_t bootState = lp_var_t(sid.objectId, PoolIds::BOOT_STATE, this); - lp_var_t bootCycles = lp_var_t(sid.objectId, PoolIds::BOOT_CYCLES, this); -}; - -/** - * @brief This dataset stores the housekeeping data of the supervisor. - */ -class HkSet : public StaticLocalDataSet { - public: - HkSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, HK_SET_ID) {} - - HkSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, HK_SET_ID)) {} - - lp_var_t tempPs = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); - lp_var_t tempPl = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); - lp_var_t tempSup = lp_var_t(sid.objectId, PoolIds::TEMP_SUP, this); - lp_var_t uptime = lp_var_t(sid.objectId, PoolIds::UPTIME, this); - lp_var_t cpuLoad = lp_var_t(sid.objectId, PoolIds::CPULOAD, this); - lp_var_t availableHeap = lp_var_t(sid.objectId, PoolIds::AVAILABLEHEAP, this); - lp_var_t numTcs = lp_var_t(sid.objectId, PoolIds::NUM_TCS, this); - lp_var_t numTms = lp_var_t(sid.objectId, PoolIds::NUM_TMS, this); - lp_var_t socState = lp_var_t(sid.objectId, PoolIds::SOC_STATE, this); - lp_var_t nvm0_1_state = lp_var_t(sid.objectId, PoolIds::NVM0_1_STATE, this); - lp_var_t nvm3_state = lp_var_t(sid.objectId, PoolIds::NVM3_STATE, this); - lp_var_t missionIoState = - lp_var_t(sid.objectId, PoolIds::MISSION_IO_STATE, this); - lp_var_t fmcState = lp_var_t(sid.objectId, PoolIds::FMC_STATE, this); -}; - -/** - * @brief This dataset stores the last requested latchup status report. - */ -class LatchupStatusReport : public StaticLocalDataSet { - public: - LatchupStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, LATCHUP_RPT_ID) {} - - LatchupStatusReport(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LATCHUP_RPT_ID)) {} - - lp_var_t id = lp_var_t(sid.objectId, PoolIds::LATCHUP_ID, this); - lp_var_t cnt0 = lp_var_t(sid.objectId, PoolIds::CNT0, this); - lp_var_t cnt1 = lp_var_t(sid.objectId, PoolIds::CNT1, this); - lp_var_t cnt2 = lp_var_t(sid.objectId, PoolIds::CNT2, this); - lp_var_t cnt3 = lp_var_t(sid.objectId, PoolIds::CNT3, this); - lp_var_t cnt4 = lp_var_t(sid.objectId, PoolIds::CNT4, this); - lp_var_t cnt5 = lp_var_t(sid.objectId, PoolIds::CNT5, this); - lp_var_t cnt6 = lp_var_t(sid.objectId, PoolIds::CNT6, this); - lp_var_t timeMsec = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MSEC, this); - lp_var_t timeSec = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_SEC, this); - lp_var_t timeMin = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MIN, this); - lp_var_t timeHour = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_HOUR, this); - lp_var_t timeDay = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_DAY, this); - lp_var_t timeMon = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MON, this); - lp_var_t timeYear = - lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_YEAR, this); -}; - -/** - * @brief Class for handling tm replies of the supervisor. - */ -class TmPacket : public SpacePacket { - public: - /** - * @brief Constructor creates idle packet and sets length field to maximum allowed size. - */ - TmPacket() : SpacePacket(PACKET_MAX_SIZE) {} - - ReturnValue_t checkCrc() { - uint8_t* crcPtr = this->getPacketData() + this->getPacketDataLength() - 1; - uint16_t receivedCrc = *(crcPtr) << 8 | *(crcPtr + 1); - uint16_t recalculatedCrc = - CRC::crc16ccitt(this->localData.byteStream, this->getFullSize() - CRC_SIZE); - if (recalculatedCrc != receivedCrc) { - return SupvReturnValuesIF::CRC_FAILURE; - } - return HasReturnvaluesIF::RETURN_OK; - } -}; - /** * @brief This class can be used to package the update available or update verify command. */ @@ -1611,6 +1507,142 @@ class EraseMemory : public SupvTcSpacePacket { } }; +/** + * @brief This class creates the space packet to enable the auto TM generation + */ +class EnableAutoTm : public SupvTcSpacePacket { + public: + EnableAutoTm() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_AUTO_TM) { + *(this->localData.fields.buffer) = ENABLE; + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field + static const uint8_t ENABLE = 1; +}; + +/** + * @brief This class creates the space packet to disable the auto TM generation + */ +class DisableAutoTm : public SupvTcSpacePacket { + public: + DisableAutoTm() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_AUTO_TM) { + *(this->localData.fields.buffer) = DISABLE; + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field + static const uint8_t DISABLE = 0; +}; + +/** + * @brief Class for handling tm replies of the supervisor. + */ +class TmPacket : public SpacePacket { + public: + /** + * @brief Constructor creates idle packet and sets length field to maximum allowed size. + */ + TmPacket() : SpacePacket(PACKET_MAX_SIZE) {} + + ReturnValue_t checkCrc() { + uint8_t* crcPtr = this->getPacketData() + this->getPacketDataLength() - 1; + uint16_t receivedCrc = *(crcPtr) << 8 | *(crcPtr + 1); + uint16_t recalculatedCrc = + CRC::crc16ccitt(this->localData.byteStream, this->getFullSize() - CRC_SIZE); + if (recalculatedCrc != receivedCrc) { + return SupvReturnValuesIF::CRC_FAILURE; + } + return HasReturnvaluesIF::RETURN_OK; + } +}; + +/** + * @brief This dataset stores the boot status report of the supervisor. + */ +class BootStatusReport : public StaticLocalDataSet { + public: + BootStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, BOOT_REPORT_SET_ID) {} + + BootStatusReport(object_id_t objectId) + : StaticLocalDataSet(sid_t(objectId, BOOT_REPORT_SET_ID)) {} + + /** Information about boot status of MPSoC */ + lp_var_t socState = lp_var_t(sid.objectId, PoolIds::BR_SOC_STATE, this); + lp_var_t powerCycles = lp_var_t(sid.objectId, PoolIds::POWER_CYCLES, this); + /** Time the MPSoC needs for last boot */ + lp_var_t bootAfterMs = lp_var_t(sid.objectId, PoolIds::BOOT_AFTER_MS, this); + /** The currently set boot timeout */ + lp_var_t bootTimeoutMs = + lp_var_t(sid.objectId, PoolIds::BOOT_TIMEOUT_MS, this); + lp_var_t activeNvm = lp_var_t(sid.objectId, PoolIds::ACTIVE_NVM, this); + /** States of the boot partition pins */ + lp_var_t bp0State = lp_var_t(sid.objectId, PoolIds::BP0_STATE, this); + lp_var_t bp1State = lp_var_t(sid.objectId, PoolIds::BP1_STATE, this); + lp_var_t bp2State = lp_var_t(sid.objectId, PoolIds::BP2_STATE, this); + lp_var_t bootState = lp_var_t(sid.objectId, PoolIds::BOOT_STATE, this); + lp_var_t bootCycles = lp_var_t(sid.objectId, PoolIds::BOOT_CYCLES, this); +}; + +/** + * @brief This dataset stores the housekeeping data of the supervisor. + */ +class HkSet : public StaticLocalDataSet { + public: + HkSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, HK_SET_ID) {} + + HkSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, HK_SET_ID)) {} + + lp_var_t tempPs = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); + lp_var_t tempPl = lp_var_t(sid.objectId, PoolIds::TEMP_PS, this); + lp_var_t tempSup = lp_var_t(sid.objectId, PoolIds::TEMP_SUP, this); + lp_var_t uptime = lp_var_t(sid.objectId, PoolIds::UPTIME, this); + lp_var_t cpuLoad = lp_var_t(sid.objectId, PoolIds::CPULOAD, this); + lp_var_t availableHeap = lp_var_t(sid.objectId, PoolIds::AVAILABLEHEAP, this); + lp_var_t numTcs = lp_var_t(sid.objectId, PoolIds::NUM_TCS, this); + lp_var_t numTms = lp_var_t(sid.objectId, PoolIds::NUM_TMS, this); + lp_var_t socState = lp_var_t(sid.objectId, PoolIds::HK_SOC_STATE, this); + lp_var_t nvm0_1_state = lp_var_t(sid.objectId, PoolIds::NVM0_1_STATE, this); + lp_var_t nvm3_state = lp_var_t(sid.objectId, PoolIds::NVM3_STATE, this); + lp_var_t missionIoState = + lp_var_t(sid.objectId, PoolIds::MISSION_IO_STATE, this); + lp_var_t fmcState = lp_var_t(sid.objectId, PoolIds::FMC_STATE, this); +}; + +/** + * @brief This dataset stores the last requested latchup status report. + */ +class LatchupStatusReport : public StaticLocalDataSet { + public: + LatchupStatusReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, LATCHUP_RPT_ID) {} + + LatchupStatusReport(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LATCHUP_RPT_ID)) {} + + lp_var_t id = lp_var_t(sid.objectId, PoolIds::LATCHUP_ID, this); + lp_var_t cnt0 = lp_var_t(sid.objectId, PoolIds::CNT0, this); + lp_var_t cnt1 = lp_var_t(sid.objectId, PoolIds::CNT1, this); + lp_var_t cnt2 = lp_var_t(sid.objectId, PoolIds::CNT2, this); + lp_var_t cnt3 = lp_var_t(sid.objectId, PoolIds::CNT3, this); + lp_var_t cnt4 = lp_var_t(sid.objectId, PoolIds::CNT4, this); + lp_var_t cnt5 = lp_var_t(sid.objectId, PoolIds::CNT5, this); + lp_var_t cnt6 = lp_var_t(sid.objectId, PoolIds::CNT6, this); + lp_var_t timeMsec = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MSEC, this); + lp_var_t timeSec = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_SEC, this); + lp_var_t timeMin = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MIN, this); + lp_var_t timeHour = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_HOUR, this); + lp_var_t timeDay = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_DAY, this); + lp_var_t timeMon = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_MON, this); + lp_var_t timeYear = + lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_TIME_YEAR, this); + lp_var_t isSet = lp_var_t(sid.objectId, PoolIds::LATCHUP_RPT_IS_SET, this); + + static const uint8_t IS_SET_BIT_POS = 15; +}; + class UpdateStatusReport : public TmPacket { public: UpdateStatusReport() : TmPacket() {} @@ -1639,19 +1671,15 @@ class UpdateStatusReport : public TmPacket { } ReturnValue_t verifycrc(uint16_t goodCrc) const { - if (crc != goodCrc) { - return SupvReturnValuesIF::UPDATE_CRC_FAILURE; - } - return HasReturnvaluesIF::RETURN_OK; + if (crc != goodCrc) { + return SupvReturnValuesIF::UPDATE_CRC_FAILURE; + } + return HasReturnvaluesIF::RETURN_OK; } - uint16_t getCrc() const { - return crc; - } + uint16_t getCrc() const { return crc; } - uint16_t getNominalSize() const { - return FULL_SIZE; - } + uint16_t getNominalSize() const { return FULL_SIZE; } private: // Nominal size of the space packet diff --git a/linux/devices/devicedefinitions/SupvReturnValuesIF.h b/linux/devices/devicedefinitions/SupvReturnValuesIF.h new file mode 100644 index 00000000..39fa4554 --- /dev/null +++ b/linux/devices/devicedefinitions/SupvReturnValuesIF.h @@ -0,0 +1,59 @@ +#ifndef SUPV_RETURN_VALUES_IF_H_ +#define SUPV_RETURN_VALUES_IF_H_ + +#include "fsfw/returnvalues/HasReturnvaluesIF.h" + +class SupvReturnValuesIF { + public: + static const uint8_t INTERFACE_ID = CLASS_ID::SUPV_RETURN_VALUES_IF; + + //! [EXPORT] : [COMMENT] Space Packet received from PLOC supervisor has invalid CRC + static const ReturnValue_t CRC_FAILURE = MAKE_RETURN_CODE(0xA0); + //! [EXPORT] : [COMMENT] Received ACK failure reply from PLOC supervisor + static const ReturnValue_t RECEIVED_ACK_FAILURE = MAKE_RETURN_CODE(0xA1); + //! [EXPORT] : [COMMENT] Received execution failure reply from PLOC supervisor + static const ReturnValue_t RECEIVED_EXE_FAILURE = MAKE_RETURN_CODE(0xA2); + //! [EXPORT] : [COMMENT] Received space packet with invalid APID from PLOC supervisor + static const ReturnValue_t INVALID_APID = MAKE_RETURN_CODE(0xA3); + //! [EXPORT] : [COMMENT] Failed to read current system time + static const ReturnValue_t GET_TIME_FAILURE = MAKE_RETURN_CODE(0xA4); + //! [EXPORT] : [COMMENT] Received command with invalid watchdog parameter. Valid watchdogs are 0 + //! for PS, 1 for PL and 2 for INT + static const ReturnValue_t INVALID_WATCHDOG = MAKE_RETURN_CODE(0xA5); + //! [EXPORT] : [COMMENT] Received watchdog timeout config command with invalid timeout. Valid + //! timeouts must be in the range between 1000 and 360000 ms. + static const ReturnValue_t INVALID_WATCHDOG_TIMEOUT = MAKE_RETURN_CODE(0xA6); + //! [EXPORT] : [COMMENT] Received latchup config command with invalid latchup ID + static const ReturnValue_t INVALID_LATCHUP_ID = MAKE_RETURN_CODE(0xA7); + //! [EXPORT] : [COMMENT] Received set adc sweep period command with invalid sweep period. Must be + //! larger than 21. + static const ReturnValue_t SWEEP_PERIOD_TOO_SMALL = MAKE_RETURN_CODE(0xA8); + //! [EXPORT] : [COMMENT] Receive auto EM test command with invalid test param. Valid params are 1 + //! and 2. + static const ReturnValue_t INVALID_TEST_PARAM = MAKE_RETURN_CODE(0xA9); + //! [EXPORT] : [COMMENT] Returned when scanning for MRAM dump packets failed. + static const ReturnValue_t MRAM_PACKET_PARSING_FAILURE = MAKE_RETURN_CODE(0xAA); + //! [EXPORT] : [COMMENT] 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) + static const ReturnValue_t INVALID_MRAM_ADDRESSES = MAKE_RETURN_CODE(0xAB); + //! [EXPORT] : [COMMENT] Expect reception of an MRAM dump packet but received space packet with + //! other apid. + static const ReturnValue_t NO_MRAM_PACKET = MAKE_RETURN_CODE(0xAC); + //! [EXPORT] : [COMMENT] Path to PLOC directory on SD card does not exist + static const ReturnValue_t PATH_DOES_NOT_EXIST = MAKE_RETURN_CODE(0xAD); + //! [EXPORT] : [COMMENT] MRAM dump file does not exists. The file should actually already have + //! been created with the reception of the first dump packet. + static const ReturnValue_t MRAM_FILE_NOT_EXISTS = MAKE_RETURN_CODE(0xAE); + //! [EXPORT] : [COMMENT] Received action command has invalid length + static const ReturnValue_t INVALID_LENGTH = MAKE_RETURN_CODE(0xAF); + //! [EXPORT] : [COMMENT] Filename too long + static const ReturnValue_t FILENAME_TOO_LONG = MAKE_RETURN_CODE(0xB0); + //! [EXPORT] : [COMMENT] Received update status report with invalid packet length field + static const ReturnValue_t UPDATE_STATUS_REPORT_INVALID_LENGTH = MAKE_RETURN_CODE(0xB1); + //! [EXPORT] : [COMMENT] Update status report does not contain expected CRC. There might be a bit flip in the update memory region. + static const ReturnValue_t UPDATE_CRC_FAILURE = MAKE_RETURN_CODE(0xB2); + //! [EXPORT] : [COMMENT] Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command) + static const ReturnValue_t SUPV_HELPER_EXECUTING = MAKE_RETURN_CODE(0xB3); +}; + +#endif /* SUPV_RETURN_VALUES_IF_H_ */ diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 1825a01b..36cc6053 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -326,11 +326,6 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } - case (supv::PREPARE_UPDATE): { - prepareEmptyCmd(supv::APID_PREPARE_UPDATE); - result = RETURN_OK; - break; - } case (supv::START_MPSOC_QUIET): { prepareEmptyCmd(supv::APID_START_MPSOC_QUIET); result = RETURN_OK; @@ -346,6 +341,18 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } + case (supv::ENABLE_AUTO_TM): { + supv::EnableAutoTm packet; + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case (supv::DISABLE_AUTO_TM): { + supv::DisableAutoTm packet; + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } default: sif::debug << "PlocSupervisorHandler::buildCommandFromCommand: Command not implemented" << std::endl; @@ -401,10 +408,11 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_MIRROR); this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_CIRCULAR); this->insertInCommandMap(supv::CAN_LOOPBACK_TEST); - this->insertInCommandMap(supv::PREPARE_UPDATE); this->insertInCommandMap(supv::START_MPSOC_QUIET); this->insertInCommandMap(supv::SET_SHUTDOWN_TIMEOUT); this->insertInCommandMap(supv::FACTORY_FLASH); + this->insertInCommandMap(supv::ENABLE_AUTO_TM); + this->insertInCommandMap(supv::DISABLE_AUTO_TM); this->insertInCommandAndReplyMap(supv::FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(supv::CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(supv::ACK_REPORT, 3, nullptr, supv::SIZE_ACK_REPORT); @@ -527,7 +535,7 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::NUM_TMS, new PoolEntry({0})); localDataPoolMap.emplace(supv::TEMP_PS, new PoolEntry({0})); localDataPoolMap.emplace(supv::TEMP_PL, new PoolEntry({0})); - localDataPoolMap.emplace(supv::SOC_STATE, new PoolEntry({0})); + localDataPoolMap.emplace(supv::HK_SOC_STATE, new PoolEntry({0})); localDataPoolMap.emplace(supv::NVM0_1_STATE, new PoolEntry({0})); localDataPoolMap.emplace(supv::NVM3_STATE, new PoolEntry({0})); localDataPoolMap.emplace(supv::MISSION_IO_STATE, new PoolEntry({0})); @@ -537,8 +545,8 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::CPULOAD, new PoolEntry({0})); localDataPoolMap.emplace(supv::AVAILABLEHEAP, new PoolEntry({0})); - localDataPoolMap.emplace(supv::BOOT_SIGNAL, new PoolEntry({0})); - localDataPoolMap.emplace(supv::RESET_COUNTER, new PoolEntry({0})); + localDataPoolMap.emplace(supv::BR_SOC_STATE, new PoolEntry({0})); + localDataPoolMap.emplace(supv::POWER_CYCLES, new PoolEntry({0})); localDataPoolMap.emplace(supv::BOOT_AFTER_MS, new PoolEntry({0})); localDataPoolMap.emplace(supv::BOOT_TIMEOUT_MS, new PoolEntry({0})); localDataPoolMap.emplace(supv::ACTIVE_NVM, new PoolEntry({0})); @@ -561,6 +569,7 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_DAY, new PoolEntry({0})); localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_MON, new PoolEntry({0})); localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_YEAR, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_RPT_IS_SET, new PoolEntry({0})); return HasReturnvaluesIF::RETURN_OK; } @@ -672,10 +681,11 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case supv::FACTORY_RESET_CLEAR_CIRCULAR: case supv::REQUEST_LOGGING_DATA: case supv::DISABLE_PERIOIC_HK_TRANSMISSION: - case supv::PREPARE_UPDATE: case supv::START_MPSOC_QUIET: case supv::SET_SHUTDOWN_TIMEOUT: case supv::FACTORY_FLASH: + case supv::ENABLE_AUTO_TM: + case supv::DISABLE_AUTO_TM: enabledReplies = 2; break; default: @@ -893,9 +903,9 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) } uint16_t offset = supv::DATA_FIELD_OFFSET; - bootStatusReport.bootSignal = *(data + offset); + bootStatusReport.socState = *(data + offset); offset += 1; - bootStatusReport.resetCounter = *(data + offset); + bootStatusReport.powerCycles = *(data + offset); offset += 1; bootStatusReport.bootAfterMs = *(data + offset) << 24 | *(data + offset + 1) << 16 | *(data + offset + 2) << 8 | *(data + offset + 3); @@ -918,10 +928,10 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) nextReplyId = supv::EXE_REPORT; #if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_PLOC_SUPERVISOR == 1 - sif::info << "PlocSupervisorHandler::handleBootStatusReport: Boot signal: " - << static_cast(bootStatusReport.bootSignal.value) << std::endl; - sif::info << "PlocSupervisorHandler::handleBootStatusReport: Reset counter: " - << static_cast(bootStatusReport.resetCounter.value) << std::endl; + sif::info << "PlocSupervisorHandler::handleBootStatusReport: SoC State: " + << static_cast(bootStatusReport.socState.value) << std::endl; + sif::info << "PlocSupervisorHandler::handleBootStatusReport: Power Cycles: " + << static_cast(bootStatusReport.powerCycles.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootAfterMs: " << bootStatusReport.bootAfterMs << " ms" << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: BootTimeoutMs: " << std::dec @@ -971,7 +981,9 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da offset += 2; latchupStatusReport.cnt6 = *(data + offset) << 8 | *(data + offset + 1); offset += 2; - latchupStatusReport.timeMsec = (*(data + offset) << 8 | *(data + offset + 1)) & 0x7FFF; + uint16_t msec = *(data + offset) << 8 | *(data + offset + 1); + latchupStatusReport.isSet = msec >> supv::LatchupStatusReport::IS_SET_BIT_POS; + latchupStatusReport.timeMsec = msec & (~(1 << latchupStatusReport.IS_SET_BIT_POS)); offset += 2; latchupStatusReport.timeSec = *(data + offset); offset += 1; @@ -1018,8 +1030,8 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da << static_cast(latchupStatusReport.timeYear.value) << std::endl; sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: Msec: " << static_cast(latchupStatusReport.timeMsec.value) << std::endl; - sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: isSet: 0x" << std::hex - << latchupStatusReport.timeMsec << std::dec << std::endl; + sif::info << "PlocSupervisorHandler::handleLatchupStatusReport: isSet: " + << static_cast(latchupStatusReport.isSet.value) << std::endl; #endif return result; From 0fba1b6494629ae0f4e2aa5ed254390065198532 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 11 Apr 2022 16:53:38 +0200 Subject: [PATCH 009/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index ec852631..9561dd2f 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit ec8526314d662dc86ec9cd1d952911037d275b4e +Subproject commit 9561dd2f14b769aa722f4934805d082a23bfec7a From 7f51ffc8fb52f0fc7f5505b48b3b0f0d69a6b465 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 12 Apr 2022 17:42:41 +0200 Subject: [PATCH 010/115] use structs instead of classes --- linux/devices/startracker/StrHelper.h | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/linux/devices/startracker/StrHelper.h b/linux/devices/startracker/StrHelper.h index f34e96ce..435b6e82 100644 --- a/linux/devices/startracker/StrHelper.h +++ b/linux/devices/startracker/StrHelper.h @@ -173,8 +173,7 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu static const size_t SIZE_IMAGE_PART = 1024; static const uint32_t FLASH_REGION_SIZE = 0x20000; - class ImageDownload { - public: + struct ImageDownload { static const uint32_t LAST_POSITION = 4095; }; @@ -199,15 +198,13 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu BinarySemaphore semaphore; - class UploadImage { - public: + struct UploadImage { // Name including absolute path of image to upload std::string uploadFile; }; UploadImage uploadImage; - class DownloadImage { - public: + struct DownloadImage { // Path where the downloaded image will be stored std::string path; // Default name of downloaded image, can be changed via command @@ -215,8 +212,7 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu }; DownloadImage downloadImage; - class FlashWrite { - public: + struct FlashWrite { // File which contains data to write when executing the flash write command std::string fullname; // The first region to write to @@ -229,8 +225,7 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu }; FlashWrite flashWrite; - class FlashRead { - public: + struct FlashRead { // Path where the file containing the read data will be stored std::string path = ""; // Default name of file containing the data read from flash, can be changed via command From bd8cd491175e8577a5d855a6088def6de8260a8e Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 13 Apr 2022 11:56:37 +0200 Subject: [PATCH 011/115] event buffer request wip --- bsp_q7s/memory/FilesystemHelper.cpp | 2 - bsp_q7s/memory/FilesystemHelper.h | 8 +- .../PlocSupervisorDefinitions.h | 494 ++++--------- linux/devices/ploc/PlocSupervisorHandler.cpp | 683 ++++++++---------- linux/devices/ploc/PlocSupervisorHandler.h | 10 +- linux/devices/ploc/PlocSupvHelper.cpp | 90 ++- linux/devices/ploc/PlocSupvHelper.h | 55 +- linux/devices/startracker/StrHelper.cpp | 18 +- linux/devices/startracker/StrHelper.h | 10 - mission/utility/CMakeLists.txt | 1 + mission/utility/Filenaming.cpp | 17 + mission/utility/Filenaming.h | 28 + 12 files changed, 627 insertions(+), 789 deletions(-) create mode 100644 mission/utility/Filenaming.cpp create mode 100644 mission/utility/Filenaming.h diff --git a/bsp_q7s/memory/FilesystemHelper.cpp b/bsp_q7s/memory/FilesystemHelper.cpp index 4b9140f1..c4b8fa16 100644 --- a/bsp_q7s/memory/FilesystemHelper.cpp +++ b/bsp_q7s/memory/FilesystemHelper.cpp @@ -8,8 +8,6 @@ FilesystemHelper::FilesystemHelper() {} -FilesystemHelper::~FilesystemHelper() {} - ReturnValue_t FilesystemHelper::checkPath(std::string path) { SdCardManager* sdcMan = SdCardManager::instance(); if (sdcMan == nullptr) { diff --git a/bsp_q7s/memory/FilesystemHelper.h b/bsp_q7s/memory/FilesystemHelper.h index ab20eec5..efdf5c6a 100644 --- a/bsp_q7s/memory/FilesystemHelper.h +++ b/bsp_q7s/memory/FilesystemHelper.h @@ -20,11 +20,8 @@ class FilesystemHelper : public HasReturnvaluesIF { //! [EXPORT] : [COMMENT] Specified file does not exist on filesystem static const ReturnValue_t FILE_NOT_EXISTS = MAKE_RETURN_CODE(0xA1); - FilesystemHelper(); - virtual ~FilesystemHelper(); - /** - * @brief In case the path points to a directory on the sd card the function checks if the + * @brief In case the path points to a directory on the sd card, the function checks if the * appropriate SD card is mounted. * * @param path Path to check @@ -44,6 +41,9 @@ class FilesystemHelper : public HasReturnvaluesIF { * @return RETURN_OK if file exists, otherwise return error code. */ static ReturnValue_t fileExists(std::string file); + + private: + FilesystemHelper(); }; #endif /* BSP_Q7S_MEMORY_FILESYSTEMHELPER_H_ */ diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 8360c61d..c5569265 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -15,7 +15,6 @@ namespace supv { /** Command IDs */ static const DeviceCommandId_t NONE = 0; static const DeviceCommandId_t GET_HK_REPORT = 1; -static const DeviceCommandId_t RESTART_MPSOC = 2; static const DeviceCommandId_t START_MPSOC = 3; static const DeviceCommandId_t SHUTDOWN_MPSOC = 4; static const DeviceCommandId_t SEL_MPSOC_BOOT_IMAGE = 5; @@ -25,33 +24,23 @@ static const DeviceCommandId_t RESET_MPSOC = 8; static const DeviceCommandId_t SET_TIME_REF = 9; static const DeviceCommandId_t DISABLE_PERIOIC_HK_TRANSMISSION = 10; static const DeviceCommandId_t GET_BOOT_STATUS_REPORT = 11; -/** Notifies the supervisor that a new update is available for the MPSoC */ -static const DeviceCommandId_t WATCHDOGS_ENABLE = 13; -static const DeviceCommandId_t WATCHDOGS_CONFIG_TIMEOUT = 14; static const DeviceCommandId_t ENABLE_LATCHUP_ALERT = 15; static const DeviceCommandId_t DISABLE_LATCHUP_ALERT = 16; -static const DeviceCommandId_t AUTO_CALIBRATE_ALERT = 17; static const DeviceCommandId_t SET_ALERT_LIMIT = 18; -static const DeviceCommandId_t SET_ALERT_IRQ_FILTER = 19; -static const DeviceCommandId_t SET_ADC_SWEEP_PERIOD = 20; static const DeviceCommandId_t SET_ADC_ENABLED_CHANNELS = 21; static const DeviceCommandId_t SET_ADC_WINDOW_AND_STRIDE = 22; static const DeviceCommandId_t SET_ADC_THRESHOLD = 23; static const DeviceCommandId_t GET_LATCHUP_STATUS_REPORT = 24; static const DeviceCommandId_t COPY_ADC_DATA_TO_MRAM = 25; -static const DeviceCommandId_t ENABLE_NVMS = 26; -static const DeviceCommandId_t SELECT_NVM = 27; static const DeviceCommandId_t RUN_AUTO_EM_TESTS = 28; static const DeviceCommandId_t WIPE_MRAM = 29; static const DeviceCommandId_t FIRST_MRAM_DUMP = 30; -static const DeviceCommandId_t SET_DBG_VERBOSITY = 31; -static const DeviceCommandId_t CAN_LOOPBACK_TEST = 32; static const DeviceCommandId_t PRINT_CPU_STATS = 33; static const DeviceCommandId_t SET_GPIO = 34; static const DeviceCommandId_t READ_GPIO = 35; static const DeviceCommandId_t RESTART_SUPERVISOR = 36; static const DeviceCommandId_t FACTORY_RESET_CLEAR_ALL = 37; -static const DeviceCommandId_t REQUEST_LOGGING_DATA = 38; +static const DeviceCommandId_t LOGGING_REQUEST_COUNTERS = 38; static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40; static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41; static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 43; @@ -62,6 +51,11 @@ static const DeviceCommandId_t PERFORM_UPDATE = 48; static const DeviceCommandId_t TERMINATE_SUPV_HELPER = 49; static const DeviceCommandId_t ENABLE_AUTO_TM = 50; static const DeviceCommandId_t DISABLE_AUTO_TM = 51; +static const DeviceCommandId_t ENABLE_ADC_MONITOR_TASK = 52; +static const DeviceCommandId_t DISABLE_ADC_MONITOR_TASK = 53; +static const DeviceCommandId_t LOGGING_REQUEST_EVENT_BUFFERS = 54; +static const DeviceCommandId_t LOGGING_CLEAR_COUNTERS = 55; +static const DeviceCommandId_t LOGGING_SET_TOPIC = 56; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -69,12 +63,15 @@ static const DeviceCommandId_t EXE_REPORT = 51; static const DeviceCommandId_t HK_REPORT = 52; static const DeviceCommandId_t BOOT_STATUS_REPORT = 53; static const DeviceCommandId_t LATCHUP_REPORT = 54; +static const DeviceCommandId_t LOGGING_REPORT = 55; +// Size of complete space packet (6 byte header + size of data + 2 byte CRC) static const uint16_t SIZE_ACK_REPORT = 14; static const uint16_t SIZE_EXE_REPORT = 14; static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; +static const uint16_t SIZE_LOGGING_REPORT = 44; /** * SpacePacket apids of telemetry packets @@ -97,7 +94,6 @@ static const uint16_t APID_DATA_LOGGER_DATA = 0x20D; /** * APIDs of telecommand packets */ -static const uint16_t APID_RESTART_MPSOC = 0xA0; static const uint16_t APID_START_MPSOC = 0xA1; static const uint16_t APID_SHUTWOWN_MPSOC = 0xA2; static const uint16_t APID_SEL_MPSOC_BOOT_IMAGE = 0xA3; @@ -112,29 +108,21 @@ static const uint16_t APID_FACTORY_FLASH = 0xAC; static const uint16_t APID_ERASE_MEMORY = 0xB0; static const uint16_t APID_WRITE_MEMORY = 0xB1; static const uint16_t APID_CHECK_MEMORY = 0xB2; -static const uint16_t APID_WTD_ENABLE = 0xC0; -static const uint16_t APID_WTD_CONFIG_TIMEOUT = 0xC1; static const uint16_t APID_SET_TIME_REF = 0xC2; static const uint16_t APID_DISABLE_HK = 0xC3; static const uint16_t APID_AUTO_TM = 0xC5; static const uint16_t APID_ENABLE_LATCHUP_ALERT = 0xD0; static const uint16_t APID_DISABLE_LATCHUP_ALERT = 0xD1; -static const uint16_t APID_AUTO_CALIBRATE_ALERT = 0xD2; static const uint16_t APID_SET_ALERT_LIMIT = 0xD3; -static const uint16_t APID_SET_ALERT_IRQ_FILTER = 0xD4; -static const uint16_t APID_SET_ADC_SWEEP_PERIOD = 0xD5; static const uint16_t APID_SET_ADC_ENABLED_CHANNELS = 0xD6; static const uint16_t APID_SET_ADC_WINDOW_AND_STRIDE = 0xD7; static const uint16_t APID_SET_ADC_THRESHOLD = 0xD8; static const uint16_t APID_GET_LATCHUP_STATUS_REPORT = 0xD9; static const uint16_t APID_COPY_ADC_DATA_TO_MRAM = 0xDA; -static const uint16_t APID_ENABLE_NVMS = 0xF0; -static const uint16_t APID_SELECT_NVM = 0xF1; +static const uint16_t APID_ADC_MONITOR_TASK = 0xDB; static const uint16_t APID_RUN_AUTO_EM_TESTS = 0xF2; static const uint16_t APID_WIPE_MRAM = 0xF3; static const uint16_t APID_DUMP_MRAM = 0xF4; -static const uint16_t APID_SET_DBG_VERBOSITY = 0xF5; -static const uint16_t APID_CAN_LOOPBACK_TEST = 0xF6; static const uint16_t APID_PRINT_CPU_STATS = 0xF8; static const uint16_t APID_SET_GPIO = 0xF9; static const uint16_t APID_READ_GPIO = 0xFA; @@ -212,15 +200,27 @@ enum PoolIds : lp_id_t { LATCHUP_RPT_TIME_YEAR, LATCHUP_RPT_TIME_MSEC, LATCHUP_RPT_IS_SET, + + SUPERVISOR_REBOOTS, + LATCHUP_EVENTS, + ADC_TRIGGERS, + PS_HEARTBEATS_LOST, + PL_HEARTBEATS_LOST, + TC_RECEIVED, + TM_RECEIVED, + SOC_BOOTS, + SOC_BOOT_FAILS }; static const uint8_t HK_SET_ENTRIES = 13; static const uint8_t BOOT_REPORT_SET_ENTRIES = 10; static const uint8_t LATCHUP_RPT_SET_ENTRIES = 16; +static const uint8_t LOGGING_RPT_SET_ENTRIES = 9; static const uint32_t HK_SET_ID = HK_REPORT; static const uint32_t BOOT_REPORT_SET_ID = BOOT_STATUS_REPORT; static const uint32_t LATCHUP_RPT_ID = LATCHUP_REPORT; +static const uint32_t LOGGING_RPT_ID = LOGGING_REQUEST_COUNTERS; /** * @brief This class creates a space packet containing only the header data and the CRC. @@ -465,101 +465,6 @@ class DisablePeriodicHkTransmission : public SpacePacket { } }; -/** - * @brief This class packages the command to enable the watchdogs of the PLOC. - */ -class WatchdogsEnable : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param watchdogPs Enables processing system watchdog - * @param watchdogPl Enables programmable logic wathdog - * @param watchdogInt - */ - WatchdogsEnable(uint8_t watchdogPs, uint8_t watchdogPl, uint8_t watchdogInt) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_WTD_ENABLE, DEFAULT_SEQUENCE_COUNT), - watchdogPs(watchdogPs), - watchdogPl(watchdogPl), - watchdogInt(watchdogInt) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 5; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t watchdogPs = 0; - uint8_t watchdogPl = 0; - uint8_t watchdogInt = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&watchdogPs, &dataFieldPtr, &serializedSize, - sizeof(watchdogPs), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&watchdogPl, &dataFieldPtr, &serializedSize, - sizeof(watchdogPl), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&watchdogInt, &dataFieldPtr, &serializedSize, - sizeof(watchdogInt), SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - -/** - * @brief This class packages the command to set the timeout of one of the three watchdogs (PS, - * PL, INT) - */ -class WatchdogsConfigTimeout : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param watchdogPs Selects the watchdog to configure (0 - PS, 1 - PL, 2 - INT) - * @param timeout The timeout to set - */ - WatchdogsConfigTimeout(uint8_t watchdog, uint32_t timeout) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_WTD_CONFIG_TIMEOUT, DEFAULT_SEQUENCE_COUNT), - watchdog(watchdog), - timeout(timeout) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 7; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t watchdog = 0; - uint32_t timeout = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&watchdog, &dataFieldPtr, &serializedSize, - sizeof(watchdog), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&timeout, &dataFieldPtr, &serializedSize, sizeof(timeout), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief This class packages the command to enable of disable the latchup alert. * @@ -595,8 +500,8 @@ class LatchupAlert : public SpacePacket { void initPacket() { size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, + uint8_t* data_field_ptr = this->localData.fields.buffer; + SerializeAdapter::serialize(&latchupId, &data_field_ptr, &serializedSize, sizeof(latchupId), SerializeIF::Endianness::BIG); serializedSize = 0; uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, @@ -607,51 +512,6 @@ class LatchupAlert : public SpacePacket { } }; -/** - * @brief This class packages the command to calibrate a certain latchup alert. - */ -class AutoCalibrateAlert : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param latchupId Identifies the latchup alert to calibrate (0 - 0.85V, 1 - 1.8V, 2 - MISC, - * 3 - 3.3V, 4 - NVM_4XO, 5 - MISSION, 6 - SAFECOTS) - * @param mg - */ - AutoCalibrateAlert(uint8_t latchupId, uint32_t mg) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_AUTO_CALIBRATE_ALERT, DEFAULT_SEQUENCE_COUNT), - latchupId(latchupId), - mg(mg) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 7; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t latchupId = 0; - uint32_t mg = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, - sizeof(latchupId), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&mg, &dataFieldPtr, &serializedSize, sizeof(mg), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - class SetAlertlimit : public SpacePacket { public: /** @@ -694,91 +554,6 @@ class SetAlertlimit : public SpacePacket { } }; -class SetAlertIrqFilter : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param latchupId Identifies the latchup alert to calibrate (0 - 0.85V, 1 - 1.8V, 2 - MISC, - * 3 - 3.3V, 4 - NVM_4XO, 5 - MISSION, 6 - SAFECOTS) - * @param tp - * @param div - */ - SetAlertIrqFilter(uint8_t latchupId, uint8_t tp, uint8_t div) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_SET_ALERT_IRQ_FILTER, DEFAULT_SEQUENCE_COUNT), - tp(tp), - div(div) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 5; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t latchupId = 0; - uint8_t tp = 0; - uint8_t div = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&latchupId, &dataFieldPtr, &serializedSize, - sizeof(latchupId), SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&tp, &dataFieldPtr, &serializedSize, sizeof(tp), - SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&div, &dataFieldPtr, &serializedSize, sizeof(div), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - -/** - * @brief This class packages the space packet to set the sweep period of the ADC. - */ -class SetAdcSweepPeriod : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param sweepPeriod Sweep period in us. minimum is 21 us - */ - SetAdcSweepPeriod(uint32_t sweepPeriod) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_SET_ADC_SWEEP_PERIOD, DEFAULT_SEQUENCE_COUNT), - sweepPeriod(sweepPeriod) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 6; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint32_t sweepPeriod = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&sweepPeriod, &dataFieldPtr, &serializedSize, - sizeof(sweepPeriod), SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief This class packages the space packet to enable or disable ADC channels. */ @@ -902,88 +677,6 @@ class SetAdcThreshold : public SpacePacket { } }; -/** - * @brief This class packages the space packet to select between NVM 0 and NVM 1. - */ -class SelectNvm : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param mem 0 - select NVM0, 1 - select NVM1. - */ - SelectNvm(uint8_t mem) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_SELECT_NVM, DEFAULT_SEQUENCE_COUNT), - mem(mem) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 3; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t mem = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&mem, &dataFieldPtr, &serializedSize, sizeof(mem), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - -/** - * @brief This class packages the space packet to power the NVMs on or off. - */ -class EnableNvms : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param n01 Set to one to power NVM0 and NVM1 on. 0 powers off memory. - * @param n3 Set to one to power NVM3 on. 0 powers off the memory. - */ - EnableNvms(uint8_t n01, uint8_t n3) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_ENABLE_NVMS, DEFAULT_SEQUENCE_COUNT), - n01(n01), - n3(n3) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 4; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t n01 = 0; - uint8_t n3 = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&n01, &dataFieldPtr, &serializedSize, sizeof(n01), - SerializeIF::Endianness::BIG); - serializedSize = 0; - SerializeAdapter::serialize(&n3, &dataFieldPtr, &serializedSize, sizeof(n3), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief This class packages the space packet to run auto EM tests. */ @@ -1061,45 +754,6 @@ class PrintCpuStats : public SpacePacket { } }; -/** - * @brief This class packages the space packet to set the print verbosity in the supervisor - * software. - */ -class SetDbgVerbosity : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param vb 0: None, 1: Error, 2: Warn, 3: Info - */ - SetDbgVerbosity(uint8_t vb) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_SET_DBG_VERBOSITY, DEFAULT_SEQUENCE_COUNT), - vb(vb) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 3; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t vb = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&vb, &dataFieldPtr, &serializedSize, sizeof(vb), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief This class packages the space packet to wipe or dump parts of the MRAM. */ @@ -1537,6 +1191,61 @@ class DisableAutoTm : public SupvTcSpacePacket { static const uint8_t DISABLE = 0; }; +/** + * @brief This class creates the space packet to enable the auto TM generation + */ +class EnableAdcMonitorTask : public SupvTcSpacePacket { + public: + EnableAdcMonitorTask() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_ADC_MONITOR_TASK) { + *(this->localData.fields.buffer) = ENABLE; + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field + static const uint8_t ENABLE = 1; +}; + +/** + * @brief This class creates the space packet to enable the auto TM generation + */ +class DisableAdcMonitorTask : public SupvTcSpacePacket { + public: + DisableAdcMonitorTask() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_ADC_MONITOR_TASK) { + *(this->localData.fields.buffer) = DISABLE; + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field + static const uint8_t DISABLE = 0; +}; + +/** + * @brief This class creates the space packet to request the logging data from the supervisor + */ +class RequestLoggingData : public SupvTcSpacePacket { + public: + + enum class Sa : uint8_t { + REQUEST_COUNTERS = 1, + REQUEST_EVENT_BUFFERS = 2, + CLEAR_COUNTERS = 3, + SET_LOGGING_TOPIC = 4 + }; + + RequestLoggingData(Sa sa, uint8_t tpc = 0) + : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_REQUEST_LOGGING_DATA) { + *(this->localData.fields.buffer) = static_cast(sa); + *(this->localData.fields.buffer + TPC_OFFSET) = tpc; + makeCrc(); + } + + private: + static const uint16_t PAYLOAD_LENGTH = 2; // length without CRC field + static const uint8_t TPC_OFFSET = 1; +}; + /** * @brief Class for handling tm replies of the supervisor. */ @@ -1547,8 +1256,15 @@ class TmPacket : public SpacePacket { */ TmPacket() : SpacePacket(PACKET_MAX_SIZE) {} + /** + * @brief Returns the payload data length (data field length without CRC) + */ + uint16_t getPayloadDataLength() { + this->getPacketDataLength() - 1; + } + ReturnValue_t checkCrc() { - uint8_t* crcPtr = this->getPacketData() + this->getPacketDataLength() - 1; + uint8_t* crcPtr = this->getPacketData() + this->getPayloadDataLength(); uint16_t receivedCrc = *(crcPtr) << 8 | *(crcPtr + 1); uint16_t recalculatedCrc = CRC::crc16ccitt(this->localData.byteStream, this->getFullSize() - CRC_SIZE); @@ -1643,6 +1359,42 @@ class LatchupStatusReport : public StaticLocalDataSet { static const uint8_t IS_SET_BIT_POS = 15; }; +/** + * @brief This dataset stores the logging report. + */ +class LoggingReport : public StaticLocalDataSet { + public: + LoggingReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, LOGGING_RPT_ID) {} + + LoggingReport(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LOGGING_RPT_ID)) {} + + lp_var_t supervisorReboots = + lp_var_t(sid.objectId, PoolIds::SUPERVISOR_REBOOTS, this); + lp_var_t latchupEvents = + lp_var_t(sid.objectId, PoolIds::LATCHUP_EVENTS, this); + lp_var_t adcTriggers = lp_var_t(sid.objectId, PoolIds::ADC_TRIGGERS, this); + lp_var_t psHeartbeatsLost = + lp_var_t(sid.objectId, PoolIds::PS_HEARTBEATS_LOST, this); + lp_var_t plHeartbeatsLost = + lp_var_t(sid.objectId, PoolIds::PL_HEARTBEATS_LOST, this); + lp_var_t tcReceived = lp_var_t(sid.objectId, PoolIds::TC_RECEIVED, this); + lp_var_t tmReceived = lp_var_t(sid.objectId, PoolIds::TM_RECEIVED, this); + lp_var_t socBoots = lp_var_t(sid.objectId, PoolIds::SOC_BOOTS, this); + lp_var_t socBootFails = lp_var_t(sid.objectId, PoolIds::SOC_BOOT_FAILS, this); + + void printSet() { + sif::info << "LoggingReport: Supervisor reboots: " << this->supervisorReboots << std::endl; + sif::info << "LoggingReport: Latchup events: " << this->latchupEvents << std::endl; + sif::info << "LoggingReport: ADC triggers: " << this->adcTriggers << std::endl; + sif::info << "LoggingReport: PS heartbeats lost: " << this->psHeartbeatsLost << std::endl; + sif::info << "LoggingReport: PL heartbeats lost: " << this->plHeartbeatsLost << std::endl; + sif::info << "LoggingReport: TC received: " << this->tcReceived << std::endl; + sif::info << "LoggingReport: TM received: " << this->tmReceived << std::endl; + sif::info << "LoggingReport: SoC boots: " << this->socBoots << std::endl; + sif::info << "LoggingReport: SoC boot fails: " << this->socBootFails << std::endl; + } +}; + class UpdateStatusReport : public TmPacket { public: UpdateStatusReport() : TmPacket() {} diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 36cc6053..75071f01 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -21,6 +21,7 @@ PlocSupervisorHandler::PlocSupervisorHandler(object_id_t objectId, object_id_t u hkset(this), bootStatusReport(this), latchupStatusReport(this), + loggingReport(this), powerSwitch(powerSwitch), supvHelper(supvHelper) { if (comCookie == NULL) { @@ -81,10 +82,11 @@ void PlocSupervisorHandler::performOperationHook() { ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) { + using namespace supv; ReturnValue_t result = RETURN_OK; switch (actionId) { - case supv::TERMINATE_SUPV_HELPER: { + case TERMINATE_SUPV_HELPER: { supvHelper->stopProcess(); break; } @@ -97,7 +99,7 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, } switch (actionId) { - case supv::PERFORM_UPDATE: { + case PERFORM_UPDATE: { if (size > config::MAX_PATH_SIZE + config::MAX_FILENAME_SIZE) { return SupvReturnValuesIF::FILENAME_TOO_LONG; } @@ -115,6 +117,11 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, plocSupvHelperExecuting = true; return EXECUTION_FINISHED; } + case LOGGING_REQUEST_EVENT_BUFFERS: + if (size > config::MAX_PATH_SIZE) { + return SupvReturnValuesIF::FILENAME_TOO_LONG; + } + supvHelper->startEventbBufferRequest(std::string(reinterpret_cast(data), size)); default: break; } @@ -142,213 +149,193 @@ ReturnValue_t PlocSupervisorHandler::buildTransitionDeviceCommand(DeviceCommandI ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t* commandData, size_t commandDataLen) { + using namespace supv; ReturnValue_t result = RETURN_FAILED; switch (deviceCommand) { - case (supv::GET_HK_REPORT): { - prepareEmptyCmd(supv::APID_GET_HK_REPORT); + case GET_HK_REPORT: { + prepareEmptyCmd(APID_GET_HK_REPORT); result = RETURN_OK; break; } - case (supv::RESTART_MPSOC): { - prepareEmptyCmd(supv::APID_RESTART_MPSOC); + case START_MPSOC: { + prepareEmptyCmd(APID_START_MPSOC); result = RETURN_OK; break; } - case (supv::START_MPSOC): { - prepareEmptyCmd(supv::APID_START_MPSOC); + case SHUTDOWN_MPSOC: { + prepareEmptyCmd(APID_SHUTWOWN_MPSOC); result = RETURN_OK; break; } - case (supv::SHUTDOWN_MPSOC): { - prepareEmptyCmd(supv::APID_SHUTWOWN_MPSOC); - result = RETURN_OK; - break; - } - case (supv::SEL_MPSOC_BOOT_IMAGE): { + case SEL_MPSOC_BOOT_IMAGE: { prepareSelBootImageCmd(commandData); result = RETURN_OK; break; } - case (supv::RESET_MPSOC): { - prepareEmptyCmd(supv::APID_RESET_MPSOC); + case RESET_MPSOC: { + prepareEmptyCmd(APID_RESET_MPSOC); result = RETURN_OK; break; } - case (supv::SET_TIME_REF): { + case SET_TIME_REF: { result = prepareSetTimeRefCmd(); break; } - case (supv::SET_BOOT_TIMEOUT): { + case SET_BOOT_TIMEOUT: { prepareSetBootTimeoutCmd(commandData); result = RETURN_OK; break; } - case (supv::SET_MAX_RESTART_TRIES): { + case SET_MAX_RESTART_TRIES: { prepareRestartTriesCmd(commandData); result = RETURN_OK; break; } - case (supv::DISABLE_PERIOIC_HK_TRANSMISSION): { + case DISABLE_PERIOIC_HK_TRANSMISSION: { prepareDisableHk(); result = RETURN_OK; break; } - case (supv::GET_BOOT_STATUS_REPORT): { - prepareEmptyCmd(supv::APID_GET_BOOT_STATUS_RPT); + case GET_BOOT_STATUS_REPORT: { + prepareEmptyCmd(APID_GET_BOOT_STATUS_RPT); result = RETURN_OK; break; } - case (supv::WATCHDOGS_ENABLE): { - prepareWatchdogsEnableCmd(commandData); - result = RETURN_OK; - break; - } - case (supv::WATCHDOGS_CONFIG_TIMEOUT): { - result = prepareWatchdogsConfigTimeoutCmd(commandData); - break; - } - case (supv::ENABLE_LATCHUP_ALERT): { + case ENABLE_LATCHUP_ALERT: { result = prepareLatchupConfigCmd(commandData, deviceCommand); break; } - case (supv::DISABLE_LATCHUP_ALERT): { + case DISABLE_LATCHUP_ALERT: { result = prepareLatchupConfigCmd(commandData, deviceCommand); break; } - case (supv::AUTO_CALIBRATE_ALERT): { - result = prepareAutoCalibrateAlertCmd(commandData); - break; - } - case (supv::SET_ALERT_LIMIT): { + case SET_ALERT_LIMIT: { result = prepareSetAlertLimitCmd(commandData); break; } - case (supv::SET_ALERT_IRQ_FILTER): { - result = prepareSetAlertIrqFilterCmd(commandData); - break; - } - case (supv::SET_ADC_SWEEP_PERIOD): { - result = prepareSetAdcSweetPeriodCmd(commandData); - break; - } - case (supv::SET_ADC_ENABLED_CHANNELS): { + case SET_ADC_ENABLED_CHANNELS: { prepareSetAdcEnabledChannelsCmd(commandData); result = RETURN_OK; break; } - case (supv::SET_ADC_WINDOW_AND_STRIDE): { + case SET_ADC_WINDOW_AND_STRIDE: { prepareSetAdcWindowAndStrideCmd(commandData); result = RETURN_OK; break; } - case (supv::SET_ADC_THRESHOLD): { + case SET_ADC_THRESHOLD: { prepareSetAdcThresholdCmd(commandData); result = RETURN_OK; break; } - case (supv::GET_LATCHUP_STATUS_REPORT): { - prepareEmptyCmd(supv::APID_GET_LATCHUP_STATUS_REPORT); + case GET_LATCHUP_STATUS_REPORT: { + prepareEmptyCmd(APID_GET_LATCHUP_STATUS_REPORT); result = RETURN_OK; break; } - case (supv::COPY_ADC_DATA_TO_MRAM): { - prepareEmptyCmd(supv::APID_COPY_ADC_DATA_TO_MRAM); + case COPY_ADC_DATA_TO_MRAM: { + prepareEmptyCmd(APID_COPY_ADC_DATA_TO_MRAM); result = RETURN_OK; break; } - case (supv::ENABLE_NVMS): { - prepareEnableNvmsCmd(commandData); - result = RETURN_OK; - break; - } - case (supv::SELECT_NVM): { - prepareSelectNvmCmd(commandData); - result = RETURN_OK; - break; - } - case (supv::RUN_AUTO_EM_TESTS): { + case RUN_AUTO_EM_TESTS: { result = prepareRunAutoEmTest(commandData); break; } - case (supv::WIPE_MRAM): { + case WIPE_MRAM: { result = prepareWipeMramCmd(commandData); break; } - case (supv::FIRST_MRAM_DUMP): - case (supv::CONSECUTIVE_MRAM_DUMP): + case FIRST_MRAM_DUMP: + case CONSECUTIVE_MRAM_DUMP: result = prepareDumpMramCmd(commandData); break; - case (supv::PRINT_CPU_STATS): { - preparePrintCpuStatsCmd(commandData); - result = RETURN_OK; - break; - } - case (supv::SET_DBG_VERBOSITY): { - prepareSetDbgVerbosityCmd(commandData); - result = RETURN_OK; - break; - } - case (supv::CAN_LOOPBACK_TEST): { - prepareEmptyCmd(supv::APID_CAN_LOOPBACK_TEST); - result = RETURN_OK; - break; - } - case (supv::SET_GPIO): { + case SET_GPIO: { prepareSetGpioCmd(commandData); result = RETURN_OK; break; } - case (supv::READ_GPIO): { + case READ_GPIO: { prepareReadGpioCmd(commandData); result = RETURN_OK; break; } - case (supv::RESTART_SUPERVISOR): { - prepareEmptyCmd(supv::APID_RESTART_SUPERVISOR); + case RESTART_SUPERVISOR: { + prepareEmptyCmd(APID_RESTART_SUPERVISOR); result = RETURN_OK; break; } - case (supv::FACTORY_RESET_CLEAR_ALL): { - supv::FactoryReset packet(supv::FactoryReset::Op::CLEAR_ALL); + case FACTORY_RESET_CLEAR_ALL: { + FactoryReset packet(FactoryReset::Op::CLEAR_ALL); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; } - case (supv::FACTORY_RESET_CLEAR_MIRROR): { - supv::FactoryReset packet(supv::FactoryReset::Op::MIRROR_ENTRIES); + case FACTORY_RESET_CLEAR_MIRROR: { + FactoryReset packet(FactoryReset::Op::MIRROR_ENTRIES); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; } - case (supv::FACTORY_RESET_CLEAR_CIRCULAR): { - supv::FactoryReset packet(supv::FactoryReset::Op::CIRCULAR_ENTRIES); + case FACTORY_RESET_CLEAR_CIRCULAR: { + FactoryReset packet(FactoryReset::Op::CIRCULAR_ENTRIES); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; } - case (supv::START_MPSOC_QUIET): { - prepareEmptyCmd(supv::APID_START_MPSOC_QUIET); + case START_MPSOC_QUIET: { + prepareEmptyCmd(APID_START_MPSOC_QUIET); result = RETURN_OK; break; } - case (supv::SET_SHUTDOWN_TIMEOUT): { + case SET_SHUTDOWN_TIMEOUT: { prepareSetShutdownTimeoutCmd(commandData); result = RETURN_OK; break; } - case (supv::FACTORY_FLASH): { - prepareEmptyCmd(supv::APID_FACTORY_FLASH); + case FACTORY_FLASH: { + prepareEmptyCmd(APID_FACTORY_FLASH); result = RETURN_OK; break; } - case (supv::ENABLE_AUTO_TM): { - supv::EnableAutoTm packet; + case ENABLE_AUTO_TM: { + EnableAutoTm packet; packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; } - case (supv::DISABLE_AUTO_TM): { - supv::DisableAutoTm packet; + case DISABLE_AUTO_TM: { + DisableAutoTm packet; + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case ENABLE_ADC_MONITOR_TASK: { + EnableAdcMonitorTask packet; + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case DISABLE_ADC_MONITOR_TASK: { + DisableAdcMonitorTask packet; + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case LOGGING_REQUEST_COUNTERS: { + RequestLoggingData packet(RequestLoggingData::Sa::REQUEST_COUNTERS); + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case LOGGING_CLEAR_COUNTERS: { + RequestLoggingData packet(RequestLoggingData::Sa::CLEAR_COUNTERS); + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + result = RETURN_OK; + break; + } + case LOGGING_SET_TOPIC: { + RequestLoggingData packet(RequestLoggingData::Sa::SET_LOGGING_TOPIC); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; @@ -371,57 +358,178 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d } void PlocSupervisorHandler::fillCommandAndReplyMap() { - this->insertInCommandMap(supv::GET_HK_REPORT); - this->insertInCommandMap(supv::RESTART_MPSOC); - this->insertInCommandMap(supv::START_MPSOC); - this->insertInCommandMap(supv::SHUTDOWN_MPSOC); - this->insertInCommandMap(supv::SEL_MPSOC_BOOT_IMAGE); - this->insertInCommandMap(supv::SET_BOOT_TIMEOUT); - this->insertInCommandMap(supv::SET_MAX_RESTART_TRIES); - this->insertInCommandMap(supv::RESET_MPSOC); - this->insertInCommandMap(supv::SET_TIME_REF); - this->insertInCommandMap(supv::DISABLE_PERIOIC_HK_TRANSMISSION); - this->insertInCommandMap(supv::GET_BOOT_STATUS_REPORT); - this->insertInCommandMap(supv::WATCHDOGS_ENABLE); - this->insertInCommandMap(supv::WATCHDOGS_CONFIG_TIMEOUT); - this->insertInCommandMap(supv::ENABLE_LATCHUP_ALERT); - this->insertInCommandMap(supv::DISABLE_LATCHUP_ALERT); - this->insertInCommandMap(supv::AUTO_CALIBRATE_ALERT); - this->insertInCommandMap(supv::SET_ALERT_LIMIT); - this->insertInCommandMap(supv::SET_ALERT_IRQ_FILTER); - this->insertInCommandMap(supv::SET_ADC_SWEEP_PERIOD); - this->insertInCommandMap(supv::SET_ADC_ENABLED_CHANNELS); - this->insertInCommandMap(supv::SET_ADC_WINDOW_AND_STRIDE); - this->insertInCommandMap(supv::SET_ADC_THRESHOLD); - this->insertInCommandMap(supv::GET_LATCHUP_STATUS_REPORT); - this->insertInCommandMap(supv::COPY_ADC_DATA_TO_MRAM); - this->insertInCommandMap(supv::ENABLE_NVMS); - this->insertInCommandMap(supv::SELECT_NVM); - this->insertInCommandMap(supv::RUN_AUTO_EM_TESTS); - this->insertInCommandMap(supv::WIPE_MRAM); - this->insertInCommandMap(supv::PRINT_CPU_STATS); - this->insertInCommandMap(supv::SET_DBG_VERBOSITY); - this->insertInCommandMap(supv::SET_GPIO); - this->insertInCommandMap(supv::READ_GPIO); - this->insertInCommandMap(supv::RESTART_SUPERVISOR); - this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_ALL); - this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_MIRROR); - this->insertInCommandMap(supv::FACTORY_RESET_CLEAR_CIRCULAR); - this->insertInCommandMap(supv::CAN_LOOPBACK_TEST); - this->insertInCommandMap(supv::START_MPSOC_QUIET); - this->insertInCommandMap(supv::SET_SHUTDOWN_TIMEOUT); - this->insertInCommandMap(supv::FACTORY_FLASH); - this->insertInCommandMap(supv::ENABLE_AUTO_TM); - this->insertInCommandMap(supv::DISABLE_AUTO_TM); - this->insertInCommandAndReplyMap(supv::FIRST_MRAM_DUMP, 3); - this->insertInCommandAndReplyMap(supv::CONSECUTIVE_MRAM_DUMP, 3); - this->insertInReplyMap(supv::ACK_REPORT, 3, nullptr, supv::SIZE_ACK_REPORT); - this->insertInReplyMap(supv::EXE_REPORT, 120, nullptr, supv::SIZE_EXE_REPORT); - this->insertInReplyMap(supv::HK_REPORT, 3, &hkset, supv::SIZE_HK_REPORT); - this->insertInReplyMap(supv::BOOT_STATUS_REPORT, 3, &bootStatusReport, - supv::SIZE_BOOT_STATUS_REPORT); - this->insertInReplyMap(supv::LATCHUP_REPORT, 3, &latchupStatusReport, - supv::SIZE_LATCHUP_STATUS_REPORT); + using namespace supv; + this->insertInCommandMap(GET_HK_REPORT); + this->insertInCommandMap(START_MPSOC); + this->insertInCommandMap(SHUTDOWN_MPSOC); + this->insertInCommandMap(SEL_MPSOC_BOOT_IMAGE); + this->insertInCommandMap(SET_BOOT_TIMEOUT); + this->insertInCommandMap(SET_MAX_RESTART_TRIES); + this->insertInCommandMap(RESET_MPSOC); + this->insertInCommandMap(SET_TIME_REF); + this->insertInCommandMap(DISABLE_PERIOIC_HK_TRANSMISSION); + this->insertInCommandMap(GET_BOOT_STATUS_REPORT); + this->insertInCommandMap(ENABLE_LATCHUP_ALERT); + this->insertInCommandMap(DISABLE_LATCHUP_ALERT); + this->insertInCommandMap(SET_ALERT_LIMIT); + this->insertInCommandMap(SET_ADC_ENABLED_CHANNELS); + this->insertInCommandMap(SET_ADC_WINDOW_AND_STRIDE); + this->insertInCommandMap(SET_ADC_THRESHOLD); + this->insertInCommandMap(GET_LATCHUP_STATUS_REPORT); + this->insertInCommandMap(COPY_ADC_DATA_TO_MRAM); + this->insertInCommandMap(RUN_AUTO_EM_TESTS); + this->insertInCommandMap(WIPE_MRAM); + this->insertInCommandMap(PRINT_CPU_STATS); + this->insertInCommandMap(SET_GPIO); + this->insertInCommandMap(READ_GPIO); + this->insertInCommandMap(RESTART_SUPERVISOR); + this->insertInCommandMap(FACTORY_RESET_CLEAR_ALL); + this->insertInCommandMap(FACTORY_RESET_CLEAR_MIRROR); + this->insertInCommandMap(FACTORY_RESET_CLEAR_CIRCULAR); + this->insertInCommandMap(START_MPSOC_QUIET); + this->insertInCommandMap(SET_SHUTDOWN_TIMEOUT); + this->insertInCommandMap(FACTORY_FLASH); + this->insertInCommandMap(ENABLE_AUTO_TM); + this->insertInCommandMap(DISABLE_AUTO_TM); + this->insertInCommandMap(ENABLE_ADC_MONITOR_TASK); + this->insertInCommandMap(DISABLE_ADC_MONITOR_TASK); + this->insertInCommandMap(LOGGING_REQUEST_COUNTERS); + this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); + this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); + this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); + this->insertInReplyMap(EXE_REPORT, 3, nullptr, SIZE_EXE_REPORT); + this->insertInReplyMap(HK_REPORT, 3, &hkset, SIZE_HK_REPORT); + this->insertInReplyMap(BOOT_STATUS_REPORT, 3, &bootStatusReport, SIZE_BOOT_STATUS_REPORT); + this->insertInReplyMap(LATCHUP_REPORT, 3, &latchupStatusReport, SIZE_LATCHUP_STATUS_REPORT); + this->insertInReplyMap(LOGGING_REPORT, 3, &loggingReport, SIZE_LOGGING_REPORT); +} + +ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, + uint8_t expectedReplies, + bool useAlternateId, + DeviceCommandId_t alternateReplyID) { + ReturnValue_t result = RETURN_OK; + + uint8_t enabledReplies = 0; + + switch (command->first) { + case supv::GET_HK_REPORT: { + enabledReplies = 3; + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::HK_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::HK_REPORT << " not in replyMap" << std::endl; + } + break; + } + case supv::GET_BOOT_STATUS_REPORT: { + enabledReplies = 3; + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + supv::BOOT_STATUS_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::BOOT_STATUS_REPORT << " not in replyMap" << std::endl; + } + break; + } + case supv::GET_LATCHUP_STATUS_REPORT: { + enabledReplies = 3; + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + supv::LATCHUP_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::LATCHUP_REPORT << " not in replyMap" << std::endl; + } + break; + } + case supv::LOGGING_REQUEST_COUNTERS: { + enabledReplies = 3; + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + supv::LOGGING_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::LOGGING_REPORT << " not in replyMap" << std::endl; + } + break; + } + case supv::FIRST_MRAM_DUMP: { + enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + supv::FIRST_MRAM_DUMP); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::FIRST_MRAM_DUMP << " not in replyMap" << std::endl; + } + break; + } + case supv::CONSECUTIVE_MRAM_DUMP: { + enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + supv::CONSECUTIVE_MRAM_DUMP); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << supv::CONSECUTIVE_MRAM_DUMP << " not in replyMap" << std::endl; + } + break; + } + case supv::START_MPSOC: + case supv::SHUTDOWN_MPSOC: + case supv::SEL_MPSOC_BOOT_IMAGE: + case supv::SET_BOOT_TIMEOUT: + case supv::SET_MAX_RESTART_TRIES: + case supv::RESET_MPSOC: + case supv::SET_TIME_REF: + case supv::ENABLE_LATCHUP_ALERT: + case supv::DISABLE_LATCHUP_ALERT: + case supv::SET_ALERT_LIMIT: + case supv::SET_ADC_ENABLED_CHANNELS: + case supv::SET_ADC_WINDOW_AND_STRIDE: + case supv::SET_ADC_THRESHOLD: + case supv::COPY_ADC_DATA_TO_MRAM: + case supv::RUN_AUTO_EM_TESTS: + case supv::WIPE_MRAM: + case supv::PRINT_CPU_STATS: + case supv::SET_GPIO: + case supv::READ_GPIO: + case supv::RESTART_SUPERVISOR: + case supv::FACTORY_RESET_CLEAR_ALL: + case supv::FACTORY_RESET_CLEAR_MIRROR: + case supv::FACTORY_RESET_CLEAR_CIRCULAR: + case supv::DISABLE_PERIOIC_HK_TRANSMISSION: + case supv::START_MPSOC_QUIET: + case supv::SET_SHUTDOWN_TIMEOUT: + case supv::FACTORY_FLASH: + case supv::ENABLE_AUTO_TM: + case supv::DISABLE_AUTO_TM: + case supv::ENABLE_ADC_MONITOR_TASK: + case supv::DISABLE_ADC_MONITOR_TASK: + enabledReplies = 2; + break; + default: + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Unknown command id" << std::endl; + break; + } + + /** + * Every command causes at least one acknowledgment and one execution report. Therefore both + * replies will be enabled here. + */ + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::ACK_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::ACK_REPORT + << " not in replyMap" << std::endl; + } + + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::EXE_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::EXE_REPORT + << " not in replyMap" << std::endl; + } + + return RETURN_OK; } ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t remainingSize, @@ -459,6 +567,10 @@ ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t r *foundLen = supv::SIZE_LATCHUP_STATUS_REPORT; *foundId = supv::LATCHUP_REPORT; break; + case (supv::APID_DATA_LOGGER_DATA): + *foundLen = supv::SIZE_LOGGING_REPORT; + *foundId = supv::LOGGING_REPORT; + break; case (supv::APID_EXE_SUCCESS): *foundLen = supv::SIZE_EXE_REPORT; *foundId = supv::EXE_REPORT; @@ -508,6 +620,10 @@ ReturnValue_t PlocSupervisorHandler::interpretDeviceReply(DeviceCommandId_t id, result = handleLatchupStatusReport(packet); break; } + case (supv::LOGGING_REPORT): { + result = handleLoggingReport(packet); + break; + } case (supv::FIRST_MRAM_DUMP): case (supv::CONSECUTIVE_MRAM_DUMP): result = handleMramDumpPacket(id); @@ -587,133 +703,6 @@ void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { } } -ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, - uint8_t expectedReplies, - bool useAlternateId, - DeviceCommandId_t alternateReplyID) { - ReturnValue_t result = RETURN_OK; - - uint8_t enabledReplies = 0; - - switch (command->first) { - case supv::GET_HK_REPORT: { - enabledReplies = 3; - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::HK_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::HK_REPORT << " not in replyMap" << std::endl; - } - break; - } - case supv::GET_BOOT_STATUS_REPORT: { - enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::BOOT_STATUS_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::BOOT_STATUS_REPORT << " not in replyMap" << std::endl; - } - break; - } - case supv::GET_LATCHUP_STATUS_REPORT: { - enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::LATCHUP_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::LATCHUP_REPORT << " not in replyMap" << std::endl; - } - break; - } - case supv::FIRST_MRAM_DUMP: { - enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::FIRST_MRAM_DUMP); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::FIRST_MRAM_DUMP << " not in replyMap" << std::endl; - } - break; - } - case supv::CONSECUTIVE_MRAM_DUMP: { - enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::CONSECUTIVE_MRAM_DUMP); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::CONSECUTIVE_MRAM_DUMP << " not in replyMap" << std::endl; - } - break; - } - case supv::RESTART_MPSOC: - case supv::START_MPSOC: - case supv::SHUTDOWN_MPSOC: - case supv::SEL_MPSOC_BOOT_IMAGE: - case supv::SET_BOOT_TIMEOUT: - case supv::SET_MAX_RESTART_TRIES: - case supv::RESET_MPSOC: - case supv::SET_TIME_REF: - case supv::WATCHDOGS_ENABLE: - case supv::WATCHDOGS_CONFIG_TIMEOUT: - case supv::ENABLE_LATCHUP_ALERT: - case supv::DISABLE_LATCHUP_ALERT: - case supv::AUTO_CALIBRATE_ALERT: - case supv::SET_ALERT_LIMIT: - case supv::SET_ALERT_IRQ_FILTER: - case supv::SET_ADC_SWEEP_PERIOD: - case supv::SET_ADC_ENABLED_CHANNELS: - case supv::SET_ADC_WINDOW_AND_STRIDE: - case supv::SET_ADC_THRESHOLD: - case supv::COPY_ADC_DATA_TO_MRAM: - case supv::ENABLE_NVMS: - case supv::SELECT_NVM: - case supv::RUN_AUTO_EM_TESTS: - case supv::WIPE_MRAM: - case supv::SET_DBG_VERBOSITY: - case supv::CAN_LOOPBACK_TEST: - case supv::PRINT_CPU_STATS: - case supv::SET_GPIO: - case supv::READ_GPIO: - case supv::RESTART_SUPERVISOR: - case supv::FACTORY_RESET_CLEAR_ALL: - case supv::FACTORY_RESET_CLEAR_MIRROR: - case supv::FACTORY_RESET_CLEAR_CIRCULAR: - case supv::REQUEST_LOGGING_DATA: - case supv::DISABLE_PERIOIC_HK_TRANSMISSION: - case supv::START_MPSOC_QUIET: - case supv::SET_SHUTDOWN_TIMEOUT: - case supv::FACTORY_FLASH: - case supv::ENABLE_AUTO_TM: - case supv::DISABLE_AUTO_TM: - enabledReplies = 2; - break; - default: - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Unknown command id" << std::endl; - break; - } - - /** - * Every command causes at least one acknowledgment and one execution report. Therefore both - * replies will be enabled here. - */ - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::ACK_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::ACK_REPORT - << " not in replyMap" << std::endl; - } - - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::EXE_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::EXE_REPORT - << " not in replyMap" << std::endl; - } - - return RETURN_OK; -} - ReturnValue_t PlocSupervisorHandler::verifyPacket(const uint8_t* start, size_t foundLen) { uint16_t receivedCrc = *(start + foundLen - 2) << 8 | *(start + foundLen - 1); uint16_t recalculatedCrc = CRC::crc16ccitt(start, foundLen - 2); @@ -1037,6 +1026,41 @@ ReturnValue_t PlocSupervisorHandler::handleLatchupStatusReport(const uint8_t* da return result; } +ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { + ReturnValue_t result = RETURN_OK; + + result = verifyPacket(data, supv::SIZE_LOGGING_REPORT); + + if (result == SupvReturnValuesIF::CRC_FAILURE) { + sif::error << "PlocSupervisorHandler::handleLoggingReport: Logging report has " + << "invalid crc" << std::endl; + return result; + } + + const uint8_t* dataField = data + supv::DATA_FIELD_OFFSET + sizeof(sa); + result = loggingReport.read(); + if (result != RETURN_OK) { + return result; + } + loggingReport.setValidityBufferGeneration(false); + size_t size = loggingReport.getSerializedSize(); + result = loggingReport.deSerialize(&dataField, &size, SerializeIF::Endianness::BIG); + if (result != RETURN_OK) { + sif::warning << "StarTrackerHandler::handleLoggingReport: Deserialization failed" << std::endl; + } + loggingReport.setValidityBufferGeneration(true); + loggingReport.setValidity(true, true); + result = loggingReport.commit(); + if (result != RETURN_OK) { + return result; + } +#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_PLOC_SUPERVISOR == 1 + loggingReport.printSet(); +#endif + nextReplyId = supv::EXE_REPORT; + return result; +} + void PlocSupervisorHandler::setNextReplyId() { switch (getPendingCommand()) { case supv::GET_HK_REPORT: @@ -1161,34 +1185,6 @@ void PlocSupervisorHandler::prepareRestartTriesCmd(const uint8_t* commandData) { packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); } -void PlocSupervisorHandler::prepareWatchdogsEnableCmd(const uint8_t* commandData) { - uint8_t offset = 0; - uint8_t watchdogPs = *(commandData + offset); - offset += 1; - uint8_t watchdogPl = *(commandData + offset); - offset += 1; - uint8_t watchdogInt = *(commandData + offset); - supv::WatchdogsEnable packet(watchdogPs, watchdogPl, watchdogInt); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); -} - -ReturnValue_t PlocSupervisorHandler::prepareWatchdogsConfigTimeoutCmd(const uint8_t* commandData) { - uint8_t offset = 0; - uint8_t watchdog = *(commandData + offset); - offset += 1; - if (watchdog > 2) { - return SupvReturnValuesIF::INVALID_WATCHDOG; - } - uint32_t timeout = *(commandData + offset) << 24 | *(commandData + offset + 1) << 16 | - *(commandData + offset + 2) << 8 | *(commandData + offset + 3); - if (timeout < 1000 || timeout > 360000) { - return SupvReturnValuesIF::INVALID_WATCHDOG_TIMEOUT; - } - supv::WatchdogsConfigTimeout packet(watchdog, timeout); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - return RETURN_OK; -} - ReturnValue_t PlocSupervisorHandler::prepareLatchupConfigCmd(const uint8_t* commandData, DeviceCommandId_t deviceCommand) { ReturnValue_t result = RETURN_OK; @@ -1217,32 +1213,6 @@ ReturnValue_t PlocSupervisorHandler::prepareLatchupConfigCmd(const uint8_t* comm return result; } -ReturnValue_t PlocSupervisorHandler::prepareAutoCalibrateAlertCmd(const uint8_t* commandData) { - uint8_t offset = 0; - uint8_t latchupId = *commandData; - offset += 1; - uint32_t mg = *(commandData + offset) << 24 | *(commandData + offset + 1) << 16 | - *(commandData + offset + 2) << 8 | *(commandData + offset + 3); - if (latchupId > 6) { - return SupvReturnValuesIF::INVALID_LATCHUP_ID; - } - supv::AutoCalibrateAlert packet(latchupId, mg); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - return RETURN_OK; -} - -ReturnValue_t PlocSupervisorHandler::prepareSetAlertIrqFilterCmd(const uint8_t* commandData) { - uint8_t latchupId = *commandData; - uint8_t tp = *(commandData + 1); - uint8_t div = *(commandData + 2); - if (latchupId > 6) { - return SupvReturnValuesIF::INVALID_LATCHUP_ID; - } - supv::SetAlertIrqFilter packet(latchupId, tp, div); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - return RETURN_OK; -} - ReturnValue_t PlocSupervisorHandler::prepareSetAlertLimitCmd(const uint8_t* commandData) { uint8_t offset = 0; uint8_t latchupId = *commandData; @@ -1257,17 +1227,6 @@ ReturnValue_t PlocSupervisorHandler::prepareSetAlertLimitCmd(const uint8_t* comm return RETURN_OK; } -ReturnValue_t PlocSupervisorHandler::prepareSetAdcSweetPeriodCmd(const uint8_t* commandData) { - uint32_t sweepPeriod = *(commandData) << 24 | *(commandData + 1) << 16 | *(commandData + 2) << 8 | - *(commandData + 3); - if (sweepPeriod < 21) { - return SupvReturnValuesIF::SWEEP_PERIOD_TOO_SMALL; - } - supv::SetAdcSweepPeriod packet(sweepPeriod); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - return RETURN_OK; -} - void PlocSupervisorHandler::prepareSetAdcEnabledChannelsCmd(const uint8_t* commandData) { uint16_t ch = *(commandData) << 8 | *(commandData + 1); supv::SetAdcEnabledChannels packet(ch); @@ -1290,19 +1249,6 @@ void PlocSupervisorHandler::prepareSetAdcThresholdCmd(const uint8_t* commandData packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); } -void PlocSupervisorHandler::prepareEnableNvmsCmd(const uint8_t* commandData) { - uint8_t n01 = *commandData; - uint8_t n3 = *(commandData + 1); - supv::EnableNvms packet(n01, n3); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); -} - -void PlocSupervisorHandler::prepareSelectNvmCmd(const uint8_t* commandData) { - uint8_t mem = *commandData; - supv::SelectNvm packet(mem); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); -} - ReturnValue_t PlocSupervisorHandler::prepareRunAutoEmTest(const uint8_t* commandData) { uint8_t test = *commandData; if (test != 1 && test != 2) { @@ -1346,18 +1292,6 @@ ReturnValue_t PlocSupervisorHandler::prepareDumpMramCmd(const uint8_t* commandDa return RETURN_OK; } -void PlocSupervisorHandler::preparePrintCpuStatsCmd(const uint8_t* commandData) { - uint8_t en = *commandData; - supv::PrintCpuStats packet(en); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); -} - -void PlocSupervisorHandler::prepareSetDbgVerbosityCmd(const uint8_t* commandData) { - uint8_t vb = *commandData; - supv::SetDbgVerbosity packet(vb); - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); -} - void PlocSupervisorHandler::prepareSetGpioCmd(const uint8_t* commandData) { uint8_t port = *commandData; uint8_t pin = *(commandData + 1); @@ -1395,6 +1329,15 @@ void PlocSupervisorHandler::prepareSetShutdownTimeoutCmd(const uint8_t* commandD packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); } +ReturnValue_t PlocSupervisorHandler::prepareLoggingRequest(const uint8_t* commandData, + size_t commandDataLen) { + uint8_t sa = *commandData; + uint8_t tpc = *(commandData + 1); + supv::RequestLoggingData packet(sa, tpc); + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + return RETURN_OK; +} + void PlocSupervisorHandler::disableAllReplies() { DeviceReplyMap::iterator iter; @@ -1690,7 +1633,7 @@ ReturnValue_t PlocSupervisorHandler::eventSubscription() { } result = manager->subscribeToEventRange( eventQueue->getId(), event::getEventId(PlocSupvHelper::SUPV_UPDATE_FAILED), - event::getEventId(PlocSupvHelper::TERMINATED_UPDATE_PROCEDURE)); + event::getEventId(PlocSupvHelper::SUPV_EVENT_BUFFER_REQUEST_TERMINATED)); if (result != RETURN_OK) { #if FSFW_CPP_OSTREAM_ENABLED == 1 sif::warning << "PlocSupervisorHandler::eventSubscritpion: Failed to subscribe to events from " diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index a570cc5d..11ce2097 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -92,6 +92,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { supv::HkSet hkset; supv::BootStatusReport bootStatusReport; supv::LatchupStatusReport latchupStatusReport; + supv::LoggingReport loggingReport; const power::Switch_t powerSwitch = power::NO_SWITCH; @@ -175,6 +176,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t handleBootStatusReport(const uint8_t* data); ReturnValue_t handleLatchupStatusReport(const uint8_t* data); + ReturnValue_t handleLoggingReport(const uint8_t* data); /** * @brief Depending on the current active command, this function sets the reply id of the @@ -235,22 +237,16 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t prepareLatchupConfigCmd(const uint8_t* commandData, DeviceCommandId_t deviceCommand); - ReturnValue_t prepareAutoCalibrateAlertCmd(const uint8_t* commandData); ReturnValue_t prepareSetAlertLimitCmd(const uint8_t* commandData); - ReturnValue_t prepareSetAlertIrqFilterCmd(const uint8_t* commandData); - ReturnValue_t prepareSetAdcSweetPeriodCmd(const uint8_t* commandData); void prepareSetAdcEnabledChannelsCmd(const uint8_t* commandData); void prepareSetAdcWindowAndStrideCmd(const uint8_t* commandData); void prepareSetAdcThresholdCmd(const uint8_t* commandData); - void prepareEnableNvmsCmd(const uint8_t* commandData); - void prepareSelectNvmCmd(const uint8_t* commandData); ReturnValue_t prepareRunAutoEmTest(const uint8_t* commandData); ReturnValue_t prepareWipeMramCmd(const uint8_t* commandData); ReturnValue_t prepareDumpMramCmd(const uint8_t* commandData); - void preparePrintCpuStatsCmd(const uint8_t* commandData); - void prepareSetDbgVerbosityCmd(const uint8_t* commandData); void prepareSetGpioCmd(const uint8_t* commandData); void prepareReadGpioCmd(const uint8_t* commandData); + ReturnValue_t prepareLoggingRequest(const uint8_t* commandData, size_t commandDataLen); /** * @brief Copies the content of a space packet to the command buffer. diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index 2c33d3ec..c59f7e00 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -39,9 +39,26 @@ ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { case InternalState::UPDATE: { result = performUpdate(); if (result == RETURN_OK) { - triggerEvent(SUPV_UPDATE_SUCCESSFUL); + triggerEvent(SUPV_UPDATE_SUCCESSFUL, result); + } else if (result == PROCESS_TERMINATED) { + // Event already triggered + break; } else { - triggerEvent(SUPV_UPDATE_FAILED); + triggerEvent(SUPV_UPDATE_FAILED, result); + } + internalState = InternalState::IDLE; + break; + } + case InternalState::REQUEST_EVENT_BUFFER: { + result = performEventBufferRequest(); + if (result == RETURN_OK) { + triggerEvent(SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL, result); + } else if (result == PROCESS_TERMINATED) { + // Event already triggered + break; + } + else { + triggerEvent(SUPV_EVENT_BUFFER_REQUEST_FAILED, result); } internalState = InternalState::IDLE; break; @@ -101,6 +118,23 @@ ReturnValue_t PlocSupvHelper::startUpdate(std::string file, uint8_t memoryId, return result; } +ReturnValue_t PlocSupvHelper::startEventbBufferRequest(std::string path) { +#ifdef XIPHOS_Q7S + ReturnValue_t result = FilesystemHelper::checkPath(path); + if (result != RETURN_OK) { + return result; + } +#endif + if (not std::filesystem::exists(path)) { + return PATH_NOT_EXISTS; + } + eventBufferReq.path = path; + internalState = InternalState::REQUEST_EVENT_BUFFER; + uartComIF->flushUartTxAndRxBuf(comCookie); + semaphore.release(); + return RETURN_OK; +} + void PlocSupvHelper::stopProcess() { terminate = true; } ReturnValue_t PlocSupvHelper::performUpdate() { @@ -159,6 +193,28 @@ ReturnValue_t PlocSupvHelper::performUpdate() { return result; } +ReturnValue_t PlocSupvHelper::performEventBufferRequest() { + using namespace supv; + ReturnValuet_t result = RETURN_OK; + RequestLoggingData packet(RequestLoggingData::Sa::REQUEST_EVENT_BUFFERS); + result = sendCommand(packet); + if (result != RETURN_OK) { + return result; + } + result = handleAck(); + if (result != RETURN_OK) { + return result; + } + result = handleEventBufferReception(); + if (result != RETURN_OK) { + return result; + } + result = handleExe(); + if (result != RETURN_OK) { + return result; + } +} + ReturnValue_t PlocSupvHelper::prepareUpdate() { ReturnValue_t result = RETURN_OK; supv::ApidOnlyPacket packet(supv::APID_PREPARE_UPDATE); @@ -379,3 +435,33 @@ uint32_t PlocSupvHelper::getFileSize(std::string filename) { file.seekg(0, file.end); return file.tellg(); } + +ReturnValue_t PlocSupvHelper::handleEventBufferReception() { + std::sring filename = Filenaming::generateAbsoluteFilename(eventBufferReq.pat, + eventBufferReq.filename, timestamping); + std::ofstream file(filename, std::ios_base::app | std::ios_base::out); + uint32_t packetsRead = 0; + supv::TmPacket tmPacket; + for (packetsRead = 0; packetsRead < NUM_EVENT_BUFFER_PACKETS - 1; packetsRead++) { + if (terminate) { + triggerEvent(SUPV_EVENT_BUFFER_REQUEST_TERMINATED, packetsRead - 1); + file.close(); + return PROCESS_TERMINATED; + } + result = handleTmReception(&tmPacket, SIZE_EVENT_BUFFER_FULL_PACKET); + if (result != RETURN_OK) { + return result; + } + uint16_t apid = tmPacket.getAPID(); + if (apid != supv::APID_MRAM_DUMP_TM) { + sif::warning << "PlocSupvHelper::handleEventBufferReception: Did not expect space packet " + << "with APID " << std::hex << std::endl; + return EVENT_BUFFER_REQUEST_INVALID_APID; + } + file.write(reinterpret_cast(spacePacketBuffer + supv::SPACE_PACKET_HEADER_LENGTH), + packetLen - 1); + } + + file.write(reinterpret_cast(spacePacketBuffer + supv::SPACE_PACKET_HEADER_LENGTH), + packetLen - 1); +} diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index 6a0053d8..f7d28308 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -29,41 +29,48 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha static const Event SUPV_UPDATE_SUCCESSFUL = MAKE_EVENT(1, severity::LOW); //! [EXPORT] : [COMMENT] Terminated update procedure by command static const Event TERMINATED_UPDATE_PROCEDURE = MAKE_EVENT(2, severity::LOW); + //! [EXPORT] : [COMMENT] Requesting event buffer was successful + static const Event SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL = MAKE_EVENT(3, severity::LOW); + //! [EXPORT] : [COMMENT] Requesting event buffer failed + static const Event SUPV_EVENT_BUFFER_REQUEST_FAILED = MAKE_EVENT(4, severity::LOW); + //! [EXPORT] : [COMMENT] Terminated event buffer request by command + //! P1: Number of packets read before process was terminated + static const Event SUPV_EVENT_BUFFER_REQUEST_TERMINATED = MAKE_EVENT(5, severity::LOW); //! [EXPORT] : [COMMENT] Communication interface returned failure when trying to send the command //! to the supervisor //! P1: Return value returned by the communication interface sendMessage function //! P2: Internal state of supervisor helper - static const Event SUPV_SENDING_COMMAND_FAILED = MAKE_EVENT(3, severity::LOW); + static const Event SUPV_SENDING_COMMAND_FAILED = MAKE_EVENT(6, severity::LOW); //! [EXPORT] : [COMMENT] Request receive message of communication interface failed //! P1: Return value returned by the communication interface requestReceiveMessage function //! P2: Internal state of supervisor helper - static const Event SUPV_HELPER_REQUESTING_REPLY_FAILED = MAKE_EVENT(4, severity::LOW); + static const Event SUPV_HELPER_REQUESTING_REPLY_FAILED = MAKE_EVENT(7, severity::LOW); //! [EXPORT] : [COMMENT] Reading receive message of communication interface failed //! P1: Return value returned by the communication interface readingReceivedMessage function //! P2: Internal state of supervisor helper - static const Event SUPV_HELPER_READING_REPLY_FAILED = MAKE_EVENT(5, severity::LOW); + static const Event SUPV_HELPER_READING_REPLY_FAILED = MAKE_EVENT(8, severity::LOW); //! [EXPORT] : [COMMENT] Did not receive acknowledgement report //! P1: Number of bytes missing //! P2: Internal state of MPSoC helper - static const Event SUPV_MISSING_ACK = MAKE_EVENT(6, severity::LOW); + static const Event SUPV_MISSING_ACK = MAKE_EVENT(9, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor did not receive execution report //! P1: Number of bytes missing //! P2: Internal state of supervisor helper - static const Event SUPV_MISSING_EXE = MAKE_EVENT(7, severity::LOW); + static const Event SUPV_MISSING_EXE = MAKE_EVENT(10, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor received acknowledgment failure report //! P1: Internal state of supervisor helper - static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(8, severity::LOW); + static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(11, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor received execution failure report //! P1: Internal state of supervisor - static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(9, severity::LOW); + static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(12, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of supervisor helper - static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(10, severity::LOW); + static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(13, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor helper expected execution report but received space packet with other apid //! P1: Apid of received space packet //! P2: Internal state of supervisor helper - static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(11, severity::LOW); + static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(14, severity::LOW); PlocSupvHelper(object_id_t objectId); virtual ~PlocSupvHelper(); @@ -85,6 +92,11 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha */ ReturnValue_t startUpdate(std::string file, uint8_t memoryId, uint32_t startAddress); + /** + * @brief Calling this function will initiate the procedure to request the event buffer + */ + ReturnValue_t startEventbBufferRequest(std::string path); + /** * @brief Can be used to interrupt a running data transfer. */ @@ -95,12 +107,22 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] File accidentally close static const ReturnValue_t FILE_CLOSED_ACCIDENTALLY = MAKE_RETURN_CODE(0xA0); + //! [EXPORT] : [COMMENT] Process has been terminated by command static const ReturnValue_t PROCESS_TERMINATED = MAKE_RETURN_CODE(0xA1); + //! [EXPORT] : [COMMENT] Received command with invalid pathname + static const ReturnValue_t PATH_NOT_EXISTS = MAKE_RETURN_CODE(0xA2); + //! [EXPORT] : [COMMENT] Expected event buffer TM but received space packet with other APID + static const ReturnValue_t EVENT_BUFFER_REQUEST_INVALID_APID = MAKE_RETURN_CODE(0xA3); // Maximum number of times the communication interface retries polling data from the reply // buffer static const int RETRIES = 10000; static const uint16_t CRC16_INIT = 0xFFFF; + // Event buffer reply will carry 24 space packets with 1016 bytes and one space packet with + // 192 bytes + static const uint8_t NUM_EVENT_BUFFER_PACKETS = 25; + static const size_t SIZE_EVENT_BUFFER_FULL_PACKET = 1024; + static const size_t SIZE_EVENT_BUFFER_LAST_PACKET = 200; struct Update { uint8_t memoryId; @@ -114,7 +136,16 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha struct Update update; - enum class InternalState { IDLE, UPDATE }; + struct EventBufferRequest { + std::string path = ""; + // Default name of file where event buffer data will be written to. Timestamp will be added to + // name when new file is created + std::string filename = "event-buffer"; + }; + + EventBufferRequest eventBufferReq; + + enum class InternalState { IDLE, UPDATE, REQUEST_EVENT_BUFFER }; InternalState internalState = InternalState::IDLE; @@ -133,7 +164,10 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha // Communication cookie. Must be set by the supervisor Handler CookieIF* comCookie = nullptr; + bool timestamping = true; + ReturnValue_t performUpdate(); + ReturnValue_t performEventBufferRequest(); ReturnValue_t handlePacketTransmission(SpacePacket& packet); ReturnValue_t sendCommand(SpacePacket& packet); /** @@ -169,6 +203,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha * @return The size of the file */ uint32_t getFileSize(std::string filename); + ReturnValue_t handleEventBufferReception(); }; #endif /* BSP_Q7S_DEVICES_PLOCSUPVHELPER_H_ */ diff --git a/linux/devices/startracker/StrHelper.cpp b/linux/devices/startracker/StrHelper.cpp index 599b706f..ebe7b077 100644 --- a/linux/devices/startracker/StrHelper.cpp +++ b/linux/devices/startracker/StrHelper.cpp @@ -8,6 +8,7 @@ #include "linux/devices/devicedefinitions/StarTrackerDefinitions.h" #include "mission/utility/ProgressPrinter.h" #include "mission/utility/Timestamp.h" +#include "mission/utility/Filenaming.h" StrHelper::StrHelper(object_id_t objectId) : SystemObject(objectId) {} @@ -181,7 +182,8 @@ ReturnValue_t StrHelper::performImageDownload() { struct DownloadActionRequest downloadReq; uint32_t size = 0; uint32_t retries = 0; - std::string image = makeFullFilename(downloadImage.path, downloadImage.filename); + std::string image = Filenaming::generateAbsoluteFilename(downloadImage.path, + downloadImage.filename, timestamping); std::ofstream file(image, std::ios_base::out); if (not std::filesystem::exists(image)) { return FILE_CREATION_FAILED; @@ -400,7 +402,8 @@ ReturnValue_t StrHelper::performFlashRead() { uint32_t size = 0; uint32_t retries = 0; Timestamp timestamp; - std::string fullname = makeFullFilename(flashRead.path, flashRead.filename); + std::string fullname = + Filenaming::generateAbsoluteFilename(flashRead.path, flashRead.filename, timestamping); std::ofstream file(fullname, std::ios_base::app | std::ios_base::out); if (not std::filesystem::exists(fullname)) { return FILE_CREATION_FAILED; @@ -588,14 +591,3 @@ ReturnValue_t StrHelper::unlockAndEraseRegions(uint32_t from, uint32_t to) { } return result; } - -std::string StrHelper::makeFullFilename(std::string path, std::string filename) { - std::string image; - Timestamp timestamp; - if (timestamping) { - image = path + "/" + timestamp.str() + filename; - } else { - image = path + "/" + filename; - } - return image; -} diff --git a/linux/devices/startracker/StrHelper.h b/linux/devices/startracker/StrHelper.h index 435b6e82..63f85233 100644 --- a/linux/devices/startracker/StrHelper.h +++ b/linux/devices/startracker/StrHelper.h @@ -344,16 +344,6 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu * */ ReturnValue_t unlockAndEraseRegions(uint32_t from, uint32_t to); - - /** - * @brief Creates full filename either with timestamp or without - * - * @param path Path where to create the file - * @param filename Name fo the file - * - * @return Full filename - */ - std::string makeFullFilename(std::string path, std::string filename); }; #endif /* BSP_Q7S_DEVICES_STRHELPER_H_ */ diff --git a/mission/utility/CMakeLists.txt b/mission/utility/CMakeLists.txt index 979ada94..a6b2b7a7 100644 --- a/mission/utility/CMakeLists.txt +++ b/mission/utility/CMakeLists.txt @@ -2,6 +2,7 @@ target_sources(${LIB_EIVE_MISSION} PRIVATE TmFunnel.cpp Timestamp.cpp ProgressPrinter.cpp + Filenaming.cpp ) diff --git a/mission/utility/Filenaming.cpp b/mission/utility/Filenaming.cpp new file mode 100644 index 00000000..c3e98ffe --- /dev/null +++ b/mission/utility/Filenaming.cpp @@ -0,0 +1,17 @@ +#include "Filenaming.h" +#include "Timestamp.h" + +Filenaming::Filenaming() { +} + +std::string FilesystemHelper::generateAbsoluteFilename(std::string path, std::string filename, + bool addTimestamp) { + std::string absoluteName; + Timestamp timestamp; + if (addTimestamp) { + absoluteName = path + "/" + timestamp.str() + filename; + } else { + absoluteName = path + "/" + filename; + } + return absoluteName; +} diff --git a/mission/utility/Filenaming.h b/mission/utility/Filenaming.h new file mode 100644 index 00000000..9c7b1cb8 --- /dev/null +++ b/mission/utility/Filenaming.h @@ -0,0 +1,28 @@ +#ifndef MISSION_UTILITY_FILENAMING_H_ +#define MISSION_UTILITY_FILENAMING_H_ + +#include + +/** + * @brief Static functions related to file name creation + */ +class Filenaming { + public: + /** + * @brief Creates the absolute name of a file by merging the path name, the filename and adding + * an optional timestamp. + * + * @param path + * @param filename + * @param addTimestap Set to true if timestamp should be considered in name + * + * @return The absolute filename + */ + static std::string generateAbsoluteFilename(std::string path, std::string filename, + bool addTimestamp); + + private: + Filenaming(); +}; + +#endif /* MISSION_UTILITY_FILENAMING_H_ */ From f679461164ae47efe88022bc9b28f8e537f03512 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 13 Apr 2022 15:31:54 +0200 Subject: [PATCH 012/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 9561dd2f..f2d3f8c6 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 9561dd2f14b769aa722f4934805d082a23bfec7a +Subproject commit f2d3f8c68cf4f565da885747e44db31b84b275a6 From 10343a0dab0263ab16aabecbfd436f792ffa6830 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 14 Apr 2022 07:52:21 +0200 Subject: [PATCH 013/115] supervisor event buffer request --- bsp_te0720_1cfa/ObjectFactory.cpp | 28 +++--- common/config/devConf.h | 11 ++- fsfw | 2 +- generators/bsp_q7s_events.csv | 21 ++-- generators/bsp_q7s_returnvalues.csv | 4 +- generators/events/translateEvents.cpp | 29 ++++-- generators/objects/translateObjects.cpp | 2 +- .../PlocSupervisorDefinitions.h | 4 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 95 ++++++++++++------- linux/devices/ploc/PlocSupvHelper.cpp | 37 +++++--- linux/devices/ploc/PlocSupvHelper.h | 4 +- linux/fsfwconfig/events/translateEvents.cpp | 29 ++++-- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- mission/utility/Filenaming.cpp | 2 +- mission/utility/Filenaming.h | 1 - 15 files changed, 166 insertions(+), 105 deletions(-) diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index 4cd90c45..d6e2b5ad 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -47,19 +47,6 @@ void ObjectFactory::produce(void* args) { new UartComIF(objects::UART_COM_IF); -#if OBSW_ADD_PLOC_MPSOC == 1 - UartCookie* mpsocUartCookie = - new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, UartModes::NON_CANONICAL, - uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); - mpsocUartCookie->setNoFixedSizeReply(); - PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); - auto mpsocGpioIF = new DummyGpioIF(); - PlocMPSoCHandler* plocMPSoCHandler = new PlocMPSoCHandler( - objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, plocMpsocHelper, - Gpio(gpioIds::ENABLE_MPSOC_UART, mpsocGpioIF), objects::PLOC_SUPERVISOR_HANDLER); - plocMPSoCHandler->setStartUpImmediately(); -#endif /* OBSW_ADD_PLOC_MPSOC == 1 */ - #if OBSW_TEST_LIBGPIOD == 1 #if OBSW_TEST_GPIO_OPEN_BYLABEL == 1 /* Configure MIO0 as input */ @@ -131,11 +118,24 @@ new UartComIF(objects::UART_COM_IF); pcduSwitches::TCS_BOARD_8V_HEATER_IN); #endif +#if OBSW_ADD_PLOC_MPSOC == 1 + UartCookie* mpsocUartCookie = + new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, UartModes::NON_CANONICAL, + uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); + mpsocUartCookie->setNoFixedSizeReply(); + PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); + auto mpsocGpioIF = new DummyGpioIF(); + PlocMPSoCHandler* plocMPSoCHandler = new PlocMPSoCHandler( + objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, plocMpsocHelper, + Gpio(gpioIds::ENABLE_MPSOC_UART, mpsocGpioIF), objects::PLOC_SUPERVISOR_HANDLER); + plocMPSoCHandler->setStartUpImmediately(); +#endif /* OBSW_ADD_PLOC_MPSOC == 1 */ + #if OBSW_ADD_PLOC_SUPERVISOR == 1 /* Configuration for MIO0 on TE0720-03-1CFA */ UartCookie* supervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, std::string("/dev/ttyPS1"), - UartModes::NON_CANONICAL, 115200, supv::MAX_PACKET_SIZE * 20); + UartModes::NON_CANONICAL, uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); supervisorCookie->setNoFixedSizeReply(); auto supvGpioIF = new DummyGpioIF(); auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); diff --git a/common/config/devConf.h b/common/config/devConf.h index 7e09b50f..c3971958 100644 --- a/common/config/devConf.h +++ b/common/config/devConf.h @@ -3,6 +3,7 @@ #include #include +#include /** * SPI configuration will be contained here to let the device handlers remain independent @@ -49,11 +50,11 @@ static constexpr spi::SpiModes RTD_MODE = spi::SpiModes::MODE_3; namespace uart { static constexpr size_t HYPERION_GPS_REPLY_MAX_BUFFER = 1024; -static constexpr uint32_t SYRLINKS_BAUD = 38400; -static constexpr uint32_t GNSS_BAUD = 9600; -static constexpr uint32_t PLOC_MPSOC_BAUD = 115200; -static constexpr uint32_t PLOC_SUPERVISOR_BAUD = 115200; -static constexpr uint32_t STAR_TRACKER_BAUD = 921600; +static constexpr UartBaudRate SYRLINKS_BAUD = UartBaudRate::RATE_38400; +static constexpr UartBaudRate GNSS_BAUD = UartBaudRate::RATE_9600; +static constexpr UartBaudRate PLOC_MPSOC_BAUD = UartBaudRate::RATE_115200; +static constexpr UartBaudRate PLOC_SUPV_BAUD = UartBaudRate::RATE_115200; +static constexpr UartBaudRate STAR_TRACKER_BAUD = UartBaudRate::RATE_921600; } diff --git a/fsfw b/fsfw index 43917d98..ce17be63 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 43917d98c025b446aa0d79d2166b1f031fb288ae +Subproject commit ce17be63f4f3bb8947843e423685c622510ae09f diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index c9726958..21760c44 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -141,15 +141,18 @@ 12100;0x2f44;SUPV_UPDATE_FAILED;LOW;update failed;linux\devices\ploc\PlocSupvHelper.h 12101;0x2f45;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux\devices\ploc\PlocSupvHelper.h 12102;0x2f46;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux\devices\ploc\PlocSupvHelper.h -12103;0x2f47;SUPV_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocSupvHelper.h -12104;0x2f48;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\PlocSupvHelper.h -12105;0x2f49;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\PlocSupvHelper.h -12106;0x2f4a;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h -12107;0x2f4b;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h -12108;0x2f4c;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h -12109;0x2f4d;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h -12110;0x2f4e;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\PlocSupvHelper.h -12111;0x2f4f;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\PlocSupvHelper.h +12103;0x2f47;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux\devices\ploc\PlocSupvHelper.h +12104;0x2f48;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux\devices\ploc\PlocSupvHelper.h +12105;0x2f49;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux\devices\ploc\PlocSupvHelper.h +12106;0x2f4a;SUPV_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocSupvHelper.h +12107;0x2f4b;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\PlocSupvHelper.h +12108;0x2f4c;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\PlocSupvHelper.h +12109;0x2f4d;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h +12110;0x2f4e;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +12111;0x2f4f;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +12112;0x2f50;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h +12113;0x2f51;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\PlocSupvHelper.h +12114;0x2f52;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\PlocSupvHelper.h 12200;0x2fa8;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission\devices\PayloadPcduHandler.h 12201;0x2fa9;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h 12202;0x2faa;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h diff --git a/generators/bsp_q7s_returnvalues.csv b/generators/bsp_q7s_returnvalues.csv index a66555cc..104795ca 100644 --- a/generators/bsp_q7s_returnvalues.csv +++ b/generators/bsp_q7s_returnvalues.csv @@ -493,7 +493,9 @@ 0x61a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER 0x68a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocMPSoCHelper.h;PLOC_MPSOC_HELPER 0x5aa0;PLSPVhLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER -0x5aa1;PLSPVhLP_ProcessTerminated;;0xA1;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER +0x5aa1;PLSPVhLP_ProcessTerminated;Process has been terminated by command;0xA1;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER +0x5aa2;PLSPVhLP_PathNotExists;Received command with invalid pathname;0xA2;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER +0x5aa3;PLSPVhLP_EventBufferReplyInvalidApid;Expected event buffer TM but received space packet with other APID;0xA3;linux\devices\ploc\PlocSupvHelper.h;PLOC_SUPV_HELPER 0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 0f4e7e7f..41070410 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 177 translations. + * @brief Auto-generated event translation file. Contains 180 translations. * @details - * Generated on: 2022-04-10 13:17:48 + * Generated on: 2022-04-13 17:02:22 */ #include "translateEvents.h" @@ -148,6 +148,9 @@ const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; +const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; +const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; @@ -468,22 +471,28 @@ const char *translateEvents(Event event) { case (12102): return TERMINATED_UPDATE_PROCEDURE_STRING; case (12103): - return SUPV_SENDING_COMMAND_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; case (12104): - return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; case (12105): - return SUPV_HELPER_READING_REPLY_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; case (12106): - return SUPV_MISSING_ACK_STRING; + return SUPV_SENDING_COMMAND_FAILED_STRING; case (12107): - return SUPV_MISSING_EXE_STRING; + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12108): - return SUPV_ACK_FAILURE_REPORT_STRING; + return SUPV_HELPER_READING_REPLY_FAILED_STRING; case (12109): - return SUPV_EXE_FAILURE_REPORT_STRING; + return SUPV_MISSING_ACK_STRING; case (12110): - return SUPV_ACK_INVALID_APID_STRING; + return SUPV_MISSING_EXE_STRING; case (12111): + return SUPV_ACK_FAILURE_REPORT_STRING; + case (12112): + return SUPV_EXE_FAILURE_REPORT_STRING; + case (12113): + return SUPV_ACK_INVALID_APID_STRING; + case (12114): return SUPV_EXE_INVALID_APID_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index b041aa1d..5f8fa397 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 117 translations. - * Generated on: 2022-04-10 13:17:55 + * Generated on: 2022-04-13 17:02:27 */ #include "translateObjects.h" diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index c5569265..3028680c 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -71,7 +71,7 @@ static const uint16_t SIZE_EXE_REPORT = 14; static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; -static const uint16_t SIZE_LOGGING_REPORT = 44; +static const uint16_t SIZE_LOGGING_REPORT = 45; /** * SpacePacket apids of telemetry packets @@ -1260,7 +1260,7 @@ class TmPacket : public SpacePacket { * @brief Returns the payload data length (data field length without CRC) */ uint16_t getPayloadDataLength() { - this->getPacketDataLength() - 1; + return this->getPacketDataLength() - 1; } ReturnValue_t checkCrc() { diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 75071f01..09c4c61b 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -117,11 +117,18 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, plocSupvHelperExecuting = true; return EXECUTION_FINISHED; } - case LOGGING_REQUEST_EVENT_BUFFERS: + case LOGGING_REQUEST_EVENT_BUFFERS: { if (size > config::MAX_PATH_SIZE) { return SupvReturnValuesIF::FILENAME_TOO_LONG; } - supvHelper->startEventbBufferRequest(std::string(reinterpret_cast(data), size)); + result = supvHelper->startEventbBufferRequest( + std::string(reinterpret_cast(data), size)); + if (result != RETURN_OK) { + return result; + } + plocSupvHelperExecuting = true; + return EXECUTION_FINISHED; + } default: break; } @@ -335,7 +342,8 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d break; } case LOGGING_SET_TOPIC: { - RequestLoggingData packet(RequestLoggingData::Sa::SET_LOGGING_TOPIC); + uint8_t tpc = *(commandData); + RequestLoggingData packet(RequestLoggingData::Sa::SET_LOGGING_TOPIC, tpc); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); result = RETURN_OK; break; @@ -394,6 +402,8 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(ENABLE_ADC_MONITOR_TASK); this->insertInCommandMap(DISABLE_ADC_MONITOR_TASK); this->insertInCommandMap(LOGGING_REQUEST_COUNTERS); + this->insertInCommandMap(LOGGING_CLEAR_COUNTERS); + this->insertInCommandMap(LOGGING_SET_TOPIC); this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); @@ -504,6 +514,8 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case supv::DISABLE_AUTO_TM: case supv::ENABLE_ADC_MONITOR_TASK: case supv::DISABLE_ADC_MONITOR_TASK: + case supv::LOGGING_CLEAR_COUNTERS: + case supv::LOGGING_SET_TOPIC: enabledReplies = 2; break; default: @@ -534,11 +546,12 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t remainingSize, DeviceCommandId_t* foundId, size_t* foundLen) { - if (nextReplyId == supv::FIRST_MRAM_DUMP) { - *foundId = supv::FIRST_MRAM_DUMP; + using namespace supv; + if (nextReplyId == FIRST_MRAM_DUMP) { + *foundId = FIRST_MRAM_DUMP; return parseMramPackets(start, remainingSize, foundLen); - } else if (nextReplyId == supv::CONSECUTIVE_MRAM_DUMP) { - *foundId = supv::CONSECUTIVE_MRAM_DUMP; + } else if (nextReplyId == CONSECUTIVE_MRAM_DUMP) { + *foundId = CONSECUTIVE_MRAM_DUMP; return parseMramPackets(start, remainingSize, foundLen); } @@ -547,37 +560,37 @@ ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t r uint16_t apid = (*(start) << 8 | *(start + 1)) & APID_MASK; switch (apid) { - case (supv::APID_ACK_SUCCESS): - *foundLen = supv::SIZE_ACK_REPORT; - *foundId = supv::ACK_REPORT; + case (APID_ACK_SUCCESS): + *foundLen = SIZE_ACK_REPORT; + *foundId = ACK_REPORT; break; - case (supv::APID_ACK_FAILURE): - *foundLen = supv::SIZE_ACK_REPORT; - *foundId = supv::ACK_REPORT; + case (APID_ACK_FAILURE): + *foundLen = SIZE_ACK_REPORT; + *foundId = ACK_REPORT; break; - case (supv::APID_HK_REPORT): - *foundLen = supv::SIZE_HK_REPORT; - *foundId = supv::HK_REPORT; + case (APID_HK_REPORT): + *foundLen = SIZE_HK_REPORT; + *foundId = HK_REPORT; break; - case (supv::APID_BOOT_STATUS_REPORT): - *foundLen = supv::SIZE_BOOT_STATUS_REPORT; - *foundId = supv::BOOT_STATUS_REPORT; + case (APID_BOOT_STATUS_REPORT): + *foundLen = SIZE_BOOT_STATUS_REPORT; + *foundId = BOOT_STATUS_REPORT; break; - case (supv::APID_LATCHUP_STATUS_REPORT): - *foundLen = supv::SIZE_LATCHUP_STATUS_REPORT; - *foundId = supv::LATCHUP_REPORT; + case (APID_LATCHUP_STATUS_REPORT): + *foundLen = SIZE_LATCHUP_STATUS_REPORT; + *foundId = LATCHUP_REPORT; break; - case (supv::APID_DATA_LOGGER_DATA): - *foundLen = supv::SIZE_LOGGING_REPORT; - *foundId = supv::LOGGING_REPORT; + case (APID_DATA_LOGGER_DATA): + *foundLen = SIZE_LOGGING_REPORT; + *foundId = LOGGING_REPORT; break; - case (supv::APID_EXE_SUCCESS): - *foundLen = supv::SIZE_EXE_REPORT; - *foundId = supv::EXE_REPORT; + case (APID_EXE_SUCCESS): + *foundLen = SIZE_EXE_REPORT; + *foundId = EXE_REPORT; break; - case (supv::APID_EXE_FAILURE): - *foundLen = supv::SIZE_EXE_REPORT; - *foundId = supv::EXE_REPORT; + case (APID_EXE_FAILURE): + *foundLen = SIZE_EXE_REPORT; + *foundId = EXE_REPORT; break; default: { sif::debug << "PlocSupervisorHandler::scanForReply: Reply has invalid apid" << std::endl; @@ -687,6 +700,16 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_YEAR, new PoolEntry({0})); localDataPoolMap.emplace(supv::LATCHUP_RPT_IS_SET, new PoolEntry({0})); + localDataPoolMap.emplace(supv::SUPERVISOR_REBOOTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_EVENTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_TRIGGERS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::PS_HEARTBEATS_LOST, new PoolEntry({0})); + localDataPoolMap.emplace(supv::PL_HEARTBEATS_LOST, new PoolEntry({0})); + localDataPoolMap.emplace(supv::TC_RECEIVED, new PoolEntry({0})); + localDataPoolMap.emplace(supv::TM_RECEIVED, new PoolEntry({0})); + localDataPoolMap.emplace(supv::SOC_BOOTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::SOC_BOOT_FAILS, new PoolEntry({0})); + return HasReturnvaluesIF::RETURN_OK; } @@ -1037,7 +1060,7 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { return result; } - const uint8_t* dataField = data + supv::DATA_FIELD_OFFSET + sizeof(sa); + const uint8_t* dataField = data + supv::DATA_FIELD_OFFSET + sizeof(supv::RequestLoggingData::Sa); result = loggingReport.read(); if (result != RETURN_OK) { return result; @@ -1078,6 +1101,9 @@ void PlocSupervisorHandler::setNextReplyId() { case supv::CONSECUTIVE_MRAM_DUMP: nextReplyId = supv::CONSECUTIVE_MRAM_DUMP; break; + case supv::LOGGING_REQUEST_COUNTERS: + nextReplyId = supv::LOGGING_REPORT; + break; default: /* If no telemetry is expected the next reply is always the execution report */ nextReplyId = supv::EXE_REPORT; @@ -1331,9 +1357,10 @@ void PlocSupervisorHandler::prepareSetShutdownTimeoutCmd(const uint8_t* commandD ReturnValue_t PlocSupervisorHandler::prepareLoggingRequest(const uint8_t* commandData, size_t commandDataLen) { - uint8_t sa = *commandData; + using namespace supv; + RequestLoggingData::Sa sa = static_cast(*commandData); uint8_t tpc = *(commandData + 1); - supv::RequestLoggingData packet(sa, tpc); + RequestLoggingData packet(sa, tpc); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); return RETURN_OK; } diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index c59f7e00..b003241f 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -11,6 +11,7 @@ #include "bsp_q7s/memory/FilesystemHelper.h" #include "fsfw/globalfunctions/CRC.h" #include "mission/utility/Timestamp.h" +#include "mission/utility/Filenaming.h" PlocSupvHelper::PlocSupvHelper(object_id_t objectId) : SystemObject(objectId) {} @@ -195,7 +196,7 @@ ReturnValue_t PlocSupvHelper::performUpdate() { ReturnValue_t PlocSupvHelper::performEventBufferRequest() { using namespace supv; - ReturnValuet_t result = RETURN_OK; + ReturnValue_t result = RETURN_OK; RequestLoggingData packet(RequestLoggingData::Sa::REQUEST_EVENT_BUFFERS); result = sendCommand(packet); if (result != RETURN_OK) { @@ -213,6 +214,7 @@ ReturnValue_t PlocSupvHelper::performEventBufferRequest() { if (result != RETURN_OK) { return result; } + return result; } ReturnValue_t PlocSupvHelper::prepareUpdate() { @@ -337,8 +339,8 @@ ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t } } if (remainingBytes != 0) { - sif::warning << "PlocSupvHelper::handleTmReception: Failed to receive reply" << std::endl; - triggerEvent(SUPV_MISSING_EXE, remainingBytes, static_cast(internalState)); + sif::warning << "PlocSupvHelper::handleTmReception: Failed to read " << remainingBytes + << " bytes" << std::endl; return RETURN_FAILED; } result = tmPacket->checkCrc(); @@ -437,31 +439,40 @@ uint32_t PlocSupvHelper::getFileSize(std::string filename) { } ReturnValue_t PlocSupvHelper::handleEventBufferReception() { - std::sring filename = Filenaming::generateAbsoluteFilename(eventBufferReq.pat, + ReturnValue_t result = RETURN_OK; + std::string filename = Filenaming::generateAbsoluteFilename(eventBufferReq.path, eventBufferReq.filename, timestamping); std::ofstream file(filename, std::ios_base::app | std::ios_base::out); uint32_t packetsRead = 0; + size_t requestLen = 0; supv::TmPacket tmPacket; - for (packetsRead = 0; packetsRead < NUM_EVENT_BUFFER_PACKETS - 1; packetsRead++) { + for (packetsRead = 0; packetsRead < NUM_EVENT_BUFFER_PACKETS; packetsRead++) { if (terminate) { triggerEvent(SUPV_EVENT_BUFFER_REQUEST_TERMINATED, packetsRead - 1); file.close(); return PROCESS_TERMINATED; } - result = handleTmReception(&tmPacket, SIZE_EVENT_BUFFER_FULL_PACKET); + if (packetsRead == NUM_EVENT_BUFFER_PACKETS - 1) { + requestLen = SIZE_EVENT_BUFFER_LAST_PACKET; + } else { + requestLen = SIZE_EVENT_BUFFER_FULL_PACKET; + } + result = handleTmReception(&tmPacket, requestLen); if (result != RETURN_OK) { + sif::debug << "PlocSupvHelper::handleEventBufferReception: Failed while trying to read packet" + << " " << packetsRead + 1 << std::endl; + file.close(); return result; } uint16_t apid = tmPacket.getAPID(); if (apid != supv::APID_MRAM_DUMP_TM) { sif::warning << "PlocSupvHelper::handleEventBufferReception: Did not expect space packet " - << "with APID " << std::hex << std::endl; - return EVENT_BUFFER_REQUEST_INVALID_APID; + << "with APID 0x" << std::hex << apid << std::endl; + file.close(); + return EVENT_BUFFER_REPLY_INVALID_APID; } - file.write(reinterpret_cast(spacePacketBuffer + supv::SPACE_PACKET_HEADER_LENGTH), - packetLen - 1); + file.write(reinterpret_cast(tmPacket.getPacketData()), + tmPacket.getPayloadDataLength()); } - - file.write(reinterpret_cast(spacePacketBuffer + supv::SPACE_PACKET_HEADER_LENGTH), - packetLen - 1); + return result; } diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index f7d28308..0fe99cff 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -112,7 +112,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Received command with invalid pathname static const ReturnValue_t PATH_NOT_EXISTS = MAKE_RETURN_CODE(0xA2); //! [EXPORT] : [COMMENT] Expected event buffer TM but received space packet with other APID - static const ReturnValue_t EVENT_BUFFER_REQUEST_INVALID_APID = MAKE_RETURN_CODE(0xA3); + static const ReturnValue_t EVENT_BUFFER_REPLY_INVALID_APID = MAKE_RETURN_CODE(0xA3); // Maximum number of times the communication interface retries polling data from the reply // buffer @@ -140,7 +140,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha std::string path = ""; // Default name of file where event buffer data will be written to. Timestamp will be added to // name when new file is created - std::string filename = "event-buffer"; + std::string filename = "event-buffer.bin"; }; EventBufferRequest eventBufferReq; diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 0f4e7e7f..41070410 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 177 translations. + * @brief Auto-generated event translation file. Contains 180 translations. * @details - * Generated on: 2022-04-10 13:17:48 + * Generated on: 2022-04-13 17:02:22 */ #include "translateEvents.h" @@ -148,6 +148,9 @@ const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; +const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; +const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; @@ -468,22 +471,28 @@ const char *translateEvents(Event event) { case (12102): return TERMINATED_UPDATE_PROCEDURE_STRING; case (12103): - return SUPV_SENDING_COMMAND_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; case (12104): - return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; case (12105): - return SUPV_HELPER_READING_REPLY_FAILED_STRING; + return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; case (12106): - return SUPV_MISSING_ACK_STRING; + return SUPV_SENDING_COMMAND_FAILED_STRING; case (12107): - return SUPV_MISSING_EXE_STRING; + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12108): - return SUPV_ACK_FAILURE_REPORT_STRING; + return SUPV_HELPER_READING_REPLY_FAILED_STRING; case (12109): - return SUPV_EXE_FAILURE_REPORT_STRING; + return SUPV_MISSING_ACK_STRING; case (12110): - return SUPV_ACK_INVALID_APID_STRING; + return SUPV_MISSING_EXE_STRING; case (12111): + return SUPV_ACK_FAILURE_REPORT_STRING; + case (12112): + return SUPV_EXE_FAILURE_REPORT_STRING; + case (12113): + return SUPV_ACK_INVALID_APID_STRING; + case (12114): return SUPV_EXE_INVALID_APID_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index b041aa1d..5f8fa397 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 117 translations. - * Generated on: 2022-04-10 13:17:55 + * Generated on: 2022-04-13 17:02:27 */ #include "translateObjects.h" diff --git a/mission/utility/Filenaming.cpp b/mission/utility/Filenaming.cpp index c3e98ffe..b64d1f01 100644 --- a/mission/utility/Filenaming.cpp +++ b/mission/utility/Filenaming.cpp @@ -4,7 +4,7 @@ Filenaming::Filenaming() { } -std::string FilesystemHelper::generateAbsoluteFilename(std::string path, std::string filename, +std::string Filenaming::generateAbsoluteFilename(std::string path, std::string filename, bool addTimestamp) { std::string absoluteName; Timestamp timestamp; diff --git a/mission/utility/Filenaming.h b/mission/utility/Filenaming.h index 9c7b1cb8..201cf78a 100644 --- a/mission/utility/Filenaming.h +++ b/mission/utility/Filenaming.h @@ -20,7 +20,6 @@ class Filenaming { */ static std::string generateAbsoluteFilename(std::string path, std::string filename, bool addTimestamp); - private: Filenaming(); }; From 285ec9be6ac2508b9ff6382711c00cf7ebafe9e3 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 14 Apr 2022 07:53:44 +0200 Subject: [PATCH 014/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index f2d3f8c6..a3d9e83d 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit f2d3f8c68cf4f565da885747e44db31b84b275a6 +Subproject commit a3d9e83dc6aa378d92f0d97dfe734ab67f705805 From 7b548553972412c259ce99161730b0d1d8e118ce Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 16 Apr 2022 17:19:32 +0200 Subject: [PATCH 015/115] supervisor fixes detected during testing --- bsp_q7s/core/InitMission.cpp | 2 +- bsp_q7s/core/ObjectFactory.cpp | 6 +- common/config/commonObjects.h | 1 - common/config/commonSubsystemIds.h | 2 +- generators/bsp_q7s_events.csv | 42 ++++--- generators/bsp_q7s_objects.csv | 1 - generators/events/translateEvents.cpp | 106 ++++++++++++------ generators/objects/translateObjects.cpp | 7 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 4 +- linux/devices/ploc/PlocSupvHelper.cpp | 36 ++++-- linux/devices/ploc/PlocSupvHelper.h | 5 +- linux/fsfwconfig/events/translateEvents.cpp | 106 ++++++++++++------ linux/fsfwconfig/objects/translateObjects.cpp | 7 +- .../pollingSequenceFactory.cpp | 1 - mission/utility/ProgressPrinter.cpp | 2 +- mission/utility/ProgressPrinter.h | 11 +- tmtc | 2 +- 17 files changed, 218 insertions(+), 123 deletions(-) diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index b6e65eca..52a3495d 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -239,7 +239,7 @@ void initmission::initTasks() { acsTask->startTask(); #endif sysTask->startTask(); - + supvHelperTask->startTask(); sif::info << "Tasks started.." << std::endl; } diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 463df337..8bd2f8d0 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -663,12 +663,12 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF) { gpioComIF->addGpios(supvGpioCookie); auto supervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, q7s::UART_PLOC_SUPERVSIOR_DEV, UartModes::NON_CANONICAL, - uart::PLOC_SUPERVISOR_BAUD, supv::MAX_PACKET_SIZE * 20); + uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); supervisorCookie->setNoFixedSizeReply(); - new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); + auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, gpioComIF), - pcduSwitches::PDU1_CH6_PLOC_12V); + pcduSwitches::PDU1_CH6_PLOC_12V, supvHelper); #endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */ static_cast(consumer); } diff --git a/common/config/commonObjects.h b/common/config/commonObjects.h index a4f3319e..8223a87f 100644 --- a/common/config/commonObjects.h +++ b/common/config/commonObjects.h @@ -87,7 +87,6 @@ enum commonObjects: uint32_t { STAR_TRACKER = 0x44130001, - PLOC_UPDATER = 0x44330000, PLOC_MEMORY_DUMPER = 0x44330001, STR_HELPER = 0x44330002, PLOC_MPSOC_HELPER = 0x44330003, diff --git a/common/config/commonSubsystemIds.h b/common/config/commonSubsystemIds.h index a93986a1..6a4a6b03 100644 --- a/common/config/commonSubsystemIds.h +++ b/common/config/commonSubsystemIds.h @@ -15,7 +15,7 @@ enum: uint8_t { STR_HANDLER = 114, PLOC_SUPERVISOR_HANDLER = 115, FILE_SYSTEM = 116, - PLOC_UPDATER = 117, + PLOC_SUPV_HELPER = 117, PLOC_MEMORY_DUMPER = 118, PDEC_HANDLER = 119, STR_HELPER = 120, diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 21760c44..7cc4be65 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -114,6 +114,21 @@ 11505;0x2cf1;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux\devices\ploc\PlocSupervisorHandler.h 11600;0x2d50;SANITIZATION_FAILED;LOW;;bsp_q7s\memory\SdCardManager.h 11601;0x2d51;MOUNTED_SD_CARD;INFO;;bsp_q7s\memory\SdCardManager.h +11700;0x2db4;SUPV_UPDATE_FAILED;LOW;update failed;linux\devices\ploc\PlocSupvHelper.h +11701;0x2db5;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux\devices\ploc\PlocSupvHelper.h +11702;0x2db6;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux\devices\ploc\PlocSupvHelper.h +11703;0x2db7;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux\devices\ploc\PlocSupvHelper.h +11704;0x2db8;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux\devices\ploc\PlocSupvHelper.h +11705;0x2db9;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux\devices\ploc\PlocSupvHelper.h +11706;0x2dba;SUPV_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocSupvHelper.h +11707;0x2dbb;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\PlocSupvHelper.h +11708;0x2dbc;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\PlocSupvHelper.h +11709;0x2dbd;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h +11710;0x2dbe;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +11711;0x2dbf;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h +11712;0x2dc0;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h +11713;0x2dc1;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\PlocSupvHelper.h +11714;0x2dc2;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\PlocSupvHelper.h 11800;0x2e18;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 11801;0x2e19;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 11802;0x2e1a;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux\devices\ploc\PlocMemoryDumper.h @@ -138,21 +153,18 @@ 12014;0x2eee;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux\devices\startracker\StrHelper.h 12015;0x2eef;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux\devices\startracker\StrHelper.h 12016;0x2ef0;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux\devices\startracker\StrHelper.h -12100;0x2f44;SUPV_UPDATE_FAILED;LOW;update failed;linux\devices\ploc\PlocSupvHelper.h -12101;0x2f45;SUPV_UPDATE_SUCCESSFUL;LOW;update successful;linux\devices\ploc\PlocSupvHelper.h -12102;0x2f46;TERMINATED_UPDATE_PROCEDURE;LOW;Terminated update procedure by command;linux\devices\ploc\PlocSupvHelper.h -12103;0x2f47;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux\devices\ploc\PlocSupvHelper.h -12104;0x2f48;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux\devices\ploc\PlocSupvHelper.h -12105;0x2f49;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux\devices\ploc\PlocSupvHelper.h -12106;0x2f4a;SUPV_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocSupvHelper.h -12107;0x2f4b;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\PlocSupvHelper.h -12108;0x2f4c;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\PlocSupvHelper.h -12109;0x2f4d;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h -12110;0x2f4e;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h -12111;0x2f4f;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h -12112;0x2f50;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h -12113;0x2f51;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\PlocSupvHelper.h -12114;0x2f52;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\PlocSupvHelper.h +12100;0x2f44;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux\devices\ploc\PlocMPSoCHelper.h +12101;0x2f45;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux\devices\ploc\PlocMPSoCHelper.h +12102;0x2f46;MPSOC_SENDING_COMMAND_FAILED;LOW;;linux\devices\ploc\PlocMPSoCHelper.h +12103;0x2f47;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 +12104;0x2f48;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 +12105;0x2f49;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 +12106;0x2f4a;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 +12107;0x2f4b;MPSOC_ACK_FAILURE_REPORT;LOW;Received acknowledgment failure report P1: Internal state of MPSoC;linux\devices\ploc\PlocMPSoCHelper.h +12108;0x2f4c;MPSOC_EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux\devices\ploc\PlocMPSoCHelper.h +12109;0x2f4d;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 +12110;0x2f4e;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 +12111;0x2f4f;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 12200;0x2fa8;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission\devices\PayloadPcduHandler.h 12201;0x2fa9;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h 12202;0x2faa;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission\devices\PayloadPcduHandler.h diff --git a/generators/bsp_q7s_objects.csv b/generators/bsp_q7s_objects.csv index a19c8e77..98b1453e 100644 --- a/generators/bsp_q7s_objects.csv +++ b/generators/bsp_q7s_objects.csv @@ -37,7 +37,6 @@ 0x44260000;BPX_BATT_HANDLER 0x44300000;PLPCDU_HANDLER 0x443200A5;RAD_SENSOR -0x44330000;PLOC_UPDATER 0x44330001;PLOC_MEMORY_DUMPER 0x44330002;STR_HELPER 0x44330003;PLOC_MPSOC_HELPER diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 41070410..842d6979 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 180 translations. + * @brief Auto-generated event translation file. Contains 192 translations. * @details - * Generated on: 2022-04-13 17:02:22 + * Generated on: 2022-04-14 15:49:05 */ #include "translateEvents.h" @@ -121,6 +121,21 @@ const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; +const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; +const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; +const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; +const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; +const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; +const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; +const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; +const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; +const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; +const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; +const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; +const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; +const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; +const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FAILED_STRING = "MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FINISHED_STRING = "MRAM_DUMP_FINISHED"; @@ -145,21 +160,18 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH"; const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS"; const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED"; const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED"; -const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; -const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; -const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; -const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; -const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; -const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; -const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; -const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; -const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; -const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; -const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; -const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; -const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; -const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; -const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; +const char *MPSOC_FLASH_WRITE_FAILED_STRING = "MPSOC_FLASH_WRITE_FAILED"; +const char *MPSOC_FLASH_WRITE_SUCCESSFUL_STRING = "MPSOC_FLASH_WRITE_SUCCESSFUL"; +const char *MPSOC_SENDING_COMMAND_FAILED_STRING = "MPSOC_SENDING_COMMAND_FAILED"; +const char *MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING = "MPSOC_HELPER_REQUESTING_REPLY_FAILED"; +const char *MPSOC_HELPER_READING_REPLY_FAILED_STRING = "MPSOC_HELPER_READING_REPLY_FAILED"; +const char *MPSOC_MISSING_ACK_STRING = "MPSOC_MISSING_ACK"; +const char *MPSOC_MISSING_EXE_STRING = "MPSOC_MISSING_EXE"; +const char *MPSOC_ACK_FAILURE_REPORT_STRING = "MPSOC_ACK_FAILURE_REPORT"; +const char *MPSOC_EXE_FAILURE_REPORT_STRING = "MPSOC_EXE_FAILURE_REPORT"; +const char *MPSOC_ACK_INVALID_APID_STRING = "MPSOC_ACK_INVALID_APID"; +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 *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"; @@ -416,6 +428,36 @@ const char *translateEvents(Event event) { return SANITIZATION_FAILED_STRING; case (11601): return MOUNTED_SD_CARD_STRING; + case (11700): + return SUPV_UPDATE_FAILED_STRING; + case (11701): + return SUPV_UPDATE_SUCCESSFUL_STRING; + case (11702): + return TERMINATED_UPDATE_PROCEDURE_STRING; + case (11703): + return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; + case (11704): + return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; + case (11705): + return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; + case (11706): + return SUPV_SENDING_COMMAND_FAILED_STRING; + case (11707): + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + case (11708): + return SUPV_HELPER_READING_REPLY_FAILED_STRING; + case (11709): + return SUPV_MISSING_ACK_STRING; + case (11710): + return SUPV_MISSING_EXE_STRING; + case (11711): + return SUPV_ACK_FAILURE_REPORT_STRING; + case (11712): + return SUPV_EXE_FAILURE_REPORT_STRING; + case (11713): + return SUPV_ACK_INVALID_APID_STRING; + case (11714): + return SUPV_EXE_INVALID_APID_STRING; case (11800): return SEND_MRAM_DUMP_FAILED_STRING; case (11801): @@ -465,35 +507,29 @@ const char *translateEvents(Event event) { case (12016): return STR_HELPER_REQUESTING_MSG_FAILED_STRING; case (12100): - return SUPV_UPDATE_FAILED_STRING; + return MPSOC_FLASH_WRITE_FAILED_STRING; case (12101): - return SUPV_UPDATE_SUCCESSFUL_STRING; + return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING; case (12102): - return TERMINATED_UPDATE_PROCEDURE_STRING; + return MPSOC_SENDING_COMMAND_FAILED_STRING; case (12103): - return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; + return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12104): - return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; + return MPSOC_HELPER_READING_REPLY_FAILED_STRING; case (12105): - return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; + return MPSOC_MISSING_ACK_STRING; case (12106): - return SUPV_SENDING_COMMAND_FAILED_STRING; + return MPSOC_MISSING_EXE_STRING; case (12107): - return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + return MPSOC_ACK_FAILURE_REPORT_STRING; case (12108): - return SUPV_HELPER_READING_REPLY_FAILED_STRING; + return MPSOC_EXE_FAILURE_REPORT_STRING; case (12109): - return SUPV_MISSING_ACK_STRING; + return MPSOC_ACK_INVALID_APID_STRING; case (12110): - return SUPV_MISSING_EXE_STRING; + return MPSOC_EXE_INVALID_APID_STRING; case (12111): - return SUPV_ACK_FAILURE_REPORT_STRING; - case (12112): - return SUPV_EXE_FAILURE_REPORT_STRING; - case (12113): - return SUPV_ACK_INVALID_APID_STRING; - case (12114): - return SUPV_EXE_INVALID_APID_STRING; + return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; case (12201): diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index 5f8fa397..a67bae74 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -1,8 +1,8 @@ /** * @brief Auto-generated object translation file. * @details - * Contains 117 translations. - * Generated on: 2022-04-13 17:02:27 + * Contains 116 translations. + * Generated on: 2022-04-14 15:49:10 */ #include "translateObjects.h" @@ -45,7 +45,6 @@ const char *ACU_HANDLER_STRING = "ACU_HANDLER"; const char *BPX_BATT_HANDLER_STRING = "BPX_BATT_HANDLER"; 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 *PLOC_MPSOC_HELPER_STRING = "PLOC_MPSOC_HELPER"; @@ -204,8 +203,6 @@ const char *translateObject(object_id_t object) { return PLPCDU_HANDLER_STRING; case 0x443200A5: return RAD_SENSOR_STRING; - case 0x44330000: - return PLOC_UPDATER_STRING; case 0x44330001: return PLOC_MEMORY_DUMPER_STRING; case 0x44330002: diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 09c4c61b..e8a2163e 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -72,7 +72,7 @@ void PlocSupervisorHandler::performOperationHook() { handleEvent(&event); break; default: - sif::debug << "PlocMPSoCHandler::performOperationHook: Did not subscribe to this event" + sif::debug << "PlocSupervisorHandler::performOperationHook: Did not subscribe to this event" << " message" << std::endl; break; } @@ -160,6 +160,8 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d ReturnValue_t result = RETURN_FAILED; switch (deviceCommand) { case GET_HK_REPORT: { + sif::warning << "PlocSupervisorHandler::buildCommandFromCommand: Housekeeping report is " + << "faulty. Needs to be fixed in vorago software" << std::endl; prepareEmptyCmd(APID_GET_HK_REPORT); result = RETURN_OK; break; diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index b003241f..2e78149a 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -6,12 +6,13 @@ #include "OBSWConfig.h" #ifdef XIPHOS_Q7S #include "bsp_q7s/memory/FilesystemHelper.h" +#include "bsp_q7s/memory/SDCardManager.h" #endif -#include "bsp_q7s/memory/FilesystemHelper.h" #include "fsfw/globalfunctions/CRC.h" -#include "mission/utility/Timestamp.h" #include "mission/utility/Filenaming.h" +#include "mission/utility/ProgressPrinter.h" +#include "mission/utility/Timestamp.h" PlocSupvHelper::PlocSupvHelper(object_id_t objectId) : SystemObject(objectId) {} @@ -57,8 +58,7 @@ ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { } else if (result == PROCESS_TERMINATED) { // Event already triggered break; - } - else { + } else { triggerEvent(SUPV_EVENT_BUFFER_REQUEST_FAILED, result); } internalState = InternalState::IDLE; @@ -91,11 +91,11 @@ ReturnValue_t PlocSupvHelper::startUpdate(std::string file, uint8_t memoryId, sif::warning << "PlocSupvHelper::startUpdate: File " << file << " does not exist" << std::endl; return result; } - result = FileSytemHelper::fileExists(file); + result = FilesystemHelper::fileExists(file); if (result != RETURN_OK) { sif::warning << "PlocSupvHelper::startUpdate: The file " << file << " does not exist" << std::endl; - reurn result; + return result; } #endif #ifdef TE0720_1CFA @@ -148,6 +148,10 @@ ReturnValue_t PlocSupvHelper::performUpdate() { if (result != RETURN_OK) { return result; } +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + ProgressPrinter progressPrinter("Supervisor update: ", update.length, + ProgressPrinter::ONE_PERCENT); +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ uint8_t tempData[supv::WriteMemory::CHUNK_MAX]; std::ifstream file(update.file, std::ifstream::binary); size_t remainingSize = update.length; @@ -185,8 +189,10 @@ ReturnValue_t PlocSupvHelper::performUpdate() { return result; } bytesWritten += dataLength; +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + progressPrinter.print(bytesWritten); } - +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ result = handleCheckMemoryCommand(); if (result != RETURN_OK) { return result; @@ -340,7 +346,7 @@ ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t } if (remainingBytes != 0) { sif::warning << "PlocSupvHelper::handleTmReception: Failed to read " << remainingBytes - << " bytes" << std::endl; + << " bytes" << std::endl; return RETURN_FAILED; } result = tmPacket->checkCrc(); @@ -435,13 +441,15 @@ ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { uint32_t PlocSupvHelper::getFileSize(std::string filename) { std::ifstream file(filename, std::ifstream::binary); file.seekg(0, file.end); - return file.tellg(); + uint32_t size = file.tellg(); + file.close(); + return size; } ReturnValue_t PlocSupvHelper::handleEventBufferReception() { ReturnValue_t result = RETURN_OK; - std::string filename = Filenaming::generateAbsoluteFilename(eventBufferReq.path, - eventBufferReq.filename, timestamping); + std::string filename = Filenaming::generateAbsoluteFilename( + eventBufferReq.path, eventBufferReq.filename, timestamping); std::ofstream file(filename, std::ios_base::app | std::ios_base::out); uint32_t packetsRead = 0; size_t requestLen = 0; @@ -460,7 +468,7 @@ ReturnValue_t PlocSupvHelper::handleEventBufferReception() { result = handleTmReception(&tmPacket, requestLen); if (result != RETURN_OK) { sif::debug << "PlocSupvHelper::handleEventBufferReception: Failed while trying to read packet" - << " " << packetsRead + 1 << std::endl; + << " " << packetsRead + 1 << std::endl; file.close(); return result; } @@ -476,3 +484,7 @@ ReturnValue_t PlocSupvHelper::handleEventBufferReception() { } return result; } + +//ReturnValue_t PlocSupervisorHandler::parseStatusCode(std::string* meaning) { +// +//} diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index 0fe99cff..80ab4aeb 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -3,6 +3,7 @@ #include +#include "OBSWConfig.h" #include "fsfw/devicehandlers/CookieIF.h" #include "fsfw/objectmanager/SystemObject.h" #include "fsfw/osal/linux/BinarySemaphore.h" @@ -21,7 +22,7 @@ */ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public HasReturnvaluesIF { public: - static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_MPSOC_HELPER; + static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_SUPV_HELPER; //! [EXPORT] : [COMMENT] update failed static const Event SUPV_UPDATE_FAILED = MAKE_EVENT(0, severity::LOW); @@ -116,7 +117,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha // Maximum number of times the communication interface retries polling data from the reply // buffer - static const int RETRIES = 10000; + static const int RETRIES = 20000; static const uint16_t CRC16_INIT = 0xFFFF; // Event buffer reply will carry 24 space packets with 1016 bytes and one space packet with // 192 bytes diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 41070410..842d6979 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 180 translations. + * @brief Auto-generated event translation file. Contains 192 translations. * @details - * Generated on: 2022-04-13 17:02:22 + * Generated on: 2022-04-14 15:49:05 */ #include "translateEvents.h" @@ -121,6 +121,21 @@ const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; +const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; +const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; +const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; +const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; +const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; +const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; +const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; +const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; +const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; +const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; +const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; +const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; +const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; +const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; +const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FAILED_STRING = "MRAM_DUMP_FAILED"; const char *MRAM_DUMP_FINISHED_STRING = "MRAM_DUMP_FINISHED"; @@ -145,21 +160,18 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH"; const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS"; const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED"; const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED"; -const char *SUPV_UPDATE_FAILED_STRING = "SUPV_UPDATE_FAILED"; -const char *SUPV_UPDATE_SUCCESSFUL_STRING = "SUPV_UPDATE_SUCCESSFUL"; -const char *TERMINATED_UPDATE_PROCEDURE_STRING = "TERMINATED_UPDATE_PROCEDURE"; -const char *SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING = "SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL"; -const char *SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING = "SUPV_EVENT_BUFFER_REQUEST_FAILED"; -const char *SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING = "SUPV_EVENT_BUFFER_REQUEST_TERMINATED"; -const char *SUPV_SENDING_COMMAND_FAILED_STRING = "SUPV_SENDING_COMMAND_FAILED"; -const char *SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING = "SUPV_HELPER_REQUESTING_REPLY_FAILED"; -const char *SUPV_HELPER_READING_REPLY_FAILED_STRING = "SUPV_HELPER_READING_REPLY_FAILED"; -const char *SUPV_MISSING_ACK_STRING = "SUPV_MISSING_ACK"; -const char *SUPV_MISSING_EXE_STRING = "SUPV_MISSING_EXE"; -const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; -const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; -const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; -const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; +const char *MPSOC_FLASH_WRITE_FAILED_STRING = "MPSOC_FLASH_WRITE_FAILED"; +const char *MPSOC_FLASH_WRITE_SUCCESSFUL_STRING = "MPSOC_FLASH_WRITE_SUCCESSFUL"; +const char *MPSOC_SENDING_COMMAND_FAILED_STRING = "MPSOC_SENDING_COMMAND_FAILED"; +const char *MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING = "MPSOC_HELPER_REQUESTING_REPLY_FAILED"; +const char *MPSOC_HELPER_READING_REPLY_FAILED_STRING = "MPSOC_HELPER_READING_REPLY_FAILED"; +const char *MPSOC_MISSING_ACK_STRING = "MPSOC_MISSING_ACK"; +const char *MPSOC_MISSING_EXE_STRING = "MPSOC_MISSING_EXE"; +const char *MPSOC_ACK_FAILURE_REPORT_STRING = "MPSOC_ACK_FAILURE_REPORT"; +const char *MPSOC_EXE_FAILURE_REPORT_STRING = "MPSOC_EXE_FAILURE_REPORT"; +const char *MPSOC_ACK_INVALID_APID_STRING = "MPSOC_ACK_INVALID_APID"; +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 *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"; @@ -416,6 +428,36 @@ const char *translateEvents(Event event) { return SANITIZATION_FAILED_STRING; case (11601): return MOUNTED_SD_CARD_STRING; + case (11700): + return SUPV_UPDATE_FAILED_STRING; + case (11701): + return SUPV_UPDATE_SUCCESSFUL_STRING; + case (11702): + return TERMINATED_UPDATE_PROCEDURE_STRING; + case (11703): + return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; + case (11704): + return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; + case (11705): + return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; + case (11706): + return SUPV_SENDING_COMMAND_FAILED_STRING; + case (11707): + return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + case (11708): + return SUPV_HELPER_READING_REPLY_FAILED_STRING; + case (11709): + return SUPV_MISSING_ACK_STRING; + case (11710): + return SUPV_MISSING_EXE_STRING; + case (11711): + return SUPV_ACK_FAILURE_REPORT_STRING; + case (11712): + return SUPV_EXE_FAILURE_REPORT_STRING; + case (11713): + return SUPV_ACK_INVALID_APID_STRING; + case (11714): + return SUPV_EXE_INVALID_APID_STRING; case (11800): return SEND_MRAM_DUMP_FAILED_STRING; case (11801): @@ -465,35 +507,29 @@ const char *translateEvents(Event event) { case (12016): return STR_HELPER_REQUESTING_MSG_FAILED_STRING; case (12100): - return SUPV_UPDATE_FAILED_STRING; + return MPSOC_FLASH_WRITE_FAILED_STRING; case (12101): - return SUPV_UPDATE_SUCCESSFUL_STRING; + return MPSOC_FLASH_WRITE_SUCCESSFUL_STRING; case (12102): - return TERMINATED_UPDATE_PROCEDURE_STRING; + return MPSOC_SENDING_COMMAND_FAILED_STRING; case (12103): - return SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL_STRING; + return MPSOC_HELPER_REQUESTING_REPLY_FAILED_STRING; case (12104): - return SUPV_EVENT_BUFFER_REQUEST_FAILED_STRING; + return MPSOC_HELPER_READING_REPLY_FAILED_STRING; case (12105): - return SUPV_EVENT_BUFFER_REQUEST_TERMINATED_STRING; + return MPSOC_MISSING_ACK_STRING; case (12106): - return SUPV_SENDING_COMMAND_FAILED_STRING; + return MPSOC_MISSING_EXE_STRING; case (12107): - return SUPV_HELPER_REQUESTING_REPLY_FAILED_STRING; + return MPSOC_ACK_FAILURE_REPORT_STRING; case (12108): - return SUPV_HELPER_READING_REPLY_FAILED_STRING; + return MPSOC_EXE_FAILURE_REPORT_STRING; case (12109): - return SUPV_MISSING_ACK_STRING; + return MPSOC_ACK_INVALID_APID_STRING; case (12110): - return SUPV_MISSING_EXE_STRING; + return MPSOC_EXE_INVALID_APID_STRING; case (12111): - return SUPV_ACK_FAILURE_REPORT_STRING; - case (12112): - return SUPV_EXE_FAILURE_REPORT_STRING; - case (12113): - return SUPV_ACK_INVALID_APID_STRING; - case (12114): - return SUPV_EXE_INVALID_APID_STRING; + return MPSOC_HELPER_SEQ_CNT_MISMATCH_STRING; case (12200): return TRANSITION_BACK_TO_OFF_STRING; case (12201): diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index 5f8fa397..a67bae74 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -1,8 +1,8 @@ /** * @brief Auto-generated object translation file. * @details - * Contains 117 translations. - * Generated on: 2022-04-13 17:02:27 + * Contains 116 translations. + * Generated on: 2022-04-14 15:49:10 */ #include "translateObjects.h" @@ -45,7 +45,6 @@ const char *ACU_HANDLER_STRING = "ACU_HANDLER"; const char *BPX_BATT_HANDLER_STRING = "BPX_BATT_HANDLER"; 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 *PLOC_MPSOC_HELPER_STRING = "PLOC_MPSOC_HELPER"; @@ -204,8 +203,6 @@ const char *translateObject(object_id_t object) { return PLPCDU_HANDLER_STRING; case 0x443200A5: return RAD_SENSOR_STRING; - case 0x44330000: - return PLOC_UPDATER_STRING; case 0x44330001: return PLOC_MEMORY_DUMPER_STRING; case 0x44330002: diff --git a/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp b/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp index fdd4897e..5e683a89 100644 --- a/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp +++ b/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp @@ -472,7 +472,6 @@ ReturnValue_t pst::pstUart(FixedTimeslotTaskIF *thisSequence) { #endif #ifdef XIPHOS_Q7S - thisSequence->addSlot(objects::PLOC_UPDATER, length * 0, DeviceHandlerIF::PERFORM_OPERATION); thisSequence->addSlot(objects::PLOC_MEMORY_DUMPER, length * 0, DeviceHandlerIF::PERFORM_OPERATION); #endif diff --git a/mission/utility/ProgressPrinter.cpp b/mission/utility/ProgressPrinter.cpp index 16a0f148..1161c1f3 100644 --- a/mission/utility/ProgressPrinter.cpp +++ b/mission/utility/ProgressPrinter.cpp @@ -2,7 +2,7 @@ #include "fsfw/serviceinterface/ServiceInterfaceStream.h" -ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps) +ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps, uint32_t percentageResolution) : name(name), numSteps(numSteps) {} ProgressPrinter::~ProgressPrinter() {} diff --git a/mission/utility/ProgressPrinter.h b/mission/utility/ProgressPrinter.h index 593526ba..4889c567 100644 --- a/mission/utility/ProgressPrinter.h +++ b/mission/utility/ProgressPrinter.h @@ -10,13 +10,18 @@ */ class ProgressPrinter { public: + + static const uint32_t ONE_PERCENT = 1; + /** * @brief Constructor * - * @param name Name of the process to monitor - * @param numSteps Number of steps to execute + * @param name Name of the process to monitor + * @param numSteps Number of steps to execute + * @param percentageResolution Distance between printed percentage steps. E.g. 5 means that + * a printout will be generated after 0%, 5%, 10% etc. */ - ProgressPrinter(std::string name, uint32_t numSteps); + ProgressPrinter(std::string name, uint32_t numSteps, uint32_t percentageResolution = FIVE_PERCENT); virtual ~ProgressPrinter(); /** diff --git a/tmtc b/tmtc index a3d9e83d..edee0c1a 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit a3d9e83dc6aa378d92f0d97dfe734ab67f705805 +Subproject commit edee0c1aa38c7a07eb82cd358cd7e921536d075e From ffd64d04635016a7753e683ea0741408b960cfef Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 19 Apr 2022 13:33:37 +0200 Subject: [PATCH 016/115] improvements in supervisor helper --- bsp_q7s/core/InitMission.cpp | 2 +- generators/bsp_q7s_events.csv | 2 + generators/events/event_parser.py | 2 +- generators/events/translateEvents.cpp | 10 +- generators/objects/translateObjects.cpp | 2 +- .../PlocSupervisorDefinitions.h | 6 + linux/devices/ploc/PlocMPSoCHandler.cpp | 146 ++++----- linux/devices/ploc/PlocSupervisorHandler.cpp | 10 +- linux/devices/ploc/PlocSupervisorHandler.h | 1 + linux/devices/ploc/PlocSupvHelper.cpp | 57 ++-- linux/devices/ploc/PlocSupvHelper.h | 12 +- linux/fsfwconfig/events/translateEvents.cpp | 10 +- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- mission/utility/ProgressPrinter.cpp | 4 +- mission/utility/ProgressPrinter.h | 1 + .../libcsp/src/drivers/can/can_socketcan.c | 297 +++++++++--------- 16 files changed, 310 insertions(+), 254 deletions(-) diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index bf7d2afb..7164b8c9 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -169,7 +169,7 @@ void initmission::initTasks() { #if OBSW_ADD_PLOC_SUPERVISOR == 1 PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( - "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.3, missedDeadlineFunc); + "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 1.0, missedDeadlineFunc); result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 9a60709e..5e97bab8 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -190,3 +190,5 @@ 13612;0x352c;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h 13613;0x352d;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\PlocSupvHelper.h 13614;0x352e;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\PlocSupvHelper.h +13615;0x352f;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\PlocSupvHelper.h +13616;0x3530;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\PlocSupvHelper.h diff --git a/generators/events/event_parser.py b/generators/events/event_parser.py index 11aa80cd..9398ba98 100644 --- a/generators/events/event_parser.py +++ b/generators/events/event_parser.py @@ -72,7 +72,7 @@ def parse_events( LOGGER.info("EventParser: Parsing events: ") # Small delay for clean printout time.sleep(0.01) - event_list = generate_event_list()eive + event_list = generate_event_list() if print_events: PrettyPrinter.pprint(event_list) # Delay for clean printout diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 29b8fc52..0eeb503a 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 192 translations. + * @brief Auto-generated event translation file. Contains 194 translations. * @details - * Generated on: 2022-04-16 17:47:08 + * Generated on: 2022-04-18 16:58:03 */ #include "translateEvents.h" @@ -193,6 +193,8 @@ const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; +const char *ACK_RECEPTION_FAILURE_STRING = "ACK_RECEPTION_FAILURE"; +const char *EXE_RECEPTION_FAILURE_STRING = "EXE_RECEPTION_FAILURE"; const char *translateEvents(Event event) { switch ((event & 0xFFFF)) { @@ -572,6 +574,10 @@ const char *translateEvents(Event event) { return SUPV_ACK_INVALID_APID_STRING; case (13614): return SUPV_EXE_INVALID_APID_STRING; + case (13615): + return ACK_RECEPTION_FAILURE_STRING; + case (13616): + return EXE_RECEPTION_FAILURE_STRING; default: return "UNKNOWN_EVENT"; } diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index bfb20d25..dae25b92 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 116 translations. - * Generated on: 2022-04-16 17:47:17 + * Generated on: 2022-04-18 16:58:07 */ #include "translateObjects.h" diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 3028680c..2dcadd37 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -222,6 +222,12 @@ static const uint32_t BOOT_REPORT_SET_ID = BOOT_STATUS_REPORT; static const uint32_t LATCHUP_RPT_ID = LATCHUP_REPORT; static const uint32_t LOGGING_RPT_ID = LOGGING_REQUEST_COUNTERS; +namespace recv_timeout { + // Erase memory can require up to 60 seconds for execution + static const uint32_t ERASE_MEMORY = 60000; + static const uint32_t UPDATE_STATUS_REPORT = 60000; +} + /** * @brief This class creates a space packet containing only the header data and the CRC. */ diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index 13fa9ed7..b5c6b2bd 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -243,6 +243,80 @@ void PlocMPSoCHandler::fillCommandAndReplyMap() { this->insertInReplyMap(mpsoc::TM_MEMORY_READ_REPORT, 2, nullptr, mpsoc::SIZE_TM_MEM_READ_REPORT); } +ReturnValue_t PlocMPSoCHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, + uint8_t expectedReplies, bool useAlternateId, + DeviceCommandId_t alternateReplyID) { + ReturnValue_t result = RETURN_OK; + + uint8_t enabledReplies = 0; + + switch (command->first) { + case mpsoc::TC_MEM_WRITE: + case mpsoc::TC_FLASHDELETE: + case mpsoc::TC_REPLAY_START: + case mpsoc::TC_REPLAY_STOP: + case mpsoc::TC_DOWNLINK_PWR_ON: + case mpsoc::TC_DOWNLINK_PWR_OFF: + case mpsoc::TC_REPLAY_WRITE_SEQUENCE: + case mpsoc::TC_MODE_REPLAY: + enabledReplies = 2; + break; + case mpsoc::TC_MEM_READ: { + enabledReplies = 3; + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + mpsoc::TM_MEMORY_READ_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " + << mpsoc::TM_MEMORY_READ_REPORT << " not in replyMap" << std::endl; + } + break; + } + case mpsoc::OBSW_RESET_SEQ_COUNT: + break; + default: + sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Unknown command id" << std::endl; + break; + } + + /** + * Every command causes at least one acknowledgment and one execution report. Therefore both + * replies will be enabled here. + */ + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::ACK_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::ACK_REPORT + << " not in replyMap" << std::endl; + } + + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::EXE_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::EXE_REPORT + << " not in replyMap" << std::endl; + } + + switch (command->first) { + case mpsoc::TC_REPLAY_WRITE_SEQUENCE: { + DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); + // Overwrite delay cycles because replay write sequence command can required up to + // 30 seconds for execution + iter->second.delayCycles = mpsoc::TC_WRITE_SEQ_EXECUTION_DELAY; + break; + } + case mpsoc::TC_DOWNLINK_PWR_ON: { + DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); + // + iter->second.delayCycles = mpsoc::TC_DOWNLINK_PWR_ON; + break; + } + default: + break; + } + + return RETURN_OK; +} + ReturnValue_t PlocMPSoCHandler::scanForReply(const uint8_t* start, size_t remainingSize, DeviceCommandId_t* foundId, size_t* foundLen) { ReturnValue_t result = RETURN_OK; @@ -586,79 +660,7 @@ ReturnValue_t PlocMPSoCHandler::handleMemoryReadReport(const uint8_t* data) { return result; } -ReturnValue_t PlocMPSoCHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, - uint8_t expectedReplies, bool useAlternateId, - DeviceCommandId_t alternateReplyID) { - ReturnValue_t result = RETURN_OK; - uint8_t enabledReplies = 0; - - switch (command->first) { - case mpsoc::TC_MEM_WRITE: - case mpsoc::TC_FLASHDELETE: - case mpsoc::TC_REPLAY_START: - case mpsoc::TC_REPLAY_STOP: - case mpsoc::TC_DOWNLINK_PWR_ON: - case mpsoc::TC_DOWNLINK_PWR_OFF: - case mpsoc::TC_REPLAY_WRITE_SEQUENCE: - case mpsoc::TC_MODE_REPLAY: - enabledReplies = 2; - break; - case mpsoc::TC_MEM_READ: { - enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - mpsoc::TM_MEMORY_READ_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " - << mpsoc::TM_MEMORY_READ_REPORT << " not in replyMap" << std::endl; - } - break; - } - case mpsoc::OBSW_RESET_SEQ_COUNT: - break; - default: - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Unknown command id" << std::endl; - break; - } - - /** - * Every command causes at least one acknowledgment and one execution report. Therefore both - * replies will be enabled here. - */ - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::ACK_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::ACK_REPORT - << " not in replyMap" << std::endl; - } - - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::EXE_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::EXE_REPORT - << " not in replyMap" << std::endl; - } - - switch (command->first) { - case mpsoc::TC_REPLAY_WRITE_SEQUENCE: { - DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); - // Overwrite delay cycles because replay write sequence command can required up to - // 30 seconds for execution - iter->second.delayCycles = mpsoc::TC_WRITE_SEQ_EXECUTION_DELAY; - break; - } - case mpsoc::TC_DOWNLINK_PWR_ON: { - DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); - // - iter->second.delayCycles = mpsoc::TC_DOWNLINK_PWR_ON; - break; - } - default: - break; - } - - return RETURN_OK; -} void PlocMPSoCHandler::setNextReplyId() { switch (getPendingCommand()) { diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index e8a2163e..c40829c4 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -88,7 +88,7 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, switch (actionId) { case TERMINATE_SUPV_HELPER: { supvHelper->stopProcess(); - break; + return EXECUTION_FINISHED; } default: break; @@ -1145,6 +1145,14 @@ size_t PlocSupervisorHandler::getNextReplyLength(DeviceCommandId_t commandId) { return replyLen; } +ReturnValue_t PlocSupervisorHandler::doSendReadHook() { + // Prevent DHB from polling UART during commands executed by the supervisor helper task + if (plocSupvHelperExecuting) { + return RETURN_FAILED; + } + return RETURN_OK; +} + void PlocSupervisorHandler::handleDeviceTM(const uint8_t* data, size_t dataSize, DeviceCommandId_t replyId) { ReturnValue_t result = RETURN_OK; diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 11ce2097..213150cc 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -55,6 +55,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { uint8_t expectedReplies = 1, bool useAlternateId = false, DeviceCommandId_t alternateReplyID = 0) override; size_t getNextReplyLength(DeviceCommandId_t deviceCommand) override; + virtual ReturnValue_t doSendReadHook() override; private: diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index e16ebf69..779b88bb 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -10,6 +10,7 @@ #endif #include "fsfw/globalfunctions/CRC.h" +#include "fsfw/timemanager/Countdown.h" #include "mission/utility/Filenaming.h" #include "mission/utility/ProgressPrinter.h" #include "mission/utility/Timestamp.h" @@ -44,7 +45,6 @@ ReturnValue_t PlocSupvHelper::performOperation(uint8_t operationCode) { triggerEvent(SUPV_UPDATE_SUCCESSFUL, result); } else if (result == PROCESS_TERMINATED) { // Event already triggered - break; } else { triggerEvent(SUPV_UPDATE_FAILED, result); } @@ -109,10 +109,6 @@ ReturnValue_t PlocSupvHelper::startUpdate(std::string file, uint8_t memoryId, update.length = getFileSize(update.file); update.memoryId = memoryId; update.startAddress = startAddress; - result = calcImageCrc(); - if (result != RETURN_OK) { - return result; - } internalState = InternalState::UPDATE; uartComIF->flushUartTxAndRxBuf(comCookie); semaphore.release(); @@ -140,6 +136,10 @@ void PlocSupvHelper::stopProcess() { terminate = true; } ReturnValue_t PlocSupvHelper::performUpdate() { ReturnValue_t result = RETURN_OK; + result = calcImageCrc(); + if (result != RETURN_OK) { + return result; + } result = prepareUpdate(); if (result != RETURN_OK) { return result; @@ -149,8 +149,7 @@ ReturnValue_t PlocSupvHelper::performUpdate() { return result; } #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 - ProgressPrinter progressPrinter("Supervisor update: ", update.length, - ProgressPrinter::ONE_PERCENT); + ProgressPrinter progressPrinter("Supervisor update", update.length, ProgressPrinter::ONE_PERCENT); #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ uint8_t tempData[supv::WriteMemory::CHUNK_MAX]; std::ifstream file(update.file, std::ifstream::binary); @@ -166,11 +165,17 @@ ReturnValue_t PlocSupvHelper::performUpdate() { if (remainingSize > supv::WriteMemory::CHUNK_MAX) { dataLength = supv::WriteMemory::CHUNK_MAX; } else { - dataLength = remainingSize; + dataLength = static_cast(remainingSize); } if (file.is_open()) { file.seekg(bytesWritten, file.beg); file.read(reinterpret_cast(tempData), dataLength); + if (!file) { + sif::warning << "PlocSupvHelper::performUpdate: Read only " << file.gcount() << " of " + << dataLength << " bytes" << std::endl; + sif::info << "PlocSupvHelper::performUpdate: Failed when trying to read byte " + << bytesWritten << std::endl; + } remainingSize -= dataLength; } else { return FILE_CLOSED_ACCIDENTALLY; @@ -236,14 +241,15 @@ ReturnValue_t PlocSupvHelper::prepareUpdate() { ReturnValue_t PlocSupvHelper::eraseMemory() { ReturnValue_t result = RETURN_OK; supv::EraseMemory eraseMemory(update.memoryId, update.startAddress, update.length); - result = handlePacketTransmission(eraseMemory); + result = handlePacketTransmission(eraseMemory, supv::recv_timeout::ERASE_MEMORY); if (result != RETURN_OK) { return result; } return RETURN_OK; } -ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& packet) { +ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& packet, + uint32_t timeoutExecutionReport) { ReturnValue_t result = RETURN_OK; result = sendCommand(packet); if (result != RETURN_OK) { @@ -253,7 +259,7 @@ ReturnValue_t PlocSupvHelper::handlePacketTransmission(SpacePacket& packet) { if (result != RETURN_OK) { return result; } - result = handleExe(); + result = handleExe(timeoutExecutionReport); if (result != RETURN_OK) { return result; } @@ -302,10 +308,10 @@ void PlocSupvHelper::handleAckApidFailure(uint16_t apid) { } } -ReturnValue_t PlocSupvHelper::handleExe() { +ReturnValue_t PlocSupvHelper::handleExe(uint32_t timeout) { ReturnValue_t result = RETURN_OK; supv::TmPacket tmPacket; - result = handleTmReception(&tmPacket, supv::SIZE_EXE_REPORT); + result = handleTmReception(&tmPacket, supv::SIZE_EXE_REPORT, timeout); if (result != RETURN_OK) { triggerEvent(EXE_RECEPTION_FAILURE, result, static_cast(rememberApid)); sif::warning << "PlocSupvHelper::handleExe: Error in reception of execution report" @@ -332,11 +338,13 @@ void PlocSupvHelper::handleExeApidFailure(uint16_t apid) { } } -ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes) { +ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes, + uint32_t timeout) { ReturnValue_t result = RETURN_OK; size_t readBytes = 0; size_t currentBytes = 0; - for (int retries = 0; retries < RETRIES; retries++) { + Countdown countdown(timeout); + while (!countdown.hasTimedOut()) { result = receive(tmPacket->getWholeData() + readBytes, ¤tBytes, remainingBytes); if (result != RETURN_OK) { return result; @@ -395,11 +403,21 @@ ReturnValue_t PlocSupvHelper::calcImageCrc() { std::ifstream file(update.file, std::ifstream::binary); uint16_t remainder = CRC16_INIT; uint8_t input; - for (uint32_t byteCount = 0; byteCount < update.length; byteCount++) { +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + ProgressPrinter progress("Supervisor update crc calculation", update.length); +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ + uint32_t byteCount = 0; + for (byteCount = 0; byteCount < update.length; byteCount++) { file.seekg(byteCount, file.beg); file.read(reinterpret_cast(&input), 1); remainder = CRC::crc16ccitt(&input, sizeof(input), remainder); +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + progress.print(byteCount); +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ } +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + progress.print(byteCount); +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ file.close(); update.crc = remainder; return result; @@ -419,7 +437,8 @@ ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { } supv::UpdateStatusReport updateStatusReport; result = handleTmReception(&updateStatusReport, - static_cast(updateStatusReport.getNominalSize())); + static_cast(updateStatusReport.getNominalSize()), + supv::recv_timeout::UPDATE_STATUS_REPORT); if (result != RETURN_OK) { return result; } @@ -487,7 +506,3 @@ ReturnValue_t PlocSupvHelper::handleEventBufferReception() { } return result; } - -//ReturnValue_t PlocSupervisorHandler::parseStatusCode(std::string* meaning) { -// -//} diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index 9326c3a9..6529e8ad 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -123,9 +123,6 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Expected event buffer TM but received space packet with other APID static const ReturnValue_t EVENT_BUFFER_REPLY_INVALID_APID = MAKE_RETURN_CODE(0xA3); - // Maximum number of times the communication interface retries polling data from the reply - // buffer - static const int RETRIES = 20000; static const uint16_t CRC16_INIT = 0xFFFF; // Event buffer reply will carry 24 space packets with 1016 bytes and one space packet with // 192 bytes @@ -180,7 +177,8 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha ReturnValue_t performUpdate(); ReturnValue_t performEventBufferRequest(); - ReturnValue_t handlePacketTransmission(SpacePacket& packet); + ReturnValue_t handlePacketTransmission(SpacePacket& packet, + uint32_t timeoutExecutionReport = 1000); ReturnValue_t sendCommand(SpacePacket& packet); /** * @brief Function which reads form the communication interface @@ -191,7 +189,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha */ ReturnValue_t receive(uint8_t* data, size_t* readBytes, size_t requestBytes); ReturnValue_t handleAck(); - ReturnValue_t handleExe(); + ReturnValue_t handleExe(uint32_t timeout = 1000); void handleAckApidFailure(uint16_t apid); void handleExeApidFailure(uint16_t apid); /** @@ -199,8 +197,10 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha * * @param tmPacket Pointer to space packet where received data will be written to * @param reaminingBytes Number of bytes to read in the space packet + * @param timeout Receive timeout in milliseconds */ - ReturnValue_t handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes); + ReturnValue_t handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes, + uint32_t timeout = 1000); ReturnValue_t prepareUpdate(); ReturnValue_t eraseMemory(); // Calculates CRC over image. Will be used for verification after update writing has diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 29b8fc52..0eeb503a 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 192 translations. + * @brief Auto-generated event translation file. Contains 194 translations. * @details - * Generated on: 2022-04-16 17:47:08 + * Generated on: 2022-04-18 16:58:03 */ #include "translateEvents.h" @@ -193,6 +193,8 @@ const char *SUPV_ACK_FAILURE_REPORT_STRING = "SUPV_ACK_FAILURE_REPORT"; const char *SUPV_EXE_FAILURE_REPORT_STRING = "SUPV_EXE_FAILURE_REPORT"; const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; +const char *ACK_RECEPTION_FAILURE_STRING = "ACK_RECEPTION_FAILURE"; +const char *EXE_RECEPTION_FAILURE_STRING = "EXE_RECEPTION_FAILURE"; const char *translateEvents(Event event) { switch ((event & 0xFFFF)) { @@ -572,6 +574,10 @@ const char *translateEvents(Event event) { return SUPV_ACK_INVALID_APID_STRING; case (13614): return SUPV_EXE_INVALID_APID_STRING; + case (13615): + return ACK_RECEPTION_FAILURE_STRING; + case (13616): + return EXE_RECEPTION_FAILURE_STRING; default: return "UNKNOWN_EVENT"; } diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index bfb20d25..dae25b92 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 116 translations. - * Generated on: 2022-04-16 17:47:17 + * Generated on: 2022-04-18 16:58:07 */ #include "translateObjects.h" diff --git a/mission/utility/ProgressPrinter.cpp b/mission/utility/ProgressPrinter.cpp index 1161c1f3..3a7de549 100644 --- a/mission/utility/ProgressPrinter.cpp +++ b/mission/utility/ProgressPrinter.cpp @@ -3,7 +3,7 @@ #include "fsfw/serviceinterface/ServiceInterfaceStream.h" ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps, uint32_t percentageResolution) - : name(name), numSteps(numSteps) {} + : name(name), numSteps(numSteps), percentageResolution(percentageResolution) {} ProgressPrinter::~ProgressPrinter() {} @@ -11,6 +11,6 @@ void ProgressPrinter::print(uint32_t currentStep) { float progressInPercent = static_cast(currentStep) / static_cast(numSteps) * 100; if (static_cast(progressInPercent) >= nextProgressPrint) { sif::info << name << " progress: " << progressInPercent << " %" << std::endl; - nextProgressPrint += FIVE_PERCENT; + nextProgressPrint += percentageResolution; } } diff --git a/mission/utility/ProgressPrinter.h b/mission/utility/ProgressPrinter.h index 4889c567..7185a655 100644 --- a/mission/utility/ProgressPrinter.h +++ b/mission/utility/ProgressPrinter.h @@ -37,6 +37,7 @@ class ProgressPrinter { std::string name = ""; uint32_t numSteps = 0; uint32_t nextProgressPrint = 0; + uint32_t percentageResolution = 0; }; #endif /* MISSION_UTILITY_PROGRESSPRINTER_H_ */ diff --git a/thirdparty/libcsp/src/drivers/can/can_socketcan.c b/thirdparty/libcsp/src/drivers/can/can_socketcan.c index 00d6444e..b3146870 100644 --- a/thirdparty/libcsp/src/drivers/can/can_socketcan.c +++ b/thirdparty/libcsp/src/drivers/can/can_socketcan.c @@ -19,183 +19,192 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* SocketCAN driver */ +#include #include - -#include -#include - -#include -#include -#include -#include +#include #include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - #include #include #include - -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef CSP_HAVE_LIBSOCKETCAN #include #endif +#define CAN_RX_TASK_PRIO 80 + static struct can_socketcan_s { - int socket; - csp_iface_t interface; + int socket; + csp_iface_t interface; } socketcan[1] = { - { - .interface = { - .name = "CAN", - .nexthop = csp_can_tx, - .mtu = CSP_CAN_MTU, - .driver = &socketcan[0], - }, - }, + { + .interface = + { + .name = "CAN", + .nexthop = csp_can_tx, + .mtu = CSP_CAN_MTU, + .driver = &socketcan[0], + }, + }, }; -static void * socketcan_rx_thread(void * parameters) -{ - struct can_frame frame; - int nbytes; +static void *socketcan_rx_thread(void *parameters) { + struct can_frame frame; + int nbytes; - while (1) { - /* Read CAN frame */ - nbytes = read(socketcan[0].socket, &frame, sizeof(frame)); - if (nbytes < 0) { - csp_log_error("read: %s", strerror(errno)); - continue; - } + while (1) { + /* Read CAN frame */ + nbytes = read(socketcan[0].socket, &frame, sizeof(frame)); + if (nbytes < 0) { + csp_log_error("read: %s", strerror(errno)); + continue; + } - if (nbytes != sizeof(frame)) { - csp_log_warn("Read incomplete CAN frame"); - continue; - } + if (nbytes != sizeof(frame)) { + csp_log_warn("Read incomplete CAN frame"); + continue; + } - /* Frame type */ - if (frame.can_id & (CAN_ERR_FLAG | CAN_RTR_FLAG) || !(frame.can_id & CAN_EFF_FLAG)) { - /* Drop error and remote frames */ - csp_log_warn("Discarding ERR/RTR/SFF frame"); - continue; - } + /* Frame type */ + if (frame.can_id & (CAN_ERR_FLAG | CAN_RTR_FLAG) || !(frame.can_id & CAN_EFF_FLAG)) { + /* Drop error and remote frames */ + csp_log_warn("Discarding ERR/RTR/SFF frame"); + continue; + } - /* Strip flags */ - frame.can_id &= CAN_EFF_MASK; + /* Strip flags */ + frame.can_id &= CAN_EFF_MASK; - /* Call RX callbacsp_can_rx_frameck */ - csp_can_rx(&socketcan[0].interface, frame.can_id, frame.data, frame.can_dlc, NULL); - } + /* Call RX callbacsp_can_rx_frameck */ + csp_can_rx(&socketcan[0].interface, frame.can_id, frame.data, frame.can_dlc, NULL); + } - /* We should never reach this point */ - pthread_exit(NULL); + /* We should never reach this point */ + pthread_exit(NULL); } - -int csp_can_tx_frame(csp_iface_t *interface, uint32_t id, const uint8_t * data, uint8_t dlc) -{ - struct can_frame frame; - int i, tries = 0; - memset(&frame, 0, sizeof(frame)); - if (dlc > 8) - return -1; - - /* Copy identifier */ - frame.can_id = id | CAN_EFF_FLAG; - - /* Copy data to frame */ - for (i = 0; i < dlc; i++) - frame.data[i] = data[i]; - - /* Set DLC */ - frame.can_dlc = dlc; - - /* Send frame */ - while (write(socketcan[0].socket, &frame, sizeof(frame)) != sizeof(frame)) { - if (++tries < 1000 && errno == ENOBUFS) { - /* Wait 10 ms and try again */ - usleep(10000); - } else { - csp_log_error("write: %s", strerror(errno)); - break; - } - } - - return 0; +static int create_receive_thread() { + pthread_t rx_thread; + pthread_attr_t attributes; + if (pthread_attr_init(&attributes) != 0) { + return 1; + } + if (pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED) != 0) { + return 1; + } + if (pthread_attr_setschedpolicy(&attributes, SCHED_FIFO) != 0) { + return 1; + } + struct sched_param schedule_params; + schedule_params.__sched_priority = CAN_RX_TASK_PRIO; + if (pthread_attr_setschedparam(&attributes, &schedule_params) != 0) { + return 1; + } + if (pthread_create(&rx_thread, NULL, socketcan_rx_thread, NULL) != 0) { + csp_log_error("pthread_create: %s", strerror(errno)); + return 1; + } + return 0; } -csp_iface_t * csp_can_socketcan_init(const char * ifc, int bitrate, int promisc) -{ - struct ifreq ifr; - struct sockaddr_can addr; - pthread_t rx_thread; +int csp_can_tx_frame(csp_iface_t *interface, uint32_t id, const uint8_t *data, uint8_t dlc) { + struct can_frame frame; + int i, tries = 0; + memset(&frame, 0, sizeof(frame)); + if (dlc > 8) return -1; - //printf("-I-: Initiating CAN interface %s\n", ifc); + /* Copy identifier */ + frame.can_id = id | CAN_EFF_FLAG; + + /* Copy data to frame */ + for (i = 0; i < dlc; i++) frame.data[i] = data[i]; + + /* Set DLC */ + frame.can_dlc = dlc; + + /* Send frame */ + while (write(socketcan[0].socket, &frame, sizeof(frame)) != sizeof(frame)) { + if (++tries < 1000 && errno == ENOBUFS) { + /* Wait 10 ms and try again */ + usleep(10000); + } else { + csp_log_error("write: %s", strerror(errno)); + break; + } + } + + return 0; +} + +csp_iface_t *csp_can_socketcan_init(const char *ifc, int bitrate, int promisc) { + struct ifreq ifr; + struct sockaddr_can addr; + + // printf("-I-: Initiating CAN interface %s\n", ifc); #ifdef CSP_HAVE_LIBSOCKETCAN - /* Set interface up */ - if (bitrate > 0) { - can_do_stop(ifc); - can_set_bitrate(ifc, bitrate); - can_set_restart_ms(ifc, 100); - can_do_start(ifc); - } + /* Set interface up */ + if (bitrate > 0) { + can_do_stop(ifc); + can_set_bitrate(ifc, bitrate); + can_set_restart_ms(ifc, 100); + can_do_start(ifc); + } #endif - /* Create socket */ - if ((socketcan[0].socket = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { - csp_log_error("socket: %s", strerror(errno)); - return NULL; - } + /* Create socket */ + if ((socketcan[0].socket = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + csp_log_error("socket: %s", strerror(errno)); + return NULL; + } - /* Locate interface */ - strncpy(ifr.ifr_name, ifc, IFNAMSIZ - 1); - if (ioctl(socketcan[0].socket, SIOCGIFINDEX, &ifr) < 0) { - csp_log_error("ioctl: %s", strerror(errno)); - return NULL; - } - memset(&addr, 0, sizeof(addr)); - /* Bind the socket to CAN interface */ - addr.can_family = AF_CAN; - addr.can_ifindex = ifr.ifr_ifindex; - if (bind(socketcan[0].socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - csp_log_error("bind: %s", strerror(errno)); - return NULL; - } + /* Locate interface */ + strncpy(ifr.ifr_name, ifc, IFNAMSIZ - 1); + if (ioctl(socketcan[0].socket, SIOCGIFINDEX, &ifr) < 0) { + csp_log_error("ioctl: %s", strerror(errno)); + return NULL; + } + memset(&addr, 0, sizeof(addr)); + /* Bind the socket to CAN interface */ + addr.can_family = AF_CAN; + addr.can_ifindex = ifr.ifr_ifindex; + if (bind(socketcan[0].socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + csp_log_error("bind: %s", strerror(errno)); + return NULL; + } - /* Set filter mode */ - if (promisc == 0) { + /* Set filter mode */ + if (promisc == 0) { + struct can_filter filter; + filter.can_id = CFP_MAKE_DST(csp_get_address()); + filter.can_mask = CFP_MAKE_DST((1 << CFP_HOST_SIZE) - 1); - struct can_filter filter; - filter.can_id = CFP_MAKE_DST(csp_get_address()); - filter.can_mask = CFP_MAKE_DST((1 << CFP_HOST_SIZE) - 1); + if (setsockopt(socketcan[0].socket, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter)) < 0) { + csp_log_error("setsockopt: %s", strerror(errno)); + return NULL; + } + } - if (setsockopt(socketcan[0].socket, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter)) < 0) { - csp_log_error("setsockopt: %s", strerror(errno)); - return NULL; - } + if (create_receive_thread() != 0) { + return NULL; + } - } + csp_iflist_add(&socketcan[0].interface); - /* Create receive thread */ - if (pthread_create(&rx_thread, NULL, socketcan_rx_thread, NULL) != 0) { - csp_log_error("pthread_create: %s", strerror(errno)); - return NULL; - } - - csp_iflist_add(&socketcan[0].interface); - - return &socketcan[0].interface; + return &socketcan[0].interface; } From 4895f940f32c8698603615996c27cfad4125776c Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 19 Apr 2022 14:26:21 +0200 Subject: [PATCH 017/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index edee0c1a..c7da0103 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit edee0c1aa38c7a07eb82cd358cd7e921536d075e +Subproject commit c7da0103e8169136f0ba18254d0eb50e6958ba82 From 52c539bc6bc40e5c77963350b8c843c6523c1537 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 21 Apr 2022 14:26:15 +0200 Subject: [PATCH 018/115] fsfw update --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index e949368b..9f7b9be8 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit e949368b062e8703c35d2043ece8d7258cd2608b +Subproject commit 9f7b9be800402215e97759eb35d4c40a484d1f68 From 0bcb332ce931e4c1b5c8f1117e4abbd37deea822 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 21 Apr 2022 14:26:46 +0200 Subject: [PATCH 019/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index c7da0103..45470f8c 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit c7da0103e8169136f0ba18254d0eb50e6958ba82 +Subproject commit 45470f8c05ef214eb41940878ef0bfabf36a4891 From cf37d74728c13de24410aac3b70eab15708ab923 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 21 Apr 2022 16:30:23 +0200 Subject: [PATCH 020/115] adc report --- bsp_te0720_1cfa/ObjectFactory.cpp | 12 +- .../PlocSupervisorDefinitions.h | 156 +++++++++--- linux/devices/ploc/PlocMPSoCHandler.cpp | 2 - linux/devices/ploc/PlocSupervisorHandler.cpp | 240 ++++++++++++------ linux/devices/ploc/PlocSupervisorHandler.h | 2 + 5 files changed, 290 insertions(+), 122 deletions(-) diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index d6e2b5ad..fff3ddf1 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -115,13 +115,12 @@ new UartComIF(objects::UART_COM_IF); GpioCookie* gpioCookie = new GpioCookie; gpioCookie->addGpio(gpioIds::HEATER_0, heaterGpio); new HeaterHandler(objects::HEATER_HANDLER, objects::GPIO_IF, gpioCookie, objects::PCDU_HANDLER, - pcduSwitches::TCS_BOARD_8V_HEATER_IN); + pcdu::TCS_BOARD_8V_HEATER_IN); #endif #if OBSW_ADD_PLOC_MPSOC == 1 - UartCookie* mpsocUartCookie = - new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, UartModes::NON_CANONICAL, - uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); + UartCookie* mpsocUartCookie = new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, + uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); mpsocUartCookie->setNoFixedSizeReply(); PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); auto mpsocGpioIF = new DummyGpioIF(); @@ -132,16 +131,15 @@ new UartComIF(objects::UART_COM_IF); #endif /* OBSW_ADD_PLOC_MPSOC == 1 */ #if OBSW_ADD_PLOC_SUPERVISOR == 1 - /* Configuration for MIO0 on TE0720-03-1CFA */ UartCookie* supervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, std::string("/dev/ttyPS1"), - UartModes::NON_CANONICAL, uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); + uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); supervisorCookie->setNoFixedSizeReply(); auto supvGpioIF = new DummyGpioIF(); auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); auto plocSupervisor = new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, supvGpioIF), - pcduSwitches::PDU1_CH6_PLOC_12V, supvHelper); + pcdu::PDU1_CH6_PLOC_12V, supvHelper); plocSupervisor->setStartUpImmediately(); #endif diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 2dcadd37..bf8d9b7c 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -51,11 +51,10 @@ static const DeviceCommandId_t PERFORM_UPDATE = 48; static const DeviceCommandId_t TERMINATE_SUPV_HELPER = 49; static const DeviceCommandId_t ENABLE_AUTO_TM = 50; static const DeviceCommandId_t DISABLE_AUTO_TM = 51; -static const DeviceCommandId_t ENABLE_ADC_MONITOR_TASK = 52; -static const DeviceCommandId_t DISABLE_ADC_MONITOR_TASK = 53; static const DeviceCommandId_t LOGGING_REQUEST_EVENT_BUFFERS = 54; static const DeviceCommandId_t LOGGING_CLEAR_COUNTERS = 55; static const DeviceCommandId_t LOGGING_SET_TOPIC = 56; +static const DeviceCommandId_t REQUEST_ADC_REPORT = 57; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -64,6 +63,7 @@ static const DeviceCommandId_t HK_REPORT = 52; static const DeviceCommandId_t BOOT_STATUS_REPORT = 53; static const DeviceCommandId_t LATCHUP_REPORT = 54; static const DeviceCommandId_t LOGGING_REPORT = 55; +static const DeviceCommandId_t ADC_REPORT = 56; // Size of complete space packet (6 byte header + size of data + 2 byte CRC) static const uint16_t SIZE_ACK_REPORT = 14; @@ -72,6 +72,7 @@ static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; static const uint16_t SIZE_LOGGING_REPORT = 45; +static const uint16_t SIZE_ADC_REPORT = 72; /** * SpacePacket apids of telemetry packets @@ -83,7 +84,7 @@ static const uint16_t APID_EXE_FAILURE = 0x203; static const uint16_t APID_HK_REPORT = 0x204; static const uint16_t APID_BOOT_STATUS_REPORT = 0x205; static const uint16_t APID_UPDATE_STATUS_REPORT = 0x206; -static const uint16_t APID_WDG_STATUS_REPORT = 0x207; +static const uint16_t APID_ADC_REPORT = 0x207; static const uint16_t APID_LATCHUP_STATUS_REPORT = 0x208; static const uint16_t APID_SOC_SYSMON = 0x209; static const uint16_t APID_MRAM_DUMP_TM = 0x20A; @@ -119,7 +120,7 @@ static const uint16_t APID_SET_ADC_WINDOW_AND_STRIDE = 0xD7; static const uint16_t APID_SET_ADC_THRESHOLD = 0xD8; static const uint16_t APID_GET_LATCHUP_STATUS_REPORT = 0xD9; static const uint16_t APID_COPY_ADC_DATA_TO_MRAM = 0xDA; -static const uint16_t APID_ADC_MONITOR_TASK = 0xDB; +static const uint16_t APID_REQUEST_ADC_REPORT = 0xDB; static const uint16_t APID_RUN_AUTO_EM_TESTS = 0xF2; static const uint16_t APID_WIPE_MRAM = 0xF3; static const uint16_t APID_DUMP_MRAM = 0xF4; @@ -209,18 +210,53 @@ enum PoolIds : lp_id_t { TC_RECEIVED, TM_RECEIVED, SOC_BOOTS, - SOC_BOOT_FAILS + SOC_BOOT_FAILS, + + ADC_RAW_0, + ADC_RAW_1, + ADC_RAW_2, + ADC_RAW_3, + ADC_RAW_4, + ADC_RAW_5, + ADC_RAW_6, + ADC_RAW_7, + ADC_RAW_8, + ADC_RAW_9, + ADC_RAW_10, + ADC_RAW_11, + ADC_RAW_12, + ADC_RAW_13, + ADC_RAW_14, + ADC_RAW_15, + ADC_ENG_0, + ADC_ENG_1, + ADC_ENG_2, + ADC_ENG_3, + ADC_ENG_4, + ADC_ENG_5, + ADC_ENG_6, + ADC_ENG_7, + ADC_ENG_8, + ADC_ENG_9, + ADC_ENG_10, + ADC_ENG_11, + ADC_ENG_12, + ADC_ENG_13, + ADC_ENG_14, + ADC_ENG_15 }; static const uint8_t HK_SET_ENTRIES = 13; static const uint8_t BOOT_REPORT_SET_ENTRIES = 10; static const uint8_t LATCHUP_RPT_SET_ENTRIES = 16; static const uint8_t LOGGING_RPT_SET_ENTRIES = 9; +static const uint8_t ADC_RPT_SET_ENTRIES = 32; static const uint32_t HK_SET_ID = HK_REPORT; static const uint32_t BOOT_REPORT_SET_ID = BOOT_STATUS_REPORT; static const uint32_t LATCHUP_RPT_ID = LATCHUP_REPORT; static const uint32_t LOGGING_RPT_ID = LOGGING_REQUEST_COUNTERS; +static const uint32_t ADC_REPORT_SET_ID = REQUEST_ADC_REPORT; namespace recv_timeout { // Erase memory can require up to 60 seconds for execution @@ -1197,36 +1233,6 @@ class DisableAutoTm : public SupvTcSpacePacket { static const uint8_t DISABLE = 0; }; -/** - * @brief This class creates the space packet to enable the auto TM generation - */ -class EnableAdcMonitorTask : public SupvTcSpacePacket { - public: - EnableAdcMonitorTask() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_ADC_MONITOR_TASK) { - *(this->localData.fields.buffer) = ENABLE; - makeCrc(); - } - - private: - static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field - static const uint8_t ENABLE = 1; -}; - -/** - * @brief This class creates the space packet to enable the auto TM generation - */ -class DisableAdcMonitorTask : public SupvTcSpacePacket { - public: - DisableAdcMonitorTask() : SupvTcSpacePacket(PAYLOAD_LENGTH, APID_ADC_MONITOR_TASK) { - *(this->localData.fields.buffer) = DISABLE; - makeCrc(); - } - - private: - static const uint16_t PAYLOAD_LENGTH = 1; // length without CRC field - static const uint8_t DISABLE = 0; -}; - /** * @brief This class creates the space packet to request the logging data from the supervisor */ @@ -1456,6 +1462,86 @@ class UpdateStatusReport : public TmPacket { return HasReturnvaluesIF::RETURN_OK; } }; + +/** + * @brief This dataset stores the ADC report. + */ +class AdcReport : public StaticLocalDataSet { + public: + AdcReport(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, ADC_REPORT_SET_ID) {} + + AdcReport(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, ADC_REPORT_SET_ID)) {} + + lp_var_t adcRaw0 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_0, this); + lp_var_t adcRaw1 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_1, this); + lp_var_t adcRaw2 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_2, this); + lp_var_t adcRaw3 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_3, this); + lp_var_t adcRaw4 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_4, this); + lp_var_t adcRaw5 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_5, this); + lp_var_t adcRaw6 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_6, this); + lp_var_t adcRaw7 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_7, this); + lp_var_t adcRaw8 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_8, this); + lp_var_t adcRaw9 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_9, this); + lp_var_t adcRaw10 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_10, this); + lp_var_t adcRaw11 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_11, this); + lp_var_t adcRaw12 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_12, this); + lp_var_t adcRaw13 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_13, this); + lp_var_t adcRaw14 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_14, this); + lp_var_t adcRaw15 = lp_var_t(sid.objectId, PoolIds::ADC_RAW_15, this); + lp_var_t adcEng0 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_0, this); + lp_var_t adcEng1 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_1, this); + lp_var_t adcEng2 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_2, this); + lp_var_t adcEng3 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_3, this); + lp_var_t adcEng4 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_4, this); + lp_var_t adcEng5 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_5, this); + lp_var_t adcEng6 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_6, this); + lp_var_t adcEng7 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_7, this); + lp_var_t adcEng8 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_8, this); + lp_var_t adcEng9 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_9, this); + lp_var_t adcEng10 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_10, this); + lp_var_t adcEng11 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_11, this); + lp_var_t adcEng12 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_12, this); + lp_var_t adcEng13 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_13, this); + lp_var_t adcEng14 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_14, this); + lp_var_t adcEng15 = lp_var_t(sid.objectId, PoolIds::ADC_ENG_15, this); + + void printSet() { + sif::info << "---- Adc Report: Raw values ----" << std::endl; + sif::info << "AdcReport: ADC raw 0: " << this->adcRaw0 << std::endl; + sif::info << "AdcReport: ADC raw 1: " << this->adcRaw1 << std::endl; + sif::info << "AdcReport: ADC raw 2: " << this->adcRaw2 << std::endl; + sif::info << "AdcReport: ADC raw 3: " << this->adcRaw3 << std::endl; + sif::info << "AdcReport: ADC raw 4: " << this->adcRaw4 << std::endl; + sif::info << "AdcReport: ADC raw 5: " << this->adcRaw5 << std::endl; + sif::info << "AdcReport: ADC raw 6: " << this->adcRaw6 << std::endl; + sif::info << "AdcReport: ADC raw 7: " << this->adcRaw7 << std::endl; + sif::info << "AdcReport: ADC raw 8: " << this->adcRaw8 << std::endl; + sif::info << "AdcReport: ADC raw 9: " << this->adcRaw9 << std::endl; + sif::info << "AdcReport: ADC raw 10: " << this->adcRaw10 << std::endl; + sif::info << "AdcReport: ADC raw 11: " << this->adcRaw11 << std::endl; + sif::info << "AdcReport: ADC raw 12: " << this->adcRaw12 << std::endl; + sif::info << "AdcReport: ADC raw 13: " << this->adcRaw13 << std::endl; + sif::info << "AdcReport: ADC raw 14: " << this->adcRaw14 << std::endl; + sif::info << "AdcReport: ADC raw 15: " << this->adcRaw15 << std::endl; + sif::info << "---- Adc Report: Engineering values ----" << std::endl; + sif::info << "AdcReport: ADC eng 0: " << this->adcEng0 << std::endl; + sif::info << "AdcReport: ADC eng 1: " << this->adcEng1 << std::endl; + sif::info << "AdcReport: ADC eng 2: " << this->adcEng2 << std::endl; + sif::info << "AdcReport: ADC eng 3: " << this->adcEng3 << std::endl; + sif::info << "AdcReport: ADC eng 4: " << this->adcEng4 << std::endl; + sif::info << "AdcReport: ADC eng 5: " << this->adcEng5 << std::endl; + sif::info << "AdcReport: ADC eng 6: " << this->adcEng6 << std::endl; + sif::info << "AdcReport: ADC eng 7: " << this->adcEng7 << std::endl; + sif::info << "AdcReport: ADC eng 8: " << this->adcEng8 << std::endl; + sif::info << "AdcReport: ADC eng 9: " << this->adcEng9 << std::endl; + sif::info << "AdcReport: ADC eng 10: " << this->adcEng10 << std::endl; + sif::info << "AdcReport: ADC eng 11: " << this->adcEng11 << std::endl; + sif::info << "AdcReport: ADC eng 12: " << this->adcEng12 << std::endl; + sif::info << "AdcReport: ADC eng 13: " << this->adcEng13 << std::endl; + sif::info << "AdcReport: ADC eng 14: " << this->adcEng14 << std::endl; + sif::info << "AdcReport: ADC eng 15: " << this->adcEng15 << std::endl; + } +}; } // namespace supv #endif /* MISSION_DEVICES_DEVICEDEFINITIONS_PLOCSVPDEFINITIONS_H_ */ diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index b5c6b2bd..c09b00e4 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -660,8 +660,6 @@ ReturnValue_t PlocMPSoCHandler::handleMemoryReadReport(const uint8_t* data) { return result; } - - void PlocMPSoCHandler::setNextReplyId() { switch (getPendingCommand()) { case mpsoc::TC_MEM_READ: diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index c40829c4..c350ffda 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -22,6 +22,7 @@ PlocSupervisorHandler::PlocSupervisorHandler(object_id_t objectId, object_id_t u bootStatusReport(this), latchupStatusReport(this), loggingReport(this), + adcReport(this), powerSwitch(powerSwitch), supvHelper(supvHelper) { if (comCookie == NULL) { @@ -247,6 +248,11 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } + case REQUEST_ADC_REPORT: { + prepareEmptyCmd(APID_REQUEST_ADC_REPORT); + result = RETURN_OK; + break; + } case RUN_AUTO_EM_TESTS: { result = prepareRunAutoEmTest(commandData); break; @@ -319,18 +325,6 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } - case ENABLE_ADC_MONITOR_TASK: { - EnableAdcMonitorTask packet; - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - result = RETURN_OK; - break; - } - case DISABLE_ADC_MONITOR_TASK: { - DisableAdcMonitorTask packet; - packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); - result = RETURN_OK; - break; - } case LOGGING_REQUEST_COUNTERS: { RequestLoggingData packet(RequestLoggingData::Sa::REQUEST_COUNTERS); packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); @@ -387,6 +381,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(SET_ADC_THRESHOLD); this->insertInCommandMap(GET_LATCHUP_STATUS_REPORT); this->insertInCommandMap(COPY_ADC_DATA_TO_MRAM); + this->insertInCommandMap(REQUEST_ADC_REPORT); this->insertInCommandMap(RUN_AUTO_EM_TESTS); this->insertInCommandMap(WIPE_MRAM); this->insertInCommandMap(PRINT_CPU_STATS); @@ -401,8 +396,6 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(FACTORY_FLASH); this->insertInCommandMap(ENABLE_AUTO_TM); this->insertInCommandMap(DISABLE_AUTO_TM); - this->insertInCommandMap(ENABLE_ADC_MONITOR_TASK); - this->insertInCommandMap(DISABLE_ADC_MONITOR_TASK); this->insertInCommandMap(LOGGING_REQUEST_COUNTERS); this->insertInCommandMap(LOGGING_CLEAR_COUNTERS); this->insertInCommandMap(LOGGING_SET_TOPIC); @@ -414,110 +407,120 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInReplyMap(BOOT_STATUS_REPORT, 3, &bootStatusReport, SIZE_BOOT_STATUS_REPORT); this->insertInReplyMap(LATCHUP_REPORT, 3, &latchupStatusReport, SIZE_LATCHUP_STATUS_REPORT); this->insertInReplyMap(LOGGING_REPORT, 3, &loggingReport, SIZE_LOGGING_REPORT); + this->insertInReplyMap(ADC_REPORT, 3, &adcReport, SIZE_ADC_REPORT); } ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, uint8_t expectedReplies, bool useAlternateId, DeviceCommandId_t alternateReplyID) { + using namespace supv; ReturnValue_t result = RETURN_OK; uint8_t enabledReplies = 0; switch (command->first) { - case supv::GET_HK_REPORT: { + case GET_HK_REPORT: { enabledReplies = 3; result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::HK_REPORT); + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, HK_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::HK_REPORT << " not in replyMap" << std::endl; + << HK_REPORT << " not in replyMap" << std::endl; } break; } - case supv::GET_BOOT_STATUS_REPORT: { + case GET_BOOT_STATUS_REPORT: { enabledReplies = 3; result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::BOOT_STATUS_REPORT); + BOOT_STATUS_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::BOOT_STATUS_REPORT << " not in replyMap" << std::endl; + << BOOT_STATUS_REPORT << " not in replyMap" << std::endl; } break; } - case supv::GET_LATCHUP_STATUS_REPORT: { + case GET_LATCHUP_STATUS_REPORT: { enabledReplies = 3; result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::LATCHUP_REPORT); + LATCHUP_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::LATCHUP_REPORT << " not in replyMap" << std::endl; + << LATCHUP_REPORT << " not in replyMap" << std::endl; } break; } - case supv::LOGGING_REQUEST_COUNTERS: { + case LOGGING_REQUEST_COUNTERS: { enabledReplies = 3; result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::LOGGING_REPORT); + LOGGING_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::LOGGING_REPORT << " not in replyMap" << std::endl; + << LOGGING_REPORT << " not in replyMap" << std::endl; } break; } - case supv::FIRST_MRAM_DUMP: { + case REQUEST_ADC_REPORT: { + enabledReplies = 3; + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, + ADC_REPORT); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " + << ADC_REPORT << " not in replyMap" << std::endl; + } + break; + } + case FIRST_MRAM_DUMP: { enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::FIRST_MRAM_DUMP); + FIRST_MRAM_DUMP); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::FIRST_MRAM_DUMP << " not in replyMap" << std::endl; + << FIRST_MRAM_DUMP << " not in replyMap" << std::endl; } break; } - case supv::CONSECUTIVE_MRAM_DUMP: { + case CONSECUTIVE_MRAM_DUMP: { enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - supv::CONSECUTIVE_MRAM_DUMP); + CONSECUTIVE_MRAM_DUMP); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << supv::CONSECUTIVE_MRAM_DUMP << " not in replyMap" << std::endl; + << CONSECUTIVE_MRAM_DUMP << " not in replyMap" << std::endl; } break; } - case supv::START_MPSOC: - case supv::SHUTDOWN_MPSOC: - case supv::SEL_MPSOC_BOOT_IMAGE: - case supv::SET_BOOT_TIMEOUT: - case supv::SET_MAX_RESTART_TRIES: - case supv::RESET_MPSOC: - case supv::SET_TIME_REF: - case supv::ENABLE_LATCHUP_ALERT: - case supv::DISABLE_LATCHUP_ALERT: - case supv::SET_ALERT_LIMIT: - case supv::SET_ADC_ENABLED_CHANNELS: - case supv::SET_ADC_WINDOW_AND_STRIDE: - case supv::SET_ADC_THRESHOLD: - case supv::COPY_ADC_DATA_TO_MRAM: - case supv::RUN_AUTO_EM_TESTS: - case supv::WIPE_MRAM: - case supv::PRINT_CPU_STATS: - case supv::SET_GPIO: - case supv::READ_GPIO: - case supv::RESTART_SUPERVISOR: - case supv::FACTORY_RESET_CLEAR_ALL: - case supv::FACTORY_RESET_CLEAR_MIRROR: - case supv::FACTORY_RESET_CLEAR_CIRCULAR: - case supv::DISABLE_PERIOIC_HK_TRANSMISSION: - case supv::START_MPSOC_QUIET: - case supv::SET_SHUTDOWN_TIMEOUT: - case supv::FACTORY_FLASH: - case supv::ENABLE_AUTO_TM: - case supv::DISABLE_AUTO_TM: - case supv::ENABLE_ADC_MONITOR_TASK: - case supv::DISABLE_ADC_MONITOR_TASK: - case supv::LOGGING_CLEAR_COUNTERS: - case supv::LOGGING_SET_TOPIC: + case START_MPSOC: + case SHUTDOWN_MPSOC: + case SEL_MPSOC_BOOT_IMAGE: + case SET_BOOT_TIMEOUT: + case SET_MAX_RESTART_TRIES: + case RESET_MPSOC: + case SET_TIME_REF: + case ENABLE_LATCHUP_ALERT: + case DISABLE_LATCHUP_ALERT: + case SET_ALERT_LIMIT: + case SET_ADC_ENABLED_CHANNELS: + case SET_ADC_WINDOW_AND_STRIDE: + case SET_ADC_THRESHOLD: + case COPY_ADC_DATA_TO_MRAM: + case RUN_AUTO_EM_TESTS: + case WIPE_MRAM: + case PRINT_CPU_STATS: + case SET_GPIO: + case READ_GPIO: + case RESTART_SUPERVISOR: + case FACTORY_RESET_CLEAR_ALL: + case FACTORY_RESET_CLEAR_MIRROR: + case FACTORY_RESET_CLEAR_CIRCULAR: + case DISABLE_PERIOIC_HK_TRANSMISSION: + case START_MPSOC_QUIET: + case SET_SHUTDOWN_TIMEOUT: + case FACTORY_FLASH: + case ENABLE_AUTO_TM: + case DISABLE_AUTO_TM: + case LOGGING_CLEAR_COUNTERS: + case LOGGING_SET_TOPIC: enabledReplies = 2; break; default: @@ -530,16 +533,16 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite * replies will be enabled here. */ result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::ACK_REPORT); + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, ACK_REPORT); if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::ACK_REPORT + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << ACK_REPORT << " not in replyMap" << std::endl; } result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, supv::EXE_REPORT); + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, EXE_REPORT); if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << supv::EXE_REPORT + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << EXE_REPORT << " not in replyMap" << std::endl; } @@ -586,6 +589,10 @@ ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t* start, size_t r *foundLen = SIZE_LOGGING_REPORT; *foundId = LOGGING_REPORT; break; + case (APID_ADC_REPORT): + *foundLen = SIZE_ADC_REPORT; + *foundId = ADC_REPORT; + break; case (APID_EXE_SUCCESS): *foundLen = SIZE_EXE_REPORT; *foundId = EXE_REPORT; @@ -616,34 +623,39 @@ ReturnValue_t PlocSupervisorHandler::getSwitches(const uint8_t** switches, ReturnValue_t PlocSupervisorHandler::interpretDeviceReply(DeviceCommandId_t id, const uint8_t* packet) { + using namespace supv; ReturnValue_t result = RETURN_OK; switch (id) { - case supv::ACK_REPORT: { + case ACK_REPORT: { result = handleAckReport(packet); break; } - case (supv::HK_REPORT): { + case (HK_REPORT): { result = handleHkReport(packet); break; } - case (supv::BOOT_STATUS_REPORT): { + case (BOOT_STATUS_REPORT): { result = handleBootStatusReport(packet); break; } - case (supv::LATCHUP_REPORT): { + case (LATCHUP_REPORT): { result = handleLatchupStatusReport(packet); break; } - case (supv::LOGGING_REPORT): { + case (LOGGING_REPORT): { result = handleLoggingReport(packet); break; } - case (supv::FIRST_MRAM_DUMP): - case (supv::CONSECUTIVE_MRAM_DUMP): + case (ADC_REPORT): { + result = handleAdcReport(packet); + break; + } + case (FIRST_MRAM_DUMP): + case (CONSECUTIVE_MRAM_DUMP): result = handleMramDumpPacket(id); break; - case (supv::EXE_REPORT): { + case (EXE_REPORT): { result = handleExecutionReport(packet); break; } @@ -712,6 +724,40 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::SOC_BOOTS, new PoolEntry({0})); localDataPoolMap.emplace(supv::SOC_BOOT_FAILS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_0, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_1, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_2, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_3, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_4, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_5, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_6, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_7, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_8, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_9, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_10, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_11, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_12, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_13, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_14, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_RAW_15, new PoolEntry({0})); + + localDataPoolMap.emplace(supv::ADC_ENG_0, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_1, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_2, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_3, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_4, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_5, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_6, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_7, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_8, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_9, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_10, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_11, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_12, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_13, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_14, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_ENG_15, new PoolEntry({0})); + return HasReturnvaluesIF::RETURN_OK; } @@ -1071,7 +1117,7 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { size_t size = loggingReport.getSerializedSize(); result = loggingReport.deSerialize(&dataField, &size, SerializeIF::Endianness::BIG); if (result != RETURN_OK) { - sif::warning << "StarTrackerHandler::handleLoggingReport: Deserialization failed" << std::endl; + sif::warning << "PlocSupervisorHandler::handleLoggingReport: Deserialization failed" << std::endl; } loggingReport.setValidityBufferGeneration(true); loggingReport.setValidity(true, true); @@ -1086,6 +1132,41 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { return result; } +ReturnValue_t PlocSupervisorHandler::handleAdcReport(const uint8_t* data) { + ReturnValue_t result = RETURN_OK; + + result = verifyPacket(data, supv::SIZE_ADC_REPORT); + + if (result == SupvReturnValuesIF::CRC_FAILURE) { + sif::error << "PlocSupervisorHandler::handleAdcReport: ADC report has " + << "invalid crc" << std::endl; + return result; + } + + const uint8_t* dataField = data + supv::DATA_FIELD_OFFSET; + result = adcReport.read(); + if (result != RETURN_OK) { + return result; + } + adcReport.setValidityBufferGeneration(false); + size_t size = adcReport.getSerializedSize(); + result = adcReport.deSerialize(&dataField, &size, SerializeIF::Endianness::BIG); + if (result != RETURN_OK) { + sif::warning << "PlocSupervisorHandler::handleAdcReport: Deserialization failed" << std::endl; + } + adcReport.setValidityBufferGeneration(true); + adcReport.setValidity(true, true); + result = adcReport.commit(); + if (result != RETURN_OK) { + return result; + } +#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_PLOC_SUPERVISOR == 1 + adcReport.printSet(); +#endif + nextReplyId = supv::EXE_REPORT; + return result; +} + void PlocSupervisorHandler::setNextReplyId() { switch (getPendingCommand()) { case supv::GET_HK_REPORT: @@ -1106,6 +1187,9 @@ void PlocSupervisorHandler::setNextReplyId() { case supv::LOGGING_REQUEST_COUNTERS: nextReplyId = supv::LOGGING_REPORT; break; + case supv::REQUEST_ADC_REPORT: + nextReplyId = supv::ADC_REPORT; + break; default: /* If no telemetry is expected the next reply is always the execution report */ nextReplyId = supv::EXE_REPORT; diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 213150cc..cc9c6217 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -94,6 +94,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { supv::BootStatusReport bootStatusReport; supv::LatchupStatusReport latchupStatusReport; supv::LoggingReport loggingReport; + supv::AdcReport adcReport; const power::Switch_t powerSwitch = power::NO_SWITCH; @@ -178,6 +179,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t handleLatchupStatusReport(const uint8_t* data); ReturnValue_t handleLoggingReport(const uint8_t* data); + ReturnValue_t handleAdcReport(const uint8_t* data); /** * @brief Depending on the current active command, this function sets the reply id of the From 836a2327f9a8b1c04440af651add80156f109df0 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 21 Apr 2022 16:31:14 +0200 Subject: [PATCH 021/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 45470f8c..1dd7fdde 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 45470f8c05ef214eb41940878ef0bfabf36a4891 +Subproject commit 1dd7fddef40e16f272bb45259305e143a5749c74 From 2ee9b09b27a7116fa772a06a97abb455b568468d Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 22 Apr 2022 08:55:57 +0200 Subject: [PATCH 022/115] logging command --- .../PlocSupervisorDefinitions.h | 97 +++++++++++++------ linux/devices/ploc/PlocSupervisorHandler.cpp | 25 +++-- 2 files changed, 81 insertions(+), 41 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index bf8d9b7c..a37af14f 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -202,15 +202,22 @@ enum PoolIds : lp_id_t { LATCHUP_RPT_TIME_MSEC, LATCHUP_RPT_IS_SET, - SUPERVISOR_REBOOTS, - LATCHUP_EVENTS, - ADC_TRIGGERS, - PS_HEARTBEATS_LOST, - PL_HEARTBEATS_LOST, - TC_RECEIVED, - TM_RECEIVED, - SOC_BOOTS, - SOC_BOOT_FAILS, + LATCHUP_HAPPENED_CNT_0, + LATCHUP_HAPPENED_CNT_1, + LATCHUP_HAPPENED_CNT_2, + LATCHUP_HAPPENED_CNT_3, + LATCHUP_HAPPENED_CNT_4, + LATCHUP_HAPPENED_CNT_5, + LATCHUP_HAPPENED_CNT_6, + ADC_DEVIATION_TRIGGERS_CNT, + TC_RECEIVED_CNT, + TM_AVAILABLE_CNT, + SUPERVISOR_BOOTS, + MPSOC_BOOTS, + MPSOC_BOOT_FAILED_ATTEMPTS, + MPSOC_POWER_UP, + MPSOC_UPDATES, + LAST_RECVD_TC, ADC_RAW_0, ADC_RAW_1, @@ -249,7 +256,7 @@ enum PoolIds : lp_id_t { static const uint8_t HK_SET_ENTRIES = 13; static const uint8_t BOOT_REPORT_SET_ENTRIES = 10; static const uint8_t LATCHUP_RPT_SET_ENTRIES = 16; -static const uint8_t LOGGING_RPT_SET_ENTRIES = 9; +static const uint8_t LOGGING_RPT_SET_ENTRIES = 16; static const uint8_t ADC_RPT_SET_ENTRIES = 32; static const uint32_t HK_SET_ID = HK_REPORT; @@ -1380,30 +1387,56 @@ class LoggingReport : public StaticLocalDataSet { LoggingReport(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LOGGING_RPT_ID)) {} - lp_var_t supervisorReboots = - lp_var_t(sid.objectId, PoolIds::SUPERVISOR_REBOOTS, this); - lp_var_t latchupEvents = - lp_var_t(sid.objectId, PoolIds::LATCHUP_EVENTS, this); - lp_var_t adcTriggers = lp_var_t(sid.objectId, PoolIds::ADC_TRIGGERS, this); - lp_var_t psHeartbeatsLost = - lp_var_t(sid.objectId, PoolIds::PS_HEARTBEATS_LOST, this); - lp_var_t plHeartbeatsLost = - lp_var_t(sid.objectId, PoolIds::PL_HEARTBEATS_LOST, this); - lp_var_t tcReceived = lp_var_t(sid.objectId, PoolIds::TC_RECEIVED, this); - lp_var_t tmReceived = lp_var_t(sid.objectId, PoolIds::TM_RECEIVED, this); - lp_var_t socBoots = lp_var_t(sid.objectId, PoolIds::SOC_BOOTS, this); - lp_var_t socBootFails = lp_var_t(sid.objectId, PoolIds::SOC_BOOT_FAILS, this); + lp_var_t latchupHappenCnt0 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_0, this); + lp_var_t latchupHappenCnt1 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_1, this); + lp_var_t latchupHappenCnt2 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_2, this); + lp_var_t latchupHappenCnt3 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_3, this); + lp_var_t latchupHappenCnt4 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_4, this); + lp_var_t latchupHappenCnt5 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_5, this); + lp_var_t latchupHappenCnt6 = + lp_var_t(sid.objectId, PoolIds::LATCHUP_HAPPENED_CNT_6, this); + lp_var_t adcDeviationTriggersCnt = + lp_var_t(sid.objectId, PoolIds::ADC_DEVIATION_TRIGGERS_CNT, this); + lp_var_t tcReceivedCnt = + lp_var_t(sid.objectId, PoolIds::TC_RECEIVED_CNT, this); + lp_var_t tmAvailableCnt = + lp_var_t(sid.objectId, PoolIds::TM_AVAILABLE_CNT, this); + lp_var_t supervisorBoots = + lp_var_t(sid.objectId, PoolIds::SUPERVISOR_BOOTS, this); + lp_var_t mpsocBoots = + lp_var_t(sid.objectId, PoolIds::MPSOC_BOOTS, this); + lp_var_t mpsocBootFailedAttempts = + lp_var_t(sid.objectId, PoolIds::MPSOC_BOOT_FAILED_ATTEMPTS, this); + lp_var_t mpsocPowerup = + lp_var_t(sid.objectId, PoolIds::MPSOC_POWER_UP, this); + lp_var_t mpsocUpdates = + lp_var_t(sid.objectId, PoolIds::MPSOC_UPDATES, this); + lp_var_t lastRecvdTc = + lp_var_t(sid.objectId, PoolIds::LAST_RECVD_TC, this); void printSet() { - sif::info << "LoggingReport: Supervisor reboots: " << this->supervisorReboots << std::endl; - sif::info << "LoggingReport: Latchup events: " << this->latchupEvents << std::endl; - sif::info << "LoggingReport: ADC triggers: " << this->adcTriggers << std::endl; - sif::info << "LoggingReport: PS heartbeats lost: " << this->psHeartbeatsLost << std::endl; - sif::info << "LoggingReport: PL heartbeats lost: " << this->plHeartbeatsLost << std::endl; - sif::info << "LoggingReport: TC received: " << this->tcReceived << std::endl; - sif::info << "LoggingReport: TM received: " << this->tmReceived << std::endl; - sif::info << "LoggingReport: SoC boots: " << this->socBoots << std::endl; - sif::info << "LoggingReport: SoC boot fails: " << this->socBootFails << std::endl; + sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: TC received count: " << this->tcReceivedCnt << std::endl; + sif::info << "LoggingReport: TM available count: " << this->tmAvailableCnt << std::endl; + sif::info << "LoggingReport: Supervisor boots: " << this->supervisorBoots << std::endl; + sif::info << "LoggingReport: MPSoC boots: " << this->mpsocBoots << std::endl; + sif::info << "LoggingReport: MPSoC boot failed attempts: " << this->mpsocBootFailedAttempts << std::endl; + sif::info << "LoggingReport: MPSoC power up: " << this->mpsocPowerup << std::endl; + sif::info << "LoggingReport: MPSoC updates: " << this->mpsocUpdates << std::endl; + sif::info << "LoggingReport: Last received TC: " << this->lastRecvdTc << std::endl; } }; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index c350ffda..f8b188a5 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -714,15 +714,22 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool localDataPoolMap.emplace(supv::LATCHUP_RPT_TIME_YEAR, new PoolEntry({0})); localDataPoolMap.emplace(supv::LATCHUP_RPT_IS_SET, new PoolEntry({0})); - localDataPoolMap.emplace(supv::SUPERVISOR_REBOOTS, new PoolEntry({0})); - localDataPoolMap.emplace(supv::LATCHUP_EVENTS, new PoolEntry({0})); - localDataPoolMap.emplace(supv::ADC_TRIGGERS, new PoolEntry({0})); - localDataPoolMap.emplace(supv::PS_HEARTBEATS_LOST, new PoolEntry({0})); - localDataPoolMap.emplace(supv::PL_HEARTBEATS_LOST, new PoolEntry({0})); - localDataPoolMap.emplace(supv::TC_RECEIVED, new PoolEntry({0})); - localDataPoolMap.emplace(supv::TM_RECEIVED, new PoolEntry({0})); - localDataPoolMap.emplace(supv::SOC_BOOTS, new PoolEntry({0})); - localDataPoolMap.emplace(supv::SOC_BOOT_FAILS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_0, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_1, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_2, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_3, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_4, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_5, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LATCHUP_HAPPENED_CNT_6, new PoolEntry({0})); + localDataPoolMap.emplace(supv::ADC_DEVIATION_TRIGGERS_CNT, new PoolEntry({0})); + localDataPoolMap.emplace(supv::TC_RECEIVED_CNT, new PoolEntry({0})); + localDataPoolMap.emplace(supv::TM_AVAILABLE_CNT, new PoolEntry({0})); + localDataPoolMap.emplace(supv::SUPERVISOR_BOOTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::MPSOC_BOOTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::MPSOC_BOOT_FAILED_ATTEMPTS, new PoolEntry({0})); + localDataPoolMap.emplace(supv::MPSOC_POWER_UP, new PoolEntry({0})); + localDataPoolMap.emplace(supv::MPSOC_UPDATES, new PoolEntry({0})); + localDataPoolMap.emplace(supv::LAST_RECVD_TC, new PoolEntry({0})); localDataPoolMap.emplace(supv::ADC_RAW_0, new PoolEntry({0})); localDataPoolMap.emplace(supv::ADC_RAW_1, new PoolEntry({0})); From 8b612d9116f7743b4462e09ed1e934124a5ce11f Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 22 Apr 2022 14:16:40 +0200 Subject: [PATCH 023/115] include fix --- linux/devices/ploc/PlocSupvHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index 779b88bb..d734569a 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -6,7 +6,7 @@ #include "OBSWConfig.h" #ifdef XIPHOS_Q7S #include "bsp_q7s/memory/FilesystemHelper.h" -#include "bsp_q7s/memory/SDCardManager.h" +#include "bsp_q7s/memory/SdCardManager.h" #endif #include "fsfw/globalfunctions/CRC.h" From b63c3bb9c399d22ce3383032fbf2168c1af55a20 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 22 Apr 2022 14:17:16 +0200 Subject: [PATCH 024/115] increased delay cycles of execution report --- linux/devices/ploc/PlocSupervisorHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index f8b188a5..2de67b4e 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -402,7 +402,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); - this->insertInReplyMap(EXE_REPORT, 3, nullptr, SIZE_EXE_REPORT); + this->insertInReplyMap(EXE_REPORT, 50, nullptr, SIZE_EXE_REPORT); this->insertInReplyMap(HK_REPORT, 3, &hkset, SIZE_HK_REPORT); this->insertInReplyMap(BOOT_STATUS_REPORT, 3, &bootStatusReport, SIZE_BOOT_STATUS_REPORT); this->insertInReplyMap(LATCHUP_REPORT, 3, &latchupStatusReport, SIZE_LATCHUP_STATUS_REPORT); From ce41e4c219836323872968b05bc050d8d8895891 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 22 Apr 2022 14:21:41 +0200 Subject: [PATCH 025/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 1dd7fdde..0cb9dbef 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 1dd7fddef40e16f272bb45259305e143a5749c74 +Subproject commit 0cb9dbefca140a184d899fb525ce0fcf3b0fcd2d From 9301206485a406d39ffd5ba3eead9af496d7c912 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 22 Apr 2022 18:05:03 +0200 Subject: [PATCH 026/115] fixes identified during tests --- linux/devices/ploc/PlocMPSoCHandler.cpp | 74 -------------------- linux/devices/ploc/PlocMemoryDumper.cpp | 2 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 2 + tmtc | 2 +- 4 files changed, 4 insertions(+), 76 deletions(-) diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index dc37390f..07a658bf 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -258,80 +258,6 @@ void PlocMPSoCHandler::fillCommandAndReplyMap() { this->insertInReplyMap(mpsoc::TM_CAM_CMD_RPT, 2, nullptr, SpacePacket::PACKET_MAX_SIZE); } -ReturnValue_t PlocMPSoCHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command, - uint8_t expectedReplies, bool useAlternateId, - DeviceCommandId_t alternateReplyID) { - ReturnValue_t result = RETURN_OK; - - uint8_t enabledReplies = 0; - - switch (command->first) { - case mpsoc::TC_MEM_WRITE: - case mpsoc::TC_FLASHDELETE: - case mpsoc::TC_REPLAY_START: - case mpsoc::TC_REPLAY_STOP: - case mpsoc::TC_DOWNLINK_PWR_ON: - case mpsoc::TC_DOWNLINK_PWR_OFF: - case mpsoc::TC_REPLAY_WRITE_SEQUENCE: - case mpsoc::TC_MODE_REPLAY: - enabledReplies = 2; - break; - case mpsoc::TC_MEM_READ: { - enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - mpsoc::TM_MEMORY_READ_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " - << mpsoc::TM_MEMORY_READ_REPORT << " not in replyMap" << std::endl; - } - break; - } - case mpsoc::OBSW_RESET_SEQ_COUNT: - break; - default: - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Unknown command id" << std::endl; - break; - } - - /** - * Every command causes at least one acknowledgment and one execution report. Therefore both - * replies will be enabled here. - */ - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::ACK_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::ACK_REPORT - << " not in replyMap" << std::endl; - } - - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, mpsoc::EXE_REPORT); - if (result != RETURN_OK) { - sif::debug << "PlocMPSoCHandler::enableReplyInReplyMap: Reply with id " << mpsoc::EXE_REPORT - << " not in replyMap" << std::endl; - } - - switch (command->first) { - case mpsoc::TC_REPLAY_WRITE_SEQUENCE: { - DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); - // Overwrite delay cycles because replay write sequence command can required up to - // 30 seconds for execution - iter->second.delayCycles = mpsoc::TC_WRITE_SEQ_EXECUTION_DELAY; - break; - } - case mpsoc::TC_DOWNLINK_PWR_ON: { - DeviceReplyIter iter = deviceReplyMap.find(mpsoc::EXE_REPORT); - // - iter->second.delayCycles = mpsoc::TC_DOWNLINK_PWR_ON; - break; - } - default: - break; - } - - return RETURN_OK; -} - ReturnValue_t PlocMPSoCHandler::scanForReply(const uint8_t* start, size_t remainingSize, DeviceCommandId_t* foundId, size_t* foundLen) { ReturnValue_t result = RETURN_OK; diff --git a/linux/devices/ploc/PlocMemoryDumper.cpp b/linux/devices/ploc/PlocMemoryDumper.cpp index a73a2606..871c69a8 100644 --- a/linux/devices/ploc/PlocMemoryDumper.cpp +++ b/linux/devices/ploc/PlocMemoryDumper.cpp @@ -168,12 +168,12 @@ void PlocMemoryDumper::commandNextMramDump(ActionId_t dumpCommand) { tempStartAddress = mram.startAddress; tempEndAddress = mram.startAddress + MAX_MRAM_DUMP_SIZE; mram.startAddress += MAX_MRAM_DUMP_SIZE; - mram.lastStartAddress = tempStartAddress; } else { tempStartAddress = mram.startAddress; tempEndAddress = mram.endAddress; mram.startAddress = mram.endAddress; } + mram.lastStartAddress = tempStartAddress; MemoryParams params(tempStartAddress, tempEndAddress); diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 2de67b4e..d131b63b 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -1550,6 +1550,7 @@ ReturnValue_t PlocSupervisorHandler::parseMramPackets(const uint8_t* packet, siz *foundLen = remainingSize; disableAllReplies(); bufferTop = 0; + sif::info << "PlocSupervisorHandler::parseMramPackets: Can not find MRAM packet in space packet buffer" << std::endl; return SupvReturnValuesIF::MRAM_PACKET_PARSING_FAILURE; } } @@ -1634,6 +1635,7 @@ void PlocSupervisorHandler::increaseExpectedMramReplies(DeviceCommandId_t id) { ReturnValue_t PlocSupervisorHandler::checkMramPacketApid() { uint16_t apid = (spacePacketBuffer[0] << 8 | spacePacketBuffer[1]) & supv::APID_MASK; if (apid != supv::APID_MRAM_DUMP_TM) { + sif::warning << "PlocSupervisorHandler::checkMramPacketApid: 0x" << std::hex << apid << std::endl; return SupvReturnValuesIF::NO_MRAM_PACKET; } return APERIODIC_REPLY; diff --git a/tmtc b/tmtc index 0cb9dbef..ad53f3e9 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 0cb9dbefca140a184d899fb525ce0fcf3b0fcd2d +Subproject commit ad53f3e9bb526bf030905d24781af57ae6ac5b01 From 6876952bbdd057338afa69ee77d5bedb8bba6921 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sun, 24 Apr 2022 12:34:08 +0200 Subject: [PATCH 027/115] regenerated events --- bsp_q7s/core/CoreController.h | 2 +- bsp_q7s/core/InitMission.cpp | 8 +- bsp_te0720_1cfa/ObjectFactory.cpp | 38 ++---- generators/bsp_q7s_events.csv | 4 + generators/bsp_q7s_returnvalues.csv | 113 ------------------ generators/events/translateEvents.cpp | 16 ++- generators/objects/translateObjects.cpp | 2 +- .../PlocSupervisorDefinitions.h | 2 +- linux/devices/ploc/PlocSupvHelper.cpp | 4 +- linux/fsfwconfig/events/subsystemIdRanges.h | 2 +- linux/fsfwconfig/events/translateEvents.cpp | 16 ++- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- 12 files changed, 58 insertions(+), 151 deletions(-) diff --git a/bsp_q7s/core/CoreController.h b/bsp_q7s/core/CoreController.h index dee06530..fb4f02b0 100644 --- a/bsp_q7s/core/CoreController.h +++ b/bsp_q7s/core/CoreController.h @@ -73,7 +73,7 @@ class CoreController : public ExtendedControllerBase { 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 occured. Can also be a systemd reboot. + //! [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::MEDIUM); //! [EXPORT] : [COMMENT] The reboot mechanism was triggered. diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index 7164b8c9..b2817899 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -121,24 +121,26 @@ void initmission::initTasks() { initmission::printAddObjectError("GPS_CTRL", objects::GPS_CONTROLLER); } -#endif /* OBSW_ADD_ACS_HANDLERS */ - PeriodicTaskIF* sysTask = factory->createPeriodicTask( "SYS_TASK", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc); result = sysTask->addComponent(objects::ACS_BOARD_ASS); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("ACS_BOARD_ASS", objects::ACS_BOARD_ASS); } +#endif /* OBSW_ADD_ACS_HANDLERS */ + #if OBSW_ADD_SUS_BOARD_ASS == 1 result = sysTask->addComponent(objects::SUS_BOARD_ASS); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("SUS_BOARD_ASS", objects::SUS_BOARD_ASS); } #endif +#if OBSW_ADD_RTD_DEVICES == 1 result = sysTask->addComponent(objects::TCS_BOARD_ASS); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("TCS_BOARD_ASS", objects::TCS_BOARD_ASS); } +#endif /* OBSW_ADD_RTD_DEVICES == 1 */ // FS task, task interval does not matter because it runs in permanent loop, priority low // because it is a non-essential background task @@ -238,7 +240,9 @@ void initmission::initTasks() { #if OBSW_ADD_ACS_HANDLERS == 1 acsTask->startTask(); #endif +#if OBSW_ADD_RTD_DEVICES == 1 || OBSW_ADD_RTD_DEVICES == 1 sysTask->startTask(); +#endif #if OBSW_ADD_PLOC_SUPERVISOR == 1 supvHelperTask->startTask(); #endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */ diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index 611036b4..8d5c3ee4 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -60,6 +60,19 @@ new UartComIF(objects::UART_COM_IF); plocMPSoCHandler->setStartUpImmediately(); #endif /* OBSW_ADD_PLOC_MPSOC == 1 */ +#if OBSW_ADD_PLOC_SUPERVISOR == 1 + UartCookie* supervisorCookie = + new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, std::string("/dev/ttyPS1"), + uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); + supervisorCookie->setNoFixedSizeReply(); + auto supvGpioIF = new DummyGpioIF(); + auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); + auto plocSupervisor = new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, + supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, supvGpioIF), + pcdu::PDU1_CH6_PLOC_12V, supvHelper); + plocSupervisor->setStartUpImmediately(); +#endif + #if OBSW_TEST_LIBGPIOD == 1 #if OBSW_TEST_GPIO_OPEN_BYLABEL == 1 /* Configure MIO0 as input */ @@ -131,31 +144,6 @@ new UartComIF(objects::UART_COM_IF); pcdu::TCS_BOARD_8V_HEATER_IN); #endif -#if OBSW_ADD_PLOC_MPSOC == 1 - UartCookie* mpsocUartCookie = new UartCookie(objects::PLOC_MPSOC_HANDLER, te0720_1cfa::MPSOC_UART, - uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); - mpsocUartCookie->setNoFixedSizeReply(); - PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); - auto mpsocGpioIF = new DummyGpioIF(); - PlocMPSoCHandler* plocMPSoCHandler = new PlocMPSoCHandler( - objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, plocMpsocHelper, - Gpio(gpioIds::ENABLE_MPSOC_UART, mpsocGpioIF), objects::PLOC_SUPERVISOR_HANDLER); - plocMPSoCHandler->setStartUpImmediately(); -#endif /* OBSW_ADD_PLOC_MPSOC == 1 */ - -#if OBSW_ADD_PLOC_SUPERVISOR == 1 - UartCookie* supervisorCookie = - new UartCookie(objects::PLOC_SUPERVISOR_HANDLER, std::string("/dev/ttyPS1"), - uart::PLOC_SUPV_BAUD, supv::MAX_PACKET_SIZE * 20); - supervisorCookie->setNoFixedSizeReply(); - auto supvGpioIF = new DummyGpioIF(); - auto supvHelper = new PlocSupvHelper(objects::PLOC_SUPERVISOR_HELPER); - auto plocSupervisor = new PlocSupervisorHandler(objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, - supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, supvGpioIF), - pcdu::PDU1_CH6_PLOC_12V, supvHelper); - plocSupervisor->setStartUpImmediately(); -#endif - new I2cComIF(objects::I2C_COM_IF); I2cCookie* i2cCookieTmp1075tcs1 = diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 5e97bab8..c32eaa69 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -192,3 +192,7 @@ 13614;0x352e;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\PlocSupvHelper.h 13615;0x352f;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\PlocSupvHelper.h 13616;0x3530;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\PlocSupvHelper.h +13700;0x3584;ALLOC_FAILURE;MEDIUM;;bsp_q7s\core\CoreController.h +13701;0x3585;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s\core\CoreController.h +13702;0x3586;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s\core\CoreController.h +13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s\core\CoreController.h diff --git a/generators/bsp_q7s_returnvalues.csv b/generators/bsp_q7s_returnvalues.csv index c623b3f8..104795ca 100644 --- a/generators/bsp_q7s_returnvalues.csv +++ b/generators/bsp_q7s_returnvalues.csv @@ -1,20 +1,11 @@ 0x0;OK;System-wide code for ok.;RETURN_OK;HasReturnvaluesIF.h;HasReturnvaluesIF 0x1;Failed;Unspecified system-wide code for failed.;RETURN_FAILED;HasReturnvaluesIF.h;HasReturnvaluesIF -<<<<<<< HEAD 0x6000;GOMS_PacketTooLong;;0;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER 0x6001;GOMS_InvalidTableId;;1;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER 0x6002;GOMS_InvalidAddress;;2;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER 0x6003;GOMS_InvalidParamSize;;3;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER 0x6004;GOMS_InvalidPayloadSize;;4;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER 0x6005;GOMS_UnknownReplyId;;5;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -======= -0x5f00;GOMS_PacketTooLong;;0;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f01;GOMS_InvalidTableId;;1;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f02;GOMS_InvalidAddress;;2;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f03;GOMS_InvalidParamSize;;3;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f04;GOMS_InvalidPayloadSize;;4;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f05;GOMS_UnknownReplyId;;5;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER ->>>>>>> develop 0x52a1;HEATER_CommandNotSupported;;0xA1;mission\devices\HeaterHandler.h;HEATER_HANDLER 0x52a2;HEATER_InitFailed;;0xA2;mission\devices\HeaterHandler.h;HEATER_HANDLER 0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission\devices\HeaterHandler.h;HEATER_HANDLER @@ -40,7 +31,6 @@ 0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission\devices\RwHandler.h;RW_HANDLER 0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission\devices\RwHandler.h;RW_HANDLER 0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission\devices\RwHandler.h;RW_HANDLER -<<<<<<< HEAD 0x69a0;SADPL_CommandNotSupported;;0xA0;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER 0x69a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER 0x69a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER @@ -48,15 +38,6 @@ 0x69a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER 0x5ba0;SUSS_ErrorUnlockMutex;;0xA0;mission\devices\SusHandler.h;SUS_HANDLER 0x5ba1;SUSS_ErrorLockMutex;;0xA1;mission\devices\SusHandler.h;SUS_HANDLER -======= -0x68a0;SADPL_CommandNotSupported;;0xA0;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission\devices\SusHandler.h;SUS_HANDLER -0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission\devices\SusHandler.h;SUS_HANDLER ->>>>>>> develop 0x53a0;SYRLINKS_CrcFailure;;0xA0;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER 0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER 0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER @@ -66,13 +47,8 @@ 0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER 0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER 0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -<<<<<<< HEAD 0x66a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission\memory\NVMParameterBase.h;NVM_PARAM_BASE 0x63a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission\tmtc\CCSDSHandler.h;CCSDS_HANDLER -======= -0x65a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission\memory\NVMParameterBase.h;NVM_PARAM_BASE -0x62a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission\tmtc\CCSDSHandler.h;CCSDS_HANDLER ->>>>>>> develop 0x4601; HGIO_UnknownGpioId;;1;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO 0x4602; HGIO_DriveGpioFailure;;2;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO 0x4603; HGIO_GpioTypeFailure;;3;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO @@ -468,7 +444,6 @@ 0x1f07; CSB_InvalidReply;;7;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE 0x4a00; SPPA_NoPacketFound;;0x00;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER 0x4a01; SPPA_SplitPacket;;0x01;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER -<<<<<<< HEAD 0x67a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER 0x67a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER 0x7300; SCBU_KeyNotFound;;0;bsp_q7s\memory\scratchApi.h;SCRATCH_BUFFER @@ -527,61 +502,6 @@ 0x6501;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE 0x6502;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE 0x6503;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -======= -0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER -0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER -0x7100; SCBU_KeyNotFound;;0;bsp_q7s\memory\scratchApi.h;SCRATCH_BUFFER -0x7000; SDMA_OpOngoing;;0;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7001; SDMA_AlreadyOn;;1;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7002; SDMA_AlreadyMounted;;2;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7003; SDMA_AlreadyOff;;3;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700a; SDMA_StatusFileNexists;;10;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700c; SDMA_MountError;;12;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700d; SDMA_UnmountError;;13;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700e; SDMA_SystemCallError;;14;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700f; SDMA_PopenCallError;;15;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocMPSoCHelper.h;PLOC_MPSOC_HELPER -0x59a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a3;PLSV_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a4;PLSV_GetTimeFailure;Failed to read current system time;0xA4;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a5;PLSV_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a6;PLSV_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a7;PLSV_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a8;PLSV_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a9;PLSV_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59aa;PLSV_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ab;PLSV_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);0xAB;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ac;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ad;PLSV_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ae;PLSV_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE ->>>>>>> develop 0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER @@ -604,7 +524,6 @@ 0x56b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER 0x56b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -<<<<<<< HEAD 0x5fa0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux\devices\startracker\StrHelper.h;STR_HELPER 0x5fa1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux\devices\startracker\StrHelper.h;STR_HELPER 0x5fa2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux\devices\startracker\StrHelper.h;STR_HELPER @@ -635,35 +554,3 @@ 0x64a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux\obc\PtmeConfig.h;RATE_SETTER 0x64a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux\obc\PtmeConfig.h;RATE_SETTER 0x64a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux\obc\PtmeConfig.h;RATE_SETTER -======= -0x5ea0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ba0;IPCI_PapbBusy;;0xA0;linux\obc\PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE -0x61a0;PDEC_AbandonedCltu;;0xA0;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a1;PDEC_FrameDirty;;0xA1;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a3;PDEC_AdDiscardedLockout;;0xA3;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a4;PDEC_AdDiscardedWait;;0xA4;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a5;PDEC_AdDiscardedNsVs;;0xA5;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61b0;PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a6;PDEC_NoReport;;0xA6;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a7;PDEC_ErrorVersionNumber;;0xA7;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a8;PDEC_IllegalCombination;;0xA8;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a9;PDEC_InvalidScId;;0xA9;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61aa;PDEC_InvalidVcIdMsb;;0xAA;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ab;PDEC_InvalidVcIdLsb;;0xAB;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ac;PDEC_NsNotZero;;0xAC;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ae;PDEC_InvalidBcCc;;0xAE;linux\obc\PdecHandler.h;PDEC_HANDLER -0x5ca0;PTME_UnknownVcId;;0xA0;linux\obc\Ptme.h;PTME -0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux\obc\PtmeConfig.h;RATE_SETTER ->>>>>>> develop diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 0eeb503a..a829cb26 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 194 translations. + * @brief Auto-generated event translation file. Contains 198 translations. * @details - * Generated on: 2022-04-18 16:58:03 + * Generated on: 2022-04-24 12:20:25 */ #include "translateEvents.h" @@ -195,6 +195,10 @@ const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; const char *ACK_RECEPTION_FAILURE_STRING = "ACK_RECEPTION_FAILURE"; const char *EXE_RECEPTION_FAILURE_STRING = "EXE_RECEPTION_FAILURE"; +const char *ALLOC_FAILURE_STRING = "ALLOC_FAILURE"; +const char *REBOOT_SW_STRING = "REBOOT_SW"; +const char *REBOOT_MECHANISM_TRIGGERED_STRING = "REBOOT_MECHANISM_TRIGGERED"; +const char *REBOOT_HW_STRING = "REBOOT_HW"; const char *translateEvents(Event event) { switch ((event & 0xFFFF)) { @@ -578,6 +582,14 @@ const char *translateEvents(Event event) { return ACK_RECEPTION_FAILURE_STRING; case (13616): return EXE_RECEPTION_FAILURE_STRING; + case (13700): + return ALLOC_FAILURE_STRING; + case (13701): + return REBOOT_SW_STRING; + case (13702): + return REBOOT_MECHANISM_TRIGGERED_STRING; + case (13703): + return REBOOT_HW_STRING; default: return "UNKNOWN_EVENT"; } diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index dae25b92..7d46b9bc 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 116 translations. - * Generated on: 2022-04-18 16:58:07 + * Generated on: 2022-04-24 12:09:01 */ #include "translateObjects.h" diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index a37af14f..cf5fccc8 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1136,7 +1136,7 @@ class WriteMemory : public SupvTcSpacePacket { } // Although the space packet has space left for 1010 bytes of data to supervisor can only process - // update packets with maximum 512 bytes of update data. + // update packets with a maximum of 512 bytes. static const uint16_t CHUNK_MAX = 512; private: diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index d734569a..c1f66d08 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -452,8 +452,8 @@ ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { } result = updateStatusReport.verifycrc(update.crc); if (result != RETURN_OK) { - sif::warning << "PlocSupvHelper::performUpdate: CRC failure. Expected CRC 0x" << std::hex - << update.crc << " but received CRC 0x" << updateStatusReport.getCrc() + sif::warning << "PlocSupvHelper::handleCheckMemoryCommand: CRC failure. Expected CRC 0x" + << std::hex << update.crc << " but received CRC 0x" << updateStatusReport.getCrc() << std::endl; return result; } diff --git a/linux/fsfwconfig/events/subsystemIdRanges.h b/linux/fsfwconfig/events/subsystemIdRanges.h index 768797b5..f0a0316c 100644 --- a/linux/fsfwconfig/events/subsystemIdRanges.h +++ b/linux/fsfwconfig/events/subsystemIdRanges.h @@ -13,7 +13,7 @@ namespace SUBSYSTEM_ID { enum : uint8_t { SUBSYSTEM_ID_START = COMMON_SUBSYSTEM_ID_END, - CORE = 136, + CORE = 137, }; } diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 0eeb503a..a829cb26 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 194 translations. + * @brief Auto-generated event translation file. Contains 198 translations. * @details - * Generated on: 2022-04-18 16:58:03 + * Generated on: 2022-04-24 12:20:25 */ #include "translateEvents.h" @@ -195,6 +195,10 @@ const char *SUPV_ACK_INVALID_APID_STRING = "SUPV_ACK_INVALID_APID"; const char *SUPV_EXE_INVALID_APID_STRING = "SUPV_EXE_INVALID_APID"; const char *ACK_RECEPTION_FAILURE_STRING = "ACK_RECEPTION_FAILURE"; const char *EXE_RECEPTION_FAILURE_STRING = "EXE_RECEPTION_FAILURE"; +const char *ALLOC_FAILURE_STRING = "ALLOC_FAILURE"; +const char *REBOOT_SW_STRING = "REBOOT_SW"; +const char *REBOOT_MECHANISM_TRIGGERED_STRING = "REBOOT_MECHANISM_TRIGGERED"; +const char *REBOOT_HW_STRING = "REBOOT_HW"; const char *translateEvents(Event event) { switch ((event & 0xFFFF)) { @@ -578,6 +582,14 @@ const char *translateEvents(Event event) { return ACK_RECEPTION_FAILURE_STRING; case (13616): return EXE_RECEPTION_FAILURE_STRING; + case (13700): + return ALLOC_FAILURE_STRING; + case (13701): + return REBOOT_SW_STRING; + case (13702): + return REBOOT_MECHANISM_TRIGGERED_STRING; + case (13703): + return REBOOT_HW_STRING; default: return "UNKNOWN_EVENT"; } diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index dae25b92..7d46b9bc 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 116 translations. - * Generated on: 2022-04-18 16:58:07 + * Generated on: 2022-04-24 12:09:01 */ #include "translateObjects.h" From 311ec7b194c5701de8618460625465031a3da01a Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 25 Apr 2022 11:03:02 +0200 Subject: [PATCH 028/115] mpsoc shutdown after running update procedure --- bsp_q7s/core/InitMission.cpp | 4 +- bsp_q7s/core/ObjectFactory.cpp | 2 - linux/devices/GPSHyperionLinuxController.cpp | 2 +- .../PlocSupervisorDefinitions.h | 303 ++++++++++++++++-- linux/devices/ploc/PlocSupervisorHandler.cpp | 14 + linux/devices/ploc/PlocSupervisorHandler.h | 2 + linux/devices/ploc/PlocSupvHelper.cpp | 68 ++-- linux/devices/ploc/PlocSupvHelper.h | 7 +- linux/fsfwconfig/OBSWConfig.h.in | 5 +- mission/utility/ProgressPrinter.cpp | 9 +- mission/utility/ProgressPrinter.h | 11 +- tmtc | 2 +- 12 files changed, 343 insertions(+), 86 deletions(-) diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index b2817899..919e9fbd 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -115,11 +115,13 @@ void initmission::initTasks() { #if OBSW_ADD_ACS_HANDLERS == 1 PeriodicTaskIF* acsTask = factory->createPeriodicTask( - "ACS_CTRL", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc); + "ACS_CTRL", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.4, missedDeadlineFunc); +#if OBSW_ADD_GPS == 1 result = acsTask->addComponent(objects::GPS_CONTROLLER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("GPS_CTRL", objects::GPS_CONTROLLER); } +#endif /* OBSW_ADD_GPS == 1 */ PeriodicTaskIF* sysTask = factory->createPeriodicTask( "SYS_TASK", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc); diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 47574f6e..ec964659 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -531,7 +531,6 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComI #if OBSW_DEBUG_ACS == 1 gyroL3gHandler->enablePeriodicPrintouts(true, 10); #endif - bool debugGps = false; #if OBSW_DEBUG_GPS == 1 debugGps = true; @@ -545,7 +544,6 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComI auto gpsHandler0 = new GPSHyperionLinuxController(objects::GPS_CONTROLLER, objects::NO_OBJECT, debugGps); gpsHandler0->setResetPinTriggerFunction(gps::triggerGpioResetPin, &resetArgsGnss0); - AcsBoardHelper acsBoardHelper = AcsBoardHelper( objects::MGM_0_LIS3_HANDLER, objects::MGM_1_RM3100_HANDLER, objects::MGM_2_LIS3_HANDLER, objects::MGM_3_RM3100_HANDLER, objects::GYRO_0_ADIS_HANDLER, objects::GYRO_1_L3G_HANDLER, diff --git a/linux/devices/GPSHyperionLinuxController.cpp b/linux/devices/GPSHyperionLinuxController.cpp index 42bc43a6..c8cf398f 100644 --- a/linux/devices/GPSHyperionLinuxController.cpp +++ b/linux/devices/GPSHyperionLinuxController.cpp @@ -26,7 +26,7 @@ GPSHyperionLinuxController::~GPSHyperionLinuxController() {} void GPSHyperionLinuxController::performControlOperation() { #ifdef FSFW_OSAL_LINUX - readGpsDataFromGpsd(); +// readGpsDataFromGpsd(); #endif } diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index cf5fccc8..11af022b 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -266,10 +266,10 @@ static const uint32_t LOGGING_RPT_ID = LOGGING_REQUEST_COUNTERS; static const uint32_t ADC_REPORT_SET_ID = REQUEST_ADC_REPORT; namespace recv_timeout { - // Erase memory can require up to 60 seconds for execution - static const uint32_t ERASE_MEMORY = 60000; - static const uint32_t UPDATE_STATUS_REPORT = 60000; -} +// Erase memory can require up to 60 seconds for execution +static const uint32_t ERASE_MEMORY = 60000; +static const uint32_t UPDATE_STATUS_REPORT = 60000; +} // namespace recv_timeout /** * @brief This class creates a space packet containing only the header data and the CRC. @@ -1245,7 +1245,6 @@ class DisableAutoTm : public SupvTcSpacePacket { */ class RequestLoggingData : public SupvTcSpacePacket { public: - enum class Sa : uint8_t { REQUEST_COUNTERS = 1, REQUEST_EVENT_BUFFERS = 2, @@ -1278,9 +1277,7 @@ class TmPacket : public SpacePacket { /** * @brief Returns the payload data length (data field length without CRC) */ - uint16_t getPayloadDataLength() { - return this->getPacketDataLength() - 1; - } + uint16_t getPayloadDataLength() { return this->getPacketDataLength() - 1; } ReturnValue_t checkCrc() { uint8_t* crcPtr = this->getPacketData() + this->getPayloadDataLength(); @@ -1294,6 +1291,257 @@ class TmPacket : public SpacePacket { } }; +class VerificationReport : public TmPacket { + public: + VerificationReport() : TmPacket() {} + + /** + * @brief Gets the APID of command which caused the transmission of this verification report. + */ + uint16_t getRefApid() { + uint16_t refApid = 0; + size_t size = 0; + uint8_t* refApidPtr = this->getPacketData(); + ReturnValue_t result = SerializeAdapter::deSerialize(&refApid, refApidPtr, &size, + SerializeIF::Endianness::BIG); + if (result != HasReturnvaluesIF::RETURN_OK) { + sif::debug << "ExecutionReport: Failed to deserialize reference APID field" << std::endl; + return result; + } + return refApid; + } + + uint16_t getStatusCode() { + uint16_t statusCode = 0; + size_t size = 0; + uint8_t* statusCodePtr = this->getPacketData() + OFFSET_STATUS_CODE; + ReturnValue_t result = SerializeAdapter::deSerialize(&statusCode, statusCodePtr, &size, + SerializeIF::Endianness::BIG); + if (result != HasReturnvaluesIF::RETURN_OK) { + sif::debug << "ExecutionReport: Failed to deserialize status code field" << std::endl; + return result; + } + return statusCode; + } + + virtual ReturnValue_t checkApid() { return HasReturnvaluesIF::RETURN_FAILED; } + + private: + static const uint8_t OFFSET_STATUS_CODE = 4; +}; + +class AcknowledgmentReport : public VerificationReport { + public: + AcknowledgmentReport() : VerificationReport() {} + + ReturnValue_t checkApid() { + uint16_t apid = this->getAPID(); + if (apid == APID_ACK_SUCCESS) { + return HasReturnvaluesIF::RETURN_OK; + } else if (apid == APID_ACK_FAILURE) { + printStatusInformation(); + return SupvReturnValuesIF::RECEIVED_ACK_FAILURE; + } else { + sif::warning << "AcknowledgmentReport::checkApid: Invalid apid: 0x" << std::hex << apid + << std::endl; + return SupvReturnValuesIF::INVALID_APID; + } + } + + void printStatusInformation() { + StatusCode statusCode = static_cast(getStatusCode()); + switch (statusCode) { + case StatusCode::OK: { + sif::warning << "Supervisor acknowledgment report status: Ok" << std::endl; + break; + } + case StatusCode::BAD_PARAM: { + sif::warning << "Supervisor acknowledgment report status: Bad param" << std::endl; + break; + } + case StatusCode::TIMEOUT: { + sif::warning << "Supervisor acknowledgment report status: Timeout" << std::endl; + break; + } + case StatusCode::RX_ERROR: { + sif::warning << "Supervisor acknowledgment report status: RX error" << std::endl; + break; + } + case StatusCode::TX_ERROR: { + sif::warning << "Supervisor acknowledgment report status: TX error" << std::endl; + break; + } + case StatusCode::HEADER_EMPTY: { + sif::warning << "Supervisor acknowledgment report status: Header empty" << std::endl; + break; + } + case StatusCode::DEFAULT_NAK: { + sif::warning << "Supervisor acknowledgment report status: Default code for nak" << + std::endl; + break; + } + case StatusCode::ROUTE_PACKET: { + sif::warning << "Supervisor acknowledgment report status: Route packet error" << std::endl; + break; + } + default: + sif::warning << "AcknowledgmentReport::printStatusInformation: Invalid status code: 0x" + << std::hex << static_cast(statusCode) << std::endl; + break; + } + } + + private: + enum class StatusCode : uint16_t { + OK = 0x0, + BAD_PARAM = 0x1, + TIMEOUT = 0x2, + RX_ERROR = 0x3, + TX_ERROR = 0x4, + HEADER_EMPTY = 0x5, + DEFAULT_NAK = 0x6, + ROUTE_PACKET = 0x7 + }; +}; + +class ExecutionReport : public VerificationReport { + public: + ExecutionReport() : VerificationReport() {} + + ReturnValue_t checkApid() { + uint16_t apid = this->getAPID(); + if (apid == APID_EXE_SUCCESS) { + return HasReturnvaluesIF::RETURN_OK; + } else if (apid == APID_EXE_FAILURE) { + printStatusInformation(); + return SupvReturnValuesIF::RECEIVED_EXE_FAILURE; + } else { + sif::warning << "ExecutionReport::checkApid: Invalid apid: 0x" << std::hex << apid + << std::endl; + return SupvReturnValuesIF::INVALID_APID; + } + } + + private: + enum class StatusCode : uint16_t { + OK = 0x0, + INIT_ERROR = 0x1, + BAD_PARAM = 0x2, + NOT_INITIALIZED = 0x3, + BAD_PERIPH_ID = 0x4, + TIMEOUT = 0x5, + RX_ERROR = 0x6, + TX_ERROR = 0x7, + BUF_EMPTY = 0x8, + BUF_FULL = 0x9, + NAK = 0xA, + ARB_LOST = 0xB, + BUSY = 0xC, + NOT_IMPLEMENTED = 0xD, + ALIGNEMENT_ERROR = 0xE, + PERIPH_ERR = 0xF, + FAILED_LATCH = 0x10, + GPIO_HIGH = 0x11, + GPIO_LOW = 0x12, + TEST_PASSED = 0x13, + TEST_FAILED = 0x14 + }; + + void printStatusInformation() { + StatusCode statusCode = static_cast(getStatusCode()); + switch (statusCode) { + case StatusCode::OK: { + sif::warning << "Supervisor execution report status: Ok" << std::endl; + break; + } + case StatusCode::INIT_ERROR: { + sif::warning << "Supervisor execution report status: Init error" << std::endl; + break; + } + case StatusCode::BAD_PARAM: { + sif::warning << "Supervisor execution report status: Bad param" << std::endl; + break; + } + case StatusCode::NOT_INITIALIZED: { + sif::warning << "Supervisor execution report status: Not initialized" << std::endl; + break; + } + case StatusCode::BAD_PERIPH_ID: { + sif::warning << "Supervisor execution report status: Bad periph ID" << std::endl; + break; + } + case StatusCode::TIMEOUT: { + sif::warning << "Supervisor execution report status: Timeout" << std::endl; + break; + } + case StatusCode::RX_ERROR: { + sif::warning << "Supervisor execution report status: RX error" << std::endl; + break; + } + case StatusCode::TX_ERROR: { + sif::warning << "Supervisor execution report status: TX error" << std::endl; + break; + } + case StatusCode::BUF_EMPTY: { + sif::warning << "Supervisor execution report status: Buf empty" << std::endl; + break; + } + case StatusCode::BUF_FULL: { + sif::warning << "Supervisor execution report status: Buf full" << std::endl; + break; + } + case StatusCode::NAK: { + sif::warning << "Supervisor execution report status: Nak, default error code" << std::endl; + break; + } + case StatusCode::ARB_LOST: { + sif::warning << "Supervisor execution report status: Arb lost" << std::endl; + break; + } + case StatusCode::BUSY: { + sif::warning << "Supervisor execution report status: Busy" << std::endl; + break; + } + case StatusCode::NOT_IMPLEMENTED: { + sif::warning << "Supervisor execution report status: Not implemented" << std::endl; + break; + } + case StatusCode::ALIGNEMENT_ERROR: { + sif::warning << "Supervisor execution report status: Alignment error" << std::endl; + break; + } + case StatusCode::PERIPH_ERR: { + sif::warning << "Supervisor execution report status: Periph error" << std::endl; + break; + } + case StatusCode::FAILED_LATCH: { + sif::warning << "Supervisor execution report status: Failed latch" << std::endl; + break; + } + case StatusCode::GPIO_HIGH: { + sif::warning << "Supervisor execution report status: GPIO high" << std::endl; + break; + } + case StatusCode::GPIO_LOW: { + sif::warning << "Supervisor execution report status: GPIO low" << std::endl; + break; + } + case StatusCode::TEST_PASSED: { + sif::warning << "Supervisor execution report status: Test passed" << std::endl; + break; + } + case StatusCode::TEST_FAILED: { + sif::warning << "Supervisor execution report status: Test failed" << std::endl; + break; + } + default: + sif::warning << "ExecutionReport::printStatusInformation: Invalid status code: 0x" + << std::hex << static_cast(statusCode) << std::endl; + break; + } + } +}; + /** * @brief This dataset stores the boot status report of the supervisor. */ @@ -1409,31 +1657,36 @@ class LoggingReport : public StaticLocalDataSet { lp_var_t(sid.objectId, PoolIds::TM_AVAILABLE_CNT, this); lp_var_t supervisorBoots = lp_var_t(sid.objectId, PoolIds::SUPERVISOR_BOOTS, this); - lp_var_t mpsocBoots = - lp_var_t(sid.objectId, PoolIds::MPSOC_BOOTS, this); + lp_var_t mpsocBoots = lp_var_t(sid.objectId, PoolIds::MPSOC_BOOTS, this); lp_var_t mpsocBootFailedAttempts = lp_var_t(sid.objectId, PoolIds::MPSOC_BOOT_FAILED_ATTEMPTS, this); - lp_var_t mpsocPowerup = - lp_var_t(sid.objectId, PoolIds::MPSOC_POWER_UP, this); - lp_var_t mpsocUpdates = - lp_var_t(sid.objectId, PoolIds::MPSOC_UPDATES, this); - lp_var_t lastRecvdTc = - lp_var_t(sid.objectId, PoolIds::LAST_RECVD_TC, this); + lp_var_t mpsocPowerup = lp_var_t(sid.objectId, PoolIds::MPSOC_POWER_UP, this); + lp_var_t mpsocUpdates = lp_var_t(sid.objectId, PoolIds::MPSOC_UPDATES, this); + lp_var_t lastRecvdTc = lp_var_t(sid.objectId, PoolIds::LAST_RECVD_TC, this); void printSet() { - sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0 << std::endl; + sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0 + << std::endl; + sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0 + << std::endl; sif::info << "LoggingReport: TC received count: " << this->tcReceivedCnt << std::endl; sif::info << "LoggingReport: TM available count: " << this->tmAvailableCnt << std::endl; sif::info << "LoggingReport: Supervisor boots: " << this->supervisorBoots << std::endl; sif::info << "LoggingReport: MPSoC boots: " << this->mpsocBoots << std::endl; - sif::info << "LoggingReport: MPSoC boot failed attempts: " << this->mpsocBootFailedAttempts << std::endl; + sif::info << "LoggingReport: MPSoC boot failed attempts: " << this->mpsocBootFailedAttempts + << std::endl; sif::info << "LoggingReport: MPSoC power up: " << this->mpsocPowerup << std::endl; sif::info << "LoggingReport: MPSoC updates: " << this->mpsocUpdates << std::endl; sif::info << "LoggingReport: Last received TC: " << this->lastRecvdTc << std::endl; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index d131b63b..3668a6cd 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -769,10 +769,24 @@ ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool } void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { + ReturnValue_t result = RETURN_OK; object_id_t objectId = eventMessage->getReporter(); + Event event = eventMessage->getEvent(); switch (objectId) { case objects::PLOC_SUPERVISOR_HELPER: { plocSupvHelperExecuting = false; + // After execution of update procedure, PLOC is in a state where it draws approx. 700 mA of + // current. To leave this state the shutdown MPSoC command must be sent here. + if (event == PlocSupvHelper::SUPV_UPDATE_FAILED || + event == PlocSupvHelper::SUPV_UPDATE_SUCCESSFUL) { + result = this->executeAction(supv::SHUTDOWN_MPSOC, NO_COMMANDER, nullptr, 0); + if (result != RETURN_OK) { + triggerEvent(SUPV_MPSOC_SHUWDOWN_BUILD_FAILED); + sif::warning << "PlocSupervisorHandler::handleEvent: Failed to build MPSoC shutdown " + "command" << std::endl; + return; + } + } break; } default: diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index cc9c6217..b2d0352a 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -71,6 +71,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const Event SUPV_CRC_FAILURE_EVENT = MAKE_EVENT(4, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor helper currently executing a command static const Event SUPV_HELPER_EXECUTING = MAKE_EVENT(5, severity::LOW); + //! [EXPORT] : [COMMENT] Failed to build the command to shutdown the MPSoC + static const Event SUPV_MPSOC_SHUWDOWN_BUILD_FAILED = MAKE_EVENT(5, severity::LOW); static const uint16_t APID_MASK = 0x7FF; static const uint16_t PACKET_SEQUENCE_COUNT_MASK = 0x3FFF; diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index c1f66d08..67f158a6 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -149,7 +149,8 @@ ReturnValue_t PlocSupvHelper::performUpdate() { return result; } #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 - ProgressPrinter progressPrinter("Supervisor update", update.length, ProgressPrinter::ONE_PERCENT); + ProgressPrinter progressPrinter("Supervisor update", update.length, + ProgressPrinter::HALF_PERCENT); #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ uint8_t tempData[supv::WriteMemory::CHUNK_MAX]; std::ifstream file(update.file, std::ifstream::binary); @@ -172,9 +173,9 @@ ReturnValue_t PlocSupvHelper::performUpdate() { file.read(reinterpret_cast(tempData), dataLength); if (!file) { sif::warning << "PlocSupvHelper::performUpdate: Read only " << file.gcount() << " of " - << dataLength << " bytes" << std::endl; + << dataLength << " bytes" << std::endl; sif::info << "PlocSupvHelper::performUpdate: Failed when trying to read byte " - << bytesWritten << std::endl; + << bytesWritten << std::endl; } remainingSize -= dataLength; } else { @@ -280,64 +281,48 @@ ReturnValue_t PlocSupvHelper::sendCommand(SpacePacket& packet) { ReturnValue_t PlocSupvHelper::handleAck() { ReturnValue_t result = RETURN_OK; - supv::TmPacket tmPacket; - result = handleTmReception(&tmPacket, supv::SIZE_ACK_REPORT); + supv::AcknowledgmentReport ackReport; + result = handleTmReception(&ackReport, supv::SIZE_ACK_REPORT); if (result != RETURN_OK) { triggerEvent(ACK_RECEPTION_FAILURE, result, static_cast(rememberApid)); sif::warning << "PlocSupvHelper::handleAck: Error in reception of acknowledgment report" << std::endl; return result; } - uint16_t apid = tmPacket.getAPID(); - if (apid != supv::APID_ACK_SUCCESS) { - handleAckApidFailure(apid); - return RETURN_FAILED; + result = ackReport.checkApid(); + if (result != RETURN_OK) { + if (result == SupvReturnValuesIF::RECEIVED_ACK_FAILURE) { + triggerEvent(SUPV_ACK_FAILURE_REPORT, static_cast(ackReport.getRefApid())); + } else if (result == SupvReturnValuesIF::INVALID_APID) { + triggerEvent(SUPV_ACK_INVALID_APID, static_cast(rememberApid)); + } + return result; } return RETURN_OK; } -void PlocSupvHelper::handleAckApidFailure(uint16_t apid) { - if (apid == supv::APID_ACK_FAILURE) { - triggerEvent(SUPV_ACK_FAILURE_REPORT, static_cast(internalState)); - sif::warning << "PlocSupvHelper::handleAckApidFailure: Received acknowledgement failure " - << "report" << std::endl; - } else { - triggerEvent(SUPV_ACK_INVALID_APID, apid, static_cast(internalState)); - sif::warning << "PlocSupvHelper::handleAckApidFailure: Expected acknowledgement report " - << "but received space packet with apid " << std::hex << apid << std::endl; - } -} - ReturnValue_t PlocSupvHelper::handleExe(uint32_t timeout) { ReturnValue_t result = RETURN_OK; - supv::TmPacket tmPacket; - result = handleTmReception(&tmPacket, supv::SIZE_EXE_REPORT, timeout); + supv::ExecutionReport exeReport; + result = handleTmReception(&exeReport, supv::SIZE_EXE_REPORT, timeout); if (result != RETURN_OK) { triggerEvent(EXE_RECEPTION_FAILURE, result, static_cast(rememberApid)); sif::warning << "PlocSupvHelper::handleExe: Error in reception of execution report" << std::endl; return result; } - uint16_t apid = tmPacket.getAPID(); - if (apid != supv::APID_EXE_SUCCESS) { - handleExeApidFailure(apid); - return RETURN_FAILED; + result = exeReport.checkApid(); + if (result != RETURN_OK) { + if (result == SupvReturnValuesIF::RECEIVED_EXE_FAILURE) { + triggerEvent(SUPV_EXE_FAILURE_REPORT, static_cast(exeReport.getRefApid())); + } else if (result == SupvReturnValuesIF::INVALID_APID) { + triggerEvent(SUPV_EXE_INVALID_APID, static_cast(rememberApid)); + } + return result; } return RETURN_OK; } -void PlocSupvHelper::handleExeApidFailure(uint16_t apid) { - if (apid == supv::APID_EXE_FAILURE) { - triggerEvent(SUPV_EXE_FAILURE_REPORT, static_cast(internalState)); - sif::warning << "PlocSupvHelper::handleExeApidFailure: Received execution failure " - << "report" << std::endl; - } else { - triggerEvent(SUPV_EXE_INVALID_APID, apid, static_cast(internalState)); - sif::warning << "PlocSupvHelper::handleExeApidFailure: Expected execution report " - << "but received space packet with apid " << std::hex << apid << std::endl; - } -} - ReturnValue_t PlocSupvHelper::handleTmReception(supv::TmPacket* tmPacket, size_t remainingBytes, uint32_t timeout) { ReturnValue_t result = RETURN_OK; @@ -404,7 +389,8 @@ ReturnValue_t PlocSupvHelper::calcImageCrc() { uint16_t remainder = CRC16_INIT; uint8_t input; #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 - ProgressPrinter progress("Supervisor update crc calculation", update.length); + ProgressPrinter progress("Supervisor update crc calculation", update.length, + ProgressPrinter::ONE_PERCENT); #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ uint32_t byteCount = 0; for (byteCount = 0; byteCount < update.length; byteCount++) { @@ -442,7 +428,7 @@ ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { if (result != RETURN_OK) { return result; } - result = handleExe(); + result = handleExe(CRC_EXECUTION_TIMEOUT); if (result != RETURN_OK) { return result; } diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index 6529e8ad..f8002baf 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -61,8 +61,8 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Supervisor received acknowledgment failure report //! P1: Internal state of supervisor helper static const Event SUPV_ACK_FAILURE_REPORT = MAKE_EVENT(11, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor received execution failure report - //! P1: Internal state of supervisor + //! [EXPORT] : [COMMENT] Execution report failure + //! P1: static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(12, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with other apid //! P1: Apid of received space packet @@ -129,6 +129,7 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha static const uint8_t NUM_EVENT_BUFFER_PACKETS = 25; static const size_t SIZE_EVENT_BUFFER_FULL_PACKET = 1024; static const size_t SIZE_EVENT_BUFFER_LAST_PACKET = 200; + static const uint32_t CRC_EXECUTION_TIMEOUT = 60000; struct Update { uint8_t memoryId; @@ -190,8 +191,6 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha ReturnValue_t receive(uint8_t* data, size_t* readBytes, size_t requestBytes); ReturnValue_t handleAck(); ReturnValue_t handleExe(uint32_t timeout = 1000); - void handleAckApidFailure(uint16_t apid); - void handleExeApidFailure(uint16_t apid); /** * @brief Handles reading of TM packets from the communication interface * diff --git a/linux/fsfwconfig/OBSWConfig.h.in b/linux/fsfwconfig/OBSWConfig.h.in index 23980eac..0903169b 100644 --- a/linux/fsfwconfig/OBSWConfig.h.in +++ b/linux/fsfwconfig/OBSWConfig.h.in @@ -41,8 +41,8 @@ debugging. */ #define OBSW_ADD_MGT 1 #define OBSW_ADD_BPX_BATTERY_HANDLER 1 #define OBSW_ADD_STAR_TRACKER @OBSW_ADD_STAR_TRACKER@ -#define OBSW_ADD_PLOC_SUPERVISOR 0 -#define OBSW_ADD_PLOC_MPSOC 0 +#define OBSW_ADD_PLOC_SUPERVISOR 1 +#define OBSW_ADD_PLOC_MPSOC 1 #define OBSW_ADD_SUN_SENSORS 1 #define OBSW_ADD_SUS_BOARD_ASS 1 #define OBSW_ADD_ACS_BOARD 1 @@ -53,6 +53,7 @@ debugging. */ #define OBSW_ADD_RAD_SENSORS 1 #define OBSW_ADD_PL_PCDU 1 #define OBSW_ADD_SYRLINKS 0 +#define OBSW_ADD_GPS 1 #define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT 0 #define OBSW_STAR_TRACKER_GROUND_CONFIG 1 diff --git a/mission/utility/ProgressPrinter.cpp b/mission/utility/ProgressPrinter.cpp index 3a7de549..9505d7b1 100644 --- a/mission/utility/ProgressPrinter.cpp +++ b/mission/utility/ProgressPrinter.cpp @@ -1,16 +1,17 @@ +#include #include "ProgressPrinter.h" - #include "fsfw/serviceinterface/ServiceInterfaceStream.h" -ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps, uint32_t percentageResolution) +ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps, float percentageResolution) : name(name), numSteps(numSteps), percentageResolution(percentageResolution) {} ProgressPrinter::~ProgressPrinter() {} void ProgressPrinter::print(uint32_t currentStep) { float progressInPercent = static_cast(currentStep) / static_cast(numSteps) * 100; - if (static_cast(progressInPercent) >= nextProgressPrint) { - sif::info << name << " progress: " << progressInPercent << " %" << std::endl; + if (progressInPercent >= nextProgressPrint) { + sif::info << name << " progress: " << std::setprecision(4) << progressInPercent << " %" + << std::endl; nextProgressPrint += percentageResolution; } } diff --git a/mission/utility/ProgressPrinter.h b/mission/utility/ProgressPrinter.h index 7185a655..302aaa28 100644 --- a/mission/utility/ProgressPrinter.h +++ b/mission/utility/ProgressPrinter.h @@ -11,7 +11,9 @@ class ProgressPrinter { public: - static const uint32_t ONE_PERCENT = 1; + static constexpr float HALF_PERCENT = 0.5; + static constexpr float ONE_PERCENT = 1; + static constexpr float FIVE_PERCENT = 5; /** * @brief Constructor @@ -21,7 +23,7 @@ class ProgressPrinter { * @param percentageResolution Distance between printed percentage steps. E.g. 5 means that * a printout will be generated after 0%, 5%, 10% etc. */ - ProgressPrinter(std::string name, uint32_t numSteps, uint32_t percentageResolution = FIVE_PERCENT); + ProgressPrinter(std::string name, uint32_t numSteps, float percentageResolution = FIVE_PERCENT); virtual ~ProgressPrinter(); /** @@ -32,12 +34,11 @@ class ProgressPrinter { void print(uint32_t step); private: - static constexpr uint32_t FIVE_PERCENT = 5; std::string name = ""; uint32_t numSteps = 0; - uint32_t nextProgressPrint = 0; - uint32_t percentageResolution = 0; + float nextProgressPrint = 0; + float percentageResolution = 0; }; #endif /* MISSION_UTILITY_PROGRESSPRINTER_H_ */ diff --git a/tmtc b/tmtc index ad53f3e9..af4e3ea5 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit ad53f3e9bb526bf030905d24781af57ae6ac5b01 +Subproject commit af4e3ea5747e381ac2dfc164223dbaa361257acd From 3e8429b34b5a72dcb61109a8067ef2d27a503f8f Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 25 Apr 2022 13:36:06 +0200 Subject: [PATCH 029/115] warning print when memory check command fails --- linux/devices/ploc/PlocSupvHelper.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index 67f158a6..ff0d5d5e 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -426,6 +426,9 @@ ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() { static_cast(updateStatusReport.getNominalSize()), supv::recv_timeout::UPDATE_STATUS_REPORT); if (result != RETURN_OK) { + sif::warning + << "PlocSupvHelper::handleCheckMemoryCommand: Failed to receive update status report" + << std::endl; return result; } result = handleExe(CRC_EXECUTION_TIMEOUT); From 42194abb4a402ced6a6948f72716bfe53a375f60 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 25 Apr 2022 13:36:30 +0200 Subject: [PATCH 030/115] commented in read function again --- linux/devices/GPSHyperionLinuxController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devices/GPSHyperionLinuxController.cpp b/linux/devices/GPSHyperionLinuxController.cpp index c8cf398f..42bc43a6 100644 --- a/linux/devices/GPSHyperionLinuxController.cpp +++ b/linux/devices/GPSHyperionLinuxController.cpp @@ -26,7 +26,7 @@ GPSHyperionLinuxController::~GPSHyperionLinuxController() {} void GPSHyperionLinuxController::performControlOperation() { #ifdef FSFW_OSAL_LINUX -// readGpsDataFromGpsd(); + readGpsDataFromGpsd(); #endif } From 8610e48b1922d6f62d2a2c03b5dd81b760e8f1b5 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 27 Apr 2022 16:08:17 +0200 Subject: [PATCH 031/115] countdown based timeout --- README.md | 10 +++++++++- bsp_q7s/core/InitMission.cpp | 2 +- fsfw | 2 +- .../PlocSupervisorDefinitions.h | 4 ++-- linux/devices/ploc/PlocSupervisorHandler.cpp | 20 +++++++++++++++++-- linux/devices/ploc/PlocSupervisorHandler.h | 12 +++++++++++ mission/tmtc/CCSDSHandler.cpp | 4 ++-- mission/tmtc/CCSDSHandler.h | 6 +++--- 8 files changed, 48 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7f9e9d72..3200dab1 100644 --- a/README.md +++ b/README.md @@ -1197,7 +1197,7 @@ in the same way. # Coding Style * the formatting is based on the clang-format tools -## Setting up eclipse auto-fromatter with clang-format +## Setting auto-fromatter with clang-format in Xilinx SDK 1. Help → Install New Software → Add 2. In location insert the link http://www.cppstyle.com/luna 3. The software package CppStyle should now be available for installation @@ -1206,3 +1206,11 @@ in the same way. 6. Insert the path to the clang-format executable 7. Under C/C++ → Code Style → Formatter, change the formatter to CppStyle (clang-format) 8. Code can now be formatted with the clang tool by using the key combination Ctrl + Shift + f + +## Setting up auto-fromatter with clang-format in eclipse +1. Help → Eclipse market place → Search for "Cppstyle" and install +2. On windows download the clang-formatting tools from https://llvm.org/builds/. On linux clang-format can be installed with the package manager. +3. Navigate to Preferences → C/C++ → CppStyle +4. Insert the path to the clang-format executable +5. Under C/C++ → Code Style → Formatter, change the formatter to CppStyle (clang-format) +6. Code can now be formatted with the clang tool by using the key combination Ctrl + Shift + f diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index 919e9fbd..2cd6486e 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -173,7 +173,7 @@ void initmission::initTasks() { #if OBSW_ADD_PLOC_SUPERVISOR == 1 PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( - "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 1.0, missedDeadlineFunc); + "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE * 8, 1.0, missedDeadlineFunc); result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); diff --git a/fsfw b/fsfw index 9f7b9be8..900ef5b9 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 9f7b9be800402215e97759eb35d4c40a484d1f68 +Subproject commit 900ef5b9124063b5eec88de19d851006b2e1e601 diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 11af022b..a0592ce3 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -268,7 +268,7 @@ static const uint32_t ADC_REPORT_SET_ID = REQUEST_ADC_REPORT; namespace recv_timeout { // Erase memory can require up to 60 seconds for execution static const uint32_t ERASE_MEMORY = 60000; -static const uint32_t UPDATE_STATUS_REPORT = 60000; +static const uint32_t UPDATE_STATUS_REPORT = 70000; } // namespace recv_timeout /** @@ -1163,7 +1163,7 @@ class WriteMemory : public SupvTcSpacePacket { SerializeIF::Endianness::BIG); std::memcpy(dataFieldPtr, updateData, length); if (length % 2 != 0) { - this->setPacketDataLength(this->getFullSize() + 1); + this->setPacketDataLength(length + sizeof(CCSDSPrimaryHeader) + CRC_SIZE - 1); // The data field must be two bytes aligned. Thus, in case the number of bytes to write is odd // a value of zero is added here *(dataFieldPtr + length + 1) = 0; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 3668a6cd..35a11124 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -402,7 +402,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); - this->insertInReplyMap(EXE_REPORT, 50, nullptr, SIZE_EXE_REPORT); + this->insertInReplyMap(EXE_REPORT, 0, nullptr, SIZE_EXE_REPORT, false, &executionTimeout); this->insertInReplyMap(HK_REPORT, 3, &hkset, SIZE_HK_REPORT); this->insertInReplyMap(BOOT_STATUS_REPORT, 3, &bootStatusReport, SIZE_BOOT_STATUS_REPORT); this->insertInReplyMap(LATCHUP_REPORT, 3, &latchupStatusReport, SIZE_LATCHUP_STATUS_REPORT); @@ -546,6 +546,8 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite << " not in replyMap" << std::endl; } + setExecutionTimeout(command->first); + return RETURN_OK; } @@ -795,6 +797,19 @@ void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { } } +void PlocSupervisorHandler::setExecutionTimeout(DeviceCommandId_t command) { + using namespace supv; + switch(command) { + case FIRST_MRAM_DUMP: + case CONSECUTIVE_MRAM_DUMP: + executionTimeout.setTimeout(MRAM_DUMP_EXECUTION_TIMEOUT); + break; + default: + executionTimeout.setTimeout(EXECUTION_DEFAULT_TIMEOUT); + break; + } +} + ReturnValue_t PlocSupervisorHandler::verifyPacket(const uint8_t* start, size_t foundLen) { uint16_t receivedCrc = *(start + foundLen - 2) << 8 | *(start + foundLen - 1); uint16_t recalculatedCrc = CRC::crc16ccitt(start, foundLen - 2); @@ -1237,7 +1252,8 @@ size_t PlocSupervisorHandler::getNextReplyLength(DeviceCommandId_t commandId) { DeviceReplyIter iter = deviceReplyMap.find(nextReplyId); if (iter != deviceReplyMap.end()) { - if (iter->second.delayCycles == 0) { + if ((iter->second.delayCycles == 0 && iter->second.countdown == nullptr) || + (not iter->second.active && iter->second.countdown != nullptr)) { /* Reply inactive */ return replyLen; } diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index b2d0352a..19ccfa63 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -8,6 +8,7 @@ #include "fsfw_hal/linux/gpio/Gpio.h" #include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h" #include "fsfw_hal/linux/uart/UartComIF.h" +#include "fsfw/timemanager/Countdown.h" #include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" #include "linux/devices/devicedefinitions/SupvReturnValuesIF.h" #include "PlocSupvHelper.h" @@ -78,6 +79,10 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint16_t PACKET_SEQUENCE_COUNT_MASK = 0x3FFF; static const uint8_t EXE_STATUS_OFFSET = 10; static const uint8_t SIZE_NULL_TERMINATOR = 1; + // 5 s + static const uint32_t EXECUTION_DEFAULT_TIMEOUT = 5000; + // 30 s + static const uint32_t MRAM_DUMP_EXECUTION_TIMEOUT = 30000; uint8_t commandBuffer[supv::MAX_COMMAND_SIZE]; @@ -128,6 +133,13 @@ class PlocSupervisorHandler : public DeviceHandlerBase { // Supervisor helper class currently executing a command bool plocSupvHelperExecuting = false; + Countdown executionTimeout = Countdown(EXECUTION_DEFAULT_TIMEOUT, false); + + /** + * @brief Adjusts the timeout of the execution report dependent on command + */ + void setExecutionTimeout(DeviceCommandId_t command); + /** * @brief Handles event messages received from the supervisor helper */ diff --git a/mission/tmtc/CCSDSHandler.cpp b/mission/tmtc/CCSDSHandler.cpp index a42a798a..0c49f6af 100644 --- a/mission/tmtc/CCSDSHandler.cpp +++ b/mission/tmtc/CCSDSHandler.cpp @@ -22,7 +22,7 @@ CCSDSHandler::CCSDSHandler(object_id_t objectId, object_id_t ptmeId, object_id_t gpioIF(gpioIF), enTxClock(enTxClock), enTxData(enTxData), - TRANSMITTER_TIMEOUT(transmitterTimeout) { + transmitterTimeout(transmitterTimeout) { commandQueue = QueueFactory::instance()->createMessageQueue(QUEUE_SIZE); auto mqArgs = MqArgs(objectId, static_cast(this)); eventQueue = @@ -312,7 +312,7 @@ void CCSDSHandler::enableTransmit() { // Transmitter already enabled return; } - transmitterCountdown.setTimeout(TRANSMITTER_TIMEOUT); + transmitterCountdown.setTimeout(transmitterTimeout); #ifndef TE0720_1CFA gpioIF->pullHigh(enTxClock); gpioIF->pullHigh(enTxData); diff --git a/mission/tmtc/CCSDSHandler.h b/mission/tmtc/CCSDSHandler.h index 1c4fde09..d4cf1da4 100644 --- a/mission/tmtc/CCSDSHandler.h +++ b/mission/tmtc/CCSDSHandler.h @@ -133,9 +133,9 @@ class CCSDSHandler : public SystemObject, gpioId_t enTxClock = gpio::NO_GPIO; gpioId_t enTxData = gpio::NO_GPIO; - // syrlinks must not be transmitting more than 15 minutes (according to datasheet) - // Value can be configured via CTOR argument to allow test setups - const uint32_t TRANSMITTER_TIMEOUT = 900000; // 900000 ms = 15 min + // Syrlinks must not be transmitting more than 15 minutes (according to datasheet) + // Value initialized by constructor argument + const uint32_t transmitterTimeout = 0; // Countdown to disable transmitter after 15 minutes Countdown transmitterCountdown; From 20a2aa73ae02e2e73ec657670f620ae11be0ebb5 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 27 Apr 2022 16:09:07 +0200 Subject: [PATCH 032/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index af4e3ea5..5de92a36 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit af4e3ea5747e381ac2dfc164223dbaa361257acd +Subproject commit 5de92a366a7e7b63c80b536ec345faa8c3a58e2f From 7543a92dd92a80c026b1ce1b9dfa7f04b3cba200 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Wed, 27 Apr 2022 16:44:03 +0200 Subject: [PATCH 033/115] added test code --- bsp_q7s/core/CoreController.cpp | 10 +- bsp_q7s/core/ObjectFactory.cpp | 2 +- generators/bsp_q7s_returnvalues.csv | 1098 ++++++++--------- generators/events/translateEvents.cpp | 2 +- generators/objects/translateObjects.cpp | 2 +- linux/fsfwconfig/events/translateEvents.cpp | 2 +- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- mission/tmtc/VirtualChannel.cpp | 7 + mission/tmtc/VirtualChannel.h | 2 +- tmtc | 2 +- 10 files changed, 568 insertions(+), 561 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 208999c2..0d166600 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1708,11 +1708,11 @@ ReturnValue_t CoreController::timeFileHandler() { } std::string fileName = currMntPrefix + TIME_FILE; std::ofstream timeFile(fileName); - if (not timeFile.good()) { - sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) - << std::endl; - return RETURN_FAILED; - } +// if (not timeFile.good()) { +// sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) +// << std::endl; +// return RETURN_FAILED; +// } timeFile << "UNIX SECONDS: " << currentTime.tv_sec << std::endl; } return RETURN_OK; diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index ecc88ede..d830fa77 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -152,7 +152,7 @@ void ObjectFactory::produce(void* args) { createSolarArrayDeploymentComponents(); createPlPcduComponents(gpioComIF, spiComIF, pwrSwitcher); #if OBSW_ADD_SYRLINKS == 1 - createSyrlinksComponents(); + createSyrlinksComponents(pwrSwitcher); #endif /* OBSW_ADD_SYRLINKS == 1 */ createRtdComponents(q7s::SPI_DEFAULT_DEV, gpioComIF, pwrSwitcher); createPayloadComponents(gpioComIF); diff --git a/generators/bsp_q7s_returnvalues.csv b/generators/bsp_q7s_returnvalues.csv index a0f1562c..1ec3f5c2 100644 --- a/generators/bsp_q7s_returnvalues.csv +++ b/generators/bsp_q7s_returnvalues.csv @@ -1,551 +1,551 @@ 0x0;OK;System-wide code for ok.;RETURN_OK;HasReturnvaluesIF.h;HasReturnvaluesIF 0x1;Failed;Unspecified system-wide code for failed.;RETURN_FAILED;HasReturnvaluesIF.h;HasReturnvaluesIF -0x5f00;GOMS_PacketTooLong;;0;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f01;GOMS_InvalidTableId;;1;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f02;GOMS_InvalidAddress;;2;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f03;GOMS_InvalidParamSize;;3;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f04;GOMS_InvalidPayloadSize;;4;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x5f05;GOMS_UnknownReplyId;;5;mission\devices\GomspaceDeviceHandler.h;GOM_SPACE_HANDLER -0x52a1;HEATER_CommandNotSupported;;0xA1;mission\devices\HeaterHandler.h;HEATER_HANDLER -0x52a2;HEATER_InitFailed;;0xA2;mission\devices\HeaterHandler.h;HEATER_HANDLER -0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission\devices\HeaterHandler.h;HEATER_HANDLER -0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission\devices\HeaterHandler.h;HEATER_HANDLER -0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission\devices\HeaterHandler.h;HEATER_HANDLER -0x54a0;IMTQ_InvalidCommandCode;;0xA0;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a1;IMTQ_ParameterMissing;;0xA1;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a2;IMTQ_ParameterInvalid;;0xA2;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a3;IMTQ_CcUnavailable;;0xA3;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a4;IMTQ_InternalProcessingError;;0xA4;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a5;IMTQ_RejectedWithoutReason;;0xA5;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a6;IMTQ_CmdErrUnknown;;0xA6;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x54a7;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.;0xA7;mission\devices\IMTQHandler.h;IMTQ_HANDLER -0x55b0;RWHA_SpiWriteFailure;;0xB0;mission\devices\RwHandler.h;RW_HANDLER -0x55b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission\devices\RwHandler.h;RW_HANDLER -0x55b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;mission\devices\RwHandler.h;RW_HANDLER -0x55b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;mission\devices\RwHandler.h;RW_HANDLER -0x55b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;mission\devices\RwHandler.h;RW_HANDLER -0x55b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;mission\devices\RwHandler.h;RW_HANDLER -0x55b6;RWHA_NoStartMarker;Expected a start marker as first byte;0xB6;mission\devices\RwHandler.h;RW_HANDLER -0x55a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;mission\devices\RwHandler.h;RW_HANDLER -0x55a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;mission\devices\RwHandler.h;RW_HANDLER -0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission\devices\RwHandler.h;RW_HANDLER -0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission\devices\RwHandler.h;RW_HANDLER -0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission\devices\RwHandler.h;RW_HANDLER -0x68a0;SADPL_CommandNotSupported;;0xA0;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission\devices\SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER -0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission\devices\SusHandler.h;SUS_HANDLER -0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission\devices\SusHandler.h;SUS_HANDLER -0x53a0;SYRLINKS_CrcFailure;;0xA0;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a3;SYRLINKS_BadParameterValueAck;;0xA3;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a4;SYRLINKS_BadEndOfFrameAck;;0xA4;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a5;SYRLINKS_UnknownCommandIdAck;;0xA5;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission\devices\SyrlinksHkHandler.h;SYRLINKS_HANDLER -0x65a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission\memory\NVMParameterBase.h;NVM_PARAM_BASE -0x62a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission\tmtc\CCSDSHandler.h;CCSDS_HANDLER -0x4601; HGIO_UnknownGpioId;;1;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO -0x4602; HGIO_DriveGpioFailure;;2;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO -0x4603; HGIO_GpioTypeFailure;;3;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO -0x4604; HGIO_GpioInvalidInstance;;4;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO -0x4605; HGIO_GpioDuplicateDetected;;5;fsfw\hal\src\fsfw_hal\linux\gpio\LinuxLibgpioIF.h;HAL_GPIO -0x4300; HSPI_HalTimeoutRetval;;0;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI -0x4301; HSPI_HalBusyRetval;;1;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI -0x4302; HSPI_HalErrorRetval;;2;fsfw\hal\src\fsfw_hal\stm32h7\spi\spiDefinitions.h;HAL_SPI -0x4401; HURT_UartReadFailure;;1;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART -0x4402; HURT_UartReadSizeMissmatch;;2;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART -0x4403; HURT_UartRxBufferTooSmall;;3;fsfw\hal\src\fsfw_hal\linux\uart\UartComIF.h;HAL_UART -0x4200; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x4201; 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;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x4202; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x4203; UXOS_CommandError;Command execution failed;3;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x4204; UXOS_NoCommandLoadedOrPending;;4;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x4206; UXOS_PcloseCallError;;6;fsfw\hal\src\fsfw_hal\linux\CommandExecutor.h;LINUX_OSAL -0x3101; CF_ObjectHasNoFunctions;;1;fsfw\src\fsfw\action\CommandsActionsIF.h;COMMANDS_ACTIONS_IF -0x3102; CF_AlreadyCommanding;;2;fsfw\src\fsfw\action\CommandsActionsIF.h;COMMANDS_ACTIONS_IF -0x3201; HF_IsBusy;;1;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF -0x3202; HF_InvalidParameters;;2;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF -0x3203; HF_ExecutionFinished;;3;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF -0x3204; HF_InvalidActionId;;4;fsfw\src\fsfw\action\HasActionsIF.h;HAS_ACTIONS_IF -0x3501; CFDP_InvalidTlvType;;1;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3502; CFDP_InvalidDirectiveFields;;2;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3505; CFDP_MetadataCantParseOptions;;5;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw\src\fsfw\cfdp\definitions.h;CFDP -0x1101; AL_Full;;0x01;fsfw\src\fsfw\container\ArrayList.h;ARRAY_LIST -0x1801; FF_Full;;1;fsfw\src\fsfw\container\FIFOBase.h;FIFO_CLASS -0x1802; FF_Empty;;2;fsfw\src\fsfw\container\FIFOBase.h;FIFO_CLASS -0x1501; FM_KeyAlreadyExists;;0x01;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP -0x1502; FM_MapFull;;0x02;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP -0x1503; FM_KeyDoesNotExist;;0x03;fsfw\src\fsfw\container\FixedMap.h;FIXED_MAP -0x1601; FMM_MapFull;;0x01;fsfw\src\fsfw\container\FixedOrderedMultimap.h;FIXED_MULTIMAP -0x1602; FMM_KeyDoesNotExist;;0x02;fsfw\src\fsfw\container\FixedOrderedMultimap.h;FIXED_MULTIMAP -0x37a1; SGP4_InvalidEccentricity;;0xA1;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a2; SGP4_InvalidMeanMotion;;0xA2;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a3; SGP4_InvalidPerturbationElements;;0xA3;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a4; SGP4_InvalidSemiLatusRectum;;0xA4;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a5; SGP4_InvalidEpochElements;;0xA5;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37a6; SGP4_SatelliteHasDecayed;;0xA6;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37b1; SGP4_TleTooOld;;0xB1;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x37b2; SGP4_TleNotInitialized;;0xB2;fsfw\src\fsfw\coordinates\Sgp4Propagator.h;SGP4PROPAGATOR_CLASS -0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf0; CCS_NsPositiveW;;0xF0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf1; CCS_NsNegativeW;;0xF1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf2; CCS_NsLockout;;0xF2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf3; CCS_FarmInLockout;;0xF3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bf4; CCS_FarmInWait;;0xF4;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be0; CCS_WrongSymbol;;0xE0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be1; CCS_DoubleStart;;0xE1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be3; CCS_EndWithoutStart;;0xE3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be4; CCS_TooLarge;;0xE4;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be5; CCS_TooShort;;0xE5;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be6; CCS_WrongTfVersion;;0xE6;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be8; CCS_NoValidFrameType;;0xE8;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2be9; CCS_CrcFailed;;0xE9;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bea; CCS_VcNotFound;;0xEA;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2beb; CCS_ForwardingFailed;;0xEB;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bec; CCS_ContentTooLarge;;0xEC;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bed; CCS_ResidualData;;0xED;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bee; CCS_DataCorrupted;;0xEE;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw\src\fsfw\datalinklayer\CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF -0x801; DPS_InvalidParameterDefinition;;1;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x802; DPS_SetWasAlreadyRead;;2;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x803; DPS_CommitingWithoutReading;;3;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x804; DPS_DataSetUninitialised;;4;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x805; DPS_DataSetFull;;5;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x806; DPS_PoolVarNull;;6;fsfw\src\fsfw\datapool\DataSetIF.h;DATA_SET_CLASS -0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw\src\fsfw\datapool\PoolVariableIF.h;POOL_VARIABLE_IF -0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw\src\fsfw\datapool\PoolVariableIF.h;POOL_VARIABLE_IF -0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d01; HKM_WrongHkPacketType;;1;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d04; HKM_PoolobjectNotFound;;4;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3d05; HKM_DatasetNotFound;;5;fsfw\src\fsfw\datapoollocal\LocalDataPoolManager.h;HOUSEKEEPING_MANAGER -0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw\src\fsfw\datapoollocal\localPoolDefinitions.h;LOCAL_POOL_OWNER_IF -0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw\src\fsfw\datapoollocal\localPoolDefinitions.h;LOCAL_POOL_OWNER_IF -0x1201; AB_NeedSecondStep;;0x01;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x1202; AB_NeedToReconfigure;;0x02;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x1203; AB_ModeFallback;;0x03;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x1204; AB_ChildNotCommandable;;0x04;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x1205; AB_NeedToChangeHealth;;0x05;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw\src\fsfw\devicehandlers\AssemblyBase.h;ASSEMBLY_BASE -0x3301; DC_NoReplyReceived;;0x01;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3302; DC_ProtocolError;;0x02;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3303; DC_Nullpointer;;0x03;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3304; DC_InvalidCookieType;;0x04;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3305; DC_NotActive;;0x05;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3306; DC_TooMuchData;;0x06;fsfw\src\fsfw\devicehandlers\DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF -0x3a0; DHB_InvalidChannel;;0xA0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b0; DHB_AperiodicReply;;0xB0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b1; DHB_IgnoreReplyData;;0xB1;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3b2; DHB_IgnoreFullPacket;;0xB2;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3c0; DHB_NothingToSend;;0xC0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3c2; DHB_CommandMapError;;0xC2;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3d0; DHB_NoSwitch;;0xD0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3e0; DHB_ChildTimeout;;0xE0;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x3e1; DHB_SwitchFailed;;0xE1;fsfw\src\fsfw\devicehandlers\DeviceHandlerBase.h;DEVICE_HANDLER_BASE -0x26a0; DHI_NoCommandData;;0xA0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a1; DHI_CommandNotSupported;;0xA1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a2; DHI_CommandAlreadySent;;0xA2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a3; DHI_CommandWasNotSent;;0xA3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a4; DHI_CantSwitchAddress;;0xA4;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a5; DHI_WrongModeForCommand;;0xA5;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a6; DHI_Timeout;;0xA6;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a7; DHI_Busy;;0xA7;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a8; DHI_NoReplyExpected;;0xA8;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26a9; DHI_NonOpTemperature;;0xA9;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26aa; DHI_CommandNotImplemented;;0xAA;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b0; DHI_ChecksumError;;0xB0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b1; DHI_LengthMissmatch;;0xB1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b2; DHI_InvalidData;;0xB2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26b3; DHI_ProtocolError;;0xB3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c0; DHI_DeviceDidNotExecute;;0xC0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c1; DHI_DeviceReportedError;;0xC1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c2; DHI_UnknownDeviceReply;;0xC2;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26c3; DHI_DeviceReplyInvalid;;0xC3;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26d0; DHI_InvalidCommandParameter;;0xD0;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x26d1; DHI_InvalidNumberOrLengthOfParameters;;0xD1;fsfw\src\fsfw\devicehandlers\DeviceHandlerIF.h;DEVICE_HANDLER_IF -0x2401; EV_ListenerNotFound;;1;fsfw\src\fsfw\events\EventManagerIF.h;EVENT_MANAGER_IF -0x2500; FDI_YourFault;;0;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x2501; FDI_MyFault;;1;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x2502; FDI_ConfirmLater;;2;fsfw\src\fsfw\fdir\ConfirmsFailuresIF.h;HANDLES_FAILURES_IF -0x2301; MT_TooDetailedRequest;;1;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS -0x2302; MT_TooGeneralRequest;;2;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS -0x2303; MT_NoMatch;;3;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS -0x2304; MT_Full;;4;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS -0x2305; MT_NewNodeCreated;;5;fsfw\src\fsfw\globalfunctions\matching\MatchTree.h;MATCH_TREE_CLASS -0x2e01; ASC_TooLongForTargetType;;1;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER -0x2e02; ASC_InvalidCharacters;;2;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER -0x2e03; ASC_BufferTooSmall;;0x3;fsfw\src\fsfw\globalfunctions\AsciiConverter.h;ASCII_CONVERTER -0x3e01; DLEE_StreamTooShort;;0x01;fsfw\src\fsfw\globalfunctions\DleEncoder.h;DLE_ENCODER -0x3e02; DLEE_DecodingError;;0x02;fsfw\src\fsfw\globalfunctions\DleEncoder.h;DLE_ENCODER -0x1701; HHI_ObjectNotHealthy;;1;fsfw\src\fsfw\health\HasHealthIF.h;HAS_HEALTH_IF -0x1702; HHI_InvalidHealthState;;2;fsfw\src\fsfw\health\HasHealthIF.h;HAS_HEALTH_IF -0xf01; CM_UnknownCommand;;1;fsfw\src\fsfw\ipc\CommandMessageIF.h;COMMAND_MESSAGE -0x3901; MQI_Empty;;1;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3902; MQI_Full;No space left for more messages;2;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw\src\fsfw\ipc\MessageQueueIF.h;MESSAGE_QUEUE_IF -0x3801; MUX_NotEnoughResources;;1;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3802; MUX_InsufficientMemory;;2;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3803; MUX_NoPrivilege;;3;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3804; MUX_WrongAttributeSetting;;4;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3805; MUX_MutexAlreadyLocked;;5;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3806; MUX_MutexNotFound;;6;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3807; MUX_MutexMaxLocks;;7;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x380a; MUX_MutexTimeout;;10;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x380b; MUX_MutexInvalidId;;11;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw\src\fsfw\ipc\MutexIF.h;MUTEX_IF -0x4100; FILS_GenericFileError;;0;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4101; FILS_IsBusy;;1;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4102; FILS_InvalidParameters;;2;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4105; FILS_FileDoesNotExist;;5;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4106; FILS_FileAlreadyExists;;6;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4107; FILS_FileLocked;;7;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x410a; FILS_DirectoryDoesNotExist;;10;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x410b; FILS_DirectoryAlreadyExists;;11;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x410c; FILS_DirectoryNotEmpty;;12;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x410f; FILS_SequencePacketMissingWrite;;15;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x4110; FILS_SequencePacketMissingRead;;16;fsfw\src\fsfw\memory\HasFileSystemIF.h;FILE_SYSTEM -0x601; PP_DoItMyself;;1;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x602; PP_PointsToVariable;;2;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x603; PP_PointsToMemory;;3;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x604; PP_ActivityCompleted;;4;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x605; PP_PointsToVectorUint8;;5;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x606; PP_PointsToVectorUint16;;6;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x607; PP_PointsToVectorUint32;;7;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x608; PP_PointsToVectorFloat;;8;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6a0; PP_DumpNotSupported;;0xA0;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6e0; PP_InvalidSize;;0xE0;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6e1; PP_InvalidAddress;;0xE1;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6e2; PP_InvalidContent;;0xE2;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6e3; PP_UnalignedAccess;;0xE3;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x6e4; PP_WriteProtected;;0xE4;fsfw\src\fsfw\memory\HasMemoryIF.h;HAS_MEMORY_IF -0x13e0; MH_UnknownCmd;;0xE0;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER -0x13e1; MH_InvalidAddress;;0xE1;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER -0x13e2; MH_InvalidSize;;0xE2;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER -0x13e3; MH_StateMismatch;;0xE3;fsfw\src\fsfw\memory\MemoryHelper.h;MEMORY_HELPER -0xe01; HM_InvalidMode;;0x01;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF -0xe02; HM_TransNotAllowed;;0x02;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF -0xe03; HM_InTransition;;0x03;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF -0xe04; HM_InvalidSubmode;;0x04;fsfw\src\fsfw\modes\HasModesIF.h;HAS_MODES_IF -0x3001; LIM_Unchecked;;1;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3002; LIM_Invalid;;2;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3003; LIM_Unselected;;3;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3004; LIM_BelowLowLimit;;4;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3005; LIM_AboveHighLimit;;5;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3006; LIM_UnexpectedValue;;6;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x3007; LIM_OutOfRange;;7;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30a0; LIM_FirstSample;;0xA0;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30e0; LIM_InvalidSize;;0xE0;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30e1; LIM_WrongType;;0xE1;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30e2; LIM_WrongPid;;0xE2;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30e3; LIM_WrongLimitId;;0xE3;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x30ee; LIM_MonitorNotFound;;0xEE;fsfw\src\fsfw\monitoring\MonitoringIF.h;LIMITS_IF -0x1a01; TRC_NotEnoughSensors;;1;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a02; TRC_LowestValueOol;;2;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a03; TRC_HighestValueOol;;3;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a04; TRC_BothValuesOol;;4;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x1a05; TRC_DuplexOol;;5;fsfw\src\fsfw\monitoring\TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK -0x201; OM_InsertionFailed;;1;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF -0x202; OM_NotFound;;2;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF -0x203; OM_ChildInitFailed;;3;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF -0x204; OM_InternalErrReporterUninit;;4;fsfw\src\fsfw\objectmanager\ObjectManagerIF.h;OBJECT_MANAGER_IF -0x200; OM_ConnBroken;;0;fsfw\src\fsfw\osal\common\TcpTmTcServer.h;OBJECT_MANAGER_IF -0x2901; IEC_NoConfigurationTable;;0x01;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2902; IEC_NoCpuTable;;0x02;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2903; IEC_InvalidWorkspaceAddress;;0x03;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2904; IEC_TooLittleWorkspace;;0x04;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2905; IEC_WorkspaceAllocation;;0x05;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2906; IEC_InterruptStackTooSmall;;0x06;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2907; IEC_ThreadExitted;;0x07;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2908; IEC_InconsistentMpInformation;;0x08;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2909; IEC_InvalidNode;;0x09;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290a; IEC_NoMpci;;0x0a;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290b; IEC_BadPacket;;0x0b;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290c; IEC_OutOfPackets;;0x0c;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290d; IEC_OutOfGlobalObjects;;0x0d;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290e; IEC_OutOfProxies;;0x0e;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x290f; IEC_InvalidGlobalId;;0x0f;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2910; IEC_BadStackHook;;0x10;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2911; IEC_BadAttributes;;0x11;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2912; IEC_ImplementationKeyCreateInconsistency;;0x12;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2913; IEC_ImplementationBlockingOperationCancel;;0x13;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2914; IEC_MutexObtainFromBadState;;0x14;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2915; IEC_UnlimitedAndMaximumIs0;;0x15;fsfw\src\fsfw\osal\InternalErrorCodes.h;INTERNAL_ERROR_CODES -0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF -0x2d02; HPA_InvalidDomainId;;0x02;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF -0x2d03; HPA_InvalidValue;;0x03;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF -0x2d05; HPA_ReadOnly;;0x05;fsfw\src\fsfw\parameters\HasParametersIF.h;HAS_PARAMETERS_IF -0x2c01; PAW_UnknownDatatype;;0x01;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c03; PAW_Readonly;;0x03;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c04; PAW_TooBig;;0x04;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c05; PAW_SourceNotSet;;0x05;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c06; PAW_OutOfBounds;;0x06;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c07; PAW_NotSet;;0x07;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw\src\fsfw\parameters\ParameterWrapper.h;PARAMETER_WRAPPER -0x2f01; POS_InPowerTransition;;1;fsfw\src\fsfw\power\PowerSwitcher.h;POWER_SWITCHER -0x2f02; POS_SwitchStateMismatch;;2;fsfw\src\fsfw\power\PowerSwitcher.h;POWER_SWITCHER -0x501; PS_SwitchOn;;1;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF -0x500; PS_SwitchOff;;0;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF -0x502; PS_SwitchTimeout;;2;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF -0x503; PS_FuseOn;;3;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF -0x504; PS_FuseOff;;4;fsfw\src\fsfw\power\PowerSwitchIF.h;POWER_SWITCH_IF -0x4e1; RMP_CommandNoDescriptorsAvailable;;0xE1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e2; RMP_CommandBufferFull;;0xE2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e3; RMP_CommandChannelOutOfRange;;0xE3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e6; RMP_CommandChannelDeactivated;;0xE6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e7; RMP_CommandPortOutOfRange;;0xE7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e8; RMP_CommandPortInUse;;0xE8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4e9; RMP_CommandNoChannel;;0xE9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4ea; RMP_NoHwCrc;;0xEA;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4d0; RMP_ReplyNoReply;;0xD0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4d1; RMP_ReplyNotSent;;0xD1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4d2; RMP_ReplyNotYetSent;;0xD2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4d3; RMP_ReplyMissmatch;;0xD3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4d4; RMP_ReplyTimeout;;0xD4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4c0; RMP_ReplyInterfaceBusy;;0xC0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4c1; RMP_ReplyTransmissionError;;0xC1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4c2; RMP_ReplyInvalidData;;0xC2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4c3; RMP_ReplyNotSupported;;0xC3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f0; RMP_LinkDown;;0xF0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f1; RMP_SpwCredit;;0xF1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f2; RMP_SpwEscape;;0xF2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f3; RMP_SpwDisconnect;;0xF3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f4; RMP_SpwParity;;0xF4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f5; RMP_SpwWriteSync;;0xF5;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f6; RMP_SpwInvalidAddress;;0xF6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f7; RMP_SpwEarlyEop;;0xF7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f8; RMP_SpwDma;;0xF8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x4f9; RMP_SpwLinkError;;0xF9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x400; RMP_ReplyOk;;0;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x401; RMP_ReplyGeneralErrorCode;;1;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x402; RMP_ReplyUnusedPacketTypeOrCommandCode;;2;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x403; RMP_ReplyInvalidKey;;3;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x404; RMP_ReplyInvalidDataCrc;;4;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x405; RMP_ReplyEarlyEop;;5;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x406; RMP_ReplyTooMuchData;;6;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x407; RMP_ReplyEep;;7;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x408; RMP_ReplyReserved;;8;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x409; RMP_ReplyVerifyBufferOverrun;;9;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x40a; RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x40b; RMP_ReplyRmwDataLengthError;;11;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x40c; RMP_ReplyInvalidTargetLogicalAddress;;12;fsfw\src\fsfw\rmap\RMAP.h;RMAP_CHANNEL -0x1401; SE_BufferTooShort;;1;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF -0x1402; SE_StreamTooShort;;2;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF -0x1403; SE_TooManyElements;;3;fsfw\src\fsfw\serialize\SerializeIF.h;SERIALIZE_IF -0x2701; SM_DataTooLarge;;1;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0x2702; SM_DataStorageFull;;2;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0x2703; SM_IllegalStorageId;;3;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0x2704; SM_DataDoesNotExist;;4;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0x2705; SM_IllegalAddress;;5;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0x2706; SM_PoolTooLarge;;6;fsfw\src\fsfw\storagemanager\StorageManagerIF.h;STORAGE_MANAGER_IF -0xc02; MS_InvalidEntry;;0x02;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF -0xc03; MS_TooManyElements;;0x03;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF -0xc04; MS_CantStoreEmpty;;0x04;fsfw\src\fsfw\subsystem\modes\ModeStoreIF.h;MODE_STORE_IF -0xd01; SS_SequenceAlreadyExists;;0x01;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd02; SS_TableAlreadyExists;;0x02;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd03; SS_TableDoesNotExist;;0x03;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd05; SS_SequenceDoesNotExist;;0x05;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd08; SS_NoTargetTable;;0x08;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd0b; SS_IsFallbackSequence;;0x0B;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd0c; SS_AccessDenied;;0x0C;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xd0e; SS_TableInUse;;0x0E;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xda1; SS_TargetTableNotReached;;0xA1;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xda2; SS_TableCheckFailed;;0xA2;fsfw\src\fsfw\subsystem\Subsystem.h;SUBSYSTEM -0xb01; SB_ChildNotFound;;0x01;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE -0xb02; SB_ChildInfoUpdated;;0x02;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE -0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE -0xb04; SB_CouldNotInsertChild;;0x04;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE -0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw\src\fsfw\subsystem\SubsystemBase.h;SUBSYSTEM_BASE -0x3a01; SPH_SemaphoreTimeout;;1;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF -0x3a02; SPH_SemaphoreNotOwned;;2;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF -0x3a03; SPH_SemaphoreInvalid;;3;fsfw\src\fsfw\tasks\SemaphoreIF.h;SEMAPHORE_IF -0x1c01; TCD_PacketLost;;1;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION -0x1c02; TCD_DestinationNotFound;;2;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION -0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw\src\fsfw\tcdistribution\TcDistributor.h;PACKET_DISTRIBUTION -0x1b00; TCC_IllegalApid;;0;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b01; TCC_IncompletePacket;;1;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b02; TCC_IncorrectChecksum;;2;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b03; TCC_IllegalPacketType;;3;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b04; TCC_IllegalPacketSubtype;;4;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw\src\fsfw\tcdistribution\TcPacketCheckPUS.h;TC_PACKET_CHECK -0x2801; TC_InvalidTargetState;;1;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw\src\fsfw\thermal\ThermalComponentIF.h;THERMAL_COMPONENT_IF -0x1000; TIM_UnsupportedTimeFormat;;0;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1002; TIM_LengthMismatch;;2;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1003; TIM_InvalidTimeFormat;;3;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1004; TIM_InvalidDayOfYear;;4;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw\src\fsfw\timemanager\CCSDSTime.h;CCSDS_TIME_HELPER_CLASS -0x3601; TSI_BadTimestamp;;1;fsfw\src\fsfw\timemanager\TimeStamperIF.h;TIME_STAMPER_IF -0x2001; TMB_Busy;;1;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2002; TMB_Full;;2;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2003; TMB_Empty;;3;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2004; TMB_NullRequested;;4;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2005; TMB_TooLarge;;5;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2006; TMB_NotReady;;6;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2007; TMB_DumpError;;7;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2008; TMB_CrcError;;8;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2009; TMB_Timeout;;9;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200a; TMB_IdlePacketFound;;10;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200b; TMB_TelecommandFound;;11;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200c; TMB_NoPusATm;;12;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200d; TMB_TooSmall;;13;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200e; TMB_BlockNotFound;;14;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x200f; TMB_InvalidRequest;;15;fsfw\src\fsfw\tmstorage\TmStoreBackendIF.h;TM_STORE_BACKEND_IF -0x2101; TMF_Busy;;1;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2102; TMF_LastPacketFound;;2;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2103; TMF_StopFetch;;3;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2104; TMF_Timeout;;4;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2105; TMF_TmChannelFull;;5;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2106; TMF_NotStored;;6;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2107; TMF_AllDeleted;;7;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2108; TMF_InvalidData;;8;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x2109; TMF_NotReady;;9;fsfw\src\fsfw\tmstorage\TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF -0x1d01; PUS_ActivityStarted;;1;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d02; PUS_InvalidSubservice;;2;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d03; PUS_IllegalApplicationData;;3;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d04; PUS_SendTmFailed;;4;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1d05; PUS_Timeout;;5;fsfw\src\fsfw\tmtcservices\AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF -0x1f01; CSB_ExecutionComplete;;1;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f02; CSB_NoStepMessage;;2;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f03; CSB_ObjectBusy;;3;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f04; CSB_Busy;;4;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f05; CSB_InvalidTc;;5;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f06; CSB_InvalidObject;;6;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x1f07; CSB_InvalidReply;;7;fsfw\src\fsfw\tmtcservices\CommandingServiceBase.h;COMMAND_SERVICE_BASE -0x4a00; SPPA_NoPacketFound;;0x00;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER -0x4a01; SPPA_SplitPacket;;0x01;fsfw\src\fsfw\tmtcservices\SpacePacketParser.h;SPACE_PACKET_PARSER -0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER -0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s\memory\FilesystemHelper.h;FILE_SYSTEM_HELPER -0x7100; SCBU_KeyNotFound;;0;bsp_q7s\memory\scratchApi.h;SCRATCH_BUFFER -0x7000; SDMA_OpOngoing;;0;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7001; SDMA_AlreadyOn;;1;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7002; SDMA_AlreadyMounted;;2;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x7003; SDMA_AlreadyOff;;3;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700a; SDMA_StatusFileNexists;;10;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700c; SDMA_MountError;;12;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700d; SDMA_UnmountError;;13;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700e; SDMA_SystemCallError;;14;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x700f; SDMA_PopenCallError;;15;bsp_q7s\memory\SdCardManager.h;SD_CARD_MANAGER -0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x69a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux\devices\devicedefinitions\MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF -0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux\devices\devicedefinitions\PlocMPSoCDefinitions.h;DWLPWRON_CMD -0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux\devices\ploc\PlocMemoryDumper.h;PLOC_MEMORY_DUMPER -0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux\devices\ploc\PlocMPSoCHelper.h;PLOC_MPSOC_HELPER -0x59a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a3;PLSV_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a4;PLSV_GetTimeFailure;Failed to read current system time;0xA4;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a5;PLSV_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a6;PLSV_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a7;PLSV_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a8;PLSV_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59a9;PLSV_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59aa;PLSV_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ab;PLSV_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);0xAB;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ac;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ad;PLSV_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x59ae;PLSV_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux\devices\ploc\PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER -0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux\devices\ploc\PlocUpdater.h;PLOC_UPDATER -0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux\devices\startracker\ArcsecJsonParamBase.h;ARCSEC_JSON_BASE -0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a6;STRH_ActionFailed;Status of reply to action command signals error;0xA6;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;0xA7;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a8;STRH_FilenameTooLong;Name of file received with command is too long;0xA8;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56a9;STRH_InvalidProgram;Received version reply with invalid program ID;0xA9;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56aa;STRH_ReplyError;Status field reply signals error;0xAA;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);0xAB;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);0xAC;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56ad;STRH_RegionMismatch;Region mismatch between send and received data;0xAD;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56ae;STRH_AddressMismatch;Address mismatch between send and received data;0xAE;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56af;STRH_LengthMismatch;Length field mismatch between send and received data;0xAF;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b0;STRH_FileNotExists;Specified file does not exist;0xB0;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b1;STRH_InvalidType;Download blob pixel command has invalid type field;0xB1;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b2;STRH_InvalidId;Received FPGA action command with invalid ID;0xB2;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b3;STRH_ReplyTooShort;Received reply is too short;0xB3;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b4;STRH_CrcFailure;Received reply with invalid CRC;0xB4;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;0xB5;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x56b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux\devices\startracker\StarTrackerHandler.h;STR_HANDLER -0x5ea0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ea8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux\devices\startracker\StrHelper.h;STR_HELPER -0x5ba0;IPCI_PapbBusy;;0xA0;linux\obc\PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE -0x61a0;PDEC_AbandonedCltu;;0xA0;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a1;PDEC_FrameDirty;;0xA1;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a3;PDEC_AdDiscardedLockout;;0xA3;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a4;PDEC_AdDiscardedWait;;0xA4;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a5;PDEC_AdDiscardedNsVs;;0xA5;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61b0;PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a6;PDEC_NoReport;;0xA6;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a7;PDEC_ErrorVersionNumber;;0xA7;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a8;PDEC_IllegalCombination;;0xA8;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61a9;PDEC_InvalidScId;;0xA9;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61aa;PDEC_InvalidVcIdMsb;;0xAA;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ab;PDEC_InvalidVcIdLsb;;0xAB;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ac;PDEC_NsNotZero;;0xAC;linux\obc\PdecHandler.h;PDEC_HANDLER -0x61ae;PDEC_InvalidBcCc;;0xAE;linux\obc\PdecHandler.h;PDEC_HANDLER -0x5ca0;PTME_UnknownVcId;;0xA0;linux\obc\Ptme.h;PTME -0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux\obc\PtmeConfig.h;RATE_SETTER -0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux\obc\PtmeConfig.h;RATE_SETTER +0x62a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission/tmtc/CCSDSHandler.h;CCSDS_HANDLER +0x68a0;SADPL_CommandNotSupported;;0xA0;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER +0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission/devices/SusHandler.h;SUS_HANDLER +0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission/devices/SusHandler.h;SUS_HANDLER +0x55b0;RWHA_SpiWriteFailure;;0xB0;mission/devices/RwHandler.h;RW_HANDLER +0x55b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission/devices/RwHandler.h;RW_HANDLER +0x55b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;mission/devices/RwHandler.h;RW_HANDLER +0x55b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;mission/devices/RwHandler.h;RW_HANDLER +0x55b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;mission/devices/RwHandler.h;RW_HANDLER +0x55b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;mission/devices/RwHandler.h;RW_HANDLER +0x55b6;RWHA_NoStartMarker;Expected a start marker as first byte;0xB6;mission/devices/RwHandler.h;RW_HANDLER +0x55a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;mission/devices/RwHandler.h;RW_HANDLER +0x55a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;mission/devices/RwHandler.h;RW_HANDLER +0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission/devices/RwHandler.h;RW_HANDLER +0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission/devices/RwHandler.h;RW_HANDLER +0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission/devices/RwHandler.h;RW_HANDLER +0x54a0;IMTQ_InvalidCommandCode;;0xA0;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a1;IMTQ_ParameterMissing;;0xA1;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a2;IMTQ_ParameterInvalid;;0xA2;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a3;IMTQ_CcUnavailable;;0xA3;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a4;IMTQ_InternalProcessingError;;0xA4;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a5;IMTQ_RejectedWithoutReason;;0xA5;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a6;IMTQ_CmdErrUnknown;;0xA6;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x54a7;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.;0xA7;mission/devices/IMTQHandler.h;IMTQ_HANDLER +0x52a1;HEATER_CommandNotSupported;;0xA1;mission/devices/HeaterHandler.h;HEATER_HANDLER +0x52a2;HEATER_InitFailed;;0xA2;mission/devices/HeaterHandler.h;HEATER_HANDLER +0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission/devices/HeaterHandler.h;HEATER_HANDLER +0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission/devices/HeaterHandler.h;HEATER_HANDLER +0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission/devices/HeaterHandler.h;HEATER_HANDLER +0x5f00;GOMS_PacketTooLong;;0;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x5f01;GOMS_InvalidTableId;;1;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x5f02;GOMS_InvalidAddress;;2;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x5f03;GOMS_InvalidParamSize;;3;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x5f04;GOMS_InvalidPayloadSize;;4;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x5f05;GOMS_UnknownReplyId;;5;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER +0x53a0;SYRLINKS_CrcFailure;;0xA0;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a3;SYRLINKS_BadParameterValueAck;;0xA3;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a4;SYRLINKS_BadEndOfFrameAck;;0xA4;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a5;SYRLINKS_UnknownCommandIdAck;;0xA5;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER +0x65a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission/memory/NVMParameterBase.h;NVM_PARAM_BASE +0x4300; HSPI_OpeningFileFailed;;0;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI +0x4301; HSPI_FullDuplexTransferFailed;;1;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI +0x4302; HSPI_HalfDuplexTransferFailed;;2;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI +0x4401; HURT_UartReadFailure;;1;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART +0x4402; HURT_UartReadSizeMissmatch;;2;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART +0x4403; HURT_UartRxBufferTooSmall;;3;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART +0x4601; HGIO_UnknownGpioId;;1;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO +0x4602; HGIO_DriveGpioFailure;;2;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO +0x4603; HGIO_GpioTypeFailure;;3;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO +0x4604; HGIO_GpioInvalidInstance;;4;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO +0x4605; HGIO_GpioDuplicateDetected;;5;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO +0x4200; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x4201; 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;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x4202; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x4203; UXOS_CommandError;Command execution failed;3;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x4204; UXOS_NoCommandLoadedOrPending;;4;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x4206; UXOS_PcloseCallError;;6;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL +0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF +0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF +0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d01; HKM_WrongHkPacketType;;1;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d04; HKM_PoolobjectNotFound;;4;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3d05; HKM_DatasetNotFound;;5;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER +0x3501; CFDP_InvalidTlvType;;1;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3502; CFDP_InvalidDirectiveFields;;2;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3505; CFDP_MetadataCantParseOptions;;5;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw/src/fsfw/cfdp/definitions.h;CFDP +0x3101; CF_ObjectHasNoFunctions;;1;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF +0x3102; CF_AlreadyCommanding;;2;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF +0x3201; HF_IsBusy;;1;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF +0x3202; HF_InvalidParameters;;2;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF +0x3203; HF_ExecutionFinished;;3;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF +0x3204; HF_InvalidActionId;;4;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF +0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF +0x2d02; HPA_InvalidDomainId;;0x02;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF +0x2d03; HPA_InvalidValue;;0x03;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF +0x2d05; HPA_ReadOnly;;0x05;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF +0x2c01; PAW_UnknownDatatype;;0x01;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c03; PAW_Readonly;;0x03;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c04; PAW_TooBig;;0x04;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c05; PAW_SourceNotSet;;0x05;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c06; PAW_OutOfBounds;;0x06;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c07; PAW_NotSet;;0x07;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER +0x1701; HHI_ObjectNotHealthy;;1;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF +0x1702; HHI_InvalidHealthState;;2;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF +0x2701; SM_DataTooLarge;;1;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2702; SM_DataStorageFull;;2;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2703; SM_IllegalStorageId;;3;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2704; SM_DataDoesNotExist;;4;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2705; SM_IllegalAddress;;5;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2706; SM_PoolTooLarge;;6;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF +0x2301; MT_TooDetailedRequest;;1;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS +0x2302; MT_TooGeneralRequest;;2;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS +0x2303; MT_NoMatch;;3;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS +0x2304; MT_Full;;4;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS +0x2305; MT_NewNodeCreated;;5;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS +0x3e01; DLEE_StreamTooShort;;0x01;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER +0x3e02; DLEE_DecodingError;;0x02;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER +0x2e01; ASC_TooLongForTargetType;;1;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER +0x2e02; ASC_InvalidCharacters;;2;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER +0x2e03; ASC_BufferTooSmall;;0x3;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER +0x1c01; TCD_PacketLost;;1;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION +0x1c02; TCD_DestinationNotFound;;2;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION +0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION +0x1b00; TCC_IllegalApid;;0;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b01; TCC_IncompletePacket;;1;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b02; TCC_IncorrectChecksum;;2;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b03; TCC_IllegalPacketType;;3;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b04; TCC_IllegalPacketSubtype;;4;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK +0x3901; MQI_Empty;;1;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3902; MQI_Full;No space left for more messages;2;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF +0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF +0xf01; CM_UnknownCommand;;1;fsfw/src/fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE +0x3801; MUX_NotEnoughResources;;1;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3802; MUX_InsufficientMemory;;2;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3803; MUX_NoPrivilege;;3;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3804; MUX_WrongAttributeSetting;;4;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3805; MUX_MutexAlreadyLocked;;5;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3806; MUX_MutexNotFound;;6;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3807; MUX_MutexMaxLocks;;7;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x380a; MUX_MutexTimeout;;10;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x380b; MUX_MutexInvalidId;;11;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF +0x2801; TC_InvalidTargetState;;1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF +0x801; DPS_InvalidParameterDefinition;;1;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x802; DPS_SetWasAlreadyRead;;2;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x803; DPS_CommitingWithoutReading;;3;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x804; DPS_DataSetUninitialised;;4;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x805; DPS_DataSetFull;;5;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x806; DPS_PoolVarNull;;6;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS +0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF +0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF +0xc02; MS_InvalidEntry;;0x02;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF +0xc03; MS_TooManyElements;;0x03;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF +0xc04; MS_CantStoreEmpty;;0x04;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF +0xd01; SS_SequenceAlreadyExists;;0x01;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd02; SS_TableAlreadyExists;;0x02;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd03; SS_TableDoesNotExist;;0x03;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd05; SS_SequenceDoesNotExist;;0x05;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd08; SS_NoTargetTable;;0x08;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd0b; SS_IsFallbackSequence;;0x0B;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd0c; SS_AccessDenied;;0x0C;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xd0e; SS_TableInUse;;0x0E;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xda1; SS_TargetTableNotReached;;0xA1;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xda2; SS_TableCheckFailed;;0xA2;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM +0xb01; SB_ChildNotFound;;0x01;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE +0xb02; SB_ChildInfoUpdated;;0x02;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE +0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE +0xb04; SB_CouldNotInsertChild;;0x04;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE +0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE +0xb00; SB_ConnBroken;;0;fsfw/src/fsfw/osal/common/TcpTmTcServer.h;SUBSYSTEM_BASE +0x2901; IEC_NoConfigurationTable;;0x01;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2902; IEC_NoCpuTable;;0x02;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2903; IEC_InvalidWorkspaceAddress;;0x03;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2904; IEC_TooLittleWorkspace;;0x04;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2905; IEC_WorkspaceAllocation;;0x05;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2906; IEC_InterruptStackTooSmall;;0x06;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2907; IEC_ThreadExitted;;0x07;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2908; IEC_InconsistentMpInformation;;0x08;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2909; IEC_InvalidNode;;0x09;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290a; IEC_NoMpci;;0x0a;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290b; IEC_BadPacket;;0x0b;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290c; IEC_OutOfPackets;;0x0c;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290d; IEC_OutOfGlobalObjects;;0x0d;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290e; IEC_OutOfProxies;;0x0e;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x290f; IEC_InvalidGlobalId;;0x0f;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2910; IEC_BadStackHook;;0x10;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2911; IEC_BadAttributes;;0x11;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2912; IEC_ImplementationKeyCreateInconsistency;;0x12;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2913; IEC_ImplementationBlockingOperationCancel;;0x13;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2914; IEC_MutexObtainFromBadState;;0x14;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x2915; IEC_UnlimitedAndMaximumIs0;;0x15;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES +0x1401; SE_BufferTooShort;;1;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF +0x1402; SE_StreamTooShort;;2;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF +0x1403; SE_TooManyElements;;3;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF +0x4a00; SPPA_NoPacketFound;;0x00;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER +0x4a01; SPPA_SplitPacket;;0x01;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER +0x1d01; PUS_ActivityStarted;;1;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d02; PUS_InvalidSubservice;;2;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d03; PUS_IllegalApplicationData;;3;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d04; PUS_SendTmFailed;;4;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1d05; PUS_Timeout;;5;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF +0x1f01; CSB_ExecutionComplete;;1;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f02; CSB_NoStepMessage;;2;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f03; CSB_ObjectBusy;;3;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f04; CSB_Busy;;4;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f05; CSB_InvalidTc;;5;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f06; CSB_InvalidObject;;6;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x1f07; CSB_InvalidReply;;7;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE +0x2500; FDI_YourFault;;0;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x2501; FDI_MyFault;;1;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x2502; FDI_ConfirmLater;;2;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF +0x4e1; RMP_CommandNoDescriptorsAvailable;;0xE1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e2; RMP_CommandBufferFull;;0xE2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e3; RMP_CommandChannelOutOfRange;;0xE3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e6; RMP_CommandChannelDeactivated;;0xE6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e7; RMP_CommandPortOutOfRange;;0xE7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e8; RMP_CommandPortInUse;;0xE8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4e9; RMP_CommandNoChannel;;0xE9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4ea; RMP_NoHwCrc;;0xEA;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4d0; RMP_ReplyNoReply;;0xD0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4d1; RMP_ReplyNotSent;;0xD1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4d2; RMP_ReplyNotYetSent;;0xD2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4d3; RMP_ReplyMissmatch;;0xD3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4d4; RMP_ReplyTimeout;;0xD4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4c0; RMP_ReplyInterfaceBusy;;0xC0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4c1; RMP_ReplyTransmissionError;;0xC1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4c2; RMP_ReplyInvalidData;;0xC2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4c3; RMP_ReplyNotSupported;;0xC3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f0; RMP_LinkDown;;0xF0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f1; RMP_SpwCredit;;0xF1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f2; RMP_SpwEscape;;0xF2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f3; RMP_SpwDisconnect;;0xF3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f4; RMP_SpwParity;;0xF4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f5; RMP_SpwWriteSync;;0xF5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f6; RMP_SpwInvalidAddress;;0xF6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f7; RMP_SpwEarlyEop;;0xF7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f8; RMP_SpwDma;;0xF8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x4f9; RMP_SpwLinkError;;0xF9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x400; RMP_ReplyOk;;0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x401; RMP_ReplyGeneralErrorCode;;1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x402; RMP_ReplyUnusedPacketTypeOrCommandCode;;2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x403; RMP_ReplyInvalidKey;;3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x404; RMP_ReplyInvalidDataCrc;;4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x405; RMP_ReplyEarlyEop;;5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x406; RMP_ReplyTooMuchData;;6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x407; RMP_ReplyEep;;7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x408; RMP_ReplyReserved;;8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x409; RMP_ReplyVerifyBufferOverrun;;9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x40a; RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x40b; RMP_ReplyRmwDataLengthError;;11;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x40c; RMP_ReplyInvalidTargetLogicalAddress;;12;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL +0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf0; CCS_NsPositiveW;;0xF0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf1; CCS_NsNegativeW;;0xF1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf2; CCS_NsLockout;;0xF2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf3; CCS_FarmInLockout;;0xF3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bf4; CCS_FarmInWait;;0xF4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be0; CCS_WrongSymbol;;0xE0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be1; CCS_DoubleStart;;0xE1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be3; CCS_EndWithoutStart;;0xE3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be4; CCS_TooLarge;;0xE4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be5; CCS_TooShort;;0xE5;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be6; CCS_WrongTfVersion;;0xE6;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be8; CCS_NoValidFrameType;;0xE8;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2be9; CCS_CrcFailed;;0xE9;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bea; CCS_VcNotFound;;0xEA;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2beb; CCS_ForwardingFailed;;0xEB;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bec; CCS_ContentTooLarge;;0xEC;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bed; CCS_ResidualData;;0xED;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bee; CCS_DataCorrupted;;0xEE;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF +0x37a1; SGP4_InvalidEccentricity;;0xA1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a2; SGP4_InvalidMeanMotion;;0xA2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a3; SGP4_InvalidPerturbationElements;;0xA3;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a4; SGP4_InvalidSemiLatusRectum;;0xA4;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a5; SGP4_InvalidEpochElements;;0xA5;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37a6; SGP4_SatelliteHasDecayed;;0xA6;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37b1; SGP4_TleTooOld;;0xB1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x37b2; SGP4_TleNotInitialized;;0xB2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS +0x13e0; MH_UnknownCmd;;0xE0;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER +0x13e1; MH_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER +0x13e2; MH_InvalidSize;;0xE2;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER +0x13e3; MH_StateMismatch;;0xE3;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER +0x4100; FILS_GenericFileError;;0;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4101; FILS_IsBusy;;1;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4102; FILS_InvalidParameters;;2;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4105; FILS_FileDoesNotExist;;5;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4106; FILS_FileAlreadyExists;;6;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4107; FILS_FileLocked;;7;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x410a; FILS_DirectoryDoesNotExist;;10;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x410b; FILS_DirectoryAlreadyExists;;11;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x410c; FILS_DirectoryNotEmpty;;12;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x410f; FILS_SequencePacketMissingWrite;;15;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x4110; FILS_SequencePacketMissingRead;;16;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM +0x601; PP_DoItMyself;;1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x602; PP_PointsToVariable;;2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x603; PP_PointsToMemory;;3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x604; PP_ActivityCompleted;;4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x605; PP_PointsToVectorUint8;;5;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x606; PP_PointsToVectorUint16;;6;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x607; PP_PointsToVectorUint32;;7;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x608; PP_PointsToVectorFloat;;8;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6a0; PP_DumpNotSupported;;0xA0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6e0; PP_InvalidSize;;0xE0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6e1; PP_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6e2; PP_InvalidContent;;0xE2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6e3; PP_UnalignedAccess;;0xE3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x6e4; PP_WriteProtected;;0xE4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF +0x201; OM_InsertionFailed;;1;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF +0x202; OM_NotFound;;2;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF +0x203; OM_ChildInitFailed;;3;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF +0x204; OM_InternalErrReporterUninit;;4;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF +0x501; PS_SwitchOn;;1;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF +0x500; PS_SwitchOff;;0;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF +0x502; PS_SwitchTimeout;;2;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF +0x503; PS_FuseOn;;3;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF +0x504; PS_FuseOff;;4;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF +0x2f01; POS_InPowerTransition;;1;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER +0x2f02; POS_SwitchStateMismatch;;2;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER +0x1000; TIM_UnsupportedTimeFormat;;0;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1002; TIM_LengthMismatch;;2;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1003; TIM_InvalidTimeFormat;;3;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1004; TIM_InvalidDayOfYear;;4;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS +0x3601; TSI_BadTimestamp;;1;fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF +0x2101; TMF_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2102; TMF_LastPacketFound;;2;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2103; TMF_StopFetch;;3;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2104; TMF_Timeout;;4;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2105; TMF_TmChannelFull;;5;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2106; TMF_NotStored;;6;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2107; TMF_AllDeleted;;7;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2108; TMF_InvalidData;;8;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2109; TMF_NotReady;;9;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF +0x2001; TMB_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2002; TMB_Full;;2;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2003; TMB_Empty;;3;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2004; TMB_NullRequested;;4;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2005; TMB_TooLarge;;5;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2006; TMB_NotReady;;6;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2007; TMB_DumpError;;7;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2008; TMB_CrcError;;8;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x2009; TMB_Timeout;;9;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200a; TMB_IdlePacketFound;;10;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200b; TMB_TelecommandFound;;11;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200c; TMB_NoPusATm;;12;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200d; TMB_TooSmall;;13;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200e; TMB_BlockNotFound;;14;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0x200f; TMB_InvalidRequest;;15;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF +0xe01; HM_InvalidMode;;0x01;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF +0xe02; HM_TransNotAllowed;;0x02;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF +0xe03; HM_InTransition;;0x03;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF +0xe04; HM_InvalidSubmode;;0x04;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF +0x1501; FM_KeyAlreadyExists;;0x01;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP +0x1502; FM_MapFull;;0x02;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP +0x1503; FM_KeyDoesNotExist;;0x03;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP +0x1101; AL_Full;;0x01;fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST +0x1601; FMM_MapFull;;0x01;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP +0x1602; FMM_KeyDoesNotExist;;0x02;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP +0x1801; FF_Full;;1;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS +0x1802; FF_Empty;;2;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS +0x3a0; DHB_InvalidChannel;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b0; DHB_AperiodicReply;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b1; DHB_IgnoreReplyData;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3b2; DHB_IgnoreFullPacket;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3c0; DHB_NothingToSend;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3c2; DHB_CommandMapError;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3d0; DHB_NoSwitch;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3e0; DHB_ChildTimeout;;0xE0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x3e1; DHB_SwitchFailed;;0xE1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE +0x1201; AB_NeedSecondStep;;0x01;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x1202; AB_NeedToReconfigure;;0x02;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x1203; AB_ModeFallback;;0x03;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x1204; AB_ChildNotCommandable;;0x04;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x1205; AB_NeedToChangeHealth;;0x05;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE +0x26a0; DHI_NoCommandData;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a1; DHI_CommandNotSupported;;0xA1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a2; DHI_CommandAlreadySent;;0xA2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a3; DHI_CommandWasNotSent;;0xA3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a4; DHI_CantSwitchAddress;;0xA4;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a5; DHI_WrongModeForCommand;;0xA5;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a6; DHI_Timeout;;0xA6;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a7; DHI_Busy;;0xA7;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a8; DHI_NoReplyExpected;;0xA8;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26a9; DHI_NonOpTemperature;;0xA9;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26aa; DHI_CommandNotImplemented;;0xAA;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b0; DHI_ChecksumError;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b1; DHI_LengthMissmatch;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b2; DHI_InvalidData;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26b3; DHI_ProtocolError;;0xB3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c0; DHI_DeviceDidNotExecute;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c1; DHI_DeviceReportedError;;0xC1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c2; DHI_UnknownDeviceReply;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26c3; DHI_DeviceReplyInvalid;;0xC3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26d0; DHI_InvalidCommandParameter;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x26d1; DHI_InvalidNumberOrLengthOfParameters;;0xD1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF +0x3301; DC_NoReplyReceived;;0x01;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3302; DC_ProtocolError;;0x02;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3303; DC_Nullpointer;;0x03;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3304; DC_InvalidCookieType;;0x04;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3305; DC_NotActive;;0x05;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x3306; DC_TooMuchData;;0x06;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF +0x2401; EV_ListenerNotFound;;1;fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF +0x1a01; TRC_NotEnoughSensors;;1;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a02; TRC_LowestValueOol;;2;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a03; TRC_HighestValueOol;;3;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a04; TRC_BothValuesOol;;4;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x1a05; TRC_DuplexOol;;5;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK +0x3001; LIM_Unchecked;;1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3002; LIM_Invalid;;2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3003; LIM_Unselected;;3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3004; LIM_BelowLowLimit;;4;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3005; LIM_AboveHighLimit;;5;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3006; LIM_UnexpectedValue;;6;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3007; LIM_OutOfRange;;7;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30a0; LIM_FirstSample;;0xA0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30e0; LIM_InvalidSize;;0xE0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30e1; LIM_WrongType;;0xE1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30e2; LIM_WrongPid;;0xE2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30e3; LIM_WrongLimitId;;0xE3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x30ee; LIM_MonitorNotFound;;0xEE;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF +0x3a01; SPH_SemaphoreTimeout;;1;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF +0x3a02; SPH_SemaphoreNotOwned;;2;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF +0x3a03; SPH_SemaphoreInvalid;;3;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF +0x7000; SDMA_OpOngoing;;0;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x7001; SDMA_AlreadyOn;;1;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x7002; SDMA_AlreadyMounted;;2;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x7003; SDMA_AlreadyOff;;3;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700a; SDMA_StatusFileNexists;;10;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700c; SDMA_MountError;;12;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700d; SDMA_UnmountError;;13;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700e; SDMA_SystemCallError;;14;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x700f; SDMA_PopenCallError;;15;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER +0x7100; SCBU_KeyNotFound;;0;bsp_q7s/memory/scratchApi.h;SCRATCH_BUFFER +0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER +0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER +0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x69a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF +0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD +0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD +0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER +0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER +0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocMPSoCHelper.h;PLOC_MPSOC_HELPER +0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER +0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER +0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER +0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER +0x59a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a3;PLSV_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a4;PLSV_GetTimeFailure;Failed to read current system time;0xA4;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a5;PLSV_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a6;PLSV_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a7;PLSV_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a8;PLSV_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59a9;PLSV_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59aa;PLSV_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59ab;PLSV_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);0xAB;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59ac;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59ad;PLSV_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x59ae;PLSV_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER +0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE +0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a6;STRH_ActionFailed;Status of reply to action command signals error;0xA6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a7;STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;0xA7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a8;STRH_FilenameTooLong;Name of file received with command is too long;0xA8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56a9;STRH_InvalidProgram;Received version reply with invalid program ID;0xA9;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56aa;STRH_ReplyError;Status field reply signals error;0xAA;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56ab;STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);0xAB;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56ac;STRH_InvalidLength;Received command with invalid length (too few or too many parameters);0xAC;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56ad;STRH_RegionMismatch;Region mismatch between send and received data;0xAD;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56ae;STRH_AddressMismatch;Address mismatch between send and received data;0xAE;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56af;STRH_LengthMismatch;Length field mismatch between send and received data;0xAF;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b0;STRH_FileNotExists;Specified file does not exist;0xB0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b1;STRH_InvalidType;Download blob pixel command has invalid type field;0xB1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b2;STRH_InvalidId;Received FPGA action command with invalid ID;0xB2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b3;STRH_ReplyTooShort;Received reply is too short;0xB3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b4;STRH_CrcFailure;Received reply with invalid CRC;0xB4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b5;STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;0xB5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b6;STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b7;STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x56b8;STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER +0x5ea0;STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea1;STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea2;STRHLP_PathNotExists;Specified path does not exist;0xA2;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea3;STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea4;STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea5;STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ea8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux/devices/startracker/StrHelper.h;STR_HELPER +0x5ba0;IPCI_PapbBusy;;0xA0;linux/obc/PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE +0x5ca0;PTME_UnknownVcId;;0xA0;linux/obc/Ptme.h;PTME +0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux/obc/PtmeConfig.h;RATE_SETTER +0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux/obc/PtmeConfig.h;RATE_SETTER +0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux/obc/PtmeConfig.h;RATE_SETTER +0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux/obc/PtmeConfig.h;RATE_SETTER +0x61a0;PDEC_AbandonedCltu;;0xA0;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a1;PDEC_FrameDirty;;0xA1;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a3;PDEC_AdDiscardedLockout;;0xA3;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a4;PDEC_AdDiscardedWait;;0xA4;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a5;PDEC_AdDiscardedNsVs;;0xA5;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61b0;PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a6;PDEC_NoReport;;0xA6;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a7;PDEC_ErrorVersionNumber;;0xA7;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a8;PDEC_IllegalCombination;;0xA8;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61a9;PDEC_InvalidScId;;0xA9;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61aa;PDEC_InvalidVcIdMsb;;0xAA;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61ab;PDEC_InvalidVcIdLsb;;0xAB;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61ac;PDEC_NsNotZero;;0xAC;linux/obc/PdecHandler.h;PDEC_HANDLER +0x61ae;PDEC_InvalidBcCc;;0xAE;linux/obc/PdecHandler.h;PDEC_HANDLER diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 1a24c553..5f6b5b9b 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** * @brief Auto-generated event translation file. Contains 186 translations. * @details - * Generated on: 2022-04-08 14:13:35 + * Generated on: 2022-04-27 16:32:39 */ #include "translateEvents.h" diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index 70904882..b884242e 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 117 translations. - * Generated on: 2022-04-08 14:13:35 + * Generated on: 2022-04-27 16:32:32 */ #include "translateObjects.h" diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 1a24c553..5f6b5b9b 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** * @brief Auto-generated event translation file. Contains 186 translations. * @details - * Generated on: 2022-04-08 14:13:35 + * Generated on: 2022-04-27 16:32:39 */ #include "translateEvents.h" diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index 70904882..b884242e 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 117 translations. - * Generated on: 2022-04-08 14:13:35 + * Generated on: 2022-04-27 16:32:32 */ #include "translateObjects.h" diff --git a/mission/tmtc/VirtualChannel.cpp b/mission/tmtc/VirtualChannel.cpp index 9d413ca7..b2abf3f0 100644 --- a/mission/tmtc/VirtualChannel.cpp +++ b/mission/tmtc/VirtualChannel.cpp @@ -27,6 +27,13 @@ ReturnValue_t VirtualChannel::performOperation() { ReturnValue_t result = RETURN_OK; TmTcMessage message; + uint8_t data[50] = {0xa}; + result = ptme->writeToVc(vcId, data, sizeof(data)); + if (result != RETURN_OK) { + sif::warning << "VirtualChannel::performOperation: Failed to send test data" << std::endl; + return result; + } + while (tmQueue->receiveMessage(&message) == RETURN_OK) { store_address_t storeId = message.getStorageId(); const uint8_t* data = nullptr; diff --git a/mission/tmtc/VirtualChannel.h b/mission/tmtc/VirtualChannel.h index c661c4c5..229bcc40 100644 --- a/mission/tmtc/VirtualChannel.h +++ b/mission/tmtc/VirtualChannel.h @@ -46,7 +46,7 @@ class VirtualChannel : public AcceptsTelemetryIF, public HasReturnvaluesIF { private: PtmeIF* ptme = nullptr; MessageQueueIF* tmQueue = nullptr; - uint8_t vcId; + uint8_t vcId = 0; bool linkIsUp = false; diff --git a/tmtc b/tmtc index 28983d38..a457b001 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 28983d387b82578a73fbfe052cb53dec1910d021 +Subproject commit a457b001a33a2a561250544b3e9950885e1dac2e From 898753f6e3f51194b208c56a006dd71213fe55cd Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 28 Apr 2022 11:27:28 +0200 Subject: [PATCH 034/115] supervisor reset pl command --- .../devices/devicedefinitions/PlocSupervisorDefinitions.h | 2 ++ linux/devices/ploc/PlocSupervisorHandler.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index a0592ce3..f77fad3b 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -55,6 +55,7 @@ static const DeviceCommandId_t LOGGING_REQUEST_EVENT_BUFFERS = 54; static const DeviceCommandId_t LOGGING_CLEAR_COUNTERS = 55; static const DeviceCommandId_t LOGGING_SET_TOPIC = 56; static const DeviceCommandId_t REQUEST_ADC_REPORT = 57; +static const DeviceCommandId_t RESET_PL = 58; /** Reply IDs */ static const DeviceCommandId_t ACK_REPORT = 50; @@ -101,6 +102,7 @@ static const uint16_t APID_SEL_MPSOC_BOOT_IMAGE = 0xA3; static const uint16_t APID_SET_BOOT_TIMEOUT = 0xA4; static const uint16_t APID_SET_MAX_RESTART_TRIES = 0xA5; static const uint16_t APID_RESET_MPSOC = 0xA6; +static const uint16_t APID_RESET_PL = 0xA7; static const uint16_t APID_GET_BOOT_STATUS_RPT = 0xA8; static const uint16_t APID_PREPARE_UPDATE = 0xA9; static const uint16_t APID_START_MPSOC_QUIET = 0xAA; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 35a11124..fd7406cf 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -344,6 +344,11 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } + case RESET_PL: { + prepareEmptyCmd(APID_RESET_PL); + result = RETURN_OK; + break; + } default: sif::debug << "PlocSupervisorHandler::buildCommandFromCommand: Command not implemented" << std::endl; @@ -399,6 +404,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(LOGGING_REQUEST_COUNTERS); this->insertInCommandMap(LOGGING_CLEAR_COUNTERS); this->insertInCommandMap(LOGGING_SET_TOPIC); + this->insertInCommandMap(RESET_PL); this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); @@ -521,6 +527,7 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case DISABLE_AUTO_TM: case LOGGING_CLEAR_COUNTERS: case LOGGING_SET_TOPIC: + case RESET_PL: enabledReplies = 2; break; default: From e18661bb59b5d685c4750fd1f920a5b557c353c3 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 28 Apr 2022 14:30:35 +0200 Subject: [PATCH 035/115] update fsfw --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 41682aab..0aee8644 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 41682aab3fe5893184c2eb3dcc748c08d7a7bf0c +Subproject commit 0aee86442eafa6d8827435e2c2e22074ba733e34 From 794ed04761fc6fce5cd975f84436e479b477ab52 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Thu, 28 Apr 2022 18:30:40 +0200 Subject: [PATCH 036/115] prevent sending boot command when mpsoc booted via jtag --- linux/devices/ploc/PlocMPSoCHandler.cpp | 15 +++++++++++++++ linux/devices/ploc/PlocSupervisorHandler.cpp | 2 +- linux/fsfwconfig/OBSWConfig.h.in | 9 +++++---- tmtc | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index 52fd5812..9ca90bcc 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -134,6 +134,7 @@ ReturnValue_t PlocMPSoCHandler::executeAction(ActionId_t actionId, MessageQueueI void PlocMPSoCHandler::doStartUp() { #ifdef XIPHOS_Q7S +#if not OBSW_MPSOC_JTAG_BOOT == 1 switch (powerState) { case PowerState::OFF: commandActionHelper.commandAction(supervisorHandler, supv::START_MPSOC); @@ -147,11 +148,19 @@ void PlocMPSoCHandler::doStartUp() { break; } #else + powerState = PowerState::ON; + setMode(_MODE_TO_ON); + uartIsolatorSwitch.pullHigh(); +#endif/* not MSPOC_JTAG_BOOT == 1 */ +#else + powerState = PowerState::ON; setMode(_MODE_TO_ON); #endif /* XIPHOS_Q7S */ } void PlocMPSoCHandler::doShutDown() { +#ifdef XIPHOS_Q7S +#if not OBSW_MPSOC_JTAG_BOOT == 1 switch (powerState) { case PowerState::ON: uartIsolatorSwitch.pullLow(); @@ -164,6 +173,12 @@ void PlocMPSoCHandler::doShutDown() { default: break; } +#else + uartIsolatorSwitch.pullLow(); + setMode(_MODE_POWER_DOWN); + powerState = PowerState::OFF; +#endif +#endif } ReturnValue_t PlocMPSoCHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) { diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index d131b63b..c6ef59e8 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -995,7 +995,7 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) nextReplyId = supv::EXE_REPORT; #if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_PLOC_SUPERVISOR == 1 - sif::info << "PlocSupervisorHandler::handleBootStatusReport: SoC State: " + sif::info << "PlocSupervisorHandler::handleBootStatusReport: SoC State (0 - off, 1 - booting, 3 - operating): " << static_cast(bootStatusReport.socState.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Power Cycles: " << static_cast(bootStatusReport.powerCycles.value) << std::endl; diff --git a/linux/fsfwconfig/OBSWConfig.h.in b/linux/fsfwconfig/OBSWConfig.h.in index 23980eac..a0ef1ac6 100644 --- a/linux/fsfwconfig/OBSWConfig.h.in +++ b/linux/fsfwconfig/OBSWConfig.h.in @@ -41,8 +41,8 @@ debugging. */ #define OBSW_ADD_MGT 1 #define OBSW_ADD_BPX_BATTERY_HANDLER 1 #define OBSW_ADD_STAR_TRACKER @OBSW_ADD_STAR_TRACKER@ -#define OBSW_ADD_PLOC_SUPERVISOR 0 -#define OBSW_ADD_PLOC_MPSOC 0 +#define OBSW_ADD_PLOC_SUPERVISOR 1 +#define OBSW_ADD_PLOC_MPSOC 1 #define OBSW_ADD_SUN_SENSORS 1 #define OBSW_ADD_SUS_BOARD_ASS 1 #define OBSW_ADD_ACS_BOARD 1 @@ -55,6 +55,7 @@ debugging. */ #define OBSW_ADD_SYRLINKS 0 #define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT 0 #define OBSW_STAR_TRACKER_GROUND_CONFIG 1 +#define OBSW_MPSOC_JTAG_BOOT 0 #endif // XIPHOS_Q7S @@ -152,8 +153,8 @@ debugging. */ #define OBSW_DEBUG_PLOC_SUPERVISOR 1 #define OBSW_DEBUG_PLOC_MPSOC 1 #else -#define OBSW_DEBUG_PLOC_SUPERVISOR 0 -#define OBSW_DEBUG_PLOC_MPSOC 0 +#define OBSW_DEBUG_PLOC_SUPERVISOR 1 +#define OBSW_DEBUG_PLOC_MPSOC 1 #endif #ifdef EGSE diff --git a/tmtc b/tmtc index 4ce67f5b..a457b001 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 4ce67f5be4fbde0cfe20aad114923d834ff3394d +Subproject commit a457b001a33a2a561250544b3e9950885e1dac2e From f0884c00960754f6f913916dc2a5173d4b138b07 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 29 Apr 2022 08:34:23 +0200 Subject: [PATCH 037/115] read gpio tm handling --- fsfw | 2 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 19 +++++++++++++++++++ linux/devices/ploc/PlocSupervisorHandler.h | 5 +++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 0aee8644..9731dc1e 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 0aee86442eafa6d8827435e2c2e22074ba733e34 +Subproject commit 9731dc1e619e6e52207174e67daf0468a675a5ec diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index fd7406cf..8788cdb8 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -859,6 +859,7 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { } case supv::APID_ACK_SUCCESS: { setNextReplyId(); + handleSpecialAcknowledgments(data); break; } default: { @@ -1811,3 +1812,21 @@ ReturnValue_t PlocSupervisorHandler::eventSubscription() { } return result; } + +void PlocSupervisorHandler::handleSpecialAcknowledgments(const uint8_t* data) { + DeviceCommandId_t commandId = getPendingCommand(); + switch(commandId) { + case supv::READ_GPIO: { + supv::AcknowledgmentReport ack; + ack.addWholeData(data, supv::SIZE_ACK_REPORT); + uint16_t gpioState = ack.getStatusCode(); +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + sif::info << "PlocsupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ + handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::ACK_REPORT); + break; + } + default: + break; + } +} diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 19ccfa63..9fa1bed3 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -349,6 +349,11 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t extractUpdateCommand(const uint8_t* commandData, size_t size, std::string* file, uint8_t* memoryId, uint32_t* startAddress); ReturnValue_t eventSubscription(); + + /** + * @brief Handles acknowledgment reports which contains additional informations in the data field + */ + void handleSpecialAcknowledgments(const uint8_t* data); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ From 09fc8babc451026c3e373ed4dc94b6ae60210a68 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 29 Apr 2022 08:35:06 +0200 Subject: [PATCH 038/115] fsfw update --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 9731dc1e..43aad118 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 9731dc1e619e6e52207174e67daf0468a675a5ec +Subproject commit 43aad11859d5ca772d4323b24626d7a94646f3fd From 73c653d21d9a30c1ea45a5c0139520d0857fccd5 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 29 Apr 2022 09:03:13 +0200 Subject: [PATCH 039/115] execution status code wip --- .../PlocSupervisorDefinitions.h | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 013a20d1..8fc98bc0 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1446,7 +1446,31 @@ class ExecutionReport : public VerificationReport { GPIO_HIGH = 0x11, GPIO_LOW = 0x12, TEST_PASSED = 0x13, - TEST_FAILED = 0x14 + TEST_FAILED = 0x14, + NOTHING_TODO = 0x100, + POWER_FAULT = 0x101, + INVALID_LENGTH = 0x102, + OUT_OF_RANGE = 0x103, + OUT_OF_HEAP_MEMORY = 0x104, + INVALID_STATE_TRANSITION = 0x105, + MPSOC_BOOT_FAILED = 0x106, + SP_NOT_AVAILABLE = 0x200, + SP_DATA_INSUFFICIENT = 0x201, + MPSOC_NOT_IN_RESET = 0x202, + FLASH_INIT_FAILED = 0x203, + FLASH_ERASE_FAILED = 0x204, + FLASH_WRITE_FAILED = 0x205, + FLASH_VERIFY_FAILED = 0x206, + CANNOT_ACCESS_TM = 0x207, + CANNOT_SEND_TM = 0x208, + PG_LOW = 0x300, + PG_5V_LOW = 0x301, + PG_0V85_LOW = 0x302, + PG_1V8_LOW = 0x303, + PG_MISC_LOW = 0x304, + PG_3V3_LOW = 0x305, + PG__MB_VAIO_LOW = 0x306, + PG_MB_MPSOCIO_LOW = 0x307 }; void printStatusInformation() { @@ -1536,6 +1560,41 @@ class ExecutionReport : public VerificationReport { sif::warning << "Supervisor execution report status: Test failed" << std::endl; break; } + case StatusCode::NOTHING_TODO: { + sif::warning + << "Supervisor execution report status: Nothing todo, not an error but a warning" + << std::endl; + break; + } + case StatusCode::POWER_FAULT: { + sif::warning << "Supervisor execution report status: Power fault" << std::endl; + break; + } + case StatusCode::INVALID_LENGTH: { + sif::warning << "Supervisor execution report status: Invalid length" << std::endl; + break; + } + case StatusCode::OUT_OF_RANGE: { + sif::warning + << "Supervisor execution report status: Out of range, lenght check of parameter failed" + << std::endl; + break; + } + case StatusCode::OUT_OF_HEAP_MEMORY: { + sif::warning + << "Supervisor execution report status: Out of heap memory" << std::endl; + break; + } + case StatusCode::INVALID_STATE_TRANSITION: { + sif::warning + << "Supervisor execution report status: Invalid state transition" << std::endl; + break; + } + case StatusCode::MPSOC_BOOT_FAILED: { + sif::warning + << "Supervisor execution report status: MPSoC boot failed" << std::endl; + break; + } default: sif::warning << "ExecutionReport::printStatusInformation: Invalid status code: 0x" << std::hex << static_cast(statusCode) << std::endl; From 9d4cb2ea8ddbb78a2047ec9ddf467244a4ee2744 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 13:31:58 +0200 Subject: [PATCH 040/115] xecution status code parsing --- .../devicedefinitions/PlocSupervisorDefinitions.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 8fc98bc0..c841b22c 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1595,6 +1595,16 @@ class ExecutionReport : public VerificationReport { << "Supervisor execution report status: MPSoC boot failed" << std::endl; break; } + case StatusCode::SP_NOT_AVAILABLE: { + sif::warning + << "Supervisor execution report status: SP not available" << std::endl; + break; + } + case StatusCode::SP_DATA_INSUFFICIENT: { + sif::warning + << "Supervisor execution report status: SP data insufficient" << std::endl; + break; + } default: sif::warning << "ExecutionReport::printStatusInformation: Invalid status code: 0x" << std::hex << static_cast(statusCode) << std::endl; From 02f352e51faa9165542693c18e9a1645e803aa3a Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 18:22:03 +0200 Subject: [PATCH 041/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index a457b001..e939f2b9 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit a457b001a33a2a561250544b3e9950885e1dac2e +Subproject commit e939f2b934b20f273a94a7c4d9665f7568cb9cee From cf20d8e94d12e0a64b2ff1230eedef70b14c6697 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 18:23:31 +0200 Subject: [PATCH 042/115] commented in time file writing again --- bsp_q7s/core/CoreController.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 0d166600..208999c2 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1708,11 +1708,11 @@ ReturnValue_t CoreController::timeFileHandler() { } std::string fileName = currMntPrefix + TIME_FILE; std::ofstream timeFile(fileName); -// if (not timeFile.good()) { -// sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) -// << std::endl; -// return RETURN_FAILED; -// } + if (not timeFile.good()) { + sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) + << std::endl; + return RETURN_FAILED; + } timeFile << "UNIX SECONDS: " << currentTime.tv_sec << std::endl; } return RETURN_OK; From cedc6bec234fca6a82eb55beed47ffe70dd57cac Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 22:55:01 +0200 Subject: [PATCH 043/115] gpio state sent with execution report --- bsp_q7s/core/CoreController.cpp | 10 +++++----- .../devicedefinitions/PlocMPSoCDefinitions.h | 3 +++ linux/devices/ploc/PlocMPSoCHandler.cpp | 16 ++++++++++++++++ linux/devices/ploc/PlocSupervisorHandler.cpp | 12 ++++++------ linux/devices/ploc/PlocSupervisorHandler.h | 4 ++-- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 208999c2..0d166600 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1708,11 +1708,11 @@ ReturnValue_t CoreController::timeFileHandler() { } std::string fileName = currMntPrefix + TIME_FILE; std::ofstream timeFile(fileName); - if (not timeFile.good()) { - sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) - << std::endl; - return RETURN_FAILED; - } +// if (not timeFile.good()) { +// sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) +// << std::endl; +// return RETURN_FAILED; +// } timeFile << "UNIX SECONDS: " << currentTime.tv_sec << std::endl; } return RETURN_OK; diff --git a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h index 8b93515d..ee16339d 100644 --- a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h +++ b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h @@ -29,6 +29,9 @@ static const DeviceCommandId_t TC_MODE_REPLAY = 16; static const DeviceCommandId_t TC_CAM_CMD_SEND = 17; static const DeviceCommandId_t TC_MODE_IDLE = 18; static const DeviceCommandId_t TM_CAM_CMD_RPT = 19; +static const DeviceCommandId_t SET_UART_TX_TRISTATE = 20; +static const DeviceCommandId_t RELEASE_UART_TX = 21; + // Will reset the sequence count of the OBSW static const DeviceCommandId_t OBSW_RESET_SEQ_COUNT = 50; diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index 9ca90bcc..da0b0071 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -99,6 +99,20 @@ void PlocMPSoCHandler::performOperationHook() { ReturnValue_t PlocMPSoCHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) { ReturnValue_t result = RETURN_OK; + switch(actionId) { + case mpsoc::SET_UART_TX_TRISTATE: { + uartIsolatorSwitch.pullLow(); + return EXECUTION_FINISHED; + break; + } + case mpsoc::RELEASE_UART_TX: { + uartIsolatorSwitch.pullHigh(); + return EXECUTION_FINISHED; + break; + default: + break; + } + } if (plocMPSoCHelperExecuting) { return MPSoCReturnValuesIF::MPSOC_HELPER_EXECUTING; @@ -267,6 +281,8 @@ void PlocMPSoCHandler::fillCommandAndReplyMap() { this->insertInCommandMap(mpsoc::TC_MODE_REPLAY); this->insertInCommandMap(mpsoc::TC_MODE_IDLE); this->insertInCommandMap(mpsoc::TC_CAM_CMD_SEND); + this->insertInCommandMap(mpsoc::RELEASE_UART_TX); + this->insertInCommandMap(mpsoc::SET_UART_TX_TRISTATE); this->insertInReplyMap(mpsoc::ACK_REPORT, 3, nullptr, mpsoc::SIZE_ACK_REPORT); this->insertInReplyMap(mpsoc::EXE_REPORT, 3, nullptr, mpsoc::SIZE_EXE_REPORT); this->insertInReplyMap(mpsoc::TM_MEMORY_READ_REPORT, 2, nullptr, mpsoc::SIZE_TM_MEM_READ_REPORT); diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index cc767037..ebebcb44 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -859,7 +859,6 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { } case supv::APID_ACK_SUCCESS: { setNextReplyId(); - handleSpecialAcknowledgments(data); break; } default: { @@ -887,6 +886,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) switch (apid) { case (supv::APID_EXE_SUCCESS): { + handleSpecialExecutionReport(data); break; } case (supv::APID_EXE_FAILURE): { @@ -1813,17 +1813,17 @@ ReturnValue_t PlocSupervisorHandler::eventSubscription() { return result; } -void PlocSupervisorHandler::handleSpecialAcknowledgments(const uint8_t* data) { +void PlocSupervisorHandler::handleSpecialExecutionReport(const uint8_t* data) { DeviceCommandId_t commandId = getPendingCommand(); switch(commandId) { case supv::READ_GPIO: { - supv::AcknowledgmentReport ack; - ack.addWholeData(data, supv::SIZE_ACK_REPORT); - uint16_t gpioState = ack.getStatusCode(); + supv::ExecutionReport exe; + exe.addWholeData(data, supv::SIZE_EXE_REPORT); + uint16_t gpioState = exe.getStatusCode(); #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 sif::info << "PlocsupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ - handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::ACK_REPORT); + handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::EXE_REPORT); break; } default: diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 9fa1bed3..efab17c0 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -351,9 +351,9 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t eventSubscription(); /** - * @brief Handles acknowledgment reports which contains additional informations in the data field + * @brief Handles execution reports which contains additional information in the data field */ - void handleSpecialAcknowledgments(const uint8_t* data); + void handleSpecialExecutionReport(const uint8_t* data); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ From 7afb8e90705d939044a08ed5d5aa184161feaa7f Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 23:22:44 +0200 Subject: [PATCH 044/115] execution status codes --- .../PlocSupervisorDefinitions.h | 114 +++++++++++++----- 1 file changed, 87 insertions(+), 27 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index c841b22c..23f3f758 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1304,8 +1304,8 @@ class VerificationReport : public TmPacket { uint16_t refApid = 0; size_t size = 0; uint8_t* refApidPtr = this->getPacketData(); - ReturnValue_t result = SerializeAdapter::deSerialize(&refApid, refApidPtr, &size, - SerializeIF::Endianness::BIG); + ReturnValue_t result = + SerializeAdapter::deSerialize(&refApid, refApidPtr, &size, SerializeIF::Endianness::BIG); if (result != HasReturnvaluesIF::RETURN_OK) { sif::debug << "ExecutionReport: Failed to deserialize reference APID field" << std::endl; return result; @@ -1378,8 +1378,8 @@ class AcknowledgmentReport : public VerificationReport { break; } case StatusCode::DEFAULT_NAK: { - sif::warning << "Supervisor acknowledgment report status: Default code for nak" << - std::endl; + sif::warning << "Supervisor acknowledgment report status: Default code for nak" + << std::endl; break; } case StatusCode::ROUTE_PACKET: { @@ -1456,20 +1456,21 @@ class ExecutionReport : public VerificationReport { MPSOC_BOOT_FAILED = 0x106, SP_NOT_AVAILABLE = 0x200, SP_DATA_INSUFFICIENT = 0x201, - MPSOC_NOT_IN_RESET = 0x202, - FLASH_INIT_FAILED = 0x203, - FLASH_ERASE_FAILED = 0x204, - FLASH_WRITE_FAILED = 0x205, - FLASH_VERIFY_FAILED = 0x206, - CANNOT_ACCESS_TM = 0x207, - CANNOT_SEND_TM = 0x208, + SP_MEMORY_ID_INVALID = 0x202, + MPSOC_NOT_IN_RESET = 0x203, + FLASH_INIT_FAILED = 0x204, + FLASH_ERASE_FAILED = 0x205, + FLASH_WRITE_FAILED = 0x206, + FLASH_VERIFY_FAILED = 0x207, + CANNOT_ACCESS_TM = 0x208, + CANNOT_SEND_TM = 0x209, PG_LOW = 0x300, PG_5V_LOW = 0x301, PG_0V85_LOW = 0x302, PG_1V8_LOW = 0x303, PG_MISC_LOW = 0x304, PG_3V3_LOW = 0x305, - PG__MB_VAIO_LOW = 0x306, + PG_MB_VAIO_LOW = 0x306, PG_MB_MPSOCIO_LOW = 0x307 }; @@ -1581,36 +1582,95 @@ class ExecutionReport : public VerificationReport { break; } case StatusCode::OUT_OF_HEAP_MEMORY: { - sif::warning - << "Supervisor execution report status: Out of heap memory" << std::endl; + sif::warning << "Supervisor execution report status: Out of heap memory" << std::endl; break; } case StatusCode::INVALID_STATE_TRANSITION: { - sif::warning - << "Supervisor execution report status: Invalid state transition" << std::endl; + sif::warning << "Supervisor execution report status: Invalid state transition" << std::endl; break; } case StatusCode::MPSOC_BOOT_FAILED: { - sif::warning - << "Supervisor execution report status: MPSoC boot failed" << std::endl; + sif::warning << "Supervisor execution report status: MPSoC boot failed" << std::endl; break; } case StatusCode::SP_NOT_AVAILABLE: { - sif::warning - << "Supervisor execution report status: SP not available" << std::endl; - break; - } + sif::warning << "Supervisor execution report status: SP not available" << std::endl; + break; + } case StatusCode::SP_DATA_INSUFFICIENT: { - sif::warning - << "Supervisor execution report status: SP data insufficient" << std::endl; - break; - } + sif::warning << "Supervisor execution report status: SP data insufficient" << std::endl; + break; + } + case StatusCode::SP_MEMORY_ID_INVALID: { + sif::warning << "Supervisor execution report status: SP data insufficient" << std::endl; + break; + } + case StatusCode::MPSOC_NOT_IN_RESET: { + sif::warning << "Supervisor execution report status: MPSoC not in reset" << std::endl; + break; + } + case StatusCode::FLASH_INIT_FAILED: { + sif::warning << "Supervisor execution report status: Flash init failed" << std::endl; + break; + } + case StatusCode::FLASH_ERASE_FAILED: { + sif::warning << "Supervisor execution report status: Flash erase failed" << std::endl; + break; + } + case StatusCode::FLASH_WRITE_FAILED: { + sif::warning << "Supervisor execution report status: Flash write failed" << std::endl; + break; + } + case StatusCode::FLASH_VERIFY_FAILED: { + sif::warning << "Supervisor execution report status: Flash verify failed" << std::endl; + break; + } + case StatusCode::CANNOT_ACCESS_TM: { + sif::warning << "Supervisor execution report status: Can not access tm" << std::endl; + break; + } + case StatusCode::CANNOT_SEND_TM: { + sif::warning << "Supervisor execution report status: Can not access tm" << std::endl; + break; + } + case StatusCode::PG_LOW: { + sif::warning << "Supervisor execution report status: PG low" << std::endl; + break; + } + case StatusCode::PG_5V_LOW: { + sif::warning << "Supervisor execution report status: PG 5V low" << std::endl; + break; + } + case StatusCode::PG_0V85_LOW: { + sif::warning << "Supervisor execution report status: PG 0V85 low" << std::endl; + break; + } + case StatusCode::PG_1V8_LOW: { + sif::warning << "Supervisor execution report status: PG 1V8 low" << std::endl; + break; + } + case StatusCode::PG_MISC_LOW: { + sif::warning << "Supervisor execution report status: PG misc low" << std::endl; + break; + } + case StatusCode::PG_3V3_LOW: { + sif::warning << "Supervisor execution report status: PG 3V3 low" << std::endl; + break; + } + case StatusCode::PG_MB_VAIO_LOW: { + sif::warning << "Supervisor execution report status: PG mb vaio low" << std::endl; + break; + } + case StatusCode::PG_MB_MPSOCIO_LOW: { + sif::warning << "Supervisor execution report status: PG mb mpsocio low" << std::endl; + break; + } default: sif::warning << "ExecutionReport::printStatusInformation: Invalid status code: 0x" << std::hex << static_cast(statusCode) << std::endl; break; - } } + } }; /** From 816dc43214da8b4b765c91373f2c1e6973c1d777 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 23:34:28 +0200 Subject: [PATCH 045/115] restructuring execution report handling --- linux/devices/ploc/PlocSupervisorHandler.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index ebebcb44..90b9c14f 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -827,10 +827,14 @@ ReturnValue_t PlocSupervisorHandler::verifyPacket(const uint8_t* start, size_t f } ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { - ReturnValue_t result = RETURN_OK; + using namespace supv; + ReturnValue_t result = RETURN_OK; - result = verifyPacket(data, supv::SIZE_ACK_REPORT); - if (result == SupvReturnValuesIF::CRC_FAILURE) { + AcknowledgmentReport ack; + ack.addWholeData(data, SIZE_ACK_REPORT); + + result = ack.checkCrc(); + if (result != RETURN_OK) { sif::error << "PlocSupervisorHandler::handleAckReport: CRC failure" << std::endl; nextReplyId = supv::NONE; replyRawReplyIfnotWiretapped(data, supv::SIZE_ACK_REPORT); @@ -842,7 +846,9 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { uint16_t apid = (*(data) << 8 | *(data + 1)) & APID_MASK; - switch (apid) { + result = ack.checkApid(); + + switch (result) { case supv::APID_ACK_FAILURE: { // TODO: Interpretation of status field in acknowledgment report sif::debug << "PlocSupervisorHandler::handleAckReport: Received Ack failure report" From 1635e40c795087a074bbe387397c8df7989e70f9 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Fri, 29 Apr 2022 23:36:09 +0200 Subject: [PATCH 046/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index e939f2b9..2b8fa356 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit e939f2b934b20f273a94a7c4d9665f7568cb9cee +Subproject commit 2b8fa356c9f9de5fa4037eb836662f509327138b From 8ecbeb058c93edd4be1b512f2bcfebd6317f8eac Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 09:26:55 +0200 Subject: [PATCH 047/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index a457b001..f263c2b9 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit a457b001a33a2a561250544b3e9950885e1dac2e +Subproject commit f263c2b9fe0d3134103c7450bab850499d714a72 From 6524f924c9289fda38fe4ab110be566509490b1a Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 09:53:42 +0200 Subject: [PATCH 048/115] run generator scripts --- generators/bsp_q7s_events.csv | 4 ++-- generators/events/translateEvents.cpp | 6 +++--- linux/fsfwconfig/events/translateEvents.cpp | 6 +++--- tmtc | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index c32eaa69..00bcd51e 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -111,7 +111,7 @@ 12002;0x2ee2;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux\devices\ploc\PlocSupervisorHandler.h 12003;0x2ee3;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;linux\devices\ploc\PlocSupervisorHandler.h 12004;0x2ee4;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux\devices\ploc\PlocSupervisorHandler.h -12005;0x2ee5;SUPV_HELPER_EXECUTING;LOW;Supervisor helper currently executing a command;linux\devices\ploc\PlocSupervisorHandler.h +12005;0x2ee5;SUPV_MPSOC_SHUWDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux\devices\ploc\PlocSupervisorHandler.h 12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s\memory\SdCardManager.h 12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s\memory\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 @@ -187,7 +187,7 @@ 13609;0x3529;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux\devices\ploc\PlocSupvHelper.h 13610;0x352a;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h 13611;0x352b;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux\devices\ploc\PlocSupvHelper.h -13612;0x352c;SUPV_EXE_FAILURE_REPORT;LOW;Supervisor received execution failure report P1: Internal state of supervisor;linux\devices\ploc\PlocSupvHelper.h +13612;0x352c;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux\devices\ploc\PlocSupvHelper.h 13613;0x352d;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\PlocSupvHelper.h 13614;0x352e;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\PlocSupvHelper.h 13615;0x352f;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\PlocSupvHelper.h diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index a829cb26..7f0d289f 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** * @brief Auto-generated event translation file. Contains 198 translations. * @details - * Generated on: 2022-04-24 12:20:25 + * Generated on: 2022-04-30 09:34:28 */ #include "translateEvents.h" @@ -118,7 +118,7 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE"; const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE"; const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; -const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; +const char *SUPV_MPSOC_SHUWDOWN_BUILD_FAILED_STRING = "SUPV_MPSOC_SHUWDOWN_BUILD_FAILED"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; @@ -429,7 +429,7 @@ const char *translateEvents(Event event) { case (12004): return SUPV_CRC_FAILURE_EVENT_STRING; case (12005): - return SUPV_HELPER_EXECUTING_STRING; + return SUPV_MPSOC_SHUWDOWN_BUILD_FAILED_STRING; case (12100): return SANITIZATION_FAILED_STRING; case (12101): diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index a829cb26..7f0d289f 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** * @brief Auto-generated event translation file. Contains 198 translations. * @details - * Generated on: 2022-04-24 12:20:25 + * Generated on: 2022-04-30 09:34:28 */ #include "translateEvents.h" @@ -118,7 +118,7 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE"; const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE"; const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT"; -const char *SUPV_HELPER_EXECUTING_STRING = "SUPV_HELPER_EXECUTING"; +const char *SUPV_MPSOC_SHUWDOWN_BUILD_FAILED_STRING = "SUPV_MPSOC_SHUWDOWN_BUILD_FAILED"; const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED"; const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD"; const char *SEND_MRAM_DUMP_FAILED_STRING = "SEND_MRAM_DUMP_FAILED"; @@ -429,7 +429,7 @@ const char *translateEvents(Event event) { case (12004): return SUPV_CRC_FAILURE_EVENT_STRING; case (12005): - return SUPV_HELPER_EXECUTING_STRING; + return SUPV_MPSOC_SHUWDOWN_BUILD_FAILED_STRING; case (12100): return SANITIZATION_FAILED_STRING; case (12101): diff --git a/tmtc b/tmtc index f263c2b9..991d828e 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit f263c2b9fe0d3134103c7450bab850499d714a72 +Subproject commit 991d828e887546af9bd8f592cf53a1e5dc68e031 From e1ffa972326c5891cf7ebf37452d0b897b91c0b2 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 11:08:36 +0200 Subject: [PATCH 049/115] improved acknowledgment and execution handling in supervisor handler --- bsp_q7s/core/ObjectFactory.cpp | 4 +- .../PlocSupervisorDefinitions.h | 94 ++++++------ linux/devices/ploc/PlocSupervisorHandler.cpp | 138 +++++++++--------- 3 files changed, 121 insertions(+), 115 deletions(-) diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index d676c4b9..6987ecc1 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -637,7 +637,7 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF) { #if OBSW_ADD_PLOC_MPSOC == 1 consumer << "0x" << std::hex << objects::PLOC_MPSOC_HANDLER; auto gpioConfigMPSoC = new GpiodRegularByLineName(q7s::gpioNames::ENABLE_MPSOC_UART, - consumer.str(), Direction::OUT, Levels::HIGH); + consumer.str(), Direction::OUT, Levels::LOW); auto mpsocGpioCookie = new GpioCookie; mpsocGpioCookie->addGpio(gpioIds::ENABLE_MPSOC_UART, gpioConfigMPSoC); gpioComIF->addGpios(mpsocGpioCookie); @@ -654,7 +654,7 @@ void ObjectFactory::createPayloadComponents(LinuxLibgpioIF* gpioComIF) { #if OBSW_ADD_PLOC_SUPERVISOR == 1 consumer << "0x" << std::hex << objects::PLOC_SUPERVISOR_HANDLER; auto gpioConfigSupv = new GpiodRegularByLineName(q7s::gpioNames::ENABLE_SUPV_UART, consumer.str(), - Direction::OUT, Levels::HIGH); + Direction::OUT, Levels::LOW); auto supvGpioCookie = new GpioCookie; supvGpioCookie->addGpio(gpioIds::ENABLE_SUPV_UART, gpioConfigSupv); gpioComIF->addGpios(supvGpioCookie); diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 23f3f758..dbc7812c 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1425,6 +1425,8 @@ class ExecutionReport : public VerificationReport { } private: + static constexpr char STATUS_PRINTOUT_PREFIX[] = "Supervisor execution failure report status: "; + enum class StatusCode : uint16_t { OK = 0x0, INIT_ERROR = 0x1, @@ -1478,191 +1480,191 @@ class ExecutionReport : public VerificationReport { StatusCode statusCode = static_cast(getStatusCode()); switch (statusCode) { case StatusCode::OK: { - sif::warning << "Supervisor execution report status: Ok" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Ok" << std::endl; break; } case StatusCode::INIT_ERROR: { - sif::warning << "Supervisor execution report status: Init error" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Init error" << std::endl; break; } case StatusCode::BAD_PARAM: { - sif::warning << "Supervisor execution report status: Bad param" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Bad param" << std::endl; break; } case StatusCode::NOT_INITIALIZED: { - sif::warning << "Supervisor execution report status: Not initialized" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Not initialized" << std::endl; break; } case StatusCode::BAD_PERIPH_ID: { - sif::warning << "Supervisor execution report status: Bad periph ID" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Bad periph ID" << std::endl; break; } case StatusCode::TIMEOUT: { - sif::warning << "Supervisor execution report status: Timeout" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Timeout" << std::endl; break; } case StatusCode::RX_ERROR: { - sif::warning << "Supervisor execution report status: RX error" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "RX error" << std::endl; break; } case StatusCode::TX_ERROR: { - sif::warning << "Supervisor execution report status: TX error" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "TX error" << std::endl; break; } case StatusCode::BUF_EMPTY: { - sif::warning << "Supervisor execution report status: Buf empty" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Buf empty" << std::endl; break; } case StatusCode::BUF_FULL: { - sif::warning << "Supervisor execution report status: Buf full" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Buf full" << std::endl; break; } case StatusCode::NAK: { - sif::warning << "Supervisor execution report status: Nak, default error code" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Nak, default error code" << std::endl; break; } case StatusCode::ARB_LOST: { - sif::warning << "Supervisor execution report status: Arb lost" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Arb lost" << std::endl; break; } case StatusCode::BUSY: { - sif::warning << "Supervisor execution report status: Busy" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Busy" << std::endl; break; } case StatusCode::NOT_IMPLEMENTED: { - sif::warning << "Supervisor execution report status: Not implemented" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Not implemented" << std::endl; break; } case StatusCode::ALIGNEMENT_ERROR: { - sif::warning << "Supervisor execution report status: Alignment error" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Alignment error" << std::endl; break; } case StatusCode::PERIPH_ERR: { - sif::warning << "Supervisor execution report status: Periph error" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Periph error" << std::endl; break; } case StatusCode::FAILED_LATCH: { - sif::warning << "Supervisor execution report status: Failed latch" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Failed latch" << std::endl; break; } case StatusCode::GPIO_HIGH: { - sif::warning << "Supervisor execution report status: GPIO high" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "GPIO high" << std::endl; break; } case StatusCode::GPIO_LOW: { - sif::warning << "Supervisor execution report status: GPIO low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "GPIO low" << std::endl; break; } case StatusCode::TEST_PASSED: { - sif::warning << "Supervisor execution report status: Test passed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Test passed" << std::endl; break; } case StatusCode::TEST_FAILED: { - sif::warning << "Supervisor execution report status: Test failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Test failed" << std::endl; break; } case StatusCode::NOTHING_TODO: { sif::warning - << "Supervisor execution report status: Nothing todo, not an error but a warning" + << STATUS_PRINTOUT_PREFIX << "Nothing todo, not an error but a warning" << std::endl; break; } case StatusCode::POWER_FAULT: { - sif::warning << "Supervisor execution report status: Power fault" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Power fault" << std::endl; break; } case StatusCode::INVALID_LENGTH: { - sif::warning << "Supervisor execution report status: Invalid length" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Invalid length" << std::endl; break; } case StatusCode::OUT_OF_RANGE: { sif::warning - << "Supervisor execution report status: Out of range, lenght check of parameter failed" + << STATUS_PRINTOUT_PREFIX << "Out of range, lenght check of parameter failed" << std::endl; break; } case StatusCode::OUT_OF_HEAP_MEMORY: { - sif::warning << "Supervisor execution report status: Out of heap memory" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Out of heap memory" << std::endl; break; } case StatusCode::INVALID_STATE_TRANSITION: { - sif::warning << "Supervisor execution report status: Invalid state transition" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Invalid state transition" << std::endl; break; } case StatusCode::MPSOC_BOOT_FAILED: { - sif::warning << "Supervisor execution report status: MPSoC boot failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "MPSoC boot failed" << std::endl; break; } case StatusCode::SP_NOT_AVAILABLE: { - sif::warning << "Supervisor execution report status: SP not available" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "SP not available" << std::endl; break; } case StatusCode::SP_DATA_INSUFFICIENT: { - sif::warning << "Supervisor execution report status: SP data insufficient" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "SP data insufficient" << std::endl; break; } case StatusCode::SP_MEMORY_ID_INVALID: { - sif::warning << "Supervisor execution report status: SP data insufficient" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "SP data insufficient" << std::endl; break; } case StatusCode::MPSOC_NOT_IN_RESET: { - sif::warning << "Supervisor execution report status: MPSoC not in reset" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "MPSoC not in reset" << std::endl; break; } case StatusCode::FLASH_INIT_FAILED: { - sif::warning << "Supervisor execution report status: Flash init failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Flash init failed" << std::endl; break; } case StatusCode::FLASH_ERASE_FAILED: { - sif::warning << "Supervisor execution report status: Flash erase failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Flash erase failed" << std::endl; break; } case StatusCode::FLASH_WRITE_FAILED: { - sif::warning << "Supervisor execution report status: Flash write failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Flash write failed" << std::endl; break; } case StatusCode::FLASH_VERIFY_FAILED: { - sif::warning << "Supervisor execution report status: Flash verify failed" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Flash verify failed" << std::endl; break; } case StatusCode::CANNOT_ACCESS_TM: { - sif::warning << "Supervisor execution report status: Can not access tm" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Can not access tm" << std::endl; break; } case StatusCode::CANNOT_SEND_TM: { - sif::warning << "Supervisor execution report status: Can not access tm" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Can not access tm" << std::endl; break; } case StatusCode::PG_LOW: { - sif::warning << "Supervisor execution report status: PG low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG low" << std::endl; break; } case StatusCode::PG_5V_LOW: { - sif::warning << "Supervisor execution report status: PG 5V low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG 5V low" << std::endl; break; } case StatusCode::PG_0V85_LOW: { - sif::warning << "Supervisor execution report status: PG 0V85 low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG 0V85 low" << std::endl; break; } case StatusCode::PG_1V8_LOW: { - sif::warning << "Supervisor execution report status: PG 1V8 low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG 1V8 low" << std::endl; break; } case StatusCode::PG_MISC_LOW: { - sif::warning << "Supervisor execution report status: PG misc low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG misc low" << std::endl; break; } case StatusCode::PG_3V3_LOW: { - sif::warning << "Supervisor execution report status: PG 3V3 low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG 3V3 low" << std::endl; break; } case StatusCode::PG_MB_VAIO_LOW: { - sif::warning << "Supervisor execution report status: PG mb vaio low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG mb vaio low" << std::endl; break; } case StatusCode::PG_MB_MPSOCIO_LOW: { - sif::warning << "Supervisor execution report status: PG mb mpsocio low" << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "PG mb mpsocio low" << std::endl; break; } default: diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 90b9c14f..b24446f7 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -162,7 +162,7 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d switch (deviceCommand) { case GET_HK_REPORT: { sif::warning << "PlocSupervisorHandler::buildCommandFromCommand: Housekeeping report is " - << "faulty. Needs to be fixed in vorago software" << std::endl; + << "faulty. Needs to be fixed in vorago software" << std::endl; prepareEmptyCmd(APID_GET_HK_REPORT); result = RETURN_OK; break; @@ -428,11 +428,10 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite switch (command->first) { case GET_HK_REPORT: { enabledReplies = 3; - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, HK_REPORT); + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, HK_REPORT); if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << HK_REPORT << " not in replyMap" << std::endl; + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << HK_REPORT + << " not in replyMap" << std::endl; } break; } @@ -448,8 +447,8 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite } case GET_LATCHUP_STATUS_REPORT: { enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - LATCHUP_REPORT); + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, LATCHUP_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << LATCHUP_REPORT << " not in replyMap" << std::endl; @@ -458,8 +457,8 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite } case LOGGING_REQUEST_COUNTERS: { enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - LOGGING_REPORT); + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, LOGGING_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << LOGGING_REPORT << " not in replyMap" << std::endl; @@ -468,18 +467,17 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite } case REQUEST_ADC_REPORT: { enabledReplies = 3; - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - ADC_REPORT); + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, ADC_REPORT); if (result != RETURN_OK) { - sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " - << ADC_REPORT << " not in replyMap" << std::endl; + sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << ADC_REPORT + << " not in replyMap" << std::endl; } break; } case FIRST_MRAM_DUMP: { enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket - result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, - FIRST_MRAM_DUMP); + result = + DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, FIRST_MRAM_DUMP); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << FIRST_MRAM_DUMP << " not in replyMap" << std::endl; @@ -539,15 +537,13 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite * Every command causes at least one acknowledgment and one execution report. Therefore both * replies will be enabled here. */ - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, ACK_REPORT); + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, ACK_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << ACK_REPORT << " not in replyMap" << std::endl; } - result = - DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, EXE_REPORT); + result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true, EXE_REPORT); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id " << EXE_REPORT << " not in replyMap" << std::endl; @@ -792,7 +788,8 @@ void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { if (result != RETURN_OK) { triggerEvent(SUPV_MPSOC_SHUWDOWN_BUILD_FAILED); sif::warning << "PlocSupervisorHandler::handleEvent: Failed to build MPSoC shutdown " - "command" << std::endl; + "command" + << std::endl; return; } } @@ -806,14 +803,14 @@ void PlocSupervisorHandler::handleEvent(EventMessage* eventMessage) { void PlocSupervisorHandler::setExecutionTimeout(DeviceCommandId_t command) { using namespace supv; - switch(command) { - case FIRST_MRAM_DUMP: - case CONSECUTIVE_MRAM_DUMP: - executionTimeout.setTimeout(MRAM_DUMP_EXECUTION_TIMEOUT); - break; - default: - executionTimeout.setTimeout(EXECUTION_DEFAULT_TIMEOUT); - break; + switch (command) { + case FIRST_MRAM_DUMP: + case CONSECUTIVE_MRAM_DUMP: + executionTimeout.setTimeout(MRAM_DUMP_EXECUTION_TIMEOUT); + break; + default: + executionTimeout.setTimeout(EXECUTION_DEFAULT_TIMEOUT); + break; } } @@ -828,10 +825,10 @@ ReturnValue_t PlocSupervisorHandler::verifyPacket(const uint8_t* start, size_t f ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { using namespace supv; - ReturnValue_t result = RETURN_OK; + ReturnValue_t result = RETURN_OK; - AcknowledgmentReport ack; - ack.addWholeData(data, SIZE_ACK_REPORT); + AcknowledgmentReport ack; + ack.addWholeData(data, SIZE_ACK_REPORT); result = ack.checkCrc(); if (result != RETURN_OK) { @@ -844,12 +841,10 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { return RETURN_OK; } - uint16_t apid = (*(data) << 8 | *(data + 1)) & APID_MASK; - result = ack.checkApid(); switch (result) { - case supv::APID_ACK_FAILURE: { + case SupvReturnValuesIF::CRC_FAILURE: { // TODO: Interpretation of status field in acknowledgment report sif::debug << "PlocSupervisorHandler::handleAckReport: Received Ack failure report" << std::endl; @@ -863,43 +858,49 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { result = IGNORE_REPLY_DATA; break; } - case supv::APID_ACK_SUCCESS: { + case RETURN_OK: { setNextReplyId(); break; } + case SupvReturnValuesIF::INVALID_APID: + sif::warning << "PlocSupervisorHandler::handleAckReport: Invalid APID in Ack report" + << std::endl; + sendFailureReport(supv::ACK_REPORT, result); + disableAllReplies(); + nextReplyId = supv::NONE; + result = IGNORE_REPLY_DATA; + break; default: { - sif::debug << "PlocSupervisorHandler::handleAckReport: Invalid APID in Ack report" - << std::endl; + sif::error << "PlocSupervisorHandler::handleAckReport: APID parsing failed" << std::endl; result = RETURN_FAILED; break; } } - return result; } ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) { + using namespace supv; ReturnValue_t result = RETURN_OK; - result = verifyPacket(data, supv::SIZE_EXE_REPORT); - if (result == SupvReturnValuesIF::CRC_FAILURE) { + ExecutionReport exe; + exe.addWholeData(data, SIZE_EXE_REPORT); + + result = exe.checkCrc(); + if (result != RETURN_OK) { sif::error << "PlocSupervisorHandler::handleExecutionReport: CRC failure" << std::endl; nextReplyId = supv::NONE; return result; } - uint16_t apid = (*(data) << 8 | *(data + 1)) & APID_MASK; + result = exe.checkApid(); - switch (apid) { - case (supv::APID_EXE_SUCCESS): { - handleSpecialExecutionReport(data); + switch (result) { + case (RETURN_OK): { + handleSpecialExecutionReport(data); break; } - case (supv::APID_EXE_FAILURE): { - // TODO: Interpretation of status field in execution report - sif::error - << "PlocSupervisorHandler::handleExecutionReport: Received execution failure report" - << std::endl; + case (SupvReturnValuesIF::RECEIVED_EXE_FAILURE): { DeviceCommandId_t commandId = getPendingCommand(); if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { triggerEvent(SUPV_EXE_FAILURE, commandId); @@ -907,9 +908,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) sif::debug << "PlocSupervisorHandler::handleExecutionReport: Unknown command id" << std::endl; } - uint16_t status = *(data + EXE_STATUS_OFFSET) << 8 | *(data + EXE_STATUS_OFFSET + 1); - sif::info << "Execution status: 0x" << std::hex << status << std::endl; - sendFailureReport(supv::EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); + sendFailureReport(EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); disableExeReportReply(); result = IGNORE_REPLY_DATA; break; @@ -1038,7 +1037,8 @@ ReturnValue_t PlocSupervisorHandler::handleBootStatusReport(const uint8_t* data) nextReplyId = supv::EXE_REPORT; #if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_PLOC_SUPERVISOR == 1 - sif::info << "PlocSupervisorHandler::handleBootStatusReport: SoC State (0 - off, 1 - booting, 3 - operating): " + sif::info << "PlocSupervisorHandler::handleBootStatusReport: SoC State (0 - off, 1 - booting, 3 " + "- operating, 4 - Shutdown): " << static_cast(bootStatusReport.socState.value) << std::endl; sif::info << "PlocSupervisorHandler::handleBootStatusReport: Power Cycles: " << static_cast(bootStatusReport.powerCycles.value) << std::endl; @@ -1167,7 +1167,8 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { size_t size = loggingReport.getSerializedSize(); result = loggingReport.deSerialize(&dataField, &size, SerializeIF::Endianness::BIG); if (result != RETURN_OK) { - sif::warning << "PlocSupervisorHandler::handleLoggingReport: Deserialization failed" << std::endl; + sif::warning << "PlocSupervisorHandler::handleLoggingReport: Deserialization failed" + << std::endl; } loggingReport.setValidityBufferGeneration(true); loggingReport.setValidity(true, true); @@ -1594,7 +1595,9 @@ ReturnValue_t PlocSupervisorHandler::parseMramPackets(const uint8_t* packet, siz *foundLen = remainingSize; disableAllReplies(); bufferTop = 0; - sif::info << "PlocSupervisorHandler::parseMramPackets: Can not find MRAM packet in space packet buffer" << std::endl; + sif::info << "PlocSupervisorHandler::parseMramPackets: Can not find MRAM packet in space " + "packet buffer" + << std::endl; return SupvReturnValuesIF::MRAM_PACKET_PARSING_FAILURE; } } @@ -1679,7 +1682,8 @@ void PlocSupervisorHandler::increaseExpectedMramReplies(DeviceCommandId_t id) { ReturnValue_t PlocSupervisorHandler::checkMramPacketApid() { uint16_t apid = (spacePacketBuffer[0] << 8 | spacePacketBuffer[1]) & supv::APID_MASK; if (apid != supv::APID_MRAM_DUMP_TM) { - sif::warning << "PlocSupervisorHandler::checkMramPacketApid: 0x" << std::hex << apid << std::endl; + sif::warning << "PlocSupervisorHandler::checkMramPacketApid: 0x" << std::hex << apid + << std::endl; return SupvReturnValuesIF::NO_MRAM_PACKET; } return APERIODIC_REPLY; @@ -1821,18 +1825,18 @@ ReturnValue_t PlocSupervisorHandler::eventSubscription() { void PlocSupervisorHandler::handleSpecialExecutionReport(const uint8_t* data) { DeviceCommandId_t commandId = getPendingCommand(); - switch(commandId) { - case supv::READ_GPIO: { - supv::ExecutionReport exe; - exe.addWholeData(data, supv::SIZE_EXE_REPORT); - uint16_t gpioState = exe.getStatusCode(); + switch (commandId) { + case supv::READ_GPIO: { + supv::ExecutionReport exe; + exe.addWholeData(data, supv::SIZE_EXE_REPORT); + uint16_t gpioState = exe.getStatusCode(); #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 - sif::info << "PlocsupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; + sif::info << "PlocsupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ - handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::EXE_REPORT); - break; - } - default: - break; + handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::EXE_REPORT); + break; + } + default: + break; } } From cf4305be55fcb2cf5ae45000a66f371948eb1e7f Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 11:10:56 +0200 Subject: [PATCH 050/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 991d828e..d7c0f99a 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 991d828e887546af9bd8f592cf53a1e5dc68e031 +Subproject commit d7c0f99a210028e4e98619a77e1cb9d549d77bd3 From 6636f42dc2d690d7f38772724f60fcf86739d06e Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 15:34:28 +0200 Subject: [PATCH 051/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index d7c0f99a..bd3d5396 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit d7c0f99a210028e4e98619a77e1cb9d549d77bd3 +Subproject commit bd3d5396da9a9be90ef824b8fd068e63d9d12ee4 From 729b8f547c0e3b68bf6297ca65b65ce76b67e900 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:19:00 +0200 Subject: [PATCH 052/115] time file writing commended in again --- bsp_q7s/core/CoreController.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 0d166600..208999c2 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1708,11 +1708,11 @@ ReturnValue_t CoreController::timeFileHandler() { } std::string fileName = currMntPrefix + TIME_FILE; std::ofstream timeFile(fileName); -// if (not timeFile.good()) { -// sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) -// << std::endl; -// return RETURN_FAILED; -// } + if (not timeFile.good()) { + sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) + << std::endl; + return RETURN_FAILED; + } timeFile << "UNIX SECONDS: " << currentTime.tv_sec << std::endl; } return RETURN_OK; From 016ca8cb7e1377658377520d8f1cd07c3c179b4d Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:20:33 +0200 Subject: [PATCH 053/115] decreased acs handler task stack size --- bsp_q7s/core/InitMission.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index 2cd6486e..db5fa02a 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -115,7 +115,7 @@ void initmission::initTasks() { #if OBSW_ADD_ACS_HANDLERS == 1 PeriodicTaskIF* acsTask = factory->createPeriodicTask( - "ACS_CTRL", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE * 4, 0.4, missedDeadlineFunc); + "ACS_CTRL", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE * 2, 0.4, missedDeadlineFunc); #if OBSW_ADD_GPS == 1 result = acsTask->addComponent(objects::GPS_CONTROLLER); if (result != HasReturnvaluesIF::RETURN_OK) { From 6d322c6e7895537f988011cf686b6e6d22cecaa1 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:21:59 +0200 Subject: [PATCH 054/115] run clang format script --- bsp_q7s/main.cpp | 1 - .../devicedefinitions/PlocMPSoCDefinitions.h | 1 - .../PlocSupervisorDefinitions.h | 10 +++---- .../devicedefinitions/SupvReturnValuesIF.h | 6 ++-- linux/devices/ploc/PlocMPSoCHandler.cpp | 28 +++++++++---------- linux/devices/ploc/PlocSupervisorHandler.h | 5 ++-- linux/devices/ploc/PlocSupvHelper.h | 10 +++---- linux/devices/startracker/StrHelper.cpp | 2 +- mission/tmtc/VirtualChannel.cpp | 4 +-- mission/utility/Filenaming.cpp | 6 ++-- mission/utility/Filenaming.h | 1 + mission/utility/ProgressPrinter.cpp | 4 ++- mission/utility/ProgressPrinter.h | 2 -- 13 files changed, 38 insertions(+), 42 deletions(-) diff --git a/bsp_q7s/main.cpp b/bsp_q7s/main.cpp index 81616954..dfcaebf0 100644 --- a/bsp_q7s/main.cpp +++ b/bsp_q7s/main.cpp @@ -6,7 +6,6 @@ #include "simple/simple.h" #endif - #include /** diff --git a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h index ee16339d..b2efb035 100644 --- a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h +++ b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h @@ -32,7 +32,6 @@ static const DeviceCommandId_t TM_CAM_CMD_RPT = 19; static const DeviceCommandId_t SET_UART_TX_TRISTATE = 20; static const DeviceCommandId_t RELEASE_UART_TX = 21; - // Will reset the sequence count of the OBSW static const DeviceCommandId_t OBSW_RESET_SEQ_COUNT = 50; diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index dbc7812c..4ce2b2d0 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1564,9 +1564,8 @@ class ExecutionReport : public VerificationReport { break; } case StatusCode::NOTHING_TODO: { - sif::warning - << STATUS_PRINTOUT_PREFIX << "Nothing todo, not an error but a warning" - << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Nothing todo, not an error but a warning" + << std::endl; break; } case StatusCode::POWER_FAULT: { @@ -1578,9 +1577,8 @@ class ExecutionReport : public VerificationReport { break; } case StatusCode::OUT_OF_RANGE: { - sif::warning - << STATUS_PRINTOUT_PREFIX << "Out of range, lenght check of parameter failed" - << std::endl; + sif::warning << STATUS_PRINTOUT_PREFIX << "Out of range, lenght check of parameter failed" + << std::endl; break; } case StatusCode::OUT_OF_HEAP_MEMORY: { diff --git a/linux/devices/devicedefinitions/SupvReturnValuesIF.h b/linux/devices/devicedefinitions/SupvReturnValuesIF.h index 39fa4554..307deb0e 100644 --- a/linux/devices/devicedefinitions/SupvReturnValuesIF.h +++ b/linux/devices/devicedefinitions/SupvReturnValuesIF.h @@ -50,9 +50,11 @@ class SupvReturnValuesIF { static const ReturnValue_t FILENAME_TOO_LONG = MAKE_RETURN_CODE(0xB0); //! [EXPORT] : [COMMENT] Received update status report with invalid packet length field static const ReturnValue_t UPDATE_STATUS_REPORT_INVALID_LENGTH = MAKE_RETURN_CODE(0xB1); - //! [EXPORT] : [COMMENT] Update status report does not contain expected CRC. There might be a bit flip in the update memory region. + //! [EXPORT] : [COMMENT] Update status report does not contain expected CRC. There might be a bit + //! flip in the update memory region. static const ReturnValue_t UPDATE_CRC_FAILURE = MAKE_RETURN_CODE(0xB2); - //! [EXPORT] : [COMMENT] Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command) + //! [EXPORT] : [COMMENT] Supervisor helper task ist currently executing a command (wait until + //! helper tas has finished or interrupt by sending the terminate command) static const ReturnValue_t SUPV_HELPER_EXECUTING = MAKE_RETURN_CODE(0xB3); }; diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index da0b0071..0d943cc2 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -99,19 +99,19 @@ void PlocMPSoCHandler::performOperationHook() { ReturnValue_t PlocMPSoCHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) { ReturnValue_t result = RETURN_OK; - switch(actionId) { - case mpsoc::SET_UART_TX_TRISTATE: { - uartIsolatorSwitch.pullLow(); - return EXECUTION_FINISHED; - break; - } - case mpsoc::RELEASE_UART_TX: { - uartIsolatorSwitch.pullHigh(); - return EXECUTION_FINISHED; - break; - default: - break; - } + switch (actionId) { + case mpsoc::SET_UART_TX_TRISTATE: { + uartIsolatorSwitch.pullLow(); + return EXECUTION_FINISHED; + break; + } + case mpsoc::RELEASE_UART_TX: { + uartIsolatorSwitch.pullHigh(); + return EXECUTION_FINISHED; + break; + default: + break; + } } if (plocMPSoCHelperExecuting) { @@ -165,7 +165,7 @@ void PlocMPSoCHandler::doStartUp() { powerState = PowerState::ON; setMode(_MODE_TO_ON); uartIsolatorSwitch.pullHigh(); -#endif/* not MSPOC_JTAG_BOOT == 1 */ +#endif /* not MSPOC_JTAG_BOOT == 1 */ #else powerState = PowerState::ON; setMode(_MODE_TO_ON); diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index efab17c0..17371021 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -2,16 +2,16 @@ #define MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ #include "OBSWConfig.h" +#include "PlocSupvHelper.h" #include "bsp_q7s/memory/SdCardManager.h" #include "devices/powerSwitcherList.h" #include "fsfw/devicehandlers/DeviceHandlerBase.h" +#include "fsfw/timemanager/Countdown.h" #include "fsfw_hal/linux/gpio/Gpio.h" #include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h" #include "fsfw_hal/linux/uart/UartComIF.h" -#include "fsfw/timemanager/Countdown.h" #include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" #include "linux/devices/devicedefinitions/SupvReturnValuesIF.h" -#include "PlocSupvHelper.h" /** * @brief This is the device handler for the supervisor of the PLOC which is programmed by @@ -59,7 +59,6 @@ class PlocSupervisorHandler : public DeviceHandlerBase { virtual ReturnValue_t doSendReadHook() override; private: - static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_SUPERVISOR_HANDLER; //! [EXPORT] : [COMMENT] PLOC supervisor crc failure in telemetry packet diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index f8002baf..e4f0d40a 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -64,13 +64,11 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Execution report failure //! P1: static const Event SUPV_EXE_FAILURE_REPORT = MAKE_EVENT(12, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with other apid - //! P1: Apid of received space packet - //! P2: Internal state of supervisor helper + //! [EXPORT] : [COMMENT] Supervisor expected acknowledgment report but received space packet with + //! other apid P1: Apid of received space packet P2: Internal state of supervisor helper static const Event SUPV_ACK_INVALID_APID = MAKE_EVENT(13, severity::LOW); - //! [EXPORT] : [COMMENT] Supervisor helper expected execution report but received space packet with other apid - //! P1: Apid of received space packet - //! P2: Internal state of supervisor helper + //! [EXPORT] : [COMMENT] Supervisor helper expected execution report but received space packet + //! with other apid P1: Apid of received space packet P2: Internal state of supervisor helper static const Event SUPV_EXE_INVALID_APID = MAKE_EVENT(14, severity::LOW); //! [EXPORT] : [COMMENT] Failed to receive acknowledgment report //! P1: Return value diff --git a/linux/devices/startracker/StrHelper.cpp b/linux/devices/startracker/StrHelper.cpp index ebe7b077..b2f02f24 100644 --- a/linux/devices/startracker/StrHelper.cpp +++ b/linux/devices/startracker/StrHelper.cpp @@ -6,9 +6,9 @@ #include "OBSWConfig.h" #include "fsfw/timemanager/Countdown.h" #include "linux/devices/devicedefinitions/StarTrackerDefinitions.h" +#include "mission/utility/Filenaming.h" #include "mission/utility/ProgressPrinter.h" #include "mission/utility/Timestamp.h" -#include "mission/utility/Filenaming.h" StrHelper::StrHelper(object_id_t objectId) : SystemObject(objectId) {} diff --git a/mission/tmtc/VirtualChannel.cpp b/mission/tmtc/VirtualChannel.cpp index b2abf3f0..2dc32d0f 100644 --- a/mission/tmtc/VirtualChannel.cpp +++ b/mission/tmtc/VirtualChannel.cpp @@ -30,8 +30,8 @@ ReturnValue_t VirtualChannel::performOperation() { uint8_t data[50] = {0xa}; result = ptme->writeToVc(vcId, data, sizeof(data)); if (result != RETURN_OK) { - sif::warning << "VirtualChannel::performOperation: Failed to send test data" << std::endl; - return result; + sif::warning << "VirtualChannel::performOperation: Failed to send test data" << std::endl; + return result; } while (tmQueue->receiveMessage(&message) == RETURN_OK) { diff --git a/mission/utility/Filenaming.cpp b/mission/utility/Filenaming.cpp index b64d1f01..3f4ec997 100644 --- a/mission/utility/Filenaming.cpp +++ b/mission/utility/Filenaming.cpp @@ -1,11 +1,11 @@ #include "Filenaming.h" + #include "Timestamp.h" -Filenaming::Filenaming() { -} +Filenaming::Filenaming() {} std::string Filenaming::generateAbsoluteFilename(std::string path, std::string filename, - bool addTimestamp) { + bool addTimestamp) { std::string absoluteName; Timestamp timestamp; if (addTimestamp) { diff --git a/mission/utility/Filenaming.h b/mission/utility/Filenaming.h index 201cf78a..9c7b1cb8 100644 --- a/mission/utility/Filenaming.h +++ b/mission/utility/Filenaming.h @@ -20,6 +20,7 @@ class Filenaming { */ static std::string generateAbsoluteFilename(std::string path, std::string filename, bool addTimestamp); + private: Filenaming(); }; diff --git a/mission/utility/ProgressPrinter.cpp b/mission/utility/ProgressPrinter.cpp index 9505d7b1..50e2d14b 100644 --- a/mission/utility/ProgressPrinter.cpp +++ b/mission/utility/ProgressPrinter.cpp @@ -1,5 +1,7 @@ -#include #include "ProgressPrinter.h" + +#include + #include "fsfw/serviceinterface/ServiceInterfaceStream.h" ProgressPrinter::ProgressPrinter(std::string name, uint32_t numSteps, float percentageResolution) diff --git a/mission/utility/ProgressPrinter.h b/mission/utility/ProgressPrinter.h index 302aaa28..9db27c7d 100644 --- a/mission/utility/ProgressPrinter.h +++ b/mission/utility/ProgressPrinter.h @@ -10,7 +10,6 @@ */ class ProgressPrinter { public: - static constexpr float HALF_PERCENT = 0.5; static constexpr float ONE_PERCENT = 1; static constexpr float FIVE_PERCENT = 5; @@ -34,7 +33,6 @@ class ProgressPrinter { void print(uint32_t step); private: - std::string name = ""; uint32_t numSteps = 0; float nextProgressPrint = 0; From 20138d52b105a2cca46d953c2414e699d6275ca2 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:23:51 +0200 Subject: [PATCH 055/115] decreased stack size of supervisor helper task --- bsp_q7s/core/InitMission.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp_q7s/core/InitMission.cpp b/bsp_q7s/core/InitMission.cpp index db5fa02a..56146446 100644 --- a/bsp_q7s/core/InitMission.cpp +++ b/bsp_q7s/core/InitMission.cpp @@ -173,7 +173,7 @@ void initmission::initTasks() { #if OBSW_ADD_PLOC_SUPERVISOR == 1 PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( - "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE * 8, 1.0, missedDeadlineFunc); + "PLOC_SUPV_HELPER", 10, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, missedDeadlineFunc); result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); From 03b7b802c53d40b8964b5b0ad1806c9f42b22ff1 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:33:34 +0200 Subject: [PATCH 056/115] removed ptme test data sending --- mission/tmtc/VirtualChannel.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/mission/tmtc/VirtualChannel.cpp b/mission/tmtc/VirtualChannel.cpp index 2dc32d0f..9d413ca7 100644 --- a/mission/tmtc/VirtualChannel.cpp +++ b/mission/tmtc/VirtualChannel.cpp @@ -27,13 +27,6 @@ ReturnValue_t VirtualChannel::performOperation() { ReturnValue_t result = RETURN_OK; TmTcMessage message; - uint8_t data[50] = {0xa}; - result = ptme->writeToVc(vcId, data, sizeof(data)); - if (result != RETURN_OK) { - sif::warning << "VirtualChannel::performOperation: Failed to send test data" << std::endl; - return result; - } - while (tmQueue->receiveMessage(&message) == RETURN_OK) { store_address_t storeId = message.getStorageId(); const uint8_t* data = nullptr; From 3ff709a814fd9133bb89939c416ae530d1cace89 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Sat, 30 Apr 2022 16:52:22 +0200 Subject: [PATCH 057/115] removed changes can rx task --- .../libcsp/src/drivers/can/can_socketcan.c | 297 +++++++++--------- 1 file changed, 144 insertions(+), 153 deletions(-) diff --git a/thirdparty/libcsp/src/drivers/can/can_socketcan.c b/thirdparty/libcsp/src/drivers/can/can_socketcan.c index b3146870..00d6444e 100644 --- a/thirdparty/libcsp/src/drivers/can/can_socketcan.c +++ b/thirdparty/libcsp/src/drivers/can/can_socketcan.c @@ -19,192 +19,183 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* SocketCAN driver */ -#include #include -#include + +#include +#include + +#include +#include +#include +#include #include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + +#include +#include #ifdef CSP_HAVE_LIBSOCKETCAN #include #endif -#define CAN_RX_TASK_PRIO 80 - static struct can_socketcan_s { - int socket; - csp_iface_t interface; + int socket; + csp_iface_t interface; } socketcan[1] = { - { - .interface = - { - .name = "CAN", - .nexthop = csp_can_tx, - .mtu = CSP_CAN_MTU, - .driver = &socketcan[0], - }, - }, + { + .interface = { + .name = "CAN", + .nexthop = csp_can_tx, + .mtu = CSP_CAN_MTU, + .driver = &socketcan[0], + }, + }, }; -static void *socketcan_rx_thread(void *parameters) { - struct can_frame frame; - int nbytes; +static void * socketcan_rx_thread(void * parameters) +{ + struct can_frame frame; + int nbytes; - while (1) { - /* Read CAN frame */ - nbytes = read(socketcan[0].socket, &frame, sizeof(frame)); - if (nbytes < 0) { - csp_log_error("read: %s", strerror(errno)); - continue; - } + while (1) { + /* Read CAN frame */ + nbytes = read(socketcan[0].socket, &frame, sizeof(frame)); + if (nbytes < 0) { + csp_log_error("read: %s", strerror(errno)); + continue; + } - if (nbytes != sizeof(frame)) { - csp_log_warn("Read incomplete CAN frame"); - continue; - } + if (nbytes != sizeof(frame)) { + csp_log_warn("Read incomplete CAN frame"); + continue; + } - /* Frame type */ - if (frame.can_id & (CAN_ERR_FLAG | CAN_RTR_FLAG) || !(frame.can_id & CAN_EFF_FLAG)) { - /* Drop error and remote frames */ - csp_log_warn("Discarding ERR/RTR/SFF frame"); - continue; - } + /* Frame type */ + if (frame.can_id & (CAN_ERR_FLAG | CAN_RTR_FLAG) || !(frame.can_id & CAN_EFF_FLAG)) { + /* Drop error and remote frames */ + csp_log_warn("Discarding ERR/RTR/SFF frame"); + continue; + } - /* Strip flags */ - frame.can_id &= CAN_EFF_MASK; + /* Strip flags */ + frame.can_id &= CAN_EFF_MASK; - /* Call RX callbacsp_can_rx_frameck */ - csp_can_rx(&socketcan[0].interface, frame.can_id, frame.data, frame.can_dlc, NULL); - } + /* Call RX callbacsp_can_rx_frameck */ + csp_can_rx(&socketcan[0].interface, frame.can_id, frame.data, frame.can_dlc, NULL); + } - /* We should never reach this point */ - pthread_exit(NULL); + /* We should never reach this point */ + pthread_exit(NULL); } -static int create_receive_thread() { - pthread_t rx_thread; - pthread_attr_t attributes; - if (pthread_attr_init(&attributes) != 0) { - return 1; - } - if (pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED) != 0) { - return 1; - } - if (pthread_attr_setschedpolicy(&attributes, SCHED_FIFO) != 0) { - return 1; - } - struct sched_param schedule_params; - schedule_params.__sched_priority = CAN_RX_TASK_PRIO; - if (pthread_attr_setschedparam(&attributes, &schedule_params) != 0) { - return 1; - } - if (pthread_create(&rx_thread, NULL, socketcan_rx_thread, NULL) != 0) { - csp_log_error("pthread_create: %s", strerror(errno)); - return 1; - } - return 0; + +int csp_can_tx_frame(csp_iface_t *interface, uint32_t id, const uint8_t * data, uint8_t dlc) +{ + struct can_frame frame; + int i, tries = 0; + memset(&frame, 0, sizeof(frame)); + if (dlc > 8) + return -1; + + /* Copy identifier */ + frame.can_id = id | CAN_EFF_FLAG; + + /* Copy data to frame */ + for (i = 0; i < dlc; i++) + frame.data[i] = data[i]; + + /* Set DLC */ + frame.can_dlc = dlc; + + /* Send frame */ + while (write(socketcan[0].socket, &frame, sizeof(frame)) != sizeof(frame)) { + if (++tries < 1000 && errno == ENOBUFS) { + /* Wait 10 ms and try again */ + usleep(10000); + } else { + csp_log_error("write: %s", strerror(errno)); + break; + } + } + + return 0; } -int csp_can_tx_frame(csp_iface_t *interface, uint32_t id, const uint8_t *data, uint8_t dlc) { - struct can_frame frame; - int i, tries = 0; - memset(&frame, 0, sizeof(frame)); - if (dlc > 8) return -1; +csp_iface_t * csp_can_socketcan_init(const char * ifc, int bitrate, int promisc) +{ + struct ifreq ifr; + struct sockaddr_can addr; + pthread_t rx_thread; - /* Copy identifier */ - frame.can_id = id | CAN_EFF_FLAG; - - /* Copy data to frame */ - for (i = 0; i < dlc; i++) frame.data[i] = data[i]; - - /* Set DLC */ - frame.can_dlc = dlc; - - /* Send frame */ - while (write(socketcan[0].socket, &frame, sizeof(frame)) != sizeof(frame)) { - if (++tries < 1000 && errno == ENOBUFS) { - /* Wait 10 ms and try again */ - usleep(10000); - } else { - csp_log_error("write: %s", strerror(errno)); - break; - } - } - - return 0; -} - -csp_iface_t *csp_can_socketcan_init(const char *ifc, int bitrate, int promisc) { - struct ifreq ifr; - struct sockaddr_can addr; - - // printf("-I-: Initiating CAN interface %s\n", ifc); + //printf("-I-: Initiating CAN interface %s\n", ifc); #ifdef CSP_HAVE_LIBSOCKETCAN - /* Set interface up */ - if (bitrate > 0) { - can_do_stop(ifc); - can_set_bitrate(ifc, bitrate); - can_set_restart_ms(ifc, 100); - can_do_start(ifc); - } + /* Set interface up */ + if (bitrate > 0) { + can_do_stop(ifc); + can_set_bitrate(ifc, bitrate); + can_set_restart_ms(ifc, 100); + can_do_start(ifc); + } #endif - /* Create socket */ - if ((socketcan[0].socket = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { - csp_log_error("socket: %s", strerror(errno)); - return NULL; - } + /* Create socket */ + if ((socketcan[0].socket = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + csp_log_error("socket: %s", strerror(errno)); + return NULL; + } - /* Locate interface */ - strncpy(ifr.ifr_name, ifc, IFNAMSIZ - 1); - if (ioctl(socketcan[0].socket, SIOCGIFINDEX, &ifr) < 0) { - csp_log_error("ioctl: %s", strerror(errno)); - return NULL; - } - memset(&addr, 0, sizeof(addr)); - /* Bind the socket to CAN interface */ - addr.can_family = AF_CAN; - addr.can_ifindex = ifr.ifr_ifindex; - if (bind(socketcan[0].socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - csp_log_error("bind: %s", strerror(errno)); - return NULL; - } + /* Locate interface */ + strncpy(ifr.ifr_name, ifc, IFNAMSIZ - 1); + if (ioctl(socketcan[0].socket, SIOCGIFINDEX, &ifr) < 0) { + csp_log_error("ioctl: %s", strerror(errno)); + return NULL; + } + memset(&addr, 0, sizeof(addr)); + /* Bind the socket to CAN interface */ + addr.can_family = AF_CAN; + addr.can_ifindex = ifr.ifr_ifindex; + if (bind(socketcan[0].socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + csp_log_error("bind: %s", strerror(errno)); + return NULL; + } - /* Set filter mode */ - if (promisc == 0) { - struct can_filter filter; - filter.can_id = CFP_MAKE_DST(csp_get_address()); - filter.can_mask = CFP_MAKE_DST((1 << CFP_HOST_SIZE) - 1); + /* Set filter mode */ + if (promisc == 0) { - if (setsockopt(socketcan[0].socket, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter)) < 0) { - csp_log_error("setsockopt: %s", strerror(errno)); - return NULL; - } - } + struct can_filter filter; + filter.can_id = CFP_MAKE_DST(csp_get_address()); + filter.can_mask = CFP_MAKE_DST((1 << CFP_HOST_SIZE) - 1); - if (create_receive_thread() != 0) { - return NULL; - } + if (setsockopt(socketcan[0].socket, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter)) < 0) { + csp_log_error("setsockopt: %s", strerror(errno)); + return NULL; + } - csp_iflist_add(&socketcan[0].interface); + } - return &socketcan[0].interface; + /* Create receive thread */ + if (pthread_create(&rx_thread, NULL, socketcan_rx_thread, NULL) != 0) { + csp_log_error("pthread_create: %s", strerror(errno)); + return NULL; + } + + csp_iflist_add(&socketcan[0].interface); + + return &socketcan[0].interface; } From 49b0825f6399abd3e183cb852235ab53392e9fc3 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 2 May 2022 09:56:15 +0200 Subject: [PATCH 058/115] added doSendReadHook to prevent com if polling when com if is used by helper task --- linux/devices/ploc/PlocMPSoCHandler.cpp | 13 +++++++++++-- linux/devices/ploc/PlocMPSoCHandler.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index 0d943cc2..f1430580 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -830,6 +830,14 @@ size_t PlocMPSoCHandler::getNextReplyLength(DeviceCommandId_t commandId) { return replyLen; } +ReturnValue_t PlocMPSoCHandler::doSendReadHook() { + // Prevent DHB from polling UART during commands executed by the mpsoc helper task + if (plocMPSoCHelperExecuting) { + return RETURN_FAILED; + } + return RETURN_OK; +} + MessageQueueIF* PlocMPSoCHandler::getCommandQueuePtr() { return commandActionHelperQueue; } void PlocMPSoCHandler::stepSuccessfulReceived(ActionId_t actionId, uint8_t step) { return; } @@ -840,12 +848,13 @@ void PlocMPSoCHandler::stepFailedReceived(ActionId_t actionId, uint8_t step, case supv::START_MPSOC: sif::warning << "PlocMPSoCHandler::stepFailedReceived: Failed to start MPSoC" << std::endl; powerState = PowerState::OFF; + setMode(_MODE_SHUT_DOWN); break; case supv::SHUTDOWN_MPSOC: triggerEvent(MPSOC_SHUTDOWN_FAILED); sif::warning << "PlocMPSoCHandler::stepFailedReceived: Failed to shutdown MPSoC" << std::endl; - // TODO: Setting state to on or off here? - powerState = PowerState::ON; + // FDIR will intercept event and switch PLOC power off + powerState = PowerState::OFF; break; default: sif::debug << "PlocMPSoCHandler::stepFailedReceived: Received unexpected action reply" diff --git a/linux/devices/ploc/PlocMPSoCHandler.h b/linux/devices/ploc/PlocMPSoCHandler.h index d5ea231b..92b5d03f 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.h +++ b/linux/devices/ploc/PlocMPSoCHandler.h @@ -76,6 +76,7 @@ class PlocMPSoCHandler : public DeviceHandlerBase, public CommandsActionsIF { uint8_t expectedReplies = 1, bool useAlternateId = false, DeviceCommandId_t alternateReplyID = 0) override; size_t getNextReplyLength(DeviceCommandId_t deviceCommand) override; + virtual ReturnValue_t doSendReadHook() override; private: static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PLOC_MPSOC_HANDLER; From 3c858d26f1e4f96ea8ec15c1d49647232ea3da2b Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 2 May 2022 13:47:59 +0200 Subject: [PATCH 059/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index bd3d5396..fe833edc 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit bd3d5396da9a9be90ef824b8fd068e63d9d12ee4 +Subproject commit fe833edc91a56842e25253e5364944524dc310a8 From 690b41777b57397de0f2148b6e3ce55b1e3ae34f Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 2 May 2022 13:48:34 +0200 Subject: [PATCH 060/115] bugfix pcdu handler command queue reading --- mission/devices/PCDUHandler.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mission/devices/PCDUHandler.cpp b/mission/devices/PCDUHandler.cpp index 10d12cf8..260c99c2 100644 --- a/mission/devices/PCDUHandler.cpp +++ b/mission/devices/PCDUHandler.cpp @@ -100,14 +100,10 @@ void PCDUHandler::readCommandQueue() { for (result = commandQueue->receiveMessage(&command); result == RETURN_OK; result = commandQueue->receiveMessage(&command)) { - result = commandQueue->receiveMessage(&command); - if (result != RETURN_OK) { - return; - } - result = poolManager.handleHousekeepingMessage(&command); + sif::debug << "PCDUHandler: Received message" << std::endl; if (result == RETURN_OK) { - return; + continue; } } } From d1a9924acce06b4ce149f21d6d41ff3e8aa9fdfb Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 2 May 2022 14:43:17 +0200 Subject: [PATCH 061/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index fe833edc..69621f5f 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit fe833edc91a56842e25253e5364944524dc310a8 +Subproject commit 69621f5f2f80b98534baad3fc8234dc14eea5ca5 From 7a6b45b102007fc411dd4aff500f26c3dbef7f68 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 2 May 2022 14:43:53 +0200 Subject: [PATCH 062/115] removed debug print --- fsfw | 2 +- mission/devices/PCDUHandler.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/fsfw b/fsfw index 43aad118..d61fe7db 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 43aad11859d5ca772d4323b24626d7a94646f3fd +Subproject commit d61fe7db93b37dd6652dbfee5b7c93f400ac5a11 diff --git a/mission/devices/PCDUHandler.cpp b/mission/devices/PCDUHandler.cpp index 260c99c2..8e9f1918 100644 --- a/mission/devices/PCDUHandler.cpp +++ b/mission/devices/PCDUHandler.cpp @@ -101,7 +101,6 @@ void PCDUHandler::readCommandQueue() { for (result = commandQueue->receiveMessage(&command); result == RETURN_OK; result = commandQueue->receiveMessage(&command)) { result = poolManager.handleHousekeepingMessage(&command); - sif::debug << "PCDUHandler: Received message" << std::endl; if (result == RETURN_OK) { continue; } From 464821cc6f26242205c1c514fc8d835307776759 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 3 May 2022 14:59:23 +0200 Subject: [PATCH 063/115] supervisor set time during start up --- fsfw | 2 +- .../PlocSupervisorDefinitions.h | 8 ++ linux/devices/ploc/PlocMPSoCHandler.cpp | 22 ++++-- linux/devices/ploc/PlocMPSoCHandler.h | 3 +- linux/devices/ploc/PlocSupervisorHandler.cpp | 76 ++++++++++++++----- linux/devices/ploc/PlocSupervisorHandler.h | 19 ++++- 6 files changed, 97 insertions(+), 33 deletions(-) diff --git a/fsfw b/fsfw index d61fe7db..789668ae 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit d61fe7db93b37dd6652dbfee5b7c93f400ac5a11 +Subproject commit 789668ae50a26cda299cfd125011f9fb345824d9 diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 4ce2b2d0..23c6b6e1 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -1705,6 +1705,14 @@ class BootStatusReport : public StaticLocalDataSet { */ class HkSet : public StaticLocalDataSet { public: + + enum class SocState { + OFF = 0, + BOOTING = 1, + OPERATIONAL = 3, + SHUTDOWN = 4 + }; + HkSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, HK_SET_ID) {} HkSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, HK_SET_ID)) {} diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index f1430580..d6eeca54 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -333,7 +333,7 @@ ReturnValue_t PlocMPSoCHandler::scanForReply(const uint8_t* start, size_t remain sequenceCount++; uint16_t recvSeqCnt = (*(start + 2) << 8 | *(start + 3)) & PACKET_SEQUENCE_COUNT_MASK; if (recvSeqCnt != sequenceCount) { - triggerEvent(MPSOC_HANDLER_SEQ_CNT_MISMATCH, sequenceCount, recvSeqCnt); + triggerEvent(MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH, sequenceCount, recvSeqCnt); sequenceCount = recvSeqCnt; } return result; @@ -845,17 +845,19 @@ void PlocMPSoCHandler::stepSuccessfulReceived(ActionId_t actionId, uint8_t step) void PlocMPSoCHandler::stepFailedReceived(ActionId_t actionId, uint8_t step, ReturnValue_t returnCode) { switch (actionId) { - case supv::START_MPSOC: + case supv::START_MPSOC: { sif::warning << "PlocMPSoCHandler::stepFailedReceived: Failed to start MPSoC" << std::endl; + // This usually happens when the supervisor handler is in off mode powerState = PowerState::OFF; - setMode(_MODE_SHUT_DOWN); + setMode(MODE_OFF); break; - case supv::SHUTDOWN_MPSOC: + } + case supv::SHUTDOWN_MPSOC: { triggerEvent(MPSOC_SHUTDOWN_FAILED); sif::warning << "PlocMPSoCHandler::stepFailedReceived: Failed to shutdown MPSoC" << std::endl; - // FDIR will intercept event and switch PLOC power off powerState = PowerState::OFF; break; + } default: sif::debug << "PlocMPSoCHandler::stepFailedReceived: Received unexpected action reply" << std::endl; @@ -999,15 +1001,19 @@ void PlocMPSoCHandler::handleActionCommandFailure(ActionId_t actionId) { } switch (powerState) { case PowerState::BOOTING: { - sif::warning << "PlocMPSoCHandler::handleActionCommandFailure: Failed to boot MPSoC" + sif::info << "PlocMPSoCHandler::handleActionCommandFailure: MPSoC boot command failed" << std::endl; - powerState = PowerState::OFF; + // This is commonly the case when the MPSoC is already operational. Thus the power state is + // set to on here + powerState = PowerState::ON; break; } case PowerState::SHUTDOWN: { + // FDIR will intercept event and switch PLOC power off + triggerEvent(MPSOC_SHUTDOWN_FAILED); sif::warning << "PlocMPSoCHandler::handleActionCommandFailure: Failed to shutdown MPSoC" << std::endl; - powerState = PowerState::ON; + powerState = PowerState::OFF; break; } default: diff --git a/linux/devices/ploc/PlocMPSoCHandler.h b/linux/devices/ploc/PlocMPSoCHandler.h index 92b5d03f..da71dd47 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.h +++ b/linux/devices/ploc/PlocMPSoCHandler.h @@ -14,6 +14,7 @@ #include "fsfw_hal/linux/uart/UartComIF.h" #include "linux/devices/devicedefinitions/MPSoCReturnValuesIF.h" #include "linux/devices/devicedefinitions/PlocMPSoCDefinitions.h" +#include "linux/devices/devicedefinitions/PlocSupervisorDefinitions.h" /** * @brief This is the device handler for the MPSoC of the payload computer. @@ -95,7 +96,7 @@ class PlocMPSoCHandler : public DeviceHandlerBase, public CommandsActionsIF { static const Event MPSOC_HANDLER_CRC_FAILURE = MAKE_EVENT(4, severity::LOW); //! [EXPORT] : [COMMENT] Packet sequence count in received space packet does not match expected //! count P1: Expected sequence count P2: Received sequence count - static const Event MPSOC_HANDLER_SEQ_CNT_MISMATCH = MAKE_EVENT(5, severity::LOW); + static const Event MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH = MAKE_EVENT(5, severity::LOW); //! [EXPORT] : [COMMENT] Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and //! thus also to shutdown the supervisor. static const Event MPSOC_SHUTDOWN_FAILED = MAKE_EVENT(6, severity::HIGH); diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index b24446f7..de039c23 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -137,13 +137,37 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, } void PlocSupervisorHandler::doStartUp() { +#ifdef XIPHOS_Q7S + switch (startupState) { + case StartupState::OFF: { + bootTimeout.resetTimer(); + startupState = StartupState::ON; + break; + } + case StartupState::BOOTING: { + if (bootTimeout.hasTimedOut()) { + uartIsolatorSwitch.pullHigh(); + startupState = StartupState::SET_TIME; + } + } + case StartupState::SET_TIME_EXECUTING: + break; + case StartupState::ON: { + setMode(_MODE_TO_ON); + break; + } + default: + break; + } +#else setMode(_MODE_TO_ON); - uartIsolatorSwitch.pullHigh(); +#endif } void PlocSupervisorHandler::doShutDown() { setMode(_MODE_POWER_DOWN); uartIsolatorSwitch.pullLow(); + startupState = StartupState::OFF; } ReturnValue_t PlocSupervisorHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) { @@ -151,6 +175,11 @@ ReturnValue_t PlocSupervisorHandler::buildNormalDeviceCommand(DeviceCommandId_t* } ReturnValue_t PlocSupervisorHandler::buildTransitionDeviceCommand(DeviceCommandId_t* id) { + if (startupState == StartupState::SET_TIME) { + *id = supv::SET_TIME_REF; + startupState = StartupState::SET_TIME_EXECUTING; + return RETURN_OK; + } return NOTHING_TO_SEND; } @@ -161,8 +190,6 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d ReturnValue_t result = RETURN_FAILED; switch (deviceCommand) { case GET_HK_REPORT: { - sif::warning << "PlocSupervisorHandler::buildCommandFromCommand: Housekeeping report is " - << "faulty. Needs to be fixed in vorago software" << std::endl; prepareEmptyCmd(APID_GET_HK_REPORT); result = RETURN_OK; break; @@ -676,7 +703,9 @@ ReturnValue_t PlocSupervisorHandler::interpretDeviceReply(DeviceCommandId_t id, void PlocSupervisorHandler::setNormalDatapoolEntriesInvalid() {} -uint32_t PlocSupervisorHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 500; } +uint32_t PlocSupervisorHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { + return 7000; +} ReturnValue_t PlocSupervisorHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) { @@ -897,20 +926,12 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) switch (result) { case (RETURN_OK): { - handleSpecialExecutionReport(data); + handleExecutionSuccessReport(data); break; } case (SupvReturnValuesIF::RECEIVED_EXE_FAILURE): { - DeviceCommandId_t commandId = getPendingCommand(); - if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { - triggerEvent(SUPV_EXE_FAILURE, commandId); - } else { - sif::debug << "PlocSupervisorHandler::handleExecutionReport: Unknown command id" - << std::endl; - } - sendFailureReport(EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); - disableExeReportReply(); - result = IGNORE_REPLY_DATA; + handleExecutionFailureReport(); + result = RETURN_OK; break; } default: { @@ -919,9 +940,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) break; } } - nextReplyId = supv::NONE; - return result; } @@ -1567,6 +1586,7 @@ void PlocSupervisorHandler::disableExeReportReply() { DeviceReplyInfo* info = &(iter->second); info->delayCycles = 0; info->command = deviceCommandMap.end(); + info->active = false; /* Expected replies is set to one here. The value will set to 0 in replyToReply() */ info->command->second.expectedReplies = 1; } @@ -1823,7 +1843,7 @@ ReturnValue_t PlocSupervisorHandler::eventSubscription() { return result; } -void PlocSupervisorHandler::handleSpecialExecutionReport(const uint8_t* data) { +void PlocSupervisorHandler::handleExecutionSuccessReport(const uint8_t* data) { DeviceCommandId_t commandId = getPendingCommand(); switch (commandId) { case supv::READ_GPIO: { @@ -1831,12 +1851,30 @@ void PlocSupervisorHandler::handleSpecialExecutionReport(const uint8_t* data) { exe.addWholeData(data, supv::SIZE_EXE_REPORT); uint16_t gpioState = exe.getStatusCode(); #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 - sif::info << "PlocsupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; + sif::info << "PlocSupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::EXE_REPORT); break; } + case supv::SET_TIME_REF: { + if (startupState == StartupState::SET_TIME_EXECUTING) { + startupState = StartupState::ON; + } + break; + } default: break; } } + +void PlocSupervisorHandler::handleExecutionFailureReport() { + using namespace supv; + DeviceCommandId_t commandId = getPendingCommand(); + if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { + triggerEvent(SUPV_EXE_FAILURE, commandId); + } else { + sif::debug << "PlocSupervisorHandler::handleExecutionReport: Unknown command id" << std::endl; + } + sendFailureReport(EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); + disableExeReportReply(); +} diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 17371021..c3de0c4e 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -82,6 +82,17 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint32_t EXECUTION_DEFAULT_TIMEOUT = 5000; // 30 s static const uint32_t MRAM_DUMP_EXECUTION_TIMEOUT = 30000; + // 2 s + static const uint32_t BOOT_TIMEOUT = 2000; + enum class StartupState: uint8_t { + OFF, + BOOTING, + SET_TIME, + SET_TIME_EXECUTING, + ON + }; + + StartupState startupState = StartupState::OFF; uint8_t commandBuffer[supv::MAX_COMMAND_SIZE]; @@ -133,6 +144,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { bool plocSupvHelperExecuting = false; Countdown executionTimeout = Countdown(EXECUTION_DEFAULT_TIMEOUT, false); + // Vorago nees some time to boot properly + Countdown bootTimeout = Countdown(BOOT_TIMEOUT); /** * @brief Adjusts the timeout of the execution report dependent on command @@ -349,10 +362,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { uint8_t* memoryId, uint32_t* startAddress); ReturnValue_t eventSubscription(); - /** - * @brief Handles execution reports which contains additional information in the data field - */ - void handleSpecialExecutionReport(const uint8_t* data); + void handleExecutionSuccessReport(const uint8_t* data); + void handleExecutionFailureReport(); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ From 70884d3a46391bf1b53cd5c93efc18fb0f1e2081 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 3 May 2022 15:28:11 +0200 Subject: [PATCH 064/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 69621f5f..c7a19f71 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 69621f5f2f80b98534baad3fc8234dc14eea5ca5 +Subproject commit c7a19f7122fccf3888a4f49d0c88f593bad1e91a From 5380ed216b516c62864e6e0f4ea895e7a5bef4b0 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 3 May 2022 15:36:38 +0200 Subject: [PATCH 065/115] supervisor do startup fix --- linux/devices/ploc/PlocSupervisorHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index de039c23..a07489b5 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -141,7 +141,7 @@ void PlocSupervisorHandler::doStartUp() { switch (startupState) { case StartupState::OFF: { bootTimeout.resetTimer(); - startupState = StartupState::ON; + startupState = StartupState::BOOTING; break; } case StartupState::BOOTING: { From 475f6f1687306f5f7fbc1d41f4b149ea2cbe13d8 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 4 May 2022 12:49:43 +0200 Subject: [PATCH 066/115] removed unused ploc commands, fix in logging report reply --- bsp_te0720_1cfa/InitMission.cpp | 4 ++ bsp_te0720_1cfa/ObjectFactory.cpp | 1 - .../PlocSupervisorDefinitions.h | 62 ++++--------------- linux/devices/ploc/PlocSupervisorHandler.cpp | 42 ++++++++----- linux/devices/ploc/PlocSupervisorHandler.h | 6 +- linux/devices/ploc/PlocSupvHelper.cpp | 1 + linux/fsfwconfig/OBSWConfig.h.in | 2 +- tmtc | 2 +- 8 files changed, 51 insertions(+), 69 deletions(-) diff --git a/bsp_te0720_1cfa/InitMission.cpp b/bsp_te0720_1cfa/InitMission.cpp index edd9332c..f50864b8 100644 --- a/bsp_te0720_1cfa/InitMission.cpp +++ b/bsp_te0720_1cfa/InitMission.cpp @@ -98,12 +98,14 @@ void initmission::initTasks() { } #endif /* OBSW_ADD_PLOC_MPSOC == 1*/ +#if OBSW_ADD_PLOC_SUPERVISOR == 1 PeriodicTaskIF* supvHelperTask = factory->createPeriodicTask( "PLOC_SUPV_HELPER", 20, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc); result = supvHelperTask->addComponent(objects::PLOC_SUPERVISOR_HELPER); if (result != HasReturnvaluesIF::RETURN_OK) { initmission::printAddObjectError("PLOC_SUPV_HELPER", objects::PLOC_SUPERVISOR_HELPER); } +#endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */ auto taskStarter = [](std::vector& taskVector, std::string name) { for (const auto& task : taskVector) { @@ -119,7 +121,9 @@ void initmission::initTasks() { tmtcDistributor->startTask(); tmtcBridgeTask->startTask(); tmtcPollingTask->startTask(); +#if OBSW_ADD_PLOC_SUPERVISOR == 1 supvHelperTask->startTask(); +#endif /* OBSW_ADD_PLOC_SUPERVISOR == 1 */ #if OBSW_ADD_PLOC_MPSOC == 1 mpsocHelperTask->startTask(); #endif /* OBSW_ADD_PLOC_MPSOC == 1 */ diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index 8d5c3ee4..e2df1a26 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -52,7 +52,6 @@ new UartComIF(objects::UART_COM_IF); uart::PLOC_MPSOC_BAUD, mpsoc::MAX_REPLY_SIZE); mpsocUartCookie->setNoFixedSizeReply(); PlocMPSoCHelper* plocMpsocHelper = new PlocMPSoCHelper(objects::PLOC_MPSOC_HELPER); - new UartComIF(objects::UART_COM_IF); auto dummyGpioIF = new DummyGpioIF(); PlocMPSoCHandler* plocMPSoCHandler = new PlocMPSoCHandler( objects::PLOC_MPSOC_HANDLER, objects::UART_COM_IF, mpsocUartCookie, plocMpsocHelper, diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index 23c6b6e1..cec9fe34 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -35,7 +35,6 @@ static const DeviceCommandId_t COPY_ADC_DATA_TO_MRAM = 25; static const DeviceCommandId_t RUN_AUTO_EM_TESTS = 28; static const DeviceCommandId_t WIPE_MRAM = 29; static const DeviceCommandId_t FIRST_MRAM_DUMP = 30; -static const DeviceCommandId_t PRINT_CPU_STATS = 33; static const DeviceCommandId_t SET_GPIO = 34; static const DeviceCommandId_t READ_GPIO = 35; static const DeviceCommandId_t RESTART_SUPERVISOR = 36; @@ -72,7 +71,7 @@ static const uint16_t SIZE_EXE_REPORT = 14; static const uint16_t SIZE_HK_REPORT = 52; static const uint16_t SIZE_BOOT_STATUS_REPORT = 24; static const uint16_t SIZE_LATCHUP_STATUS_REPORT = 31; -static const uint16_t SIZE_LOGGING_REPORT = 45; +static const uint16_t SIZE_LOGGING_REPORT = 73; static const uint16_t SIZE_ADC_REPORT = 72; /** @@ -126,7 +125,6 @@ static const uint16_t APID_REQUEST_ADC_REPORT = 0xDB; static const uint16_t APID_RUN_AUTO_EM_TESTS = 0xF2; static const uint16_t APID_WIPE_MRAM = 0xF3; static const uint16_t APID_DUMP_MRAM = 0xF4; -static const uint16_t APID_PRINT_CPU_STATS = 0xF8; static const uint16_t APID_SET_GPIO = 0xF9; static const uint16_t APID_READ_GPIO = 0xFA; static const uint16_t APID_RESTART_SUPERVISOR = 0xFB; @@ -766,45 +764,6 @@ class RunAutoEmTests : public SpacePacket { } }; -/** - * @brief This class packages the space packet causing the supervisor to print the CPU load to - * the debug output. - */ -class PrintCpuStats : public SpacePacket { - public: - /** - * @brief Constructor - * - * @param en Print is enabled if en != 0 - */ - PrintCpuStats(uint8_t en) - : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_PRINT_CPU_STATS, DEFAULT_SEQUENCE_COUNT), - en(en) { - initPacket(); - } - - private: - static const uint16_t DATA_FIELD_LENGTH = 3; - static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; - - static const uint16_t CRC_OFFSET = DATA_FIELD_LENGTH - 2; - - uint8_t en = 0; - - void initPacket() { - size_t serializedSize = 0; - uint8_t* dataFieldPtr = this->localData.fields.buffer; - SerializeAdapter::serialize(&en, &dataFieldPtr, &serializedSize, sizeof(en), - SerializeIF::Endianness::BIG); - serializedSize = 0; - uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, - sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); - uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; - SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), - SerializeIF::Endianness::BIG); - } -}; - /** * @brief This class packages the space packet to wipe or dump parts of the MRAM. */ @@ -1806,19 +1765,19 @@ class LoggingReport : public StaticLocalDataSet { void printSet() { sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0 << std::endl; - sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt1 << std::endl; - sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt2 << std::endl; - sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt3 << std::endl; - sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt4 << std::endl; - sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt5 << std::endl; - sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt6 << std::endl; - sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0 + sif::info << "LoggingReport: ADC deviation triggers count: " << this->adcDeviationTriggersCnt << std::endl; sif::info << "LoggingReport: TC received count: " << this->tcReceivedCnt << std::endl; sif::info << "LoggingReport: TM available count: " << this->tmAvailableCnt << std::endl; @@ -1828,7 +1787,8 @@ class LoggingReport : public StaticLocalDataSet { << std::endl; sif::info << "LoggingReport: MPSoC power up: " << this->mpsocPowerup << std::endl; sif::info << "LoggingReport: MPSoC updates: " << this->mpsocUpdates << std::endl; - sif::info << "LoggingReport: Last received TC: " << this->lastRecvdTc << std::endl; + sif::info << "LoggingReport: APID of last received TC: 0x" << std::hex << this->lastRecvdTc + << std::endl; } }; @@ -1932,7 +1892,7 @@ class AdcReport : public StaticLocalDataSet { void printSet() { sif::info << "---- Adc Report: Raw values ----" << std::endl; - sif::info << "AdcReport: ADC raw 0: " << this->adcRaw0 << std::endl; + sif::info << "AdcReport: ADC raw 0: " << std::dec << this->adcRaw0 << std::endl; sif::info << "AdcReport: ADC raw 1: " << this->adcRaw1 << std::endl; sif::info << "AdcReport: ADC raw 2: " << this->adcRaw2 << std::endl; sif::info << "AdcReport: ADC raw 3: " << this->adcRaw3 << std::endl; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index a07489b5..460b1840 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -416,7 +416,6 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(REQUEST_ADC_REPORT); this->insertInCommandMap(RUN_AUTO_EM_TESTS); this->insertInCommandMap(WIPE_MRAM); - this->insertInCommandMap(PRINT_CPU_STATS); this->insertInCommandMap(SET_GPIO); this->insertInCommandMap(READ_GPIO); this->insertInCommandMap(RESTART_SUPERVISOR); @@ -537,7 +536,6 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case COPY_ADC_DATA_TO_MRAM: case RUN_AUTO_EM_TESTS: case WIPE_MRAM: - case PRINT_CPU_STATS: case SET_GPIO: case READ_GPIO: case RESTART_SUPERVISOR: @@ -837,6 +835,9 @@ void PlocSupervisorHandler::setExecutionTimeout(DeviceCommandId_t command) { case CONSECUTIVE_MRAM_DUMP: executionTimeout.setTimeout(MRAM_DUMP_EXECUTION_TIMEOUT); break; + case COPY_ADC_DATA_TO_MRAM: + executionTimeout.setTimeout(COPY_ADC_TO_MRAM_TIMEOUT); + break; default: executionTimeout.setTimeout(EXECUTION_DEFAULT_TIMEOUT); break; @@ -873,13 +874,14 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { result = ack.checkApid(); switch (result) { - case SupvReturnValuesIF::CRC_FAILURE: { - // TODO: Interpretation of status field in acknowledgment report - sif::debug << "PlocSupervisorHandler::handleAckReport: Received Ack failure report" - << std::endl; + case SupvReturnValuesIF::RECEIVED_ACK_FAILURE: { +#if OBSW_DEBUG_PLOC_SUPERVISOR == 1 + sif::debug << "PlocSupervisorHandler: Received Ack failure report with status code: 0x" + << std::hex << ack.getStatusCode() << std::endl; +#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ DeviceCommandId_t commandId = getPendingCommand(); if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { - triggerEvent(SUPV_ACK_FAILURE, commandId); + triggerEvent(SUPV_ACK_FAILURE, commandId, static_cast(ack.getStatusCode())); } sendFailureReport(supv::ACK_REPORT, SupvReturnValuesIF::RECEIVED_ACK_FAILURE); disableAllReplies(); @@ -930,7 +932,7 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionReport(const uint8_t* data) break; } case (SupvReturnValuesIF::RECEIVED_EXE_FAILURE): { - handleExecutionFailureReport(); + handleExecutionFailureReport(exe.getStatusCode()); result = RETURN_OK; break; } @@ -1172,7 +1174,7 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { result = verifyPacket(data, supv::SIZE_LOGGING_REPORT); if (result == SupvReturnValuesIF::CRC_FAILURE) { - sif::error << "PlocSupervisorHandler::handleLoggingReport: Logging report has " + sif::warning << "PlocSupervisorHandler::handleLoggingReport: Logging report has " << "invalid crc" << std::endl; return result; } @@ -1853,7 +1855,21 @@ void PlocSupervisorHandler::handleExecutionSuccessReport(const uint8_t* data) { #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 sif::info << "PlocSupervisorHandler: Read GPIO TM, State: " << gpioState << std::endl; #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ - handleDeviceTM(reinterpret_cast(&gpioState), sizeof(gpioState), supv::EXE_REPORT); + DeviceCommandMap::iterator iter = deviceCommandMap.find(commandId); + if (iter->second.sendReplyTo == NO_COMMAND_ID) { + return; + } + uint8_t data[sizeof(gpioState)]; + size_t size = 0; + ReturnValue_t result = SerializeAdapter::serialize( + &gpioState, data, &size, sizeof(gpioState), SerializeIF::Endianness::BIG); + if (result != RETURN_OK) { + sif::debug << "PlocSupervisorHandler: Failed to deserialize GPIO state" << std::endl; + } + result = actionHelper.reportData(iter->second.sendReplyTo, commandId, data, sizeof(data)); + if (result != RETURN_OK) { + sif::warning << "PlocSupervisorHandler: Read GPIO, failed to report data" << std::endl; + } break; } case supv::SET_TIME_REF: { @@ -1867,13 +1883,11 @@ void PlocSupervisorHandler::handleExecutionSuccessReport(const uint8_t* data) { } } -void PlocSupervisorHandler::handleExecutionFailureReport() { +void PlocSupervisorHandler::handleExecutionFailureReport(uint16_t statusCode) { using namespace supv; DeviceCommandId_t commandId = getPendingCommand(); if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { - triggerEvent(SUPV_EXE_FAILURE, commandId); - } else { - sif::debug << "PlocSupervisorHandler::handleExecutionReport: Unknown command id" << std::endl; + triggerEvent(SUPV_EXE_FAILURE, commandId, static_cast(statusCode)); } sendFailureReport(EXE_REPORT, SupvReturnValuesIF::RECEIVED_EXE_FAILURE); disableExeReportReply(); diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index c3de0c4e..80f36b5d 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -66,6 +66,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { //! [EXPORT] : [COMMENT] PLOC supervisor received acknowledgment failure report static const Event SUPV_ACK_FAILURE = MAKE_EVENT(2, severity::LOW); //! [EXPORT] : [COMMENT] PLOC received execution failure report + //! P1: ID of command for which the execution failed + //! P2: Status code sent by the supervisor handler static const Event SUPV_EXE_FAILURE = MAKE_EVENT(3, severity::LOW); //! [EXPORT] : [COMMENT] PLOC supervisor reply has invalid crc static const Event SUPV_CRC_FAILURE_EVENT = MAKE_EVENT(4, severity::LOW); @@ -82,6 +84,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint32_t EXECUTION_DEFAULT_TIMEOUT = 5000; // 30 s static const uint32_t MRAM_DUMP_EXECUTION_TIMEOUT = 30000; + // 70 s + static const uint32_t COPY_ADC_TO_MRAM_TIMEOUT = 70000; // 2 s static const uint32_t BOOT_TIMEOUT = 2000; enum class StartupState: uint8_t { @@ -363,7 +367,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { ReturnValue_t eventSubscription(); void handleExecutionSuccessReport(const uint8_t* data); - void handleExecutionFailureReport(); + void handleExecutionFailureReport(uint16_t statusCode); }; #endif /* MISSION_DEVICES_PLOCSUPERVISORHANDLER_H_ */ diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index ff0d5d5e..2e483b7e 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -161,6 +161,7 @@ ReturnValue_t PlocSupvHelper::performUpdate() { supv::SequenceFlags seqFlags = supv::SequenceFlags::FIRST_PKT; while (remainingSize > 0) { if (terminate) { + terminate = false; return PROCESS_TERMINATED; } if (remainingSize > supv::WriteMemory::CHUNK_MAX) { diff --git a/linux/fsfwconfig/OBSWConfig.h.in b/linux/fsfwconfig/OBSWConfig.h.in index 090963c1..3e799424 100644 --- a/linux/fsfwconfig/OBSWConfig.h.in +++ b/linux/fsfwconfig/OBSWConfig.h.in @@ -76,7 +76,7 @@ #define OBSW_ADD_BPX_BATTERY_HANDLER 0 #define OBSW_ADD_STAR_TRACKER 0 #define OBSW_ADD_PLOC_SUPERVISOR 1 -#define OBSW_ADD_PLOC_MPSOC 1 +#define OBSW_ADD_PLOC_MPSOC 0 #define OBSW_ADD_SUN_SENSORS 0 #define OBSW_ADD_ACS_BOARD 1 #define OBSW_ADD_ACS_HANDLERS 0 diff --git a/tmtc b/tmtc index c7a19f71..9c3a8e9f 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit c7a19f7122fccf3888a4f49d0c88f593bad1e91a +Subproject commit 9c3a8e9ff2934b24af2e2eff78b570510b41cad8 From 8aacbc2b40a11bf3b929ef0df6fe9ff8f717cd99 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 4 May 2022 19:08:37 +0200 Subject: [PATCH 067/115] cam cmd reply handling --- linux/devices/ploc/PlocMPSoCHandler.cpp | 28 ++++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index d6eeca54..ce5f7558 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -688,9 +688,11 @@ ReturnValue_t PlocMPSoCHandler::handleCamCmdRpt(const uint8_t* data) { reinterpret_cast(dataFieldPtr), tmCamCmdRpt.rememberSpacePacketSize - mpsoc::SPACE_PACKET_HEADER_SIZE - 3); uint8_t ackValue = *(packet.getPacketData() + packet.getPacketDataLength() - 2); - sif::info << "CamCmdRpt message: " << camCmdRptMsg << std::endl; - sif::info << "CamCmdRpt Ack value: 0x" << std::hex << static_cast(ackValue) - << std::endl; +#if OBSW_DEBUG_PLOC_MPSOC == 1 + sif::info << "PlocMPSoCHandler: CamCmdRpt message: " << camCmdRptMsg << std::endl; + sif::info << "PlocMPSoCHandler: CamCmdRpt Ack value: 0x" << std::hex + << static_cast(ackValue) << std::endl; +#endif /* OBSW_DEBUG_PLOC_MPSOC == 1 */ handleDeviceTM(packet.getPacketData(), packet.getPacketDataLength() - 1, mpsoc::TM_CAM_CMD_RPT); return result; } @@ -921,10 +923,11 @@ void PlocMPSoCHandler::handleDeviceTM(const uint8_t* data, size_t dataSize, } void PlocMPSoCHandler::disableAllReplies() { + using namespace mpsoc; DeviceReplyMap::iterator iter; /* Disable ack reply */ - iter = deviceReplyMap.find(mpsoc::ACK_REPORT); + iter = deviceReplyMap.find(ACK_REPORT); DeviceReplyInfo* info = &(iter->second); info->delayCycles = 0; info->command = deviceCommandMap.end(); @@ -933,17 +936,26 @@ void PlocMPSoCHandler::disableAllReplies() { /* If the command expects a telemetry packet the appropriate tm reply will be disabled here */ switch (commandId) { - case mpsoc::TC_MEM_WRITE: + case TC_MEM_WRITE: break; - case mpsoc::TC_MEM_READ: { - iter = deviceReplyMap.find(mpsoc::TM_MEMORY_READ_REPORT); + case TC_MEM_READ: { + iter = deviceReplyMap.find(TM_MEMORY_READ_REPORT); info = &(iter->second); info->delayCycles = 0; + info->active = false; + info->command = deviceCommandMap.end(); + break; + } + case TC_CAM_CMD_SEND: { + iter = deviceReplyMap.find(TM_CAM_CMD_RPT); + info = &(iter->second); + info->delayCycles = 0; + info->active = false; info->command = deviceCommandMap.end(); break; } default: { - sif::debug << "PlocMPSoCHandler::disableAllReplies: Unknown command id" << commandId + sif::debug << "PlocMPSoCHandler::disableAllReplies: Unknown command id: " << commandId << std::endl; break; } From 5441520369a58f4c4e201a46834338cd8a069fc1 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Wed, 4 May 2022 19:11:01 +0200 Subject: [PATCH 068/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 9c3a8e9f..a4bf730b 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 9c3a8e9ff2934b24af2e2eff78b570510b41cad8 +Subproject commit a4bf730b22125a5e28f9186e13b7d3a419442b82 From 8832d06d03060ef0d211834a7de82759cac5a3d5 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 5 May 2022 08:55:45 +0200 Subject: [PATCH 069/115] improvements for mram dump --- bsp_te0720_1cfa/ObjectFactory.cpp | 3 +++ linux/devices/ploc/PlocMemoryDumper.cpp | 3 +-- linux/devices/ploc/PlocSupervisorHandler.cpp | 16 +++++++++++++--- linux/devices/ploc/PlocSupervisorHandler.h | 4 ++-- .../pollingsequence/pollingSequenceFactory.cpp | 2 -- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/bsp_te0720_1cfa/ObjectFactory.cpp b/bsp_te0720_1cfa/ObjectFactory.cpp index e2df1a26..c09b818e 100644 --- a/bsp_te0720_1cfa/ObjectFactory.cpp +++ b/bsp_te0720_1cfa/ObjectFactory.cpp @@ -17,6 +17,7 @@ #include "fsfw_hal/linux/uart/UartCookie.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/ploc/PlocSupvHelper.h" #include "mission/core/GenericFactory.h" @@ -70,6 +71,8 @@ new UartComIF(objects::UART_COM_IF); supervisorCookie, Gpio(gpioIds::ENABLE_SUPV_UART, supvGpioIF), pcdu::PDU1_CH6_PLOC_12V, supvHelper); plocSupervisor->setStartUpImmediately(); + + new PlocMemoryDumper(objects::PLOC_MEMORY_DUMPER); #endif #if OBSW_TEST_LIBGPIOD == 1 diff --git a/linux/devices/ploc/PlocMemoryDumper.cpp b/linux/devices/ploc/PlocMemoryDumper.cpp index 871c69a8..a771e0fe 100644 --- a/linux/devices/ploc/PlocMemoryDumper.cpp +++ b/linux/devices/ploc/PlocMemoryDumper.cpp @@ -149,10 +149,9 @@ void PlocMemoryDumper::completionFailedReceived(ActionId_t actionId, ReturnValue case (supv::FIRST_MRAM_DUMP): case (supv::CONSECUTIVE_MRAM_DUMP): triggerEvent(MRAM_DUMP_FAILED, mram.lastStartAddress); + pendingCommand = NONE; break; default: - sif::debug << "PlocMemoryDumper::completionFailedReceived: Invalid pending command " - << std::endl; break; } state = State::IDLE; diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 460b1840..3ea11f91 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -1549,6 +1549,16 @@ void PlocSupervisorHandler::disableAllReplies() { iter = deviceReplyMap.find(supv::GET_HK_REPORT); info = &(iter->second); info->delayCycles = 0; + info->active = false; + info->command = deviceCommandMap.end(); + break; + } + case supv::FIRST_MRAM_DUMP: + case supv::CONSECUTIVE_MRAM_DUMP: { + iter = deviceReplyMap.find(commandId); + info = &(iter->second); + info->delayCycles = 0; + info->active = false; info->command = deviceCommandMap.end(); break; } @@ -1761,12 +1771,12 @@ ReturnValue_t PlocSupervisorHandler::createMramDumpFile() { #endif /* BOARD_TE0720 == 0 */ // Check if path to PLOC directory exists - if (not std::filesystem::exists(std::string(currentMountPrefix + "/" + plocFilePath))) { - sif::warning << "PlocSupervisorHandler::createMramDumpFile: Ploc path does not exist" + if (not std::filesystem::exists(std::string(currentMountPrefix + "/" + supervisorFilePath))) { + sif::warning << "PlocSupervisorHandler::createMramDumpFile: Supervisor path does not exist" << std::endl; return SupvReturnValuesIF::PATH_DOES_NOT_EXIST; } - activeMramFile = currentMountPrefix + "/" + plocFilePath + "/" + filename; + activeMramFile = currentMountPrefix + "/" + supervisorFilePath + "/" + filename; // Create new file std::ofstream file(activeMramFile, std::ios_base::out); file.close(); diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 80f36b5d..625e2810 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -137,8 +137,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { SdCardManager* sdcMan = nullptr; #endif /* BOARD_TE0720 == 0 */ - // Path to PLOC specific files on SD card - std::string plocFilePath = "ploc"; + // Path to supervisor specific files on SD card + std::string supervisorFilePath = "ploc/supervisor"; std::string activeMramFile; // Setting this variable to true will enable direct downlink of MRAM packets diff --git a/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp b/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp index 4a15e197..4b0263d4 100644 --- a/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp +++ b/linux/fsfwconfig/pollingsequence/pollingSequenceFactory.cpp @@ -464,10 +464,8 @@ ReturnValue_t pst::pstUart(FixedTimeslotTaskIF *thisSequence) { thisSequence->addSlot(objects::PLOC_MPSOC_HANDLER, length * 0.8, DeviceHandlerIF::GET_READ); #endif -#ifdef XIPHOS_Q7S thisSequence->addSlot(objects::PLOC_MEMORY_DUMPER, length * 0, DeviceHandlerIF::PERFORM_OPERATION); -#endif #if OBSW_ADD_PLOC_SUPERVISOR == 1 thisSequence->addSlot(objects::PLOC_SUPERVISOR_HANDLER, length * 0, DeviceHandlerIF::PERFORM_OPERATION); From e5fdf23dd7c58946bff124533a99a7ad69bbcfb9 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 5 May 2022 09:15:05 +0200 Subject: [PATCH 070/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index a4bf730b..2e24f764 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit a4bf730b22125a5e28f9186e13b7d3a419442b82 +Subproject commit 2e24f764a65042fda2ea12e2b13cfab49ccc7b55 From 9bd559599979719af51ae4eb21eee6af33df55e3 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Thu, 5 May 2022 10:50:23 +0200 Subject: [PATCH 071/115] no time command sent during startup of supervisor --- linux/devices/ploc/PlocSupervisorHandler.cpp | 3 ++- tmtc | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 3ea11f91..b295d3da 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -147,7 +147,8 @@ void PlocSupervisorHandler::doStartUp() { case StartupState::BOOTING: { if (bootTimeout.hasTimedOut()) { uartIsolatorSwitch.pullHigh(); - startupState = StartupState::SET_TIME; +// startupState = StartupState::SET_TIME; + startupState = StartupState::ON; } } case StartupState::SET_TIME_EXECUTING: diff --git a/tmtc b/tmtc index 2e24f764..2b8fa356 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 2e24f764a65042fda2ea12e2b13cfab49ccc7b55 +Subproject commit 2b8fa356c9f9de5fa4037eb836662f509327138b From 5911ca79b5a92b762df767ddb56064d18fd5029a Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Thu, 5 May 2022 19:18:39 +0200 Subject: [PATCH 072/115] nvm enable command --- .../PlocSupervisorDefinitions.h | 68 +++++++++++++++---- linux/devices/ploc/PlocSupervisorHandler.cpp | 25 +++++-- linux/devices/ploc/PlocSupervisorHandler.h | 1 + 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index cec9fe34..1725f739 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -55,15 +55,16 @@ static const DeviceCommandId_t LOGGING_CLEAR_COUNTERS = 55; static const DeviceCommandId_t LOGGING_SET_TOPIC = 56; static const DeviceCommandId_t REQUEST_ADC_REPORT = 57; static const DeviceCommandId_t RESET_PL = 58; +static const DeviceCommandId_t ENABLE_NVMS = 59; /** Reply IDs */ -static const DeviceCommandId_t ACK_REPORT = 50; -static const DeviceCommandId_t EXE_REPORT = 51; -static const DeviceCommandId_t HK_REPORT = 52; -static const DeviceCommandId_t BOOT_STATUS_REPORT = 53; -static const DeviceCommandId_t LATCHUP_REPORT = 54; -static const DeviceCommandId_t LOGGING_REPORT = 55; -static const DeviceCommandId_t ADC_REPORT = 56; +static const DeviceCommandId_t ACK_REPORT = 100; +static const DeviceCommandId_t EXE_REPORT = 101; +static const DeviceCommandId_t HK_REPORT = 102; +static const DeviceCommandId_t BOOT_STATUS_REPORT = 103; +static const DeviceCommandId_t LATCHUP_REPORT = 104; +static const DeviceCommandId_t LOGGING_REPORT = 105; +static const DeviceCommandId_t ADC_REPORT = 106; // Size of complete space packet (6 byte header + size of data + 2 byte CRC) static const uint16_t SIZE_ACK_REPORT = 14; @@ -122,6 +123,7 @@ static const uint16_t APID_SET_ADC_THRESHOLD = 0xE3; static const uint16_t APID_GET_LATCHUP_STATUS_REPORT = 0xD9; static const uint16_t APID_COPY_ADC_DATA_TO_MRAM = 0xDA; static const uint16_t APID_REQUEST_ADC_REPORT = 0xDB; +static const uint16_t APID_ENABLE_NVMS = 0xF0; static const uint16_t APID_RUN_AUTO_EM_TESTS = 0xF2; static const uint16_t APID_WIPE_MRAM = 0xF3; static const uint16_t APID_DUMP_MRAM = 0xF4; @@ -357,6 +359,50 @@ class MPSoCBootSelect : public SpacePacket { } }; +/** + * @brief This class creates the command to enable or disable the NVMs connected to the + * supervisor. + */ +class EnableNvms : public SpacePacket { + public: + /** + * @brief Constructor + * + * @param mem The memory to boot from: NVM0 (0), NVM1 (1) + * @param bp0 Partition pin 0 + * @param bp1 Partition pin 1 + * @param bp2 Partition pin 2 + */ + EnableNvms(uint8_t nvm01, uint8_t nvm3) + : SpacePacket(DATA_FIELD_LENGTH - 1, true, APID_ENABLE_NVMS, DEFAULT_SEQUENCE_COUNT), + nvm01(nvm01), + nvm3(nvm3) { + initPacket(); + } + + private: + static const uint16_t DEFAULT_SEQUENCE_COUNT = 1; + static const uint8_t DATA_FIELD_LENGTH = 4; + static const uint8_t CRC_OFFSET = 2; + uint8_t nvm01 = 0; + uint8_t nvm3 = 0; + + void initPacket() { + *(this->localData.fields.buffer) = nvm01; + *(this->localData.fields.buffer + 1) = nvm3; + + /* Calculate crc */ + uint16_t crc = CRC::crc16ccitt(this->localData.byteStream, + sizeof(CCSDSPrimaryHeader) + DATA_FIELD_LENGTH - 2); + + /* Add crc to packet data field of space packet */ + size_t serializedSize = 0; + uint8_t* crcPos = this->localData.fields.buffer + CRC_OFFSET; + SerializeAdapter::serialize(&crc, &crcPos, &serializedSize, sizeof(crc), + SerializeIF::Endianness::BIG); + } +}; + /** * @brief This class generates the space packet to update the time of the PLOC supervisor. */ @@ -1664,13 +1710,7 @@ class BootStatusReport : public StaticLocalDataSet { */ class HkSet : public StaticLocalDataSet { public: - - enum class SocState { - OFF = 0, - BOOTING = 1, - OPERATIONAL = 3, - SHUTDOWN = 4 - }; + enum class SocState { OFF = 0, BOOTING = 1, OPERATIONAL = 3, SHUTDOWN = 4 }; HkSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, HK_SET_ID) {} diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index b295d3da..f84b7276 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -147,7 +147,7 @@ void PlocSupervisorHandler::doStartUp() { case StartupState::BOOTING: { if (bootTimeout.hasTimedOut()) { uartIsolatorSwitch.pullHigh(); -// startupState = StartupState::SET_TIME; + // startupState = StartupState::SET_TIME; startupState = StartupState::ON; } } @@ -377,6 +377,10 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(DeviceCommandId_t d result = RETURN_OK; break; } + case ENABLE_NVMS: { + result = prepareEnableNvmsCommand(commandData); + break; + } default: sif::debug << "PlocSupervisorHandler::buildCommandFromCommand: Command not implemented" << std::endl; @@ -432,6 +436,7 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() { this->insertInCommandMap(LOGGING_CLEAR_COUNTERS); this->insertInCommandMap(LOGGING_SET_TOPIC); this->insertInCommandMap(RESET_PL); + this->insertInCommandMap(ENABLE_NVMS); this->insertInCommandAndReplyMap(FIRST_MRAM_DUMP, 3); this->insertInCommandAndReplyMap(CONSECUTIVE_MRAM_DUMP, 3); this->insertInReplyMap(ACK_REPORT, 3, nullptr, SIZE_ACK_REPORT); @@ -552,6 +557,7 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite case LOGGING_CLEAR_COUNTERS: case LOGGING_SET_TOPIC: case RESET_PL: + case ENABLE_NVMS: enabledReplies = 2; break; default: @@ -878,7 +884,7 @@ ReturnValue_t PlocSupervisorHandler::handleAckReport(const uint8_t* data) { case SupvReturnValuesIF::RECEIVED_ACK_FAILURE: { #if OBSW_DEBUG_PLOC_SUPERVISOR == 1 sif::debug << "PlocSupervisorHandler: Received Ack failure report with status code: 0x" - << std::hex << ack.getStatusCode() << std::endl; + << std::hex << ack.getStatusCode() << std::endl; #endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */ DeviceCommandId_t commandId = getPendingCommand(); if (commandId != DeviceHandlerIF::NO_COMMAND_ID) { @@ -1176,7 +1182,7 @@ ReturnValue_t PlocSupervisorHandler::handleLoggingReport(const uint8_t* data) { if (result == SupvReturnValuesIF::CRC_FAILURE) { sif::warning << "PlocSupervisorHandler::handleLoggingReport: Logging report has " - << "invalid crc" << std::endl; + << "invalid crc" << std::endl; return result; } @@ -1533,6 +1539,15 @@ ReturnValue_t PlocSupervisorHandler::prepareLoggingRequest(const uint8_t* comman return RETURN_OK; } +ReturnValue_t PlocSupervisorHandler::prepareEnableNvmsCommand(const uint8_t* commandData) { + using namespace supv; + uint8_t nvm01 = *(commandData); + uint8_t nvm3 = *(commandData + 1); + EnableNvms packet(nvm01, nvm3); + packetToOutBuffer(packet.getWholeData(), packet.getFullSize()); + return RETURN_OK; +} + void PlocSupervisorHandler::disableAllReplies() { DeviceReplyMap::iterator iter; @@ -1872,8 +1887,8 @@ void PlocSupervisorHandler::handleExecutionSuccessReport(const uint8_t* data) { } uint8_t data[sizeof(gpioState)]; size_t size = 0; - ReturnValue_t result = SerializeAdapter::serialize( - &gpioState, data, &size, sizeof(gpioState), SerializeIF::Endianness::BIG); + ReturnValue_t result = SerializeAdapter::serialize(&gpioState, data, &size, sizeof(gpioState), + SerializeIF::Endianness::BIG); if (result != RETURN_OK) { sif::debug << "PlocSupervisorHandler: Failed to deserialize GPIO state" << std::endl; } diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 625e2810..060e02b0 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -280,6 +280,7 @@ class PlocSupervisorHandler : public DeviceHandlerBase { void prepareSetGpioCmd(const uint8_t* commandData); void prepareReadGpioCmd(const uint8_t* commandData); ReturnValue_t prepareLoggingRequest(const uint8_t* commandData, size_t commandDataLen); + ReturnValue_t prepareEnableNvmsCommand(const uint8_t* commandData); /** * @brief Copies the content of a space packet to the command buffer. From fabd81365b516f3a91556015c2a4e8a58638ca05 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Thu, 5 May 2022 19:20:14 +0200 Subject: [PATCH 073/115] supervisor do startup set time --- linux/devices/ploc/PlocSupervisorHandler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index f84b7276..a0a79257 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -147,8 +147,7 @@ void PlocSupervisorHandler::doStartUp() { case StartupState::BOOTING: { if (bootTimeout.hasTimedOut()) { uartIsolatorSwitch.pullHigh(); - // startupState = StartupState::SET_TIME; - startupState = StartupState::ON; + startupState = StartupState::SET_TIME; } } case StartupState::SET_TIME_EXECUTING: From 5c7c5b468af389817e718f5ffa1e388edf5679a8 Mon Sep 17 00:00:00 2001 From: Cleanroom Laptop L15 Date: Thu, 5 May 2022 19:21:42 +0200 Subject: [PATCH 074/115] tmtc update --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 2b8fa356..50a20cfd 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 2b8fa356c9f9de5fa4037eb836662f509327138b +Subproject commit 50a20cfdc27734305e3687b58546ff76b4411ee3 From bfd7d9d82dfdf42bccd8e41376e0b6f15c3bcdc4 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 6 May 2022 10:37:54 +0200 Subject: [PATCH 075/115] bump fsfw (hotfix) --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 43f0841d..d72b212f 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 43f0841d0a29d344b4329c228452ee109ce03a1f +Subproject commit d72b212fa629029924d9862e3e862d0388911f8e From 385d8df466b60794fca07bb78c0b69a7bff96424 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 6 May 2022 10:43:04 +0200 Subject: [PATCH 076/115] fix .cproject file --- misc/eclipse/.cproject | 145 +++++++++++++++++++++++++++++++++-------- 1 file changed, 117 insertions(+), 28 deletions(-) diff --git a/misc/eclipse/.cproject b/misc/eclipse/.cproject index cf991ff4..4c345a2d 100644 --- a/misc/eclipse/.cproject +++ b/misc/eclipse/.cproject @@ -215,10 +215,10 @@ @@ -699,7 +700,8 @@ - + + @@ -870,6 +871,7 @@ +