summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-02-04 17:45:50 (UTC)
committer mickeyl <mickeyl>2005-02-04 17:45:50 (UTC)
commitc0248a2c02381b5a5dce5c4543db6ff46486f2f1 (patch) (unidiff)
treed0aa40497fe90875a273d2e0dbbfc65608f23b43
parent276022cd2a84f531bbf727c34d76420d8195512d (diff)
downloadopie-c0248a2c02381b5a5dce5c4543db6ff46486f2f1.zip
opie-c0248a2c02381b5a5dce5c4543db6ff46486f2f1.tar.gz
opie-c0248a2c02381b5a5dce5c4543db6ff46486f2f1.tar.bz2
use a sane method to discover valid device nodes
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiecore/oinputsystem.cpp32
-rw-r--r--libopie2/opiecore/oinputsystem.h5
2 files changed, 33 insertions, 4 deletions
diff --git a/libopie2/opiecore/oinputsystem.cpp b/libopie2/opiecore/oinputsystem.cpp
index d1a28f5..a2306ca 100644
--- a/libopie2/opiecore/oinputsystem.cpp
+++ b/libopie2/opiecore/oinputsystem.cpp
@@ -30,6 +30,7 @@
30using namespace Opie::Core; 30using namespace Opie::Core;
31 31
32/* QT */ 32/* QT */
33#include <qdir.h>
33#include <qfile.h> 34#include <qfile.h>
34 35
35/* STD */ 36/* STD */
@@ -37,6 +38,7 @@ using namespace Opie::Core;
37#include <string.h> 38#include <string.h>
38#include <sys/fcntl.h> 39#include <sys/fcntl.h>
39#include <sys/ioctl.h> 40#include <sys/ioctl.h>
41#include <unistd.h>
40 42
41#define BUFSIZE 256 43#define BUFSIZE 256
42#define BIT_MASK( name, numbits ) \ 44#define BIT_MASK( name, numbits ) \
@@ -61,11 +63,22 @@ OInputSystem::OInputSystem() : QObject()
61void OInputSystem::synchronize() 63void OInputSystem::synchronize()
62{ 64{
63 qDebug( "OInputSystem::synchronize()" ); 65 qDebug( "OInputSystem::synchronize()" );
64 if ( QFile::exists( "/dev/input/event0" ) ) _devices.insert( "0", new OInputDevice( this, "/dev/input/event0" ) ); 66 QDir devInput( "/dev/input/" );
65 if ( QFile::exists( "/dev/input/event1" ) ) _devices.insert( "1", new OInputDevice( this, "/dev/input/event1" ) ); 67 if ( devInput.exists() )
66 if ( QFile::exists( "/dev/input/event2" ) ) _devices.insert( "2", new OInputDevice( this, "/dev/input/event2" ) ); 68 {
67 if ( QFile::exists( "/dev/input/event3" ) ) _devices.insert( "3", new OInputDevice( this, "/dev/input/event3" ) ); 69 QStringList devInputFiles = devInput.entryList( QDir::System, QDir::Name );
70 for ( QStringList::Iterator it = devInputFiles.begin(); it != devInputFiles.end(); ++it )
71 {
72 QString absPath = devInput.absFilePath( *it );
73 bool isValid = OInputDevice::isValid( absPath );
74 qDebug( "OInputSystem::synchronize() - checking if '%s' is a valid input system node... '%s'",
75 (const char*) absPath, isValid ? "yes" : "no" );
76 if ( isValid ) _devices.insert( *it, new OInputDevice( this, absPath ) );
77 }
78 }
68 qDebug( "OInputSystem::synchronize() done" ); 79 qDebug( "OInputSystem::synchronize() done" );
80 if ( !_devices.count() )
81 qWarning( "OInputSystem::no devices found" );
69} 82}
70 83
71 84
@@ -195,3 +208,14 @@ QString OInputDevice::globalKeyMask() const
195 } 208 }
196} 209}
197 210
211
212bool OInputDevice::isValid( const QString& path )
213{
214 char buf[BUFSIZE] = "<unknown>";
215 int fd = ::open( (const char*) path, O_RDONLY );
216 if ( fd < 0 ) return false;
217 int res = ::ioctl( fd, EVIOCGNAME(sizeof buf), buf );
218 ::close( fd );
219 return res >= 0;
220}
221
diff --git a/libopie2/opiecore/oinputsystem.h b/libopie2/opiecore/oinputsystem.h
index 7919610..6f822a1 100644
--- a/libopie2/opiecore/oinputsystem.h
+++ b/libopie2/opiecore/oinputsystem.h
@@ -123,6 +123,11 @@ class OInputDevice : public QObject
123 * @returns a string containing a printable form of the global keymask 123 * @returns a string containing a printable form of the global keymask
124 */ 124 */
125 QString globalKeyMask() const; 125 QString globalKeyMask() const;
126 /**
127 * @internal
128 * @returns whether a certain @a path corresponds to an input device
129 */
130 static bool isValid( const QString& path );
126 131
127 private: 132 private:
128 int _fd; 133 int _fd;