blob: a0227ad51f08fdb5ce46d8a6f72b5cc91214be7f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 -2015 AIT, fortiss GmbH
* 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:
* 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_ */