author | erik <erik> | 2007-02-13 21:52:06 (UTC) |
---|---|---|
committer | erik <erik> | 2007-02-13 21:52:06 (UTC) |
commit | 45f2e4cdc6e185439ef4bde6e2b8181a4decd032 (patch) (unidiff) | |
tree | 93af498e98728650df1d5e1e62a9711c339c65d4 | |
parent | da26f048379252aa1646d54348706c6cb3756a09 (diff) | |
download | opie-45f2e4cdc6e185439ef4bde6e2b8181a4decd032.zip opie-45f2e4cdc6e185439ef4bde6e2b8181a4decd032.tar.gz opie-45f2e4cdc6e185439ef4bde6e2b8181a4decd032.tar.bz2 |
This commit fixes bug 1840. The problem is that the palm support declared
a variable inside of a case statement. When I integrated the patch for
palm support I streamlined the switch. This lost the brackets that would
be required to declare vars inside of switch statements. The bug slipped
by because I wasn't doing arm compiles at the time. Sorry.
This patch fixes it. It also slides in some corrections associated to what
open and sscanf return. It should not cause any behavior change.
Thanks goes to GoXbox Live for reporting the problem.
-rw-r--r-- | libopie2/opiecore/device/odevice_palm.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libopie2/opiecore/device/odevice_palm.cpp b/libopie2/opiecore/device/odevice_palm.cpp index 399c08c..d40dfce 100644 --- a/libopie2/opiecore/device/odevice_palm.cpp +++ b/libopie2/opiecore/device/odevice_palm.cpp | |||
@@ -1,284 +1,288 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | 3 | ||
4 | Copyright (C)2002-2005 The Opie Team <opie-devel@handhelds.org> | 4 | Copyright (C)2002-2005 The Opie Team <opie-devel@handhelds.org> |
5 | =. | 5 | =. |
6 | .=l. | 6 | .=l. |
7 | .>+-= | 7 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 8 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 9 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 11 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; either version 2 of the License, | 12 | - . .-<_> .<> Foundation; either version 2 of the License, |
13 | ._= =} : or (at your option) any later version. | 13 | ._= =} : or (at your option) any later version. |
14 | .%`+i> _;_. | 14 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 15 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 17 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 20 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 21 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 22 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 23 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 24 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 25 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 26 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 27 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 28 | Boston, MA 02111-1307, USA. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include "odevice_palm.h" | 31 | #include "odevice_palm.h" |
32 | 32 | ||
33 | /* QT */ | 33 | /* QT */ |
34 | #include <qapplication.h> | 34 | #include <qapplication.h> |
35 | #include <qfile.h> | 35 | #include <qfile.h> |
36 | #include <qtextstream.h> | 36 | #include <qtextstream.h> |
37 | #include <qwindowsystem_qws.h> | 37 | #include <qwindowsystem_qws.h> |
38 | #include <qgfx_qws.h> | 38 | #include <qgfx_qws.h> |
39 | 39 | ||
40 | /* OPIE */ | 40 | /* OPIE */ |
41 | #include <qpe/config.h> | 41 | #include <qpe/config.h> |
42 | #include <qpe/sound.h> | 42 | #include <qpe/sound.h> |
43 | #include <qpe/qcopenvelope_qws.h> | 43 | #include <qpe/qcopenvelope_qws.h> |
44 | 44 | ||
45 | #include <opie2/okeyfilter.h> | 45 | #include <opie2/okeyfilter.h> |
46 | #include <opie2/oresource.h> | 46 | #include <opie2/oresource.h> |
47 | 47 | ||
48 | /* STD */ | 48 | /* STD */ |
49 | #include <fcntl.h> | 49 | #include <fcntl.h> |
50 | #include <math.h> | 50 | #include <math.h> |
51 | #include <stdlib.h> | 51 | #include <stdlib.h> |
52 | #include <signal.h> | 52 | #include <signal.h> |
53 | #include <sys/ioctl.h> | 53 | #include <sys/ioctl.h> |
54 | #include <sys/time.h> | 54 | #include <sys/time.h> |
55 | #include <unistd.h> | 55 | #include <unistd.h> |
56 | #ifndef QT_NO_SOUND | 56 | #ifndef QT_NO_SOUND |
57 | #include <linux/soundcard.h> | 57 | #include <linux/soundcard.h> |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | using namespace Opie::Core; | 60 | using namespace Opie::Core; |
61 | using namespace Opie::Core::Internal; | 61 | using namespace Opie::Core::Internal; |
62 | 62 | ||
63 | struct palm_button palm_buttons [] = { | 63 | struct palm_button palm_buttons [] = { |
64 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, | 64 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, |
65 | Qt::Key_F9, QT_TRANSLATE_NOOP( "Button", "Home Button" ), | 65 | Qt::Key_F9, QT_TRANSLATE_NOOP( "Button", "Home Button" ), |
66 | "devicebuttons/palm_home", | 66 | "devicebuttons/palm_home", |
67 | "QPE/Launcher", "home()", | 67 | "QPE/Launcher", "home()", |
68 | "buttonsettings", "raise()" }, | 68 | "buttonsettings", "raise()" }, |
69 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, | 69 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, |
70 | Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ), | 70 | Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ), |
71 | "devicebuttons/palm_calendar", | 71 | "devicebuttons/palm_calendar", |
72 | "datebook", "nextView()", | 72 | "datebook", "nextView()", |
73 | "today", "raise()" }, | 73 | "today", "raise()" }, |
74 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, | 74 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, |
75 | Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ), | 75 | Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ), |
76 | "devicebuttons/palm_todo", | 76 | "devicebuttons/palm_todo", |
77 | "todolist", "raise()", | 77 | "todolist", "raise()", |
78 | "todolist", "create()" }, | 78 | "todolist", "create()" }, |
79 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, | 79 | { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72, |
80 | Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ), | 80 | Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ), |
81 | "devicebuttons/palm_mail", | 81 | "devicebuttons/palm_mail", |
82 | "opiemail", "raise()", | 82 | "opiemail", "raise()", |
83 | "opiemail", "newmail()" }, | 83 | "opiemail", "newmail()" }, |
84 | { Model_Palm_LD, | 84 | { Model_Palm_LD, |
85 | Qt::Key_F7, QT_TRANSLATE_NOOP( "Button", "Voice Memo Button" ), | 85 | Qt::Key_F7, QT_TRANSLATE_NOOP( "Button", "Voice Memo Button" ), |
86 | "devicebuttons/palm_voice_memo", | 86 | "devicebuttons/palm_voice_memo", |
87 | "QPE/TaskBar", "toggleMenu()", | 87 | "QPE/TaskBar", "toggleMenu()", |
88 | "QPE/TaskBar", "toggleStartMenu()" }, | 88 | "QPE/TaskBar", "toggleStartMenu()" }, |
89 | { Model_Palm_LD, | 89 | { Model_Palm_LD, |
90 | Qt::Key_F8, QT_TRANSLATE_NOOP( "Button", "Rotate Button" ), | 90 | Qt::Key_F8, QT_TRANSLATE_NOOP( "Button", "Rotate Button" ), |
91 | "devicebuttons/palm_rotate", | 91 | "devicebuttons/palm_rotate", |
92 | "QPE/Rotation", "flip()",0,0}, | 92 | "QPE/Rotation", "flip()",0,0}, |
93 | }; | 93 | }; |
94 | 94 | ||
95 | void Palm::init(const QString& cpu_info) | 95 | void Palm::init(const QString& cpu_info) |
96 | { | 96 | { |
97 | d->m_vendorstr = "Palm"; | 97 | d->m_vendorstr = "Palm"; |
98 | d->m_vendor = Vendor_Palm; | 98 | d->m_vendor = Vendor_Palm; |
99 | 99 | ||
100 | QString model = "unknown"; | 100 | QString model = "unknown"; |
101 | 101 | ||
102 | int loc = cpu_info.find( ":" ); | 102 | int loc = cpu_info.find( ":" ); |
103 | if ( loc != -1 ) | 103 | if ( loc != -1 ) |
104 | model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); | 104 | model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); |
105 | else | 105 | else |
106 | model = cpu_info; | 106 | model = cpu_info; |
107 | 107 | ||
108 | if ( model == "Palm LifeDrive" ) { | 108 | if ( model == "Palm LifeDrive" ) { |
109 | d->m_modelstr = "Palm LifeDrive"; | 109 | d->m_modelstr = "Palm LifeDrive"; |
110 | d->m_model = Model_Palm_LD; | 110 | d->m_model = Model_Palm_LD; |
111 | } | 111 | } |
112 | else if ( model == "Palm TX" ) { | 112 | else if ( model == "Palm TX" ) { |
113 | d->m_modelstr = "Palm TX"; | 113 | d->m_modelstr = "Palm TX"; |
114 | d->m_model = Model_Palm_TX; | 114 | d->m_model = Model_Palm_TX; |
115 | } | 115 | } |
116 | else if ( model == "Palm Zire 72" ) { | 116 | else if ( model == "Palm Zire 72" ) { |
117 | d->m_modelstr = "Palm Zire 72"; | 117 | d->m_modelstr = "Palm Zire 72"; |
118 | d->m_model = Model_Palm_Z72; | 118 | d->m_model = Model_Palm_Z72; |
119 | } | 119 | } |
120 | else | 120 | else |
121 | d->m_model = Model_Unknown; | 121 | d->m_model = Model_Unknown; |
122 | 122 | ||
123 | switch ( d->m_model ) | 123 | switch ( d->m_model ) |
124 | { | 124 | { |
125 | case Model_Palm_LD: | 125 | case Model_Palm_LD: |
126 | case Model_Palm_TX: | 126 | case Model_Palm_TX: |
127 | case Model_Palm_Z72: | 127 | case Model_Palm_Z72: |
128 | m_backlightdev = "/sys/class/backlight/pxapwm-bl/"; | 128 | m_backlightdev = "/sys/class/backlight/pxapwm-bl/"; |
129 | d->m_rotation = Rot0; | 129 | d->m_rotation = Rot0; |
130 | d->m_direction = CCW; | 130 | d->m_direction = CCW; |
131 | d->m_qteDriver = "Transformed"; | 131 | d->m_qteDriver = "Transformed"; |
132 | break; | 132 | break; |
133 | default: | 133 | default: |
134 | m_backlightdev = ""; | 134 | m_backlightdev = ""; |
135 | } | 135 | } |
136 | 136 | ||
137 | } | 137 | } |
138 | 138 | ||
139 | 139 | ||
140 | void Palm::initButtons() | 140 | void Palm::initButtons() |
141 | { | 141 | { |
142 | 142 | ||
143 | if ( d->m_buttons ) | 143 | if ( d->m_buttons ) |
144 | return ; | 144 | return ; |
145 | 145 | ||
146 | if ( isQWS( ) ) { | 146 | if ( isQWS( ) ) { |
147 | addPreHandler(this); | 147 | addPreHandler(this); |
148 | } | 148 | } |
149 | 149 | ||
150 | d->m_buttons = new QValueList <ODeviceButton>; | 150 | d->m_buttons = new QValueList <ODeviceButton>; |
151 | 151 | ||
152 | for ( uint i = 0; i < ( sizeof( palm_buttons ) / sizeof( palm_button ) ); i++ ) | 152 | for ( uint i = 0; i < ( sizeof( palm_buttons ) / sizeof( palm_button ) ); i++ ) |
153 | { | 153 | { |
154 | palm_button *ib = palm_buttons + i; | 154 | palm_button *ib = palm_buttons + i; |
155 | ODeviceButton b; | 155 | ODeviceButton b; |
156 | 156 | ||
157 | if (( ib->model & d->m_model ) == d->m_model ) { | 157 | if (( ib->model & d->m_model ) == d->m_model ) { |
158 | b. setKeycode ( ib->code ); | 158 | b. setKeycode ( ib->code ); |
159 | b. setUserText ( QObject::tr ( "Button", ib->utext )); | 159 | b. setUserText ( QObject::tr ( "Button", ib->utext )); |
160 | b. setPixmap ( OResource::loadPixmap ( ib->pix )); | 160 | b. setPixmap ( OResource::loadPixmap ( ib->pix )); |
161 | b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); | 161 | b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); |
162 | b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); | 162 | b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); |
163 | 163 | ||
164 | d->m_buttons->append ( b ); | 164 | d->m_buttons->append ( b ); |
165 | } | 165 | } |
166 | } | 166 | } |
167 | reloadButtonMapping(); | 167 | reloadButtonMapping(); |
168 | } | 168 | } |
169 | 169 | ||
170 | 170 | ||
171 | bool Palm::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) | 171 | bool Palm::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) |
172 | { | 172 | { |
173 | int newkeycode = keycode; | 173 | int newkeycode = keycode; |
174 | 174 | ||
175 | if (qt_screen->transformOrientation() != Rot0){ | 175 | if (qt_screen->transformOrientation() != Rot0){ |
176 | 176 | ||
177 | switch ( keycode ) { | 177 | switch ( keycode ) { |
178 | case Key_Left : | 178 | case Key_Left : |
179 | case Key_Right: | 179 | case Key_Right: |
180 | case Key_Up : | 180 | case Key_Up : |
181 | case Key_Down : | 181 | case Key_Down : |
182 | newkeycode = Key_Left + ( keycode - Key_Left + (int) qt_screen->transformOrientation() ) % 4; | 182 | newkeycode = Key_Left + ( keycode - Key_Left + (int) qt_screen->transformOrientation() ) % 4; |
183 | default: | 183 | default: |
184 | break; | 184 | break; |
185 | } | 185 | } |
186 | 186 | ||
187 | if (newkeycode!=keycode) { | 187 | if (newkeycode!=keycode) { |
188 | if ( newkeycode != Key_unknown ) { | 188 | if ( newkeycode != Key_unknown ) { |
189 | QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); | 189 | QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); |
190 | } | 190 | } |
191 | return true; | 191 | return true; |
192 | } | 192 | } |
193 | 193 | ||
194 | } | 194 | } |
195 | 195 | ||
196 | return false; | 196 | return false; |
197 | } | 197 | } |
198 | 198 | ||
199 | 199 | ||
200 | bool Palm::suspend() | 200 | bool Palm::suspend() |
201 | { | 201 | { |
202 | // some Palms do not implement their own power management at the moment. | 202 | // some Palms do not implement their own power management at the moment. |
203 | 203 | ||
204 | bool res = false; | 204 | bool res = false; |
205 | 205 | ||
206 | if ( !isQWS( ) ) // only qwsserver is allowed to suspend | 206 | if ( !isQWS( ) ) // only qwsserver is allowed to suspend |
207 | return false; | 207 | return false; |
208 | 208 | ||
209 | switch ( d->m_model ) { | 209 | switch ( d->m_model ) { |
210 | case Model_Palm_LD: | 210 | case Model_Palm_LD: |
211 | case Model_Palm_Z72: | 211 | case Model_Palm_Z72: |
212 | { | 212 | { |
213 | QCopChannel::send( "QPE/System", "aboutToSuspend()" ); | 213 | QCopChannel::send( "QPE/System", "aboutToSuspend()" ); |
214 | 214 | ||
215 | ::sync(); // flush fs caches | 215 | ::sync(); // flush fs caches |
216 | res = ( ::system ( "apm --suspend" ) == 0 ); | 216 | res = ( ::system ( "apm --suspend" ) == 0 ); |
217 | 217 | ||
218 | QCopChannel::send( "QPE/System", "returnFromSuspend()" ); | 218 | QCopChannel::send( "QPE/System", "returnFromSuspend()" ); |
219 | } | 219 | } |
220 | break; | 220 | break; |
221 | default: | 221 | default: |
222 | break; | 222 | break; |
223 | } | 223 | } |
224 | 224 | ||
225 | return res; | 225 | return res; |
226 | } | 226 | } |
227 | 227 | ||
228 | 228 | ||
229 | int Palm::displayBrightnessResolution() const | 229 | int Palm::displayBrightnessResolution() const |
230 | { | 230 | { |
231 | int res = 1; | 231 | int res = 1; |
232 | int fd = -1; | ||
232 | 233 | ||
233 | switch ( d->m_model ) | 234 | switch ( d->m_model ) |
234 | { | 235 | { |
235 | case Model_Palm_LD: | 236 | case Model_Palm_LD: |
236 | case Model_Palm_TX: | 237 | case Model_Palm_TX: |
237 | case Model_Palm_Z72: | 238 | case Model_Palm_Z72: |
238 | int fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK ); | 239 | fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK ); |
239 | if ( fd ) | 240 | if ( fd != -1) |
240 | { | 241 | { |
241 | char buf[100]; | 242 | char buf[100]; |
242 | if ( ::read( fd, &buf[0], sizeof buf ) ) ::sscanf( &buf[0], "%d", &res ); | 243 | if ( ::read( fd, &buf[0], sizeof buf ) > 0 ) |
244 | ::sscanf( &buf[0], "%d", &res ); | ||
243 | ::close( fd ); | 245 | ::close( fd ); |
244 | } | 246 | } |
245 | break; | 247 | break; |
246 | 248 | ||
247 | default: | 249 | default: |
248 | res = 1; | 250 | res = 1; |
249 | } | 251 | } |
250 | 252 | ||
251 | return res; | 253 | return res; |
252 | } | 254 | } |
253 | 255 | ||
254 | 256 | ||
255 | bool Palm::setDisplayBrightness( int bright ) | 257 | bool Palm::setDisplayBrightness( int bright ) |
256 | { | 258 | { |
257 | bool res = false; | 259 | bool res = false; |
258 | 260 | ||
259 | if ( bright > 255 ) bright = 255; | 261 | if ( bright > 255 ) bright = 255; |
260 | if ( bright < 0 ) bright = 0; | 262 | if ( bright < 0 ) bright = 0; |
261 | 263 | ||
262 | int numberOfSteps = displayBrightnessResolution(); | 264 | int numberOfSteps = displayBrightnessResolution(); |
263 | int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255; | 265 | int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255; |
266 | int fd = -1; | ||
264 | 267 | ||
265 | switch ( d->m_model ) | 268 | switch ( d->m_model ) |
266 | { | 269 | { |
267 | 270 | ||
268 | case Model_Palm_LD: | 271 | case Model_Palm_LD: |
269 | case Model_Palm_TX: | 272 | case Model_Palm_TX: |
270 | case Model_Palm_Z72: | 273 | case Model_Palm_Z72: |
271 | int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); | 274 | fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK ); |
272 | if ( fd ) | 275 | if ( fd != -1 ) |
273 | { | 276 | { |
274 | char buf[100]; | 277 | char buf[100]; |
275 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); | 278 | int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); |
276 | res = ( ::write( fd, &buf[0], len ) == 0 ); | 279 | res = ( ::write( fd, &buf[0], len ) == 0 ); |
277 | ::close( fd ); | 280 | ::close( fd ); |
278 | } | 281 | } |
279 | break; | 282 | break; |
280 | 283 | ||
281 | default: res = false; | 284 | default: |
285 | res = false; | ||
282 | } | 286 | } |
283 | return res; | 287 | return res; |
284 | } | 288 | } |