#ifndef __EVENT_H__
#define __EVENT_H__

#include "rtos_defs.h"
#include "target.h"

class Event
{
	public:
		enum Value { efOn = 1, efOff= 0 };     // prefix 'ef' means: "Event Flag"

	public:
		Event(Value init_val = efOff) : _processMap(0), _value(init_val) { }

		bool Wait(Timeout timeout = 0);
		void Signal();

		void Clear() {
			CriticalSection cs;
			_value = efOff;
		}

		void SignalISR();

		bool IsSignaled() {
			CriticalSection cs;
			if (_value == efOn)
				return true;
			else
				return false;
		}

	private:
		ProcessMap _processMap;
		Value      _value;
};

#endif // __EVENT_H__
