#include "WrappedSemaphore.h"

/**
 * Platform semaphopre implementation for the esp-idf.
 */

using namespace bell;

WrappedSemaphore::WrappedSemaphore(int count) {
  semaphoreHandle = xSemaphoreCreateCounting(count, 0);
}

WrappedSemaphore::~WrappedSemaphore() {
  vSemaphoreDelete(semaphoreHandle);
}

int WrappedSemaphore::wait() {
  if (xSemaphoreTake(semaphoreHandle, portMAX_DELAY) == pdTRUE) {
    return 0;
  }

  return 1;
}

int WrappedSemaphore::twait(long milliseconds) {
  if (xSemaphoreTake(semaphoreHandle, milliseconds / portTICK_PERIOD_MS) ==
      pdTRUE) {
    return 0;
  }

  return 1;
}

void WrappedSemaphore::give() {

  xSemaphoreGive(semaphoreHandle);
}