ZT/sources/DiscreteTKTransport.cpp

787 lines
24 KiB
C++

#include "DiscreteTKTransport.h"
#include "EngLog.h"
#include "ZTLog.h"
#include <QTextStream>
#include "ZTData.h"
#include <QTextCodec>
CDiscreteTKTransport::CDiscreteTKTransport()
{
// mTKInterface = this;
mOutputMasks = 0;
mOutputModule = 0;
mMaintenanceMode = false;
mForceZT1Clear = false;
mForceZT2Clear = false;
mClearZT1AlarmMask = mClearZT2AlarmMask = 0;
mAN1State = mZT1CDVState = mAN2State = mZT2CDVState = false;
mZT1TKGeneratorState = TK_GENERATOR_ZT1_STANDBY_STATE;
mZT2TKGeneratorState = TK_GENERATOR_ZT2_STANDBY_STATE;
// mZT1TKBuffer.clear();
mZT1TKDataList.clear();
// mZT2TKBuffer.clear();
mZT2TKDataList.clear();
mZT1CurTKIndex = 0;
mZT2CurTKIndex = 0;
mZT1TKStateMachineTimer = new QTimer();
mZT1TKStateMachineTimer->setSingleShot(false);
connect(mZT1TKStateMachineTimer,SIGNAL(timeout()),this,SLOT(ExecZT1SM()));
mZT2TKStateMachineTimer = new QTimer();
mZT2TKStateMachineTimer->setSingleShot(false);
connect(mZT2TKStateMachineTimer,SIGNAL(timeout()),this,SLOT(ExecZT2SM()));
ResetAlarmCount();
}
CDiscreteTKTransport::~CDiscreteTKTransport()
{
delete mZT1TKStateMachineTimer;
delete mZT2TKStateMachineTimer;
}
void CDiscreteTKTransport::BindPointers(GenericOutputMasks_t *OutputMasks, COutputModule *OutputModule)
{
mOutputMasks = OutputMasks;
mOutputModule = OutputModule;
mClearZT1AlarmMask = mOutputMasks->OutputVP1Mask | mOutputMasks->OutputVP2Mask | mOutputMasks->OutputVP3Mask | mOutputMasks->OutputVP4Mask |\
mOutputMasks->OutputVP5Mask | mOutputMasks->OutputVP6Mask | mOutputMasks->OutputVF1Mask | mOutputMasks->OutputVF2Mask |\
mOutputMasks->OutputVF3Mask | mOutputMasks->OutputVF4Mask | mOutputMasks->OutputVF5Mask | mOutputMasks->OutputDPEMask |\
mOutputMasks->OutputDPIMask | mOutputMasks->OutputV00Mask | mOutputMasks->OutputDPGMask | mOutputMasks->OutputDFRMask |\
mOutputMasks->OutputPEQ1Mask;
mClearZT2AlarmMask = mOutputMasks->OutputWP1Mask | mOutputMasks->OutputWP2Mask | mOutputMasks->OutputWP3Mask | mOutputMasks->OutputWP4Mask |\
mOutputMasks->OutputWP5Mask | mOutputMasks->OutputWP6Mask | mOutputMasks->OutputDPI2Mask | mOutputMasks->OutputDPE2Mask |\
mOutputMasks->OutputV002Mask | mOutputMasks->OutputPEQ2Mask;
}
int CDiscreteTKTransport::AddNewZT1Detection(CZTDetectionData Detection)
{
mZT1TKDataList.append(Detection);
return RET_OK;
}
int CDiscreteTKTransport::AddNewZT2Detection(CZTDetectionData Detection)
{
mZT2TKDataList.append(Detection);
return RET_OK;
}
unsigned int CDiscreteTKTransport::BeginTKEmission()
{
if(IsTKProcessing())
return RET_ERROR;
// if(IsZT1TKProcessing() == false)
{
if(mZT1TKDataList.size() > 0)
{
if(GetDetectionConfig()->mZTDetectionConfig[DETECTION_FCT_ZT1].TKActive == false)
{
// mZT1TKBuffer.clear();
mZT1TKDataList.clear();
}
else if(mZT1TKGeneratorState == TK_GENERATOR_ZT1_STANDBY_STATE)
{
mZT1TKGeneratorState = TK_ZT1_GENERATOR_SHOW_TK_STATE;
mOutputModule->ClearOutputFlags(mClearZT1AlarmMask); //make shure no TK was displayed to PCC
mZT1TKStateMachineTimer->start(0);
}
}
}
// if(IsZT2TKProcessing() == false)
{
if(mZT2TKDataList.size() > 0)
{
if(GetDetectionConfig()->mZTDetectionConfig[DETECTION_FCT_ZT2].TKActive == false)
{
// mZT2TKBuffer.clear();
mZT2TKDataList.clear();
}
else if(mZT2TKGeneratorState == TK_GENERATOR_ZT2_STANDBY_STATE)
{
mZT2TKGeneratorState = TK_ZT2_GENERATOR_SHOW_TK_STATE;
mOutputModule->ClearOutputFlags(mClearZT2AlarmMask); //make shure no TK was displayed to PCC
mZT2TKStateMachineTimer->start(0);
}
}
}
return RET_OK;
}
unsigned int CDiscreteTKTransport::SetInputStates(bool AN1State, bool ZT1CDVState, bool AN2State, bool ZT2CDVState)
{
mAN1State = AN1State;
mZT1CDVState = ZT1CDVState;
mAN2State = AN2State;
mZT2CDVState = ZT2CDVState;
return RET_OK;
}
void CDiscreteTKTransport::ExecZT1SM()
{
switch(mZT1TKGeneratorState)
{
case TK_ZT1_GENERATOR_SHOW_TK_STATE:
{
if(mZT1CurTKIndex >= mZT1TKDataList.size())
{
mZT1TKGeneratorState = TK_GENERATOR_ZT1_STANDBY_STATE;
}
else
{
SendTKToCC(mZT1TKDataList.at(mZT1CurTKIndex++));
// mOutputModule->SetOutputFlags(mZT1TKBuffer.at(mZT1CurTKIndex++));
mZT1TKGeneratorState = TK_ZT1_GENERATOR_WAIT_FOR_AN1_STATE;
CZTLog::instance()->AddLogString("Émission d'une TK ZT1 au PCC",true);
LogTK(mZT1TKDataList.at(mZT1CurTKIndex-1));
if(mMaintenanceMode)
{
emit TKOutputStatesChanged(true,false);
}
}
break;
}
case TK_ZT1_GENERATOR_WAIT_FOR_AN1_STATE:
{
if(mAN1State == true || (mMaintenanceMode == true && mForceZT1Clear == true))
{
//clear the TK bits
// mOutputModule->ClearOutputFlags(mClearZT1AlarmMask);
ClearTK(ZT1_TYPE_ID);
mZT1RefTimer.start();
mZT1TKGeneratorState = TK_ZT1_GENERATOR_SHOW_ZERO_STATE;
if(mMaintenanceMode == true)
{
if(mForceZT1Clear == true)
{
mForceZT1Clear = false;
CZTLog::instance()->AddLogString("Acquitement manuel de la TK ZT1",true);
}
else
{
CZTLog::instance()->AddLogString("Acquitement AN1 détectée",true);
}
emit TKOutputStatesChanged(false,false);
}
else
{
CZTLog::instance()->AddLogString("Acquitement AN1 détectée",true);
}
}
else if(mZT1CDVState == false && mMaintenanceMode == false)
{
//Enter the auto acquitment TK generation mode...
//A TK is already output, make shure it's there long enough.
CZTLog::instance()->AddLogString("Libération du CDV de quai ZT1. Début de l'acquitement automatique",true);
mZT1RefTimer.start();
mZT1TKGeneratorState = TK_ZT1_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE;
}
break;
}
case TK_ZT1_GENERATOR_SHOW_ZERO_STATE:
{
if(mZT1RefTimer.elapsed() >= TK_GENERATOR_SHOW_ZERO_TIMEOUT)
{
mZT1TKGeneratorState = TK_ZT1_GENERATOR_SHOW_TK_STATE;
}
break;
}
case TK_ZT1_GENERATOR_AUTO_SHOW_TK_AUTO_STATE:
{
if(mZT1CurTKIndex >= mZT1TKDataList.size())
{
mZT1TKGeneratorState = TK_GENERATOR_ZT1_STANDBY_STATE;
}
else
{
//mOutputModule->SetOutputFlags(mZT1TKBuffer.at(mZT1CurTKIndex++));
SendTKToCC(mZT1TKDataList.at(mZT1CurTKIndex++));
mZT1RefTimer.start();
mZT1TKGeneratorState = TK_ZT1_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE;
CZTLog::instance()->AddLogString("Émission d'une TK ZT1 au PCC",true);
LogTK(mZT1TKDataList.at(mZT1CurTKIndex-1));
}
break;
}
case TK_ZT1_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE:
{
if(mZT1RefTimer.elapsed() >= TK_GENERATOR_AUTOMATIC_SHOW_TK_TIMEOUT)
{
//mOutputModule->ClearOutputFlags(mClearZT1AlarmMask);
ClearTK(ZT1_TYPE_ID);
mZT1RefTimer.start();
mZT1TKGeneratorState = TK_ZT1_GENERATOR_AUTO_SHOW_ZERO_STATE;
CZTLog::instance()->AddLogString("Acquitement automatique TK ZT1",true);
}
break;
}
case TK_ZT1_GENERATOR_AUTO_SHOW_ZERO_STATE:
{
if(mZT1RefTimer.elapsed() >= TK_GENERATOR_SHOW_ZERO_TIMEOUT)
{
//emit next TK
mZT1TKGeneratorState = TK_ZT1_GENERATOR_AUTO_SHOW_TK_AUTO_STATE;
}
break;
}
case TK_GENERATOR_ZT1_STANDBY_STATE:
{
// mZT1TKBuffer.clear();
mZT1TKDataList.clear();
mZT1CurTKIndex = 0;
mZT1TKStateMachineTimer->stop();
ResetAlarmCount();
//In maintenance mode, it is possible to have ZT2 events at the same time
//than ZT1. So if any ZT2 events are waiting in the qeue, send them...
if(mMaintenanceMode)
{
if(mZT2TKDataList.size() > 0)
{
BeginTKEmission();
}
}
break;
}
}
}
void CDiscreteTKTransport::ExecZT2SM()
{
switch(mZT2TKGeneratorState)
{
case TK_ZT2_GENERATOR_SHOW_TK_STATE:
{
if(mZT2CurTKIndex >= mZT2TKDataList.size())
{
mZT2TKGeneratorState = TK_GENERATOR_ZT2_STANDBY_STATE;
}
else
{
// mOutputModule->SetOutputFlags(mZT2TKBuffer.at(mZT2CurTKIndex++));
SendTKToCC(mZT2TKDataList.at(mZT2CurTKIndex++));
mZT2TKGeneratorState = TK_ZT2_GENERATOR_WAIT_FOR_AN2_STATE;
CZTLog::instance()->AddLogString("Émission d'une TK ZT2 au PCC",true);
LogTK(mZT2TKDataList.at(mZT2CurTKIndex-1));
if(mMaintenanceMode)
{
emit TKOutputStatesChanged(false,true);
}
}
break;
}
case TK_ZT2_GENERATOR_WAIT_FOR_AN2_STATE:
{
if(mAN2State == true || (mMaintenanceMode == true && mForceZT2Clear == true))
{
//clear the TK bits
// mOutputModule->ClearOutputFlags(mClearZT2AlarmMask);
ClearTK(ZT2_TYPE_ID);
mZT2RefTimer.start();
mZT2TKGeneratorState = TK_ZT2_GENERATOR_SHOW_ZERO_STATE;
if(mMaintenanceMode == true)
{
if(mForceZT2Clear == true)
{
mForceZT2Clear = false;
CZTLog::instance()->AddLogString("Acquitement manuel de la TK ZT2",true);
}
else
{
CZTLog::instance()->AddLogString("Acquitement AN2 détectée",true);
}
emit TKOutputStatesChanged(false,false);
}
else
{
CZTLog::instance()->AddLogString("Acquitement AN2 détectée",true);
}
}
else if(mZT2CDVState == false && mMaintenanceMode == false)
{
//Enter the auto acquitment TK generation mode...
//A TK is already output, make shure it's there long enough.
CZTLog::instance()->AddLogString("Libération du CDV ZT2. Début de l'acquitement automatique",true);
mZT2RefTimer.start();
mZT2TKGeneratorState = TK_ZT2_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE;
}
break;
}
case TK_ZT2_GENERATOR_SHOW_ZERO_STATE:
{
if(mZT2RefTimer.elapsed() >= TK_GENERATOR_SHOW_ZERO_TIMEOUT)
{
mZT2TKGeneratorState = TK_ZT2_GENERATOR_SHOW_TK_STATE;
}
break;
}
case TK_ZT2_GENERATOR_AUTO_SHOW_TK_AUTO_STATE:
{
if(mZT2CurTKIndex >= mZT2TKDataList.size())
{
mZT2TKGeneratorState = TK_GENERATOR_ZT2_STANDBY_STATE;
}
else
{
// mOutputModule->SetOutputFlags(mZT2TKBuffer.at(mZT2CurTKIndex++));
SendTKToCC(mZT2TKDataList.at(mZT2CurTKIndex++));
mZT2RefTimer.start();
mZT2TKGeneratorState = TK_ZT2_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE;
CZTLog::instance()->AddLogString("Émission d'une TK ZT2 au PCC",true);
//LogTK(mZT2TKBuffer.at(mZT2CurTKIndex-1));
LogTK(mZT2TKDataList.at(mZT2CurTKIndex-1));
}
break;
}
case TK_ZT2_GENERATOR_AUTO_WAIT_FOR_TIMEOUT_STATE:
{
if(mZT2RefTimer.elapsed() >= TK_GENERATOR_AUTOMATIC_SHOW_TK_TIMEOUT)
{
//mOutputModule->ClearOutputFlags(mClearZT2AlarmMask);
ClearTK(ZT2_TYPE_ID);
mZT2RefTimer.start();
mZT2TKGeneratorState = TK_ZT2_GENERATOR_AUTO_SHOW_ZERO_STATE;
CZTLog::instance()->AddLogString("Acquitement automatique ZT2",true);
}
break;
}
case TK_ZT2_GENERATOR_AUTO_SHOW_ZERO_STATE:
{
if(mZT2RefTimer.elapsed() >= TK_GENERATOR_SHOW_ZERO_TIMEOUT)
{
//emit next TK
mZT2TKGeneratorState = TK_ZT2_GENERATOR_AUTO_SHOW_TK_AUTO_STATE;
}
break;
}
case TK_GENERATOR_ZT2_STANDBY_STATE:
{
// mZT2TKBuffer.clear();
mZT2TKDataList.clear();
mZT2CurTKIndex = 0;
mZT2TKStateMachineTimer->stop();
ResetAlarmCount();
//In maintenance mode, it is possible to have ZT2 events at the same time
//than ZT1. So if any ZT1 events are waiting in the qeue, send them...
if(mMaintenanceMode)
{
if(mZT1TKDataList.size() > 0)
{
BeginTKEmission();
}
}
break;
}
}
}
quint32 CDiscreteTKTransport::IntegerToBCDZT1(quint32 Value)
{
quint32 BCD = 0;
if(Value >= 20)
{
BCD |= mOutputMasks->OutputVP6Mask;
Value -= 20;
}
if(Value >= 10)
{
BCD |= mOutputMasks->OutputVP5Mask;
Value -= 10;
}
if((Value & 1) != 0)
BCD |= mOutputMasks->OutputVP1Mask;
if((Value & 2) != 0)
BCD |= mOutputMasks->OutputVP2Mask;
if((Value & 4) != 0)
BCD |= mOutputMasks->OutputVP3Mask;
if((Value & 8) != 0)
BCD |= mOutputMasks->OutputVP4Mask;
return BCD;
}
quint32 CDiscreteTKTransport::IntegerToBCDFN(quint32 Value)
{
quint32 BCD = 0;
if(Value >= 10)
{
BCD |= mOutputMasks->OutputVF5Mask;
Value -= 10;
}
if((Value & 1) != 0)
BCD |= mOutputMasks->OutputVF1Mask;
if((Value & 2) != 0)
BCD |= mOutputMasks->OutputVF2Mask;
if((Value & 4) != 0)
BCD |= mOutputMasks->OutputVF3Mask;
if((Value & 8) != 0)
BCD |= mOutputMasks->OutputVF4Mask;
return BCD;
}
quint32 CDiscreteTKTransport::IntegerToBCDZT2(quint32 Value)
{
quint32 BCD = 0;
if(Value >= 20)
{
BCD |= mOutputMasks->OutputWP6Mask;
Value -= 20;
}
if(Value >= 10)
{
BCD |= mOutputMasks->OutputWP5Mask;
Value -= 10;
}
if((Value & 1) != 0)
BCD |= mOutputMasks->OutputWP1Mask;
if((Value & 2) != 0)
BCD |= mOutputMasks->OutputWP2Mask;
if((Value & 4) != 0)
BCD |= mOutputMasks->OutputWP3Mask;
if((Value & 8) != 0)
BCD |= mOutputMasks->OutputWP4Mask;
return BCD;
}
unsigned int CDiscreteTKTransport::CancelAllTK()
{
mOutputModule->ClearOutputFlags(mClearZT1AlarmMask);
mOutputModule->ClearOutputFlags(mClearZT2AlarmMask);
mZT1TKGeneratorState = TK_GENERATOR_ZT1_STANDBY_STATE;
mZT2TKGeneratorState = TK_GENERATOR_ZT2_STANDBY_STATE;
// mZT1TKBuffer.clear();
mZT1TKDataList.clear();
// mZT2TKBuffer.clear();
mZT2TKDataList.clear();
//exec the SM once
mZT1TKStateMachineTimer->start();
mZT2TKStateMachineTimer->start();
ResetAlarmCount();
return RET_OK;
}
unsigned int CDiscreteTKTransport::CancelMaintenanceCurrentTK()
{
if(mZT1TKGeneratorState == TK_ZT1_GENERATOR_WAIT_FOR_AN1_STATE)
{
mForceZT1Clear = true;
return RET_OK;
}
else if(mZT2TKGeneratorState == TK_ZT2_GENERATOR_WAIT_FOR_AN2_STATE)
{
mForceZT2Clear = true;
return RET_OK;
}
return RET_ERROR;
}
unsigned int CDiscreteTKTransport::ExitMaintenance()
{
// if(mMaintenanceMode == false)
// {
// return RET_ERROR;
// }
mMaintenanceMode = false;
mForceZT1Clear = false;
mForceZT2Clear = false;
CancelAllTK();
return RET_OK;
}
unsigned int CDiscreteTKTransport::EnterMaintenance()
{
if(IsTKProcessing())
{
return RET_ERROR;
}
CancelAllTK();
mMaintenanceMode = true;
mForceZT1Clear = false;
mForceZT2Clear = false;
return RET_OK;
}
bool CDiscreteTKTransport::IsTKProcessing()
{
if(mZT1TKGeneratorState == TK_GENERATOR_ZT1_STANDBY_STATE &&
mZT2TKGeneratorState == TK_GENERATOR_ZT2_STANDBY_STATE)
{
return false;
}
return true;
}
bool CDiscreteTKTransport::IsZT1TKProcessing()
{
if(mZT1TKGeneratorState == TK_GENERATOR_ZT1_STANDBY_STATE)
{
return false;
}
return true;
}
bool CDiscreteTKTransport::IsZT2TKProcessing()
{
if(mZT2TKGeneratorState == TK_GENERATOR_ZT2_STANDBY_STATE)
{
return false;
}
return true;
}
//void CDiscreteTKTransport::LogTK(CZTDetectionData DetectionData)
//{
// QString str = "TK envoyée: ";
// QTextStream stream(&str);
// stream.setCodec("UTF-8");
// stream << QString::fromUtf8(CZTData::GetErrorString(DetectionData.mDetectionID));
// stream << " | Rang: " << DetectionData.mRank;
// CZTLog::instance()->AddLogString(str,true);
//}
//void CDiscreteTKTransport::LogTK(quint32 Value)
//{
// QString str = "Output: ";
// QTextStream stream(&str);
// stream << "VP1 " <<
// "VP2 " <<
// "VP3 " <<
// "VP4 " <<
// "VP5 " <<
// "VP6 " <<
// "VF1 " <<
// "VF2 " <<
// "VF3 " <<
// "VF4 " <<
// "VF5 " <<
// "WP1 " <<
// "WP2 " <<
// "WP3 " <<
// "WP4 " <<
// "WP5 " <<
// "WP6 " <<
// "DPE " <<
// "DPI " <<
// "V00 " <<
// "DPG " <<
// "DFR " <<
// "RF " <<
// "RF2 " <<
// "VEL " <<
// "VEL2 " <<
// "DPI2 " <<
// "DPE2 " <<
// "V002 " <<
// "PEQ1 " <<
// "PEQ2 " <<
// "WDOG ";
// CZTLog::instance()->AddLogString(str,true);
// str.clear();
// stream << " " <<
// " " << ((Value & mOutputMasks->OutputVP1Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVP2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVP3Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVP4Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVP5Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVP6Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVF1Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVF2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVF3Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVF4Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVF5Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP1Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP3Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP4Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP5Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWP6Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDPEMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDPIMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputV00Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDPGMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDFRMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputRFMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputRF2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVELMask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputVEL2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDPI2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputDPE2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputV002Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputPEQ1Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputPEQ2Mask) != 0) << " " <<
// " " << ((Value & mOutputMasks->OutputWatchdogMask) != 0) << " ";
// CZTLog::instance()->AddLogString(str,true);
//}
int CDiscreteTKTransport::SendTKToCC(CZTDetectionData TKData)
{
quint32 TKFlags = 0;
quint32 Rank = TKData.mRank;
switch(TKData.mDetectionID)
{
case DETECTION_MAGNETIC_SENSOR_COUNT:
{
TKFlags |= mOutputMasks->OutputV00Mask;
TKFlags |= IntegerToBCDZT1(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_FN_DETECTION:
{
TKFlags |= mOutputMasks->OutputDFRMask;
TKFlags |= IntegerToBCDFN(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_PG_DETECTION:
{
TKFlags |= mOutputMasks->OutputDPGMask;
TKFlags |= IntegerToBCDZT1(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_PPI_DETECTION:
{
TKFlags |= mOutputMasks->OutputDPIMask;
TKFlags |= IntegerToBCDZT1(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_PPE_DETECTION:
{
TKFlags |= mOutputMasks->OutputDPEMask;
TKFlags |= IntegerToBCDZT1(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_PEQ1_DETECTION:
{
TKFlags |= mOutputMasks->OutputPEQ1Mask;
TKFlags |= IntegerToBCDZT1(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_PEQ2_DETECTION:
{
TKFlags |= mOutputMasks->OutputPEQ2Mask;
TKFlags |= IntegerToBCDZT2(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_ZT2_MAGNETIC_SENSOR_COUNT:
{
TKFlags |= mOutputMasks->OutputV002Mask;
TKFlags |= IntegerToBCDZT2(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_ZT2_PPI_DETECTION:
{
TKFlags |= mOutputMasks->OutputDPI2Mask;
TKFlags |= IntegerToBCDZT2(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
case DETECTION_ZT2_PPE_DETECTION:
{
TKFlags |= mOutputMasks->OutputDPE2Mask;
TKFlags |= IntegerToBCDZT2(Rank);
mOutputModule->SetOutputFlags(TKFlags);
break;
}
}
return RET_OK;
}
int CDiscreteTKTransport::ClearTK(int ZT)
{
if(ZT == ZT1_TYPE_ID)
{
mOutputModule->ClearOutputFlags(mClearZT1AlarmMask);
}
else if(ZT == ZT2_TYPE_ID)
{
mOutputModule->ClearOutputFlags(mClearZT2AlarmMask);
}
else
{
return RET_ERROR;
}
return RET_OK;
}