Merge remote-tracking branch 'origin/main' into plpcdu-json-file-update
All checks were successful
EIVE/eive-obsw/pipeline/pr-main This commit looks good

This commit is contained in:
Robin Müller 2023-10-27 12:35:55 +02:00
commit 6459a945ea
Signed by: muellerr
GPG Key ID: A649FB78196E3849
20 changed files with 121 additions and 41 deletions

View File

@ -22,6 +22,9 @@ will consitute of a breaking change warranting a new major release:
CFDP interface. CFDP interface.
- Proper back pressure handling for the CFDP handler, where the `LiveTmTask` is able to throttle - Proper back pressure handling for the CFDP handler, where the `LiveTmTask` is able to throttle
the CFDP handler. the CFDP handler.
- Added CFDP fault handler events.
- The EIVE system will command the payload OFF explicitely again when receiving the
`power::POWER_LEVEL_CRITICAL` event.
## Fixed ## Fixed
@ -38,6 +41,11 @@ will consitute of a breaking change warranting a new major release:
- Possible bugfix for PL PCDU parameter JSON handling which might not have been initialized - Possible bugfix for PL PCDU parameter JSON handling which might not have been initialized
properly from the JSON file. properly from the JSON file.
## Changed
- Added a 3 second delay in the EIVE system between commanding all PL components except the SUPV,
and the SUPV itself OFF when the power level becomes low or critical.
# [v7.1.0] 2023-10-11 # [v7.1.0] 2023-10-11
- Bumped `eive-tmtc` to v5.8.0. - Bumped `eive-tmtc` to v5.8.0.

View File

