Check-in pré-voyage

This commit is contained in:
J-F Martel 2017-07-18 15:35:01 -04:00
parent 46d6d4ac05
commit f6dffb12ca
15 changed files with 394 additions and 28 deletions

View File

@ -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
};

View File

@ -1,47 +1,28 @@
#ifndef CSMSMASTERCTRLINTERFACE_H
#define CSMSMASTERCTRLINTERFACE_H
//#include "NetworkProtocol.h"
//#include "GlobalDefine.h"
//#include "ProtocolDefs.h"
//#include <QTcpSocket>
//#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

View File

@ -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;
}

View File

@ -0,0 +1,34 @@
#ifndef SPRINKLER_H
#define SPRINKLER_H
#include <QObject>
#include <QList>
#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<CSprinklerDevice*> mSprinklers;
};
#endif // SPRINKLER_H

View File

@ -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;
}

View File

@ -0,0 +1,27 @@
#ifndef CSPRINKLERDEVICE_H
#define CSPRINKLERDEVICE_H
#include <QString>
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

View File

@ -5,6 +5,8 @@ CSprinklerGui::CSprinklerGui(QWidget *parent) :
QWidget(parent)
{
setupUi(this);
mValveSwitch->setCheckable(true);
mValveSwitch->setChecked(false);
}
CSprinklerGui::~CSprinklerGui()

View File

@ -16,8 +16,8 @@
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>0</x>
<y>-10</y>
<x>20</x>
<y>10</y>
<width>201</width>
<height>51</height>
</rect>
@ -26,7 +26,25 @@
<string>Sprinklers</string>
</property>
</widget>
<widget class="CToggleSwitch" name="mValveSwitch" native="true">
<property name="geometry">
<rect>
<x>220</x>
<y>90</y>
<width>91</width>
<height>81</height>
</rect>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>CToggleSwitch</class>
<extends>QWidget</extends>
<header>ToggleSwitch.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,111 @@
#include "SprinklerMasterCtrlInterface.h"
#include <QByteArray>
#include <QDataStream>
#include <QBuffer>
#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;
}

View File

@ -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;

View File

@ -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:

25
Sources/ToggleSwitch.cpp Normal file
View File

@ -0,0 +1,25 @@
#include "ToggleSwitch.h"
#include <QPainter>
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);
}
}

20
Sources/ToggleSwitch.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef TOGGLESWITCH_H
#define TOGGLESWITCH_H
#include <QAbstractButton>
#include <QPixmap>
class CToggleSwitch : public QAbstractButton
{
Q_OBJECT
public:
CToggleSwitch(QWidget *parent = 0);
QPixmap mOnPixmap, mOffPixmap;
void paintEvent(QPaintEvent *e);
signals:
public slots:
};
#endif // TOGGLESWITCH_H

View File

@ -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 \

View File

@ -16,6 +16,7 @@
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QWidget>
#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);