author | mickeyl <mickeyl> | 2006-08-02 19:12:38 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2006-08-02 19:12:38 (UTC) |
commit | cc2f5d3f3173be64d177ad827864b7da95343a1d (patch) (side-by-side diff) | |
tree | 8c278fc6b108667e3fdc2b98d91dd5377756c95a | |
parent | 3e77cb64e7ca0d89656e6665c1007bff6b34d609 (diff) | |
download | opie-cc2f5d3f3173be64d177ad827864b7da95343a1d.zip opie-cc2f5d3f3173be64d177ad827864b7da95343a1d.tar.gz opie-cc2f5d3f3173be64d177ad827864b7da95343a1d.tar.bz2 |
improve ipaq 2200, 4xxx, 4700 support. patches courtesy R.Wagner, E.Hovland, P.Sokolovsky. thanks guys
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice.h | 1 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_ipaq.cpp | 47 |
3 files changed, 43 insertions, 7 deletions
@@ -1,201 +1,201 @@ 2006-??-?? Opie 1.2.3 New Features ------------ Fixed Bugs ---------- - * n.a. - Improved iPAQ support in ODevice and low-level applets (Slavek Banko) + * n.a. - Improved iPAQ support in ODevice and low-level applets (S.Banko, R.Wagner, E.Hovland, P.Sokolovsky) * n.a. - Improved platform support for the Motorola EZX platform (mickeyl) Internal -------- 2006-05-28 Opie 1.2.2 New Features ------------ * Appearance: Added configuration options to set smallIconSize, bigIconSize, useBigPixmaps (hrw, drw) * Opie-Notes: Notes application based on NoteZ (hrw) * Opie-PackageManager: Added two configuration options: "Force recursive", "Verbose fetch" (hrw) * Added platform support for HTC Universal (ljp) * Made Opie-Bluetooth subsystem actually usable (korovkin) * Added platform support for the Motorola EZX platform (mickeyl) Fixed Bugs ---------- * #1695 - Date selector use too small fontsize on VGA screen (hrw) * #1686 - opie-console lack UI setting for switching scrollbar (hrw) * #1647 - Opie-console doesn't respect scroll-bar on left side (hrw) * #1624 - Button settngs changes are applied only after restart (hrw) * #1492 - Backup and Restore does not show list of backups to restore on start (hrw) * n.a. - remove hardcoded font size from wellenreiter (hrw) * n.a. - added patch to build Qt/E 2.3.10 with gcc 4.x.x (hrw) * n.a. - make blue-pin UI resizable to looks good in any resolution (hrw) * n.a. - fix a problem with vCard send to Sony Ericsson k600i (ar) * n.a. - add a patch to build Qt/E 2.3.10 on amd64 with gcc 4.x.x (ar) * n.a. - Opie-console fallback to FixedFont settings from qpe.conf in config (hrw) * n.a. - Update version in About applet (hrw) * n.a. - add firstusage and background pictures for 480x640 devices (mickeyl) * n.a. - many bluetooth fixes (korovkin) Internal -------- * libopiecore: /etc/oz_version renamed to /etc/openzaurus-version (hrw) * libopiecore: SL6000 (tosa) now uses corgi-bl (Dirk Opfer) * library/version.h: introduce integer version code in OPIE_VERSION for conditional compilation * g++ 4.1.1 fixes all around (no extra qualifiers allowed) (mickeyl) * update README (mickeyl) * remove libslcompat - it never worked and we don't support Sharp closed source anymore anyway (mickeyl) 2005-09-11 Opie 1.2.1 New Features ------------ * OpieStumbler: Scans WiFi networks using the wireless extension scanning (skyhusker) * Opie-Reader: Support for document formats ArriereGo and Reb, add flite output (tim,pohly) * Opie-Networksettings: Add support for wlan-ng devices and improve WEP handling (Dirk Opfer) * Wellenreiter: Remove Joining networks - use OpieStumbler for that (mickeyl) * Opie-Mobilemsg has gone unsupported - it never really worked and there will be a replacement (mickeyl) * Opie-Tabmanager has gone unsupported - it barely works and there is not much of a use of it anyway (mickeyl) * Checkbook: Added configuration option to use smaller font for checkbook transaction tab (hrw) * ZSafe: Made UI conform to Opie standards (drw) * Today Addressbook plugin: Fixed configuration to show/not show birthdays, use checkboxes for selection (hrw) * Opie-Console: Read initial fixed font configuration from qpe.conf (mickeyl) * Opie-PcmciaApplet: Configure insert/resume actions and bind unsupported cards (mickeyl) * SysInfo: Remove CPU tab and add Devices tab instead (mickeyl) * Opie-smb: Added Opie front end for Samba (ljp) * Opie-Bluetooth: Replace obex send implementation and patch libopieobex and the bluetoothapplet (Michael Haynie) * Opieplayer: rudimentary podcast support (ljp) Fixed Bugs ---------- * #1377 - Suspend Powermanagement when switched to another VT (mickeyl) - We actually suspend the complete Opie now in that case. * #1384 - Battery status updated improperly when charging (skyhusker) * #1476 - Wrong order of application entries in the O-menu (skyhusker) * #1514 - Remove usage of cardmon/pcmcia picture in applications. pcmcia is now an inline picture (mickeyl) * #1535 - Missing line break and unnecessary location shown with Today-Calendar plugin (deller) * #1543 - Time Settings: "predict" tab is displayed twice after reopen (hrw) * #1546 - Battery applet popup is not always large enough to show jacket remaining info (skyhusker) * #1557 - Light&Power-Settings don't store warning intervall and warning levels (skyhusker) * #1565 - crash-fix in odevice.cpp while scanning the distribution table (deller) * #1614 - Make Opie-console start in $HOME instead of / (skyhusker) * #1635 - opie-today, datebook-plugin does not show notes (skyhusker) * #1665 - Opie-IRC displays the host prepended to the message when peer is using and ipv6 address (skyhusker) * #1666 - Opie-IRC does not allow to add !channels in config as autojoin ones (skyhusker) * #1667 - Opie-IRC does not show messages from !channel (skyhusker) * #1679 - Security PIN plugin is QVGA sized (hrw) * #1682 - Properly resize tab control in OTabWidget (drw) * 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) * Use five point mouse calibration to make calibrated mouse drivers work on newer Zaurii (rp,mickeyl) 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) Fixed Bugs ---------- * #1236 - VCards contained empty home and work address entries causing Palms to crash (eilers) * #1412 - Launcher Settings - fixed default settings for background in Edit tab dialog (drw) * #1472 - Opie textedit now check for unsaved changes on ESC key (ljp) * #1474 - Implement GUI for Scrollbars on the Left in Appearance (zecke) * #1482 - Fix double '/' in paths (zecke) * #1536 - Autosave of custom locations in opie backup (ar) * #1539 - Fixed displaying too long path in the delete dialog in opie-eye (zecke) * #1540 - Implemented deletion of DocLnks in opie-eye (zecke) * #1542 - Fixed Todo crash when priority < 1 or > 5 (drw) * #1550 - Browse for alarm sound start in QPEDIR/sounds/ (zecke) * #1554 - Fixed Opie-Console name in .desktop file (mickeyl) * #1556 - Start to look for sound files in /opt/QtPalmtop/sounds (zecke) * #1558 - Fixed opie-login breaking opie startup (mickeyl) * #1560 - Fixed Opie-Console picking up the wrong shell (bluelightning) * #1570 - Confirmation needed befor Restore a backup and overwrite local data (ar) * #1591 - Addressbook sortorder changed by clicking on column 0 (eilers) * #1599 - Security - change recommendation for opie-multiauth to opie-securityplugin (gints) * #1604 - Checkbook crashed on startup (drw) * #1608 - Addressbook crashed after search, which may caused by not initialzed member variable (eilers) * #1608 - QueryByExampe-Datediff on SQL database did not worked properly (eilers) * n.a. - Netsystemtime - fixed UI to prevent error dialog from displaying when it shouldn't, get rid of some compiler warnings (drw) * n.a. - PackageManager - fixed where last package in status file was not shown as installed when it should be (drw) * n.a. - PackageManager - fixed bug where lists_dir was not being honored at startup (drw) * n.a. - PackageManager - provided default value for lists_dir when none is entered in configuration dialog (drw) * n.a. - OTabWidget - fixed scroll buttons, fix display position of tabs (drw) * n.a. - AddressBook - fixed sorting by 'File As' name (drw) * n.a. - AddressBook - fixed category handling for 'All' and 'Unfiled' (eilers) * n.a. - AddressBook - fixed letter picker record selection and sort records afterwards (drw) Internal -------- * Worked around bug in Qt/Embedded 2.3.10: qt_version() returns 231 (mickeyl) * Killed the need for weak symbols in QtE (zecke) * Added optional building libqpe without inline images (mickeyl) * OColorButton - fixed so does not emit a colorSelected signal inside of resizeEvent (drw) 2005-02-03 Opie 1.1.9 New Features ------------ * Number of icon columns in Launcher is customizable through Launcher.conf (hrw,zecke,mickeyl) * Number of icon columns in Launcher is customizable through LauncherSettings (mickeyl) * Usability enhancements in OpieIRC (skyhusker) Fixed Bugs ---------- * #1501 - Fixed bug in todo sql backend (eilers) * #1505 - Added more Swap sizes in memoryapplet (mickeyl) * #1525 - Hopefully fixed double alarms and not removing alarms set with the Clock application (zecke) * #1533 - Security Owner Dialog (shown in case of unsuccessfull authentiacation) wasn't able to display information in non latin1 encoding (zecke) * n.a. - Removed hard coded font sizes in a couple of inputmethods (mickeyl) * n.a. - Removed MediumDlg appearing prior to FirstUsage wizard (i.e. calibration) (mickeyl) * n.a. - Fixed numerous buglets in OpieIRC (skyhusker) Internal -------- diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h index c2fa411..a8362cd 100644 --- a/libopie2/opiecore/device/odevice.h +++ b/libopie2/opiecore/device/odevice.h @@ -1,265 +1,266 @@ /* 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_Jornada_56x = ( Model_Jornada | 0x0001 ), Model_Jornada_720 = ( Model_Jornada | 0x0002 ), Model_Jornada_820 = ( Model_Jornada | 0x0003 ), 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_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_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_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_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_Motorola = ( 9 << 17 ), Model_Motorola_All = ( Model_Motorola | 0xffff ), Model_Motorola_EZX = ( Model_Motorola | 0x0001 ), }; /** * 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, }; /** * 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; diff --git a/libopie2/opiecore/device/odevice_ipaq.cpp b/libopie2/opiecore/device/odevice_ipaq.cpp index 63b60a7..00939bf 100644 --- a/libopie2/opiecore/device/odevice_ipaq.cpp +++ b/libopie2/opiecore/device/odevice_ipaq.cpp @@ -1,518 +1,553 @@ /* This file is part of the Opie Project =. (C) 2002-2005 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. */ #include "odevice_ipaq.h" /* QT */ #include <qapplication.h> #include <qdir.h> #include <qfile.h> #include <qtextstream.h> #include <qwindowsystem_qws.h> /* OPIE */ #include <qpe/config.h> #include <qpe/sound.h> #include <qpe/qcopenvelope_qws.h> #include <opie2/okeyfilter.h> #include <opie2/oresource.h> /* STD */ #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; /* KERNEL */ #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)) typedef struct { unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ unsigned char TotalTime; /* Units of 5 seconds */ unsigned char OnTime; /* units of 100m/s */ unsigned char OffTime; /* units of 100m/s */ } LED_IN; typedef struct { unsigned char mode; unsigned char pwr; unsigned char brightness; } FLITE_IN; #define LED_ON OD_IOW( 'f', 5, LED_IN ) #define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) struct i_button ipaq_buttons [] = { - { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x, + { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H22xx | Model_iPAQ_HX4700 | Model_iPAQ_H4xxx, Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), "devicebuttons/ipaq_calendar", "datebook", "nextView()", "today", "raise()" }, - { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x, + { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H22xx | Model_iPAQ_HX4700 | Model_iPAQ_H4xxx, Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), "devicebuttons/ipaq_contact", "addressbook", "raise()", "addressbook", "beamBusinessCard()" }, { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), "devicebuttons/ipaq_menu", "QPE/TaskBar", "toggleMenu()", "QPE/TaskBar", "toggleStartMenu()" }, { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), "devicebuttons/ipaq_mail", "opiemail", "raise()", "opiemail", "newMail()" }, - { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x, + { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx | Model_iPAQ_H191x | Model_iPAQ_H4xxx, Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), "devicebuttons/ipaq_home", "QPE/Launcher", "home()", "buttonsettings", "raise()" }, { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), "devicebuttons/ipaq_record", "QPE/VMemo", "toggleRecord()", "sound", "raise()" }, - { Model_iPAQ_H191x, + { Model_iPAQ_H191x | Model_iPAQ_H4xxx, Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Mail Button"), "devicebuttons/ipaq_mail", "opiemail", "raise()", "opiemail", "newMail()" }, - { Model_iPAQ_H191x, + { Model_iPAQ_H191x | Model_iPAQ_H4xxx, Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Record Button"), "devicebuttons/ipaq_record", "QPE/VMemo", "toggleRecord()", "sound", "raise()" }, + //h2200 has different button mapping + { Model_iPAQ_H22xx, + Qt::Key_NumLock, QT_TRANSLATE_NOOP("Button", "Mail Button"), + "devicebuttons/ipaq_mail", + "opiemail", "raise()", + "opiemail", "newMail()" }, + { Model_iPAQ_H22xx, + Qt::Key_ScrollLock, QT_TRANSLATE_NOOP("Button", "Menu Button"), + "devicebuttons/ipaq_menu", + "QPE/TaskBar", "toggleMenu()", + "QPE/TaskBar", "toggleStartMenu()" }, + // and hx4700 has different button mapping still + { Model_iPAQ_HX4700, + Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Mail Button"), + "devicebuttons/ipaq_mail", + "opiemail", "raise()", + "opiemail", "newMail()" }, + { Model_iPAQ_HX4700, + Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Record Button"), + "devicebuttons/ipaq_record", + "QPE/VMemo", "toggleRecord()", + "sound", "raise()" }, + { Model_iPAQ_HX4700, + Qt::Key_Home, QT_TRANSLATE_NOOP("Button", "Home Button"), + "devicebuttons/ipaq_home", + "QPE/Launcher", "home()", + "buttonsettings", "raise()" }, + }; void iPAQ::init(const QString& model) { d->m_vendorstr = "HP"; d->m_vendor = Vendor_HP; d->m_modelstr = model.mid(model.findRev('H')); if ( d->m_modelstr == "H3100" ) d->m_model = Model_iPAQ_H31xx; else if ( d->m_modelstr == "H3600" ) d->m_model = Model_iPAQ_H36xx; else if ( d->m_modelstr == "H3700" ) d->m_model = Model_iPAQ_H37xx; else if ( d->m_modelstr == "H3800" ) d->m_model = Model_iPAQ_H38xx; else if ( d->m_modelstr == "H3900" ) d->m_model = Model_iPAQ_H39xx; else if ( d->m_modelstr == "H5400" ) d->m_model = Model_iPAQ_H5xxx; else if ( d->m_modelstr == "H2200" ) d->m_model = Model_iPAQ_H22xx; else if ( d->m_modelstr == "H1910" ) d->m_model = Model_iPAQ_H191x; else if ( d->m_modelstr == "H1940" ) d->m_model = Model_iPAQ_H1940; else if ( d->m_modelstr == "HX4700" ) d->m_model = Model_iPAQ_HX4700; + else if ( d->m_modelstr == "H4000" ) + d->m_model = Model_iPAQ_H4xxx; else d->m_model = Model_Unknown; switch ( d->m_model ) { case Model_iPAQ_H31xx: case Model_iPAQ_H38xx: d->m_rotation = Rot90; break; case Model_iPAQ_H5xxx: case Model_iPAQ_H22xx: case Model_iPAQ_H191x: case Model_iPAQ_H1940: case Model_iPAQ_HX4700: + case Model_iPAQ_H4xxx: d->m_rotation = Rot0; break; case Model_iPAQ_H36xx: case Model_iPAQ_H37xx: case Model_iPAQ_H39xx: default: d->m_rotation = Rot270; break; } m_leds [0] = m_leds [1] = Led_Off; m_power_timer = 0; } void iPAQ::initButtons() { if ( d->m_buttons ) return; if ( isQWS( ) ) { addPreHandler(this); } d->m_buttons = new QValueList <ODeviceButton>; for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { i_button *ib = ipaq_buttons + i; ODeviceButton b; if (( ib->model & d->m_model ) == d->m_model ) { b. setKeycode ( ib->code ); b. setUserText ( QObject::tr ( "Button", ib->utext )); b. setPixmap ( OResource::loadPixmap ( ib->pix )); b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); d->m_buttons->append ( b ); } } reloadButtonMapping(); } QValueList <OLed> iPAQ::ledList() const { QValueList <OLed> vl; vl << Led_Power; if ( d->m_model == Model_iPAQ_H38xx ) vl << Led_BlueTooth; return vl; } QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const { QValueList <OLedState> vl; if ( l == Led_Power ) vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; else if ( l == Led_BlueTooth && d->m_model == Model_iPAQ_H38xx ) vl << Led_Off; // << Led_On << ??? return vl; } OLedState iPAQ::ledState ( OLed l ) const { switch ( l ) { case Led_Power: return m_leds [0]; case Led_BlueTooth: return m_leds [1]; default: return Led_Off; } } bool iPAQ::setLedState ( OLed l, OLedState st ) { static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); if ( l == Led_Power ) { if ( fd >= 0 ) { LED_IN leds; ::memset ( &leds, 0, sizeof( leds )); leds. TotalTime = 0; leds. OnTime = 0; leds. OffTime = 1; leds. OffOnBlink = 2; switch ( st ) { case Led_Off : leds. OffOnBlink = 0; break; case Led_On : leds. OffOnBlink = 1; break; case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; } if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { m_leds [0] = st; return true; } } } return false; } bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) { int newkeycode = keycode; switch ( keycode ) { // H38xx/H39xx have no "Q" key anymore - this is now the Mail key case HardKey_Menu: { if (( d->m_model == Model_iPAQ_H38xx ) || ( d->m_model == Model_iPAQ_H39xx ) || ( d->m_model == Model_iPAQ_H5xxx)) { newkeycode = HardKey_Mail; } break; } // Rotate cursor keys 180 or 270 case Key_Left : case Key_Right: case Key_Up : case Key_Down : { if (( d->m_model == Model_iPAQ_H31xx ) || ( d->m_model == Model_iPAQ_H38xx )) { newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; } // Rotate the cursor keys by 270 // keycode - Key_Left = position of the button starting from left clockwise // add the rotation to it and modolo. No we've the original offset // add the offset to the Key_Left key if (( d->m_model == Model_iPAQ_H5xxx ) || ( d->m_model == Model_iPAQ_H191x ) || + ( d->m_model == Model_iPAQ_H4xxx ) || ( d->m_model == Model_iPAQ_H1940 )) newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; break; } // map Power Button short/long press to F6 for h191x case Key_F6: - if ( d->m_model != Model_iPAQ_H191x ) + if ( d->m_model != Model_iPAQ_H191x && d->m_model != Model_iPAQ_H4xxx ) break; // map Power Button short/long press to F34/F35 case Key_SysReq: { if ( isPress ) { if ( m_power_timer ) killTimer ( m_power_timer ); m_power_timer = startTimer ( 500 ); } else if ( m_power_timer ) { killTimer ( m_power_timer ); m_power_timer = 0; QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); } newkeycode = Key_unknown; break; } } if ( newkeycode != keycode ) { if ( newkeycode != Key_unknown ) QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); return true; } else return false; } void iPAQ::timerEvent ( QTimerEvent * ) { killTimer ( m_power_timer ); m_power_timer = 0; QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); } void iPAQ::playAlarmSound() { #ifndef QT_NO_SOUND static Sound snd ( "alarm" ); if(!snd.isFinished()) return; changeMixerForAlarm(0, "/dev/sound/mixer", &snd ); snd. play(); #endif } bool iPAQ::setDisplayBrightness ( int bright ) { bool res = false; int fd; if ( bright > 255 ) bright = 255; if ( bright < 0 ) bright = 0; QString cmdline; switch ( model()) { case Model_iPAQ_H191x: + case Model_iPAQ_H4xxx: { QDir sysClass( "/sys/class/backlight/pxafb/" ); sysClass.setFilter(QDir::Dirs); int fd; if ( sysClass.exists() ) { QString sysClassPath = sysClass.absFilePath( "/sys/class/backlight/pxafb/power" ); fd = ::open( sysClassPath, O_WRONLY | O_NONBLOCK ); if ( fd ) { char buf[10]; buf[0] = bright ? 0 : 4; buf[1] = '\0'; res = ( ::write( fd, &buf[0], 2 ) == 0 ); ::close( fd ); } sysClassPath = sysClass.absFilePath( "/sys/class/backlight/pxafb/brightness" ); fd = ::open( sysClassPath, O_WRONLY | O_NONBLOCK ); if ( fd ) { char buf[100]; int len = ::snprintf( &buf[0], sizeof buf, "%d", bright ); res = ( ::write( fd, &buf[0], len ) == 0 ); ::close( fd ); } } } break; case Model_iPAQ_HX4700: cmdline = QString::fromLatin1( "echo %1 > /sys/class/backlight/w100fb/brightness" ).arg( bright ); // No Global::shellQuote as we gurantee it to be sane res = ( ::system( QFile::encodeName(cmdline) ) == 0 ); break; default: if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { FLITE_IN bl; bl. mode = 1; bl. pwr = bright ? 1 : 0; bl. brightness = ( bright * ( displayBrightnessResolution() - 1 ) + 127 ) / 255; res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); ::close ( fd ); } } return res; } int iPAQ::displayBrightnessResolution() const { switch ( model()) { case Model_iPAQ_H31xx: case Model_iPAQ_H36xx: case Model_iPAQ_H37xx: return 128; // really 256, but >128 could damage the LCD case Model_iPAQ_H38xx: case Model_iPAQ_H39xx: return 64; case Model_iPAQ_H5xxx: case Model_iPAQ_HX4700: + case Model_iPAQ_H4xxx: return 255; case Model_iPAQ_H191x: return 7; case Model_iPAQ_H1940: return 44; default: return 2; } } bool iPAQ::setDisplayStatus ( bool on ) { bool res = false; QString cmdline; if ( model() == Model_iPAQ_H191x ) { QDir sysClass( "/sys/class/lcd/pxafb/" ); sysClass.setFilter(QDir::Dirs); if ( sysClass.exists() ) { QString sysClassPath = sysClass.absFilePath( "/sys/class/lcd/pxafb/power" ); int fd = ::open( sysClassPath, O_WRONLY | O_NONBLOCK ); if ( fd ) { char buf[10]; buf[0] = on ? 0 : 4; buf[1] = '\0'; res = ( ::write( fd, &buf[0], 2 ) == 0 ); ::close( fd ); } } return res; } else { return OAbstractMobileDevice::setDisplayStatus(on); } res = ( ::system( QFile::encodeName(cmdline) ) == 0 ); return res; } bool iPAQ::hasLightSensor() const { switch (model()) { case Model_iPAQ_H191x: + case Model_iPAQ_H4xxx: return false; default: return true; } } int iPAQ::readLightSensor() { int fd; int val = -1; if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { char buffer [8]; if ( ::read ( fd, buffer, 5 ) == 5 ) { char *endptr; buffer [4] = 0; val = ::strtol ( buffer + 2, &endptr, 16 ); if ( *endptr != 0 ) val = -1; } ::close ( fd ); } return val; } int iPAQ::lightSensorResolution() const { return 256; } |