/*******************************************************************************
*                                                                              *
* Société de Transports de Montréal.                                    	   *
* 2012                                                                         *
*                                                                              *
* Projet Zones Tests                                                           *
*                                                                              *
*                                                                              *
*                                                                              *
*******************************************************************************/
/*
	Description:
	Classe instantiable d'un module simulé d'entrées externes.  Dérivée de CInputModule, elle
	permet d'émuler les entrées du module externe en réimplémentant les fonctions
	génériques de sa classe de base.  Le simulateur peut changer l'état des entrées
	par les fonctions Set...
	
*/

/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
	Verision d'origine.
	
### YYYYMMDD Description du besoin ou du bug
	Description du changement.
 */

/* ************************************************************************** */

#include "SimulatorInputModule.h"
#include "Angrignon.h"

CSimulatorInputModule::CSimulatorInputModule()
{
	mInputBuf = 0;
}

CSimulatorInputModule::~CSimulatorInputModule()
{

}

//unsigned int CSimulatorInputModule::GetInputs(unsigned char *DataBuf)
//{

//	memcpy(DataBuf,&mInputBuf,sizeof(mInputBuf));

//	return RET_OK;
//}

unsigned int CSimulatorInputModule::GetInputs()
{
	unsigned int temp;
	mRdWrLock.lockForRead();
	temp = mInputBuf;
	mRdWrLock.unlock();
	return temp;
}

unsigned int CSimulatorInputModule::GetInputBuf()
{
    unsigned int temp;
	mRdWrLock.lockForRead();
	temp = mInputBuf;
	mRdWrLock.unlock();
    return temp;
}

unsigned int CSimulatorInputModule::SetInputBufFlags(unsigned int FlagMask)
{
	unsigned int temp;
	mRdWrLock.lockForWrite();
	mInputBuf |= FlagMask;
	temp = mInputBuf;
	mRdWrLock.unlock();
	return temp;
}

unsigned int CSimulatorInputModule::SetInputBufValue(unsigned int value)
{
	unsigned int temp;
	mRdWrLock.lockForWrite();
	mInputBuf = value;
	temp = mInputBuf;
	mRdWrLock.unlock();
	return temp;
}

unsigned int CSimulatorInputModule::ClearInputBufFlags(unsigned int FlagMask)
{
	unsigned int temp;
	mRdWrLock.lockForWrite();
    mInputBuf &= ~FlagMask;
	temp = mInputBuf;
	mRdWrLock.unlock();
	return temp;
}
