Merge remote-tracking branch 'upstream/development' into mueller/defaultcfg-update
This commit is contained in:
18
osal/rtems/CMakeLists.txt
Normal file
18
osal/rtems/CMakeLists.txt
Normal file
@ -0,0 +1,18 @@
|
||||
target_sources(${LIB_FSFW_NAME}
|
||||
PRIVATE
|
||||
Clock.cpp
|
||||
CpuUsage.cpp
|
||||
InitTask.cpp
|
||||
InternalErrorCodes.cpp
|
||||
MessageQueue.cpp
|
||||
MultiObjectTask.cpp
|
||||
Mutex.cpp
|
||||
MutexFactory.cpp
|
||||
PollingTask.cpp
|
||||
QueueFactory.cpp
|
||||
RtemsBasic.cpp
|
||||
TaskBase.cpp
|
||||
TaskFactory.cpp
|
||||
)
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
#include "../../timemanager/Clock.h"
|
||||
#include "RtemsBasic.h"
|
||||
|
||||
#include "../../timemanager/Clock.h"
|
||||
#include "../../ipc/MutexHelper.h"
|
||||
|
||||
#include <rtems/score/todimpl.h>
|
||||
#include <rtems/rtems/clockimpl.h>
|
||||
|
||||
uint16_t Clock::leapSeconds = 0;
|
||||
MutexIF* Clock::timeMutex = nullptr;
|
||||
@ -33,15 +37,24 @@ ReturnValue_t Clock::setClock(const TimeOfDay_t* time) {
|
||||
}
|
||||
|
||||
ReturnValue_t Clock::setClock(const timeval* time) {
|
||||
//TODO This routine uses _TOD_Set which is not
|
||||
timespec newTime;
|
||||
newTime.tv_sec = time->tv_sec;
|
||||
if(time->tv_usec < 0) {
|
||||
// better returnvalue.
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
newTime.tv_nsec = time->tv_usec * TOD_NANOSECONDS_PER_MICROSECOND;
|
||||
//SHOULDDO: Not sure if we need to protect this call somehow (by thread lock or something).
|
||||
//Uli: rtems docu says you can call this from an ISR, not sure if this means no protetion needed
|
||||
//TODO Second parameter is ISR_lock_Context
|
||||
_TOD_Set(&newTime,nullptr);
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
|
||||
ISR_lock_Context context;
|
||||
_TOD_Lock();
|
||||
_TOD_Acquire(&context);
|
||||
Status_Control status = _TOD_Set(&newTime, &context);
|
||||
_TOD_Unlock();
|
||||
if(status == STATUS_SUCCESSFUL) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
// better returnvalue
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
|
||||
ReturnValue_t Clock::getClock_timeval(timeval* time) {
|
||||
@ -91,6 +104,7 @@ ReturnValue_t Clock::getClock_usecs(uint64_t* time) {
|
||||
}
|
||||
|
||||
ReturnValue_t Clock::getDateAndTime(TimeOfDay_t* time) {
|
||||
// TIsn't this a bug? Are RTEMS ticks always microseconds?
|
||||
rtems_time_of_day* timeRtems = reinterpret_cast<rtems_time_of_day*>(time);
|
||||
rtems_status_code status = rtems_clock_get_tod(timeRtems);
|
||||
switch (status) {
|
||||
|
@ -34,8 +34,10 @@ ReturnValue_t InternalErrorCodes::translate(uint8_t code) {
|
||||
return OUT_OF_PROXIES;
|
||||
case INTERNAL_ERROR_INVALID_GLOBAL_ID:
|
||||
return INVALID_GLOBAL_ID;
|
||||
#ifndef STM32H743ZI_NUCLEO
|
||||
case INTERNAL_ERROR_BAD_STACK_HOOK:
|
||||
return BAD_STACK_HOOK;
|
||||
#endif
|
||||
// case INTERNAL_ERROR_BAD_ATTRIBUTES:
|
||||
// return BAD_ATTRIBUTES;
|
||||
// case INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY:
|
||||
|
@ -9,9 +9,11 @@ MessageQueue::MessageQueue(size_t message_depth, size_t max_message_size) :
|
||||
rtems_status_code status = rtems_message_queue_create(name, message_depth,
|
||||
max_message_size, 0, &(this->id));
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "MessageQueue::MessageQueue: Creating Queue " << std::hex
|
||||
<< name << std::dec << " failed with status:"
|
||||
<< (uint32_t) status << std::endl;
|
||||
#endif
|
||||
this->id = 0;
|
||||
}
|
||||
}
|
||||
|
@ -30,8 +30,10 @@ ReturnValue_t MultiObjectTask::startTask() {
|
||||
rtems_status_code status = rtems_task_start(id, MultiObjectTask::taskEntryPoint,
|
||||
rtems_task_argument((void *) this));
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "ObjectTask::startTask for " << std::hex << this->getId()
|
||||
<< std::dec << " failed." << std::endl;
|
||||
#endif
|
||||
}
|
||||
switch(status){
|
||||
case RTEMS_SUCCESSFUL:
|
||||
@ -63,7 +65,9 @@ void MultiObjectTask::taskFunctionality() {
|
||||
char nameSpace[8] = { 0 };
|
||||
char* ptr = rtems_object_get_name(getId(), sizeof(nameSpace),
|
||||
nameSpace);
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "ObjectTask: " << ptr << " Deadline missed." << std::endl;
|
||||
#endif
|
||||
if (this->deadlineMissedFunc != nullptr) {
|
||||
this->deadlineMissedFunc();
|
||||
}
|
||||
|
@ -10,16 +10,20 @@ Mutex::Mutex() :
|
||||
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY, 0,
|
||||
&mutexId);
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "Mutex: creation with name, id " << mutexName << ", " << mutexId
|
||||
<< " failed with " << status << std::endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Mutex::~Mutex() {
|
||||
rtems_status_code status = rtems_semaphore_delete(mutexId);
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "Mutex: deletion for id " << mutexId
|
||||
<< " failed with " << status << std::endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,15 +35,19 @@ rtems_task PollingTask::taskEntryPoint(rtems_task_argument argument) {
|
||||
PollingTask *originalTask(reinterpret_cast<PollingTask*>(argument));
|
||||
//The task's functionality is called.
|
||||
originalTask->taskFunctionality();
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::debug << "Polling task " << originalTask->getId()
|
||||
<< " returned from taskFunctionality." << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
void PollingTask::missedDeadlineCounter() {
|
||||
PollingTask::deadlineMissedCount++;
|
||||
if (PollingTask::deadlineMissedCount % 10 == 0) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "PST missed " << PollingTask::deadlineMissedCount
|
||||
<< " deadlines." << std::endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,8 +55,10 @@ ReturnValue_t PollingTask::startTask() {
|
||||
rtems_status_code status = rtems_task_start(id, PollingTask::taskEntryPoint,
|
||||
rtems_task_argument((void *) this));
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "PollingTask::startTask for " << std::hex << this->getId()
|
||||
<< std::dec << " failed." << std::endl;
|
||||
#endif
|
||||
}
|
||||
switch(status){
|
||||
case RTEMS_SUCCESSFUL:
|
||||
@ -75,8 +81,10 @@ ReturnValue_t PollingTask::addSlot(object_id_t componentId,
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "Component " << std::hex << componentId <<
|
||||
" not found, not adding it to pst" << std::endl;
|
||||
#endif
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
|
||||
|
@ -22,9 +22,11 @@ TaskBase::TaskBase(rtems_task_priority set_priority, size_t stack_size,
|
||||
}
|
||||
ReturnValue_t result = convertReturnCode(status);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "TaskBase::TaskBase: createTask with name " << std::hex
|
||||
<< osalName << std::dec << " failed with return code "
|
||||
<< (uint32_t) status << std::endl;
|
||||
#endif
|
||||
this->id = 0;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
|
||||
#define PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
|
||||
#ifndef FSFW_TMTCSERVICES_TMSTOREBACKENDIF_H_
|
||||
#define FSFW_TMTCSERVICES_TMSTOREBACKENDIF_H_
|
||||
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
#include "../objectmanager/SystemObjectIF.h"
|
||||
@ -49,14 +49,33 @@ public:
|
||||
static const Event AUTO_CATALOGS_SENDING_FAILED = MAKE_EVENT(15, severity::INFO);//!< Info that the a auto catalog report failed
|
||||
|
||||
virtual ~TmStoreBackendIF() {}
|
||||
|
||||
/**
|
||||
* SHOULDDO: Specification on what has to be implemented here
|
||||
* @param opCode
|
||||
* @return
|
||||
*/
|
||||
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
|
||||
virtual ReturnValue_t initialize() = 0;
|
||||
|
||||
/**
|
||||
* Implement the storage of TM packets to mass memory
|
||||
* @param tmPacket
|
||||
* @return
|
||||
*/
|
||||
virtual ReturnValue_t storePacket(TmPacketMinimal* tmPacket) = 0;
|
||||
virtual ReturnValue_t setFetchLimitTime(const timeval* loverLimit, const timeval* upperLimit) = 0;
|
||||
virtual ReturnValue_t setFetchLimitBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
|
||||
virtual ReturnValue_t fetchPackets(bool fromBegin = false) = 0;
|
||||
virtual ReturnValue_t initializeStore(object_id_t dumpTarget) = 0;
|
||||
virtual ReturnValue_t dumpIndex(store_address_t* storeId) = 0;
|
||||
|
||||
/**
|
||||
* SHOULDDO: Adapt for file management system?
|
||||
* @param startAddress
|
||||
* @param endAddress
|
||||
* @return
|
||||
*/
|
||||
virtual ReturnValue_t deleteBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
|
||||
virtual ReturnValue_t deleteTime(const timeval* timeUntil,
|
||||
uint32_t* deletedPackets) = 0;
|
||||
@ -73,4 +92,4 @@ public:
|
||||
|
||||
|
||||
|
||||
#endif /* PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_ */
|
||||
#endif /* FSFW_TMTCSERVICES_TMSTOREBACKENDIF_H_ */
|
||||
|
@ -1,9 +1,10 @@
|
||||
#ifndef PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
|
||||
#define PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
|
||||
#ifndef FSFW_TMTCSERVICES_TMSTOREFRONTENDIF_H_
|
||||
#define FSFW_TMTCSERVICES_TMSTOREFRONTENDIF_H_
|
||||
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
#include "TmStorePackets.h"
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
#include "../ipc/MessageQueueSenderIF.h"
|
||||
|
||||
class TmPacketMinimal;
|
||||
class SpacePacketBase;
|
||||
class TmStoreBackendIF;
|
||||
@ -11,6 +12,14 @@ class TmStoreBackendIF;
|
||||
class TmStoreFrontendIF {
|
||||
public:
|
||||
virtual TmStoreBackendIF* getBackend() const = 0;
|
||||
|
||||
/**
|
||||
* What do I need to implement here?
|
||||
* This is propably used by PUS Service 15 so we should propably check for messages..
|
||||
* Provide base implementation?
|
||||
* @param opCode
|
||||
* @return
|
||||
*/
|
||||
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
|
||||
/**
|
||||
* Callback from the back-end to indicate a certain packet was received.
|
||||
@ -52,4 +61,4 @@ public:
|
||||
|
||||
|
||||
|
||||
#endif /* PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_ */
|
||||
#endif /* FSFW_TMTCSERVICES_TMSTOREFRONTENDIF_H_ */
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include "../objectmanager/ObjectManagerIF.h"
|
||||
#include "TmStoreMessage.h"
|
||||
#include "../objectmanager/ObjectManagerIF.h"
|
||||
|
||||
TmStoreMessage::~TmStoreMessage() {
|
||||
|
||||
@ -74,7 +74,7 @@ void TmStoreMessage::clear(CommandMessage* cmd) {
|
||||
case DELETE_STORE_CONTENT_BLOCKS:
|
||||
case DOWNLINK_STORE_CONTENT_BLOCKS:
|
||||
case REPORT_INDEX_REQUEST:
|
||||
cmd->setCommand(UNKNOWN_COMMAND);
|
||||
cmd->setCommand(CommandMessage::UNKNOWN_COMMAND);
|
||||
cmd->setParameter(0);
|
||||
cmd->setParameter2(0);
|
||||
break;
|
||||
|
@ -1,11 +1,12 @@
|
||||
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
|
||||
#define FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
|
||||
#ifndef FSFW_TMSTORAGE_TMSTOREMESSAGE_H_
|
||||
#define FSFW_TMSTORAGE_TMSTOREMESSAGE_H_
|
||||
|
||||
#include "TmStorePackets.h"
|
||||
#include "../ipc/CommandMessage.h"
|
||||
#include "../storagemanager/StorageManagerIF.h"
|
||||
#include "TmStorePackets.h"
|
||||
#include "../objectmanager/SystemObjectIF.h"
|
||||
class TmStoreMessage: public CommandMessage {
|
||||
|
||||
class TmStoreMessage {
|
||||
public:
|
||||
static ReturnValue_t setEnableStoringMessage(CommandMessage* cmd,
|
||||
bool setEnabled);
|
||||
@ -25,8 +26,10 @@ public:
|
||||
static void setDownlinkContentTimeMessage(CommandMessage* cmd,
|
||||
store_address_t storeId);
|
||||
static void setIndexReportMessage(CommandMessage* cmd, store_address_t storeId);
|
||||
static ReturnValue_t setDeleteBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
|
||||
static ReturnValue_t setDownlinkBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
|
||||
static ReturnValue_t setDeleteBlocksMessage(CommandMessage* cmd,
|
||||
uint32_t addressLow, uint32_t addressHigh);
|
||||
static ReturnValue_t setDownlinkBlocksMessage(CommandMessage* cmd,
|
||||
uint32_t addressLow, uint32_t addressHigh);
|
||||
static ReturnValue_t setIndexRequestMessage(CommandMessage* cmd);
|
||||
static void setDeleteContentTimeMessage(CommandMessage* cmd,
|
||||
store_address_t storeId);
|
||||
@ -60,4 +63,4 @@ private:
|
||||
TmStoreMessage();
|
||||
};
|
||||
|
||||
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_ */
|
||||
#endif /* FSFW_TMSTORAGE_TMSTOREMESSAGE_H_ */
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
|
||||
#define FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
|
||||
#ifndef FSFW_TMSTORAGE_TMSTOREPACKETS_H_
|
||||
#define FSFW_TMSTORAGE_TMSTOREPACKETS_H_
|
||||
|
||||
#include "../serialize/SerialFixedArrayListAdapter.h"
|
||||
#include "../serialize/SerializeElement.h"
|
||||
@ -140,8 +140,8 @@ public:
|
||||
if(packet->isValid()){
|
||||
timeval packetTime = {0,0};
|
||||
size_t foundlen = 0;
|
||||
CCSDSTime::convertFromCcsds(&packetTime,
|
||||
&packet->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
|
||||
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],
|
||||
&foundlen,sizeof(rawTimestamp));
|
||||
if(packetTime <= *cmpTime){
|
||||
return true;
|
||||
}
|
||||
@ -154,7 +154,7 @@ public:
|
||||
timeval packetTime = {0,0};
|
||||
size_t foundlen = 0;
|
||||
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],
|
||||
&foundlen,sizeof(rawTimestamp));
|
||||
&foundlen,sizeof(rawTimestamp));
|
||||
if(packetTime >= *cmpTime){
|
||||
return true;
|
||||
}
|
||||
@ -208,7 +208,7 @@ public:
|
||||
timeval packetTime = {0,0};
|
||||
size_t foundlen = 0;
|
||||
CCSDSTime::convertFromCcsds(&packetTime, &this->rawTimestamp[0],
|
||||
&foundlen,sizeof(rawTimestamp));
|
||||
&foundlen, sizeof(rawTimestamp));
|
||||
return packetTime;
|
||||
}
|
||||
|
||||
@ -300,4 +300,4 @@ private:
|
||||
uint8_t rawTimestamp[TimeStamperIF::MISSION_TIMESTAMP_SIZE];
|
||||
|
||||
};
|
||||
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_ */
|
||||
#endif /* FSFW_TMSTORAGE_TMSTOREPACKETS_H_ */
|
||||
|
Reference in New Issue
Block a user