/*******************************************************************************
*                                                                              *
* Société de Transports de Montréal.                                    	   *
* 2012 - 2013                                                                        *
*                                                                              *
* Projet Zones Tests                                                           *
*                                                                              *
*                                                                              *
*                                                                              *
*******************************************************************************/
/*
	Description:
	Classe instantiable d'une carte d'entrées PCI.  Dérivée de CPCIIOMgr, elle
	permet d'émuler les entrées de la carte PCI en réimplémentant les fonctions
	génériques de sa classe de base.  Les fonctions SetInputBufFlags et SetInputBufValue
	permettent au simulateur d'assigner les valeurs des entrées qui doivent être
	lues par le programme.
	
*/

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

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

#include "SimulatorPCIIO.h"

CSimulatorPCIIO::CSimulatorPCIIO()
{
	mSimPCIInputsBuffer = 0;
}

unsigned int CSimulatorPCIIO::GetInputs()
{
	unsigned int temp;

	mRdWrLock.lockForRead();	//lock for thread access
	temp = mSimPCIInputsBuffer;
	mRdWrLock.unlock();

	return temp;
}

unsigned int CSimulatorPCIIO::OpenPCIInterface()
{
	return PCIIO_OK;
}

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

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

unsigned int CSimulatorPCIIO::ClearInputBufFlags(unsigned int FlagMask)
{
	unsigned int temp;
	mRdWrLock.lockForWrite();
	mSimPCIInputsBuffer ^= FlagMask;
	temp = mSimPCIInputsBuffer;
	mRdWrLock.unlock();
	return temp;
}
