author | alwin <alwin> | 2005-03-21 22:35:12 (UTC) |
---|---|---|
committer | alwin <alwin> | 2005-03-21 22:35:12 (UTC) |
commit | 16ddf84003a9eaa5e56de00287e01d9a09fd864a (patch) (unidiff) | |
tree | 54c7c512d975904ed1026026a0fb35df795cfe47 /libopie2/opiecore/device/odevice_zaurus.cpp | |
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.
Diffstat (limited to 'libopie2/opiecore/device/odevice_zaurus.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
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 | |||
@@ -629,2 +629,29 @@ bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, | |||
629 | } | 629 | } |
630 | 630 | ||
631 | bool Zaurus::suspend() { | ||
632 | if ( !isQWS( ) ) // only qwsserver is allowed to suspend | ||
633 | return false; | ||
634 | |||
635 | bool res = false; | ||
636 | OAbstractMobileDevice::sendSuspendmsg(); | ||
637 | |||
638 | struct timeval tvs, tvn; | ||
639 | ::gettimeofday ( &tvs, 0 ); | ||
640 | |||
641 | ::sync(); // flush fs caches | ||
642 | res = ( ::system ( "apm --suspend" ) == 0 ); | ||
643 | |||
644 | // This is needed because some apm implementations are asynchronous and we | ||
645 | // can not be sure when exactly the device is really suspended | ||
646 | // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. | ||
647 | // on non embedix eg. 2.6 kernel line apm is synchronous so we don't need it here. | ||
648 | |||
649 | if ( res && m_embedix) { | ||
650 | do { // wait at most 1.5 sec: either suspend didn't work or the device resumed | ||
651 | ::usleep ( 200 * 1000 ); | ||
652 | ::gettimeofday ( &tvn, 0 ); | ||
653 | } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < m_timeOut ); | ||
654 | } | ||
655 | |||
656 | return res; | ||
657 | } | ||