69 lines
1.2 KiB
C++
69 lines
1.2 KiB
C++
/*
|
|
* threads_iactor.hpp
|
|
*
|
|
* Created on: Nov 14, 2021
|
|
* Author: erki
|
|
*/
|
|
|
|
#ifndef SKULLC_THREADS_IACTOR_HPP_
|
|
#define SKULLC_THREADS_IACTOR_HPP_
|
|
|
|
#include <cstdint>
|
|
|
|
#include <freertos_os2.h>
|
|
|
|
namespace Threads
|
|
{
|
|
|
|
class ActorThread;
|
|
|
|
class IActor
|
|
{
|
|
public:
|
|
IActor(const std::size_t signal_size)
|
|
: signal_size_(signal_size)
|
|
{}
|
|
|
|
virtual ~IActor() {}
|
|
|
|
virtual void init() = 0;
|
|
virtual void dispatchSignal(const char* data) = 0;
|
|
|
|
void moveToThread(ActorThread* thread);
|
|
|
|
std::size_t actorIndex() const
|
|
{
|
|
return actor_index_;
|
|
}
|
|
|
|
std::size_t signalSize() const
|
|
{
|
|
return signal_size_;
|
|
}
|
|
|
|
protected:
|
|
template<typename T>
|
|
void dispatchEvent(const T& data)
|
|
{
|
|
dispatchEventImpl_(&data, sizeof(T));
|
|
}
|
|
|
|
template<typename T>
|
|
BaseType_t dispatchEventFromIsr(const T& data)
|
|
{
|
|
return dispatchEventFromIsrImpl_(&data, sizeof(T));
|
|
}
|
|
|
|
private:
|
|
ActorThread* parent_thread_ = nullptr;
|
|
std::size_t actor_index_ = 0;
|
|
std::size_t signal_size_;
|
|
|
|
void dispatchEventImpl_(const void* data, const std::size_t data_size);
|
|
BaseType_t dispatchEventFromIsrImpl_(const void* data, const std::size_t data_size);
|
|
};
|
|
|
|
}// namespace Threads
|
|
|
|
#endif /* SKULLC_THREADS_IACTOR_HPP_ */
|