Program Listing for File HsmEventDispatcherFreeRTOS.hpp
↰ Return to documentation for file (include/hsmcpp/HsmEventDispatcherFreeRTOS.hpp
)
// Copyright (C) 2022 Igor Krechetov
// Distributed under MIT license. See file LICENSE for details
#ifndef HSMCPP_HSMEVENTDISPATCHERFREERTOS_HPP
#define HSMCPP_HSMEVENTDISPATCHERFREERTOS_HPP
#include <FreeRTOS.h>
#include <task.h>
#include <timers.h>
#include <vector>
#include "HsmEventDispatcherBase.hpp"
namespace hsmcpp {
class HsmEventDispatcherFreeRTOS : public HsmEventDispatcherBase {
public:
// cppcheck-suppress misra-c2012-17.8 ; false positive. setting default parameter value is not parameter modification
static std::shared_ptr<HsmEventDispatcherFreeRTOS> create(
const configSTACK_DEPTH_TYPE stackDepth = configMINIMAL_STACK_SIZE,
const UBaseType_t priority = tskIDLE_PRIORITY,
const size_t eventsCacheSize = DISPATCHER_DEFAULT_EVENTS_CACHESIZE);
void emitEvent(const HandlerID_t handlerID) override;
bool start() override;
void stop();
void join();
protected:
HsmEventDispatcherFreeRTOS(const configSTACK_DEPTH_TYPE stackDepth,
const UBaseType_t priority,
const size_t eventsCacheSize);
virtual ~HsmEventDispatcherFreeRTOS();
bool deleteSafe() override;
void startTimerImpl(const TimerID_t timerID, const unsigned int intervalMs, const bool isSingleShot) override;
void stopTimerImpl(const TimerID_t timerID) override;
void notifyDispatcherAboutEvent() override;
static void doDispatching(void* pvParameters);
static void onTimerEvent(TimerHandle_t timerHandle);
private:
TaskHandle_t mMainTask = nullptr;
TaskHandle_t mDispatcherTask = nullptr;
configSTACK_DEPTH_TYPE mStackDepth = configMINIMAL_STACK_SIZE;
UBaseType_t mPriority = tskIDLE_PRIORITY;
std::map<TimerID_t, TimerHandle_t> mNativeTimerHandlers; // protected by InterruptsFreeSection class
};
} // namespace hsmcpp
#endif // HSMCPP_HSMEVENTDISPATCHERFREERTOS_HPP