-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | examples/opiecore/oinputsystemdemo/oinputsystemdemo.cpp | 4 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.cpp | 73 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.h | 6 | ||||
-rw-r--r-- | libopie2/opiecore/linux/oinputsystem.cpp | 38 | ||||
-rw-r--r-- | libopie2/opiecore/linux/oinputsystem.h | 11 | ||||
-rw-r--r-- | libopie2/opiecore/linux/oinputsystemenums.h | 405 | ||||
-rw-r--r-- | libopie2/opiecore/linux_input.h | 25 | ||||
-rw-r--r-- | libopie2/opiecore/oinputsystemenums.h | 13 | ||||
-rw-r--r-- | noncore/settings/sysinfo/devicesinfo.cpp | 1 |
10 files changed, 163 insertions, 414 deletions
@@ -49,32 +49,33 @@ * 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 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 @@ -50,62 +50,66 @@ int main( int argc, char** argv ) { 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> 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 @@ -31,32 +31,34 @@ /* 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"), @@ -291,34 +293,36 @@ void Zaurus::initButtons() 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 )); @@ -649,39 +653,92 @@ OHingeStatus Zaurus::readHingeSensor() const 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 ) { 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 @@ -20,32 +20,33 @@ ++= -. .` .: 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 @@ -86,60 +87,65 @@ #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 @@ -175,48 +175,86 @@ bool OInputDevice::hasFeature( Feature bit ) const 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 @@ -81,60 +81,69 @@ class OInputSystem : public QObject ~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; }; } } 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 @@ -53,52 +53,54 @@ struct input_absinfo { __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 /* @@ -508,32 +510,46 @@ struct input_absinfo { #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 @@ -777,53 +793,55 @@ 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; @@ -836,52 +854,54 @@ struct input_dev { * 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; @@ -948,32 +968,37 @@ static inline void input_report_rel(struct input_dev *dev, unsigned int code, in 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; 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,50 +1,63 @@ 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, 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 @@ -384,32 +384,33 @@ InputDevice::InputDevice( Category* parent, const QString& name ) 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 ) |