blob: 892b290cae0439b02315b8d544aaf3c2c66db9c6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 - 2015 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Alois Zoitl, Matthias Plasch
* - initial API and implementation and/or initial documentation
* Alois Zoitl - introduced new CGenFB class for better handling generic FBs
*******************************************************************************/
#include "GEN_E_DEMUX.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "GEN_E_DEMUX_gen.cpp"
#endif
#include <stdio.h>
DEFINE_GENERIC_FIRMWARE_FB(GEN_E_DEMUX, g_nStringIdGEN_E_DEMUX)
const CStringDictionary::TStringId GEN_E_DEMUX::scm_anDataInputNames[] = { g_nStringIdK };
const CStringDictionary::TStringId GEN_E_DEMUX::scm_aunDIDataTypeIds[] = { g_nStringIdUINT };
const TForteInt16 GEN_E_DEMUX::scm_anEIWithIndexes[] = { 0 };
const TDataIOID GEN_E_DEMUX::scm_anEIWith[] = { 0, 255 };
const CStringDictionary::TStringId GEN_E_DEMUX::scm_anEventInputNames[] = { g_nStringIdEI };
GEN_E_DEMUX::GEN_E_DEMUX(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_anEventOutputNames(0){
}
GEN_E_DEMUX::~GEN_E_DEMUX(){
delete[] m_anEventOutputNames;
}
void GEN_E_DEMUX::executeEvent(int paEIID){
if(scm_nEventEIID == paEIID){
if(K() < m_pstInterfaceSpec->m_nNumEOs){
sendOutputEvent(K()); // the value of K corresponds to the output event ID;
}
}
}
bool GEN_E_DEMUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec &paInterfaceSpec){
const char *acPos = strrchr(paConfigString, '_');
if(0 != acPos){
++acPos;
if('D' != *acPos){
//we have an underscore and it is not the first underscore after E
paInterfaceSpec.m_nNumEOs = static_cast<TForteUInt8>(forte::core::util::strtoul(acPos, 0, 10));
if(paInterfaceSpec.m_nNumEOs < CFunctionBlock::scm_nMaxInterfaceEvents){
m_anEventOutputNames = new CStringDictionary::TStringId[paInterfaceSpec.m_nNumEOs];
generateGenericInterfacePointNameArray("EO", m_anEventOutputNames, paInterfaceSpec.m_nNumEOs);
paInterfaceSpec.m_nNumEIs = 1;
paInterfaceSpec.m_aunEINames = scm_anEventInputNames;
paInterfaceSpec.m_anEIWith = scm_anEIWith;
paInterfaceSpec.m_anEIWithIndexes = scm_anEIWithIndexes;
paInterfaceSpec.m_aunEONames = m_anEventOutputNames;
paInterfaceSpec.m_anEOWith = 0;
paInterfaceSpec.m_anEOWithIndexes = 0;
paInterfaceSpec.m_nNumDIs = 1;
paInterfaceSpec.m_aunDINames = scm_anDataInputNames;
paInterfaceSpec.m_aunDIDataTypeNames = scm_aunDIDataTypeIds;
paInterfaceSpec.m_nNumDOs = 0;
paInterfaceSpec.m_aunDONames = 0;
paInterfaceSpec.m_aunDODataTypeNames = 0;
return true;
}
}
}
return false;
}