Connected IrCtrl to MainWidget
[irwi] / src / irctrl.cpp
index 5a647d0..92bf8b2 100644 (file)
@@ -1,62 +1,54 @@
+#include <cstdlib>
+
 #include <QSettings>
+#include <QTcpSocket>
+#include <QHostAddress>
+#include <QTimer>
+
 #include "irctrl.h"
-#include "irctrl_p.h"
 
 IrCtrl::IrCtrl(QObject *parent)
     : QObject(parent)
-    , d_ptr(new IrCtrlPrivate())
 {
-    Q_D(IrCtrl);
-    d->q_ptr = this;
 }
-
-IrCtrl::IrCtrl(IrCtrlPrivate &dd, QObject *parent)
-    : QObject(parent)
-    , d_ptr(&dd)
-{
-    Q_D(IrCtrl);
-    d->q_ptr = this;
-}
-
+    
 IrCtrl::~IrCtrl()
 {
-    delete d_ptr;
 }
 
-void IrCtrl::sendCmd0()
+void IrCtrl::sendCmd(const QString &cmd)
 {
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd0", "VOLUP").toString());
-}
+    if (!killLircTimer->isActive()) {
+        startLirc();
+    } else {
+        killLircTimer->stop();
+    }
 
-void IrCtrl::sendCmd1()
-{
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd1", "VOLDOWN-").toString());
-}
+    QTcpSocket sock;
+    QSettings settings(this);
+    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::sendCmd2()
-{
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd2", "CHUP").toString());
+    killLircTimer->start();
 }
 
-void IrCtrl::sendCmd3()
-{
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd3", "CHDOWN").toString());
-}
 
-void IrCtrl::sendCmd4()
+void IrCtrl::stopLirc()
 {
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd4", "POWER").toString());
+    std::system("sudo /etc/init.d/lirc stop");
 }
 
-void IrCtrl::sendCmd5()
+void IrCtrl::startLirc()
 {
-    Q_D(IrCtrl);
-    d->genericSendCmd(d->settings->value("cmd5", "MUTE").toString());
+    std::system("sudo /etc/init.d/lirc start");
 }