58 lines
1.2 KiB
C++
58 lines
1.2 KiB
C++
#ifndef SRC_APP_SEMAPHORE_SEMAPHORE_HPP_
|
||
#define SRC_APP_SEMAPHORE_SEMAPHORE_HPP_
|
||
|
||
#include <kernel/dpl/SemaphoreP.h>
|
||
#include <kernel/dpl/DebugP.h>
|
||
|
||
namespace free_rtos {
|
||
|
||
/**
|
||
* @brief С++ обертка семафора в free rtos
|
||
*
|
||
*/
|
||
class Semaphore {
|
||
public:
|
||
enum Type {
|
||
e_semTypeBinary,
|
||
e_semTypeCounting
|
||
};
|
||
|
||
Semaphore() {
|
||
int32_t status = SystemP_FAILURE;
|
||
status = SemaphoreP_constructBinary(&sem_, 0);
|
||
DebugP_assert(SystemP_SUCCESS == status);
|
||
}
|
||
|
||
Semaphore(Semaphore::Type type, uint32_t init_val, uint32_t max_val) {
|
||
int32_t status = SystemP_FAILURE;
|
||
|
||
if (type == Semaphore::e_semTypeBinary) {
|
||
status = SemaphoreP_constructBinary(&sem_, init_val);
|
||
}
|
||
else if (type == Semaphore::e_semTypeCounting) {
|
||
status = SemaphoreP_constructCounting(&sem_, init_val, max_val);
|
||
}
|
||
|
||
DebugP_assert(SystemP_SUCCESS == status);
|
||
}
|
||
|
||
void post() {
|
||
SemaphoreP_post(&sem_);
|
||
}
|
||
|
||
int32_t pend(uint32_t ticks = SystemP_WAIT_FOREVER) {
|
||
return SemaphoreP_pend(&sem_, ticks);
|
||
}
|
||
|
||
~Semaphore() {
|
||
SemaphoreP_destruct(&sem_);
|
||
}
|
||
|
||
private:
|
||
SemaphoreP_Object sem_;
|
||
};
|
||
|
||
}
|
||
|
||
#endif
|