#include "eventobject.h"

const char semName[] = "EventTriggerSemaphore";
BinarySemaphore EventObject::_signalSem(SEM_EMPTY, semName);

EventObject::EventObject(SEM_B_STATE initialstate, const char *name)
  : _event(initialstate, name)
{ 		  
  _set =  initialstate;
  _id = (Int32) this;
}

EventObject::~EventObject(void)
{
}

// Set event. Sets a flag, and gives the sempahore.	  
void EventObject::set(void)
{	
	 _set = TRUE;
	 _event.semGive();	
	 signalEventHandler();
}

// Clear event. Sets a flag, and resets the sempahore.
void EventObject::clear(void)
{
	_set = FALSE;
	//_event.semTake(0);
	_signalSem.semTake(0);
}

// Wait for semaphore to release up to msectimeout
Int32 EventObject::wait(Int32 msectimeout) 
{
	  return _event.semTake(msectimeout);
}
// Wait for semaphore to release up to msectimeout
Int32 EventObject::waitForSignal(Int32 msectimeout) 
{
	  return _signalSem.semTake(msectimeout);
}
	  
// Returns TRUE if the semaphore was released.
MBool EventObject::isSet() 
{
	return _set;
}
void EventObject::signalEventHandler()
{	
	_signalSem.semGive();
}
