Update FSFW from upstream #71
@ -267,8 +267,7 @@ void CommandingServiceBase::handleRequestQueue() {
|
|||||||
address = message.getStorageId();
|
address = message.getStorageId();
|
||||||
result = setUpTcReader(address);
|
result = setUpTcReader(address);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
// TODO: Warning?
|
rejectPacketInvalidTc(result, address);
|
||||||
rejectPacket(tcverif::START_FAILURE, address, result);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ((tcReader.getSubService() == 0) or
|
if ((tcReader.getSubService() == 0) or
|
||||||
@ -384,15 +383,29 @@ void CommandingServiceBase::startExecution(store_address_t storeId, CommandMapIt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandingServiceBase::rejectPacket(uint8_t reportId, store_address_t tcStoreId,
|
ReturnValue_t CommandingServiceBase::rejectPacketInvalidTc(ReturnValue_t errorCode,
|
||||||
ReturnValue_t errorCode) {
|
store_address_t tcStoreId) {
|
||||||
verificationReporter->sendFailureReport(VerifFailureParams(reportId, tcReader, errorCode));
|
failureParameter1 = INVALID_TC;
|
||||||
|
prepareVerificationFailureWithNoTcInfo(tcverif::START_FAILURE, errorCode, true);
|
||||||
|
if (tcStoreId != store_address_t::invalid()) {
|
||||||
tcStore->deleteData(tcStoreId);
|
tcStore->deleteData(tcStoreId);
|
||||||
|
}
|
||||||
|
return verificationReporter->sendFailureReport(failParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandingServiceBase::acceptPacket(uint8_t reportId, store_address_t tcStoreId) {
|
ReturnValue_t CommandingServiceBase::rejectPacket(uint8_t reportId, store_address_t tcStoreId,
|
||||||
|
ReturnValue_t errorCode) {
|
||||||
|
ReturnValue_t result =
|
||||||
|
verificationReporter->sendFailureReport(VerifFailureParams(reportId, tcReader, errorCode));
|
||||||
|
tcStore->deleteData(tcStoreId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t CommandingServiceBase::acceptPacket(uint8_t reportId, store_address_t tcStoreId) {
|
||||||
|
ReturnValue_t result =
|
||||||
verificationReporter->sendSuccessReport(VerifSuccessParams(reportId, tcReader));
|
verificationReporter->sendSuccessReport(VerifSuccessParams(reportId, tcReader));
|
||||||
tcStore->deleteData(tcStoreId);
|
tcStore->deleteData(tcStoreId);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandingServiceBase::checkAndExecuteFifo(CommandMapIter& iter) {
|
void CommandingServiceBase::checkAndExecuteFifo(CommandMapIter& iter) {
|
||||||
@ -437,10 +450,23 @@ void CommandingServiceBase::setTaskIF(PeriodicTaskIF* task_) { executingTask = t
|
|||||||
void CommandingServiceBase::setCustomTmStore(StorageManagerIF& store) {
|
void CommandingServiceBase::setCustomTmStore(StorageManagerIF& store) {
|
||||||
tmStoreHelper.setTmStore(store);
|
tmStoreHelper.setTmStore(store);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CommandingServiceBase::setUpTcReader(store_address_t storeId) {
|
ReturnValue_t CommandingServiceBase::setUpTcReader(store_address_t storeId) {
|
||||||
return tc::prepareTcReader(*tcStore, storeId, tcReader);
|
return tc::prepareTcReader(*tcStore, storeId, tcReader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommandingServiceBase::prepareVerificationFailureWithNoTcInfo(uint8_t reportId,
|
||||||
|
ReturnValue_t errorCode,
|
||||||
|
bool setCachedFailParams) {
|
||||||
|
failParams.resetTcFields();
|
||||||
|
failParams.resetFailParams();
|
||||||
|
failParams.reportId = reportId;
|
||||||
|
failParams.errorCode = errorCode;
|
||||||
|
if (setCachedFailParams) {
|
||||||
|
failParams.errorParam1 = failureParameter1;
|
||||||
|
failParams.errorParam2 = failureParameter2;
|
||||||
|
}
|
||||||
|
}
|
||||||
void CommandingServiceBase::prepareVerificationFailureWithFullInfo(uint8_t reportId,
|
void CommandingServiceBase::prepareVerificationFailureWithFullInfo(uint8_t reportId,
|
||||||
CommandInfo::TcInfo& tcInfo,
|
CommandInfo::TcInfo& tcInfo,
|
||||||
ReturnValue_t errorCode,
|
ReturnValue_t errorCode,
|
||||||
@ -449,6 +475,7 @@ void CommandingServiceBase::prepareVerificationFailureWithFullInfo(uint8_t repor
|
|||||||
failParams.tcPacketId = tcInfo.tcPacketId;
|
failParams.tcPacketId = tcInfo.tcPacketId;
|
||||||
failParams.tcPsc = tcInfo.tcSequenceControl;
|
failParams.tcPsc = tcInfo.tcSequenceControl;
|
||||||
failParams.ackFlags = tcInfo.ackFlags;
|
failParams.ackFlags = tcInfo.ackFlags;
|
||||||
|
failParams.resetFailParams();
|
||||||
failParams.errorCode = errorCode;
|
failParams.errorCode = errorCode;
|
||||||
if (setCachedFailParams) {
|
if (setCachedFailParams) {
|
||||||
failParams.errorParam1 = failureParameter1;
|
failParams.errorParam1 = failureParameter1;
|
||||||
|
@ -52,7 +52,13 @@ class CommandingServiceBase : public SystemObject,
|
|||||||
|
|
||||||
static const ReturnValue_t EXECUTION_COMPLETE = MAKE_RETURN_CODE(1);
|
static const ReturnValue_t EXECUTION_COMPLETE = MAKE_RETURN_CODE(1);
|
||||||
static const ReturnValue_t NO_STEP_MESSAGE = MAKE_RETURN_CODE(2);
|
static const ReturnValue_t NO_STEP_MESSAGE = MAKE_RETURN_CODE(2);
|
||||||
|
/**
|
||||||
|
* Target object has too many pending requests
|
||||||
|
*/
|
||||||
static const ReturnValue_t OBJECT_BUSY = MAKE_RETURN_CODE(3);
|
static const ReturnValue_t OBJECT_BUSY = MAKE_RETURN_CODE(3);
|
||||||
|
/**
|
||||||
|
* Command map is full
|
||||||
|
*/
|
||||||
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(4);
|
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(4);
|
||||||
static const ReturnValue_t INVALID_TC = MAKE_RETURN_CODE(5);
|
static const ReturnValue_t INVALID_TC = MAKE_RETURN_CODE(5);
|
||||||
static const ReturnValue_t INVALID_OBJECT = MAKE_RETURN_CODE(6);
|
static const ReturnValue_t INVALID_OBJECT = MAKE_RETURN_CODE(6);
|
||||||
@ -330,16 +336,24 @@ class CommandingServiceBase : public SystemObject,
|
|||||||
|
|
||||||
ReturnValue_t setUpTcReader(store_address_t storeId);
|
ReturnValue_t setUpTcReader(store_address_t storeId);
|
||||||
|
|
||||||
void rejectPacket(uint8_t reportId, store_address_t tcStoreId, ReturnValue_t errorCode);
|
/**
|
||||||
|
* The TC format is invalid or there was an issue retrieving a TC packet from the store.
|
||||||
|
* @param errorCode Result of the failed operation, will be sent with the verification failure
|
||||||
|
* message
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ReturnValue_t rejectPacketInvalidTc(ReturnValue_t errorCode, store_address_t tcStoreId);
|
||||||
|
ReturnValue_t rejectPacket(uint8_t reportId, store_address_t tcStoreId, ReturnValue_t errorCode);
|
||||||
|
|
||||||
void acceptPacket(uint8_t reportId, store_address_t tcStoreId);
|
ReturnValue_t acceptPacket(uint8_t reportId, store_address_t tcStoreId);
|
||||||
|
|
||||||
void startExecution(store_address_t storeId, CommandMapIter& iter);
|
void startExecution(store_address_t storeId, CommandMapIter& iter);
|
||||||
|
|
||||||
void handleCommandMessage(CommandMessage* reply);
|
void handleCommandMessage(CommandMessage* reply);
|
||||||
void handleReplyHandlerResult(ReturnValue_t result, CommandMapIter iter,
|
void handleReplyHandlerResult(ReturnValue_t result, CommandMapIter iter,
|
||||||
CommandMessage* nextCommand, CommandMessage* reply, bool& isStep);
|
CommandMessage* nextCommand, CommandMessage* reply, bool& isStep);
|
||||||
|
void prepareVerificationFailureWithNoTcInfo(uint8_t reportId, ReturnValue_t errorCode,
|
||||||
|
bool setCachedFailParams);
|
||||||
void prepareVerificationFailureWithFullInfo(uint8_t reportId, CommandInfo::TcInfo& tcInfo,
|
void prepareVerificationFailureWithFullInfo(uint8_t reportId, CommandInfo::TcInfo& tcInfo,
|
||||||
ReturnValue_t errorCode, bool setCachedFailParams);
|
ReturnValue_t errorCode, bool setCachedFailParams);
|
||||||
void prepareVerificationSuccessWithFullInfo(uint8_t reportId, CommandInfo::TcInfo& tcInfo);
|
void prepareVerificationSuccessWithFullInfo(uint8_t reportId, CommandInfo::TcInfo& tcInfo);
|
||||||
|
@ -13,6 +13,12 @@ struct VerifParamsBase {
|
|||||||
uint16_t tcPsc;
|
uint16_t tcPsc;
|
||||||
uint8_t ackFlags = ecss::ACK_ALL;
|
uint8_t ackFlags = ecss::ACK_ALL;
|
||||||
uint8_t step = 0;
|
uint8_t step = 0;
|
||||||
|
|
||||||
|
void resetTcFields() {
|
||||||
|
tcPacketId = 0;
|
||||||
|
tcPsc = 0;
|
||||||
|
ackFlags = 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VerifSuccessParams : public VerifParamsBase {
|
struct VerifSuccessParams : public VerifParamsBase {
|
||||||
@ -27,10 +33,10 @@ struct VerifFailureParams : public VerifParamsBase {
|
|||||||
VerifFailureParams() = default;
|
VerifFailureParams() = default;
|
||||||
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc, ReturnValue_t errorCode,
|
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc, ReturnValue_t errorCode,
|
||||||
uint32_t errorParam1, uint32_t errorParams2)
|
uint32_t errorParam1, uint32_t errorParams2)
|
||||||
: VerifParamsBase(reportId, tcPacketId, tcPsc), errorCode(errorCode) {
|
: VerifParamsBase(reportId, tcPacketId, tcPsc),
|
||||||
errorParam1 = errorParam1;
|
errorCode(errorCode),
|
||||||
errorParams2 = errorParams2;
|
errorParam1(errorParam1),
|
||||||
}
|
errorParam2(errorParams2) {}
|
||||||
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc, ReturnValue_t errorCode)
|
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc, ReturnValue_t errorCode)
|
||||||
: VerifParamsBase(reportId, tcPacketId, tcPsc), errorCode(errorCode) {}
|
: VerifParamsBase(reportId, tcPacketId, tcPsc), errorCode(errorCode) {}
|
||||||
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc)
|
VerifFailureParams(uint8_t reportId, uint16_t tcPacketId, uint16_t tcPsc)
|
||||||
@ -41,7 +47,13 @@ struct VerifFailureParams : public VerifParamsBase {
|
|||||||
VerifFailureParams(uint8_t reportId, PusTcIF& tc)
|
VerifFailureParams(uint8_t reportId, PusTcIF& tc)
|
||||||
: VerifParamsBase(reportId, tc.getPacketIdRaw(), tc.getPacketSeqCtrlRaw()) {}
|
: VerifParamsBase(reportId, tc.getPacketIdRaw(), tc.getPacketSeqCtrlRaw()) {}
|
||||||
|
|
||||||
ReturnValue_t errorCode = result::OK;
|
void resetFailParams() {
|
||||||
|
errorCode = result::FAILED;
|
||||||
|
errorParam1 = 0;
|
||||||
|
errorParam2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t errorCode = result::FAILED;
|
||||||
uint8_t step = 0;
|
uint8_t step = 0;
|
||||||
uint32_t errorParam1 = 0;
|
uint32_t errorParam1 = 0;
|
||||||
uint32_t errorParam2 = 0;
|
uint32_t errorParam2 = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user