summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/remote/lirchandler.cpp25
-rw-r--r--noncore/tools/remote/lirchandler.h5
-rw-r--r--noncore/tools/remote/remote.cpp40
3 files changed, 51 insertions, 19 deletions
diff --git a/noncore/tools/remote/lirchandler.cpp b/noncore/tools/remote/lirchandler.cpp
index 263b740..ec1e275 100644
--- a/noncore/tools/remote/lirchandler.cpp
+++ b/noncore/tools/remote/lirchandler.cpp
@@ -6,40 +6,40 @@ This program is free software; you can redistribute it and/or modify it under th
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
-#include <sys/un.h>
#include <unistd.h>
#include <errno.h>
#include <qstring.h>
#include <qmessagebox.h>
#include <qobject.h>
#include <opie2/oprocess.h>
+#include <qpe/qcopenvelope_qws.h>
#include "lirchandler.h"
#define PACKET_SIZE 256
#define TIMEOUT 3
#define LIRCD_SOCKET "/dev/lircd"
#define LIRCD_SERVICECMD "/etc/init.d/lircd"
using namespace Opie::Core;
LircHandler::LircHandler(void)
{
fd = 0;
addr.sun_family=AF_UNIX;
strcpy(addr.sun_path, LIRCD_SOCKET);
}
@@ -255,16 +255,39 @@ int LircHandler::sendIR(const char *lircaction)
}
bool LircHandler::startLircd(void)
{
return (system(LIRCD_SERVICECMD " start") == 0);
}
bool LircHandler::stopLircd(void)
{
return (system(LIRCD_SERVICECMD " stop") == 0);
}
bool LircHandler::isLircdRunning(void)
{
return (OProcess::processPID("lircd") != 0);
}
+
+bool LircHandler::setupModules(void)
+{
+ // Remove IrDA modules which get in the way
+ system("rmmod ircomm-tty ircomm");
+ // Load LIRC device driver
+ system("modprobe lirc_sir");
+ return true;
+}
+
+bool LircHandler::cleanupModules(void)
+{
+ // Unload LIRC device driver
+ system("rmmod lirc_sir");
+ // Load IrDA drivers back in
+ system("modprobe ircomm-tty");
+ return true;
+}
+
+void LircHandler::disableIrDA(void)
+{
+ QCopEnvelope e("QPE/IrDaApplet", "disableIrda()");
+}
diff --git a/noncore/tools/remote/lirchandler.h b/noncore/tools/remote/lirchandler.h
index c7665cb..4e56b6b 100644
--- a/noncore/tools/remote/lirchandler.h
+++ b/noncore/tools/remote/lirchandler.h
@@ -4,35 +4,40 @@ Copyright (C) 2007 Paul Eggleton & Thomas Stephens
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef LIRCHANDLER_H
#define LIRCHANDLER_H
+#include <sys/un.h>
+
class LircHandler
{
private:
bool connectLirc(void);
const char *readPacket();
struct sockaddr_un addr;
int fd;
public:
LircHandler(void);
QStringList getRemotes(void);
QStringList getButtons(const char *remoteName);
int sendIR(const char *lircaction);
bool startLircd(void);
bool stopLircd(void);
bool isLircdRunning(void);
+ bool setupModules(void);
+ bool cleanupModules(void);
+ void disableIrDA(void);
};
#endif
diff --git a/noncore/tools/remote/remote.cpp b/noncore/tools/remote/remote.cpp
index 67fc57d..5b756cb 100644
--- a/noncore/tools/remote/remote.cpp
+++ b/noncore/tools/remote/remote.cpp
@@ -26,35 +26,39 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <qlayout.h>
#include <qmessagebox.h>
#include <qpaintdevice.h>
#include <qobject.h>
/* STD */
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
int main( int argc, char **argv )
{
- QPEApplication a( argc, argv );
- MainView w;
- a.setMainWidget( &w );
- QPEApplication::showWidget( &w );
-
- LircHandler lh;
- if(!lh.isLircdRunning()) {
- QMessageBox mb("Error!",
- "Lircd is not running",
- QMessageBox::NoIcon,
- QMessageBox::Ok,
- QMessageBox::NoButton,
- QMessageBox::NoButton);
- mb.exec();
-
- }
-
- return a.exec();
+ QPEApplication a( argc, argv );
+
+ LircHandler lh;
+
+ lh.disableIrDA();
+ lh.setupModules();
+ lh.startLircd();
+ if(!lh.isLircdRunning()) {
+ QMessageBox::critical(NULL, QObject::tr("Error"),
+ QObject::tr("Unable to start lircd"),
+ QMessageBox::Ok, QMessageBox::NoButton);
+ }
+
+ MainView w;
+ a.setMainWidget( &w );
+ QPEApplication::showWidget( &w );
+ int result = a.exec();
+
+ lh.stopLircd();
+ lh.cleanupModules();
+
+ return result;
}