author | erik <erik> | 2007-02-09 17:47:29 (UTC) |
---|---|---|
committer | erik <erik> | 2007-02-09 17:47:29 (UTC) |
commit | b3cde0d17f52f996c04a55de90583ca60a7e0210 (patch) (side-by-side diff) | |
tree | d088372023f1031c9ae7a37e66c42c6d8c4e3d25 | |
parent | 98353ac16bb90ee4b5df18945acf4fa7f05f9a85 (diff) | |
download | opie-b3cde0d17f52f996c04a55de90583ca60a7e0210.zip opie-b3cde0d17f52f996c04a55de90583ca60a7e0210.tar.gz opie-b3cde0d17f52f996c04a55de90583ca60a7e0210.tar.bz2 |
This commit makes all supported models bit unique from each other within
their respective families. It also makes the model families bit unique with
each other. This patch makes button (and general device features) not
overlap. This fixes Opie bug 1836.
Thanks goes out to Paul E. (aka BlueLightning) for originally reporting
this problem and providing the text for a reasonable near-term solution. On
top of all that, Paul even test the patch that this commit is based on,
confirming that it was a reasonable solution.
For those of you out there who support distros for the other model families,
please be careful. And note that we have not tested on any of model family
but iPAQs. We don't anticipate any problems, but be careful out there.
-rw-r--r-- | libopie2/opiecore/device/odevice.h | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h index 1eb5959..c6306e7 100644 --- a/libopie2/opiecore/device/odevice.h +++ b/libopie2/opiecore/device/odevice.h @@ -1,416 +1,421 @@ /* This file is part of the Opie Project (C) 2002-2006 The Opie Team <opie-devel@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; version 2 of the License. ._= =} : .%`+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_H_ #define ODEVICE_H_ /* OPIE */ #include <opie2/odevicebutton.h> #include <qpe/qpeapplication.h> /* for Transformation enum.. */ /* QT */ #include <qnamespace.h> #include <qobject.h> #include <qstring.h> #include <qstrlist.h> #include <qwindowsystem_qws.h> class Sound; namespace Opie{ namespace Core{ class ODeviceData; /** * The available devices */ enum OModel { Model_Unknown, // = 0 Model_Series_Mask = 0xffff0000, Model_iPAQ = ( 1 << 16 ), Model_iPAQ_All = ( Model_iPAQ | 0xffff ), Model_iPAQ_H31xx = ( Model_iPAQ | 0x0001 ), Model_iPAQ_H36xx = ( Model_iPAQ | 0x0002 ), - Model_iPAQ_H37xx = ( Model_iPAQ | 0x0003 ), - Model_iPAQ_H38xx = ( Model_iPAQ | 0x0004 ), - Model_iPAQ_H39xx = ( Model_iPAQ | 0x0005 ), - Model_iPAQ_H5xxx = ( Model_iPAQ | 0x0006 ), - Model_iPAQ_H22xx = ( Model_iPAQ | 0x0007 ), - Model_iPAQ_H191x = ( Model_iPAQ | 0x0008 ), - Model_iPAQ_H1940 = ( Model_iPAQ | 0x0009 ), - Model_iPAQ_HX4700 = ( Model_iPAQ | 0x000A ), - Model_iPAQ_H4xxx = ( Model_iPAQ | 0x000b ), - Model_Jornada = ( 6 << 16 ), + Model_iPAQ_H37xx = ( Model_iPAQ | 0x0004 ), + Model_iPAQ_H38xx = ( Model_iPAQ | 0x0008 ), + Model_iPAQ_H39xx = ( Model_iPAQ | 0x0010 ), + Model_iPAQ_H5xxx = ( Model_iPAQ | 0x0020 ), + Model_iPAQ_H22xx = ( Model_iPAQ | 0x0040 ), + Model_iPAQ_H191x = ( Model_iPAQ | 0x0080 ), + Model_iPAQ_H1940 = ( Model_iPAQ | 0x0100 ), + Model_iPAQ_HX4700 = ( Model_iPAQ | 0x0200 ), + Model_iPAQ_H4xxx = ( Model_iPAQ | 0x0400 ), + + Model_Jornada = ( 3 << 17 ), + Model_Jornada_56x = ( Model_Jornada | 0x0001 ), Model_Jornada_720 = ( Model_Jornada | 0x0002 ), - Model_Jornada_820 = ( Model_Jornada | 0x0003 ), + Model_Jornada_820 = ( Model_Jornada | 0x0004 ), Model_Zaurus = ( 2 << 16 ), Model_Zaurus_SL5000 = ( Model_Zaurus | 0x0001 ), Model_Zaurus_SL5500 = ( Model_Zaurus | 0x0002 ), - Model_Zaurus_SLA300 = ( Model_Zaurus | 0x0003 ), - Model_Zaurus_SLB600 = ( Model_Zaurus | 0x0004 ), - Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x0005 ), - Model_Zaurus_SL6000 = ( Model_Zaurus | 0x0006 ), - Model_Zaurus_SLC3000 = ( Model_Zaurus | 0x0007 ), - Model_Zaurus_SLC1000 = ( Model_Zaurus | 0x0008 ), - Model_Zaurus_SLC3100 = ( Model_Zaurus | 0x0009 ), + Model_Zaurus_SLA300 = ( Model_Zaurus | 0x0004 ), + Model_Zaurus_SLB600 = ( Model_Zaurus | 0x0008 ), + Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x0010 ), + Model_Zaurus_SL6000 = ( Model_Zaurus | 0x0020 ), + Model_Zaurus_SLC3000 = ( Model_Zaurus | 0x0040 ), + Model_Zaurus_SLC1000 = ( Model_Zaurus | 0x0080 ), + Model_Zaurus_SLC3100 = ( Model_Zaurus | 0x0100 ), Model_SIMpad = ( 3 << 16 ), Model_SIMpad_All = ( Model_SIMpad | 0xffff ), Model_SIMpad_CL4 = ( Model_SIMpad | 0x0001 ), Model_SIMpad_SL4 = ( Model_SIMpad | 0x0002 ), - Model_SIMpad_SLC = ( Model_SIMpad | 0x0003 ), - Model_SIMpad_TSinus = ( Model_SIMpad | 0x0004 ), + Model_SIMpad_SLC = ( Model_SIMpad | 0x0004 ), + Model_SIMpad_TSinus = ( Model_SIMpad | 0x0008 ), Model_Ramses = ( 4 << 16 ), Model_Ramses_All = ( Model_Ramses | 0xffff ), Model_Ramses_MNCI = ( Model_Ramses | 0x0001 ), Model_Ramses_MNCIRX = ( Model_Ramses | 0x0002 ), Model_Yopy = ( 5 << 16 ), Model_Yopy_All = ( Model_Yopy | 0xffff ), Model_Yopy_3000 = ( Model_Yopy | 0x0001 ), Model_Yopy_3500 = ( Model_Yopy | 0x0002 ), - Model_Yopy_3700 = ( Model_Yopy | 0x0003 ), + Model_Yopy_3700 = ( Model_Yopy | 0x0004 ), Model_Beagle = ( 6 << 16 ), Model_Beagle_All = ( Model_Beagle | 0xffff ), Model_Beagle_PA100 = ( Model_Beagle | 0x0001 ), Model_GenuineIntel = ( 7 << 16 ), Model_MyPal = ( 8 << 16 ), Model_MyPal_All = ( Model_MyPal | 0xffff ), Model_MyPal_620 = ( Model_MyPal | 0x0001 ), Model_MyPal_716 = ( Model_MyPal | 0x0002 ), - Model_MyPal_730 = ( Model_MyPal | 0x0003 ), + Model_MyPal_730 = ( Model_MyPal | 0x0004 ), Model_HTC = ( 9 << 16 ), + Model_HTC_All = ( Model_HTC | 0xffff ), Model_HTC_Universal = ( Model_HTC | 0x0001 ), Model_HTC_Alpine = ( Model_HTC | 0x0002 ), - Model_HTC_Apache = ( Model_HTC | 0x0003 ), - Model_HTC_Beetles = ( Model_HTC | 0x0004 ), - Model_HTC_Blueangel = ( Model_HTC | 0x0005 ), - Model_HTC_Himalaya = ( Model_HTC | 0x0006 ), - Model_HTC_Magician = ( Model_HTC | 0x0007 ), + Model_HTC_Apache = ( Model_HTC | 0x0004 ), + Model_HTC_Beetles = ( Model_HTC | 0x0008 ), + Model_HTC_Blueangel = ( Model_HTC | 0x0010 ), + Model_HTC_Himalaya = ( Model_HTC | 0x0020 ), + Model_HTC_Magician = ( Model_HTC | 0x0040 ), + + Model_Motorola = ( 2 << 17 ), - Model_Motorola = ( 9 << 17 ), Model_Motorola_All = ( Model_Motorola | 0xffff ), Model_Motorola_EZX = ( Model_Motorola | 0x0001 ), - Model_Palm = ( 10 << 16), + Model_Palm = ( 1 << 17), + Model_Palm_All = ( Model_Palm | 0xffff ), Model_Palm_LD = ( Model_Palm | 0x0001 ), Model_Palm_TX = ( Model_Palm | 0x0002 ), - Model_Palm_Z72 = ( Model_Palm | 0x0003 ), + Model_Palm_Z72 = ( Model_Palm | 0x0004 ), }; /** * The vendor of the device */ enum OVendor { Vendor_Unknown, Vendor_HP, Vendor_Sharp, Vendor_SIEMENS, Vendor_MundN, Vendor_GMate, Vendor_MasterIA, Vendor_GenuineIntel, Vendor_Asus, Vendor_HTC, Vendor_Motorola, Vendor_Palm, }; /** * The System used */ enum OSystem { System_Unknown, System_Familiar, System_Zaurus, System_OpenZaurus, System_Linupy, System_OpenEmbedded, System_PC, System_OpenEZX, System_Angstrom, }; typedef struct { OSystem system; char* sysstr; char* sysvfile; } ODistribution; extern ODistribution distributions[]; enum OLedState { Led_Off, Led_On, Led_BlinkSlow, Led_BlinkFast }; enum OLed { Led_Mail, Led_Power, Led_BlueTooth }; enum OHardKey { HardKey_Datebook = Qt::Key_F9, HardKey_Contacts = Qt::Key_F10, HardKey_Menu = Qt::Key_F11, HardKey_Home = Qt::Key_F12, HardKey_Mail = Qt::Key_F13, HardKey_Record = Qt::Key_F24, HardKey_Suspend = Qt::Key_F34, HardKey_Backlight = Qt::Key_F35, HardKey_Action = Qt::Key_F10, HardKey_OK = Qt::Key_F11, HardKey_End = Qt::Key_F12, }; enum ODirection { CW = 0, CCW = 1, Flip = 2, }; enum OHingeStatus { CASE_CLOSED = 3, CASE_PORTRAIT = 2, CASE_LANDSCAPE = 0, CASE_UNKNOWN = 1, }; /* default button for qvfb or such * see odevice.cpp for details. * hint: manage a user defined button for qvfb? * alwin */ struct default_button { Qt::Key code; char *utext; char *pix; char *fpressedservice; char *fpressedaction; char *fheldservice; char *fheldaction; }; /** * A singleton which gives informations about device specefic option * like the Hardware used, LEDs, the Base Distribution and * hardware key mappings. * * @short A small class for device specific options * @see QObject * @author Robert Griebl * @version 1.0 */ class ODevice : public QObject { Q_OBJECT private: /* disable copy */ ODevice ( const ODevice & ); protected: ODevice(); virtual void init(const QString&); virtual void initButtons(); static void sendSuspendmsg(); ODeviceData *d; public: // sandman do we want to allow destructions? -zecke? virtual ~ODevice(); static ODevice *inst(); // information QString modelString() const; OModel model() const; inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); } QString vendorString() const; OVendor vendor() const; QString systemString() const; OSystem system() const; QString systemVersionString() const; virtual Transformation rotation() const; virtual ODirection direction() const; QString qteDriver() const; // system virtual bool suspend(); virtual bool setDisplayStatus ( bool on ); virtual bool setDisplayBrightness ( int brightness ); virtual int displayBrightnessResolution() const; virtual bool setDisplayContrast ( int contrast ); virtual int displayContrastResolution() const; // don't add new virtual methods, use this: // /*virtual */ void boo(int i ) { return virtual_hook(1,&i); }; // and in your subclass do overwrite // protected virtual int virtual_hook(int, void *) // which is defined below // input / output 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 hasLightSensor() const; virtual int readLightSensor(); virtual int lightSensorResolution() const; virtual bool hasHingeSensor() const; virtual OHingeStatus readHingeSensor()const; const QStrList &allowedCpuFrequencies() const; bool setCurrentCpuFrequency(uint index); /** * Returns the available buttons on this device. The number and location * of buttons will vary depending on the device. Button numbers will be assigned * by the device manufacturer and will be from most preferred button to least preffered * button. Note that this list only contains "user mappable" buttons. * * @todo Make method const and take care of calling initButtons or make that const too * */ const QValueList<ODeviceButton> &buttons(); /** * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it * returns 0L */ const ODeviceButton *buttonForKeycode ( ushort keyCode ); /** * Reassigns the pressed action for \a button. To return to the factory * default pass an empty string as \a qcopMessage. */ void remapPressedAction ( int button, const OQCopMessage &qcopMessage ); /** * Reassigns the held action for \a button. To return to the factory * default pass an empty string as \a qcopMessage. */ void remapHeldAction ( int button, const OQCopMessage &qcopMessage ); /** * How long (in ms) you have to press a button for a "hold" action */ uint buttonHoldTime() const; signals: void buttonMappingChanged(); private slots: void systemMessage ( const QCString &, const QByteArray & ); void playingStopped(); protected: void addPreHandler(QWSServer::KeyboardFilter*aFilter); void remPreHandler(QWSServer::KeyboardFilter*aFilter); void reloadButtonMapping(); void changeMixerForAlarm( int mixer, const char* file, Sound *snd); /* ugly virtual hook */ virtual void virtual_hook( int id, void* data ); }; class ODeviceData { public: QString m_vendorstr; OVendor m_vendor; QString m_modelstr; OModel m_model; QString m_systemstr; OSystem m_system; QString m_sysverstr; Transformation m_rotation; ODirection m_direction; QString m_qteDriver; QValueList <ODeviceButton> *m_buttons; uint m_holdtime; QStrList *m_cpu_frequencies; bool m_initializedButtonQcop : 1; /* values for changeMixerForAlarm */ int m_sound, m_vol, m_mixer; }; extern bool isQWS(); extern QCString makeChannel ( const char *str ); } } #endif |