@ -1,7 +1,7 @@
/** /**
* @brief Auto-generated event translation file. Contains 314 translations. * @brief Auto-generated event translation file. Contains 315 translations.
* @details * @details
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateEvents.h" #include "translateEvents.h"
@ -319,6 +319,7 @@ const char *DUMP_HK_CANCELLED_STRING = "DUMP_HK_CANCELLED";
const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED"; const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED";
const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START"; const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START";
const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY"; const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY";
const char *FAULT_HANDLER_TRIGGERED_STRING = "FAULT_HANDLER_TRIGGERED";
const char *translateEvents(Event event) { const char *translateEvents(Event event) {
switch ((event & 0xFFFF)) { switch ((event & 0xFFFF)) {
@ -950,6 +951,8 @@ const char *translateEvents(Event event) {
return TEMPERATURE_ALL_ONES_START_STRING; return TEMPERATURE_ALL_ONES_START_STRING;
case (14501): case (14501):
return TEMPERATURE_ALL_ONES_RECOVERY_STRING; return TEMPERATURE_ALL_ONES_RECOVERY_STRING;
case (14600):
return FAULT_HANDLER_TRIGGERED_STRING;
default: default:
return "UNKNOWN_EVENT"; return "UNKNOWN_EVENT";
} }

View File

@ -1,8 +1,8 @@
/** /**
* @brief Auto-generated object translation file. * @brief Auto-generated object translation file.
* @details * @details
* Contains 174 translations. * Contains 175 translations.
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateObjects.h" #include "translateObjects.h"
@ -161,6 +161,7 @@ const char *PUS_TM_FUNNEL_STRING = "PUS_TM_FUNNEL";
const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL"; const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL";
const char *CFDP_HANDLER_STRING = "CFDP_HANDLER"; const char *CFDP_HANDLER_STRING = "CFDP_HANDLER";
const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR"; const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR";
const char *CFDP_FAULT_HANDLER_STRING = "CFDP_FAULT_HANDLER";
const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM"; const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM";
const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM"; const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM";
const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM"; const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM";
@ -493,6 +494,8 @@ const char *translateObject(object_id_t object) {
return CFDP_HANDLER_STRING; return CFDP_HANDLER_STRING;
case 0x73000206: case 0x73000206:
return CFDP_DISTRIBUTOR_STRING; return CFDP_DISTRIBUTOR_STRING;
case 0x73000207:
return CFDP_FAULT_HANDLER_STRING;
case 0x73010000: case 0x73010000:
return EIVE_SYSTEM_STRING; return EIVE_SYSTEM_STRING;
case 0x73010001: case 0x73010001:

View File

@ -41,6 +41,7 @@ enum : uint8_t {
PERSISTENT_TM_STORE = 143, PERSISTENT_TM_STORE = 143,
SYRLINKS_COM = 144, SYRLINKS_COM = 144,
SUS_HANDLER = 145, SUS_HANDLER = 145,
CFDP_APP = 146,
COMMON_SUBSYSTEM_ID_END COMMON_SUBSYSTEM_ID_END
}; };

View File

@ -166,6 +166,7 @@ enum commonObjects : uint32_t {
CFDP_TM_FUNNEL = 0x73000102, CFDP_TM_FUNNEL = 0x73000102,
CFDP_HANDLER = 0x73000205, CFDP_HANDLER = 0x73000205,
CFDP_DISTRIBUTOR = 0x73000206, CFDP_DISTRIBUTOR = 0x73000206,
CFDP_FAULT_HANDLER = 0x73000207,
MISC_TM_STORE = 0x73020001, MISC_TM_STORE = 0x73020001,
OK_TM_STORE = 0x73020002, OK_TM_STORE = 0x73020002,
NOT_OK_TM_STORE = 0x73020003, NOT_OK_TM_STORE = 0x73020003,

View File

@ -313,3 +313,4 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h 14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h 14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values again, resetting invalid message counter. P1: Invalid message counter.;mission/acs/SusHandler.h 14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values again, resetting invalid message counter. P1: Invalid message counter.;mission/acs/SusHandler.h
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h

1 Event ID (dec) Event ID (hex) Name Severity Description File Path
313 14314 0x37ea DUMP_CFDP_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
314 14500 0x38a4 TEMPERATURE_ALL_ONES_START MEDIUM Detected invalid values, starting invalid message counting mission/acs/SusHandler.h
315 14501 0x38a5 TEMPERATURE_ALL_ONES_RECOVERY INFO Detected valid values again, resetting invalid message counter. P1: Invalid message counter. mission/acs/SusHandler.h
316 14600 0x3908 FAULT_HANDLER_TRIGGERED LOW P1: CFDP fault handler code. P2: CFDP condition code. mission/cfdp/defs.h

View File

@ -153,6 +153,7 @@
0x73000102;CFDP_TM_FUNNEL 0x73000102;CFDP_TM_FUNNEL
0x73000205;CFDP_HANDLER 0x73000205;CFDP_HANDLER
0x73000206;CFDP_DISTRIBUTOR 0x73000206;CFDP_DISTRIBUTOR
0x73000207;CFDP_FAULT_HANDLER
0x73010000;EIVE_SYSTEM 0x73010000;EIVE_SYSTEM
0x73010001;ACS_SUBSYSTEM 0x73010001;ACS_SUBSYSTEM
0x73010002;PL_SUBSYSTEM 0x73010002;PL_SUBSYSTEM

1 0x42694269 TEST_TASK
153 0x73000102 CFDP_TM_FUNNEL
154 0x73000205 CFDP_HANDLER
155 0x73000206 CFDP_DISTRIBUTOR
156 0x73000207 CFDP_FAULT_HANDLER
157 0x73010000 EIVE_SYSTEM
158 0x73010001 ACS_SUBSYSTEM
159 0x73010002 PL_SUBSYSTEM

View File

@ -61,3 +61,4 @@
143;PERSISTENT_TM_STORE 143;PERSISTENT_TM_STORE
144;SYRLINKS_COM 144;SYRLINKS_COM
145;SUS_HANDLER 145;SUS_HANDLER
146;CFDP_APP

1 22 MEMORY
61 143 PERSISTENT_TM_STORE
62 144 SYRLINKS_COM
63 145 SUS_HANDLER
64 146 CFDP_APP

View File

@ -313,3 +313,4 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h 14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h 14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values again, resetting invalid message counter. P1: Invalid message counter.;mission/acs/SusHandler.h 14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values again, resetting invalid message counter. P1: Invalid message counter.;mission/acs/SusHandler.h
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h

1 Event ID (dec) Event ID (hex) Name Severity Description File Path
313 14314 0x37ea DUMP_CFDP_CANCELLED LOW P1: Number of dumped packets. P2: Total dumped bytes. mission/persistentTmStoreDefs.h
314 14500 0x38a4 TEMPERATURE_ALL_ONES_START MEDIUM Detected invalid values, starting invalid message counting mission/acs/SusHandler.h
315 14501 0x38a5 TEMPERATURE_ALL_ONES_RECOVERY INFO Detected valid values again, resetting invalid message counter. P1: Invalid message counter. mission/acs/SusHandler.h
316 14600 0x3908 FAULT_HANDLER_TRIGGERED LOW P1: CFDP fault handler code. P2: CFDP condition code. mission/cfdp/defs.h

View File

@ -158,6 +158,7 @@
0x73000102;CFDP_TM_FUNNEL 0x73000102;CFDP_TM_FUNNEL
0x73000205;CFDP_HANDLER 0x73000205;CFDP_HANDLER
0x73000206;CFDP_DISTRIBUTOR 0x73000206;CFDP_DISTRIBUTOR
0x73000207;CFDP_FAULT_HANDLER
0x73010000;EIVE_SYSTEM 0x73010000;EIVE_SYSTEM
0x73010001;ACS_SUBSYSTEM 0x73010001;ACS_SUBSYSTEM
0x73010002;PL_SUBSYSTEM 0x73010002;PL_SUBSYSTEM

1 0x00005060 P60DOCK_TEST_TASK
158 0x73000102 CFDP_TM_FUNNEL
159 0x73000205 CFDP_HANDLER
160 0x73000206 CFDP_DISTRIBUTOR
161 0x73000207 CFDP_FAULT_HANDLER
162 0x73010000 EIVE_SYSTEM
163 0x73010001 ACS_SUBSYSTEM
164 0x73010002 PL_SUBSYSTEM

View File

@ -61,3 +61,4 @@
143;PERSISTENT_TM_STORE 143;PERSISTENT_TM_STORE
144;SYRLINKS_COM 144;SYRLINKS_COM
145;SUS_HANDLER 145;SUS_HANDLER
146;CFDP_APP

1 22 MEMORY
61 143 PERSISTENT_TM_STORE
62 144 SYRLINKS_COM
63 145 SUS_HANDLER
64 146 CFDP_APP

View File

@ -1,7 +1,7 @@
/** /**
* @brief Auto-generated event translation file. Contains 314 translations. * @brief Auto-generated event translation file. Contains 315 translations.
* @details * @details
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateEvents.h" #include "translateEvents.h"
@ -319,6 +319,7 @@ const char *DUMP_HK_CANCELLED_STRING = "DUMP_HK_CANCELLED";
const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED"; const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED";
const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START"; const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START";
const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY"; const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY";
const char *FAULT_HANDLER_TRIGGERED_STRING = "FAULT_HANDLER_TRIGGERED";
const char *translateEvents(Event event) { const char *translateEvents(Event event) {
switch ((event & 0xFFFF)) { switch ((event & 0xFFFF)) {
@ -950,6 +951,8 @@ const char *translateEvents(Event event) {
return TEMPERATURE_ALL_ONES_START_STRING; return TEMPERATURE_ALL_ONES_START_STRING;
case (14501): case (14501):
return TEMPERATURE_ALL_ONES_RECOVERY_STRING; return TEMPERATURE_ALL_ONES_RECOVERY_STRING;
case (14600):
return FAULT_HANDLER_TRIGGERED_STRING;
default: default:
return "UNKNOWN_EVENT"; return "UNKNOWN_EVENT";
} }

View File

@ -1,8 +1,8 @@
/** /**
* @brief Auto-generated object translation file. * @brief Auto-generated object translation file.
* @details * @details
* Contains 178 translations. * Contains 179 translations.
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateObjects.h" #include "translateObjects.h"
@ -166,6 +166,7 @@ const char *PUS_TM_FUNNEL_STRING = "PUS_TM_FUNNEL";
const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL"; const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL";
const char *CFDP_HANDLER_STRING = "CFDP_HANDLER"; const char *CFDP_HANDLER_STRING = "CFDP_HANDLER";
const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR"; const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR";
const char *CFDP_FAULT_HANDLER_STRING = "CFDP_FAULT_HANDLER";
const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM"; const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM";
const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM"; const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM";
const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM"; const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM";
@ -507,6 +508,8 @@ const char *translateObject(object_id_t object) {
return CFDP_HANDLER_STRING; return CFDP_HANDLER_STRING;
case 0x73000206: case 0x73000206:
return CFDP_DISTRIBUTOR_STRING; return CFDP_DISTRIBUTOR_STRING;
case 0x73000207:
return CFDP_FAULT_HANDLER_STRING;
case 0x73010000: case 0x73010000:
return EIVE_SYSTEM_STRING; return EIVE_SYSTEM_STRING;
case 0x73010001: case 0x73010001:

View File

@ -1,7 +1,7 @@
/** /**
* @brief Auto-generated event translation file. Contains 314 translations. * @brief Auto-generated event translation file. Contains 315 translations.
* @details * @details
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateEvents.h" #include "translateEvents.h"
@ -319,6 +319,7 @@ const char *DUMP_HK_CANCELLED_STRING = "DUMP_HK_CANCELLED";
const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED"; const char *DUMP_CFDP_CANCELLED_STRING = "DUMP_CFDP_CANCELLED";
const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START"; const char *TEMPERATURE_ALL_ONES_START_STRING = "TEMPERATURE_ALL_ONES_START";
const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY"; const char *TEMPERATURE_ALL_ONES_RECOVERY_STRING = "TEMPERATURE_ALL_ONES_RECOVERY";
const char *FAULT_HANDLER_TRIGGERED_STRING = "FAULT_HANDLER_TRIGGERED";
const char *translateEvents(Event event) { const char *translateEvents(Event event) {
switch ((event & 0xFFFF)) { switch ((event & 0xFFFF)) {
@ -950,6 +951,8 @@ const char *translateEvents(Event event) {
return TEMPERATURE_ALL_ONES_START_STRING; return TEMPERATURE_ALL_ONES_START_STRING;
case (14501): case (14501):
return TEMPERATURE_ALL_ONES_RECOVERY_STRING; return TEMPERATURE_ALL_ONES_RECOVERY_STRING;
case (14600):
return FAULT_HANDLER_TRIGGERED_STRING;
default: default:
return "UNKNOWN_EVENT"; return "UNKNOWN_EVENT";
} }

View File

@ -1,8 +1,8 @@
/** /**
* @brief Auto-generated object translation file. * @brief Auto-generated object translation file.
* @details * @details
* Contains 178 translations. * Contains 179 translations.
* Generated on: 2023-10-13 15:23:30 * Generated on: 2023-10-19 11:29:35
*/ */
#include "translateObjects.h" #include "translateObjects.h"
@ -166,6 +166,7 @@ const char *PUS_TM_FUNNEL_STRING = "PUS_TM_FUNNEL";
const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL"; const char *CFDP_TM_FUNNEL_STRING = "CFDP_TM_FUNNEL";
const char *CFDP_HANDLER_STRING = "CFDP_HANDLER"; const char *CFDP_HANDLER_STRING = "CFDP_HANDLER";
const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR"; const char *CFDP_DISTRIBUTOR_STRING = "CFDP_DISTRIBUTOR";
const char *CFDP_FAULT_HANDLER_STRING = "CFDP_FAULT_HANDLER";
const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM"; const char *EIVE_SYSTEM_STRING = "EIVE_SYSTEM";
const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM"; const char *ACS_SUBSYSTEM_STRING = "ACS_SUBSYSTEM";
const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM"; const char *PL_SUBSYSTEM_STRING = "PL_SUBSYSTEM";
@ -507,6 +508,8 @@ const char *translateObject(object_id_t object) {
return CFDP_HANDLER_STRING; return CFDP_HANDLER_STRING;
case 0x73000206: case 0x73000206:
return CFDP_DISTRIBUTOR_STRING; return CFDP_DISTRIBUTOR_STRING;
case 0x73000207:
return CFDP_FAULT_HANDLER_STRING;
case 0x73010000: case 0x73010000:
return EIVE_SYSTEM_STRING; return EIVE_SYSTEM_STRING;
case 0x73010001: case 0x73010001:

View File

@ -1,28 +1,35 @@
#ifndef MISSION_CFDP_CFDPFAULTHANDLER_H_ #ifndef MISSION_CFDP_CFDPFAULTHANDLER_H_
#define MISSION_CFDP_CFDPFAULTHANDLER_H_ #define MISSION_CFDP_CFDPFAULTHANDLER_H_
#include "defs.h"
#include "fsfw/cfdp.h" #include "fsfw/cfdp.h"
namespace cfdp { namespace cfdp {
class EiveFaultHandler : public cfdp::FaultHandlerBase { class EiveFaultHandler : public cfdp::FaultHandlerBase, public SystemObject {
public: public:
EiveFaultHandler(object_id_t objectId) : SystemObject(objectId) {}
void noticeOfSuspensionCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { void noticeOfSuspensionCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override {
sif::warning << "Notice of suspension detected for transaction " << id sif::warning << "Notice of suspension detected for transaction " << id
<< " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl;
triggerEvent(cfdp::FAULT_HANDLER_TRIGGERED, FaultHandlerCode::NOTICE_OF_SUSPENSION, code);
} }
void noticeOfCancellationCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { void noticeOfCancellationCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override {
sif::warning << "Notice of suspension detected for transaction " << id sif::warning << "Notice of suspension detected for transaction " << id
<< " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl;
triggerEvent(cfdp::FAULT_HANDLER_TRIGGERED, FaultHandlerCode::NOTICE_OF_CANCELLATION, code);
} }
void abandonCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { void abandonCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override {
sif::warning << "Transaction " << id sif::warning << "Transaction " << id
<< " was abandoned, condition code : " << cfdp::getConditionCodeString(code) << " was abandoned, condition code : " << cfdp::getConditionCodeString(code)
<< std::endl; << std::endl;
triggerEvent(cfdp::FAULT_HANDLER_TRIGGERED, FaultHandlerCode::ABANDON_TRANSACTION, code);
} }
void ignoreCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { void ignoreCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override {
sif::warning << "Fault ignored for transaction " << id sif::warning << "Fault ignored for transaction " << id
<< ", condition code: " << cfdp::getConditionCodeString(code) << std::endl; << ", condition code: " << cfdp::getConditionCodeString(code) << std::endl;
triggerEvent(cfdp::FAULT_HANDLER_TRIGGERED, FaultHandlerCode::IGNORE_ERROR, code);
} }
}; };

16
mission/cfdp/defs.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef MISSION_CFDP_DEFS_H_
#define MISSION_CFDP_DEFS_H_
#include "eive/eventSubsystemIds.h"
#include "fsfw/events/Event.h"
namespace cfdp {
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CFDP_APP;
//! [EXPORT] : [COMMENT] P1: CFDP fault handler code. P2: CFDP condition code.
static constexpr Event FAULT_HANDLER_TRIGGERED = event::makeEvent(SUBSYSTEM_ID, 0, severity::LOW);
} // namespace cfdp
#endif /* MISSION_CFDP_DEFS_H_ */

View File

@ -86,7 +86,6 @@ EntityId REMOTE_CFDP_ID(UnsignedByteField<uint16_t>(config::EIVE_GROUND_CFDP_ENT
RemoteEntityCfg GROUND_REMOTE_CFG(REMOTE_CFDP_ID); RemoteEntityCfg GROUND_REMOTE_CFG(REMOTE_CFDP_ID);
OneRemoteConfigProvider REMOTE_CFG_PROVIDER(GROUND_REMOTE_CFG); OneRemoteConfigProvider REMOTE_CFG_PROVIDER(GROUND_REMOTE_CFG);
HostFilesystem HOST_FS; HostFilesystem HOST_FS;
EiveFaultHandler EIVE_FAULT_HANDLER;
} // namespace cfdp } // namespace cfdp
@ -290,7 +289,8 @@ void ObjectFactory::produceGenericObjects(HealthTableIF** healthTable_, PusTmFun
cfdp::EntityId localId(apid); cfdp::EntityId localId(apid);
GROUND_REMOTE_CFG.defaultChecksum = cfdp::ChecksumType::CRC_32; GROUND_REMOTE_CFG.defaultChecksum = cfdp::ChecksumType::CRC_32;
GROUND_REMOTE_CFG.maxFileSegmentLen = config::CFDP_MAX_FILE_SEGMENT_LEN; GROUND_REMOTE_CFG.maxFileSegmentLen = config::CFDP_MAX_FILE_SEGMENT_LEN;
CfdpHandlerCfg cfdpCfg(localId, indicationCfg, *eiveUserHandler, EIVE_FAULT_HANDLER, PACKET_LIST, auto eiveFaultHandler = new EiveFaultHandler(objects::CFDP_FAULT_HANDLER);
CfdpHandlerCfg cfdpCfg(localId, indicationCfg, *eiveUserHandler, *eiveFaultHandler, PACKET_LIST,
LOST_SEGMENTS, REMOTE_CFG_PROVIDER); LOST_SEGMENTS, REMOTE_CFG_PROVIDER);
auto* cfdpHandler = new CfdpHandler(params, cfdpCfg, signals::CFDP_CHANNEL_THROTTLE_SIGNAL); auto* cfdpHandler = new CfdpHandler(params, cfdpCfg, signals::CFDP_CHANNEL_THROTTLE_SIGNAL);
// All CFDP packets arrive wrapped inside CCSDS space packets // All CFDP packets arrive wrapped inside CCSDS space packets

View File

@ -70,6 +70,9 @@ void EiveSystem::performChildOperation() {
} }
pdecRecoveryLogic(); pdecRecoveryLogic();
i2cRecoveryLogic(); i2cRecoveryLogic();
if (forcePlOffState != ForcePlOffState::NONE) {
forceOffPayload();
}
} }
ReturnValue_t EiveSystem::initialize() { ReturnValue_t EiveSystem::initialize() {
@ -203,10 +206,14 @@ void EiveSystem::handleEventMessages() {
break; break;
} }
case power::POWER_LEVEL_LOW: { case power::POWER_LEVEL_LOW: {
forceOffPayload(); forcePlOffState = ForcePlOffState::FORCE_ALL_EXCEPT_SUPV_OFF;
break; break;
} }
case power::POWER_LEVEL_CRITICAL: case power::POWER_LEVEL_CRITICAL: {
// Force payload off in any case. It really should not be on when the power level
// becomes critical, but better be safe than sorry..
forcePlOffState = ForcePlOffState::FORCE_ALL_EXCEPT_SUPV_OFF;
// Also set the STR assembly to faulty, which should cause a fallback to SAFE mode.
CommandMessage msg; CommandMessage msg;
HealthMessage::setHealthMessage(&msg, HealthMessage::HEALTH_SET, HasHealthIF::FAULTY); HealthMessage::setHealthMessage(&msg, HealthMessage::HEALTH_SET, HasHealthIF::FAULTY);
ReturnValue_t result = MessageQueueSenderIF::sendMessage( ReturnValue_t result = MessageQueueSenderIF::sendMessage(
@ -217,6 +224,7 @@ void EiveSystem::handleEventMessages() {
} }
break; break;
} }
}
break; break;
default: default:
sif::debug << "EiveSystem: Did not subscribe to event " << event.getEvent() << std::endl; sif::debug << "EiveSystem: Did not subscribe to event " << event.getEvent() << std::endl;
@ -403,38 +411,46 @@ void EiveSystem::pdecRecoveryLogic() {
void EiveSystem::forceOffPayload() { void EiveSystem::forceOffPayload() {
CommandMessage msg; CommandMessage msg;
ReturnValue_t result;
// set PL to faulty // set PL to faulty
HealthMessage::setHealthMessage(&msg, HealthMessage::HEALTH_SET, HasHealthIF::FAULTY); HealthMessage::setHealthMessage(&msg, HealthMessage::HEALTH_SET, HasHealthIF::FAULTY);
ReturnValue_t result = commandQueue->sendMessage(plPcduQueueId, &msg); if (forcePlOffState == ForcePlOffState::FORCE_ALL_EXCEPT_SUPV_OFF) {
if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PL PCDU failed" << std::endl;
}
result = commandQueue->sendMessage(plocMpsocQueueId, &msg); result = commandQueue->sendMessage(plocMpsocQueueId, &msg);
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PLOC MPSOC failed" << std::endl; sif::error << "EIVE System: Sending FAULTY command to PLOC MPSOC failed" << std::endl;
} }
result = commandQueue->sendMessage(plocSupervisorQueueId, &msg);
if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PLOC SUPERVISOR failed" << std::endl;
}
result = commandQueue->sendMessage(cameraQueueId, &msg); result = commandQueue->sendMessage(cameraQueueId, &msg);
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PL CAM failed" << std::endl; sif::error << "EIVE System: Sending FAULTY command to PL CAM failed" << std::endl;
} }
result = commandQueue->sendMessage(scexQueueId, &msg); result = commandQueue->sendMessage(scexQueueId, &msg);
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to SCEX failed" << std::endl; sif::error << "EIVE System: Sending FAULTY command to SCEX failed" << std::endl;
} }
result = commandQueue->sendMessage(radSensorQueueId, &msg); result = commandQueue->sendMessage(radSensorQueueId, &msg);
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to RAD SENSOR failed" << std::endl; sif::error << "EIVE System: Sending FAULTY command to RAD SENSOR failed" << std::endl;
} }
result = commandQueue->sendMessage(plPcduQueueId, &msg);
if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PL PCDU failed" << std::endl;
}
forcePlOffState = ForcePlOffState::WAITING;
supvOffDelay.resetTimer();
}
if (forcePlOffState == ForcePlOffState::WAITING and supvOffDelay.hasTimedOut()) {
forcePlOffState = ForcePlOffState::FORCE_SUPV_OFF;
}
if (forcePlOffState == ForcePlOffState::FORCE_SUPV_OFF) {
result = commandQueue->sendMessage(plocSupervisorQueueId, &msg);
if (result != returnvalue::OK) {
sif::error << "EIVE System: Sending FAULTY command to PLOC SUPERVISOR failed" << std::endl;
}
forcePlOffState = ForcePlOffState::NONE;
}
} }
void EiveSystem::commonI2cRecoverySequenceFinish() { void EiveSystem::commonI2cRecoverySequenceFinish() {

View File

@ -22,6 +22,12 @@ class EiveSystem : public Subsystem, public HasActionsIF {
[[nodiscard]] MessageQueueId_t getCommandQueue() const override; [[nodiscard]] MessageQueueId_t getCommandQueue() const override;
private: private:
enum class ForcePlOffState {
NONE,
FORCE_ALL_EXCEPT_SUPV_OFF,
WAITING,
FORCE_SUPV_OFF
} forcePlOffState = ForcePlOffState::NONE;
enum class I2cRebootState { enum class I2cRebootState {
NONE, NONE,
SYSTEM_MODE_BOOT, SYSTEM_MODE_BOOT,
@ -37,6 +43,7 @@ class EiveSystem : public Subsystem, public HasActionsIF {
bool alreadyTriedI2cRecovery = false; bool alreadyTriedI2cRecovery = false;
uint8_t frameDirtyErrorCounter = 0; uint8_t frameDirtyErrorCounter = 0;
Countdown supvOffDelay = Countdown(3000);
Countdown frameDirtyCheckCd = Countdown(10000); Countdown frameDirtyCheckCd = Countdown(10000);
// If the PDEC reset was already attempted in the last 2 minutes, there is a high chance that // If the PDEC reset was already attempted in the last 2 minutes, there is a high chance that
// only a full reboot will fix the issue. // only a full reboot will fix the issue.