| /******************************************************************************* |
| * Copyright (c) 2014, 2023 fortiss GmbH, HR Agrartechnik 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, Monika Wenger - initial API and implementation and/or initial documentation |
| * Franz Hoepfinger - copied over IX to IE, and removed the IN |
| *******************************************************************************/ |
| #include "IE.h" |
| #ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP |
| #include "IE_gen.cpp" |
| #endif |
| |
| #include "criticalregion.h" |
| #include "resource.h" |
| |
| DEFINE_FIRMWARE_FB(FORTE_IE, g_nStringIdIE) |
| |
| const CStringDictionary::TStringId FORTE_IE::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdPARAMS}; |
| const CStringDictionary::TStringId FORTE_IE::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING}; |
| const CStringDictionary::TStringId FORTE_IE::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; |
| const CStringDictionary::TStringId FORTE_IE::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING}; |
| const TDataIOID FORTE_IE::scmEIWith[] = {0, 1, scmWithListDelimiter, 0, scmWithListDelimiter}; |
| const TForteInt16 FORTE_IE::scmEIWithIndexes[] = {0, 3}; |
| const CStringDictionary::TStringId FORTE_IE::scmEventInputNames[] = {g_nStringIdINIT, g_nStringIdREQ}; |
| const TDataIOID FORTE_IE::scmEOWith[] = {0, 1, scmWithListDelimiter, 0, 1, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; |
| const TForteInt16 FORTE_IE::scmEOWithIndexes[] = {0, 3, 6}; |
| const CStringDictionary::TStringId FORTE_IE::scmEventOutputNames[] = {g_nStringIdINITO, g_nStringIdCNF, g_nStringIdIND}; |
| const SFBInterfaceSpec FORTE_IE::scmFBInterfaceSpec = { |
| 2, scmEventInputNames, scmEIWith, scmEIWithIndexes, |
| 3, scmEventOutputNames, scmEOWith, scmEOWithIndexes, |
| 2, scmDataInputNames, scmDataInputTypeIds, |
| 2, scmDataOutputNames, scmDataOutputTypeIds, |
| 0, nullptr, |
| 0, nullptr |
| }; |
| |
| FORTE_IE::FORTE_IE(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_IND(this, 2), |
| conn_QI(nullptr), |
| conn_PARAMS(nullptr), |
| conn_QO(this, 0, &var_conn_QO), |
| conn_STATUS(this, 1, &var_conn_STATUS) { |
| }; |
| |
| void FORTE_IE::setInitialValues() { |
| var_QI = 0_BOOL; |
| var_PARAMS = ""_STRING; |
| var_QO = 0_BOOL; |
| var_STATUS = ""_STRING; |
| } |
| |
| void FORTE_IE::executeEvent(const TEventID paEIID, CEventChainExecutionThread *const paECET) { |
| switch(paEIID) { |
| case cgExternalEventID: |
| sendOutputEvent(scmEventINDID, paECET); |
| break; |
| case scmEventINITID: |
| if (var_QI) { |
| var_QO = CIEC_BOOL(CProcessInterface::initialise(true, paECET)); //initialise as input |
| } else { |
| var_QO = CIEC_BOOL(CProcessInterface::deinitialise()); |
| } |
| sendOutputEvent(scmEventINITOID, paECET); |
| break; |
| case scmEventREQID: |
| if (var_QI) { |
| var_QO = true_BOOL; |
| } else { |
| var_QO = false_BOOL; |
| } |
| sendOutputEvent(scmEventCNFID, paECET); |
| break; |
| } |
| } |
| |
| void FORTE_IE::readInputData(const 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); |
| break; |
| } |
| default: |
| break; |
| } |
| } |
| |
| void FORTE_IE::writeOutputData(const 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; |
| } |
| case scmEventINDID: { |
| writeData(0, var_QO, conn_QO); |
| writeData(1, var_STATUS, conn_STATUS); |
| break; |
| } |
| default: |
| break; |
| } |
| } |
| |
| CIEC_ANY *FORTE_IE::getDI(const size_t paIndex) { |
| switch(paIndex) { |
| case 0: return &var_QI; |
| case 1: return &var_PARAMS; |
| } |
| return nullptr; |
| } |
| |
| CIEC_ANY *FORTE_IE::getDO(const size_t paIndex) { |
| switch(paIndex) { |
| case 0: return &var_QO; |
| case 1: return &var_STATUS; |
| } |
| return nullptr; |
| } |
| |
| CEventConnection *FORTE_IE::getEOConUnchecked(const TPortId paIndex) { |
| switch(paIndex) { |
| case 0: return &conn_INITO; |
| case 1: return &conn_CNF; |
| case 2: return &conn_IND; |
| } |
| return nullptr; |
| } |
| |
| CDataConnection **FORTE_IE::getDIConUnchecked(const TPortId paIndex) { |
| switch(paIndex) { |
| case 0: return &conn_QI; |
| case 1: return &conn_PARAMS; |
| } |
| return nullptr; |
| } |
| |
| CDataConnection *FORTE_IE::getDOConUnchecked(const TPortId paIndex) { |
| switch(paIndex) { |
| case 0: return &conn_QO; |
| case 1: return &conn_STATUS; |
| } |
| return nullptr; |
| } |
| |