Add thread wrapper class

This commit is contained in:
Henrik Stickann
2022-12-02 16:34:52 +01:00
parent 57d0dd0bcd
commit 4e355d244b
2 changed files with 162 additions and 0 deletions

46
src/thread.cpp Normal file
View File

@@ -0,0 +1,46 @@
#include <sta/rtos/thread.hpp>
#define IS_THREAD_SYS_FLAGS(flags) ( ( flags & STA_RTOS_THREAD_FLAGS_VALID_SYS_BITS ) == flags )
#define IS_THREAD_USER_FLAGS(flags) ( ( flags & STA_RTOS_THREAD_FLAGS_VALID_USER_BITS ) == flags )
namespace sta
{
RtosThread::RtosThread()
: handle_(nullptr)
{}
RtosThread::RtosThread(const Handle & handle)
: handle_{handle}
{}
void RtosThread::notify(uint32_t flags)
{
STA_ASSERT(handle_.get() != nullptr);
STA_ASSERT_MSG(IS_THREAD_USER_FLAGS(flags), "Only user flags allowed");
osThreadFlagsSet(handle_.get(), flags);
}
void RtosThread::sysNotify(uint32_t flags)
{
STA_ASSERT(handle_.get() != nullptr);
STA_ASSERT_MSG(IS_THREAD_SYS_FLAGS(flags), "Only system flags allowed");
osThreadFlagsSet(handle_.get(), flags);
}
void RtosThread::requestTermination()
{
sysNotify(STA_RTOS_THREAD_FLAG_TERMINATE);
}
void RtosThread::terminate()
{
STA_ASSERT(handle_.get() != nullptr);
osThreadTerminate(handle_.get());
}
} // namespace sta