misc bugfixes and enchantments
[irwi] / src / irctrl.cpp
1 #include <cstdlib>
2
3 #include <QSettings>
4 #include <QTcpSocket>
5 #include <QHostAddress>
6
7 #include "irctrl.h"
8
9 IrCtrl::IrCtrl(QObject *parent)
10     : QObject(parent)
11 {
12     QSettings settings;
13     m_killLircTimer.setInterval(
14             settings.value("idleTimeout", "300").toInt() * 100);
15     m_killLircTimer.setSingleShot(true);
16     connect(&m_killLircTimer, SIGNAL(timeout()),
17             this, SLOT(stopLirc()));
18     startLirc();
19     m_killLircTimer.start();
20 }
21     
22 IrCtrl::~IrCtrl()
23 {
24 }
25
26 void IrCtrl::sendCmd(const QString &cmd)
27 {
28     if (!m_killLircTimer.isActive()) {
29         startLirc();
30     } else {
31         m_killLircTimer.stop();
32     }
33
34     QTcpSocket sock;
35     QSettings settings(this);
36     sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
37     sock.connectToHost(QHostAddress::LocalHost, 
38             settings.value("lircPort", LIRC_PORT).toInt(),
39             QIODevice::WriteOnly | QIODevice::Unbuffered);
40     sock.waitForConnected();
41     QString remoteName = settings.value("remoteName", "").toString();
42     QString cmdStr = "SEND_ONCE " + remoteName + " " + cmd + "\n";
43     sock.write(cmdStr.toAscii());
44     sock.waitForBytesWritten();
45     sock.close();
46
47     m_killLircTimer.start();
48 }
49
50
51 void IrCtrl::stopLirc()
52 {
53     std::system("sudo /etc/init.d/lirc stop");
54 }
55
56 void IrCtrl::startLirc()
57 {
58     std::system("sudo /etc/init.d/lirc start");
59 }
60
61