Skip to content

Commit

Permalink
keira: add Acquire and Defer classes
Browse files Browse the repository at this point in the history
  • Loading branch information
and3rson committed Apr 11, 2024
1 parent e692042 commit aa14548
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 5 deletions.
17 changes: 17 additions & 0 deletions firmware/keira/src/utils/acquire.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "acquire.h"

Acquire::Acquire(SemaphoreHandle_t semaphore, bool recursive) : _semaphore(semaphore), recursive(recursive) {
if (recursive) {
xSemaphoreTakeRecursive(_semaphore, portMAX_DELAY);
return;
}
xSemaphoreTake(_semaphore, portMAX_DELAY);
}

Acquire::~Acquire() {
if (recursive) {
xSemaphoreGiveRecursive(_semaphore);
return;
}
xSemaphoreGive(_semaphore);
}
14 changes: 14 additions & 0 deletions firmware/keira/src/utils/acquire.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

#include <FreeRTOS.h>
#include <semphr.h>

class Acquire {
public:
explicit Acquire(SemaphoreHandle_t semaphore, bool recursive = false);
~Acquire();

private:
SemaphoreHandle_t _semaphore;
bool recursive;
};
8 changes: 8 additions & 0 deletions firmware/keira/src/utils/defer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "defer.h"

Defer::Defer(std::function<void()> func) : _func(func) {
}

Defer::~Defer() {
_func();
}
7 changes: 2 additions & 5 deletions firmware/keira/src/utils/defer.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@

class Defer {
public:
Defer(std::function<void()> func) : _func(func) {
}
~Defer() {
_func();
}
explicit Defer(std::function<void()> func);
~Defer();

private:
std::function<void()> _func;
Expand Down

0 comments on commit aa14548

Please sign in to comment.