mpsoc shutdown after running update procedure
This commit is contained in:
@ -266,10 +266,10 @@ static const uint32_t LOGGING_RPT_ID = LOGGING_REQUEST_COUNTERS;
|
||||
static const uint32_t ADC_REPORT_SET_ID = REQUEST_ADC_REPORT;
|
||||
|
||||
namespace recv_timeout {
|
||||
// Erase memory can require up to 60 seconds for execution
|
||||
static const uint32_t ERASE_MEMORY = 60000;
|
||||
static const uint32_t UPDATE_STATUS_REPORT = 60000;
|
||||
}
|
||||
// Erase memory can require up to 60 seconds for execution
|
||||
static const uint32_t ERASE_MEMORY = 60000;
|
||||
static const uint32_t UPDATE_STATUS_REPORT = 60000;
|
||||
} // namespace recv_timeout
|
||||
|
||||
/**
|
||||
* @brief This class creates a space packet containing only the header data and the CRC.
|
||||
@ -1245,7 +1245,6 @@ class DisableAutoTm : public SupvTcSpacePacket {
|
||||
*/
|
||||
class RequestLoggingData : public SupvTcSpacePacket {
|
||||
public:
|
||||
|
||||
enum class Sa : uint8_t {
|
||||
REQUEST_COUNTERS = 1,
|
||||
REQUEST_EVENT_BUFFERS = 2,
|
||||
@ -1278,9 +1277,7 @@ class TmPacket : public SpacePacket {
|
||||
/**
|
||||
* @brief Returns the payload data length (data field length without CRC)
|
||||
*/
|
||||
uint16_t getPayloadDataLength() {
|
||||
return this->getPacketDataLength() - 1;
|
||||
}
|
||||
uint16_t getPayloadDataLength() { return this->getPacketDataLength() - 1; }
|
||||
|
||||
ReturnValue_t checkCrc() {
|
||||
uint8_t* crcPtr = this->getPacketData() + this->getPayloadDataLength();
|
||||
@ -1294,6 +1291,257 @@ class TmPacket : public SpacePacket {
|
||||
}
|
||||
};
|
||||
|
||||
class VerificationReport : public TmPacket {
|
||||
public:
|
||||
VerificationReport() : TmPacket() {}
|
||||
|
||||
/**
|
||||
* @brief Gets the APID of command which caused the transmission of this verification report.
|
||||
*/
|
||||
uint16_t getRefApid() {
|
||||
uint16_t refApid = 0;
|
||||
size_t size = 0;
|
||||
uint8_t* refApidPtr = this->getPacketData();
|
||||
ReturnValue_t result = SerializeAdapter::deSerialize(&refApid, refApidPtr, &size,
|
||||
SerializeIF::Endianness::BIG);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::debug << "ExecutionReport: Failed to deserialize reference APID field" << std::endl;
|
||||
return result;
|
||||
}
|
||||
return refApid;
|
||||
}
|
||||
|
||||
uint16_t getStatusCode() {
|
||||
uint16_t statusCode = 0;
|
||||
size_t size = 0;
|
||||
uint8_t* statusCodePtr = this->getPacketData() + OFFSET_STATUS_CODE;
|
||||
ReturnValue_t result = SerializeAdapter::deSerialize(&statusCode, statusCodePtr, &size,
|
||||
SerializeIF::Endianness::BIG);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::debug << "ExecutionReport: Failed to deserialize status code field" << std::endl;
|
||||
return result;
|
||||
}
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
virtual ReturnValue_t checkApid() { return HasReturnvaluesIF::RETURN_FAILED; }
|
||||
|
||||
private:
|
||||
static const uint8_t OFFSET_STATUS_CODE = 4;
|
||||
};
|
||||
|
||||
class AcknowledgmentReport : public VerificationReport {
|
||||
public:
|
||||
AcknowledgmentReport() : VerificationReport() {}
|
||||
|
||||
ReturnValue_t checkApid() {
|
||||
uint16_t apid = this->getAPID();
|
||||
if (apid == APID_ACK_SUCCESS) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
} else if (apid == APID_ACK_FAILURE) {
|
||||
printStatusInformation();
|
||||
return SupvReturnValuesIF::RECEIVED_ACK_FAILURE;
|
||||
} else {
|
||||
sif::warning << "AcknowledgmentReport::checkApid: Invalid apid: 0x" << std::hex << apid
|
||||
<< std::endl;
|
||||
return SupvReturnValuesIF::INVALID_APID;
|
||||
}
|
||||
}
|
||||
|
||||
void printStatusInformation() {
|
||||
StatusCode statusCode = static_cast<StatusCode>(getStatusCode());
|
||||
switch (statusCode) {
|
||||
case StatusCode::OK: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Ok" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BAD_PARAM: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Bad param" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TIMEOUT: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Timeout" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::RX_ERROR: {
|
||||
sif::warning << "Supervisor acknowledgment report status: RX error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TX_ERROR: {
|
||||
sif::warning << "Supervisor acknowledgment report status: TX error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::HEADER_EMPTY: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Header empty" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::DEFAULT_NAK: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Default code for nak" <<
|
||||
std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::ROUTE_PACKET: {
|
||||
sif::warning << "Supervisor acknowledgment report status: Route packet error" << std::endl;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sif::warning << "AcknowledgmentReport::printStatusInformation: Invalid status code: 0x"
|
||||
<< std::hex << static_cast<uint16_t>(statusCode) << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
enum class StatusCode : uint16_t {
|
||||
OK = 0x0,
|
||||
BAD_PARAM = 0x1,
|
||||
TIMEOUT = 0x2,
|
||||
RX_ERROR = 0x3,
|
||||
TX_ERROR = 0x4,
|
||||
HEADER_EMPTY = 0x5,
|
||||
DEFAULT_NAK = 0x6,
|
||||
ROUTE_PACKET = 0x7
|
||||
};
|
||||
};
|
||||
|
||||
class ExecutionReport : public VerificationReport {
|
||||
public:
|
||||
ExecutionReport() : VerificationReport() {}
|
||||
|
||||
ReturnValue_t checkApid() {
|
||||
uint16_t apid = this->getAPID();
|
||||
if (apid == APID_EXE_SUCCESS) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
} else if (apid == APID_EXE_FAILURE) {
|
||||
printStatusInformation();
|
||||
return SupvReturnValuesIF::RECEIVED_EXE_FAILURE;
|
||||
} else {
|
||||
sif::warning << "ExecutionReport::checkApid: Invalid apid: 0x" << std::hex << apid
|
||||
<< std::endl;
|
||||
return SupvReturnValuesIF::INVALID_APID;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
enum class StatusCode : uint16_t {
|
||||
OK = 0x0,
|
||||
INIT_ERROR = 0x1,
|
||||
BAD_PARAM = 0x2,
|
||||
NOT_INITIALIZED = 0x3,
|
||||
BAD_PERIPH_ID = 0x4,
|
||||
TIMEOUT = 0x5,
|
||||
RX_ERROR = 0x6,
|
||||
TX_ERROR = 0x7,
|
||||
BUF_EMPTY = 0x8,
|
||||
BUF_FULL = 0x9,
|
||||
NAK = 0xA,
|
||||
ARB_LOST = 0xB,
|
||||
BUSY = 0xC,
|
||||
NOT_IMPLEMENTED = 0xD,
|
||||
ALIGNEMENT_ERROR = 0xE,
|
||||
PERIPH_ERR = 0xF,
|
||||
FAILED_LATCH = 0x10,
|
||||
GPIO_HIGH = 0x11,
|
||||
GPIO_LOW = 0x12,
|
||||
TEST_PASSED = 0x13,
|
||||
TEST_FAILED = 0x14
|
||||
};
|
||||
|
||||
void printStatusInformation() {
|
||||
StatusCode statusCode = static_cast<StatusCode>(getStatusCode());
|
||||
switch (statusCode) {
|
||||
case StatusCode::OK: {
|
||||
sif::warning << "Supervisor execution report status: Ok" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::INIT_ERROR: {
|
||||
sif::warning << "Supervisor execution report status: Init error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BAD_PARAM: {
|
||||
sif::warning << "Supervisor execution report status: Bad param" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::NOT_INITIALIZED: {
|
||||
sif::warning << "Supervisor execution report status: Not initialized" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BAD_PERIPH_ID: {
|
||||
sif::warning << "Supervisor execution report status: Bad periph ID" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TIMEOUT: {
|
||||
sif::warning << "Supervisor execution report status: Timeout" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::RX_ERROR: {
|
||||
sif::warning << "Supervisor execution report status: RX error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TX_ERROR: {
|
||||
sif::warning << "Supervisor execution report status: TX error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BUF_EMPTY: {
|
||||
sif::warning << "Supervisor execution report status: Buf empty" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BUF_FULL: {
|
||||
sif::warning << "Supervisor execution report status: Buf full" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::NAK: {
|
||||
sif::warning << "Supervisor execution report status: Nak, default error code" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::ARB_LOST: {
|
||||
sif::warning << "Supervisor execution report status: Arb lost" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::BUSY: {
|
||||
sif::warning << "Supervisor execution report status: Busy" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::NOT_IMPLEMENTED: {
|
||||
sif::warning << "Supervisor execution report status: Not implemented" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::ALIGNEMENT_ERROR: {
|
||||
sif::warning << "Supervisor execution report status: Alignment error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::PERIPH_ERR: {
|
||||
sif::warning << "Supervisor execution report status: Periph error" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::FAILED_LATCH: {
|
||||
sif::warning << "Supervisor execution report status: Failed latch" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::GPIO_HIGH: {
|
||||
sif::warning << "Supervisor execution report status: GPIO high" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::GPIO_LOW: {
|
||||
sif::warning << "Supervisor execution report status: GPIO low" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TEST_PASSED: {
|
||||
sif::warning << "Supervisor execution report status: Test passed" << std::endl;
|
||||
break;
|
||||
}
|
||||
case StatusCode::TEST_FAILED: {
|
||||
sif::warning << "Supervisor execution report status: Test failed" << std::endl;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sif::warning << "ExecutionReport::printStatusInformation: Invalid status code: 0x"
|
||||
<< std::hex << static_cast<uint16_t>(statusCode) << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief This dataset stores the boot status report of the supervisor.
|
||||
*/
|
||||
@ -1409,31 +1657,36 @@ class LoggingReport : public StaticLocalDataSet<LOGGING_RPT_SET_ENTRIES> {
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::TM_AVAILABLE_CNT, this);
|
||||
lp_var_t<uint32_t> supervisorBoots =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::SUPERVISOR_BOOTS, this);
|
||||
lp_var_t<uint32_t> mpsocBoots =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_BOOTS, this);
|
||||
lp_var_t<uint32_t> mpsocBoots = lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_BOOTS, this);
|
||||
lp_var_t<uint32_t> mpsocBootFailedAttempts =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_BOOT_FAILED_ATTEMPTS, this);
|
||||
lp_var_t<uint32_t> mpsocPowerup =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_POWER_UP, this);
|
||||
lp_var_t<uint32_t> mpsocUpdates =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_UPDATES, this);
|
||||
lp_var_t<uint32_t> lastRecvdTc =
|
||||
lp_var_t<uint32_t>(sid.objectId, PoolIds::LAST_RECVD_TC, this);
|
||||
lp_var_t<uint32_t> mpsocPowerup = lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_POWER_UP, this);
|
||||
lp_var_t<uint32_t> mpsocUpdates = lp_var_t<uint32_t>(sid.objectId, PoolIds::MPSOC_UPDATES, this);
|
||||
lp_var_t<uint32_t> lastRecvdTc = lp_var_t<uint32_t>(sid.objectId, PoolIds::LAST_RECVD_TC, this);
|
||||
|
||||
void printSet() {
|
||||
sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0 << std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 0: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 1: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 2: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 3: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 4: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 5: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: Latchup happened count 6: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: ADC deviation triggers count: " << this->latchupHappenCnt0
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: TC received count: " << this->tcReceivedCnt << std::endl;
|
||||
sif::info << "LoggingReport: TM available count: " << this->tmAvailableCnt << std::endl;
|
||||
sif::info << "LoggingReport: Supervisor boots: " << this->supervisorBoots << std::endl;
|
||||
sif::info << "LoggingReport: MPSoC boots: " << this->mpsocBoots << std::endl;
|
||||
sif::info << "LoggingReport: MPSoC boot failed attempts: " << this->mpsocBootFailedAttempts << std::endl;
|
||||
sif::info << "LoggingReport: MPSoC boot failed attempts: " << this->mpsocBootFailedAttempts
|
||||
<< std::endl;
|
||||
sif::info << "LoggingReport: MPSoC power up: " << this->mpsocPowerup << std::endl;
|
||||
sif::info << "LoggingReport: MPSoC updates: " << this->mpsocUpdates << std::endl;
|
||||
sif::info << "LoggingReport: Last received TC: " << this->lastRecvdTc << std::endl;
|
||||
|
Reference in New Issue
Block a user