From c3bca9bb5426607042631b7b40df17e395656ff2 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Mon, 7 Aug 2023 17:08:33 +0200 Subject: [PATCH 1/5] added event which is triggered when config of pdec is corrupted --- linux/ipcore/PdecConfig.cpp | 90 +++++++++++++++++++++--------------- linux/ipcore/PdecConfig.h | 32 ++++++++++++- linux/ipcore/PdecHandler.cpp | 10 ++++ linux/ipcore/PdecHandler.h | 5 ++ linux/ipcore/pdec.h | 4 ++ 5 files changed, 103 insertions(+), 38 deletions(-) diff --git a/linux/ipcore/PdecConfig.cpp b/linux/ipcore/PdecConfig.cpp index a41c5ba6..3bc478a8 100644 --- a/linux/ipcore/PdecConfig.cpp +++ b/linux/ipcore/PdecConfig.cpp @@ -22,11 +22,11 @@ ReturnValue_t PdecConfig::write() { if (result != returnvalue::OK) { return result; } - result = writeFrameHeaderFirstOctet(); + result = writeFrameHeaderFirstWord(); if (result != returnvalue::OK) { return result; } - result = writeFrameHeaderSecondOctet(); + result = writeFrameHeaderSecondWord(); if (result != returnvalue::OK) { return result; } @@ -77,7 +77,7 @@ ReturnValue_t PdecConfig::setPositiveWindow(uint8_t pw) { return result; } // Rewrite second config word which contains the positive window parameter - writeFrameHeaderSecondOctet(); + writeFrameHeaderSecondWord(); return returnvalue::OK; } @@ -92,7 +92,7 @@ ReturnValue_t PdecConfig::setNegativeWindow(uint8_t nw) { return result; } // Rewrite second config word which contains the negative window parameter - writeFrameHeaderSecondOctet(); + writeFrameHeaderSecondWord(); return returnvalue::OK; } @@ -114,42 +114,14 @@ ReturnValue_t PdecConfig::getNegativeWindow(uint8_t& negativeWindow) { return returnvalue::OK; } -ReturnValue_t PdecConfig::writeFrameHeaderFirstOctet() { - uint32_t word = 0; - word |= (VERSION_ID << 30); - - // Setting the bypass flag and the control command flag should not have any - // implication on the operation of the PDEC IP Core - word |= (BYPASS_FLAG << 29); - word |= (CONTROL_COMMAND_FLAG << 28); - - word |= (RESERVED_FIELD_A << 26); - word |= (SPACECRAFT_ID << 16); - word |= (VIRTUAL_CHANNEL << 10); - word |= (DUMMY_BITS << 8); - uint8_t positiveWindow = 0; - ReturnValue_t result = - localParameterHandler.getValue(pdecconfigdefs::paramkeys::POSITIVE_WINDOW, positiveWindow); - if (result != returnvalue::OK) { - return result; - } - word |= static_cast(positiveWindow); +ReturnValue_t PdecConfig::writeFrameHeaderFirstWord() { + uint32_t word = createFirstWord(); *(memoryBaseAddress + FRAME_HEADER_OFFSET) = word; return returnvalue::OK; } -ReturnValue_t PdecConfig::writeFrameHeaderSecondOctet() { - uint8_t negativeWindow = 0; - ReturnValue_t result = - localParameterHandler.getValue(pdecconfigdefs::paramkeys::NEGATIVE_WINDOW, negativeWindow); - if (result != returnvalue::OK) { - return result; - } - uint32_t word = 0; - word = 0; - word |= (static_cast(negativeWindow) << 24); - word |= (HIGH_AU_MAP_ID << 16); - word |= (ENABLE_DERANDOMIZER << 8); +ReturnValue_t PdecConfig::writeFrameHeaderSecondWord() { + uint32_t word = createSecondWord(); *(memoryBaseAddress + FRAME_HEADER_OFFSET + 1) = word; return returnvalue::OK; } @@ -189,3 +161,49 @@ uint8_t PdecConfig::getOddParity(uint8_t number) { parityBit = ~(countBits & 0x1) & 0x1; return parityBit; } + +uint32_t PdecConfig::createFirstWord() { + uint32_t word = 0; + word |= (VERSION_ID << 30); + + // Setting the bypass flag and the control command flag should not have any + // implication on the operation of the PDEC IP Core + word |= (BYPASS_FLAG << 29); + word |= (CONTROL_COMMAND_FLAG << 28); + + word |= (RESERVED_FIELD_A << 26); + word |= (SPACECRAFT_ID << 16); + word |= (VIRTUAL_CHANNEL << 10); + word |= (DUMMY_BITS << 8); + uint8_t positiveWindow = 0; + ReturnValue_t result = + localParameterHandler.getValue(pdecconfigdefs::paramkeys::POSITIVE_WINDOW, positiveWindow); + if (result != returnvalue::OK) { + return result; + } + word |= static_cast(positiveWindow); + return word; +} + +uint32_t PdecConfig::createSecondWord() { + uint8_t negativeWindow = 0; + ReturnValue_t result = + localParameterHandler.getValue(pdecconfigdefs::paramkeys::NEGATIVE_WINDOW, negativeWindow); + if (result != returnvalue::OK) { + return result; + } + uint32_t word = 0; + word = 0; + word |= (static_cast(negativeWindow) << 24); + word |= (HIGH_AU_MAP_ID << 16); + word |= (ENABLE_DERANDOMIZER << 8); + return word; +} + +uint32_t PdecConfig::readbackFirstWord() { + return *(memoryBaseAddress + FRAME_HEADER_OFFSET); +} + +uint32_t PdecConfig::readbackSecondWord() { + return *(memoryBaseAddress + FRAME_HEADER_OFFSET + 1); +} diff --git a/linux/ipcore/PdecConfig.h b/linux/ipcore/PdecConfig.h index f7203eec..3f17f08f 100644 --- a/linux/ipcore/PdecConfig.h +++ b/linux/ipcore/PdecConfig.h @@ -48,6 +48,34 @@ class PdecConfig { ReturnValue_t getPositiveWindow(uint8_t& positiveWindow); ReturnValue_t getNegativeWindow(uint8_t& negativeWindow); + /** + * @brief Creates the first word of the PDEC configuration + * + * @return The created config word + */ + uint32_t createFirstWord(); + + /** + * @brief Creates the second word of the PDEC configuration + * + * @return The created config word + */ + uint32_t createSecondWord(); + + /** + * @brief Reads first config word from the config memory + * + * @return The config word + */ + uint32_t readbackFirstWord(); + + /** + * @brief Reads the second config word from the config memory + * + * @return The config word + */ + uint32_t readbackSecondWord(); + private: // TC transfer frame configuration parameters static const uint8_t VERSION_ID = 0; @@ -102,8 +130,8 @@ class PdecConfig { */ ReturnValue_t createPersistentConfig(); - ReturnValue_t writeFrameHeaderFirstOctet(); - ReturnValue_t writeFrameHeaderSecondOctet(); + ReturnValue_t writeFrameHeaderFirstWord(); + ReturnValue_t writeFrameHeaderSecondWord(); void writeMapConfig(); /** diff --git a/linux/ipcore/PdecHandler.cpp b/linux/ipcore/PdecHandler.cpp index cc074ddd..86df3ad2 100644 --- a/linux/ipcore/PdecHandler.cpp +++ b/linux/ipcore/PdecHandler.cpp @@ -478,6 +478,7 @@ bool PdecHandler::checkFrameAna(uint32_t pdecFar) { } case (FrameAna_t::FRAME_DIRTY): { triggerEvent(INVALID_TC_FRAME, FRAME_DIRTY_RETVAL); + checkConfig(); sif::warning << "PdecHandler::checkFrameAna: Frame dirty" << std::endl; break; } @@ -577,6 +578,15 @@ void PdecHandler::handleIReason(uint32_t pdecFar, ReturnValue_t parameter1) { } } +void PdecHandler::checkConfig() { + uint32_t firstWord = pdecConfig.createFirstWord(); + uint32_t secondWord = pdecConfig.createSecondWord(); + if (firstWord != pdecConfig.readbackFirstWord() or + secondWord != pdecConfig.readbackSecondWord()) { + triggerEvent(PDEC_CONFIG_CORRUPTED, firstWord, secondWord); + } +} + void PdecHandler::handleNewTc() { ReturnValue_t result = returnvalue::OK; diff --git a/linux/ipcore/PdecHandler.h b/linux/ipcore/PdecHandler.h index 882dca50..11ae4de3 100644 --- a/linux/ipcore/PdecHandler.h +++ b/linux/ipcore/PdecHandler.h @@ -282,6 +282,11 @@ class PdecHandler : public SystemObject, */ void handleIReason(uint32_t pdecFar, ReturnValue_t parameter1); + /** + * @brief Checks if PDEC configuration is still correct + */ + void checkConfig(); + /** * @brief Handles the reception of new TCs. Reads the pointer to the storage location of the * new TC segment, extracts the PUS packet and forwards the data to the object diff --git a/linux/ipcore/pdec.h b/linux/ipcore/pdec.h index 0574ee73..de703c5a 100644 --- a/linux/ipcore/pdec.h +++ b/linux/ipcore/pdec.h @@ -71,6 +71,10 @@ static constexpr Event OPEN_IRQ_FILE_FAILED = event::makeEvent(SUBSYSTEM_ID, 13, //! [EXPORT] : [COMMENT] PDEC initialization failed. This might also be due to the persistent //! confiuration never becoming available, for example due to SD card issues. static constexpr Event PDEC_INIT_FAILED = event::makeEvent(SUBSYSTEM_ID, 14, severity::HIGH); +//! [EXPORT] : [COMMENT] The PDEC configuration area has been corrupted +//! P1: The first configuration word +//! P2: The second configuration word +static constexpr Event PDEC_CONFIG_CORRUPTED = event::makeEvent(SUBSYSTEM_ID, 15, severity::HIGH); // Action IDs static constexpr ActionId_t PRINT_CLCW = 0; -- 2.43.0 From d28ec2c31a872dd7c56d9f798cc7e545a3b949e8 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 11 Aug 2023 16:15:56 +0200 Subject: [PATCH 2/5] config word functions pass value now by reference and return returnvalue --- linux/ipcore/PdecConfig.cpp | 56 ++++++++++++++++++++---------------- linux/ipcore/PdecConfig.h | 15 +++++++--- linux/ipcore/PdecHandler.cpp | 20 +++++++++++-- 3 files changed, 61 insertions(+), 30 deletions(-) diff --git a/linux/ipcore/PdecConfig.cpp b/linux/ipcore/PdecConfig.cpp index 3bc478a8..8399f6d3 100644 --- a/linux/ipcore/PdecConfig.cpp +++ b/linux/ipcore/PdecConfig.cpp @@ -115,14 +115,22 @@ ReturnValue_t PdecConfig::getNegativeWindow(uint8_t& negativeWindow) { } ReturnValue_t PdecConfig::writeFrameHeaderFirstWord() { - uint32_t word = createFirstWord(); - *(memoryBaseAddress + FRAME_HEADER_OFFSET) = word; + uint32_t word = 0; + ReturnValue_t result = createFirstWord(&word); + if (result != returnvalue::OK) { + return result; + } + *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_FIRST_CONFIG_WORD) = word; return returnvalue::OK; } ReturnValue_t PdecConfig::writeFrameHeaderSecondWord() { - uint32_t word = createSecondWord(); - *(memoryBaseAddress + FRAME_HEADER_OFFSET + 1) = word; + uint32_t word = 0; + ReturnValue_t result = createSecondWord(&word); + if (result != returnvalue::OK) { + return result; + } + *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_SECOND_CONFIG_WORD) = word; return returnvalue::OK; } @@ -162,48 +170,48 @@ uint8_t PdecConfig::getOddParity(uint8_t number) { return parityBit; } -uint32_t PdecConfig::createFirstWord() { - uint32_t word = 0; - word |= (VERSION_ID << 30); +ReturnValue_t PdecConfig::createFirstWord(uint32_t* word) { + *word = 0; + *word |= (VERSION_ID << 30); // Setting the bypass flag and the control command flag should not have any // implication on the operation of the PDEC IP Core - word |= (BYPASS_FLAG << 29); - word |= (CONTROL_COMMAND_FLAG << 28); + *word |= (BYPASS_FLAG << 29); + *word |= (CONTROL_COMMAND_FLAG << 28); - word |= (RESERVED_FIELD_A << 26); - word |= (SPACECRAFT_ID << 16); - word |= (VIRTUAL_CHANNEL << 10); - word |= (DUMMY_BITS << 8); + *word |= (RESERVED_FIELD_A << 26); + *word |= (SPACECRAFT_ID << 16); + *word |= (VIRTUAL_CHANNEL << 10); + *word |= (DUMMY_BITS << 8); uint8_t positiveWindow = 0; ReturnValue_t result = localParameterHandler.getValue(pdecconfigdefs::paramkeys::POSITIVE_WINDOW, positiveWindow); if (result != returnvalue::OK) { return result; } - word |= static_cast(positiveWindow); - return word; + *word |= static_cast(positiveWindow); + return returnvalue::OK; } -uint32_t PdecConfig::createSecondWord() { +ReturnValue_t PdecConfig::createSecondWord(uint32_t* word) { uint8_t negativeWindow = 0; ReturnValue_t result = localParameterHandler.getValue(pdecconfigdefs::paramkeys::NEGATIVE_WINDOW, negativeWindow); if (result != returnvalue::OK) { return result; } - uint32_t word = 0; - word = 0; - word |= (static_cast(negativeWindow) << 24); - word |= (HIGH_AU_MAP_ID << 16); - word |= (ENABLE_DERANDOMIZER << 8); - return word; + *word = 0; + *word = 0; + *word |= (static_cast(negativeWindow) << 24); + *word |= (HIGH_AU_MAP_ID << 16); + *word |= (ENABLE_DERANDOMIZER << 8); + return returnvalue::OK; } uint32_t PdecConfig::readbackFirstWord() { - return *(memoryBaseAddress + FRAME_HEADER_OFFSET); + return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_FIRST_CONFIG_WORD); } uint32_t PdecConfig::readbackSecondWord() { - return *(memoryBaseAddress + FRAME_HEADER_OFFSET + 1); + return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_SECOND_CONFIG_WORD); } diff --git a/linux/ipcore/PdecConfig.h b/linux/ipcore/PdecConfig.h index 3f17f08f..e3faee4d 100644 --- a/linux/ipcore/PdecConfig.h +++ b/linux/ipcore/PdecConfig.h @@ -51,16 +51,21 @@ class PdecConfig { /** * @brief Creates the first word of the PDEC configuration * - * @return The created config word + * @param word The created word will be written to this pointer + * + * @return OK if successful, otherwise error return value + * */ - uint32_t createFirstWord(); + ReturnValue_t createFirstWord(uint32_t* word); /** * @brief Creates the second word of the PDEC configuration * - * @return The created config word + * @param word The created word will be written to this pointer + * + * @return OK if successful, otherwise error return value */ - uint32_t createSecondWord(); + ReturnValue_t createSecondWord(uint32_t* word); /** * @brief Reads first config word from the config memory @@ -94,6 +99,8 @@ class PdecConfig { // 0x200 / 4 = 0x80 static const uint32_t FRAME_HEADER_OFFSET = 0x80; + static const uint32_t OFFSET_FIRST_CONFIG_WORD = 0; + static const uint32_t OFFSET_SECOND_CONFIG_WORD = 1; static const uint32_t MAP_ADDR_LUT_OFFSET = 0xA0; static const uint32_t MAP_CLK_FREQ_OFFSET = 0x90; diff --git a/linux/ipcore/PdecHandler.cpp b/linux/ipcore/PdecHandler.cpp index 86df3ad2..91aec623 100644 --- a/linux/ipcore/PdecHandler.cpp +++ b/linux/ipcore/PdecHandler.cpp @@ -579,8 +579,24 @@ void PdecHandler::handleIReason(uint32_t pdecFar, ReturnValue_t parameter1) { } void PdecHandler::checkConfig() { - uint32_t firstWord = pdecConfig.createFirstWord(); - uint32_t secondWord = pdecConfig.createSecondWord(); + uint32_t firstWord = 0; + ReturnValue_t result = pdecConfig.createFirstWord(&firstWord); + if (result != returnvalue::OK) { + // This should normally never happen during runtime. So here is just + // output a warning + sif::warning << "PdecHandler::checkConfig: Failed to create first word" + << std::endl; + return; + } + uint32_t secondWord = 0; + result = pdecConfig.createSecondWord(&secondWord); + if (result != returnvalue::OK) { + // This should normally never happen during runtime. So here is just + // output a warning + sif::warning << "PdecHandler::checkConfig: Failed to create second word" + << std::endl; + return; + } if (firstWord != pdecConfig.readbackFirstWord() or secondWord != pdecConfig.readbackSecondWord()) { triggerEvent(PDEC_CONFIG_CORRUPTED, firstWord, secondWord); -- 2.43.0 From 567d68107da39fcba4f791b74ec066624c826b22 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 14 Aug 2023 15:06:22 +0200 Subject: [PATCH 3/5] auto-formatting --- linux/ipcore/PdecConfig.cpp | 80 ++++++++++++++++++------------------ linux/ipcore/PdecConfig.h | 56 ++++++++++++------------- linux/ipcore/PdecHandler.cpp | 30 +++++++------- 3 files changed, 82 insertions(+), 84 deletions(-) diff --git a/linux/ipcore/PdecConfig.cpp b/linux/ipcore/PdecConfig.cpp index 8399f6d3..19423862 100644 --- a/linux/ipcore/PdecConfig.cpp +++ b/linux/ipcore/PdecConfig.cpp @@ -116,20 +116,20 @@ ReturnValue_t PdecConfig::getNegativeWindow(uint8_t& negativeWindow) { ReturnValue_t PdecConfig::writeFrameHeaderFirstWord() { uint32_t word = 0; - ReturnValue_t result = createFirstWord(&word); - if (result != returnvalue::OK) { - return result; - } + ReturnValue_t result = createFirstWord(&word); + if (result != returnvalue::OK) { + return result; + } *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_FIRST_CONFIG_WORD) = word; return returnvalue::OK; } ReturnValue_t PdecConfig::writeFrameHeaderSecondWord() { uint32_t word = 0; - ReturnValue_t result = createSecondWord(&word); - if (result != returnvalue::OK) { - return result; - } + ReturnValue_t result = createSecondWord(&word); + if (result != returnvalue::OK) { + return result; + } *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_SECOND_CONFIG_WORD) = word; return returnvalue::OK; } @@ -171,47 +171,47 @@ uint8_t PdecConfig::getOddParity(uint8_t number) { } ReturnValue_t PdecConfig::createFirstWord(uint32_t* word) { - *word = 0; - *word |= (VERSION_ID << 30); + *word = 0; + *word |= (VERSION_ID << 30); - // Setting the bypass flag and the control command flag should not have any - // implication on the operation of the PDEC IP Core - *word |= (BYPASS_FLAG << 29); - *word |= (CONTROL_COMMAND_FLAG << 28); + // Setting the bypass flag and the control command flag should not have any + // implication on the operation of the PDEC IP Core + *word |= (BYPASS_FLAG << 29); + *word |= (CONTROL_COMMAND_FLAG << 28); - *word |= (RESERVED_FIELD_A << 26); - *word |= (SPACECRAFT_ID << 16); - *word |= (VIRTUAL_CHANNEL << 10); - *word |= (DUMMY_BITS << 8); - uint8_t positiveWindow = 0; - ReturnValue_t result = - localParameterHandler.getValue(pdecconfigdefs::paramkeys::POSITIVE_WINDOW, positiveWindow); - if (result != returnvalue::OK) { - return result; - } - *word |= static_cast(positiveWindow); - return returnvalue::OK; + *word |= (RESERVED_FIELD_A << 26); + *word |= (SPACECRAFT_ID << 16); + *word |= (VIRTUAL_CHANNEL << 10); + *word |= (DUMMY_BITS << 8); + uint8_t positiveWindow = 0; + ReturnValue_t result = + localParameterHandler.getValue(pdecconfigdefs::paramkeys::POSITIVE_WINDOW, positiveWindow); + if (result != returnvalue::OK) { + return result; + } + *word |= static_cast(positiveWindow); + return returnvalue::OK; } ReturnValue_t PdecConfig::createSecondWord(uint32_t* word) { - uint8_t negativeWindow = 0; - ReturnValue_t result = - localParameterHandler.getValue(pdecconfigdefs::paramkeys::NEGATIVE_WINDOW, negativeWindow); - if (result != returnvalue::OK) { - return result; - } - *word = 0; - *word = 0; - *word |= (static_cast(negativeWindow) << 24); - *word |= (HIGH_AU_MAP_ID << 16); - *word |= (ENABLE_DERANDOMIZER << 8); - return returnvalue::OK; + uint8_t negativeWindow = 0; + ReturnValue_t result = + localParameterHandler.getValue(pdecconfigdefs::paramkeys::NEGATIVE_WINDOW, negativeWindow); + if (result != returnvalue::OK) { + return result; + } + *word = 0; + *word = 0; + *word |= (static_cast(negativeWindow) << 24); + *word |= (HIGH_AU_MAP_ID << 16); + *word |= (ENABLE_DERANDOMIZER << 8); + return returnvalue::OK; } uint32_t PdecConfig::readbackFirstWord() { - return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_FIRST_CONFIG_WORD); + return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_FIRST_CONFIG_WORD); } uint32_t PdecConfig::readbackSecondWord() { - return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_SECOND_CONFIG_WORD); + return *(memoryBaseAddress + FRAME_HEADER_OFFSET + OFFSET_SECOND_CONFIG_WORD); } diff --git a/linux/ipcore/PdecConfig.h b/linux/ipcore/PdecConfig.h index e3faee4d..1f2ed9c8 100644 --- a/linux/ipcore/PdecConfig.h +++ b/linux/ipcore/PdecConfig.h @@ -49,37 +49,37 @@ class PdecConfig { ReturnValue_t getNegativeWindow(uint8_t& negativeWindow); /** - * @brief Creates the first word of the PDEC configuration - * - * @param word The created word will be written to this pointer - * - * @return OK if successful, otherwise error return value - * - */ - ReturnValue_t createFirstWord(uint32_t* word); + * @brief Creates the first word of the PDEC configuration + * + * @param word The created word will be written to this pointer + * + * @return OK if successful, otherwise error return value + * + */ + ReturnValue_t createFirstWord(uint32_t* word); - /** - * @brief Creates the second word of the PDEC configuration - * - * @param word The created word will be written to this pointer - * - * @return OK if successful, otherwise error return value - */ - ReturnValue_t createSecondWord(uint32_t* word); + /** + * @brief Creates the second word of the PDEC configuration + * + * @param word The created word will be written to this pointer + * + * @return OK if successful, otherwise error return value + */ + ReturnValue_t createSecondWord(uint32_t* word); - /** - * @brief Reads first config word from the config memory - * - * @return The config word - */ - uint32_t readbackFirstWord(); + /** + * @brief Reads first config word from the config memory + * + * @return The config word + */ + uint32_t readbackFirstWord(); - /** - * @brief Reads the second config word from the config memory - * - * @return The config word - */ - uint32_t readbackSecondWord(); + /** + * @brief Reads the second config word from the config memory + * + * @return The config word + */ + uint32_t readbackSecondWord(); private: // TC transfer frame configuration parameters diff --git a/linux/ipcore/PdecHandler.cpp b/linux/ipcore/PdecHandler.cpp index 91aec623..189dfca8 100644 --- a/linux/ipcore/PdecHandler.cpp +++ b/linux/ipcore/PdecHandler.cpp @@ -579,28 +579,26 @@ void PdecHandler::handleIReason(uint32_t pdecFar, ReturnValue_t parameter1) { } void PdecHandler::checkConfig() { - uint32_t firstWord = 0; + uint32_t firstWord = 0; ReturnValue_t result = pdecConfig.createFirstWord(&firstWord); if (result != returnvalue::OK) { - // This should normally never happen during runtime. So here is just - // output a warning - sif::warning << "PdecHandler::checkConfig: Failed to create first word" - << std::endl; - return; + // This should normally never happen during runtime. So here is just + // output a warning + sif::warning << "PdecHandler::checkConfig: Failed to create first word" << std::endl; + return; } - uint32_t secondWord = 0; + uint32_t secondWord = 0; result = pdecConfig.createSecondWord(&secondWord); if (result != returnvalue::OK) { - // This should normally never happen during runtime. So here is just - // output a warning - sif::warning << "PdecHandler::checkConfig: Failed to create second word" - << std::endl; - return; + // This should normally never happen during runtime. So here is just + // output a warning + sif::warning << "PdecHandler::checkConfig: Failed to create second word" << std::endl; + return; + } + if (firstWord != pdecConfig.readbackFirstWord() or + secondWord != pdecConfig.readbackSecondWord()) { + triggerEvent(PDEC_CONFIG_CORRUPTED, firstWord, secondWord); } - if (firstWord != pdecConfig.readbackFirstWord() or - secondWord != pdecConfig.readbackSecondWord()) { - triggerEvent(PDEC_CONFIG_CORRUPTED, firstWord, secondWord); - } } void PdecHandler::handleNewTc() { -- 2.43.0 From 424f3c5247baf54d0a232d37ca867927dc72b6ca Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 14 Aug 2023 15:09:45 +0200 Subject: [PATCH 4/5] changelog and re-run generators --- CHANGELOG.md | 3 +++ bsp_hosted/fsfwconfig/events/translateEvents.cpp | 7 +++++-- bsp_hosted/fsfwconfig/objects/translateObjects.cpp | 2 +- generators/bsp_hosted_events.csv | 1 + generators/bsp_q7s_events.csv | 1 + generators/events/translateEvents.cpp | 7 +++++-- generators/objects/translateObjects.cpp | 2 +- linux/fsfwconfig/events/translateEvents.cpp | 7 +++++-- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- tmtc | 2 +- 10 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd4cb9cb..8958a80c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,9 @@ will consitute of a breaking change warranting a new major release: ## Added - Skyview dataset for more GPS TM has been added +- `PDEC_CONFIG_CORRUPTED` event which is triggered when the PDEC configuration does not match the + expected configuration. P1 will contain the readback of the first word and P2 will contain the + readback of the second word. ## Fixed - The handling function of the GPS data is only called once per GPS read. This should remove diff --git a/bsp_hosted/fsfwconfig/events/translateEvents.cpp b/bsp_hosted/fsfwconfig/events/translateEvents.cpp index 3a53a4fb..51186d86 100644 --- a/bsp_hosted/fsfwconfig/events/translateEvents.cpp +++ b/bsp_hosted/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 302 translations. + * @brief Auto-generated event translation file. Contains 303 translations. * @details - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateEvents.h" @@ -167,6 +167,7 @@ const char *PDEC_TRYING_RESET_NO_INIT_STRING = "PDEC_TRYING_RESET_NO_INIT"; const char *PDEC_RESET_FAILED_STRING = "PDEC_RESET_FAILED"; const char *OPEN_IRQ_FILE_FAILED_STRING = "OPEN_IRQ_FILE_FAILED"; const char *PDEC_INIT_FAILED_STRING = "PDEC_INIT_FAILED"; +const char *PDEC_CONFIG_CORRUPTED_STRING = "PDEC_CONFIG_CORRUPTED"; const char *IMAGE_UPLOAD_FAILED_STRING = "IMAGE_UPLOAD_FAILED"; const char *IMAGE_DOWNLOAD_FAILED_STRING = "IMAGE_DOWNLOAD_FAILED"; const char *IMAGE_UPLOAD_SUCCESSFUL_STRING = "IMAGE_UPLOAD_SUCCESSFUL"; @@ -634,6 +635,8 @@ const char *translateEvents(Event event) { return OPEN_IRQ_FILE_FAILED_STRING; case (12414): return PDEC_INIT_FAILED_STRING; + case (12415): + return PDEC_CONFIG_CORRUPTED_STRING; case (12500): return IMAGE_UPLOAD_FAILED_STRING; case (12501): diff --git a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp index 8a6f23a0..ca561e5a 100644 --- a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp +++ b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 171 translations. - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateObjects.h" diff --git a/generators/bsp_hosted_events.csv b/generators/bsp_hosted_events.csv index 1c6f646d..ecdf9534 100644 --- a/generators/bsp_hosted_events.csv +++ b/generators/bsp_hosted_events.csv @@ -161,6 +161,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 12412;0x307c;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/pdec.h 12413;0x307d;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/pdec.h 12414;0x307e;PDEC_INIT_FAILED;HIGH;PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues.;linux/ipcore/pdec.h +12415;0x307f;PDEC_CONFIG_CORRUPTED;HIGH;The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word;linux/ipcore/pdec.h 12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/acs/StrComHandler.h 12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/acs/StrComHandler.h 12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/acs/StrComHandler.h diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 1c6f646d..ecdf9534 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -161,6 +161,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 12412;0x307c;PDEC_RESET_FAILED;HIGH;Failed to pull PDEC reset to low;linux/ipcore/pdec.h 12413;0x307d;OPEN_IRQ_FILE_FAILED;HIGH;Failed to open the IRQ uio file;linux/ipcore/pdec.h 12414;0x307e;PDEC_INIT_FAILED;HIGH;PDEC initialization failed. This might also be due to the persistent confiuration never becoming available, for example due to SD card issues.;linux/ipcore/pdec.h +12415;0x307f;PDEC_CONFIG_CORRUPTED;HIGH;The PDEC configuration area has been corrupted P1: The first configuration word P2: The second configuration word;linux/ipcore/pdec.h 12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/acs/StrComHandler.h 12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/acs/StrComHandler.h 12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/acs/StrComHandler.h diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 3a53a4fb..51186d86 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 302 translations. + * @brief Auto-generated event translation file. Contains 303 translations. * @details - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateEvents.h" @@ -167,6 +167,7 @@ const char *PDEC_TRYING_RESET_NO_INIT_STRING = "PDEC_TRYING_RESET_NO_INIT"; const char *PDEC_RESET_FAILED_STRING = "PDEC_RESET_FAILED"; const char *OPEN_IRQ_FILE_FAILED_STRING = "OPEN_IRQ_FILE_FAILED"; const char *PDEC_INIT_FAILED_STRING = "PDEC_INIT_FAILED"; +const char *PDEC_CONFIG_CORRUPTED_STRING = "PDEC_CONFIG_CORRUPTED"; const char *IMAGE_UPLOAD_FAILED_STRING = "IMAGE_UPLOAD_FAILED"; const char *IMAGE_DOWNLOAD_FAILED_STRING = "IMAGE_DOWNLOAD_FAILED"; const char *IMAGE_UPLOAD_SUCCESSFUL_STRING = "IMAGE_UPLOAD_SUCCESSFUL"; @@ -634,6 +635,8 @@ const char *translateEvents(Event event) { return OPEN_IRQ_FILE_FAILED_STRING; case (12414): return PDEC_INIT_FAILED_STRING; + case (12415): + return PDEC_CONFIG_CORRUPTED_STRING; case (12500): return IMAGE_UPLOAD_FAILED_STRING; case (12501): diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index f4779490..8430ac93 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 175 translations. - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateObjects.h" diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 3a53a4fb..51186d86 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 302 translations. + * @brief Auto-generated event translation file. Contains 303 translations. * @details - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateEvents.h" @@ -167,6 +167,7 @@ const char *PDEC_TRYING_RESET_NO_INIT_STRING = "PDEC_TRYING_RESET_NO_INIT"; const char *PDEC_RESET_FAILED_STRING = "PDEC_RESET_FAILED"; const char *OPEN_IRQ_FILE_FAILED_STRING = "OPEN_IRQ_FILE_FAILED"; const char *PDEC_INIT_FAILED_STRING = "PDEC_INIT_FAILED"; +const char *PDEC_CONFIG_CORRUPTED_STRING = "PDEC_CONFIG_CORRUPTED"; const char *IMAGE_UPLOAD_FAILED_STRING = "IMAGE_UPLOAD_FAILED"; const char *IMAGE_DOWNLOAD_FAILED_STRING = "IMAGE_DOWNLOAD_FAILED"; const char *IMAGE_UPLOAD_SUCCESSFUL_STRING = "IMAGE_UPLOAD_SUCCESSFUL"; @@ -634,6 +635,8 @@ const char *translateEvents(Event event) { return OPEN_IRQ_FILE_FAILED_STRING; case (12414): return PDEC_INIT_FAILED_STRING; + case (12415): + return PDEC_CONFIG_CORRUPTED_STRING; case (12500): return IMAGE_UPLOAD_FAILED_STRING; case (12501): diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index f4779490..8430ac93 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 175 translations. - * Generated on: 2023-08-02 09:40:31 + * Generated on: 2023-08-14 15:09:10 */ #include "translateObjects.h" diff --git a/tmtc b/tmtc index 4b054b76..8042f360 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 4b054b7628e43975e2401c7db10c358824f7a2d3 +Subproject commit 8042f3607d3a09da89114f30eba525dc166b6fc0 -- 2.43.0 From 693c183dcc9c896ddeaff054b76c0d19c580f12f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 14 Aug 2023 16:07:16 +0200 Subject: [PATCH 5/5] bump tmtc --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 8042f360..fd3a7990 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 8042f3607d3a09da89114f30eba525dc166b6fc0 +Subproject commit fd3a799019f6910cbbb4447cc9605340d66c2703 -- 2.43.0