3 #ifdef LIRC_USEQTSOCKET
5 #include <QHostAddress>
7 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <netinet/ip.h>
12 #include <netinet/tcp.h>
22 IrCtrl::IrCtrl(QObject *parent)
26 m_killLircTimer.setInterval(
27 settings.value("idleTimeout", "300").toInt() * 1000);
28 m_killLircTimer.setSingleShot(true);
29 connect(&m_killLircTimer, SIGNAL(timeout()),
30 this, SLOT(stopLirc()));
32 m_killLircTimer.start();
39 void IrCtrl::sendCmd(const QString &cmd)
41 if (!m_killLircTimer.isActive()) {
44 m_killLircTimer.stop();
48 // Integer demotion. QVariant has no support for unsigned short
49 unsigned short lircPort = (unsigned short)
50 settings.value("lircPort", LIRC_PORT).toInt();
51 QString remoteName = settings.value("remoteName", "").toString();
52 QString cmdStr = "SEND_ONCE " + remoteName + " " + cmd + "\n";
53 QByteArray buf = cmdStr.toAscii();
55 #ifdef LIRC_USEQTSOCKET
57 sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
58 sock.connectToHost(QHostAddress::LocalHost, lircPort,
59 QIODevice::WriteOnly | QIODevice::Unbuffered);
60 sock.waitForConnected();
62 sock.waitForBytesWritten();
66 memset(&addr, 0, sizeof(addr));
67 addr.sin_family = AF_INET;
68 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
69 addr.sin_port = htons(lircPort);
70 int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
72 qDebug() << "Socket open fail";
74 int c = ::connect(sock, (sockaddr*)&addr, sizeof(sockaddr_in));
76 write(sock, buf.constData(), buf.count());
78 qDebug() << "Connect fail";
80 shutdown(sock, SHUT_RDWR);
85 m_killLircTimer.start();
88 void IrCtrl::stopLirc()
90 std::system("sudo /etc/init.d/lirc stop");
93 void IrCtrl::startLirc()
95 std::system("sudo /etc/init.d/lirc start");