diff --git a/MasterCtrl.pro b/MasterCtrl.pro index aa29a7b..13b495e 100644 --- a/MasterCtrl.pro +++ b/MasterCtrl.pro @@ -124,6 +124,7 @@ INCLUDEPATH += $$PWD/ \ $$PWD/blynk-library-master/src/ \ $$PWD/Sources/Modbus \ $$PWD/Sources/Ispindel \ + $$PWD/Sources/LoraModuleInterface \ # $$PWD/Lib/QtHTTPServer/include/ \ LIBS += -L$$PWD/Lib/QtHTTPServer/ -lQt5HttpServer diff --git a/Sources/AvReceiver/AVReceiverDevice.cpp b/Sources/AvReceiver/AVReceiverDevice.cpp index c6b83f6..317552c 100644 --- a/Sources/AvReceiver/AVReceiverDevice.cpp +++ b/Sources/AvReceiver/AVReceiverDevice.cpp @@ -385,3 +385,48 @@ QByteArray CAVReceiverDevice::GetReceiverStatus() return StatusArray; } +int CAVReceiverDevice::SelectScene(char Zone, char Scene) +{ + QString Cmd; + if(Zone == AV_RECEIVER_MAIN_ZONE) + { + Cmd = QString("@MAIN:SCENE=Scene %1\r\n").arg((int)Scene,1); + + } + else if(Zone == AV_RECEIVER_ZONE_2) + { + Cmd = QString("@ZONE2:SCENE=Scene %1\r\n").arg((int)Scene,1); + } + else + { + return RET_ERROR; + } + + SendReceiverCommand(Cmd); + DisconnectReceiverDelayed(2000); + + return RET_OK; +} + +int CAVReceiverDevice::SetMainVolume(float Volume) +{ + QString Cmd; + Cmd = QString("@MAIN:VOL=%1\r\n").arg(Volume,1,'f',1); + + // qDebug("%s",qPrintable(Cmd)); + + SendReceiverCommand(Cmd); + // DisconnectReceiverDelayed(); + + return RET_OK; +} + +int CAVReceiverDevice::SetZone2Volume(float Volume) +{ + QString Cmd; + Cmd = QString("@ZONE2:VOL=%1\r\n").arg(Volume,1,'f',1); + + SendReceiverCommand(Cmd); + // DisconnectReceiverDelayed(); + return RET_OK; +} diff --git a/Sources/AvReceiver/AVReceiverDevice.h b/Sources/AvReceiver/AVReceiverDevice.h index 1ef2ed0..0a4b59f 100644 --- a/Sources/AvReceiver/AVReceiverDevice.h +++ b/Sources/AvReceiver/AVReceiverDevice.h @@ -71,6 +71,9 @@ public: int SetMainZone(bool OnOff); int SetSpeakers(int SpeakerA, int SpeakerB); int SendRawCommand(QString Cmd); + int SelectScene(char Zone, char Scene); + int SetMainVolume(float Volume); + int SetZone2Volume(float Volume); QByteArray GetReceiverStatus(); private: diff --git a/Sources/AvReceiver/AvReceiverData.h b/Sources/AvReceiver/AvReceiverData.h index a518c02..fe1cac0 100644 --- a/Sources/AvReceiver/AvReceiverData.h +++ b/Sources/AvReceiver/AvReceiverData.h @@ -3,6 +3,13 @@ #include #include "GlobalDefine.h" +enum eAVReceiverZones +{ + AV_RECEIVER_MAIN_ZONE = 1, + AV_RECEIVER_ZONE_2, + + AV_RECEIVER_MAX_ZONE +}; class CAvReceiverMainStatus { diff --git a/Sources/AvReceiver/AvReceiverInterface.cpp b/Sources/AvReceiver/AvReceiverInterface.cpp index 823b5cc..cdb204b 100644 --- a/Sources/AvReceiver/AvReceiverInterface.cpp +++ b/Sources/AvReceiver/AvReceiverInterface.cpp @@ -1,6 +1,7 @@ #include "AvReceiverInterface.h" #include "ProtocolDefs.h" #include "AVReceiverDevice.h" +#include CAvReceiverInterface::CAvReceiverInterface(int Address, CAbstractNetworkCommIF *NetworkInterface , CAVReceiverDevice *DevicePtr): CNetworkDevice(ID_AVRECEIVER_INTERFACE,Address,NetworkInterface) @@ -53,12 +54,38 @@ int CAvReceiverInterface::NewDeviceFrameReceived(int DeviceID, int DeviceAddress { break; } + case AV_RECEIVER_INTERFACE_SELECT_SCENE_REQUEST: + { + mAvReceiverDevice->SelectScene(Data[0],Data[1]); + break; + } + case AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST: + { + float VolumeData; + QDataStream Strm(&Data,QIODevice::ReadOnly); + Strm >> VolumeData; + + mAvReceiverDevice->SetMainVolume(VolumeData); + break; + } + case AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST: + { + float VolumeData; + QDataStream Strm(&Data,QIODevice::ReadOnly); + Strm >> VolumeData; + + mAvReceiverDevice->SetZone2Volume(VolumeData); + break; + } case AV_RECEIVER_INTERFACE_GENERAL_STATUS_RESPONSE: case AV_RECEIVER_INTERFACE_SET_MAIN_POWER_RESPONSE: case AV_RECEIVER_INTERFACE_SET_ZONE2_RESPONSE: case AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_RESPONSE: case AV_RECEIVER_INTERFACE_SET_SPEAKERS_RESPONSE: case AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_RESPONSE: + case AV_RECEIVER_INTERFACE_SELECT_SCENE_RESPONSE: + case AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_RESPONSE: + case AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_RESPONSE: default: { qDebug("Received invalid msg from Sprinkler Interface"); diff --git a/Sources/LoraModuleInterface/LoraModuleInterface.cpp b/Sources/LoraModuleInterface/LoraModuleInterface.cpp index e12fe0a..aa4907b 100644 --- a/Sources/LoraModuleInterface/LoraModuleInterface.cpp +++ b/Sources/LoraModuleInterface/LoraModuleInterface.cpp @@ -2,15 +2,76 @@ CLoraModuleInterface::CLoraModuleInterface() { + connect(&mLoraModuleIFSerialPort,SIGNAL(readyRead()),this,SLOT(NewLoraModuleIFDataReady())); + mLoraModuleIFStatusTimer = new QTimer(); + mLoraModuleIFStatusTimer->setSingleShot(false); + mLoraModuleIFStatusTimer->setInterval(1000); + mLoraModuleIFStatusTimer->start(); + + connect(mLoraModuleIFStatusTimer,SIGNAL(timeout()),this,SLOT(LoraModuleStatusTimerExpired())); } +CLoraModuleInterface::~CLoraModuleInterface() +{ + delete mLoraModuleIFStatusTimer; +} + + +//This the handling of the Microcontroller (LoraModuleInterface) int CLoraModuleInterface::NewFrameReceived(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray Data) { return RET_OK; } +//This is to answer to CChaletDevice requests int CLoraModuleInterface::SendNetworkMessage(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray *Data) { return RET_OK; } + + + +void CLoraModuleInterface::LoraModuleStatusTimerExpired() +{ + +} + +int CLoraModuleInterface::SetLoraModuleInterfaceParameters(QString ComPort, qint32 BaudRate) +{ + mLoraModuleIFComPortName = ComPort; + mLoraModuleIFComPortBaudRate = BaudRate; + + + if(mLoraModuleIFSerialPort.isOpen()) + { + mLoraModuleIFSerialPort.close(); + } + + mLoraModuleIFSerialPort.setPortName(mLoraModuleIFComPortName); + if(mLoraModuleIFSerialPort.setBaudRate(mLoraModuleIFComPortBaudRate) == false) + { + qDebug("Invalid Lora Device serial port baud rate..."); + } + + //The other serial port parameters (parity, stop bits, data bits) are all set to mentally sane default values so no need to set them. + if(mLoraModuleIFSerialPort.open(QIODevice::ReadWrite) == false) + { + qDebug("Could not open Lora device port"); + return RET_ERROR; + } + + qDebug("Lora serial port opened"); + return RET_OK; + + + + return RET_OK; +} + +void CLoraModuleInterface::NewLoraModuleIFDataReady() +{ + QByteArray NewData = mLoraModuleIFSerialPort.readAll(); + + AnalyzeRxBuffer(NewData); +} diff --git a/Sources/LoraModuleInterface/LoraModuleInterface.h b/Sources/LoraModuleInterface/LoraModuleInterface.h index 4c1e705..2659b64 100644 --- a/Sources/LoraModuleInterface/LoraModuleInterface.h +++ b/Sources/LoraModuleInterface/LoraModuleInterface.h @@ -7,6 +7,8 @@ #include "NetworkProtocol.h" #include "AbstractNetworkInterface.h" #include "NetworkDevice.h" +#include +#include class CLoraModuleInterface : public QObject, public CNetworkProtocol, public CAbstractNetworkCommIF { @@ -14,6 +16,16 @@ class CLoraModuleInterface : public QObject, public CNetworkProtocol, public CAb public: CLoraModuleInterface(); + ~CLoraModuleInterface(); + + int SetLoraModuleInterfaceParameters(QString ComPort,qint32 BaudRate); + + QTimer *mLoraModuleIFStatusTimer; + QSerialPort mLoraModuleIFSerialPort; + QString mLoraModuleIFComPortName; + qint32 mLoraModuleIFComPortBaudRate; + + @@ -22,6 +34,10 @@ public: //NetworkCommIF implementation virtual int SendNetworkMessage(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray *Data); + +public slots: + void LoraModuleStatusTimerExpired(); + void NewLoraModuleIFDataReady(); }; #endif // LORAMODULEINTERFACE_H diff --git a/Sources/LoraNetworkCommIF.cpp b/Sources/LoraNetworkCommIF.cpp index bf6a838..81b4160 100644 --- a/Sources/LoraNetworkCommIF.cpp +++ b/Sources/LoraNetworkCommIF.cpp @@ -77,7 +77,7 @@ void CLoraNetworkCommIF::LoraDeviceNewDataReady() { QByteArray NewData = mLoraDeviceSerialPort.readAll(); - QString Printf = "New Lora Data: "; + // QString Printf = "New Lora Data: "; AnalyzeRxBuffer(NewData); diff --git a/Sources/MasterCtrl.cpp b/Sources/MasterCtrl.cpp index 2aac48e..5e1da92 100644 --- a/Sources/MasterCtrl.cpp +++ b/Sources/MasterCtrl.cpp @@ -15,11 +15,15 @@ CMasterCtrl::CMasterCtrl() mSettingsWindow = new CSettingsWindow(); mSettingsWindow->mProgramHandle = this; - mChaletLoraNetworkCommInterface = new CLoraNetworkCommIF(); - mChaletLoraDevice = new CChaletLoraDevice(1,mChaletLoraNetworkCommInterface); +// mChaletLoraNetworkCommInterface = new CLoraNetworkCommIF();//JFM LoraInterface Dev + mChaletLoraModuleInterface = new CLoraModuleInterface(); + +// mChaletLoraDevice = new CChaletLoraDevice(1,mChaletLoraNetworkCommInterface);//JFM LoraInterface Dev + mChaletLoraDevice = new CChaletLoraDevice(1,mChaletLoraModuleInterface); // mChaletLoraInterface = new CChaletLoraInterface(mRooftopTowerLoraDevice); + mIspindelDevice = new CIspindelDevice; @@ -41,7 +45,8 @@ CMasterCtrl::~CMasterCtrl() delete mEthernetNetworkServer; delete mContactsRepository; delete mSprinklerManager; - delete mChaletLoraNetworkCommInterface; + //delete mChaletLoraNetworkCommInterface; //JFM LoraInterface Dev + delete mChaletLoraModuleInterface; delete mChaletLoraDevice; delete mIspindelDevice; // delete mMasterCtrlSettings; @@ -94,10 +99,13 @@ void CMasterCtrl::Start() mAVReceiverDevice->Start(); + /* //JFM LoraInterface Dev mChaletLoraNetworkCommInterface->mMyLoraAddress = 5; mChaletLoraNetworkCommInterface->mMyLoraChannel = 4; mChaletLoraNetworkCommInterface->SetLoraDestinationAddress(mMasterCtrlSettings.mChaletLoraAddress,mMasterCtrlSettings.mChaletLoraChannel); mChaletLoraNetworkCommInterface->SetLoraSerialPortSettings(mMasterCtrlSettings.mChaletComPort,QSerialPort::Baud9600); + */ //JFM LoraInterface Dev + // mChaletLoraNetworkCommInterface->SetLoraSerialPortSettings("COM5",QSerialPort::Baud9600); mChaletLoraDevice->Start(); @@ -144,8 +152,8 @@ unsigned int CMasterCtrl::SettingsWindowClosed() { mVoipMsSMSClient->SetVOIPMsSettings(&mMasterCtrlSettings.mVoipMSSettings); mVoipMsSMSClient->DownloadSMSFromServer(); - mChaletLoraNetworkCommInterface->SetLoraDestinationAddress(mMasterCtrlSettings.mChaletLoraAddress,mMasterCtrlSettings.mChaletLoraChannel); - mChaletLoraNetworkCommInterface->SetLoraSerialPortSettings(mMasterCtrlSettings.mChaletComPort,QSerialPort::Baud9600); + //mChaletLoraNetworkCommInterface->SetLoraDestinationAddress(mMasterCtrlSettings.mChaletLoraAddress,mMasterCtrlSettings.mChaletLoraChannel); //JFM LoraInterface Dev + //mChaletLoraNetworkCommInterface->SetLoraSerialPortSettings(mMasterCtrlSettings.mChaletComPort,QSerialPort::Baud9600); //JFM LoraInterface Dev return RET_OK; } diff --git a/Sources/MasterCtrl.h b/Sources/MasterCtrl.h index aeeca3e..34259e6 100644 --- a/Sources/MasterCtrl.h +++ b/Sources/MasterCtrl.h @@ -17,6 +17,7 @@ #include "LoraNetworkCommIF.h" #include "HttpServer.h" #include "IspindelDevice.h" +#include "LoraModuleInterface.h" //#include "AppIconWidget.h" @@ -42,7 +43,8 @@ public: CChaletLoraDevice *mChaletLoraDevice; // CChaletLoraInterface *mChaletLoraInterface; - CLoraNetworkCommIF *mChaletLoraNetworkCommInterface; +// CLoraNetworkCommIF *mChaletLoraNetworkCommInterface; + CLoraModuleInterface *mChaletLoraModuleInterface; // CAppIconWidget mAppWidget; // CHttpServer mHttpServer; diff --git a/Sources/ProtocolDefs.h b/Sources/ProtocolDefs.h index 3cec969..930bfd7 100644 --- a/Sources/ProtocolDefs.h +++ b/Sources/ProtocolDefs.h @@ -245,6 +245,12 @@ enum AV_RECEIVER_INTERFACE_CMDS AV_RECEIVER_INTERFACE_SET_SPEAKERS_RESPONSE, AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_REQUEST, AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_RESPONSE, + AV_RECEIVER_INTERFACE_SELECT_SCENE_REQUEST, + AV_RECEIVER_INTERFACE_SELECT_SCENE_RESPONSE, + AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST, + AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_RESPONSE, + AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST, + AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_RESPONSE, MAX_AV_RECEIVER_INTERFACE_CMD