sitara_depot/components/free_rtos/semaphore/semaphore.hpp

58 lines
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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