diff --git a/Sources/EthernetNetworkServer.cpp b/Sources/EthernetNetworkServer.cpp index 8195598..34fd9ab 100644 --- a/Sources/EthernetNetworkServer.cpp +++ b/Sources/EthernetNetworkServer.cpp @@ -121,75 +121,151 @@ void CEthernetNetworkServer::DeviceSocketDataAvail() DeviceID = Data.at(0); DeviceAddress = Data.at(1); - if(DeviceID == ID_SMS_CLIENT) + int Result = RES_CREATION_FAILED; + switch(DeviceID) { - if(mDevicesMgrHandle != 0) + case ID_SMS_CLIENT: { if(mDevicesMgrHandle->CreateNewSMSDevice(DeviceAddress,(CAbstractNetworkCommIF*)NetworkIF) == RET_OK) { - //All OK. - - //Redirect signals. - DeviceSocket->disconnect(); - // disconnect(DeviceSocket,SIGNAL(readyRead()),this,SLOT(DeviceSocketDataAvail())); - connect(DeviceSocket,SIGNAL(readyRead()),NetworkIF,SLOT(SocketDataAvailable())); - connect(DeviceSocket,SIGNAL(disconnected()),NetworkIF,SLOT(SocketDisconnected())); - connect(NetworkIF,SIGNAL(EthernetInterfaceSocketDisconnected(CNetworkDevice*)),mDevicesMgrHandle,SLOT(EthernetNetworkDeviceDisconnected(CNetworkDevice*))); - - //Inform device that it is connected - QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_SET_DEVICE_INFO_ACK,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); - DeviceSocket->write(Frame); + Result = RES_CREATION_SUCCESS; qDebug("Created new SMS device"); } else { + Result = RES_CREATION_FAILED; qDebug("Could not create SMS device in ethernet server"); - QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_CONNECTION_REFUSED,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); - DeviceSocket->write(Frame); - CloseSocket = true; } + break; } - else - { - qDebug("Invalid DevicesMgrHandle in ethernet server"); - CloseSocket = true; - } - } - if(DeviceID == ID_SPRINKLER_DEVICE) - { - if(mDevicesMgrHandle != 0) + case ID_SPRINKLER_DEVICE: { if(mDevicesMgrHandle->CreateNewSprinklerDevice(DeviceAddress,(CAbstractNetworkCommIF*)NetworkIF) == RET_OK) { - //All OK. - - //Redirect signals. - DeviceSocket->disconnect(); - // disconnect(DeviceSocket,SIGNAL(readyRead()),this,SLOT(DeviceSocketDataAvail())); - connect(DeviceSocket,SIGNAL(readyRead()),NetworkIF,SLOT(SocketDataAvailable())); - connect(DeviceSocket,SIGNAL(disconnected()),NetworkIF,SLOT(SocketDisconnected())); - connect(NetworkIF,SIGNAL(EthernetInterfaceSocketDisconnected(CNetworkDevice*)),mDevicesMgrHandle,SLOT(EthernetNetworkDeviceDisconnected(CNetworkDevice*))); - - //Inform device that it is connected - QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_SET_DEVICE_INFO_ACK,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); - DeviceSocket->write(Frame); + Result = RES_CREATION_SUCCESS; qDebug("Created new Sprinkler device"); } else { + Result = RES_CREATION_FAILED; qDebug("Could not create Sprinkler device in ethernet server"); - QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_CONNECTION_REFUSED,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); - DeviceSocket->write(Frame); - CloseSocket = true; } + break; } - else + case ID_SPRINKLER_INTERFACE: { + if(mDevicesMgrHandle->CreateNewSprinklerInterface(DeviceAddress,(CAbstractNetworkCommIF*)NetworkIF) == RET_OK) + { + Result = RES_CREATION_SUCCESS; + qDebug("Created new Sprinkler Interface"); + } + else + { + Result = RES_CREATION_FAILED; + qDebug("Could not create Sprinkler Interface in ethernet server"); + } + break; + } + default: + { + Result = RES_CREATION_UNKNOWN_DEVICE; qDebug("Invalid DevicesMgrHandle in ethernet server"); CloseSocket = true; + break; } } + if(Result == RES_CREATION_SUCCESS) + { + //All OK. + + //Redirect signals. + DeviceSocket->disconnect(); + connect(DeviceSocket,SIGNAL(readyRead()),NetworkIF,SLOT(SocketDataAvailable())); + connect(DeviceSocket,SIGNAL(disconnected()),NetworkIF,SLOT(SocketDisconnected())); + connect(NetworkIF,SIGNAL(EthernetInterfaceSocketDisconnected(CNetworkDevice*)),mDevicesMgrHandle,SLOT(EthernetNetworkDeviceDisconnected(CNetworkDevice*))); + + //Inform device that it is connected + QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_SET_DEVICE_INFO_ACK,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); + DeviceSocket->write(Frame); + } + else if(Result == RES_CREATION_FAILED) + { + QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_CONNECTION_REFUSED,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); + DeviceSocket->write(Frame); + CloseSocket = true; + } + + +// if(DeviceID == ID_SMS_CLIENT) +// { +// if(mDevicesMgrHandle != 0) +// { +// if(mDevicesMgrHandle->CreateNewSMSDevice(DeviceAddress,(CAbstractNetworkCommIF*)NetworkIF) == RET_OK) +// { +// //All OK. + +// //Redirect signals. +// DeviceSocket->disconnect(); +// // disconnect(DeviceSocket,SIGNAL(readyRead()),this,SLOT(DeviceSocketDataAvail())); +// connect(DeviceSocket,SIGNAL(readyRead()),NetworkIF,SLOT(SocketDataAvailable())); +// connect(DeviceSocket,SIGNAL(disconnected()),NetworkIF,SLOT(SocketDisconnected())); +// connect(NetworkIF,SIGNAL(EthernetInterfaceSocketDisconnected(CNetworkDevice*)),mDevicesMgrHandle,SLOT(EthernetNetworkDeviceDisconnected(CNetworkDevice*))); + +// //Inform device that it is connected +// QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_SET_DEVICE_INFO_ACK,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); +// DeviceSocket->write(Frame); +// qDebug("Created new SMS device"); +// } +// else +// { +// qDebug("Could not create SMS device in ethernet server"); +// QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_CONNECTION_REFUSED,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); +// DeviceSocket->write(Frame); +// CloseSocket = true; +// } +// } +// else +// { +// qDebug("Invalid DevicesMgrHandle in ethernet server"); +// CloseSocket = true; +// } +// } +// else if(DeviceID == ID_SPRINKLER_DEVICE) +// { +// if(mDevicesMgrHandle != 0) +// { +// if(mDevicesMgrHandle->CreateNewSprinklerDevice(DeviceAddress,(CAbstractNetworkCommIF*)NetworkIF) == RET_OK) +// { +// //All OK. + +// //Redirect signals. +// DeviceSocket->disconnect(); +// // disconnect(DeviceSocket,SIGNAL(readyRead()),this,SLOT(DeviceSocketDataAvail())); +// connect(DeviceSocket,SIGNAL(readyRead()),NetworkIF,SLOT(SocketDataAvailable())); +// connect(DeviceSocket,SIGNAL(disconnected()),NetworkIF,SLOT(SocketDisconnected())); +// connect(NetworkIF,SIGNAL(EthernetInterfaceSocketDisconnected(CNetworkDevice*)),mDevicesMgrHandle,SLOT(EthernetNetworkDeviceDisconnected(CNetworkDevice*))); + +// //Inform device that it is connected +// QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_SET_DEVICE_INFO_ACK,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); +// DeviceSocket->write(Frame); +// qDebug("Created new Sprinkler device"); +// } +// else +// { +// qDebug("Could not create Sprinkler device in ethernet server"); +// QByteArray Frame = GetTxPacket((unsigned char)ETH_NETWK_CONNECTION_REFUSED,0,0,0,DeviceAddress,(unsigned char)ID_ETHERNET_VIRTUAL); +// DeviceSocket->write(Frame); +// CloseSocket = true; +// } +// } +// else +// { +// qDebug("Invalid DevicesMgrHandle in ethernet server"); +// CloseSocket = true; +// } +// } + // if(IsDeviceRegistered(DeviceID) == true) // { // DeviceConnection->mConnectedDevice->mDeviceID = (int)DeviceID; diff --git a/Sources/EthernetNetworkServer.h b/Sources/EthernetNetworkServer.h index 866e6fc..17d75f8 100644 --- a/Sources/EthernetNetworkServer.h +++ b/Sources/EthernetNetworkServer.h @@ -25,6 +25,14 @@ class CEthernetNetworkServer : public QObject, CNetworkProtocol { Q_OBJECT public: + + enum eDeviceCreationResult + { + RES_CREATION_FAILED, + RES_CREATION_SUCCESS, + RES_CREATION_UNKNOWN_DEVICE + }; + CEthernetNetworkServer(); ~CEthernetNetworkServer(); diff --git a/Sources/MasterCtrl.cpp b/Sources/MasterCtrl.cpp index d86d137..e1caa4e 100644 --- a/Sources/MasterCtrl.cpp +++ b/Sources/MasterCtrl.cpp @@ -19,6 +19,7 @@ CMasterCtrl::CMasterCtrl() mEthernetNetworkServer = new CEthernetNetworkServer; mNetworkDevicesManager = new CNetworkDevicesMgr; mContactsRepository = new CContactRepository; + mSprinklerManager = new CSprinklerMgr; // mMasterCtrlSettings = new CSettings; } @@ -35,6 +36,7 @@ CMasterCtrl::~CMasterCtrl() delete mNetworkDevicesManager; delete mEthernetNetworkServer; delete mContactsRepository; + delete mSprinklerManager; // delete mMasterCtrlSettings; } @@ -58,10 +60,15 @@ void CMasterCtrl::Start() mNetworkDevicesManager->mVoipMSInterfaceHandle = mVoipMsSMSClient; mNetworkDevicesManager->mContactRepositoryHandle = mContactsRepository; mNetworkDevicesManager->mProgramHandle = this; + mNetworkDevicesManager->mSprinklerMgrHandle = mSprinklerManager; + mEthernetNetworkServer->mDevicesMgrHandle = mNetworkDevicesManager; mEthernetNetworkServer->mProgramHandle = this; + mVoipMsSMSClient->mProgramHandle = this; + mSprinklerManager->mProgramHandle = this; + connect(mVoipMsSMSClient,SIGNAL(DIDSFetched(QStringList)),mSettingsWindow,SLOT(DIDsListFetched(QStringList))); mAVReceiverDevice->ConnectToReceiver(); diff --git a/Sources/MasterCtrl.h b/Sources/MasterCtrl.h index 780829e..90174d7 100644 --- a/Sources/MasterCtrl.h +++ b/Sources/MasterCtrl.h @@ -11,6 +11,7 @@ #include "NetworkDevicesMgr.h" #include "EthernetNetworkServer.h" #include "ContactRepository.h" +#include "SprinklerMgr.h" //#include "AppIconWidget.h" class CMasterCtrl : public QObject @@ -30,6 +31,7 @@ public: CNetworkDevicesMgr *mNetworkDevicesManager; CEthernetNetworkServer *mEthernetNetworkServer; CContactRepository *mContactsRepository; + CSprinklerMgr *mSprinklerManager; // CAppIconWidget mAppWidget; diff --git a/Sources/NetworkDevicesMgr.cpp b/Sources/NetworkDevicesMgr.cpp index ee17126..2a11fc4 100644 --- a/Sources/NetworkDevicesMgr.cpp +++ b/Sources/NetworkDevicesMgr.cpp @@ -10,6 +10,7 @@ CNetworkDevicesMgr::CNetworkDevicesMgr() { mVoipMSInterfaceHandle = 0; mProgramHandle = 0; + mSprinklerMgrHandle = 0; } CNetworkDevicesMgr::~CNetworkDevicesMgr() @@ -50,12 +51,30 @@ int CNetworkDevicesMgr::CreateNewSMSDevice(int Address, CAbstractNetworkCommIF * int CNetworkDevicesMgr::CreateNewSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkIF) { - CSprinklerDevice *SprinklerDevice = new CSprinklerDevice(Address,NetworkIF); + if(mSprinklerMgrHandle == 0) + { + return RET_ERROR; + } + + CSprinklerDevice *SprinklerDevice = new CSprinklerDevice(Address,NetworkIF,mSprinklerMgrHandle); mNetworkDevicesList.append((CNetworkDevice*)SprinklerDevice); return RET_OK; } +int CNetworkDevicesMgr::CreateNewSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkIF) +{ + if(mSprinklerMgrHandle == 0) + { + return RET_ERROR; + } + + CSprinklerInterface *SprinklerInterface = new CSprinklerInterface(Address,NetworkIF,mSprinklerMgrHandle); + mNetworkDevicesList.append((CNetworkDevice*)SprinklerInterface); + + return RET_OK; +} + void CNetworkDevicesMgr::EthernetNetworkDeviceDisconnected(CNetworkDevice *Device) { qDebug("Device disconnected. ID: %d, Address: %d",Device->GetDeviceID(),Device->GetDeviceAddress()); @@ -118,4 +137,6 @@ int CNetworkDevicesMgr::NewSMSMessagesReceived(QList NewMessages) SMSDevice->SendNewSMSReceived(NewMessages); } } + + return RET_OK; } diff --git a/Sources/NetworkDevicesMgr.h b/Sources/NetworkDevicesMgr.h index 51b6af6..117f2d9 100644 --- a/Sources/NetworkDevicesMgr.h +++ b/Sources/NetworkDevicesMgr.h @@ -5,6 +5,7 @@ #include "AVReceiverDevice.h" #include "SMSDevice.h" #include "SprinklerDevice.h" +#include "SprinklerInterface.h" #include "AbstractNetworkInterface.h" #include "QList" #include @@ -12,6 +13,8 @@ class CVoipMsSMSClient; class CMasterCtrl; class CContactRepository; +class CSprinklerMgr; + class CNetworkDevicesMgr: public QObject { Q_OBJECT @@ -24,6 +27,7 @@ public: int CreateNewSMSDevice(int Address,CAbstractNetworkCommIF *NetworkIF); int CreateNewSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkIF); + int CreateNewSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkIF); int FindDeviceByPtr(CNetworkDevice *Device); @@ -33,6 +37,7 @@ public: CVoipMsSMSClient *mVoipMSInterfaceHandle; CContactRepository *mContactRepositoryHandle; CMasterCtrl *mProgramHandle; + CSprinklerMgr *mSprinklerMgrHandle; int NewSMSMessagesReceived(QList NewMessages); diff --git a/Sources/Sprinkler/SprinklerDevice.cpp b/Sources/Sprinkler/SprinklerDevice.cpp index 887d27b..7c0d127 100644 --- a/Sources/Sprinkler/SprinklerDevice.cpp +++ b/Sources/Sprinkler/SprinklerDevice.cpp @@ -1,12 +1,13 @@ #include "SprinklerDevice.h" #include "ProtocolDefs.h" #include +#include "SprinklerMgr.h" -CSprinklerDevice::CSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkInterface): +CSprinklerDevice::CSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkInterface, CSprinklerMgr *SprinklerMgr): CNetworkDevice(ID_SPRINKLER_DEVICE,Address,NetworkInterface) { - + mSprinklerMgr = SprinklerMgr; } CSprinklerDevice::~CSprinklerDevice() diff --git a/Sources/Sprinkler/SprinklerDevice.h b/Sources/Sprinkler/SprinklerDevice.h index 40d3dfe..265364d 100644 --- a/Sources/Sprinkler/SprinklerDevice.h +++ b/Sources/Sprinkler/SprinklerDevice.h @@ -4,16 +4,20 @@ #include "GlobalDefine.h" #include "NetworkDevice.h" +class CSprinklerMgr; class CSprinklerDevice: public QObject, public CNetworkDevice { Q_OBJECT public: - CSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkInterface); + CSprinklerDevice(int Address, CAbstractNetworkCommIF *NetworkInterface, CSprinklerMgr *SprinklerMgr); virtual ~CSprinklerDevice(); virtual int NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray Data); + + CSprinklerMgr *mSprinklerMgr; + }; #endif // SPRINKLERDEVICE_H diff --git a/Sources/Sprinkler/SprinklerInterface.cpp b/Sources/Sprinkler/SprinklerInterface.cpp index 39f4afc..d9abd07 100644 --- a/Sources/Sprinkler/SprinklerInterface.cpp +++ b/Sources/Sprinkler/SprinklerInterface.cpp @@ -1,12 +1,13 @@ #include "SprinklerInterface.h" #include "ProtocolDefs.h" #include +#include "SprinklerMgr.h" -CSprinklerInterface::CSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkInterface): - CNetworkDevice(ID_SPRINKLER_DEVICE,Address,NetworkInterface) +CSprinklerInterface::CSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkInterface, CSprinklerMgr *SprinklerMgr): + CNetworkDevice(ID_SPRINKLER_INTERFACE,Address,NetworkInterface) { - + mSprinklerMgr = SprinklerMgr; } CSprinklerInterface::~CSprinklerInterface() diff --git a/Sources/Sprinkler/SprinklerInterface.h b/Sources/Sprinkler/SprinklerInterface.h index 6bfe0dd..5cfe9b3 100644 --- a/Sources/Sprinkler/SprinklerInterface.h +++ b/Sources/Sprinkler/SprinklerInterface.h @@ -5,15 +5,20 @@ #include "NetworkDevice.h" +class CSprinklerMgr; + + class CSprinklerInterface: public QObject, public CNetworkDevice { Q_OBJECT public: - CSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkInterface); + CSprinklerInterface(int Address, CAbstractNetworkCommIF *NetworkInterface, CSprinklerMgr *SprinklerMgr); virtual ~CSprinklerInterface(); virtual int NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray Data); + CSprinklerMgr *mSprinklerMgr; + }; #endif // SPRINKLERDEVICE_H diff --git a/Sources/Sprinkler/SprinklerMgr.cpp b/Sources/Sprinkler/SprinklerMgr.cpp index b4d3f6b..b2b00b3 100644 --- a/Sources/Sprinkler/SprinklerMgr.cpp +++ b/Sources/Sprinkler/SprinklerMgr.cpp @@ -2,5 +2,5 @@ CSprinklerMgr::CSprinklerMgr(QObject *parent) : QObject(parent) { - + mProgramHandle = 0; } diff --git a/Sources/Sprinkler/SprinklerMgr.h b/Sources/Sprinkler/SprinklerMgr.h index 14a988b..d5c0b1e 100644 --- a/Sources/Sprinkler/SprinklerMgr.h +++ b/Sources/Sprinkler/SprinklerMgr.h @@ -3,15 +3,20 @@ #include + +class CMasterCtrl; + class CSprinklerMgr : public QObject { Q_OBJECT public: explicit CSprinklerMgr(QObject *parent = 0); + CMasterCtrl *mProgramHandle; + signals: public slots: }; -#endif // SPRINKLERMGR_H \ No newline at end of file +#endif // SPRINKLERMGR_H