Files
allwpilib/hal/lib/Athena/Semaphore.cpp
Thad House 2f2184e8ce Makes HALSetDataSem take a MULTIWAIT_ID rather then a NATIVE_MULTIWAIT_ID
Having the HAL take a NATIVE_MULTIWAIT_ID without any way to get that
structure from extern "C" code is a problem. This makes it so it just
takes a MULTIWAIT_ID, and then grabs the native handle inside the HAL.

Change-Id: I06da18ba34adcea2f16e4e53da672f38be79e28e
Signed-off-by: Dustin Spicuzza <dustin@virtualroadside.com>
2015-11-27 22:33:28 -08:00

43 lines
1.1 KiB
C++

#include "HAL/Semaphore.hpp"
#include "Log.hpp"
// set the logging level
TLogLevel semaphoreLogLevel = logDEBUG;
#define SEMAPHORE_LOG(level) \
if (level > semaphoreLogLevel) ; \
else Log().Get(level)
MUTEX_ID initializeMutexNormal() { return new priority_mutex; }
void deleteMutex(MUTEX_ID sem) { delete sem; }
/**
* Lock the mutex, blocking until it's available.
*/
void takeMutex(MUTEX_ID mutex) { mutex->lock(); }
/**
* Attempt to lock the mutex.
* @return true if succeeded in locking the mutex, false otherwise.
*/
bool tryTakeMutex(MUTEX_ID mutex) { return mutex->try_lock(); }
/**
* Unlock the mutex.
* @return 0 for success, -1 for error. If -1, the error will be in errno.
*/
void giveMutex(MUTEX_ID mutex) { mutex->unlock(); }
MULTIWAIT_ID initializeMultiWait() { return new priority_condition_variable; }
void deleteMultiWait(MULTIWAIT_ID cond) { delete cond; }
void takeMultiWait(MULTIWAIT_ID cond, MUTEX_ID m) {
std::unique_lock<priority_mutex> lock(*m);
cond->wait(lock);
}
void giveMultiWait(MULTIWAIT_ID cond) { cond->notify_all(); }