summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ChangeLog1
-rw-r--r--examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp8
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp73
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.h6
-rw-r--r--libopie2/opiecore/linux/oinputsystem.cpp38
-rw-r--r--libopie2/opiecore/linux/oinputsystem.h11
-rw-r--r--libopie2/opiecore/linux/oinputsystemenums.h405
-rw-r--r--libopie2/opiecore/linux_input.h25
-rw-r--r--libopie2/opiecore/oinputsystemenums.h13
-rw-r--r--noncore/settings/sysinfo/devicesinfo.cpp1
10 files changed, 165 insertions, 416 deletions
diff --git a/ChangeLog b/ChangeLog
index 3fc81f0..38b65c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -41,48 +41,49 @@
* n.a. - always show volume and wireless applet popups inside visible screen (deller)
* n.a. - scale O-Menu-Applets appropriately (mickeyl)
* n.a. - libopienet: fix bugs in wireless scanning and setting SSID (skyhusker)
* n.a. - Wellenreiter: relax WE version matching test a bit (mickeyl)
* n.a. - scale BluezApplet appropriately and use larger icons (mickeyl)
* n.a. - memoryapplet: fix crash in memoryapplet on kernels without swap support (seneca cunningham)
* n.a. - networksettings: ignore hostap control interfaces wifi* (mickeyl)
* n.a. - Today Addressbook plugin fix configuration to show/not show birthdays, use checkboxes for selection (hrw)
* n.a. - remove hardcoded font size from netsystemtime (hrw)
* n.a. - remove hardcoded font size from checkbook graphs (hrw)
* n.a. - Dagger - fixes for Sword 1.5.8, morph tag x-refs, closing last tab crash (drw)
Internal
--------
* Make BluezApplet use OTaskbarApplet (mickeyl)
* libopiecore: rewrite OFileNotification to use the Linux 2.6 inotify interface (mickeyl)
* libopiecore: add ODirNotification - recursive directory notifications (mickeyl)
* libopienet: Skip hostap control interfaces 'wifi' and improve robustness in ONetworkInterface (mickeyl)
* libopieui: Remove OVersatileView and OVersatileViewItem (mickeyl)
* libopienet: Miscellaneous API cleanups (mickeyl)
* libopiecore: Add linux pcmcia system abstraction classes (mickeyl)
* libopiecore: ODevice now knows the default gfx driver to use (mteira,mickeyl)
* libopiecore: Add support for the Sharp SL-C3100 "Borzoi" (mickeyl)
+ * libopiecore: Add support for the new Linux Inputsystem Switches type [necessary for auto rotation in 2.6.13] (mickeyl)
* Remove assumptions about default gfx driver ("Transformed") all over the place (mteira,mickeyl)
* Fix / Optimize number of scanned directories (ljp)
2005-03-25 Opie 1.2.0
Fixed Bugs
----------
* #1613 - AdvancedFM - scale toolbar icons appropriately (drw)
* #1620 - OFileSelector - show the button on press and not on press on hold (alwin)
* #1473 - Opie-Eye - Same as #1620 but we lack a common FileSystem Button class (zecke)
* n.a. - PackageManager - fix bug where messages show up multiple times in install dialog (drw)
* n.a. - make qpeglobal.h include qglobal.h (zecke)
2005-03-20 Opie 1.2.0-rc1
New Features
------------
* Launcher: Support a static background pixmap (mickeyl)
* LauncherSettings: Choose whether to have a static background pixmap (mickeyl)
* PackageManager supports the 'lists_dir' ipkg configuration option (drw)
* Added hi-res inline images for large resolution devices (drw)
* Improved launcher icons for consistency (ar)
* Datebook: Added plugin system to datebook so holidays and birthdays from contacts may displayed in datebook (alwin)
diff --git a/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp b/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
index 6c95048..b49df99 100644
--- a/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
+++ b/examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp
@@ -42,79 +42,83 @@ using namespace Opie::Core;
int main( int argc, char** argv )
{
OInputSystem* sys = OInputSystem::instance();
OInputSystem::DeviceIterator it = sys->iterator();
OInputDevice* dev = 0;
while ( it.current() )
{
odebug << "DEMO: OInputSystem contains OInputDevice '" << it.current()->name() << "'" << oendl;
dev = it.current();
QString features;
features += QString( "\nSynchronous: " );
if ( dev->hasFeature( OInputDevice::Synchronous ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nKeys or Buttons: " );
if ( dev->hasFeature( OInputDevice::Keys ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nRelative Axes: " );
if ( dev->hasFeature( OInputDevice::Relative ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nAbsolute Axes: " );
if ( dev->hasFeature( OInputDevice::Absolute ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nMiscellaneous: " );
if ( dev->hasFeature( OInputDevice::Miscellaneous ) ) features += "[ x ]"; else features += "[ ]";
+ features += QString( "\nSwitches: " );
+ if ( dev->hasFeature( OInputDevice::Switches ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nLeds: " );
if ( dev->hasFeature( OInputDevice::Leds ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nSound: " );
if ( dev->hasFeature( OInputDevice::Sound ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nAutoRepeat " );
if ( dev->hasFeature( OInputDevice::AutoRepeat ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nForceFeedback: " );
if ( dev->hasFeature( OInputDevice::ForceFeedback ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nPowerManagement: " );
if ( dev->hasFeature( OInputDevice::PowerManagement ) ) features += "[ x ]"; else features += "[ ]";
features += QString( "\nFeedbackStatus: " );
if ( dev->hasFeature( OInputDevice::ForceFeedbackStatus ) ) features += "[ x ]"; else features += "[ ]";
odebug << "========================================"
<< "\nDevice: " << dev->name()
<< "\nName: " << dev->identity()
<< "\nPath: " << dev->path()
<< "\nUniq: " << dev->uniq()
<< features << "\n"
<< oendl;
if ( dev->isHeld( OInputDevice::Key_LEFTSHIFT ) )
odebug << "Left Shift is being held." << oendl;
else odebug << "Left Shift is _not_ being held." << oendl;
if ( dev->isHeld( OInputDevice::Button_LEFT ) )
odebug << "Left Mouse Button is being held." << oendl;
else odebug << "Left Mouse Button is _not_ being held." << oendl;
odebug << "Global key mask: " << dev->globalKeyMask() << oendl;
-
+ odebug << "Global switch mask: " << dev->globalSwitchMask() << oendl;
+
+
++it;
}
}
#else
#include <fcntl.h>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <sys/types.h>
#include <linux/input.h>
using std::string;
const unsigned char BUT1 = 0x01;
const unsigned char BUT2 = 0x04;
const unsigned char BUT3 = 0x02;
const unsigned char BUT4 = 0x40;
const unsigned char BUT5 = 0x80;
#define BITMASK( name, numbits ) \
@@ -310,25 +314,25 @@ int main( int argc, char **argv )
if( ( buf[ 0 ] & 0x20 ) != 0 )
dy += 256;
printf( "( %d, %d )\t", dx, dy );
if( buf[ 0 ] & BUT1 )
printf( "Left\t" );
if( buf[ 0 ] & BUT2 )
printf( "Middle\t" );
if( buf[ 0 ] & BUT3 )
printf( "Right\t" );
printf( "\n" );
}
#endif
//close( fd );
exit( EXIT_SUCCESS );
hell:
exit( EXIT_FAILURE );
}
-#endif \ No newline at end of file
+#endif
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 33d5cd6..a75f566 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -23,48 +23,50 @@
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "odevice_zaurus.h"
/* OPIE */
#include <opie2/oinputsystem.h>
#include <opie2/oresource.h>
#include <qpe/config.h>
#include <qpe/sound.h>
/* QT */
#include <qapplication.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qwindowsystem_qws.h>
#include <qcopchannel_qws.h>
/* STD */
+#include <string.h>
+#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <unistd.h>
#ifndef QT_NO_SOUND
#include <linux/soundcard.h>
#endif
using namespace Opie::Core;
using namespace Opie::Core::Internal;
struct z_button z_buttons [] = {
{ Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
"devicebuttons/z_calendar",
"datebook", "nextView()",
"today", "raise()" },
{ Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
"devicebuttons/z_contact",
"addressbook", "raise()",
"addressbook", "beamBusinessCard()" },
{ Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
@@ -283,50 +285,52 @@ void Zaurus::init(const QString& cpu_info)
qDebug( "Zaurus::init() - Using the 2.4 Embedix HAL on a %s", (const char*) d->m_modelstr );
else
qDebug( "Zaurus::init() - Using the 2.6 OpenZaurus HAL on a %s", (const char*) d->m_modelstr );
}
void Zaurus::initButtons()
{
if ( d->m_buttons )
return;
d->m_buttons = new QValueList <ODeviceButton>;
struct z_button * pz_buttons;
int buttoncount;
switch ( d->m_model )
{
case Model_Zaurus_SL6000:
pz_buttons = z_buttons_6000;
buttoncount = ARRAY_SIZE(z_buttons_6000);
break;
case Model_Zaurus_SLC3100: // fallthrough
case Model_Zaurus_SLC3000: // fallthrough
case Model_Zaurus_SLC1000: // fallthrough
case Model_Zaurus_SLC7x0:
- if ( isQWS( ) ) {
- addPreHandler(this); // hinge-sensor-handler
+ if ( isQWS( ) )
+ { // setup hinge sensor stuff
+ addPreHandler(this);
+ initHingeSensor();
}
pz_buttons = z_buttons_c700;
buttoncount = ARRAY_SIZE(z_buttons_c700);
break;
default:
pz_buttons = z_buttons;
buttoncount = ARRAY_SIZE(z_buttons);
break;
}
for ( int i = 0; i < buttoncount; i++ ) {
struct z_button *zb = pz_buttons + i;
ODeviceButton b;
b.setKeycode( zb->code );
b.setUserText( QObject::tr( "Button", zb->utext ));
b.setPixmap( OResource::loadPixmap( zb->pix ));
b.setFactoryPresetPressedAction( OQCopMessage( makeChannel ( zb->fpressedservice ), zb->fpressedaction ));
b.setFactoryPresetHeldAction( OQCopMessage( makeChannel ( zb->fheldservice ), zb->fheldaction ));
d->m_buttons->append( b );
}
reloadButtonMapping();
}
@@ -641,55 +645,108 @@ OHingeStatus Zaurus::readHingeSensor() const
int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
if (handle == -1)
{
qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
return CASE_UNKNOWN;
}
else
{
int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
::close (handle);
if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
{
qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
return static_cast<OHingeStatus>( retval );
}
else
{
qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
return CASE_UNKNOWN;
}
}
}
else
{
- // corgi keyboard is event source 0 in OZ kernel 2.6
+ /*
+ * The corgi keyboard is event source 0 in OZ kernel 2.6.
+ * Hinge status is reported via Input System Switchs 0 and 1 like that:
+ *
+ * -------------------------
+ * | SW0 | SW1 | CASE |
+ * |-----|-----|-----------|
+ * | 0 0 Landscape |
+ * | 0 1 Portrait |
+ * | 1 0 Unknown |
+ * | 1 1 Closed |
+ * -------------------------
+ */
OInputDevice* keyboard = OInputSystem::instance()->device( "event0" );
- if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE;
- else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT;
- else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED;
- qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
- return CASE_UNKNOWN;
+ bool switch0 = true;
+ bool switch1 = false;
+ if ( keyboard )
+ {
+ switch0 = keyboard->isHeld( OInputDevice::Switch0 );
+ switch1 = keyboard->isHeld( OInputDevice::Switch1 );
+ }
+ if ( switch0 )
+ {
+ return switch1 ? CASE_CLOSED : CASE_UNKNOWN;
+ }
+ else
+ {
+ return switch1 ? CASE_PORTRAIT : CASE_LANDSCAPE;
+ }
+ }
+}
+
+void Zaurus::initHingeSensor()
+{
+ if ( m_embedix ) return;
+
+ m_hinge.setName( "/dev/input/event0" );
+ if ( !m_hinge.open( IO_ReadOnly ) )
+ {
+ qDebug( "Zaurus::init() - Couldn't open /dev/input/event0 for read (%s)", strerror( errno ) );
+ return;
+ }
+
+ QSocketNotifier* sn = new QSocketNotifier( m_hinge.handle(), QSocketNotifier::Read, this );
+ QObject::connect( sn, SIGNAL(activated(int)), this, SLOT(hingeSensorTriggered()) );
+}
+
+void Zaurus::hingeSensorTriggered()
+{
+ qDebug( "Zaurus::hingeSensorTriggered() - got event" );
+ struct input_event e;
+ if ( ::read( m_hinge.handle(), &e, sizeof e ) > 0 )
+ {
+ qDebug( "Zaurus::hingeSensorTriggered() - event has type %d, code %d, value %d", e.type, e.code, e.value );
+ if ( e.type != EV_SW ) return;
+ if ( readHingeSensor() != CASE_UNKNOWN )
+ {
+ qDebug( "Zaurus::hingeSensorTriggered() - got valid switch event, calling rotateDefault()" );
+ QCopChannel::send( "QPE/Rotation", "rotateDefault()" );
+ }
}
}
/*
* Take code from iPAQ device.
* That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction.
* I hope that is ok - Alwin
*/
bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
{
int newkeycode = keycode;
if ( !hasHingeSensor() ) return false;
/* map cursor keys depending on the hinge status */
switch ( keycode ) {
// Rotate cursor keys
case Key_Left :
case Key_Right:
case Key_Up :
case Key_Down :
{
if (rotation()==Rot90) {
newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h
index 677e29f..bf30bc6 100644
--- a/libopie2/opiecore/device/odevice_zaurus.h
+++ b/libopie2/opiecore/device/odevice_zaurus.h
@@ -12,48 +12,49 @@
     ._= =}       :
    .%`+i>       _;_.
    .i_,=:_.      -<s. 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
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
 :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef ODEVICE_ZAURUS
#define ODEVICE_ZAURUS
#include "odevice_abstractmobiledevice.h"
/* QT */
+#include <qfile.h>
#include <qwindowsystem_qws.h>
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#endif
// _IO and friends are only defined in kernel headers ...
#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
#define OD_IO(type,number) OD_IOC(0,type,number,0)
#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
// Audio
#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
#define SHARP_BUZ_KEYSOUND 2 /* key sound */
#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
@@ -78,68 +79,73 @@
#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
#define APM_EVT_POWER_BUTTON (1 << 0)
// Brightness Embedix
#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl"
#define SHARP_FL_IOCTL_ON 1
#define SHARP_FL_IOCTL_OFF 2
#define SHARP_FL_IOCTL_STEP_CONTRAST 100
#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101
#define SHARP_FL_IOCTL_GET_STEP 102
// Vesa Standard
#define FB_BLANK_UNBLANK 0
#define FB_BLANK_POWERDOWN 4
namespace Opie {
namespace Core {
namespace Internal {
class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter
{
protected:
virtual void init(const QString&);
virtual void initButtons();
+ void initHingeSensor();
+
+ protected slots:
+ void hingeSensorTriggered();
public:
virtual bool setDisplayBrightness( int b );
virtual bool setDisplayStatus( bool on );
virtual int displayBrightnessResolution() const;
virtual void playAlarmSound();
virtual void playKeySound();
virtual void playTouchSound();
virtual QValueList <OLed> ledList() const;
virtual QValueList <OLedState> ledStateList ( OLed led ) const;
virtual OLedState ledState( OLed led ) const;
virtual bool setLedState( OLed led, OLedState st );
virtual bool hasHingeSensor() const;
virtual OHingeStatus readHingeSensor() const;
virtual Transformation rotation() const;
virtual ODirection direction() const;
virtual bool suspend();
protected:
virtual void buzzer( int snd );
virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
QString m_backlightdev;
OLedState m_leds[1];
bool m_embedix;
+ QFile m_hinge;
};
struct z_button {
Qt::Key code;
char *utext;
char *pix;
char *fpressedservice;
char *fpressedaction;
char *fheldservice;
char *fheldaction;
};
}
}
}
#endif
diff --git a/libopie2/opiecore/linux/oinputsystem.cpp b/libopie2/opiecore/linux/oinputsystem.cpp
index bad27ed..ebc417f 100644
--- a/libopie2/opiecore/linux/oinputsystem.cpp
+++ b/libopie2/opiecore/linux/oinputsystem.cpp
@@ -167,56 +167,94 @@ bool OInputDevice::hasFeature( Feature bit ) const
perror( "EVIOCGBIT" );
return false;
}
else
return BIT_TEST( features, bit );
}
bool OInputDevice::isHeld( Key bit ) const
{
BIT_MASK( keys, KEY_MAX );
if( ioctl( _fd, EVIOCGKEY( sizeof(keys) ), keys ) < 0 )
{
perror( "EVIOCGKEY" );
return false;
}
else
{
return BIT_TEST( keys, bit );
}
}
+bool OInputDevice::isHeld( Switch bit ) const
+{
+ BIT_MASK( switches, SW_MAX );
+
+ if( ioctl( _fd, EVIOCGSW( sizeof(switches) ), switches ) < 0 )
+ {
+ perror( "EVIOCGSW" );
+ return false;
+ }
+ else
+ {
+ return BIT_TEST( switches, bit );
+ }
+}
+
+
QString OInputDevice::globalKeyMask() const
{
BIT_MASK( keys, KEY_MAX );
if( ioctl( _fd, EVIOCGKEY( sizeof(keys) ), keys ) < 0 )
{
perror( "EVIOCGKEY" );
return QString::null;
}
else
{
QString keymask;
for ( int i = 0; i < KEY_MAX; ++i )
{
if ( BIT_TEST( keys, i ) ) keymask.append( QString().sprintf( "%0d, ", i ) );
}
return keymask;
}
}
+QString OInputDevice::globalSwitchMask() const
+{
+ BIT_MASK( switches, SW_MAX );
+
+ if( ioctl( _fd, EVIOCGSW( sizeof(switches) ), switches ) < 0 )
+ {
+ perror( "EVIOCGSW" );
+ return QString::null;
+ }
+ else
+ {
+ QString switchmask;
+ for ( int i = 0; i < SW_MAX; ++i )
+ {
+ if ( BIT_TEST( switches, i ) ) switchmask.append( QString().sprintf( "%0d, ", i ) );
+ }
+ return switchmask;
+
+ }
+}
+
+
bool OInputDevice::isValid( const QString& path )
{
char buf[BUFSIZE] = "<unknown>";
int fd = ::open( (const char*) path, O_RDONLY );
if ( fd < 0 ) return false;
int res = ::ioctl( fd, EVIOCGNAME(sizeof buf), buf );
::close( fd );
return res >= 0;
}
diff --git a/libopie2/opiecore/linux/oinputsystem.h b/libopie2/opiecore/linux/oinputsystem.h
index 9676e73..fb5f498 100644
--- a/libopie2/opiecore/linux/oinputsystem.h
+++ b/libopie2/opiecore/linux/oinputsystem.h
@@ -73,70 +73,79 @@ class OInputSystem : public QObject
/**
* @internal Rebuild the internal interface database
* @note Sometimes it might be useful to call this from client code,
*/
void synchronize();
/**
* @internal destructor
*/
~OInputSystem();
protected:
OInputSystem();
static OInputSystem* _instance;
DeviceMap _devices;
};
class OInputDevice : public QObject
{
public:
OInputDevice( QObject* parent, const char* name = 0 );
~OInputDevice();
- #include "oinputsystemenums.h"
+ #include <opie2/oinputsystemenums.h>
public:
/**
* @returns the identity string of this input device
*/
QString identity() const;
/**
* @returns the path of this input device
*/
QString path() const;
/**
* @returns a unique identifier for this input device
* @note Only a few devices support this
*/
QString uniq() const;
/**
* @returns whether a certain @a Feature is being supported by this device
*/
bool hasFeature( Feature ) const;
/**
* @returns whether a given @a Key or Button is being held at the moment
*/
bool isHeld( Key ) const;
/**
+ * @returns whether a given @a Switch is being held at the moment
+ */
+ bool isHeld( Switch ) const;
+ /**
* @internal
* @returns a string containing a printable form of the global keymask
*/
+ QString globalSwitchMask() const;
+ /**
+ * @internal
+ * @returns a string containing a printable form of the global switchmask
+ */
QString globalKeyMask() const;
/**
* @internal
* @returns whether a certain @a path corresponds to an input device
*/
static bool isValid( const QString& path );
private:
int _fd;
input_id _id;
};
}
}
#endif // OINPUTSYSTEM_H
diff --git a/libopie2/opiecore/linux/oinputsystemenums.h b/libopie2/opiecore/linux/oinputsystemenums.h
deleted file mode 100644
index 3461e5a..0000000
--- a/libopie2/opiecore/linux/oinputsystemenums.h
+++ b/dev/null
@@ -1,405 +0,0 @@
-
- enum Feature
- {
- Synchronous = EV_SYN,
- Keys = EV_KEY,
- Relative = EV_REL,
- Absolute = EV_ABS,
- Miscellaneous = EV_MSC,
- Leds = EV_LED,
- Sound = EV_SND,
- AutoRepeat = EV_REP,
- ForceFeedback = EV_FF,
- PowerManagement = EV_PWR,
- ForceFeedbackStatus = EV_FF_STATUS,
- };
-
- enum Bus
- {
- PCI = BUS_PCI,
- ISAPNP = BUS_ISAPNP,
- HIL = BUS_HIL,
- BLUETOOTH = BUS_BLUETOOTH,
- ISA = BUS_ISA,
- I8042 = BUS_I8042,
- XTKBD = BUS_XTKBD,
- RS232 = BUS_RS232,
- GAMEPORT = BUS_GAMEPORT,
- PARPORT = BUS_PARPORT,
- AMIGA = BUS_AMIGA,
- ADB = BUS_ADB,
- I2C = BUS_I2C,
- HOST = BUS_HOST,
- };
-
- enum Key
- {
- Key_RESERVED = 0,
- Key_ESC = 1,
- Key_1 = 2,
- Key_2 = 3,
- Key_3 = 4,
- Key_4 = 5,
- Key_5 = 6,
- Key_6 = 7,
- Key_7 = 8,
- Key_8 = 9,
- Key_9 = 10,
- Key_0 = 11,
- Key_MINUS = 12,
- Key_EQUAL = 13,
- Key_BACKSPACE = 14,
- Key_TAB = 15,
- Key_Q = 16,
- Key_W = 17,
- Key_E = 18,
- Key_R = 19,
- Key_T = 20,
- Key_Y = 21,
- Key_U = 22,
- Key_I = 23,
- Key_O = 24,
- Key_P = 25,
- Key_LEFTBRACE = 26,
- Key_RIGHTBRACE = 27,
- Key_ENTER = 28,
- Key_LEFTCTRL = 29,
- Key_A = 30,
- Key_S = 31,
- Key_D = 32,
- Key_F = 33,
- Key_G = 34,
- Key_H = 35,
- Key_J = 36,
- Key_K = 37,
- Key_L = 38,
- Key_SEMICOLON = 39,
- Key_APOSTROPHE = 40,
- Key_GRAVE = 41,
- Key_LEFTSHIFT = 42,
- Key_BACKSLASH = 43,
- Key_Z = 44,
- Key_X = 45,
- Key_C = 46,
- Key_V = 47,
- Key_B = 48,
- Key_N = 49,
- Key_M = 50,
- Key_COMMA = 51,
- Key_DOT = 52,
- Key_SLASH = 53,
- Key_RIGHTSHIFT = 54,
- Key_KPASTERISK = 55,
- Key_LEFTALT = 56,
- Key_SPACE = 57,
- Key_CAPSLOCK = 58,
- Key_F1 = 59,
- Key_F2 = 60,
- Key_F3 = 61,
- Key_F4 = 62,
- Key_F5 = 63,
- Key_F6 = 64,
- Key_F7 = 65,
- Key_F8 = 66,
- Key_F9 = 67,
- Key_F10 = 68,
- Key_NUMLOCK = 69,
- Key_SCROLLLOCK = 70,
- Key_KP7 = 71,
- Key_KP8 = 72,
- Key_KP9 = 73,
- Key_KPMINUS = 74,
- Key_KP4 = 75,
- Key_KP5 = 76,
- Key_KP6 = 77,
- Key_KPPLUS = 78,
- Key_KP1 = 79,
- Key_KP2 = 80,
- Key_KP3 = 81,
- Key_KP0 = 82,
- Key_KPDOT = 83,
-
- Key_ZENKAKUHANKAKU = 85,
- Key_102ND = 86,
- Key_F11 = 87,
- Key_F12 = 88,
- Key_RO = 89,
- Key_KATAKANA = 90,
- Key_HIRAGANA = 91,
- Key_HENKAN = 92,
- Key_KATAKANAHIRAGANA = 93,
- Key_MUHENKAN = 94,
- Key_KPJPCOMMA = 95,
- Key_KPENTER = 96,
- Key_RIGHTCTRL = 97,
- Key_KPSLASH = 98,
- Key_SYSRQ = 99,
- Key_RIGHTALT = 100,
- Key_LINEFEED = 101,
- Key_HOME = 102,
- Key_UP = 103,
- Key_PAGEUP = 104,
- Key_LEFT = 105,
- Key_RIGHT = 106,
- Key_END = 107,
- Key_DOWN = 108,
- Key_PAGEDOWN = 109,
- Key_INSERT = 110,
- Key_DELETE = 111,
- Key_MACRO = 112,
- Key_MUTE = 113,
- Key_VOLUMEDOWN = 114,
- Key_VOLUMEUP = 115,
- Key_POWER = 116,
- Key_KPEQUAL = 117,
- Key_KPPLUSMINUS = 118,
- Key_PAUSE = 119,
-
- Key_KPCOMMA = 121,
- Key_HANGUEL = 122,
- Key_HANJA = 123,
- Key_YEN = 124,
- Key_LEFTMETA = 125,
- Key_RIGHTMETA = 126,
- Key_COMPOSE = 127,
-
- Key_STOP = 128,
- Key_AGAIN = 129,
- Key_PROPS = 130,
- Key_UNDO = 131,
- Key_FRONT = 132,
- Key_COPY = 133,
- Key_OPEN = 134,
- Key_PASTE = 135,
- Key_FIND = 136,
- Key_CUT = 137,
- Key_HELP = 138,
- Key_MENU = 139,
- Key_CALC = 140,
- Key_SETUP = 141,
- Key_SLEEP = 142,
- Key_WAKEUP = 143,
- Key_FILE = 144,
- Key_SENDFILE = 145,
- Key_DELETEFILE = 146,
- Key_XFER = 147,
- Key_PROG1 = 148,
- Key_PROG2 = 149,
- Key_WWW = 150,
- Key_MSDOS = 151,
- Key_COFFEE = 152,
- Key_DIRECTION = 153,
- Key_CYCLEWINDOWS = 154,
- Key_MAIL = 155,
- Key_BOOKMARKS = 156,
- Key_COMPUTER = 157,
- Key_BACK = 158,
- Key_FORWARD = 159,
- Key_CLOSECD = 160,
- Key_EJECTCD = 161,
- Key_EJECTCLOSECD = 162,
- Key_NEXTSONG = 163,
- Key_PLAYPAUSE = 164,
- Key_PREVIOUSSONG = 165,
- Key_STOPCD = 166,
- Key_RECORD = 167,
- Key_REWIND = 168,
- Key_PHONE = 169,
- Key_ISO = 170,
- Key_CONFIG = 171,
- Key_HOMEPAGE = 172,
- Key_REFRESH = 173,
- Key_EXIT = 174,
- Key_MOVE = 175,
- Key_EDIT = 176,
- Key_SCROLLUP = 177,
- Key_SCROLLDOWN = 178,
- Key_KPLEFTPAREN = 179,
- Key_KPRIGHTPAREN = 180,
-
- Key_F13 = 183,
- Key_F14 = 184,
- Key_F15 = 185,
- Key_F16 = 186,
- Key_F17 = 187,
- Key_F18 = 188,
- Key_F19 = 189,
- Key_F20 = 190,
- Key_F21 = 191,
- Key_F22 = 192,
- Key_F23 = 193,
- Key_F24 = 194,
-
- Key_PLAYCD = 200,
- Key_PAUSECD = 201,
- Key_PROG3 = 202,
- Key_PROG4 = 203,
- Key_SUSPEND = 205,
- Key_CLOSE = 206,
- Key_PLAY = 207,
- Key_FASTFORWARD = 208,
- Key_BASSBOOST = 209,
- Key_PRINT = 210,
- Key_HP = 211,
- Key_CAMERA = 212,
- Key_SOUND = 213,
- Key_QUESTION = 214,
- Key_EMAIL = 215,
- Key_CHAT = 216,
- Key_SEARCH = 217,
- Key_CONNECT = 218,
- Key_FINANCE = 219,
- Key_SPORT = 220,
- Key_SHOP = 221,
- Key_ALTERASE = 222,
- Key_CANCEL = 223,
- Key_BRIGHTNESSDOWN = 224,
- Key_BRIGHTNESSUP = 225,
- Key_MEDIA = 226,
-
- Key_UNKNOWN = 240,
-
- Button_MISC = 0x100,
- Button_0 = 0x100,
- Button_1 = 0x101,
- Button_2 = 0x102,
- Button_3 = 0x103,
- Button_4 = 0x104,
- Button_5 = 0x105,
- Button_6 = 0x106,
- Button_7 = 0x107,
- Button_8 = 0x108,
- Button_9 = 0x109,
-
- Button_MOUSE = 0x110,
- Button_LEFT = 0x110,
- Button_RIGHT = 0x111,
- Button_MIDDLE = 0x112,
- Button_SIDE = 0x113,
- Button_EXTRA = 0x114,
- Button_FORWARD = 0x115,
- Button_BACK = 0x116,
- Button_TASK = 0x117,
-
- Button_JOYSTICK = 0x120,
- Button_TRIGGER = 0x120,
- Button_THUMB = 0x121,
- Button_THUMB2 = 0x122,
- Button_TOP = 0x123,
- Button_TOP2 = 0x124,
- Button_PINKIE = 0x125,
- Button_BASE = 0x126,
- Button_BASE2 = 0x127,
- Button_BASE3 = 0x128,
- Button_BASE4 = 0x129,
- Button_BASE5 = 0x12a,
- Button_BASE6 = 0x12b,
- Button_DEAD = 0x12f,
-
- Button_GAMEPAD = 0x130,
- Button_A = 0x130,
- Button_B = 0x131,
- Button_C = 0x132,
- Button_X = 0x133,
- Button_Y = 0x134,
- Button_Z = 0x135,
- Button_TL = 0x136,
- Button_TR = 0x137,
- Button_TL2 = 0x138,
- Button_TR2 = 0x139,
- Button_SELECT = 0x13a,
- Button_START = 0x13b,
- Button_MODE = 0x13c,
- Button_THUMBL = 0x13d,
- Button_THUMBR = 0x13e,
-
- Button_DIGI = 0x140,
- Button_TOOL_PEN = 0x140,
- Button_TOOL_RUBBER = 0x141,
- Button_TOOL_BRUSH = 0x142,
- Button_TOOL_PENCIL = 0x143,
- Button_TOOL_AIRBRUSH = 0x144,
- Button_TOOL_FINGER = 0x145,
- Button_TOOL_MOUSE = 0x146,
- Button_TOOL_LENS = 0x147,
- Button_TOUCH = 0x14a,
- Button_STYLUS = 0x14b,
- Button_STYLUS2 = 0x14c,
- Button_TOOL_DOUBLETAP = 0x14d,
- Button_TOOL_TRIPLETAP = 0x14e,
-
- Button_WHEEL = 0x150,
- Button_GEAR_DOWN = 0x150,
- Button_GEAR_UP = 0x151,
-
- Key_OK = 0x160,
- Key_SELECT = 0x161,
- Key_GOTO = 0x162,
- Key_CLEAR = 0x163,
- Key_POWER2 = 0x164,
- Key_OPTION = 0x165,
- Key_INFO = 0x166,
- Key_TIME = 0x167,
- Key_VENDOR = 0x168,
- Key_ARCHIVE = 0x169,
- Key_PROGRAM = 0x16a,
- Key_CHANNEL = 0x16b,
- Key_FAVORITES = 0x16c,
- Key_EPG = 0x16d,
- Key_PVR = 0x16e,
- Key_MHP = 0x16f,
- Key_LANGUAGE = 0x170,
- Key_TITLE = 0x171,
- Key_SUBTITLE = 0x172,
- Key_ANGLE = 0x173,
- Key_ZOOM = 0x174,
- Key_MODE = 0x175,
- Key_KEYBOARD = 0x176,
- Key_SCREEN = 0x177,
- Key_PC = 0x178,
- Key_TV = 0x179,
- Key_TV2 = 0x17a,
- Key_VCR = 0x17b,
- Key_VCR2 = 0x17c,
- Key_SAT = 0x17d,
- Key_SAT2 = 0x17e,
- Key_CD = 0x17f,
- Key_TAPE = 0x180,
- Key_RADIO = 0x181,
- Key_TUNER = 0x182,
- Key_PLAYER = 0x183,
- Key_TEXT = 0x184,
- Key_DVD = 0x185,
- Key_AUX = 0x186,
- Key_MP3 = 0x187,
- Key_AUDIO = 0x188,
- Key_VIDEO = 0x189,
- Key_DIRECTORY = 0x18a,
- Key_LIST = 0x18b,
- Key_MEMO = 0x18c,
- Key_CALENDAR = 0x18d,
- Key_RED = 0x18e,
- Key_GREEN = 0x18f,
- Key_YELLOW = 0x190,
- Key_BLUE = 0x191,
- Key_CHANNELUP = 0x192,
- Key_CHANNELDOWN = 0x193,
- Key_FIRST = 0x194,
- Key_LAST = 0x195,
- Key_AB = 0x196,
- Key_NEXT = 0x197,
- Key_RESTART = 0x198,
- Key_SLOW = 0x199,
- Key_SHUFFLE = 0x19a,
- Key_BREAK = 0x19b,
- Key_PREVIOUS = 0x19c,
- Key_DIGITS = 0x19d,
- Key_TEEN = 0x19e,
- Key_TWEN = 0x19f,
-
- Key_DEL_EOL = 0x1c0,
- Key_DEL_EOS = 0x1c1,
- Key_INS_LINE = 0x1c2,
- Key_DEL_LINE = 0x1c3,
- };
-
diff --git a/libopie2/opiecore/linux_input.h b/libopie2/opiecore/linux_input.h
index b7a30bb..2df8a59 100644
--- a/libopie2/opiecore/linux_input.h
+++ b/libopie2/opiecore/linux_input.h
@@ -45,68 +45,70 @@ struct input_id {
__u16 product;
__u16 version;
};
struct input_absinfo {
__s32 value;
__s32 minimum;
__s32 maximum;
__s32 fuzz;
__s32 flat;
};
#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
#define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */
#define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */
#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */
#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */
#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */
#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */
#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */
+#define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len) /* get all switch states */
#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */
#define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, struct input_absinfo) /* set abs value/limits */
#define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */
#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */
/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
+#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
/*
* Synchronization events.
*/
#define SYN_REPORT 0
#define SYN_CONFIG 1
/*
* Keys and buttons
*/
#define KEY_RESERVED 0
#define KEY_ESC 1
#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
@@ -500,48 +502,62 @@ struct input_absinfo {
#define ABS_RZ 0x05
#define ABS_THROTTLE 0x06
#define ABS_RUDDER 0x07
#define ABS_WHEEL 0x08
#define ABS_GAS 0x09
#define ABS_BRAKE 0x0a
#define ABS_HAT0X 0x10
#define ABS_HAT0Y 0x11
#define ABS_HAT1X 0x12
#define ABS_HAT1Y 0x13
#define ABS_HAT2X 0x14
#define ABS_HAT2Y 0x15
#define ABS_HAT3X 0x16
#define ABS_HAT3Y 0x17
#define ABS_PRESSURE 0x18
#define ABS_DISTANCE 0x19
#define ABS_TILT_X 0x1a
#define ABS_TILT_Y 0x1b
#define ABS_TOOL_WIDTH 0x1c
#define ABS_VOLUME 0x20
#define ABS_MISC 0x28
#define ABS_MAX 0x3f
/*
+ * Switch events
+ */
+
+#define SW_0 0x00
+#define SW_1 0x01
+#define SW_2 0x02
+#define SW_3 0x03
+#define SW_4 0x04
+#define SW_5 0x05
+#define SW_6 0x06
+#define SW_7 0x07
+#define SW_MAX 0x0f
+
+/*
* Misc events
*/
#define MSC_SERIAL 0x00
#define MSC_PULSELED 0x01
#define MSC_GESTURE 0x02
#define MSC_MAX 0x07
/*
* LEDs
*/
#define LED_NUML 0x00
#define LED_CAPSL 0x01
#define LED_SCROLLL 0x02
#define LED_COMPOSE 0x03
#define LED_KANA 0x04
#define LED_SLEEP 0x05
#define LED_SUSPEND 0x06
#define LED_MUTE 0x07
#define LED_MISC 0x08
#define LED_MAX 0x0f
/*
@@ -769,127 +785,131 @@ struct ff_effect {
__old = k[scancode]; \
k[scancode] = val; \
break; \
} \
} \
__old; })
struct input_dev {
void *private;
char *name;
char *phys;
char *uniq;
struct input_id id;
unsigned long evbit[NBITS(EV_MAX)];
unsigned long keybit[NBITS(KEY_MAX)];
unsigned long relbit[NBITS(REL_MAX)];
unsigned long absbit[NBITS(ABS_MAX)];
unsigned long mscbit[NBITS(MSC_MAX)];
unsigned long ledbit[NBITS(LED_MAX)];
unsigned long sndbit[NBITS(SND_MAX)];
unsigned long ffbit[NBITS(FF_MAX)];
+ unsigned long swbit[NBITS(SW_MAX)];
int ff_effects_max;
unsigned int keycodemax;
unsigned int keycodesize;
void *keycode;
unsigned int repeat_key;
struct timer_list timer;
struct pm_dev *pm_dev;
struct pt_regs *regs;
int state;
int sync;
int abs[ABS_MAX + 1];
int rep[REP_MAX + 1];
unsigned long key[NBITS(KEY_MAX)];
unsigned long led[NBITS(LED_MAX)];
unsigned long snd[NBITS(SND_MAX)];
+ unsigned long sw[NBITS(SW_MAX)];
int absmax[ABS_MAX + 1];
int absmin[ABS_MAX + 1];
int absfuzz[ABS_MAX + 1];
int absflat[ABS_MAX + 1];
int (*open)(struct input_dev *dev);
void (*close)(struct input_dev *dev);
int (*accept)(struct input_dev *dev, struct file *file);
int (*flush)(struct input_dev *dev, struct file *file);
int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
int (*erase_effect)(struct input_dev *dev, int effect_id);
struct input_handle *grab;
struct device *dev;
struct list_head h_list;
struct list_head node;
};
/*
* Structure for hotplug & device<->driver matching.
*/
#define INPUT_DEVICE_ID_MATCH_BUS 1
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
#define INPUT_DEVICE_ID_MATCH_VERSION 8
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
+#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
#define INPUT_DEVICE_ID_MATCH_DEVICE\
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
struct input_device_id {
unsigned long flags;
struct input_id id;
unsigned long evbit[NBITS(EV_MAX)];
unsigned long keybit[NBITS(KEY_MAX)];
unsigned long relbit[NBITS(REL_MAX)];
unsigned long absbit[NBITS(ABS_MAX)];
unsigned long mscbit[NBITS(MSC_MAX)];
unsigned long ledbit[NBITS(LED_MAX)];
unsigned long sndbit[NBITS(SND_MAX)];
unsigned long ffbit[NBITS(FF_MAX)];
+ unsigned long swbit[NBITS(SW_MAX)];
unsigned long driver_info;
};
struct input_handle;
struct input_handler {
void *private;
void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id);
void (*disconnect)(struct input_handle *handle);
struct file_operations *fops;
int minor;
char *name;
struct input_device_id *id_table;
struct input_device_id *blacklist;
struct list_head h_list;
struct list_head node;
};
@@ -940,48 +960,53 @@ static inline void input_report_key(struct input_dev *dev, unsigned int code, in
{
input_event(dev, EV_KEY, code, !!value);
}
static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_REL, code, value);
}
static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_ABS, code, value);
}
static inline void input_report_ff(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_FF, code, value);
}
static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_FF_STATUS, code, value);
}
+static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_SW, code, !!value);
+}
+
static inline void input_regs(struct input_dev *dev, struct pt_regs *regs)
{
dev->regs = regs;
}
static inline void input_sync(struct input_dev *dev)
{
input_event(dev, EV_SYN, SYN_REPORT, 0);
dev->regs = NULL;
}
static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)
{
dev->absmin[axis] = min;
dev->absmax[axis] = max;
dev->absfuzz[axis] = fuzz;
dev->absflat[axis] = flat;
dev->absbit[LONG(axis)] |= BIT(axis);
}
extern struct class_simple *input_class;
#endif
diff --git a/libopie2/opiecore/oinputsystemenums.h b/libopie2/opiecore/oinputsystemenums.h
index 3461e5a..728423a 100644
--- a/libopie2/opiecore/oinputsystemenums.h
+++ b/libopie2/opiecore/oinputsystemenums.h
@@ -1,58 +1,71 @@
enum Feature
{
Synchronous = EV_SYN,
Keys = EV_KEY,
Relative = EV_REL,
Absolute = EV_ABS,
Miscellaneous = EV_MSC,
+ Switches = EV_SW,
Leds = EV_LED,
Sound = EV_SND,
AutoRepeat = EV_REP,
ForceFeedback = EV_FF,
PowerManagement = EV_PWR,
ForceFeedbackStatus = EV_FF_STATUS,
};
enum Bus
{
PCI = BUS_PCI,
ISAPNP = BUS_ISAPNP,
HIL = BUS_HIL,
BLUETOOTH = BUS_BLUETOOTH,
ISA = BUS_ISA,
I8042 = BUS_I8042,
XTKBD = BUS_XTKBD,
RS232 = BUS_RS232,
GAMEPORT = BUS_GAMEPORT,
PARPORT = BUS_PARPORT,
AMIGA = BUS_AMIGA,
ADB = BUS_ADB,
I2C = BUS_I2C,
HOST = BUS_HOST,
};
+ enum Switch
+ {
+ Switch0 = SW_0,
+ Switch1 = SW_1,
+ Switch2 = SW_2,
+ Switch3 = SW_3,
+ Switch4 = SW_4,
+ Switch5 = SW_5,
+ Switch6 = SW_6,
+ Switch7 = SW_7,
+ };
+
enum Key
{
Key_RESERVED = 0,
Key_ESC = 1,
Key_1 = 2,
Key_2 = 3,
Key_3 = 4,
Key_4 = 5,
Key_5 = 6,
Key_6 = 7,
Key_7 = 8,
Key_8 = 9,
Key_9 = 10,
Key_0 = 11,
Key_MINUS = 12,
Key_EQUAL = 13,
Key_BACKSPACE = 14,
Key_TAB = 15,
Key_Q = 16,
Key_W = 17,
Key_E = 18,
Key_R = 19,
Key_T = 20,
Key_Y = 21,
diff --git a/noncore/settings/sysinfo/devicesinfo.cpp b/noncore/settings/sysinfo/devicesinfo.cpp
index 76c9b79..176d178 100644
--- a/noncore/settings/sysinfo/devicesinfo.cpp
+++ b/noncore/settings/sysinfo/devicesinfo.cpp
@@ -376,48 +376,49 @@ CardDevice::~CardDevice()
//=================================================================================================
InputDevice::InputDevice( Category* parent, const QString& name )
:Device( parent, name )
{
OListView* w = new OListView( devinfo );
details = w;
w->addColumn( "Info" );
w->addColumn( "Value" );
w->hide();
}
void InputDevice::setInfo( const OInputDevice* dev )
{
new OListViewItem( (OListView*) details, "Identity", dev->identity() );
new OListViewItem( (OListView*) details, "Path", dev->path() );
new OListViewItem( (OListView*) details, "Unique", dev->uniq() );
QStringList text;
if ( dev->hasFeature( OInputDevice::Synchronous ) ) text += "Synchronous";
if ( dev->hasFeature( OInputDevice::Keys ) ) text += "Keys";
if ( dev->hasFeature( OInputDevice::Relative ) ) text += "Relative";
if ( dev->hasFeature( OInputDevice::Absolute ) ) text += "Absolute";
if ( dev->hasFeature( OInputDevice::Miscellaneous ) ) text += "Miscellaneous";
+ if ( dev->hasFeature( OInputDevice::Switches ) ) text += "Switches";
if ( dev->hasFeature( OInputDevice::Leds ) ) text += "Leds";
if ( dev->hasFeature( OInputDevice::Sound ) ) text += "Sound";
if ( dev->hasFeature( OInputDevice::AutoRepeat ) ) text += "AutoRepeat";
if ( dev->hasFeature( OInputDevice::ForceFeedback ) ) text += "ForceFeedback";
if ( dev->hasFeature( OInputDevice::PowerManagement ) ) text += "PowerManagement";
if ( dev->hasFeature( OInputDevice::ForceFeedbackStatus ) ) text += "ForceFeedbackStatus";
new OListViewItem( (OListView*) details, "Features", text.join( ", " ) );
}
InputDevice::~InputDevice()
{
}
//=================================================================================================
UsbDevice::UsbDevice( Category* parent, const QString& name )
:Device( parent, name )
{
details = new QPushButton( name, devinfo );
details->hide();
}
//=================================================================================================
UsbDevice::UsbDevice( UsbDevice* parent, const QString& name )