-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 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org> | 3 | Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org> |
4 | Copyright (C) 2004, 2005 Michael 'mickey' Lauer <mickeyl@handhelds.org> | 4 | Copyright (C) 2004, 2005 Michael 'mickey' Lauer <mickeyl@handhelds.org> |
5 | 5 | ||
6 | 6 | ||
7 | =. | 7 | =. |
8 | .=l. | 8 | .=l. |
9 | .>+-= | 9 | .>+-= |
10 | _;:, .> :=|. This program is free software; you can | 10 | _;:, .> :=|. This program is free software; you can |
11 | .> <`_, > . <= redistribute it and/or modify it under | 11 | .> <`_, > . <= redistribute it and/or modify it under |
12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
13 | .="- .-=="i, .._ License as published by the Free Software | 13 | .="- .-=="i, .._ License as published by the Free Software |
14 | - . .-<_> .<> Foundation; either version 2 of the License, | 14 | - . .-<_> .<> Foundation; either version 2 of the License, |
15 | ._= =} : or (at your option) any later version. | 15 | ._= =} : or (at your option) any later version. |
16 | .%`+i> _;_. | 16 | .%`+i> _;_. |
17 | .i_,=:_. -<s. This program is distributed in the hope that | 17 | .i_,=:_. -<s. This program is distributed in the hope that |
18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
19 | : .. .:, . . . without even the implied warranty of | 19 | : .. .:, . . . without even the implied warranty of |
20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
22 | ..}^=.= = ; Library General Public License for more | 22 | ..}^=.= = ; Library General Public License for more |
23 | ++= -. .` .: details. | 23 | ++= -. .` .: details. |
24 | : = ...= . :.=- | 24 | : = ...= . :.=- |
25 | -. .:....=;==+<; You should have received a copy of the GNU | 25 | -. .:....=;==+<; You should have received a copy of the GNU |
26 | -_. . . )=. = Library General Public License along with | 26 | -_. . . )=. = Library General Public License along with |
27 | -- :-=` this library; see the file COPYING.LIB. | 27 | -- :-=` this library; see the file COPYING.LIB. |
28 | If not, write to the Free Software Foundation, | 28 | If not, write to the Free Software Foundation, |
29 | Inc., 59 Temple Place - Suite 330, | 29 | Inc., 59 Temple Place - Suite 330, |
30 | Boston, MA 02111-1307, USA. | 30 | Boston, MA 02111-1307, USA. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #ifndef OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE | 33 | #ifndef OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE |
34 | #define OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE | 34 | #define OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE |
35 | 35 | ||
36 | #include "odevice.h" | 36 | #include "odevice.h" |
37 | 37 | ||
38 | namespace Opie { | 38 | namespace Opie { |
39 | namespace Core { | 39 | namespace Core { |
40 | /** | 40 | /** |
41 | * @short Common Implementations for Linux Handheld Devices | 41 | * @short Common Implementations for Linux Handheld Devices |
42 | * | 42 | * |
43 | * Abstract Class with implementation for suspending using | 43 | * Abstract Class with implementation for suspending using |
44 | * asynchrnonus apm implementations and displaystatus using | 44 | * asynchrnonus apm implementations and displaystatus using |
45 | * the Linux Frame Buffer API | 45 | * the Linux Frame Buffer API |
46 | * | 46 | * |
47 | */ | 47 | */ |
48 | class OAbstractMobileDevice : public ODevice { | 48 | class OAbstractMobileDevice : public ODevice { |
49 | Q_OBJECT | 49 | Q_OBJECT |
50 | protected: | 50 | protected: |
51 | OAbstractMobileDevice(); | 51 | OAbstractMobileDevice(); |
52 | void setAPMTimeOut( int time ); | 52 | void setAPMTimeOut( int time ); |
53 | public: | 53 | public: |
54 | virtual bool suspend(); | 54 | virtual bool suspend(); |
55 | virtual bool setDisplayStatus(bool); | 55 | virtual bool setDisplayStatus(bool); |
56 | 56 | ||
57 | private: | 57 | protected: |
58 | int m_timeOut; | 58 | int m_timeOut; |
59 | }; | 59 | }; |
60 | } | 60 | } |
61 | } | 61 | } |
62 | 62 | ||
63 | 63 | ||
64 | #endif | 64 | #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 | |||
@@ -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 | } | ||
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 | |||
@@ -74,70 +74,71 @@ | |||
74 | // Rotation and Power Management | 74 | // Rotation and Power Management |
75 | #define SHARP_IOCTL_GET_ROTATION 0x413c | 75 | #define SHARP_IOCTL_GET_ROTATION 0x413c |
76 | 76 | ||
77 | #define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) | 77 | #define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) |
78 | #define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) | 78 | #define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) |
79 | #define APM_EVT_POWER_BUTTON (1 << 0) | 79 | #define APM_EVT_POWER_BUTTON (1 << 0) |
80 | 80 | ||
81 | // Brightness Embedix | 81 | // Brightness Embedix |
82 | #define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl" | 82 | #define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl" |
83 | #define SHARP_FL_IOCTL_ON 1 | 83 | #define SHARP_FL_IOCTL_ON 1 |
84 | #define SHARP_FL_IOCTL_OFF 2 | 84 | #define SHARP_FL_IOCTL_OFF 2 |
85 | #define SHARP_FL_IOCTL_STEP_CONTRAST 100 | 85 | #define SHARP_FL_IOCTL_STEP_CONTRAST 100 |
86 | #define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101 | 86 | #define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101 |
87 | #define SHARP_FL_IOCTL_GET_STEP 102 | 87 | #define SHARP_FL_IOCTL_GET_STEP 102 |
88 | 88 | ||
89 | // Vesa Standard | 89 | // Vesa Standard |
90 | #define FB_BLANK_UNBLANK 0 | 90 | #define FB_BLANK_UNBLANK 0 |
91 | #define FB_BLANK_POWERDOWN 4 | 91 | #define FB_BLANK_POWERDOWN 4 |
92 | 92 | ||
93 | namespace Opie { | 93 | namespace Opie { |
94 | namespace Core { | 94 | namespace Core { |
95 | namespace Internal { | 95 | namespace Internal { |
96 | 96 | ||
97 | class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter | 97 | class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter |
98 | { | 98 | { |
99 | protected: | 99 | protected: |
100 | virtual void init(const QString&); | 100 | virtual void init(const QString&); |
101 | virtual void initButtons(); | 101 | virtual void initButtons(); |
102 | 102 | ||
103 | public: | 103 | public: |
104 | virtual bool setDisplayBrightness( int b ); | 104 | virtual bool setDisplayBrightness( int b ); |
105 | virtual bool setDisplayStatus( bool on ); | 105 | virtual bool setDisplayStatus( bool on ); |
106 | virtual int displayBrightnessResolution() const; | 106 | virtual int displayBrightnessResolution() const; |
107 | 107 | ||
108 | virtual void playAlarmSound(); | 108 | virtual void playAlarmSound(); |
109 | virtual void playKeySound(); | 109 | virtual void playKeySound(); |
110 | virtual void playTouchSound(); | 110 | virtual void playTouchSound(); |
111 | 111 | ||
112 | virtual QValueList <OLed> ledList() const; | 112 | virtual QValueList <OLed> ledList() const; |
113 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 113 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
114 | virtual OLedState ledState( OLed led ) const; | 114 | virtual OLedState ledState( OLed led ) const; |
115 | virtual bool setLedState( OLed led, OLedState st ); | 115 | virtual bool setLedState( OLed led, OLedState st ); |
116 | 116 | ||
117 | virtual bool hasHingeSensor() const; | 117 | virtual bool hasHingeSensor() const; |
118 | virtual OHingeStatus readHingeSensor() const; | 118 | virtual OHingeStatus readHingeSensor() const; |
119 | 119 | ||
120 | virtual Transformation rotation() const; | 120 | virtual Transformation rotation() const; |
121 | virtual ODirection direction() const; | 121 | virtual ODirection direction() const; |
122 | virtual bool suspend(); | ||
122 | 123 | ||
123 | protected: | 124 | protected: |
124 | virtual void buzzer( int snd ); | 125 | virtual void buzzer( int snd ); |
125 | virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 126 | virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
126 | 127 | ||
127 | OLedState m_leds[1]; | 128 | OLedState m_leds[1]; |
128 | bool m_embedix; | 129 | bool m_embedix; |
129 | }; | 130 | }; |
130 | 131 | ||
131 | struct z_button { | 132 | struct z_button { |
132 | Qt::Key code; | 133 | Qt::Key code; |
133 | char *utext; | 134 | char *utext; |
134 | char *pix; | 135 | char *pix; |
135 | char *fpressedservice; | 136 | char *fpressedservice; |
136 | char *fpressedaction; | 137 | char *fpressedaction; |
137 | char *fheldservice; | 138 | char *fheldservice; |
138 | char *fheldaction; | 139 | char *fheldaction; |
139 | }; | 140 | }; |
140 | } | 141 | } |
141 | } | 142 | } |
142 | } | 143 | } |
143 | #endif | 144 | #endif |