#include #include #include #include #include #include #include #include #include #include #include #include "alarmtime.h" #include "microcontroller.h" #include "mainwindow.h" #include "relaydialog.h" #include "ampmanager.h" #include "alarmactions.h" #include "alarmsettingsdialog.h" #define BAUD QSerialPort::Baud38400 int main(int argc, char *argv[]) { QApplication a(argc, argv); //set info QCoreApplication::setOrganizationName("UVOS"); QCoreApplication::setOrganizationDomain("uvos.xyz"); QCoreApplication::setApplicationName("SHinterface"); QCoreApplication::setApplicationVersion("0.5"); QDir::setCurrent(a.applicationDirPath()); //parse comand line QCommandLineParser parser; parser.setApplicationDescription("Smart Home Interface"); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption tcpOption(QStringList() << "t" << "tcp", QCoreApplication::translate("main", "Use Tcp connection")); parser.addOption(tcpOption); QCommandLineOption hostOption(QStringList() << "H" << "host", QCoreApplication::translate("main", "Set server host ip addres"), "adress"); parser.addOption(hostOption); QCommandLineOption portOption(QStringList() << "p" << "port", QCoreApplication::translate("main", "Set server Port in TCP mode or Serial port in serial mode"), "port"); parser.addOption(portOption); QCommandLineOption serialOption(QStringList() << "s" << "serial", QCoreApplication::translate("main", "Use serial connection")); parser.addOption(serialOption); QCommandLineOption baudOption(QStringList() << "b" << "baud", QCoreApplication::translate("main", "Set Baud Rate")); parser.addOption(baudOption); QCommandLineOption secondaryOption(QStringList() << "e" << "secondary", QCoreApplication::translate("main", "Set if instance is not main instance")); parser.addOption(secondaryOption); parser.process(a); QSettings settings; //connect to microcontoler Microcontroller micro; if(parser.isSet(tcpOption)) { QTcpSocket* microSocket = new QTcpSocket; int port = 6856; if(parser.isSet(portOption)) port = parser.value(portOption).toInt(); QString host("127.0.0.1"); if(parser.isSet(hostOption)) host = parser.value(hostOption); std::cout<<"connecting to "<connectToHost(host, port, QIODevice::ReadWrite); if(!microSocket->waitForConnected(1000)) { std::cout<<"Can not connect to to Server.\n"; return 1; } micro.setIODevice(microSocket); } else { QSerialPort* microPort = new QSerialPort; if(parser.isSet(portOption)) microPort->setPortName(parser.value(portOption)); else microPort->setPortName("ttyUSB0"); if(parser.isSet(portOption)) microPort->setBaudRate(parser.value(baudOption).toInt()); else microPort->setBaudRate(BAUD); if(!microPort->open(QIODevice::ReadWrite)) std::cout<<"Can not open serial port "<portName().toStdString()<<". Continueing in demo mode"<<'\n'; else micro.setIODevice(microPort); } AlarmActions alarmActions(&settings, µ); AmpManager amp(µ, 0); //Alarms AlarmTime almNight(settings.value("nightTime").toTime()); AlarmTime almAlarm(settings.value("alarmTime").toTime()); //mainwindow MainWindow w(µ, parser.isSet(secondaryOption)); QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString))); QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &w, SLOT(relayStateChanged(std::vector))); QObject::connect(µ, SIGNAL(auxStateChanged(int)), &w, SLOT(auxStateChanged(int))); //dialogs AlarmSettingsDialog alarmDialog(&almNight, &almAlarm, &settings, &w); RelayDialog relayDialog(µ, &w); QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &relayDialog, SLOT(relayStateChanged(std::vector))); if(!parser.isSet(secondaryOption)) { QObject::connect(&almNight, SIGNAL(trigger()), &alarmActions, SLOT(syncoff())); QObject::connect(&w, SIGNAL(signalAlmNightChanged(QTime)), &almNight, SLOT(changeTime(QTime))); QObject::connect(&w, SIGNAL(signalAlmNightStateChanged(int)), &almNight, SLOT(runOrAbort(int))); almNight.run(); QObject::connect(&almAlarm, &AlarmTime::trigger, µ, &Microcontroller::startSunrise); QObject::connect(&w, SIGNAL(signalAlmAlarmChanged(QTime)), &almAlarm, SLOT(changeTime(QTime))); QObject::connect(&w, SIGNAL(signalAlmAlarmStateChanged(int)), &almAlarm, SLOT(runOrAbort(int))); almAlarm.run(); //Amplifyer QObject::connect(&w, SIGNAL(signalAmpOn()), &, SLOT(run())); QObject::connect(&w, SIGNAL(signalAmpOff()), &, SLOT(abort())); QMetaObject::invokeMethod(&, "run", Qt::QueuedConnection ); } //show dialogs QObject::connect(&w, SIGNAL(showAdvRelayDialog()), &relayDialog, SLOT(show())); QObject::connect(&w, &MainWindow::showAlmSettingsDialog, &alarmDialog, &AlarmSettingsDialog::show); QMetaObject::invokeMethod(µ, "run", Qt::QueuedConnection ); w.show(); return a.exec(); }