/*******************************************************************************
 * Copyright (c) 2019 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:
 *   Jose Cabral - initial implementation
 *******************************************************************************/

#ifndef _LOCALIZEDTEXT2LOCALIZEDTEXT_H_
#define _LOCALIZEDTEXT2LOCALIZEDTEXT_H_

#include <funcbloc.h>
#include <forte_localizedtext.h>

class FORTE_LocalizedText2LocalizedText: public CFunctionBlock{
  DECLARE_FIRMWARE_FB(FORTE_LocalizedText2LocalizedText)

private:
  static const CStringDictionary::TStringId scm_anDataInputNames[];
  static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
  CIEC_LocalizedText &IN() {
    return *static_cast<CIEC_LocalizedText*>(getDI(0));
  };

  static const CStringDictionary::TStringId scm_anDataOutputNames[];
  static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
  CIEC_LocalizedText &OUT() {
    return *static_cast<CIEC_LocalizedText*>(getDO(0));
  };

  static const TEventID scm_nEventREQID = 0;
  static const TForteInt16 scm_anEIWithIndexes[];
  static const TDataIOID scm_anEIWith[];
  static const CStringDictionary::TStringId scm_anEventInputNames[];

  static const TEventID scm_nEventCNFID = 0;
  static const TForteInt16 scm_anEOWithIndexes[];
  static const TDataIOID scm_anEOWith[];
  static const CStringDictionary::TStringId scm_anEventOutputNames[];

  static const SFBInterfaceSpec scm_stFBInterfaceSpec;

   FORTE_FB_DATA_ARRAY(1, 1, 1, 0);

  void executeEvent(int pa_nEIID);

public:
  FUNCTION_BLOCK_CTOR(FORTE_LocalizedText2LocalizedText){
  };

  virtual ~FORTE_LocalizedText2LocalizedText(){};

};

#endif //close the ifdef sequence from the beginning of the file

