blob: 5ae4ac69b92beb89a40cf8ab503082320b305af9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 - 2104 AIT, ACIN, fortiss
* 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 _EPLWRAPPER_H_
#define _EPLWRAPPER_H_
#include "ProcessImageMatrix.h"
#include "EplCNCallback.h"
#include <singlet.h>
#include <fortelist.h>
#include <forte_sync.h>
struct SEplMapping{
struct SEplMappingValues{
unsigned int m_nDataSize;
unsigned int m_nPiOffset;
unsigned int m_nBitOffset;
char* m_pchCurrentValue;
SEplMappingValues(unsigned int pa_nDataSize, unsigned int pa_nPiOffset, unsigned int pa_nBitOffset) :
m_nDataSize(pa_nDataSize), m_nPiOffset(pa_nPiOffset), m_nBitOffset(pa_nBitOffset){
m_pchCurrentValue = new char[pa_nDataSize];
for(unsigned int i = 0; i < pa_nDataSize; i++){
m_pchCurrentValue[i] = 0x00;
}
}
~SEplMappingValues(){
delete[] m_pchCurrentValue;
}
private:
SEplMappingValues(const SEplMappingValues &obj);
SEplMappingValues& operator=(const SEplMappingValues &obj);
};
typedef CSinglyLinkedList<SEplMappingValues*> TEplMappingList;
TEplMappingList m_lCurrentValues;
~SEplMapping(){
while(!m_lCurrentValues.isEmpty()){
delete *(TEplMappingList::Iterator) m_lCurrentValues.begin();
m_lCurrentValues.popFront();
}
}
};
// CEplStackWrapper implemented as class
// cppcheck-suppress noConstructor
class CEplStackWrapper{
DECLARE_SINGLETON(CEplStackWrapper)
;
public:
/*! \brief Blocking of real-time signals
*
* This must be called in main.cpp before the event execution thread is started
*/
static void eplMainInit();
int eplStackInit(char* pa_chXmlFile, char* pa_chCdcFile, char* pa_chEthDeviceName);
int eplStackShutdown(void);
CProcessImageMatrix* getProcessImageMatrixIn();
CProcessImageMatrix* getProcessImageMatrixOut();
char* getProcImageIn();
char* getProcImageOut();
void waitUntilOperational(bool pa_bWait);
void registerCallback(IEplCNCallback* pa_pCallback);
void executeAllCallbacks();
private:
char* allocProcImage(unsigned int n_bytes);
bool findMAC(const char* pa_pchUserMAC, char* pa_pchDevieName);
bool compareMACs(const char* pa_chMACa, const char* pa_chMACb);
CProcessImageMatrix m_oProcMatrixIn;
CProcessImageMatrix m_oProcMatrixOut;
unsigned int m_nProcInSize;
char* m_pchAppProcessImageIn_g;
unsigned int m_nProcOutSize;
char* m_pchAppProcessImageOut_g;
bool m_bWait;
CSinglyLinkedList<IEplCNCallback*> m_lCallbackList;
CSyncObject m_oSync;
};
#endif