skullc-peripherals/Threads/Inc/threads_actor_thread.hpp

51 lines
917 B
C++

/*
* threads_actor_thread.hpp
*
* Created on: Nov 13, 2021
* Author: erki
*/
#ifndef SKULLC_THREADS_ACTOR_THREAD_HPP_
#define SKULLC_THREADS_ACTOR_THREAD_HPP_
#include <array>
#include <cstdint>
#include <freertos_os2.h>
#include <queue.h>
#include <threads_thread.hpp>
namespace Threads
{
class IActor;
class ActorThread : public Thread<ActorThread>
{
public:
ActorThread(const std::size_t queue_length, const char* name, const osPriority_t priority, const std::uint32_t stack_size);
void operator()();
private:
void init_();
void doMessageLoop_();
friend class IActor;
std::size_t acceptActor_(IActor* actor);
std::size_t queue_length_;
std::size_t queue_item_length_ = 0;
QueueHandle_t queue_ = nullptr;
char* rx_buffer_ = nullptr;
char* tx_buffer_ = nullptr;
std::array<IActor*, 32> actors_;
};
}// namespace Threads
#endif /* SKULLC_THREADS_ACTOR_THREAD_HPP_ */