blob: 829e35adb366200e0f930a707fd72766749dbfce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Waldemar Eisenmenger - initial API and implementation and/or initial documentation
*******************************************************************************/
#include "QX.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "QX_gen.cpp"
#endif
#include "criticalregion.h"
#include "resource.h"
DEFINE_FIRMWARE_FB(FORTE_QX, g_nStringIdQX)
const CStringDictionary::TStringId FORTE_QX::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdPARAMS, g_nStringIdOUT};
const CStringDictionary::TStringId FORTE_QX::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdBOOL};
const CStringDictionary::TStringId FORTE_QX::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
const CStringDictionary::TStringId FORTE_QX::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING};
const TDataIOID FORTE_QX::scmEIWith[] = {0, 1, scmWithListDelimiter, 0, 2, scmWithListDelimiter};
const TForteInt16 FORTE_QX::scmEIWithIndexes[] = {0, 3};
const CStringDictionary::TStringId FORTE_QX::scmEventInputNames[] = {g_nStringIdINIT, g_nStringIdREQ};
const TDataIOID FORTE_QX::scmEOWith[] = {0, 1, scmWithListDelimiter, 0, 1, scmWithListDelimiter};
const TForteInt16 FORTE_QX::scmEOWithIndexes[] = {0, 3};
const CStringDictionary::TStringId FORTE_QX::scmEventOutputNames[] = {g_nStringIdINITO, g_nStringIdCNF};
const SFBInterfaceSpec FORTE_QX::scmFBInterfaceSpec = {
2, scmEventInputNames, scmEIWith, scmEIWithIndexes,
2, scmEventOutputNames, scmEOWith, scmEOWithIndexes,
3, scmDataInputNames, scmDataInputTypeIds,
2, scmDataOutputNames, scmDataOutputTypeIds,
0, nullptr,
0, nullptr
};
FORTE_QX::FORTE_QX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) :
CProcessInterface(paContainer, &scmFBInterfaceSpec, paInstanceNameId),
var_conn_QO(var_QO),
var_conn_STATUS(var_STATUS),
conn_INITO(this, 0),
conn_CNF(this, 1),
conn_QI(nullptr),
conn_PARAMS(nullptr),
conn_OUT(nullptr),
conn_QO(this, 0, &var_conn_QO),
conn_STATUS(this, 1, &var_conn_STATUS) {
};
void FORTE_QX::setInitialValues() {
var_QI = 0_BOOL;
var_PARAMS = ""_STRING;
var_OUT = 0_BOOL;
var_QO = 0_BOOL;
var_STATUS = ""_STRING;
}
void FORTE_QX::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) {
switch(paEIID) {
case scmEventINITID:
if (var_QI) {
var_QO = CIEC_BOOL(CProcessInterface::initialise(false, paECET)); //initialise as output
} else {
var_QO = CIEC_BOOL(CProcessInterface::deinitialise());
}
sendOutputEvent(scmEventINITOID, paECET);
break;
case scmEventREQID:
if (var_QI) {
var_QO = CIEC_BOOL(CProcessInterface::write(var_OUT));
} else {
var_QO = false_BOOL;
}
sendOutputEvent(scmEventCNFID, paECET);
break;
}
}
void FORTE_QX::readInputData(TEventID paEIID) {
switch(paEIID) {
case scmEventINITID: {
readData(0, var_QI, conn_QI);
readData(1, var_PARAMS, conn_PARAMS);
break;
}
case scmEventREQID: {
readData(0, var_QI, conn_QI);
readData(2, var_OUT, conn_OUT);
break;
}
default:
break;
}
}
void FORTE_QX::writeOutputData(TEventID paEIID) {
switch(paEIID) {
case scmEventINITOID: {
writeData(0, var_QO, conn_QO);
writeData(1, var_STATUS, conn_STATUS);
break;
}
case scmEventCNFID: {
writeData(0, var_QO, conn_QO);
writeData(1, var_STATUS, conn_STATUS);
break;
}
default:
break;
}
}
CIEC_ANY *FORTE_QX::getDI(size_t paIndex) {
switch(paIndex) {
case 0: return &var_QI;
case 1: return &var_PARAMS;
case 2: return &var_OUT;
}
return nullptr;
}
CIEC_ANY *FORTE_QX::getDO(size_t paIndex) {
switch(paIndex) {
case 0: return &var_QO;
case 1: return &var_STATUS;
}
return nullptr;
}
CEventConnection *FORTE_QX::getEOConUnchecked(TPortId paIndex) {
switch(paIndex) {
case 0: return &conn_INITO;
case 1: return &conn_CNF;
}
return nullptr;
}
CDataConnection **FORTE_QX::getDIConUnchecked(TPortId paIndex) {
switch(paIndex) {
case 0: return &conn_QI;
case 1: return &conn_PARAMS;
case 2: return &conn_OUT;
}
return nullptr;
}
CDataConnection *FORTE_QX::getDOConUnchecked(TPortId paIndex) {
switch(paIndex) {
case 0: return &conn_QO;
case 1: return &conn_STATUS;
}
return nullptr;
}