X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Firctrl.cpp;h=dbc230906edecf319e8f061f2a41b16d0ddf0873;hb=HEAD;hp=bfc0bfa8735a2c12ca61fcfc7c24d508db04f054;hpb=678ddedf2cfa5962278678187265f23cbba51559;p=irwi diff --git a/src/irctrl.cpp b/src/irctrl.cpp index bfc0bfa..dbc2309 100644 --- a/src/irctrl.cpp +++ b/src/irctrl.cpp @@ -1,60 +1,98 @@ -#include "irctrl.h" - #include +#ifdef LIRC_USEQTSOCKET #include +#include +#else +#include +#include +#include +#include +#include +#include +#endif + #include +#include #include -#include -#include -#include +#include -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() * 1000); + 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); - QSettings settings(this); - QString remoteName = settings.value("remoteName", "Zyxel_DMA-1000").toString(); - QString cmd = "SEND_ONCE " + remoteName + " " + commandName + "\n"; - sock.write(cmd.toAscii()); - sock.close(); -} + if (!m_killLircTimer.isActive()) { + startLirc(); + } else { + m_killLircTimer.stop(); + } -void IrCtrl::sendCmd0(bool) -{ -} + QSettings settings; + // Integer demotion. QVariant has no support for unsigned short + unsigned short lircPort = (unsigned short) + settings.value("lircPort", LIRC_PORT).toInt(); + QString remoteName = settings.value("remoteName", "").toString(); + QString cmdStr = "SEND_ONCE " + remoteName + " " + cmd + "\n"; + QByteArray buf = cmdStr.toAscii(); -void IrCtrl::sendCmd1(bool) -{ -} +#ifdef LIRC_USEQTSOCKET + QTcpSocket sock; + sock.setSocketOption(QAbstractSocket::LowDelayOption, 1); + sock.connectToHost(QHostAddress::LocalHost, lircPort, + QIODevice::WriteOnly | QIODevice::Unbuffered); + sock.waitForConnected(); + sock.write(buf); + sock.waitForBytesWritten(); + sock.close(); +#else + sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + addr.sin_port = htons(lircPort); + int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == -1) { + qDebug() << "Socket open fail"; + } else { + int c = ::connect(sock, (sockaddr*)&addr, sizeof(sockaddr_in)); + if (c == 0) { + write(sock, buf.constData(), buf.count()); + } else { + qDebug() << "Connect fail"; + } + shutdown(sock, SHUT_RDWR); + close(sock); + } +#endif -void IrCtrl::sendCmd2(bool) -{ + m_killLircTimer.start(); } -void IrCtrl::sendCmd3(bool) +void IrCtrl::stopLirc() { + std::system("sudo /etc/init.d/lirc stop"); } -void IrCtrl::sendCmd4(bool) +void IrCtrl::startLirc() { - genericSendCmd("POWER"); + std::system("sudo /etc/init.d/lirc start"); } -void IrCtrl::sendCmd5(bool) -{ -}