179 lines
4.4 KiB
C++
179 lines
4.4 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2012 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Classe de base des définitions des différentes stations.
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### 20121210 JFM
|
|
Verision d'origine.
|
|
|
|
### YYYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
#include "Station.h"
|
|
|
|
CStation::CStation()
|
|
{
|
|
mZT1ApproachCDV = mZT1CDV = mZT1AlarmAutoAcquireCDV = mZT1SubsequentCDV = 0;
|
|
mZT2ApproachCDV = mZT2CDV = mZT2AlarmAutoAcquireCDV = 0;
|
|
mStationInputMasks.InputZT1_AltITIMask = 0;//Useful for Simulator only
|
|
}
|
|
CStation::~CStation()
|
|
{
|
|
for(int i = 0; i < mCDVList.size(); i++)
|
|
delete mCDVList.at(i);
|
|
|
|
mCDVList.clear();
|
|
}
|
|
|
|
unsigned int CStation::CheckStationKey(unsigned int ExternalInputs)
|
|
{
|
|
unsigned int key = ExternalInputs;
|
|
unsigned int checkkey = mStationPhysicalKey;
|
|
unsigned int mask = mStationInputMasks.InputStationIDMask;
|
|
key &= mask;
|
|
if(key != checkkey)
|
|
{
|
|
CEngLog::instance()->AddLogString(QString("").sprintf("Incohérence de la clef physique. Physique: 0x%x, Attendue: 0x%x",key,mStationPhysicalKey),1);
|
|
return RET_ERROR;
|
|
}
|
|
CEngLog::instance()->AddLogString(QString("").sprintf("Clef physique de la station cohérente: 0x%x",key),3);
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CStation::BuildCDVList()
|
|
{
|
|
if(BuildStationCDVList() == RET_OK)
|
|
{
|
|
return true;
|
|
}
|
|
mStationInputMasks.InputZT1_StdITIMask = mStationInputMasks.InputZT1ITIMask; //Useful for Simulator only
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
bool CStation::IsZT1ApproachCDVOccupied()
|
|
{
|
|
if(mZT1ApproachCDV)
|
|
return mZT1ApproachCDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT1ApproachPresent()
|
|
{
|
|
if(mZT1ApproachCDV == mZT1CDV)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CStation::IsZT1CDVOccupied()
|
|
{
|
|
|
|
if(mZT1CDV)
|
|
return mZT1CDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT1AnalysisFinished()
|
|
{
|
|
//Normally, the ZT1 analysis ends when the train quits the ZT1 CDV.
|
|
return !IsZT1CDVOccupied();
|
|
}
|
|
|
|
bool CStation::IsZT1SubsequentCDVOccupied()
|
|
{
|
|
if(mZT1SubsequentCDV)
|
|
return mZT1SubsequentCDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT2CDVOccupied()
|
|
{
|
|
if(mZT2CDV)
|
|
return mZT2CDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT1AlarmAutoAcquireCDVOccupied()
|
|
{
|
|
if(mZT1AlarmAutoAcquireCDV)
|
|
return mZT1AlarmAutoAcquireCDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT2AlarmAutoAcquireCDVOccupied()
|
|
{
|
|
if(mZT2AlarmAutoAcquireCDV)
|
|
return mZT2AlarmAutoAcquireCDV->IsOccupied();
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CStation::IsZT2ApproachCDVOccupied()
|
|
{
|
|
if(mZT2ApproachCDV)
|
|
return mZT2ApproachCDV->IsOccupied();
|
|
|
|
return false;
|
|
}
|
|
|
|
//NOTE: Reimplement this function in the station class if necessary (for instance, the
|
|
//Montmorency station has 2 ZT1 itineraries that change inputs masks according to
|
|
//which itinerary is commanded.
|
|
unsigned int CStation::UpdateStationMasks(unsigned int ExtInputData)
|
|
{
|
|
Q_UNUSED(ExtInputData)
|
|
mStationInputMasks.InputZT1_StdITIMask = mStationInputMasks.InputZT1ITIMask;
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CStation::UpdateCDVs(unsigned int ExtInputData)
|
|
{
|
|
//Update CDVs states.
|
|
for(int CDV = 0; CDV < mCDVList.size(); CDV++)
|
|
{
|
|
mCDVList.at(CDV)->ComputeCDVState(ExtInputData,mStationInputMasks.InputZT1ITIMask,mStationInputMasks.InputZT2ITIMask);
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
bool CStation::StationHasZT2()
|
|
{
|
|
return mStationHasZT2;
|
|
}
|
|
|
|
GenericInputMasks_t *CStation::GetInputMasks()
|
|
{
|
|
// qDebug("CStation get input masks");
|
|
return &mStationInputMasks;
|
|
}
|
|
|
|
GenericAnalogAcquisitionChannels_t *CStation::GetAnalogAcqChannels()
|
|
{
|
|
return &mAnalogAcqChannels;
|
|
}
|