| /******************************************************************************* |
| * 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; |
| } |
| |