misc bugfixes and enchantments
[irwi] / src / irctrl.cpp
index 6facb4e..01c5679 100644 (file)
@@ -1,61 +1,61 @@
-#include "irctrl.h"
-
 #include <cstdlib>
 
-#include <QTcpSocket>
 #include <QSettings>
-#include <QString>
-#include <QIODevice>
+#include <QTcpSocket>
 #include <QHostAddress>
-#include <QAbstractSocket>
 
-IrCtrl::IrCtrl()
+#include "irctrl.h"
+
+IrCtrl::IrCtrl(QObject *parent)
+    : QObject(parent)
 {
-    std::system("lircctl start");
+    QSettings settings;
+    m_killLircTimer.setInterval(
+            settings.value("idleTimeout", "300").toInt() * 100);
+    m_killLircTimer.setSingleShot(true);
+    connect(&m_killLircTimer, SIGNAL(timeout()),
+            this, SLOT(stopLirc()));
+    startLirc();
+    m_killLircTimer.start();
 }
-
+    
 IrCtrl::~IrCtrl()
 {
-    std::system("lircctl stop");
 }
 
-void IrCtrl::genericSendCmd(const QString &commandName)
+void IrCtrl::sendCmd(const QString &cmd)
 {
-    QTcpSocket sock(this);
-//    sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
-    sock.connectToHost(QHostAddress::LocalHost, LIRC_PORT,
-            QIODevice::WriteOnly|QIODevice::Unbuffered);
-    sock.waitForConnected(-1);
+    if (!m_killLircTimer.isActive()) {
+        startLirc();
+    } else {
+        m_killLircTimer.stop();
+    }
+
+    QTcpSocket sock;
     QSettings settings(this);
-    QString remoteName = settings.value("remoteName", "Zyxel_DMA-1000").toString();
-    QString cmd = "SEND_ONCE " + remoteName + " " + commandName + "\n";
-    sock.write(cmd.toAscii());
-    sock.waitForBytesWritten(-1);
+    sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
+    sock.connectToHost(QHostAddress::LocalHost, 
+            settings.value("lircPort", LIRC_PORT).toInt(),
+            QIODevice::WriteOnly | QIODevice::Unbuffered);
+    sock.waitForConnected();
+    QString remoteName = settings.value("remoteName", "").toString();
+    QString cmdStr = "SEND_ONCE " + remoteName + " " + cmd + "\n";
+    sock.write(cmdStr.toAscii());
+    sock.waitForBytesWritten();
     sock.close();
-}
 
-void IrCtrl::sendCmd0(bool)
-{
-}
-
-void IrCtrl::sendCmd1(bool)
-{
+    m_killLircTimer.start();
 }
 
-void IrCtrl::sendCmd2(bool)
-{
-}
 
-void IrCtrl::sendCmd3(bool)
+void IrCtrl::stopLirc()
 {
+    std::system("sudo /etc/init.d/lirc stop");
 }
 
-void IrCtrl::sendCmd4(bool)
+void IrCtrl::startLirc()
 {
-    genericSendCmd("ON/OFF");
+    std::system("sudo /etc/init.d/lirc start");
 }
 
-void IrCtrl::sendCmd5(bool)
-{
-}