author | alwin <alwin> | 2005-03-21 22:35:12 (UTC) |
---|---|---|
committer | alwin <alwin> | 2005-03-21 22:35:12 (UTC) |
commit | 16ddf84003a9eaa5e56de00287e01d9a09fd864a (patch) (side-by-side diff) | |
tree | 54c7c512d975904ed1026026a0fb35df795cfe47 | |
parent | c941b705b5eac2d2d2e9f4e3e3879227c344a42c (diff) | |
download | opie-16ddf84003a9eaa5e56de00287e01d9a09fd864a.zip opie-16ddf84003a9eaa5e56de00287e01d9a09fd864a.tar.gz opie-16ddf84003a9eaa5e56de00287e01d9a09fd864a.tar.bz2 |
on non-embedix kernel zaurii devices don't wait after suspend 'cause
apm there is synchronous.
for that I had to move a variable from private to protected in
abstractmobiledevice.
-rw-r--r-- | libopie2/opiecore/device/odevice_abstractmobiledevice.h | 44 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.cpp | 27 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.h | 1 |
3 files changed, 50 insertions, 22 deletions
diff --git a/libopie2/opiecore/device/odevice_abstractmobiledevice.h b/libopie2/opiecore/device/odevice_abstractmobiledevice.h index 9467e82..335b02f 100644 --- a/libopie2/opiecore/device/odevice_abstractmobiledevice.h +++ b/libopie2/opiecore/device/odevice_abstractmobiledevice.h @@ -1,64 +1,64 @@ /* - This file is part of the Opie Project - Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org> + This file is part of the Opie Project + Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org> Copyright (C) 2004, 2005 Michael 'mickey' Lauer <mickeyl@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; either version 2 of the License, - ._= =} : or (at your option) any later version. - .%`+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. + .>+-= +_;:, .> :=|. 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; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+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 OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE #define OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE #include "odevice.h" namespace Opie { namespace Core { /** * @short Common Implementations for Linux Handheld Devices * * Abstract Class with implementation for suspending using * asynchrnonus apm implementations and displaystatus using * the Linux Frame Buffer API * */ class OAbstractMobileDevice : public ODevice { Q_OBJECT protected: OAbstractMobileDevice(); void setAPMTimeOut( int time ); public: virtual bool suspend(); virtual bool setDisplayStatus(bool); -private: +protected: int m_timeOut; }; } } #endif diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp index 72378ff..8aefc13 100644 --- a/libopie2/opiecore/device/odevice_zaurus.cpp +++ b/libopie2/opiecore/device/odevice_zaurus.cpp @@ -607,24 +607,51 @@ bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, /* 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; } } break; } if (newkeycode!=keycode) { if ( newkeycode != Key_unknown ) { QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); } return true; } return false; } +bool Zaurus::suspend() { + if ( !isQWS( ) ) // only qwsserver is allowed to suspend + return false; + + bool res = false; + OAbstractMobileDevice::sendSuspendmsg(); + + struct timeval tvs, tvn; + ::gettimeofday ( &tvs, 0 ); + + ::sync(); // flush fs caches + res = ( ::system ( "apm --suspend" ) == 0 ); + + // This is needed because some apm implementations are asynchronous and we + // can not be sure when exactly the device is really suspended + // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. + // on non embedix eg. 2.6 kernel line apm is synchronous so we don't need it here. + + if ( res && m_embedix) { + do { // wait at most 1.5 sec: either suspend didn't work or the device resumed + ::usleep ( 200 * 1000 ); + ::gettimeofday ( &tvn, 0 ); + } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < m_timeOut ); + } + + return res; +} diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h index 1fb0cd9..4548e35 100644 --- a/libopie2/opiecore/device/odevice_zaurus.h +++ b/libopie2/opiecore/device/odevice_zaurus.h @@ -98,46 +98,47 @@ class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter { protected: virtual void init(const QString&); virtual void initButtons(); 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 ); OLedState m_leds[1]; bool m_embedix; }; struct z_button { Qt::Key code; char *utext; char *pix; char *fpressedservice; char *fpressedaction; char *fheldservice; char *fheldaction; }; } } } #endif |