From f6dffb12ca5c79c340309f13fe4b093051a68896 Mon Sep 17 00:00:00 2001 From: J-F Martel Date: Tue, 18 Jul 2017 15:35:01 -0400 Subject: [PATCH] =?UTF-8?q?Check-in=20pr=C3=A9-voyage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/ProtocolDefs.h | 40 ++++++- Sources/SMSClient/SMSMasterCtrlInterface.h | 25 +--- Sources/Sprinkler/Sprinkler.cpp | 62 ++++++++++ Sources/Sprinkler/Sprinkler.h | 34 ++++++ Sources/Sprinkler/SprinklerDevice.cpp | 32 +++++ Sources/Sprinkler/SprinklerDevice.h | 27 +++++ Sources/Sprinkler/SprinklerGui.cpp | 2 + Sources/Sprinkler/SprinklerGui.ui | 22 +++- .../SprinklerMasterCtrlInterface.cpp | 111 ++++++++++++++++++ Sources/SystemGui.cpp | 1 + Sources/SystemGui.h | 2 + Sources/ToggleSwitch.cpp | 25 ++++ Sources/ToggleSwitch.h | 20 ++++ SystemGui.pro | 12 +- ui_SprinklerGui.h | 7 +- 15 files changed, 394 insertions(+), 28 deletions(-) create mode 100644 Sources/Sprinkler/Sprinkler.cpp create mode 100644 Sources/Sprinkler/Sprinkler.h create mode 100644 Sources/Sprinkler/SprinklerDevice.cpp create mode 100644 Sources/Sprinkler/SprinklerDevice.h create mode 100644 Sources/Sprinkler/SprinklerMasterCtrlInterface.cpp create mode 100644 Sources/ToggleSwitch.cpp create mode 100644 Sources/ToggleSwitch.h diff --git a/Sources/ProtocolDefs.h b/Sources/ProtocolDefs.h index d72478a..7874b55 100644 --- a/Sources/ProtocolDefs.h +++ b/Sources/ProtocolDefs.h @@ -46,7 +46,7 @@ enum DEVICES_IDS ID_PC, //PC ID_AV_MUX, //Audio Video Multiplexer ID_IR_REMOTE, //Infra red transmitter - ID_DEADBOLT, + ID_DEADBOLT_DEVICE, ID_RECEIVER_AMP, ID_SMS_CLIENT, ID_ETHERNET_VIRTUAL, @@ -147,6 +147,17 @@ enum DEADBOLT_CMDS DEADBOLT_DEVICE_ACK = 1, DEADBOLT_DEVICE_STATUS_REQUEST, DEADBOLT_DEVICE_STATUS_RESPONSE, + DEADBOLT_DEVICE_GET_LOCKED_STATE_REQUEST, + DEADBOLT_DEVICE_LOCKED_STATE_RESPONSE, + DEADBOLT_DEVICE_GOTO_LOCKED_REQUEST, + DEADBOLT_DEVICE_GOTO_LOCKED_ACK, + DEADBOLT_DEVICE_GOTO_UNLOCKED_REQUEST, + DEADBOLT_DEVICE_GOTO_UNLOCKED_ACK, + DEADBOLT_DEVICE_GET_PASSWORDS_REQUEST, + DEADBOLT_DEVICE_GET_PASSWORDS_RESPONSE, + DEADBOLT_DEVICE_SET_PASSWORDS_REQUEST, + DEADBOLT_DEVICE_SET_PASSWORDS_ACK, + DEADBOLT_DEVICE_LOCK_EVENT, MAX_DEADBOLT_DEVICE_CMD }; @@ -157,6 +168,23 @@ enum SPRINKLER_DEVICE_CMDS SPRINKLER_DEVICE_ACK = 1, SPRINKLER_DEVICE_STATUS_REQUEST, SPRINKLER_DEVICE_STATUS_RESPONSE, + SPRINKLER_DEVICE_SET_SPRINKLER_STATE_REQUEST, + SPRINKLER_DEVICE_SET_SPRINKLER_STATE_ACK, + SPRINKLER_DEVICE_GET_SPRINKLER_STATE_REQUEST, + SPRINKLER_DEVICE_GET_SPRINKLER_STATE_RESPONSE, + SPRINKLER_DEVICE_GET_WATER_FLOW_REQUEST, + SPRINKLER_DEVICE_GET_WATER_FLOW_RESPONSE, + SPRINKLER_DEVICE_GET_MOISTURE_REQUEST, + SPRINKLER_DEVICE_GET_MOISTURE_RESPONSE, + SPRINKLER_DEVICE_SET_PROGRAM_REQUEST, + SPRINKLER_DEVICE_SET_PROGRAM_ACK, + SPRINKLER_DEVICE_GET_PROGRAM_REQUEST, + SPRINKLER_DEVICE_GET_PROGRAM_RESPONSE, + SPRINKLER_DEVICE_SET_PARAMETERS_REQUEST, + SPRINKLER_DEVICE_SET_PARAMETERS_ACK, + SPRINKLER_DEVICE_GET_PARAMETERS_REQUEST, + SPRINKLER_DEVICE_GET_PARAMETERS_RESPONSE, + MAX_SPRINKLER_DEVICE_CMD }; @@ -167,6 +195,16 @@ enum SPRINKLER_INTERFACE_CMDS SPRINKLER_INTERFACE_ACK = 1, SPRINKLER_INTERFACE_STATUS_REQUEST, SPRINKLER_INTERFACE_STATUS_RESPONSE, + SPRINKLER_INTERFACE_GET_SPRINKLERS_REQUEST, + SPRINKLER_INTERFACE_GET_SPRINKLERS_RESPONSE, + SPRINKLER_INTERFACE_GET_SPRINKLER_DATA_REQUEST, + SPRINKLER_INTERFACE_GET_SPRINKLER_DATA_RESPONSE, + SPRINKLER_INTERFACE_SET_SPRINKLER_DATA_REQUEST, + SPRINKLER_INTERFACE_SET_SPRINKLER_DATA_ACK, + SPRINKLER_INTERFACE_GET_SPRINKLER_STATE_REQUEST, + SPRINKLER_INTERFACE_GET_SPRINKLER_STATE_RESPONSE, + SPRINKLER_INTERFACE_SET_SPRINKLER_STATE_REQUEST, + SPRINKLER_INTERFACE_SET_SPRINKLER_STATE_ACK, MAX_SPRINKLER_INTERFACE_CMD }; diff --git a/Sources/SMSClient/SMSMasterCtrlInterface.h b/Sources/SMSClient/SMSMasterCtrlInterface.h index 5e05160..c66f72e 100644 --- a/Sources/SMSClient/SMSMasterCtrlInterface.h +++ b/Sources/SMSClient/SMSMasterCtrlInterface.h @@ -1,47 +1,28 @@ #ifndef CSMSMASTERCTRLINTERFACE_H #define CSMSMASTERCTRLINTERFACE_H -//#include "NetworkProtocol.h" -//#include "GlobalDefine.h" -//#include "ProtocolDefs.h" -//#include -//#include "SMSMessage.h" #include "MasterCtrlInterface.h" class CSystemGui; -class CSMSClient -; +class CSMSClient; + class CSMSMasterCtrlInterface: public CMasterCtrlInterface//CNetworkProtocol { Q_OBJECT public: + CSMSMasterCtrlInterface(CSMSClient *ProgramHandle); ~CSMSMasterCtrlInterface(); CSMSClient *mProgramHandle; - // virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); - -// QTcpSocket *mNetworkCommSocket; -// int mDeviceAddress; -// int mNetworkPort; -// QString mMasterCtrlAddress; - - -// int ConnectToMasterCtrl(); -// int DisconnectMasterCtrl(); -// virtual int NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); virtual int DeviceConnectedToMaster(bool Connected); void SendSMS(CSMSMessage Message); -//public slots: -// void NetworkSocketConnected(); -// void NetworkSocketDataAvailable(); -// void NetworkSocketDisconnected(); }; #endif // CSMSMasterCtrlInterface_H diff --git a/Sources/Sprinkler/Sprinkler.cpp b/Sources/Sprinkler/Sprinkler.cpp new file mode 100644 index 0000000..a44c816 --- /dev/null +++ b/Sources/Sprinkler/Sprinkler.cpp @@ -0,0 +1,62 @@ +#include "Sprinkler.h" + + +CSprinkler::CSprinkler(CSprinklerGui *GUI) +{ + mNetworkInterface = new CSprinklerMasterCtrlInterface(this); + mGui = GUI; + + CSprinklerDevice *Sprinkler = new CSprinklerDevice(); + mSprinklers.append(Sprinkler); +} + +CSprinkler::~CSprinkler() +{ + for(int i = 0; i < mSprinklers.size(); i++) + { + delete mSprinklers[i]; + } + mSprinklers.clear(); +} + +CSprinklerDevice* CSprinkler::FindSprinkler(int DeviceAddress) +{ + for(int i = 0; i < mSprinklers.size(); i++) + { + if(mSprinklers.at(i)->mDeviceAddress == DeviceAddress) + { + return mSprinklers[i]; + } + } + return 0; +} + +int CSprinkler::SetSprinklerState(int DeviceAddress, unsigned char State) +{ + CSprinklerDevice *Dev = FindSprinkler(DeviceAddress); + if(Dev != 0) + { + Dev->SetSprinklerState((SprinklerState)State); + } + else + { + return 0; + } + + return 1; +} + +int CSprinkler::SetSprinklerFlow(int DeviceAddress, unsigned short Flow) +{ + CSprinklerDevice *Dev = FindSprinkler(DeviceAddress); + if(Dev != 0) + { + Dev->SetFlow(Flow); + } + else + { + return 0; + } + + return 1; +} diff --git a/Sources/Sprinkler/Sprinkler.h b/Sources/Sprinkler/Sprinkler.h new file mode 100644 index 0000000..f9f1557 --- /dev/null +++ b/Sources/Sprinkler/Sprinkler.h @@ -0,0 +1,34 @@ +#ifndef SPRINKLER_H +#define SPRINKLER_H + +#include +#include +#include "SprinklerMasterCtrlInterface.h" +#include "SprinklerGui.h" +#include "SprinklerDevice.h" + + +class CSprinkler : public QObject +{ + Q_OBJECT + +public: + CSprinkler(CSprinklerGui *GUI); + ~CSprinkler(); + + int SetSprinklerState(int DeviceAddress, unsigned char State); + int SetSprinklerFlow(int DeviceAddress, unsigned short Flow); + +private: + CSprinklerDevice *FindSprinkler(int DeviceAddress); + +public: + + CSprinklerMasterCtrlInterface *mNetworkInterface; + CSprinklerGui *mGui; + QList mSprinklers; + + +}; + +#endif // SPRINKLER_H diff --git a/Sources/Sprinkler/SprinklerDevice.cpp b/Sources/Sprinkler/SprinklerDevice.cpp new file mode 100644 index 0000000..40437e6 --- /dev/null +++ b/Sources/Sprinkler/SprinklerDevice.cpp @@ -0,0 +1,32 @@ +#include "SprinklerDevice.h" + + +CSprinklerDevice::CSprinklerDevice() +{ + mDeviceLocation = "Backyard"; + mDeviceAddress = 1; + mSprinklerState = SPRINKLER_UNKNOWN_STATE; + mFlowMeter = 0; +} + +int CSprinklerDevice::SetSprinklerState(SprinklerState State) +{ + mSprinklerState = State; + return 1; +} + +SprinklerState CSprinklerDevice::GetSprinklerState() +{ + return mSprinklerState; +} + +int CSprinklerDevice::SetFlow(unsigned short flow) +{ + mFlowMeter = flow; + return 1; +} + +unsigned short CSprinklerDevice::GetFlow() +{ + return mFlowMeter; +} diff --git a/Sources/Sprinkler/SprinklerDevice.h b/Sources/Sprinkler/SprinklerDevice.h new file mode 100644 index 0000000..2855cee --- /dev/null +++ b/Sources/Sprinkler/SprinklerDevice.h @@ -0,0 +1,27 @@ +#ifndef CSPRINKLERDEVICE_H +#define CSPRINKLERDEVICE_H +#include + +typedef enum eSprinklerState +{ + SPRINKLER_OFF_STATE = 0, + SPRINKLER_ON_STATE, + SPRINKLER_UNKNOWN_STATE +}SprinklerState; + +class CSprinklerDevice +{ +public: + CSprinklerDevice(); + int SetSprinklerState(SprinklerState State); + SprinklerState GetSprinklerState(); + int SetFlow(unsigned short flow); + unsigned short GetFlow(); + + SprinklerState mSprinklerState; + int mDeviceAddress; + QString mDeviceLocation; + unsigned short mFlowMeter; +}; + +#endif // CSPRINKLERDEVICE_H diff --git a/Sources/Sprinkler/SprinklerGui.cpp b/Sources/Sprinkler/SprinklerGui.cpp index f2ec187..505ae0c 100644 --- a/Sources/Sprinkler/SprinklerGui.cpp +++ b/Sources/Sprinkler/SprinklerGui.cpp @@ -5,6 +5,8 @@ CSprinklerGui::CSprinklerGui(QWidget *parent) : QWidget(parent) { setupUi(this); + mValveSwitch->setCheckable(true); + mValveSwitch->setChecked(false); } CSprinklerGui::~CSprinklerGui() diff --git a/Sources/Sprinkler/SprinklerGui.ui b/Sources/Sprinkler/SprinklerGui.ui index 4cfbdd8..bace86c 100644 --- a/Sources/Sprinkler/SprinklerGui.ui +++ b/Sources/Sprinkler/SprinklerGui.ui @@ -16,8 +16,8 @@ - 0 - -10 + 20 + 10 201 51 @@ -26,7 +26,25 @@ Sprinklers + + + + 220 + 90 + 91 + 81 + + + + + + CToggleSwitch + QWidget +
ToggleSwitch.h
+ 1 +
+
diff --git a/Sources/Sprinkler/SprinklerMasterCtrlInterface.cpp b/Sources/Sprinkler/SprinklerMasterCtrlInterface.cpp new file mode 100644 index 0000000..5e7ee47 --- /dev/null +++ b/Sources/Sprinkler/SprinklerMasterCtrlInterface.cpp @@ -0,0 +1,111 @@ +#include "SprinklerMasterCtrlInterface.h" +#include +#include +#include +#include "SystemGui.h" +#include "Sprinkler.h" + + + +CSprinklerMasterCtrlInterface::CSprinklerMasterCtrlInterface(CSprinkler *ProgramHandle) +{ + mDeviceAddress = 1; + mNetworkPort = 2182; + mMasterCtrlAddress = "127.0.0.1"; +// mNetworkPort = 6463; +// mMasterCtrlAddress = "192.168.0.112"; + mNetworkCommSocket = 0; + mMyDeviceID = ID_SPRINKLER_INTERFACE; + + mProgramHandle = ProgramHandle; +} + +CSprinklerMasterCtrlInterface::~CSprinklerMasterCtrlInterface() +{ +// if(mNetworkCommSocket !=0) +// { +//// mNetworkCommSocket->disconnectFromHost(); +// // delete mNetworkCommSocket; +// } +} + +int CSprinklerMasterCtrlInterface::DeviceConnectedToMaster(bool Connected) +{ + if(Connected) + { + mNetworkCommSocket->write(GetTxPacket(SPRINKLER_INTERFACE_GET_SPRINKLERS_REQUEST,0,0,0,1,ID_MASTER,mMyDeviceID,mDeviceAddress)); + } + else + { + //??? + } + return RET_OK; +} + +int CSprinklerMasterCtrlInterface::DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderDeviceID, int SenderAddress, int MessageID, int DataSize, QByteArray Data) +{ + Q_UNUSED(DataSize) + + + if(TargetDeviceID == mMyDeviceID && (TargetDeviceAddress == BROADCAST_VALUE || TargetDeviceAddress == mDeviceAddress)) + { + switch(MessageID) + { + case SPRINKLER_INTERFACE_ACK: + { + break; + } + case SPRINKLER_INTERFACE_STATUS_REQUEST: + { + QByteArray Frame,ResponseData; + ResponseData.append(ACK); + ResponseData.append((char)SPRINKLER_INTERFACE_STATUS_RESPONSE); + Frame = GetTxPacket(SPRINKLER_INTERFACE_STATUS_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_SPRINKLER_INTERFACE,mDeviceAddress); + mNetworkCommSocket->write(Frame); + break; + } + case SPRINKLER_INTERFACE_GET_SPRINKLERS_RESPONSE: + { + break; + } + case SPRINKLER_INTERFACE_GET_SPRINKLER_DATA_RESPONSE: + { + break; + } + case SPRINKLER_INTERFACE_SET_SPRINKLER_DATA_ACK: + { + break; + } + case SPRINKLER_INTERFACE_GET_SPRINKLER_STATE_RESPONSE: + { + for(int i = 0; i < Data.at(0); i++) + { + + } + break; + } + case SPRINKLER_INTERFACE_SET_SPRINKLER_STATE_ACK: + { + QByteArray Frame,RequestData; + RequestData.append(1); //device address + Frame = GetTxPacket(SPRINKLER_INTERFACE_GET_SPRINKLER_STATE_REQUEST,0,RequestData.data(),RequestData.size(),1,ID_MASTER,ID_SPRINKLER_INTERFACE,mDeviceAddress); + mNetworkCommSocket->write(Frame); + break; + } + case SPRINKLER_INTERFACE_STATUS_RESPONSE: + case SPRINKLER_INTERFACE_GET_SPRINKLERS_REQUEST: + case SPRINKLER_INTERFACE_GET_SPRINKLER_DATA_REQUEST: + case SPRINKLER_INTERFACE_SET_SPRINKLER_DATA_REQUEST: + case SPRINKLER_INTERFACE_GET_SPRINKLER_STATE_REQUEST: + case SPRINKLER_INTERFACE_SET_SPRINKLER_STATE_REQUEST: + default: + { + qDebug("Sprinkler: Invalid Ethernet MSg received: %d",MessageID); + break; + } + + } + } + + return RET_OK; +} diff --git a/Sources/SystemGui.cpp b/Sources/SystemGui.cpp index 93adb69..48814fd 100644 --- a/Sources/SystemGui.cpp +++ b/Sources/SystemGui.cpp @@ -6,6 +6,7 @@ CSystemGui::CSystemGui(QObject *parent) : QObject(parent) mGui = new CGuiMain(); mProgramSettings = new CProgramSettings(); mSMSClient = new CSMSClient(mGui->mSMSGui,&mSettings.mVoipMSSettings); + mSprinklers = new CSprinkler(mGui->mSprinklerGui); mSysTrayMgr = new CSystemTrayManager(); mSysTrayMgr->mProgramHandle=this; diff --git a/Sources/SystemGui.h b/Sources/SystemGui.h index 83c4bf7..4a695dd 100644 --- a/Sources/SystemGui.h +++ b/Sources/SystemGui.h @@ -6,6 +6,7 @@ #include "SMSClient.h" #include "ProgramSettings.h" #include "SystemTrayManager.h" +#include "Sprinkler.h" class CSystemGui : public QObject { @@ -27,6 +28,7 @@ private: CProgramSettings *mProgramSettings; CSettings mSettings; CSystemTrayManager *mSysTrayMgr; + CSprinkler *mSprinklers; signals: diff --git a/Sources/ToggleSwitch.cpp b/Sources/ToggleSwitch.cpp new file mode 100644 index 0000000..74a1979 --- /dev/null +++ b/Sources/ToggleSwitch.cpp @@ -0,0 +1,25 @@ +#include "ToggleSwitch.h" +#include + +CToggleSwitch::CToggleSwitch(QWidget *parent) : + QAbstractButton(parent) +{ + +} + +void CToggleSwitch::paintEvent(QPaintEvent *e) +{ + mOnPixmap = QPixmap("./Ico/switch-off-icon.png").scaled(size()); + mOffPixmap = QPixmap("./Ico/switch-on-icon.png").scaled(size()); + QPainter painter(this); + + if(isChecked()) + { + painter.drawPixmap(0,0,mOnPixmap); + } + else + { + painter.drawPixmap(0,0,mOffPixmap); + } + +} diff --git a/Sources/ToggleSwitch.h b/Sources/ToggleSwitch.h new file mode 100644 index 0000000..1afec0c --- /dev/null +++ b/Sources/ToggleSwitch.h @@ -0,0 +1,20 @@ +#ifndef TOGGLESWITCH_H +#define TOGGLESWITCH_H + +#include +#include + +class CToggleSwitch : public QAbstractButton +{ + Q_OBJECT +public: + CToggleSwitch(QWidget *parent = 0); + QPixmap mOnPixmap, mOffPixmap; + + void paintEvent(QPaintEvent *e); +signals: + +public slots: +}; + +#endif // TOGGLESWITCH_H diff --git a/SystemGui.pro b/SystemGui.pro index 79b7e52..b2d59dd 100644 --- a/SystemGui.pro +++ b/SystemGui.pro @@ -42,7 +42,11 @@ SOURCES += \ Sources/SMSClient/Contact.cpp \ Sources/SMSClient/ContactRepository.cpp \ Sources/SystemTrayManager.cpp \ - Sources/Sprinkler/SprinklerGui.cpp + Sources/Sprinkler/SprinklerGui.cpp \ + Sources/ToggleSwitch.cpp \ + Sources/Sprinkler/Sprinkler.cpp \ + Sources/Sprinkler/SprinklerMasterCtrlInterface.cpp \ + Sources/Sprinkler/SprinklerDevice.cpp HEADERS += Sources/AbstractNetworkInterface.h \ Sources/GuiMain.h \ @@ -60,7 +64,11 @@ HEADERS += Sources/AbstractNetworkInterface.h \ Sources/SMSClient/Contact.h \ Sources/SMSClient/ContactRepository.h \ Sources/SystemTrayManager.h \ - Sources/Sprinkler/SprinklerGui.h + Sources/Sprinkler/SprinklerGui.h \ + Sources/ToggleSwitch.h \ + Sources/Sprinkler/Sprinkler.h \ + Sources/Sprinkler/SprinklerDevice.h \ + Sources/Sprinkler/SprinklerMasterCtrlInterface.h FORMS += \ SMSGui.ui \ diff --git a/ui_SprinklerGui.h b/ui_SprinklerGui.h index d79a24c..b060bdf 100644 --- a/ui_SprinklerGui.h +++ b/ui_SprinklerGui.h @@ -16,6 +16,7 @@ #include #include #include +#include "ToggleSwitch.h" QT_BEGIN_NAMESPACE @@ -23,6 +24,7 @@ class Ui_CSprinklerGui { public: QLabel *label; + CToggleSwitch *mValveSwitch; void setupUi(QWidget *CSprinklerGui) { @@ -31,7 +33,10 @@ public: CSprinklerGui->resize(1047, 560); label = new QLabel(CSprinklerGui); label->setObjectName(QStringLiteral("label")); - label->setGeometry(QRect(0, -10, 201, 51)); + label->setGeometry(QRect(20, 10, 201, 51)); + mValveSwitch = new CToggleSwitch(CSprinklerGui); + mValveSwitch->setObjectName(QStringLiteral("mValveSwitch")); + mValveSwitch->setGeometry(QRect(220, 90, 91, 81)); retranslateUi(CSprinklerGui);