Merge remote-tracking branch 'upstream/development' into development
This commit is contained in:
8
events/CMakeLists.txt
Normal file
8
events/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
target_sources(${LIB_FSFW_NAME}
|
||||
PRIVATE
|
||||
Event.cpp
|
||||
EventManager.cpp
|
||||
EventMessage.cpp
|
||||
)
|
||||
|
||||
add_subdirectory(eventmatching)
|
@ -1,14 +0,0 @@
|
||||
#include "Event.h"
|
||||
namespace EVENT {
|
||||
EventId_t getEventId(Event event) {
|
||||
return (event & 0xFFFF);
|
||||
}
|
||||
|
||||
EventSeverity_t getSeverity(Event event) {
|
||||
return ((event >> 16) & 0xFF);
|
||||
}
|
||||
|
||||
Event makeEvent(EventId_t eventId, EventSeverity_t eventSeverity) {
|
||||
return (eventSeverity << 16) + (eventId & 0xFFFF);
|
||||
}
|
||||
}
|
@ -3,8 +3,8 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include "fwSubsystemIdRanges.h"
|
||||
//could be move to more suitable location
|
||||
#include <subsystemIdRanges.h>
|
||||
// could be moved to more suitable location
|
||||
#include <events/subsystemIdRanges.h>
|
||||
|
||||
typedef uint16_t EventId_t;
|
||||
typedef uint8_t EventSeverity_t;
|
||||
@ -13,32 +13,28 @@ typedef uint8_t EventSeverity_t;
|
||||
|
||||
typedef uint32_t Event;
|
||||
|
||||
namespace EVENT {
|
||||
EventId_t getEventId(Event event);
|
||||
namespace event {
|
||||
|
||||
EventSeverity_t getSeverity(Event event);
|
||||
|
||||
Event makeEvent(EventId_t eventId, EventSeverity_t eventSeverity);
|
||||
|
||||
}
|
||||
namespace SEVERITY {
|
||||
static const EventSeverity_t INFO = 1;
|
||||
static const EventSeverity_t LOW = 2;
|
||||
static const EventSeverity_t MEDIUM = 3;
|
||||
static const EventSeverity_t HIGH = 4;
|
||||
constexpr EventId_t getEventId(Event event) {
|
||||
return (event & 0xFFFF);
|
||||
}
|
||||
|
||||
//Unfortunately, this does not work nicely because of the inability to define static classes in headers.
|
||||
//struct Event {
|
||||
// Event(uint8_t domain, uint8_t counter, EventSeverity_t severity) :
|
||||
// id(domain*100+counter), severity(severity) {
|
||||
// }
|
||||
// EventId_t id;
|
||||
// EventSeverity_t severity;
|
||||
// static const EventSeverity_t INFO = 1;
|
||||
// static const EventSeverity_t LOW = 2;
|
||||
// static const EventSeverity_t MEDIUM = 3;
|
||||
// static const EventSeverity_t HIGH = 4;
|
||||
//};
|
||||
constexpr EventSeverity_t getSeverity(Event event) {
|
||||
return ((event >> 16) & 0xFF);
|
||||
}
|
||||
|
||||
constexpr Event makeEvent(uint8_t subsystemId, uint8_t uniqueEventId,
|
||||
EventSeverity_t eventSeverity) {
|
||||
return (eventSeverity << 16) + (subsystemId * 100) + uniqueEventId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace severity {
|
||||
static constexpr EventSeverity_t INFO = 1;
|
||||
static constexpr EventSeverity_t LOW = 2;
|
||||
static constexpr EventSeverity_t MEDIUM = 3;
|
||||
static constexpr EventSeverity_t HIGH = 4;
|
||||
}
|
||||
|
||||
#endif /* EVENTOBJECT_EVENT_H_ */
|
||||
|
@ -7,21 +7,22 @@
|
||||
#include "../ipc/MutexFactory.h"
|
||||
|
||||
|
||||
const uint16_t EventManager::POOL_SIZES[N_POOLS] = {
|
||||
sizeof(EventMatchTree::Node), sizeof(EventIdRangeMatcher),
|
||||
sizeof(ReporterRangeMatcher) };
|
||||
// If one checks registerListener calls, there are around 40 (to max 50)
|
||||
// objects registering for certain events.
|
||||
// Each listener requires 1 or 2 EventIdMatcher and 1 or 2 ReportRangeMatcher.
|
||||
// So a good guess is 75 to a max of 100 pools required for each, which fits well.
|
||||
const uint16_t EventManager::N_ELEMENTS[N_POOLS] = {
|
||||
fsfwconfig::FSFW_EVENTMGMR_MATCHTREE_NODES ,
|
||||
fsfwconfig::FSFW_EVENTMGMT_EVENTIDMATCHERS,
|
||||
fsfwconfig::FSFW_EVENTMGMR_RANGEMATCHERS };
|
||||
const LocalPool::LocalPoolConfig EventManager::poolConfig = {
|
||||
{fsfwconfig::FSFW_EVENTMGMR_MATCHTREE_NODES,
|
||||
sizeof(EventMatchTree::Node)},
|
||||
{fsfwconfig::FSFW_EVENTMGMT_EVENTIDMATCHERS,
|
||||
sizeof(EventIdRangeMatcher)},
|
||||
{fsfwconfig::FSFW_EVENTMGMR_RANGEMATCHERS,
|
||||
sizeof(ReporterRangeMatcher)}
|
||||
};
|
||||
|
||||
EventManager::EventManager(object_id_t setObjectId) :
|
||||
SystemObject(setObjectId),
|
||||
factoryBackend(0, POOL_SIZES, N_ELEMENTS, false, true) {
|
||||
factoryBackend(0, poolConfig, false, true) {
|
||||
mutex = MutexFactory::instance()->createMutex();
|
||||
eventReportQueue = QueueFactory::instance()->createMessageQueue(
|
||||
MAX_EVENTS_PER_CYCLE, EventMessage::EVENT_MESSAGE_SIZE);
|
||||
@ -118,7 +119,7 @@ ReturnValue_t EventManager::unsubscribeFromEventRange(MessageQueueId_t listener,
|
||||
void EventManager::printEvent(EventMessage* message) {
|
||||
const char *string = 0;
|
||||
switch (message->getSeverity()) {
|
||||
case SEVERITY::INFO:
|
||||
case severity::INFO:
|
||||
#ifdef DEBUG_INFO_EVENT
|
||||
string = translateObject(message->getReporter());
|
||||
sif::info << "EVENT: ";
|
||||
|
@ -8,9 +8,11 @@
|
||||
#include "../tasks/ExecutableObjectIF.h"
|
||||
#include "../ipc/MessageQueueIF.h"
|
||||
#include "../ipc/MutexIF.h"
|
||||
#include <FSFWConfig.h>
|
||||
|
||||
#include <map>
|
||||
|
||||
#ifdef DEBUG
|
||||
#if FSFW_DEBUG_OUTPUT == 1
|
||||
// forward declaration, should be implemented by mission
|
||||
extern const char* translateObject(object_id_t object);
|
||||
extern const char* translateEvents(Event event);
|
||||
@ -49,7 +51,9 @@ protected:
|
||||
MutexIF* mutex = nullptr;
|
||||
|
||||
static const uint8_t N_POOLS = 3;
|
||||
LocalPool<N_POOLS> factoryBackend;
|
||||
LocalPool factoryBackend;
|
||||
static const LocalPool::LocalPoolConfig poolConfig;
|
||||
|
||||
static const uint16_t POOL_SIZES[N_POOLS];
|
||||
static const uint16_t N_ELEMENTS[N_POOLS];
|
||||
|
||||
|
@ -48,7 +48,7 @@ void EventMessage::setMessageId(uint8_t id) {
|
||||
EventSeverity_t EventMessage::getSeverity() {
|
||||
Event event;
|
||||
memcpy(&event, getData(), sizeof(Event));
|
||||
return EVENT::getSeverity(event);
|
||||
return event::getSeverity(event);
|
||||
}
|
||||
|
||||
void EventMessage::setSeverity(EventSeverity_t severity) {
|
||||
@ -61,7 +61,7 @@ void EventMessage::setSeverity(EventSeverity_t severity) {
|
||||
EventId_t EventMessage::getEventId() {
|
||||
Event event;
|
||||
memcpy(&event, getData(), sizeof(Event));
|
||||
return EVENT::getEventId(event);
|
||||
return event::getEventId(event);
|
||||
}
|
||||
|
||||
void EventMessage::setEventId(EventId_t eventId) {
|
||||
|
7
events/eventmatching/CMakeLists.txt
Normal file
7
events/eventmatching/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
||||
target_sources(${LIB_FSFW_NAME}
|
||||
PRIVATE
|
||||
EventIdRangeMatcher.cpp
|
||||
EventMatchTree.cpp
|
||||
ReporterRangeMatcher.cpp
|
||||
SeverityRangeMatcher.cpp
|
||||
)
|
Reference in New Issue
Block a user