summaryrefslogtreecommitdiff
authorpaule <paule>2007-06-29 05:58:46 (UTC)
committer paule <paule>2007-06-29 05:58:46 (UTC)
commit06bcedc305af0c1fe026abde4f4cc64b12b8ed63 (patch) (unidiff)
tree455f3bbc826a3a04f970bc7d7860d9a79c5f6cef
parent703d2871544d48268e1003a5534454f79f162b16 (diff)
downloadopie-06bcedc305af0c1fe026abde4f4cc64b12b8ed63.zip
opie-06bcedc305af0c1fe026abde4f4cc64b12b8ed63.tar.gz
opie-06bcedc305af0c1fe026abde4f4cc64b12b8ed63.tar.bz2
Palm patches:
* Reorder keys (bug #1860) * Add key F6 as rotate screen button for Palm LifeDrive (bug #1861) * Fix backlight on Palm Treo 650 (bug #1862) * Rotate function of directional keys when screen rotated (bug #1863) Patches courtesy of Marek Vasut <marek.vasut@gmail.com>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_palm.cpp41
1 files changed, 23 insertions, 18 deletions
diff --git a/libopie2/opiecore/device/odevice_palm.cpp b/libopie2/opiecore/device/odevice_palm.cpp
index 892083e..6d94687 100644
--- a/libopie2/opiecore/device/odevice_palm.cpp
+++ b/libopie2/opiecore/device/odevice_palm.cpp
@@ -40,100 +40,105 @@
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
60using namespace Opie::Core; 60using namespace Opie::Core;
61using namespace Opie::Core::Internal; 61using namespace Opie::Core::Internal;
62 62
63struct palm_button palm_buttons [] = { 63struct palm_button palm_buttons [] = {
64 { Model_Palm_LD,
65 Qt::Key_F6, QT_TRANSLATE_NOOP( "Button", "Rotate Button" ),
66 "devicebuttons/palm_rotate",
67 "QPE/Rotation", "flip()",
68 0, 0 },
69 { Model_Palm_LD | Model_Palm_Z72 | Model_Palm_T600 | Model_Palm_T650 |
70 Model_Palm_T680 | Model_Palm_T700W | Model_Palm_T700P |
71 Model_Palm_T750 | Model_Palm_T755P,
72 Qt::Key_F7, QT_TRANSLATE_NOOP( "Button", "Record Button" ),
73 "devicebuttons/palm_record",
74 "QPE/VMemo", "toggleRecord()",
75 "sound", "raise()" },
76 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
77 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
78 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
79 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
80 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
81 Qt::Key_F8, QT_TRANSLATE_NOOP( "Button", "Suspend Button" ),
82 "devicebuttons/palm_suspend",
83 "suspend", "raise()",
84 "suspend", "raise()" },
64 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 | 85 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
65 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD | 86 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
66 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 | 87 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
67 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W | 88 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
68 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P, 89 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
69 Qt::Key_F9, QT_TRANSLATE_NOOP( "Button", "Home Button" ), 90 Qt::Key_F9, QT_TRANSLATE_NOOP( "Button", "Home Button" ),
70 "devicebuttons/palm_home", 91 "devicebuttons/palm_home",
71 "QPE/Launcher", "home()", 92 "QPE/Launcher", "home()",
72 "buttonsettings", "raise()" }, 93 "buttonsettings", "raise()" },
73 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 | 94 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
74 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD | 95 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
75 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 | 96 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
76 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W | 97 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
77 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P, 98 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
78 Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ), 99 Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ),
79 "devicebuttons/palm_calendar", 100 "devicebuttons/palm_calendar",
80 "datebook", "nextView()", 101 "datebook", "nextView()",
81 "today", "raise()" }, 102 "today", "raise()" },
82 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 | 103 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
83 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD | 104 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
84 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 | 105 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
85 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W | 106 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
86 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P, 107 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
87 Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ), 108 Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ),
88 "devicebuttons/palm_todo", 109 "devicebuttons/palm_todo",
89 "todolist", "raise()", 110 "todolist", "raise()",
90 "todolist", "create()" }, 111 "todolist", "create()" },
91 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 | 112 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
92 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD | 113 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
93 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 | 114 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
94 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W | 115 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
95 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P, 116 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
96 Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ), 117 Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ),
97 "devicebuttons/palm_mail", 118 "devicebuttons/palm_mail",
98 "opiemail", "raise()", 119 "opiemail", "raise()",
99 "opiemail", "newmail()" }, 120 "opiemail", "newmail()" },
100 { Model_Palm_LD | Model_Palm_Z72 | Model_Palm_T600 | Model_Palm_T650 |
101 Model_Palm_T680 | Model_Palm_T700W | Model_Palm_T700P |
102 Model_Palm_T750 | Model_Palm_T755P,
103 Qt::Key_F7, QT_TRANSLATE_NOOP( "Button", "Record Button" ),
104 "devicebuttons/palm_record",
105 "QPE/VMemo", "toggleRecord()",
106 "sound", "raise()" },
107 { Model_Palm_TT | Model_Palm_TT2 | Model_Palm_TT3 | Model_Palm_TT5 |
108 Model_Palm_TE | Model_Palm_TE2 | Model_Palm_TC | Model_Palm_LD |
109 Model_Palm_TX | Model_Palm_Z71 | Model_Palm_Z72 | Model_Palm_T600 |
110 Model_Palm_T650 | Model_Palm_T680 | Model_Palm_T700W |
111 Model_Palm_T700P | Model_Palm_T750 | Model_Palm_T755P,
112 Qt::Key_F8, QT_TRANSLATE_NOOP( "Button", "Suspend Button" ),
113 "devicebuttons/palm_suspend",
114 "suspend", "raise()",
115 "suspend", "raise()" },
116}; 121};
117 122
118void Palm::init(const QString& cpu_info) 123void Palm::init(const QString& cpu_info)
119{ 124{
120 d->m_vendorstr = "Palm"; 125 d->m_vendorstr = "Palm";
121 d->m_vendor = Vendor_Palm; 126 d->m_vendor = Vendor_Palm;
122 127
123 QString model = "unknown"; 128 QString model = "unknown";
124 129
125 int loc = cpu_info.find( ":" ); 130 int loc = cpu_info.find( ":" );
126 if ( loc != -1 ) 131 if ( loc != -1 )
127 model = cpu_info.mid( loc+2 ).simplifyWhiteSpace(); 132 model = cpu_info.mid( loc+2 ).simplifyWhiteSpace();
128 else 133 else
129 model = cpu_info; 134 model = cpu_info;
130 135
131 if ( model == "Palm Tungsten T" ) { 136 if ( model == "Palm Tungsten T" ) {
132 d->m_modelstr = "Palm Tungsten|T"; 137 d->m_modelstr = "Palm Tungsten|T";
133 d->m_model = Model_Palm_TT; 138 d->m_model = Model_Palm_TT;
134 } 139 }
135 else if ( model == "Palm Tungsten T2" ) { 140 else if ( model == "Palm Tungsten T2" ) {
136 d->m_modelstr = "Palm Tungsten|T2"; 141 d->m_modelstr = "Palm Tungsten|T2";
137 d->m_model = Model_Palm_TT2; 142 d->m_model = Model_Palm_TT2;
138 } 143 }
139 else if ( model == "Palm Tungsten T3" ) { 144 else if ( model == "Palm Tungsten T3" ) {
@@ -195,61 +200,61 @@ void Palm::init(const QString& cpu_info)
195 else if ( model == "Palm Treo 750" ) { 200 else if ( model == "Palm Treo 750" ) {
196 d->m_modelstr = "Palm Treo 750"; 201 d->m_modelstr = "Palm Treo 750";
197 d->m_model = Model_Palm_T750; 202 d->m_model = Model_Palm_T750;
198 } 203 }
199 else if ( model == "Palm Treo 755p" ) { 204 else if ( model == "Palm Treo 755p" ) {
200 d->m_modelstr= "Palm Treo 755"; 205 d->m_modelstr= "Palm Treo 755";
201 d->m_model= Model_Palm_T755P; 206 d->m_model= Model_Palm_T755P;
202 } 207 }
203 else if ( model == "Palm Foleo" ) { 208 else if ( model == "Palm Foleo" ) {
204 d->m_modelstr= "Palm Foleo"; 209 d->m_modelstr= "Palm Foleo";
205 d->m_model= Model_Palm_FOLEO; 210 d->m_model= Model_Palm_FOLEO;
206 } 211 }
207 else 212 else
208 d->m_model = Model_Unknown; 213 d->m_model = Model_Unknown;
209 214
210 switch ( d->m_model ) 215 switch ( d->m_model )
211 { 216 {
212 case Model_Palm_TT3: 217 case Model_Palm_TT3:
213 case Model_Palm_TT5: 218 case Model_Palm_TT5:
214 case Model_Palm_TC: 219 case Model_Palm_TC:
215 case Model_Palm_LD: 220 case Model_Palm_LD:
216 case Model_Palm_TX: 221 case Model_Palm_TX:
217 case Model_Palm_TE2: 222 case Model_Palm_TE2:
218 case Model_Palm_Z72: 223 case Model_Palm_Z72:
224 case Model_Palm_T650:
219 m_backlightdev = "/sys/class/backlight/pxapwm-bl/"; 225 m_backlightdev = "/sys/class/backlight/pxapwm-bl/";
220 d->m_rotation = Rot0; 226 d->m_rotation = Rot0;
221 d->m_direction = CCW; 227 d->m_direction = CCW;
222 d->m_qteDriver = "Transformed"; 228 d->m_qteDriver = "Transformed";
223 break; 229 break;
224 case Model_Palm_T600: 230 case Model_Palm_T600:
225 case Model_Palm_TT: 231 case Model_Palm_TT:
226 case Model_Palm_TT2: 232 case Model_Palm_TT2:
227 case Model_Palm_TE: 233 case Model_Palm_TE:
228 case Model_Palm_Z71: 234 case Model_Palm_Z71:
229 m_backlightdev = "/sys/class/backlight/omap-bl/"; 235 m_backlightdev = "/sys/class/backlight/omap-bl/";
230 break; 236 break;
231 case Model_Palm_T650:
232 case Model_Palm_T680: 237 case Model_Palm_T680:
233 case Model_Palm_T700W: 238 case Model_Palm_T700W:
234 case Model_Palm_T700P: 239 case Model_Palm_T700P:
235 case Model_Palm_T750: 240 case Model_Palm_T750:
236 case Model_Palm_T755P: 241 case Model_Palm_T755P:
237 m_backlightdev = "/sys/class/backlight/corgi-bl/"; 242 m_backlightdev = "/sys/class/backlight/corgi-bl/";
238 break; 243 break;
239 244
240 default: 245 default:
241 m_backlightdev = ""; 246 m_backlightdev = "";
242 } 247 }
243 248
244} 249}
245 250
246 251
247void Palm::initButtons() 252void Palm::initButtons()
248{ 253{
249 254
250 if ( d->m_buttons ) 255 if ( d->m_buttons )
251 return ; 256 return ;
252 257
253 if ( isQWS( ) ) { 258 if ( isQWS( ) ) {
254 addPreHandler(this); 259 addPreHandler(this);
255 } 260 }
@@ -265,49 +270,49 @@ void Palm::initButtons()
265 b. setKeycode ( ib->code ); 270 b. setKeycode ( ib->code );
266 b. setUserText ( QObject::tr ( "Button", ib->utext )); 271 b. setUserText ( QObject::tr ( "Button", ib->utext ));
267 b. setPixmap ( OResource::loadPixmap ( ib->pix )); 272 b. setPixmap ( OResource::loadPixmap ( ib->pix ));
268 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); 273 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction ));
269 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); 274 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction ));
270 275
271 d->m_buttons->append ( b ); 276 d->m_buttons->append ( b );
272 } 277 }
273 } 278 }
274 reloadButtonMapping(); 279 reloadButtonMapping();
275} 280}
276 281
277 282
278bool Palm::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 283bool Palm::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
279{ 284{
280 int newkeycode = keycode; 285 int newkeycode = keycode;
281 286
282 if (qt_screen->transformOrientation() != Rot0){ 287 if (qt_screen->transformOrientation() != Rot0){
283 288
284 switch ( keycode ) { 289 switch ( keycode ) {
285 case Key_Left : 290 case Key_Left :
286 case Key_Right: 291 case Key_Right:
287 case Key_Up : 292 case Key_Up :
288 case Key_Down : 293 case Key_Down :
289 newkeycode = Key_Left + ( keycode - Key_Left + (int) qt_screen->transformOrientation() ) % 4; 294 newkeycode = Key_Left + ( keycode - Key_Left + 4 ) % 4;
290 default: 295 default:
291 break; 296 break;
292 } 297 }
293 298
294 if (newkeycode!=keycode) { 299 if (newkeycode!=keycode) {
295 if ( newkeycode != Key_unknown ) { 300 if ( newkeycode != Key_unknown ) {
296 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 301 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
297 } 302 }
298 return true; 303 return true;
299 } 304 }
300 305
301 } 306 }
302 307
303 return false; 308 return false;
304} 309}
305 310
306 311
307bool Palm::suspend() 312bool Palm::suspend()
308{ 313{
309 // some Palms do not implement their own power management at the moment. 314 // some Palms do not implement their own power management at the moment.
310 315
311 bool res = false; 316 bool res = false;
312 317
313 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 318 if ( !isQWS( ) ) // only qwsserver is allowed to suspend