blob: cb2bea8f8c5e173b563804b21001df0fa880a150 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT
* 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 - initial API and implementation and/or initial documentation
*******************************************************************************/
#ifndef _MODBUSCLIENTCONNECTION_H_
#define _MODBUSCLIENTCONNECTION_H_
#include "modbusconnection.h"
#include "modbustimedevent.h"
#include "fortelist.h"
class CModbusPoll;
namespace modbus_connection_event {
class CModbusConnectionEvent : public CModbusTimedEvent{
public:
explicit CModbusConnectionEvent(long pa_nReconnectInterval); //ReconnectInterval = 0 => only one connection try
~CModbusConnectionEvent(){
}
;
int executeEvent(modbus_t *pa_pModbusConn, void *pa_pRetVal);
};
}
class CModbusClientConnection : public CModbusConnection{
public:
explicit CModbusClientConnection(CModbusHandler* pa_modbusHandler);
~CModbusClientConnection();
int readData(uint8_t *pa_pData);
int writeData(uint16_t *pa_pData, unsigned int pa_nDataSize);
int connect();
void disconnect();
void addNewPoll(TForteUInt32 pa_nPollInterval, unsigned int pa_nFunctionCode, unsigned int pa_nStartAddress, unsigned int pa_nNrAddresses);
void addNewSend(unsigned int pa_nStartAddress, unsigned int pa_nNrAddresses);
void setSlaveId(unsigned int pa_nSlaveId);
protected:
virtual void run();
private:
void tryConnect();
void tryPolling();
struct SSendInformation {
unsigned int m_nStartAddress;
unsigned int m_nNrAddresses;
};
modbus_connection_event::CModbusConnectionEvent *m_pModbusConnEvent;
typedef CSinglyLinkedList<CModbusPoll*> TModbusPollList;
TModbusPollList m_lstPollList;
typedef CSinglyLinkedList<SSendInformation> TModbusSendList;
TModbusSendList m_lstSendList;
unsigned int m_nNrOfPolls;
unsigned int m_anRecvBuffPosition[100];
unsigned int m_nSlaveId;
uint8_t m_acRecvBuffer[cg_unIPLayerRecvBufferSize];
unsigned int m_unBufFillSize;
};
#endif