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 | |||
@@ -583,48 +583,75 @@ OHingeStatus Zaurus::readHingeSensor() const | |||
583 | } | 583 | } |
584 | else | 584 | else |
585 | { | 585 | { |
586 | // corgi keyboard is event source 0 in OZ kernel 2.6 | 586 | // corgi keyboard is event source 0 in OZ kernel 2.6 |
587 | OInputDevice* keyboard = OInputSystem::instance()->device( "event0" ); | 587 | OInputDevice* keyboard = OInputSystem::instance()->device( "event0" ); |
588 | if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE; | 588 | if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE; |
589 | else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT; | 589 | else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT; |
590 | else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED; | 590 | else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED; |
591 | qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); | 591 | qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); |
592 | return CASE_UNKNOWN; | 592 | return CASE_UNKNOWN; |
593 | } | 593 | } |
594 | } | 594 | } |
595 | 595 | ||
596 | /* | 596 | /* |
597 | * Take code from iPAQ device. | 597 | * Take code from iPAQ device. |
598 | * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. | 598 | * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. |
599 | * I hope that is ok - Alwin | 599 | * I hope that is ok - Alwin |
600 | */ | 600 | */ |
601 | bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) | 601 | bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) |
602 | { | 602 | { |
603 | int newkeycode = keycode; | 603 | int newkeycode = keycode; |
604 | 604 | ||
605 | if (d->m_model!=Model_Zaurus_SLC3000 && d->m_model!=Model_Zaurus_SLC7x0) return false; | 605 | if (d->m_model!=Model_Zaurus_SLC3000 && d->m_model!=Model_Zaurus_SLC7x0) return false; |
606 | 606 | ||
607 | /* map cursor keys depending on the hinge status */ | 607 | /* map cursor keys depending on the hinge status */ |
608 | switch ( keycode ) { | 608 | switch ( keycode ) { |
609 | // Rotate cursor keys | 609 | // Rotate cursor keys |
610 | case Key_Left : | 610 | case Key_Left : |
611 | case Key_Right: | 611 | case Key_Right: |
612 | case Key_Up : | 612 | case Key_Up : |
613 | case Key_Down : | 613 | case Key_Down : |
614 | { | 614 | { |
615 | if (rotation()==Rot90) { | 615 | if (rotation()==Rot90) { |
616 | newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; | 616 | newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; |
617 | } | 617 | } |
618 | } | 618 | } |
619 | break; | 619 | break; |
620 | 620 | ||
621 | } | 621 | } |
622 | if (newkeycode!=keycode) { | 622 | if (newkeycode!=keycode) { |
623 | if ( newkeycode != Key_unknown ) { | 623 | if ( newkeycode != Key_unknown ) { |
624 | QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); | 624 | QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); |
625 | } | 625 | } |
626 | return true; | 626 | return true; |
627 | } | 627 | } |
628 | return false; | 628 | return false; |
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 | } | ||