#ifndef CMODBUSSLAVE_H #define CMODBUSSLAVE_H #include #include "ModbusBackend.h" #include #include "ModbusRepository.h" #include enum eModbusCCTrainTypes { MODBUS_CC_TRAIN_TYPE_MR63 = 63, MODBUS_CC_TRAIN_TYPE_MR73 = 73, MODBUS_CC_TRAIN_TYPE_MPM10 = 10, MODBUS_CC_TRAIN_TYPE_MAINTENANCE = 0, MODBUS_CC_TRAIN_TYPE_INVALID_ATS_OFFLINE = 98, MODBUS_CC_TRAIN_TYPE_INVALID_SERVICE_REBOOT = 97, MODBUS_CC_TRAIN_TYPE_INVALID_NOT_UPDATED = 99, MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE = 96, MODBUS_CC_TRAIN_TYPE_MAX_VALUE }; class CModbusCCMgr : public CModbusBackend { Q_OBJECT public: explicit CModbusCCMgr(CModbusRepository *Repo, int ModbusPort, int DevID); virtual ~CModbusCCMgr(); int StartModbusCCServer(); int CloseModbusCCServer(); bool IsModbusConnected(); static bool CheckForCCPartner(const int msTimeout, const int port); virtual void RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length); virtual void ModbusRequestException(quint8 ExceptionCode, quint8 FctCode); //Helper functions QList GetZT1TrainComposition(); QList GetZT2TrainComposition(); bool GetZT1InhibitionFlag(); int ClearZT1InhibitionFlag(); bool GetZT2InhibitionFlag(); int ClearZT2InhibitionFlag(); qint16 GetZT1TrainType(); qint16 GetZT2TrainType(); int SetZTWatchdogEnabled(bool Enabled); int SetActivatedITI(int ITI); private: QTcpServer *mModbusServer; int mModbusPort; QTimer *mZTWatchdogTimer, *mCCWatchdogTimer; quint16 mZTWatchdog; qint16 mCCWatchdogState; bool mCCLinkState; QDateTime *mLastDateTime; bool mZTWatchdogEnabled; int ResetCCRepository(); quint8 BCDToIntByte(const quint8 byte); quint16 BCDToIntWord(const quint16 word); signals: void RepoHasChanged(); void ModbusCCConnected(); void ModbusCCDisconnected(); void ModbusCCLinkLost(); void ModbusCCLinkRecovered(); void ModbusDateTimeReceived(QDateTime *DateTime); public slots: void NewModbusConnection(); void ConnectionLost(); void ModbusZTWatchdogTimeout(); void ModbusCCWatchdogTimeout(); }; #endif // CMODBUSSLAVE_H