summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/device/odevice_zaurus.cpp
Unidiff
Diffstat (limited to 'libopie2/opiecore/device/odevice_zaurus.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp27
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 */
601bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 601bool 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
631bool 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}