blob: fe668892f311b49c95e0045ac408cad7e86fb502 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 -2015 AIT, 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:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
*******************************************************************************/
#ifndef OPCCOMLAYER_H_
#define OPCCOMLAYER_H_
#include <forte_config.h>
#include "comlayer.h"
#include "opcprocessvar.h"
class CIEC_ANY;
class COpcConnection;
struct Variant;
namespace forte {
namespace com_infra {
class COpcComLayer : public CComLayer{
public:
COpcComLayer(CComLayer* pa_poUpperLayer, CBaseCommFB* pa_poComFB);
virtual ~COpcComLayer();
EComResponse sendData(void *pa_pvData, unsigned int pa_unSize); // top interface, called from top
EComResponse recvData(const void *pa_pvData, unsigned int pa_unSize);
EComResponse processInterrupt();
private:
EComResponse openConnection(char *pa_acLayerParameter);
void closeConnection();
int addOpcItems();
void setOutputValue(CIEC_ANY *pa_pDataOut, Variant * pa_pValue);
void processClientParams(char* pa_acLayerParams);
void convertInputData(void *pa_pData, unsigned int pa_nSize);
unsigned int getInputValueSize(CIEC_ANY* pa_pData, Variant * pa_pNewValue);
template<typename T>
void getInputValue(void * pa_pData, Variant * pa_pNewValue);
const char* m_acHost;
const char* m_acServerName;
long m_nUpdateRate;
float m_nDeadBand;
const char* m_acOpcGroupName;
bool m_bLayerParamsOK;
COpcConnection *m_pOpcConnection;
typedef CSinglyLinkedList<COpcProcessVar*> TOpcProcessVarList;
TOpcProcessVarList m_lFBOutputVars;
TOpcProcessVarList m_lFBInputVars;
EComResponse m_eInterruptResp;
typedef CSinglyLinkedList<EComResponse> TComResponseList;
TComResponseList m_lComResponses;
CSyncObject m_oSync;
};
}
}
#endif /* OPCCOMLAYER_H_ */