author | paule <paule> | 2007-02-06 04:51:37 (UTC) |
---|---|---|
committer | paule <paule> | 2007-02-06 04:51:37 (UTC) |
commit | 97b2152a21890f05a2217dddfcba6c820c00aa24 (patch) (side-by-side diff) | |
tree | 55b859fbea71840f15368ec7b4b9e2de2c4f9879 /noncore/tools | |
parent | a505f79190d4d14a7c9595af3e9b78d9c613da21 (diff) | |
download | opie-97b2152a21890f05a2217dddfcba6c820c00aa24.zip opie-97b2152a21890f05a2217dddfcba6c820c00aa24.tar.gz opie-97b2152a21890f05a2217dddfcba6c820c00aa24.tar.bz2 |
Start lircd on application start, and stop it on quit
-rw-r--r-- | noncore/tools/remote/lirchandler.cpp | 25 | ||||
-rw-r--r-- | noncore/tools/remote/lirchandler.h | 5 | ||||
-rw-r--r-- | noncore/tools/remote/remote.cpp | 28 |
3 files changed, 45 insertions, 13 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 @@ -1,53 +1,53 @@ /* Opie-Remote. emulates remote controls on an iPaq (and maybe a Zaurus) in Opie. 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 */ #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); } bool LircHandler::connectLirc(void) { fd = socket(AF_UNIX, SOCK_STREAM, 0); if(fd == -1) { QMessageBox mb(QObject::tr("Error"), QObject::tr("Unable to create socket"), @@ -247,24 +247,47 @@ int LircHandler::sendIR(const char *lircaction) done=true; } } ::close(fd); return 1; } else return 0; } 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 @@ -1,38 +1,43 @@ /* Opie-Remote. emulates remote controls on an iPaq (and maybe a Zaurus) in Opie. 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 @@ -19,42 +19,46 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA /* OPIE */ #include <qpe/qpeapplication.h> #include <qpe/config.h> /* QT */ #include <qpushbutton.h> #include <qtabwidget.h> #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(); + 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); } - return a.exec(); + MainView w; + a.setMainWidget( &w ); + QPEApplication::showWidget( &w ); + int result = a.exec(); + + lh.stopLircd(); + lh.cleanupModules(); + + return result; } |