ploc memory dumper complete
This commit is contained in:
parent
89b68940be
commit
0f79864446
@ -96,13 +96,6 @@ void initmission::initTasks() {
|
|||||||
initmission::printAddObjectError("UDP_POLLING", objects::TMTC_POLLING_TASK);
|
initmission::printAddObjectError("UDP_POLLING", objects::TMTC_POLLING_TASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
PeriodicTaskIF* plocUpdaterTask = factory->createPeriodicTask(
|
|
||||||
"PLOC_UPDATER_TASK", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc);
|
|
||||||
result = plocUpdaterTask->addComponent(objects::PLOC_UPDATER);
|
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
|
||||||
initmission::printAddObjectError("PLOC_UPDATER_TASK", objects::PLOC_UPDATER);
|
|
||||||
}
|
|
||||||
|
|
||||||
# if BOARD_TE0720 == 0
|
# if BOARD_TE0720 == 0
|
||||||
// FS task, task interval does not matter because it runs in permanent loop, priority low
|
// FS task, task interval does not matter because it runs in permanent loop, priority low
|
||||||
// because it is a non-essential background task
|
// because it is a non-essential background task
|
||||||
@ -151,7 +144,6 @@ void initmission::initTasks() {
|
|||||||
#if BOARD_TE0720 == 0
|
#if BOARD_TE0720 == 0
|
||||||
coreController->startTask();
|
coreController->startTask();
|
||||||
#endif
|
#endif
|
||||||
plocUpdaterTask->startTask();
|
|
||||||
|
|
||||||
taskStarter(pstTasks, "PST task vector");
|
taskStarter(pstTasks, "PST task vector");
|
||||||
taskStarter(pusTasks, "PUS task vector");
|
taskStarter(pusTasks, "PUS task vector");
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "bsp_q7s/memory/FileSystemHandler.h"
|
#include "bsp_q7s/memory/FileSystemHandler.h"
|
||||||
#include "bsp_q7s/devices/PlocSupervisorHandler.h"
|
#include "bsp_q7s/devices/PlocSupervisorHandler.h"
|
||||||
#include "bsp_q7s/devices/PlocUpdater.h"
|
#include "bsp_q7s/devices/PlocUpdater.h"
|
||||||
|
#include "bsp_q7s/devices/PlocMemoryDumper.h"
|
||||||
|
|
||||||
#include "linux/devices/HeaterHandler.h"
|
#include "linux/devices/HeaterHandler.h"
|
||||||
#include "linux/devices/SolarArrayDeploymentHandler.h"
|
#include "linux/devices/SolarArrayDeploymentHandler.h"
|
||||||
@ -180,6 +181,7 @@ void ObjectFactory::produce(void* args){
|
|||||||
#endif /* OBSW_ADD_TEST_CODE == 1 */
|
#endif /* OBSW_ADD_TEST_CODE == 1 */
|
||||||
|
|
||||||
new PlocUpdater(objects::PLOC_UPDATER);
|
new PlocUpdater(objects::PLOC_UPDATER);
|
||||||
|
new PlocMemoryDumper(objects::PLOC_MEMORY_DUMPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectFactory::createTmpComponents() {
|
void ObjectFactory::createTmpComponents() {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
target_sources(${TARGET_NAME} PRIVATE
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
PlocSupervisorHandler.cpp
|
PlocSupervisorHandler.cpp
|
||||||
PlocUpdater.cpp
|
PlocUpdater.cpp
|
||||||
|
PlocMemoryDumper.cpp
|
||||||
)
|
)
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <fsfw/src/fsfw/serialize/SerializeAdapter.h>
|
||||||
#include "fsfw/ipc/QueueFactory.h"
|
#include "fsfw/ipc/QueueFactory.h"
|
||||||
#include "PlocMemoryDumper.h"
|
#include "PlocMemoryDumper.h"
|
||||||
|
|
||||||
@ -39,17 +40,17 @@ ReturnValue_t PlocMemoryDumper::performOperation(uint8_t operationCode) {
|
|||||||
|
|
||||||
ReturnValue_t PlocMemoryDumper::executeAction(ActionId_t actionId,
|
ReturnValue_t PlocMemoryDumper::executeAction(ActionId_t actionId,
|
||||||
MessageQueueId_t commandedBy, const uint8_t* data, size_t size) {
|
MessageQueueId_t commandedBy, const uint8_t* data, size_t size) {
|
||||||
ReturnValue_t result = RETURN_FAILED;
|
|
||||||
|
|
||||||
if (state != State::IDLE) {
|
if (state != State::IDLE) {
|
||||||
return IS_BUSY;
|
return IS_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (actionId) {
|
switch (actionId) {
|
||||||
case DUMP_MRAM:
|
case DUMP_MRAM: {
|
||||||
SerializeAdapter::deSerialize(&mram.startAddress, &data, sizeof(mramStartAdress),
|
size_t deserializeSize = sizeof(mram.startAddress) + sizeof(mram.endAddress);
|
||||||
|
SerializeAdapter::deSerialize(&mram.startAddress, &data, &deserializeSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter::deSerialize(&mram.endAddress, &data, sizeof(mramStartAdress),
|
SerializeAdapter::deSerialize(&mram.endAddress, &data, &deserializeSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
if (mram.endAddress > MAX_MRAM_ADDRESS) {
|
if (mram.endAddress > MAX_MRAM_ADDRESS) {
|
||||||
return MRAM_ADDRESS_TOO_HIGH;
|
return MRAM_ADDRESS_TOO_HIGH;
|
||||||
@ -59,13 +60,15 @@ ReturnValue_t PlocMemoryDumper::executeAction(ActionId_t actionId,
|
|||||||
}
|
}
|
||||||
state = State::COMMAND_FIRST_MRAM_DUMP;
|
state = State::COMMAND_FIRST_MRAM_DUMP;
|
||||||
break;
|
break;
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
sif::warning << "PlocMemoryDumper::executeAction: Received command with invalid action id"
|
sif::warning << "PlocMemoryDumper::executeAction: Received command with invalid action id"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return INVALID_ACTION_ID;
|
return INVALID_ACTION_ID;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return RETURN_OK;
|
return EXECUTION_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageQueueId_t PlocMemoryDumper::getCommandQueue() const {
|
MessageQueueId_t PlocMemoryDumper::getCommandQueue() const {
|
||||||
@ -139,7 +142,7 @@ void PlocMemoryDumper::completionSuccessfulReceived(ActionId_t actionId) {
|
|||||||
state = State::IDLE;
|
state = State::IDLE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
state = State::COMMAND_MRAM_DUMP;
|
state = State::COMMAND_CONSECUTIVE_MRAM_DUMP;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -51,6 +51,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
static const uint32_t QUEUE_SIZE = 10;
|
||||||
|
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_MEMORY_DUMPER;
|
static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_MEMORY_DUMPER;
|
||||||
|
|
||||||
//! [EXPORT] : [COMMENT] The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.
|
//! [EXPORT] : [COMMENT] The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.
|
||||||
@ -91,15 +93,15 @@ private:
|
|||||||
|
|
||||||
ActionId_t pendingCommand = NONE;
|
ActionId_t pendingCommand = NONE;
|
||||||
|
|
||||||
typedef struct MemoryRange {
|
typedef struct MemoryInfo {
|
||||||
// Stores the start address of the next memory range to dump
|
// Stores the start address of the next memory range to dump
|
||||||
uint32_t startAddress;
|
uint32_t startAddress;
|
||||||
uint32_t endAddress;
|
uint32_t endAddress;
|
||||||
// Stores the start address of the last sent dump command
|
// Stores the start address of the last sent dump command
|
||||||
uint32_t lastStartAddress;
|
uint32_t lastStartAddress;
|
||||||
} MemoryRange_t;
|
} MemoryInfo_t;
|
||||||
|
|
||||||
MemoryRange_t mram = {0, 0, 0};
|
MemoryInfo_t mram = {0, 0, 0};
|
||||||
|
|
||||||
void readCommandQueue();
|
void readCommandQueue();
|
||||||
void doStateMachine();
|
void doStateMachine();
|
||||||
@ -107,7 +109,7 @@ private:
|
|||||||
/**
|
/**
|
||||||
* @brief Sends the next mram dump command to the PLOC supervisor handler.
|
* @brief Sends the next mram dump command to the PLOC supervisor handler.
|
||||||
*/
|
*/
|
||||||
void commandNextMramDump();
|
void commandNextMramDump(ActionId_t dumpCommand);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* MISSION_DEVICES_PLOCMEMORYDUMPER_H_ */
|
#endif /* MISSION_DEVICES_PLOCMEMORYDUMPER_H_ */
|
||||||
|
@ -199,10 +199,10 @@ ReturnValue_t PlocSupervisorHandler::buildCommandFromCommand(
|
|||||||
result = prepareWipeMramCmd(commandData);
|
result = prepareWipeMramCmd(commandData);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case(PLOC_SPV::DUMP_MRAM): {
|
case(PLOC_SPV::FIRST_MRAM_DUMP):
|
||||||
|
case(PLOC_SPV::CONSECUTIVE_MRAM_DUMP):
|
||||||
result = prepareDumpMramCmd(commandData);
|
result = prepareDumpMramCmd(commandData);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case(PLOC_SPV::PRINT_CPU_STATS): {
|
case(PLOC_SPV::PRINT_CPU_STATS): {
|
||||||
preparePrintCpuStatsCmd(commandData);
|
preparePrintCpuStatsCmd(commandData);
|
||||||
result = RETURN_OK;
|
result = RETURN_OK;
|
||||||
@ -319,7 +319,8 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() {
|
|||||||
this->insertInCommandMap(PLOC_SPV::FACTORY_RESET_CLEAR_MIRROR);
|
this->insertInCommandMap(PLOC_SPV::FACTORY_RESET_CLEAR_MIRROR);
|
||||||
this->insertInCommandMap(PLOC_SPV::FACTORY_RESET_CLEAR_CIRCULAR);
|
this->insertInCommandMap(PLOC_SPV::FACTORY_RESET_CLEAR_CIRCULAR);
|
||||||
this->insertInCommandMap(PLOC_SPV::CAN_LOOPBACK_TEST);
|
this->insertInCommandMap(PLOC_SPV::CAN_LOOPBACK_TEST);
|
||||||
this->insertInCommandAndReplyMap(PLOC_SPV::DUMP_MRAM, 3);
|
this->insertInCommandAndReplyMap(PLOC_SPV::FIRST_MRAM_DUMP, 3);
|
||||||
|
this->insertInCommandAndReplyMap(PLOC_SPV::CONSECUTIVE_MRAM_DUMP, 3);
|
||||||
this->insertInReplyMap(PLOC_SPV::ACK_REPORT, 3, nullptr, PLOC_SPV::SIZE_ACK_REPORT);
|
this->insertInReplyMap(PLOC_SPV::ACK_REPORT, 3, nullptr, PLOC_SPV::SIZE_ACK_REPORT);
|
||||||
this->insertInReplyMap(PLOC_SPV::EXE_REPORT, 3, nullptr, PLOC_SPV::SIZE_EXE_REPORT);
|
this->insertInReplyMap(PLOC_SPV::EXE_REPORT, 3, nullptr, PLOC_SPV::SIZE_EXE_REPORT);
|
||||||
this->insertInReplyMap(PLOC_SPV::HK_REPORT, 3, &hkset, PLOC_SPV::SIZE_HK_REPORT);
|
this->insertInReplyMap(PLOC_SPV::HK_REPORT, 3, &hkset, PLOC_SPV::SIZE_HK_REPORT);
|
||||||
@ -332,8 +333,12 @@ void PlocSupervisorHandler::fillCommandAndReplyMap() {
|
|||||||
ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t *start,
|
ReturnValue_t PlocSupervisorHandler::scanForReply(const uint8_t *start,
|
||||||
size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) {
|
size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) {
|
||||||
|
|
||||||
if (nextReplyId == PLOC_SPV::DUMP_MRAM) {
|
if (nextReplyId == PLOC_SPV::FIRST_MRAM_DUMP) {
|
||||||
*foundId = PLOC_SPV::DUMP_MRAM;
|
*foundId = PLOC_SPV::FIRST_MRAM_DUMP;
|
||||||
|
return parseMramPackets(start, remainingSize, foundLen);
|
||||||
|
}
|
||||||
|
else if (nextReplyId == PLOC_SPV::CONSECUTIVE_MRAM_DUMP) {
|
||||||
|
*foundId = PLOC_SPV::CONSECUTIVE_MRAM_DUMP;
|
||||||
return parseMramPackets(start, remainingSize, foundLen);
|
return parseMramPackets(start, remainingSize, foundLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,10 +407,10 @@ ReturnValue_t PlocSupervisorHandler::interpretDeviceReply(DeviceCommandId_t id,
|
|||||||
result = handleLatchupStatusReport(packet);
|
result = handleLatchupStatusReport(packet);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (PLOC_SPV::DUMP_MRAM): {
|
case (PLOC_SPV::FIRST_MRAM_DUMP):
|
||||||
result = handleMramDumpPacket();
|
case (PLOC_SPV::CONSECUTIVE_MRAM_DUMP):
|
||||||
|
result = handleMramDumpPacket(id);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case (PLOC_SPV::EXE_REPORT): {
|
case (PLOC_SPV::EXE_REPORT): {
|
||||||
result = handleExecutionReport(packet);
|
result = handleExecutionReport(packet);
|
||||||
break;
|
break;
|
||||||
@ -511,13 +516,23 @@ ReturnValue_t PlocSupervisorHandler::enableReplyInReplyMap(DeviceCommandMap::ite
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PLOC_SPV::DUMP_MRAM: {
|
case PLOC_SPV::FIRST_MRAM_DUMP: {
|
||||||
enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket
|
enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket
|
||||||
result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true,
|
result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true,
|
||||||
PLOC_SPV::DUMP_MRAM);
|
PLOC_SPV::FIRST_MRAM_DUMP);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id "
|
sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id "
|
||||||
<< PLOC_SPV::LATCHUP_REPORT << " not in replyMap" << std::endl;
|
<< PLOC_SPV::FIRST_MRAM_DUMP << " not in replyMap" << std::endl;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PLOC_SPV::CONSECUTIVE_MRAM_DUMP: {
|
||||||
|
enabledReplies = 2; // expected replies will be increased in handleMramDumpPacket
|
||||||
|
result = DeviceHandlerBase::enableReplyInReplyMap(command, enabledReplies, true,
|
||||||
|
PLOC_SPV::CONSECUTIVE_MRAM_DUMP);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
|
sif::debug << "PlocSupervisorHandler::enableReplyInReplyMap: Reply with id "
|
||||||
|
<< PLOC_SPV::CONSECUTIVE_MRAM_DUMP << " not in replyMap" << std::endl;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -924,8 +939,11 @@ void PlocSupervisorHandler::setNextReplyId() {
|
|||||||
case PLOC_SPV::GET_LATCHUP_STATUS_REPORT:
|
case PLOC_SPV::GET_LATCHUP_STATUS_REPORT:
|
||||||
nextReplyId = PLOC_SPV::LATCHUP_REPORT;
|
nextReplyId = PLOC_SPV::LATCHUP_REPORT;
|
||||||
break;
|
break;
|
||||||
case PLOC_SPV::DUMP_MRAM:
|
case PLOC_SPV::FIRST_MRAM_DUMP:
|
||||||
nextReplyId = PLOC_SPV::DUMP_MRAM;
|
nextReplyId = PLOC_SPV::FIRST_MRAM_DUMP;
|
||||||
|
break;
|
||||||
|
case PLOC_SPV::CONSECUTIVE_MRAM_DUMP:
|
||||||
|
nextReplyId = PLOC_SPV::CONSECUTIVE_MRAM_DUMP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* If no telemetry is expected the next reply is always the execution report */
|
/* If no telemetry is expected the next reply is always the execution report */
|
||||||
@ -942,7 +960,8 @@ size_t PlocSupervisorHandler::getNextReplyLength(DeviceCommandId_t commandId){
|
|||||||
return replyLen;
|
return replyLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextReplyId == PLOC_SPV::DUMP_MRAM) {
|
if (nextReplyId == PLOC_SPV::FIRST_MRAM_DUMP
|
||||||
|
|| nextReplyId == PLOC_SPV::CONSECUTIVE_MRAM_DUMP) {
|
||||||
/**
|
/**
|
||||||
* Try to read 20 MRAM packets. If reply is larger, the packets will be read with the
|
* Try to read 20 MRAM packets. If reply is larger, the packets will be read with the
|
||||||
* next doSendRead call. The command will be as long active as the packet with the sequence
|
* next doSendRead call. The command will be as long active as the packet with the sequence
|
||||||
@ -1347,7 +1366,7 @@ ReturnValue_t PlocSupervisorHandler::parseMramPackets(const uint8_t *packet, siz
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PlocSupervisorHandler::handleMramDumpPacket() {
|
ReturnValue_t PlocSupervisorHandler::handleMramDumpPacket(DeviceCommandId_t id) {
|
||||||
|
|
||||||
ReturnValue_t result = RETURN_FAILED;
|
ReturnValue_t result = RETURN_FAILED;
|
||||||
|
|
||||||
@ -1359,24 +1378,24 @@ ReturnValue_t PlocSupervisorHandler::handleMramDumpPacket() {
|
|||||||
sif::warning << "PlocSupervisorHandler::handleMramDumpPacket: CRC failure" << std::endl;
|
sif::warning << "PlocSupervisorHandler::handleMramDumpPacket: CRC failure" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
handleMramDumpFile();
|
handleMramDumpFile(id);
|
||||||
if (downlinkMramDump == true) {
|
if (downlinkMramDump == true) {
|
||||||
handleDeviceTM(spacePacketBuffer + PLOC_SPV::SPACE_PACKET_HEADER_LENGTH, packetLen - 1,
|
handleDeviceTM(spacePacketBuffer + PLOC_SPV::SPACE_PACKET_HEADER_LENGTH, packetLen - 1,
|
||||||
PLOC_SPV::DUMP_MRAM);
|
id);
|
||||||
}
|
}
|
||||||
packetInBuffer = false;
|
packetInBuffer = false;
|
||||||
receivedMramDumpPackets++;
|
receivedMramDumpPackets++;
|
||||||
if (expectedMramDumpPackets == receivedMramDumpPackets) {
|
if (expectedMramDumpPackets == receivedMramDumpPackets) {
|
||||||
nextReplyId = PLOC_SPV::EXE_REPORT;
|
nextReplyId = PLOC_SPV::EXE_REPORT;
|
||||||
}
|
}
|
||||||
increaseExpectedMramReplies();
|
increaseExpectedMramReplies(id);
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlocSupervisorHandler::increaseExpectedMramReplies() {
|
void PlocSupervisorHandler::increaseExpectedMramReplies(DeviceCommandId_t id) {
|
||||||
DeviceReplyMap::iterator mramDumpIter = deviceReplyMap.find(PLOC_SPV::DUMP_MRAM);
|
DeviceReplyMap::iterator mramDumpIter = deviceReplyMap.find(id);
|
||||||
DeviceReplyMap::iterator exeReportIter = deviceReplyMap.find(PLOC_SPV::EXE_REPORT);
|
DeviceReplyMap::iterator exeReportIter = deviceReplyMap.find(PLOC_SPV::EXE_REPORT);
|
||||||
if (mramDumpIter == deviceReplyMap.end()) {
|
if (mramDumpIter == deviceReplyMap.end()) {
|
||||||
sif::debug << "PlocSupervisorHandler::increaseExpectedMramReplies: Dump MRAM reply not "
|
sif::debug << "PlocSupervisorHandler::increaseExpectedMramReplies: Dump MRAM reply not "
|
||||||
@ -1432,15 +1451,17 @@ ReturnValue_t PlocSupervisorHandler::checkMramPacketApid() {
|
|||||||
return APERIODIC_REPLY;
|
return APERIODIC_REPLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PlocSupervisorHandler::handleMramDumpFile() {
|
ReturnValue_t PlocSupervisorHandler::handleMramDumpFile(DeviceCommandId_t id) {
|
||||||
ReturnValue_t result = RETURN_OK;
|
ReturnValue_t result = RETURN_OK;
|
||||||
uint16_t packetLen = readSpacePacketLength(spacePacketBuffer);
|
uint16_t packetLen = readSpacePacketLength(spacePacketBuffer);
|
||||||
uint8_t sequenceFlags = readSequenceFlags(spacePacketBuffer);
|
uint8_t sequenceFlags = readSequenceFlags(spacePacketBuffer);
|
||||||
if (sequenceFlags == static_cast<uint8_t>(PLOC_SPV::SequenceFlags::FIRST_PKT)
|
if (id == PLOC_SPV::FIRST_MRAM_DUMP) {
|
||||||
|| (sequenceFlags == static_cast<uint8_t>(PLOC_SPV::SequenceFlags::STANDALONE_PKT))) {
|
if (sequenceFlags == static_cast<uint8_t>(PLOC_SPV::SequenceFlags::FIRST_PKT)
|
||||||
result = createMramDumpFile();
|
|| (sequenceFlags == static_cast<uint8_t>(PLOC_SPV::SequenceFlags::STANDALONE_PKT))) {
|
||||||
if (result != RETURN_OK) {
|
result = createMramDumpFile();
|
||||||
return result;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (not std::filesystem::exists(activeMramFile)) {
|
if (not std::filesystem::exists(activeMramFile)) {
|
||||||
|
@ -295,14 +295,14 @@ private:
|
|||||||
/**
|
/**
|
||||||
* @brief This function generates the Service 8 packets for the MRAM dump data.
|
* @brief This function generates the Service 8 packets for the MRAM dump data.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t handleMramDumpPacket();
|
ReturnValue_t handleMramDumpPacket(DeviceCommandId_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief With this function the number of expected replies following an MRAM dump command
|
* @brief With this function the number of expected replies following an MRAM dump command
|
||||||
* will be increased. This is necessary to release the command in case not all replies
|
* will be increased. This is necessary to release the command in case not all replies
|
||||||
* have been received.
|
* have been received.
|
||||||
*/
|
*/
|
||||||
void increaseExpectedMramReplies();
|
void increaseExpectedMramReplies(DeviceCommandId_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Function checks if the packet written to the space packet buffer is really a
|
* @brief Function checks if the packet written to the space packet buffer is really a
|
||||||
@ -314,7 +314,7 @@ private:
|
|||||||
* @brief Writes the data of the MRAM dump to a file. The file will be created when receiving
|
* @brief Writes the data of the MRAM dump to a file. The file will be created when receiving
|
||||||
* the first packet.
|
* the first packet.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t handleMramDumpFile();
|
ReturnValue_t handleMramDumpFile(DeviceCommandId_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Extracts the length field of a spacePacket referenced by the spacePacket pointer.
|
* @brief Extracts the length field of a spacePacket referenced by the spacePacket pointer.
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef BSP_Q7S_DEVICES_DEVICEDEFINITIONS_PLOCMEMDUMPDEFINITIONS_H_
|
#ifndef BSP_Q7S_DEVICES_DEVICEDEFINITIONS_PLOCMEMDUMPDEFINITIONS_H_
|
||||||
#define BSP_Q7S_DEVICES_DEVICEDEFINITIONS_PLOCMEMDUMPDEFINITIONS_H_
|
#define BSP_Q7S_DEVICES_DEVICEDEFINITIONS_PLOCMEMDUMPDEFINITIONS_H_
|
||||||
|
|
||||||
|
#include <fsfw/src/fsfw/serialize/SerialLinkedListAdapter.h>
|
||||||
|
|
||||||
class MemoryParams: public SerialLinkedListAdapter<SerializeIF> {
|
class MemoryParams: public SerialLinkedListAdapter<SerializeIF> {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ static const DeviceCommandId_t UPDATE_IMAGE_DATA = 39;
|
|||||||
static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40;
|
static const DeviceCommandId_t FACTORY_RESET_CLEAR_MIRROR = 40;
|
||||||
static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41;
|
static const DeviceCommandId_t FACTORY_RESET_CLEAR_CIRCULAR = 41;
|
||||||
static const DeviceCommandId_t UPDATE_VERIFY = 42;
|
static const DeviceCommandId_t UPDATE_VERIFY = 42;
|
||||||
static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 41;
|
static const DeviceCommandId_t CONSECUTIVE_MRAM_DUMP = 43;
|
||||||
|
|
||||||
/** Reply IDs */
|
/** Reply IDs */
|
||||||
static const DeviceCommandId_t ACK_REPORT = 50;
|
static const DeviceCommandId_t ACK_REPORT = 50;
|
||||||
|
@ -82,7 +82,8 @@ enum commonObjects: uint32_t {
|
|||||||
|
|
||||||
START_TRACKER = 0x44130001,
|
START_TRACKER = 0x44130001,
|
||||||
|
|
||||||
PLOC_UPDATER = 0x44330000
|
PLOC_UPDATER = 0x44330000,
|
||||||
|
PLOC_MEMORY_DUMPER = 0x44330001
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,13 +90,17 @@
|
|||||||
11207;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;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
11207;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;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||||
11208;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
11208;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||||
11301;ERROR_STATE;HIGH;Reaction wheel signals an error state;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h
|
11301;ERROR_STATE;HIGH;Reaction wheel signals an error state;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h
|
||||||
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11502;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
11502;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11503;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
11503;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11504;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
11504;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11700;UPDATE_FILE_NOT_EXISTS;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11600;SANITIZATION_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h
|
||||||
11701;ACTION_COMMANDING_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11700;UPDATE_FILE_NOT_EXISTS;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
11702;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11701;ACTION_COMMANDING_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
11703;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11702;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
11704;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11703;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);C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
11705;UPDATE_FINISHED;INFO;MPSoC update successful completed;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
11704;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
|
11705;UPDATE_FINISHED;INFO;MPSoC update successful completed;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocUpdater.h
|
||||||
|
11800;SEND_MRAM_DUMP_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
|
11801;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
|
11802;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
|
|
@ -2,10 +2,6 @@
|
|||||||
0x43000003;CORE_CONTROLLER
|
0x43000003;CORE_CONTROLLER
|
||||||
0x43100002;ACS_CONTROLLER
|
0x43100002;ACS_CONTROLLER
|
||||||
0x43400001;THERMAL_CONTROLLER
|
0x43400001;THERMAL_CONTROLLER
|
||||||
0x44120001;RW1
|
|
||||||
0x44120002;RW2
|
|
||||||
0x44120003;RW3
|
|
||||||
0x44120004;RW4
|
|
||||||
0x44120006;MGM_0_LIS3_HANDLER
|
0x44120006;MGM_0_LIS3_HANDLER
|
||||||
0x44120010;GYRO_0_ADIS_HANDLER
|
0x44120010;GYRO_0_ADIS_HANDLER
|
||||||
0x44120032;SUS_1
|
0x44120032;SUS_1
|
||||||
@ -21,12 +17,16 @@
|
|||||||
0x44120042;SUS_11
|
0x44120042;SUS_11
|
||||||
0x44120043;SUS_12
|
0x44120043;SUS_12
|
||||||
0x44120044;SUS_13
|
0x44120044;SUS_13
|
||||||
|
0x44120047;RW1
|
||||||
0x44120107;MGM_1_RM3100_HANDLER
|
0x44120107;MGM_1_RM3100_HANDLER
|
||||||
0x44120111;GYRO_1_L3G_HANDLER
|
0x44120111;GYRO_1_L3G_HANDLER
|
||||||
|
0x44120148;RW2
|
||||||
0x44120208;MGM_2_LIS3_HANDLER
|
0x44120208;MGM_2_LIS3_HANDLER
|
||||||
0x44120212;GYRO_2_ADIS_HANDLER
|
0x44120212;GYRO_2_ADIS_HANDLER
|
||||||
|
0x44120249;RW3
|
||||||
0x44120309;MGM_3_RM3100_HANDLER
|
0x44120309;MGM_3_RM3100_HANDLER
|
||||||
0x44120313;GYRO_3_L3G_HANDLER
|
0x44120313;GYRO_3_L3G_HANDLER
|
||||||
|
0x44120350;RW4
|
||||||
0x44130001;START_TRACKER
|
0x44130001;START_TRACKER
|
||||||
0x44130045;GPS0_HANDLER
|
0x44130045;GPS0_HANDLER
|
||||||
0x44130146;GPS1_HANDLER
|
0x44130146;GPS1_HANDLER
|
||||||
@ -38,6 +38,7 @@
|
|||||||
0x44250003;ACU_HANDLER
|
0x44250003;ACU_HANDLER
|
||||||
0x443200A5;RAD_SENSOR
|
0x443200A5;RAD_SENSOR
|
||||||
0x44330000;PLOC_UPDATER
|
0x44330000;PLOC_UPDATER
|
||||||
|
0x44330001;PLOC_MEMORY_DUMPER
|
||||||
0x44330015;PLOC_MPSOC_HANDLER
|
0x44330015;PLOC_MPSOC_HANDLER
|
||||||
0x44330016;PLOC_SUPERVISOR_HANDLER
|
0x44330016;PLOC_SUPERVISOR_HANDLER
|
||||||
0x444100A2;SOLAR_ARRAY_DEPL_HANDLER
|
0x444100A2;SOLAR_ARRAY_DEPL_HANDLER
|
||||||
|
|
@ -51,7 +51,7 @@ SUBSYSTEM_DEFINITION_DESTINATIONS = [
|
|||||||
]
|
]
|
||||||
HEADER_DEFINITION_DESTINATIONS = [
|
HEADER_DEFINITION_DESTINATIONS = [
|
||||||
f"{OBSW_ROOT_DIR}/mission/", f"{OBSW_ROOT_DIR}/fsfw/", f"{FSFW_CONFIG_ROOT}",
|
f"{OBSW_ROOT_DIR}/mission/", f"{OBSW_ROOT_DIR}/fsfw/", f"{FSFW_CONFIG_ROOT}",
|
||||||
f"{OBSW_ROOT_DIR}/test/"
|
f"{OBSW_ROOT_DIR}/test/", f"{OBSW_ROOT_DIR}/bsp_q7s"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 102 translations.
|
* @brief Auto-generated event translation file. Contains 106 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2021-08-07 18:11:16
|
* Generated on: 2021-08-31 10:50:10
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -101,12 +101,16 @@ 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_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
||||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||||
|
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
||||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||||
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
||||||
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
||||||
const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED";
|
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";
|
||||||
|
|
||||||
const char * translateEvents(Event event) {
|
const char * translateEvents(Event event) {
|
||||||
switch( (event & 0xffff) ) {
|
switch( (event & 0xffff) ) {
|
||||||
@ -302,6 +306,8 @@ const char * translateEvents(Event event) {
|
|||||||
return SUPV_EXE_FAILURE_STRING;
|
return SUPV_EXE_FAILURE_STRING;
|
||||||
case(11504):
|
case(11504):
|
||||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||||
|
case(11600):
|
||||||
|
return SANITIZATION_FAILED_STRING;
|
||||||
case(11700):
|
case(11700):
|
||||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||||
case(11701):
|
case(11701):
|
||||||
@ -314,6 +320,12 @@ const char * translateEvents(Event event) {
|
|||||||
return UPDATE_VERIFY_FAILED_STRING;
|
return UPDATE_VERIFY_FAILED_STRING;
|
||||||
case(11705):
|
case(11705):
|
||||||
return UPDATE_FINISHED_STRING;
|
return UPDATE_FINISHED_STRING;
|
||||||
|
case(11800):
|
||||||
|
return SEND_MRAM_DUMP_FAILED_STRING;
|
||||||
|
case(11801):
|
||||||
|
return MRAM_DUMP_FAILED_STRING;
|
||||||
|
case(11802):
|
||||||
|
return MRAM_DUMP_FINISHED_STRING;
|
||||||
default:
|
default:
|
||||||
return "UNKNOWN_EVENT";
|
return "UNKNOWN_EVENT";
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 104 translations.
|
* Contains 105 translations.
|
||||||
* Generated on: 2021-08-07 18:08:35
|
* Generated on: 2021-08-31 10:31:24
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
@ -10,10 +10,6 @@ const char *P60DOCK_TEST_TASK_STRING = "P60DOCK_TEST_TASK";
|
|||||||
const char *CORE_CONTROLLER_STRING = "CORE_CONTROLLER";
|
const char *CORE_CONTROLLER_STRING = "CORE_CONTROLLER";
|
||||||
const char *ACS_CONTROLLER_STRING = "ACS_CONTROLLER";
|
const char *ACS_CONTROLLER_STRING = "ACS_CONTROLLER";
|
||||||
const char *THERMAL_CONTROLLER_STRING = "THERMAL_CONTROLLER";
|
const char *THERMAL_CONTROLLER_STRING = "THERMAL_CONTROLLER";
|
||||||
const char *RW1_STRING = "RW1";
|
|
||||||
const char *RW2_STRING = "RW2";
|
|
||||||
const char *RW3_STRING = "RW3";
|
|
||||||
const char *RW4_STRING = "RW4";
|
|
||||||
const char *MGM_0_LIS3_HANDLER_STRING = "MGM_0_LIS3_HANDLER";
|
const char *MGM_0_LIS3_HANDLER_STRING = "MGM_0_LIS3_HANDLER";
|
||||||
const char *GYRO_0_ADIS_HANDLER_STRING = "GYRO_0_ADIS_HANDLER";
|
const char *GYRO_0_ADIS_HANDLER_STRING = "GYRO_0_ADIS_HANDLER";
|
||||||
const char *SUS_1_STRING = "SUS_1";
|
const char *SUS_1_STRING = "SUS_1";
|
||||||
@ -29,12 +25,16 @@ const char *SUS_10_STRING = "SUS_10";
|
|||||||
const char *SUS_11_STRING = "SUS_11";
|
const char *SUS_11_STRING = "SUS_11";
|
||||||
const char *SUS_12_STRING = "SUS_12";
|
const char *SUS_12_STRING = "SUS_12";
|
||||||
const char *SUS_13_STRING = "SUS_13";
|
const char *SUS_13_STRING = "SUS_13";
|
||||||
|
const char *RW1_STRING = "RW1";
|
||||||
const char *MGM_1_RM3100_HANDLER_STRING = "MGM_1_RM3100_HANDLER";
|
const char *MGM_1_RM3100_HANDLER_STRING = "MGM_1_RM3100_HANDLER";
|
||||||
const char *GYRO_1_L3G_HANDLER_STRING = "GYRO_1_L3G_HANDLER";
|
const char *GYRO_1_L3G_HANDLER_STRING = "GYRO_1_L3G_HANDLER";
|
||||||
|
const char *RW2_STRING = "RW2";
|
||||||
const char *MGM_2_LIS3_HANDLER_STRING = "MGM_2_LIS3_HANDLER";
|
const char *MGM_2_LIS3_HANDLER_STRING = "MGM_2_LIS3_HANDLER";
|
||||||
const char *GYRO_2_ADIS_HANDLER_STRING = "GYRO_2_ADIS_HANDLER";
|
const char *GYRO_2_ADIS_HANDLER_STRING = "GYRO_2_ADIS_HANDLER";
|
||||||
|
const char *RW3_STRING = "RW3";
|
||||||
const char *MGM_3_RM3100_HANDLER_STRING = "MGM_3_RM3100_HANDLER";
|
const char *MGM_3_RM3100_HANDLER_STRING = "MGM_3_RM3100_HANDLER";
|
||||||
const char *GYRO_3_L3G_HANDLER_STRING = "GYRO_3_L3G_HANDLER";
|
const char *GYRO_3_L3G_HANDLER_STRING = "GYRO_3_L3G_HANDLER";
|
||||||
|
const char *RW4_STRING = "RW4";
|
||||||
const char *START_TRACKER_STRING = "START_TRACKER";
|
const char *START_TRACKER_STRING = "START_TRACKER";
|
||||||
const char *GPS0_HANDLER_STRING = "GPS0_HANDLER";
|
const char *GPS0_HANDLER_STRING = "GPS0_HANDLER";
|
||||||
const char *GPS1_HANDLER_STRING = "GPS1_HANDLER";
|
const char *GPS1_HANDLER_STRING = "GPS1_HANDLER";
|
||||||
@ -46,6 +46,7 @@ const char *PDU2_HANDLER_STRING = "PDU2_HANDLER";
|
|||||||
const char *ACU_HANDLER_STRING = "ACU_HANDLER";
|
const char *ACU_HANDLER_STRING = "ACU_HANDLER";
|
||||||
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
|
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
|
||||||
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
|
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
|
||||||
|
const char *PLOC_MEMORY_DUMPER_STRING = "PLOC_MEMORY_DUMPER";
|
||||||
const char *PLOC_MPSOC_HANDLER_STRING = "PLOC_MPSOC_HANDLER";
|
const char *PLOC_MPSOC_HANDLER_STRING = "PLOC_MPSOC_HANDLER";
|
||||||
const char *PLOC_SUPERVISOR_HANDLER_STRING = "PLOC_SUPERVISOR_HANDLER";
|
const char *PLOC_SUPERVISOR_HANDLER_STRING = "PLOC_SUPERVISOR_HANDLER";
|
||||||
const char *SOLAR_ARRAY_DEPL_HANDLER_STRING = "SOLAR_ARRAY_DEPL_HANDLER";
|
const char *SOLAR_ARRAY_DEPL_HANDLER_STRING = "SOLAR_ARRAY_DEPL_HANDLER";
|
||||||
@ -121,14 +122,6 @@ const char* translateObject(object_id_t object) {
|
|||||||
return ACS_CONTROLLER_STRING;
|
return ACS_CONTROLLER_STRING;
|
||||||
case 0x43400001:
|
case 0x43400001:
|
||||||
return THERMAL_CONTROLLER_STRING;
|
return THERMAL_CONTROLLER_STRING;
|
||||||
case 0x44120001:
|
|
||||||
return RW1_STRING;
|
|
||||||
case 0x44120002:
|
|
||||||
return RW2_STRING;
|
|
||||||
case 0x44120003:
|
|
||||||
return RW3_STRING;
|
|
||||||
case 0x44120004:
|
|
||||||
return RW4_STRING;
|
|
||||||
case 0x44120006:
|
case 0x44120006:
|
||||||
return MGM_0_LIS3_HANDLER_STRING;
|
return MGM_0_LIS3_HANDLER_STRING;
|
||||||
case 0x44120010:
|
case 0x44120010:
|
||||||
@ -159,18 +152,26 @@ const char* translateObject(object_id_t object) {
|
|||||||
return SUS_12_STRING;
|
return SUS_12_STRING;
|
||||||
case 0x44120044:
|
case 0x44120044:
|
||||||
return SUS_13_STRING;
|
return SUS_13_STRING;
|
||||||
|
case 0x44120047:
|
||||||
|
return RW1_STRING;
|
||||||
case 0x44120107:
|
case 0x44120107:
|
||||||
return MGM_1_RM3100_HANDLER_STRING;
|
return MGM_1_RM3100_HANDLER_STRING;
|
||||||
case 0x44120111:
|
case 0x44120111:
|
||||||
return GYRO_1_L3G_HANDLER_STRING;
|
return GYRO_1_L3G_HANDLER_STRING;
|
||||||
|
case 0x44120148:
|
||||||
|
return RW2_STRING;
|
||||||
case 0x44120208:
|
case 0x44120208:
|
||||||
return MGM_2_LIS3_HANDLER_STRING;
|
return MGM_2_LIS3_HANDLER_STRING;
|
||||||
case 0x44120212:
|
case 0x44120212:
|
||||||
return GYRO_2_ADIS_HANDLER_STRING;
|
return GYRO_2_ADIS_HANDLER_STRING;
|
||||||
|
case 0x44120249:
|
||||||
|
return RW3_STRING;
|
||||||
case 0x44120309:
|
case 0x44120309:
|
||||||
return MGM_3_RM3100_HANDLER_STRING;
|
return MGM_3_RM3100_HANDLER_STRING;
|
||||||
case 0x44120313:
|
case 0x44120313:
|
||||||
return GYRO_3_L3G_HANDLER_STRING;
|
return GYRO_3_L3G_HANDLER_STRING;
|
||||||
|
case 0x44120350:
|
||||||
|
return RW4_STRING;
|
||||||
case 0x44130001:
|
case 0x44130001:
|
||||||
return START_TRACKER_STRING;
|
return START_TRACKER_STRING;
|
||||||
case 0x44130045:
|
case 0x44130045:
|
||||||
@ -193,6 +194,8 @@ const char* translateObject(object_id_t object) {
|
|||||||
return RAD_SENSOR_STRING;
|
return RAD_SENSOR_STRING;
|
||||||
case 0x44330000:
|
case 0x44330000:
|
||||||
return PLOC_UPDATER_STRING;
|
return PLOC_UPDATER_STRING;
|
||||||
|
case 0x44330001:
|
||||||
|
return PLOC_MEMORY_DUMPER_STRING;
|
||||||
case 0x44330015:
|
case 0x44330015:
|
||||||
return PLOC_MPSOC_HANDLER_STRING;
|
return PLOC_MPSOC_HANDLER_STRING;
|
||||||
case 0x44330016:
|
case 0x44330016:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 102 translations.
|
* @brief Auto-generated event translation file. Contains 106 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2021-08-07 18:11:16
|
* Generated on: 2021-08-31 10:50:10
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -101,12 +101,16 @@ 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_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
||||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||||
|
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
||||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||||
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
||||||
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
||||||
const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED";
|
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";
|
||||||
|
|
||||||
const char * translateEvents(Event event) {
|
const char * translateEvents(Event event) {
|
||||||
switch( (event & 0xffff) ) {
|
switch( (event & 0xffff) ) {
|
||||||
@ -302,6 +306,8 @@ const char * translateEvents(Event event) {
|
|||||||
return SUPV_EXE_FAILURE_STRING;
|
return SUPV_EXE_FAILURE_STRING;
|
||||||
case(11504):
|
case(11504):
|
||||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||||
|
case(11600):
|
||||||
|
return SANITIZATION_FAILED_STRING;
|
||||||
case(11700):
|
case(11700):
|
||||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||||
case(11701):
|
case(11701):
|
||||||
@ -314,6 +320,12 @@ const char * translateEvents(Event event) {
|
|||||||
return UPDATE_VERIFY_FAILED_STRING;
|
return UPDATE_VERIFY_FAILED_STRING;
|
||||||
case(11705):
|
case(11705):
|
||||||
return UPDATE_FINISHED_STRING;
|
return UPDATE_FINISHED_STRING;
|
||||||
|
case(11800):
|
||||||
|
return SEND_MRAM_DUMP_FAILED_STRING;
|
||||||
|
case(11801):
|
||||||
|
return MRAM_DUMP_FAILED_STRING;
|
||||||
|
case(11802):
|
||||||
|
return MRAM_DUMP_FINISHED_STRING;
|
||||||
default:
|
default:
|
||||||
return "UNKNOWN_EVENT";
|
return "UNKNOWN_EVENT";
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 104 translations.
|
* Contains 105 translations.
|
||||||
* Generated on: 2021-08-07 18:08:35
|
* Generated on: 2021-08-31 10:31:24
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
@ -10,10 +10,6 @@ const char *P60DOCK_TEST_TASK_STRING = "P60DOCK_TEST_TASK";
|
|||||||
const char *CORE_CONTROLLER_STRING = "CORE_CONTROLLER";
|
const char *CORE_CONTROLLER_STRING = "CORE_CONTROLLER";
|
||||||
const char *ACS_CONTROLLER_STRING = "ACS_CONTROLLER";
|
const char *ACS_CONTROLLER_STRING = "ACS_CONTROLLER";
|
||||||
const char *THERMAL_CONTROLLER_STRING = "THERMAL_CONTROLLER";
|
const char *THERMAL_CONTROLLER_STRING = "THERMAL_CONTROLLER";
|
||||||
const char *RW1_STRING = "RW1";
|
|
||||||
const char *RW2_STRING = "RW2";
|
|
||||||
const char *RW3_STRING = "RW3";
|
|
||||||
const char *RW4_STRING = "RW4";
|
|
||||||
const char *MGM_0_LIS3_HANDLER_STRING = "MGM_0_LIS3_HANDLER";
|
const char *MGM_0_LIS3_HANDLER_STRING = "MGM_0_LIS3_HANDLER";
|
||||||
const char *GYRO_0_ADIS_HANDLER_STRING = "GYRO_0_ADIS_HANDLER";
|
const char *GYRO_0_ADIS_HANDLER_STRING = "GYRO_0_ADIS_HANDLER";
|
||||||
const char *SUS_1_STRING = "SUS_1";
|
const char *SUS_1_STRING = "SUS_1";
|
||||||
@ -29,12 +25,16 @@ const char *SUS_10_STRING = "SUS_10";
|
|||||||
const char *SUS_11_STRING = "SUS_11";
|
const char *SUS_11_STRING = "SUS_11";
|
||||||
const char *SUS_12_STRING = "SUS_12";
|
const char *SUS_12_STRING = "SUS_12";
|
||||||
const char *SUS_13_STRING = "SUS_13";
|
const char *SUS_13_STRING = "SUS_13";
|
||||||
|
const char *RW1_STRING = "RW1";
|
||||||
const char *MGM_1_RM3100_HANDLER_STRING = "MGM_1_RM3100_HANDLER";
|
const char *MGM_1_RM3100_HANDLER_STRING = "MGM_1_RM3100_HANDLER";
|
||||||
const char *GYRO_1_L3G_HANDLER_STRING = "GYRO_1_L3G_HANDLER";
|
const char *GYRO_1_L3G_HANDLER_STRING = "GYRO_1_L3G_HANDLER";
|
||||||
|
const char *RW2_STRING = "RW2";
|
||||||
const char *MGM_2_LIS3_HANDLER_STRING = "MGM_2_LIS3_HANDLER";
|
const char *MGM_2_LIS3_HANDLER_STRING = "MGM_2_LIS3_HANDLER";
|
||||||
const char *GYRO_2_ADIS_HANDLER_STRING = "GYRO_2_ADIS_HANDLER";
|
const char *GYRO_2_ADIS_HANDLER_STRING = "GYRO_2_ADIS_HANDLER";
|
||||||
|
const char *RW3_STRING = "RW3";
|
||||||
const char *MGM_3_RM3100_HANDLER_STRING = "MGM_3_RM3100_HANDLER";
|
const char *MGM_3_RM3100_HANDLER_STRING = "MGM_3_RM3100_HANDLER";
|
||||||
const char *GYRO_3_L3G_HANDLER_STRING = "GYRO_3_L3G_HANDLER";
|
const char *GYRO_3_L3G_HANDLER_STRING = "GYRO_3_L3G_HANDLER";
|
||||||
|
const char *RW4_STRING = "RW4";
|
||||||
const char *START_TRACKER_STRING = "START_TRACKER";
|
const char *START_TRACKER_STRING = "START_TRACKER";
|
||||||
const char *GPS0_HANDLER_STRING = "GPS0_HANDLER";
|
const char *GPS0_HANDLER_STRING = "GPS0_HANDLER";
|
||||||
const char *GPS1_HANDLER_STRING = "GPS1_HANDLER";
|
const char *GPS1_HANDLER_STRING = "GPS1_HANDLER";
|
||||||
@ -46,6 +46,7 @@ const char *PDU2_HANDLER_STRING = "PDU2_HANDLER";
|
|||||||
const char *ACU_HANDLER_STRING = "ACU_HANDLER";
|
const char *ACU_HANDLER_STRING = "ACU_HANDLER";
|
||||||
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
|
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
|
||||||
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
|
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
|
||||||
|
const char *PLOC_MEMORY_DUMPER_STRING = "PLOC_MEMORY_DUMPER";
|
||||||
const char *PLOC_MPSOC_HANDLER_STRING = "PLOC_MPSOC_HANDLER";
|
const char *PLOC_MPSOC_HANDLER_STRING = "PLOC_MPSOC_HANDLER";
|
||||||
const char *PLOC_SUPERVISOR_HANDLER_STRING = "PLOC_SUPERVISOR_HANDLER";
|
const char *PLOC_SUPERVISOR_HANDLER_STRING = "PLOC_SUPERVISOR_HANDLER";
|
||||||
const char *SOLAR_ARRAY_DEPL_HANDLER_STRING = "SOLAR_ARRAY_DEPL_HANDLER";
|
const char *SOLAR_ARRAY_DEPL_HANDLER_STRING = "SOLAR_ARRAY_DEPL_HANDLER";
|
||||||
@ -121,14 +122,6 @@ const char* translateObject(object_id_t object) {
|
|||||||
return ACS_CONTROLLER_STRING;
|
return ACS_CONTROLLER_STRING;
|
||||||
case 0x43400001:
|
case 0x43400001:
|
||||||
return THERMAL_CONTROLLER_STRING;
|
return THERMAL_CONTROLLER_STRING;
|
||||||
case 0x44120001:
|
|
||||||
return RW1_STRING;
|
|
||||||
case 0x44120002:
|
|
||||||
return RW2_STRING;
|
|
||||||
case 0x44120003:
|
|
||||||
return RW3_STRING;
|
|
||||||
case 0x44120004:
|
|
||||||
return RW4_STRING;
|
|
||||||
case 0x44120006:
|
case 0x44120006:
|
||||||
return MGM_0_LIS3_HANDLER_STRING;
|
return MGM_0_LIS3_HANDLER_STRING;
|
||||||
case 0x44120010:
|
case 0x44120010:
|
||||||
@ -159,18 +152,26 @@ const char* translateObject(object_id_t object) {
|
|||||||
return SUS_12_STRING;
|
return SUS_12_STRING;
|
||||||
case 0x44120044:
|
case 0x44120044:
|
||||||
return SUS_13_STRING;
|
return SUS_13_STRING;
|
||||||
|
case 0x44120047:
|
||||||
|
return RW1_STRING;
|
||||||
case 0x44120107:
|
case 0x44120107:
|
||||||
return MGM_1_RM3100_HANDLER_STRING;
|
return MGM_1_RM3100_HANDLER_STRING;
|
||||||
case 0x44120111:
|
case 0x44120111:
|
||||||
return GYRO_1_L3G_HANDLER_STRING;
|
return GYRO_1_L3G_HANDLER_STRING;
|
||||||
|
case 0x44120148:
|
||||||
|
return RW2_STRING;
|
||||||
case 0x44120208:
|
case 0x44120208:
|
||||||
return MGM_2_LIS3_HANDLER_STRING;
|
return MGM_2_LIS3_HANDLER_STRING;
|
||||||
case 0x44120212:
|
case 0x44120212:
|
||||||
return GYRO_2_ADIS_HANDLER_STRING;
|
return GYRO_2_ADIS_HANDLER_STRING;
|
||||||
|
case 0x44120249:
|
||||||
|
return RW3_STRING;
|
||||||
case 0x44120309:
|
case 0x44120309:
|
||||||
return MGM_3_RM3100_HANDLER_STRING;
|
return MGM_3_RM3100_HANDLER_STRING;
|
||||||
case 0x44120313:
|
case 0x44120313:
|
||||||
return GYRO_3_L3G_HANDLER_STRING;
|
return GYRO_3_L3G_HANDLER_STRING;
|
||||||
|
case 0x44120350:
|
||||||
|
return RW4_STRING;
|
||||||
case 0x44130001:
|
case 0x44130001:
|
||||||
return START_TRACKER_STRING;
|
return START_TRACKER_STRING;
|
||||||
case 0x44130045:
|
case 0x44130045:
|
||||||
@ -193,6 +194,8 @@ const char* translateObject(object_id_t object) {
|
|||||||
return RAD_SENSOR_STRING;
|
return RAD_SENSOR_STRING;
|
||||||
case 0x44330000:
|
case 0x44330000:
|
||||||
return PLOC_UPDATER_STRING;
|
return PLOC_UPDATER_STRING;
|
||||||
|
case 0x44330001:
|
||||||
|
return PLOC_MEMORY_DUMPER_STRING;
|
||||||
case 0x44330015:
|
case 0x44330015:
|
||||||
return PLOC_MPSOC_HANDLER_STRING;
|
return PLOC_MPSOC_HANDLER_STRING;
|
||||||
case 0x44330016:
|
case 0x44330016:
|
||||||
|
@ -533,6 +533,9 @@ ReturnValue_t pst::pstUart(FixedTimeslotTaskIF *thisSequence) {
|
|||||||
DeviceHandlerIF::GET_READ);
|
DeviceHandlerIF::GET_READ);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
thisSequence->addSlot(objects::PLOC_UPDATER, length * 0, DeviceHandlerIF::PERFORM_OPERATION);
|
||||||
|
thisSequence->addSlot(objects::PLOC_MEMORY_DUMPER, length * 0,
|
||||||
|
DeviceHandlerIF::PERFORM_OPERATION);
|
||||||
#if OBSW_ADD_PLOC_SUPERVISOR == 1
|
#if OBSW_ADD_PLOC_SUPERVISOR == 1
|
||||||
thisSequence->addSlot(objects::PLOC_SUPERVISOR_HANDLER, length * 0,
|
thisSequence->addSlot(objects::PLOC_SUPERVISOR_HANDLER, length * 0,
|
||||||
DeviceHandlerIF::PERFORM_OPERATION);
|
DeviceHandlerIF::PERFORM_OPERATION);
|
||||||
@ -832,6 +835,10 @@ ReturnValue_t pst::pollingSequenceTE0720(FixedTimeslotTaskIF *thisSequence) {
|
|||||||
thisSequence->addSlot(objects::PLOC_SUPERVISOR_HANDLER, length * 0.8, DeviceHandlerIF::GET_READ);
|
thisSequence->addSlot(objects::PLOC_SUPERVISOR_HANDLER, length * 0.8, DeviceHandlerIF::GET_READ);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
thisSequence->addSlot(objects::PLOC_UPDATER, length * 0, DeviceHandlerIF::PERFORM_OPERATION);
|
||||||
|
thisSequence->addSlot(objects::PLOC_MEMORY_DUMPER, length * 0,
|
||||||
|
DeviceHandlerIF::PERFORM_OPERATION);
|
||||||
|
|
||||||
if (thisSequence->checkSequence() != HasReturnvaluesIF::RETURN_OK) {
|
if (thisSequence->checkSequence() != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::error << "Initialization of TE0720 PST failed" << std::endl;
|
sif::error << "Initialization of TE0720 PST failed" << std::endl;
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit ce5596f5669b8df44df418da6adff123941a395d
|
Subproject commit 9b176aebfaba51f4d045881a125d42b123f4eeb3
|
Loading…
Reference in New Issue
Block a user