54 lines
950 B
C++
54 lines
950 B
C++
#ifndef FREERTOS_CPP_TASK_REF_HPP
|
|
#define FREERTOS_CPP_TASK_REF_HPP
|
|
|
|
extern "C"
|
|
{
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
}
|
|
|
|
namespace freertos
|
|
{
|
|
|
|
/* Non-owning view: it never deletes the task and must not outlive the handle. */
|
|
class TaskRef final
|
|
{
|
|
public:
|
|
explicit constexpr TaskRef( TaskHandle_t handle ) noexcept
|
|
: handle_ { handle }
|
|
{
|
|
}
|
|
|
|
static TaskRef current() noexcept
|
|
{
|
|
return TaskRef { xTaskGetCurrentTaskHandle() };
|
|
}
|
|
|
|
eTaskState state() const noexcept
|
|
{
|
|
return eTaskGetState( handle_ );
|
|
}
|
|
|
|
UBaseType_t priority() const noexcept
|
|
{
|
|
return uxTaskPriorityGet( handle_ );
|
|
}
|
|
|
|
void set_priority( UBaseType_t priority ) const noexcept
|
|
{
|
|
vTaskPrioritySet( handle_, priority );
|
|
}
|
|
|
|
constexpr TaskHandle_t native_handle() const noexcept
|
|
{
|
|
return handle_;
|
|
}
|
|
|
|
private:
|
|
TaskHandle_t handle_;
|
|
};
|
|
|
|
} // namespace freertos
|
|
|
|
#endif
|