Files
allwpilib/hal/lib/athena/Semaphore.cpp
Thad House 8fc55c80a9 Renames all our .hpp HAL files to .h (#44)
Adds consistency, as the HAL was .hpp however all other code was .h.
2016-05-22 21:41:22 -07:00

56 lines
1.6 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2016. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#include "HAL/Semaphore.h"
#include "Log.h"
// set the logging level
TLogLevel semaphoreLogLevel = logDEBUG;
#define SEMAPHORE_LOG(level) \
if (level > semaphoreLogLevel) \
; \
else \
Log().Get(level)
extern "C" {
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(); }
} // extern "C"