summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
Unidiff
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index c0b6efa..4258d60 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1,2846 +1,2846 @@
1/* This file is part of the OPIE libraries 1/* This file is part of the OPIE libraries
2 Copyright (C) 2002 Robert Griebl (sandman@handhelds.org) 2 Copyright (C) 2002 Robert Griebl (sandman@handhelds.org)
3 3
4 This library is free software; you can redistribute it and/or 4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public 5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either 6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version. 7 version 2 of the License, or (at your option) any later version.
8 8
9 This library is distributed in the hope that it will be useful, 9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details. 12 Library General Public License for more details.
13 13
14 You should have received a copy of the GNU Library General Public License 14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to 15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. 17 Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <stdlib.h> 20#include <stdlib.h>
21#include <unistd.h> 21#include <unistd.h>
22#include <fcntl.h> 22#include <fcntl.h>
23#include <sys/ioctl.h> 23#include <sys/ioctl.h>
24#include <signal.h> 24#include <signal.h>
25#include <sys/time.h> 25#include <sys/time.h>
26#ifndef QT_NO_SOUND 26#ifndef QT_NO_SOUND
27#include <linux/soundcard.h> 27#include <linux/soundcard.h>
28#endif 28#endif
29#include <math.h> 29#include <math.h>
30 30
31 31
32#include <qfile.h> 32#include <qfile.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qpe/sound.h> 34#include <qpe/sound.h>
35#include <qpe/resource.h> 35#include <qpe/resource.h>
36#include <qpe/config.h> 36#include <qpe/config.h>
37#include <qpe/qcopenvelope_qws.h> 37#include <qpe/qcopenvelope_qws.h>
38 38
39#include "odevice.h" 39#include "odevice.h"
40 40
41#include <qwindowsystem_qws.h> 41#include <qwindowsystem_qws.h>
42 42
43#ifndef ARRAY_SIZE 43#ifndef ARRAY_SIZE
44#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 44#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
45#endif 45#endif
46 46
47// _IO and friends are only defined in kernel headers ... 47// _IO and friends are only defined in kernel headers ...
48 48
49#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 49#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
50 50
51#define OD_IO(type,number) OD_IOC(0,type,number,0) 51#define OD_IO(type,number) OD_IOC(0,type,number,0)
52#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 52#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
53#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 53#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
54#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 54#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
55 55
56using namespace Opie; 56using namespace Opie;
57 57
58class ODeviceData { 58class ODeviceData {
59public: 59public:
60 QString m_vendorstr; 60 QString m_vendorstr;
61 OVendor m_vendor; 61 OVendor m_vendor;
62 62
63 QString m_modelstr; 63 QString m_modelstr;
64 OModel m_model; 64 OModel m_model;
65 65
66 QString m_systemstr; 66 QString m_systemstr;
67 OSystem m_system; 67 OSystem m_system;
68 68
69 QString m_sysverstr; 69 QString m_sysverstr;
70 70
71 Transformation m_rotation; 71 Transformation m_rotation;
72 ODirection m_direction; 72 ODirection m_direction;
73 73
74 QValueList <ODeviceButton> *m_buttons; 74 QValueList <ODeviceButton> *m_buttons;
75 uint m_holdtime; 75 uint m_holdtime;
76 QStrList *m_cpu_frequencies; 76 QStrList *m_cpu_frequencies;
77 77
78}; 78};
79 79
80class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 80class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
81protected: 81protected:
82 virtual void init ( ); 82 virtual void init ( );
83 virtual void initButtons ( ); 83 virtual void initButtons ( );
84 84
85public: 85public:
86 virtual bool setSoftSuspend ( bool soft ); 86 virtual bool setSoftSuspend ( bool soft );
87 87
88 virtual bool setDisplayBrightness ( int b ); 88 virtual bool setDisplayBrightness ( int b );
89 virtual int displayBrightnessResolution ( ) const; 89 virtual int displayBrightnessResolution ( ) const;
90 90
91 virtual void alarmSound ( ); 91 virtual void alarmSound ( );
92 92
93 virtual QValueList <OLed> ledList ( ) const; 93 virtual QValueList <OLed> ledList ( ) const;
94 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 94 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
95 virtual OLedState ledState ( OLed led ) const; 95 virtual OLedState ledState ( OLed led ) const;
96 virtual bool setLedState ( OLed led, OLedState st ); 96 virtual bool setLedState ( OLed led, OLedState st );
97 97
98 virtual bool hasLightSensor ( ) const; 98 virtual bool hasLightSensor ( ) const;
99 virtual int readLightSensor ( ); 99 virtual int readLightSensor ( );
100 virtual int lightSensorResolution ( ) const; 100 virtual int lightSensorResolution ( ) const;
101 101
102protected: 102protected:
103 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 103 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
104 virtual void timerEvent ( QTimerEvent *te ); 104 virtual void timerEvent ( QTimerEvent *te );
105 105
106 int m_power_timer; 106 int m_power_timer;
107 107
108 OLedState m_leds [2]; 108 OLedState m_leds [2];
109}; 109};
110 110
111class Jornada : public ODevice { 111class Jornada : public ODevice {
112protected: 112protected:
113 virtual void init ( ); 113 virtual void init ( );
114 //virtual void initButtons ( ); 114 //virtual void initButtons ( );
115public: 115public:
116 virtual bool setSoftSuspend ( bool soft ); 116 virtual bool setSoftSuspend ( bool soft );
117 virtual bool setDisplayBrightness ( int b ); 117 virtual bool setDisplayBrightness ( int b );
118 virtual int displayBrightnessResolution ( ) const; 118 virtual int displayBrightnessResolution ( ) const;
119 static bool isJornada(); 119 static bool isJornada();
120 120
121}; 121};
122 122
123class Zaurus : public ODevice { 123class Zaurus : public ODevice {
124protected: 124protected:
125 virtual void init ( ); 125 virtual void init ( );
126 virtual void initButtons ( ); 126 virtual void initButtons ( );
127 127
128public: 128public:
129 virtual bool setSoftSuspend ( bool soft ); 129 virtual bool setSoftSuspend ( bool soft );
130 130
131 virtual bool setDisplayBrightness ( int b ); 131 virtual bool setDisplayBrightness ( int b );
132 virtual int displayBrightnessResolution ( ) const; 132 virtual int displayBrightnessResolution ( ) const;
133 133
134 virtual void alarmSound ( ); 134 virtual void alarmSound ( );
135 virtual void keySound ( ); 135 virtual void keySound ( );
136 virtual void touchSound ( ); 136 virtual void touchSound ( );
137 137
138 virtual QValueList <OLed> ledList ( ) const; 138 virtual QValueList <OLed> ledList ( ) const;
139 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 139 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
140 virtual OLedState ledState ( OLed led ) const; 140 virtual OLedState ledState ( OLed led ) const;
141 virtual bool setLedState ( OLed led, OLedState st ); 141 virtual bool setLedState ( OLed led, OLedState st );
142 142
143 bool hasHingeSensor() const; 143 bool hasHingeSensor() const;
144 OHingeStatus readHingeSensor(); 144 OHingeStatus readHingeSensor();
145 145
146 static bool isZaurus(); 146 static bool isZaurus();
147 147
148 // Does this break BC? 148 // Does this break BC?
149 virtual bool suspend ( ); 149 virtual bool suspend ( );
150 Transformation rotation ( ) const; 150 Transformation rotation ( ) const;
151 ODirection direction ( ) const; 151 ODirection direction ( ) const;
152 152
153protected: 153protected:
154 virtual void buzzer ( int snd ); 154 virtual void buzzer ( int snd );
155 155
156 OLedState m_leds [1]; 156 OLedState m_leds [1];
157 bool m_embedix; 157 bool m_embedix;
158 void virtual_hook( int id, void *data ); 158 void virtual_hook( int id, void *data );
159}; 159};
160 160
161class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 161class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
162protected: 162protected:
163 virtual void init ( ); 163 virtual void init ( );
164 virtual void initButtons ( ); 164 virtual void initButtons ( );
165 165
166public: 166public:
167 virtual bool setSoftSuspend ( bool soft ); 167 virtual bool setSoftSuspend ( bool soft );
168 virtual bool suspend(); 168 virtual bool suspend();
169 169
170 virtual bool setDisplayStatus( bool on ); 170 virtual bool setDisplayStatus( bool on );
171 virtual bool setDisplayBrightness ( int b ); 171 virtual bool setDisplayBrightness ( int b );
172 virtual int displayBrightnessResolution ( ) const; 172 virtual int displayBrightnessResolution ( ) const;
173 173
174 virtual void alarmSound ( ); 174 virtual void alarmSound ( );
175 175
176 virtual QValueList <OLed> ledList ( ) const; 176 virtual QValueList <OLed> ledList ( ) const;
177 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 177 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
178 virtual OLedState ledState ( OLed led ) const; 178 virtual OLedState ledState ( OLed led ) const;
179 virtual bool setLedState ( OLed led, OLedState st ); 179 virtual bool setLedState ( OLed led, OLedState st );
180 180
181protected: 181protected:
182 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 182 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
183 virtual void timerEvent ( QTimerEvent *te ); 183 virtual void timerEvent ( QTimerEvent *te );
184 184
185 int m_power_timer; 185 int m_power_timer;
186 186
187 OLedState m_leds [1]; //FIXME check if really only one 187 OLedState m_leds [1]; //FIXME check if really only one
188}; 188};
189 189
190class Ramses : public ODevice, public QWSServer::KeyboardFilter { 190class Ramses : public ODevice, public QWSServer::KeyboardFilter {
191protected: 191protected:
192 virtual void init ( ); 192 virtual void init ( );
193 193
194public: 194public:
195 virtual bool setSoftSuspend ( bool soft ); 195 virtual bool setSoftSuspend ( bool soft );
196 virtual bool suspend ( ); 196 virtual bool suspend ( );
197 197
198 virtual bool setDisplayStatus( bool on ); 198 virtual bool setDisplayStatus( bool on );
199 virtual bool setDisplayBrightness ( int b ); 199 virtual bool setDisplayBrightness ( int b );
200 virtual int displayBrightnessResolution ( ) const; 200 virtual int displayBrightnessResolution ( ) const;
201 virtual bool setDisplayContrast ( int b ); 201 virtual bool setDisplayContrast ( int b );
202 virtual int displayContrastResolution ( ) const; 202 virtual int displayContrastResolution ( ) const;
203 203
204protected: 204protected:
205 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 205 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
206 virtual void timerEvent ( QTimerEvent *te ); 206 virtual void timerEvent ( QTimerEvent *te );
207 207
208 int m_power_timer; 208 int m_power_timer;
209}; 209};
210 210
211struct i_button { 211struct i_button {
212 uint model; 212 uint model;
213 Qt::Key code; 213 Qt::Key code;
214 char *utext; 214 char *utext;
215 char *pix; 215 char *pix;
216 char *fpressedservice; 216 char *fpressedservice;
217 char *fpressedaction; 217 char *fpressedaction;
218 char *fheldservice; 218 char *fheldservice;
219 char *fheldaction; 219 char *fheldaction;
220} ipaq_buttons [] = { 220} ipaq_buttons [] = {
221 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 221 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
222 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 222 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
223 "devicebuttons/ipaq_calendar", 223 "devicebuttons/ipaq_calendar",
224 "datebook", "nextView()", 224 "datebook", "nextView()",
225 "today", "raise()" }, 225 "today", "raise()" },
226 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 226 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
227 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 227 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
228 "devicebuttons/ipaq_contact", 228 "devicebuttons/ipaq_contact",
229 "addressbook", "raise()", 229 "addressbook", "raise()",
230 "addressbook", "beamBusinessCard()" }, 230 "addressbook", "beamBusinessCard()" },
231 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 231 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
232 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 232 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
233 "devicebuttons/ipaq_menu", 233 "devicebuttons/ipaq_menu",
234 "QPE/TaskBar", "toggleMenu()", 234 "QPE/TaskBar", "toggleMenu()",
235 "QPE/TaskBar", "toggleStartMenu()" }, 235 "QPE/TaskBar", "toggleStartMenu()" },
236 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 236 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
237 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 237 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
238 "devicebuttons/ipaq_mail", 238 "devicebuttons/ipaq_mail",
239 "mail", "raise()", 239 "mail", "raise()",
240 "mail", "newMail()" }, 240 "mail", "newMail()" },
241 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 241 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
242 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 242 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
243 "devicebuttons/ipaq_home", 243 "devicebuttons/ipaq_home",
244 "QPE/Launcher", "home()", 244 "QPE/Launcher", "home()",
245 "buttonsettings", "raise()" }, 245 "buttonsettings", "raise()" },
246 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 246 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
247 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 247 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
248 "devicebuttons/ipaq_record", 248 "devicebuttons/ipaq_record",
249 "QPE/VMemo", "toggleRecord()", 249 "QPE/VMemo", "toggleRecord()",
250 "sound", "raise()" }, 250 "sound", "raise()" },
251}; 251};
252 252
253struct z_button { 253struct z_button {
254 Qt::Key code; 254 Qt::Key code;
255 char *utext; 255 char *utext;
256 char *pix; 256 char *pix;
257 char *fpressedservice; 257 char *fpressedservice;
258 char *fpressedaction; 258 char *fpressedaction;
259 char *fheldservice; 259 char *fheldservice;
260 char *fheldaction; 260 char *fheldaction;
261} z_buttons [] = { 261} z_buttons [] = {
262 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 262 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
263 "devicebuttons/z_calendar", 263 "devicebuttons/z_calendar",
264 "datebook", "nextView()", 264 "datebook", "nextView()",
265 "today", "raise()" }, 265 "today", "raise()" },
266 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 266 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
267 "devicebuttons/z_contact", 267 "devicebuttons/z_contact",
268 "addressbook", "raise()", 268 "addressbook", "raise()",
269 "addressbook", "beamBusinessCard()" }, 269 "addressbook", "beamBusinessCard()" },
270 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 270 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
271 "devicebuttons/z_home", 271 "devicebuttons/z_home",
272 "QPE/Launcher", "home()", 272 "QPE/Launcher", "home()",
273 "buttonsettings", "raise()" }, 273 "buttonsettings", "raise()" },
274 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 274 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
275 "devicebuttons/z_menu", 275 "devicebuttons/z_menu",
276 "QPE/TaskBar", "toggleMenu()", 276 "QPE/TaskBar", "toggleMenu()",
277 "QPE/TaskBar", "toggleStartMenu()" }, 277 "QPE/TaskBar", "toggleStartMenu()" },
278 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 278 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
279 "devicebuttons/z_mail", 279 "devicebuttons/z_mail",
280 "mail", "raise()", 280 "mail", "raise()",
281 "mail", "newMail()" }, 281 "mail", "newMail()" },
282}; 282};
283 283
284struct z_button z_buttons_c700 [] = { 284struct z_button z_buttons_c700 [] = {
285 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 285 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
286 "devicebuttons/z_calendar", 286 "devicebuttons/z_calendar",
287 "datebook", "nextView()", 287 "datebook", "nextView()",
288 "today", "raise()" }, 288 "today", "raise()" },
289 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 289 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
290 "devicebuttons/z_contact", 290 "devicebuttons/z_contact",
291 "addressbook", "raise()", 291 "addressbook", "raise()",
292 "addressbook", "beamBusinessCard()" }, 292 "addressbook", "beamBusinessCard()" },
293 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 293 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
294 "devicebuttons/z_home", 294 "devicebuttons/z_home",
295 "QPE/Launcher", "home()", 295 "QPE/Launcher", "home()",
296 "buttonsettings", "raise()" }, 296 "buttonsettings", "raise()" },
297 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 297 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
298 "devicebuttons/z_menu", 298 "devicebuttons/z_menu",
299 "QPE/TaskBar", "toggleMenu()", 299 "QPE/TaskBar", "toggleMenu()",
300 "QPE/TaskBar", "toggleStartMenu()" }, 300 "QPE/TaskBar", "toggleStartMenu()" },
301 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 301 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
302 "devicebuttons/z_hinge", 302 "devicebuttons/z_hinge",
303 "QPE/Rotation", "rotateDefault()", 303 "QPE/Rotation", "rotateDefault()",
304 "QPE/Dummy", "doNothing()" }, 304 "QPE/Dummy", "doNothing()" },
305}; 305};
306 306
307struct s_button { 307struct s_button {
308 uint model; 308 uint model;
309 Qt::Key code; 309 Qt::Key code;
310 char *utext; 310 char *utext;
311 char *pix; 311 char *pix;
312 char *fpressedservice; 312 char *fpressedservice;
313 char *fpressedaction; 313 char *fpressedaction;
314 char *fheldservice; 314 char *fheldservice;
315 char *fheldaction; 315 char *fheldaction;
316} simpad_buttons [] = { 316} simpad_buttons [] = {
317 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 317 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
318 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"), 318 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"),
319 "devicebuttons/simpad_lower_up", 319 "devicebuttons/simpad_lower_up",
320 "datebook", "nextView()", 320 "datebook", "nextView()",
321 "today", "raise()" }, 321 "today", "raise()" },
322 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 322 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
323 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"), 323 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"),
324 "devicebuttons/simpad_lower_down", 324 "devicebuttons/simpad_lower_down",
325 "addressbook", "raise()", 325 "addressbook", "raise()",
326 "addressbook", "beamBusinessCard()" }, 326 "addressbook", "beamBusinessCard()" },
327 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 327 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
328 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"), 328 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"),
329 "devicebuttons/simpad_lower_right", 329 "devicebuttons/simpad_lower_right",
330 "QPE/TaskBar", "toggleMenu()", 330 "QPE/TaskBar", "toggleMenu()",
331 "QPE/TaskBar", "toggleStartMenu()" }, 331 "QPE/TaskBar", "toggleStartMenu()" },
332 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 332 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
333 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 333 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
334 "devicebuttons/simpad_lower_left", 334 "devicebuttons/simpad_lower_left",
335 "mail", "raise()", 335 "mail", "raise()",
336 "mail", "newMail()" }, 336 "mail", "newMail()" },
337 337
338 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 338 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
339 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 339 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
340 "devicebuttons/simpad_upper_up", 340 "devicebuttons/simpad_upper_up",
341 "QPE/Launcher", "home()", 341 "QPE/Launcher", "home()",
342 "buttonsettings", "raise()" }, 342 "buttonsettings", "raise()" },
343 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 343 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
344 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 344 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
345 "devicebuttons/simpad_upper_down", 345 "devicebuttons/simpad_upper_down",
346 "addressbook", "raise()", 346 "addressbook", "raise()",
347 "addressbook", "beamBusinessCard()" }, 347 "addressbook", "beamBusinessCard()" },
348 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 348 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
349 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 349 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
350 "devicebuttons/simpad_upper_right", 350 "devicebuttons/simpad_upper_right",
351 "QPE/TaskBar", "toggleMenu()", 351 "QPE/TaskBar", "toggleMenu()",
352 "QPE/TaskBar", "toggleStartMenu()" }, 352 "QPE/TaskBar", "toggleStartMenu()" },
353 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 353 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
354 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 354 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
355 "devicebuttons/simpad_upper_left", 355 "devicebuttons/simpad_upper_left",
356 "QPE/Rotation", "flip()", 356 "QPE/Rotation", "flip()",
357 "QPE/Rotation", "flip()" }, 357 "QPE/Rotation", "flip()" },
358 /* 358 /*
359 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 359 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
360 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 360 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
361 "devicebuttons/simpad_lower_upper", 361 "devicebuttons/simpad_lower_upper",
362 "QPE/Launcher", "home()", 362 "QPE/Launcher", "home()",
363 "buttonsettings", "raise()" }, 363 "buttonsettings", "raise()" },
364 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 364 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
365 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 365 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
366 "devicebuttons/simpad_upper_lower", 366 "devicebuttons/simpad_upper_lower",
367 "QPE/Launcher", "home()", 367 "QPE/Launcher", "home()",
368 "buttonsettings", "raise()" }, 368 "buttonsettings", "raise()" },
369 */ 369 */
370}; 370};
371 371
372struct r_button { 372struct r_button {
373 uint model; 373 uint model;
374 Qt::Key code; 374 Qt::Key code;
375 char *utext; 375 char *utext;
376 char *pix; 376 char *pix;
377 char *fpressedservice; 377 char *fpressedservice;
378 char *fpressedaction; 378 char *fpressedaction;
379 char *fheldservice; 379 char *fheldservice;
380 char *fheldaction; 380 char *fheldaction;
381} ramses_buttons [] = { 381} ramses_buttons [] = {
382 { Model_Ramses_MNCI, 382 { Model_Ramses_MNCI,
383 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 383 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
384 "devicebuttons/z_menu", 384 "devicebuttons/z_menu",
385 "QPE/TaskBar", "toggleMenu()", 385 "QPE/TaskBar", "toggleMenu()",
386 "QPE/TaskBar", "toggleStartMenu()" }, 386 "QPE/TaskBar", "toggleStartMenu()" },
387 { Model_Ramses_MNCI, 387 { Model_Ramses_MNCI,
388 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 388 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
389 "devicebuttons/ipaq_home", 389 "devicebuttons/ipaq_home",
390 "QPE/Launcher", "home()", 390 "QPE/Launcher", "home()",
391 "buttonsettings", "raise()" }, 391 "buttonsettings", "raise()" },
392}; 392};
393 393
394class Yopy : public ODevice { 394class Yopy : public ODevice {
395protected: 395protected:
396 virtual void init ( ); 396 virtual void init ( );
397 virtual void initButtons ( ); 397 virtual void initButtons ( );
398 398
399public: 399public:
400 virtual bool suspend ( ); 400 virtual bool suspend ( );
401 401
402 virtual bool setDisplayBrightness ( int b ); 402 virtual bool setDisplayBrightness ( int b );
403 virtual int displayBrightnessResolution ( ) const; 403 virtual int displayBrightnessResolution ( ) const;
404 404
405 static bool isYopy ( ); 405 static bool isYopy ( );
406}; 406};
407 407
408struct yopy_button { 408struct yopy_button {
409 Qt::Key code; 409 Qt::Key code;
410 char *utext; 410 char *utext;
411 char *pix; 411 char *pix;
412 char *fpressedservice; 412 char *fpressedservice;
413 char *fpressedaction; 413 char *fpressedaction;
414 char *fheldservice; 414 char *fheldservice;
415 char *fheldaction; 415 char *fheldaction;
416} yopy_buttons [] = { 416} yopy_buttons [] = {
417 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"), 417 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
418 "devicebuttons/yopy_action", 418 "devicebuttons/yopy_action",
419 "datebook", "nextView()", 419 "datebook", "nextView()",
420 "today", "raise()" }, 420 "today", "raise()" },
421 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"), 421 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
422 "devicebuttons/yopy_ok", 422 "devicebuttons/yopy_ok",
423 "addressbook", "raise()", 423 "addressbook", "raise()",
424 "addressbook", "beamBusinessCard()" }, 424 "addressbook", "beamBusinessCard()" },
425 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"), 425 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
426 "devicebuttons/yopy_end", 426 "devicebuttons/yopy_end",
427 "QPE/Launcher", "home()", 427 "QPE/Launcher", "home()",
428 "buttonsettings", "raise()" }, 428 "buttonsettings", "raise()" },
429}; 429};
430 430
431static QCString makeChannel ( const char *str ) 431static QCString makeChannel ( const char *str )
432{ 432{
433 if ( str && !::strchr ( str, '/' )) 433 if ( str && !::strchr ( str, '/' ))
434 return QCString ( "QPE/Application/" ) + str; 434 return QCString ( "QPE/Application/" ) + str;
435 else 435 else
436 return str; 436 return str;
437} 437}
438 438
439static inline bool isQWS() 439static inline bool isQWS()
440{ 440{
441 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 441 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
442} 442}
443 443
444ODevice *ODevice::inst ( ) 444ODevice *ODevice::inst ( )
445{ 445{
446 static ODevice *dev = 0; 446 static ODevice *dev = 0;
447 447
448 if ( !dev ) { 448 if ( !dev ) {
449 if ( QFile::exists ( "/proc/hal/model" )) 449 if ( QFile::exists ( "/proc/hal/model" ))
450 dev = new iPAQ ( ); 450 dev = new iPAQ ( );
451 else if ( Zaurus::isZaurus() ) 451 else if ( Zaurus::isZaurus() )
452 dev = new Zaurus ( ); 452 dev = new Zaurus ( );
453 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) 453 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" ))
454 dev = new SIMpad ( ); 454 dev = new SIMpad ( );
455 else if ( QFile::exists ( "/proc/sys/board/name" )) 455 else if ( QFile::exists ( "/proc/sys/board/name" ))
456 dev = new Ramses ( ); 456 dev = new Ramses ( );
457 else if ( Yopy::isYopy() ) 457 else if ( Yopy::isYopy() )
458 dev = new Yopy ( ); 458 dev = new Yopy ( );
459 else if ( Jornada::isJornada() ) 459 else if ( Jornada::isJornada() )
460 dev = new Jornada ( ); 460 dev = new Jornada ( );
461 else 461 else
462 dev = new ODevice ( ); 462 dev = new ODevice ( );
463 dev-> init ( ); 463 dev-> init ( );
464 } 464 }
465 return dev; 465 return dev;
466} 466}
467 467
468 468
469/************************************************** 469/**************************************************
470 * 470 *
471 * common 471 * common
472 * 472 *
473 **************************************************/ 473 **************************************************/
474 474
475 475
476ODevice::ODevice ( ) 476ODevice::ODevice ( )
477{ 477{
478 d = new ODeviceData; 478 d = new ODeviceData;
479 479
480 d-> m_modelstr = "Unknown"; 480 d-> m_modelstr = "Unknown";
481 d-> m_model = Model_Unknown; 481 d-> m_model = Model_Unknown;
482 d-> m_vendorstr = "Unknown"; 482 d-> m_vendorstr = "Unknown";
483 d-> m_vendor = Vendor_Unknown; 483 d-> m_vendor = Vendor_Unknown;
484 d-> m_systemstr = "Unknown"; 484 d-> m_systemstr = "Unknown";
485 d-> m_system = System_Unknown; 485 d-> m_system = System_Unknown;
486 d-> m_sysverstr = "0.0"; 486 d-> m_sysverstr = "0.0";
487 d-> m_rotation = Rot0; 487 d-> m_rotation = Rot0;
488 d-> m_direction = CW; 488 d-> m_direction = CW;
489 489
490 d-> m_holdtime = 1000; // 1000ms 490 d-> m_holdtime = 1000; // 1000ms
491 d-> m_buttons = 0; 491 d-> m_buttons = 0;
492 d-> m_cpu_frequencies = new QStrList; 492 d-> m_cpu_frequencies = new QStrList;
493} 493}
494 494
495void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 495void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
496{ 496{
497 if ( msg == "deviceButtonMappingChanged()" ) { 497 if ( msg == "deviceButtonMappingChanged()" ) {
498 reloadButtonMapping ( ); 498 reloadButtonMapping ( );
499 } 499 }
500} 500}
501 501
502void ODevice::init ( ) 502void ODevice::init ( )
503{ 503{
504} 504}
505 505
506/** 506/**
507 * This method initialises the button mapping 507 * This method initialises the button mapping
508 */ 508 */
509void ODevice::initButtons ( ) 509void ODevice::initButtons ( )
510{ 510{
511 if ( d-> m_buttons ) 511 if ( d-> m_buttons )
512 return; 512 return;
513 513
514 // Simulation uses iPAQ 3660 device buttons 514 // Simulation uses iPAQ 3660 device buttons
515 515
516 qDebug ( "init Buttons" ); 516 qDebug ( "init Buttons" );
517 d-> m_buttons = new QValueList <ODeviceButton>; 517 d-> m_buttons = new QValueList <ODeviceButton>;
518 518
519 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 519 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
520 i_button *ib = ipaq_buttons + i; 520 i_button *ib = ipaq_buttons + i;
521 ODeviceButton b; 521 ODeviceButton b;
522 522
523 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 523 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
524 b. setKeycode ( ib-> code ); 524 b. setKeycode ( ib-> code );
525 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 525 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
526 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 526 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
527 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 527 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
528 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 528 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
529 d-> m_buttons-> append ( b ); 529 d-> m_buttons-> append ( b );
530 } 530 }
531 } 531 }
532 reloadButtonMapping ( ); 532 reloadButtonMapping ( );
533 533
534 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 534 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
535 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 535 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
536} 536}
537 537
538ODevice::~ODevice ( ) 538ODevice::~ODevice ( )
539{ 539{
540// we leak m_devicebuttons and m_cpu_frequency 540// we leak m_devicebuttons and m_cpu_frequency
541// but it's a singleton and it is not so importantant 541// but it's a singleton and it is not so importantant
542// -zecke 542// -zecke
543 delete d; 543 delete d;
544} 544}
545 545
546bool ODevice::setSoftSuspend ( bool /*soft*/ ) 546bool ODevice::setSoftSuspend ( bool /*soft*/ )
547{ 547{
548 return false; 548 return false;
549} 549}
550 550
551//#include <linux/apm_bios.h> 551//#include <linux/apm_bios.h>
552 552
553#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 553#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
554 554
555/** 555/**
556 * This method will try to suspend the device 556 * This method will try to suspend the device
557 * It only works if the user is the QWS Server and the apm application 557 * It only works if the user is the QWS Server and the apm application
558 * is installed. 558 * is installed.
559 * It tries to suspend and then waits some time cause some distributions 559 * It tries to suspend and then waits some time cause some distributions
560 * do have asynchronus apm implementations. 560 * do have asynchronus apm implementations.
561 * This method will either fail and return false or it'll suspend the 561 * This method will either fail and return false or it'll suspend the
562 * device and return once the device got woken up 562 * device and return once the device got woken up
563 * 563 *
564 * @return if the device got suspended 564 * @return if the device got suspended
565 */ 565 */
566bool ODevice::suspend ( ) 566bool ODevice::suspend ( )
567{ 567{
568 qDebug("ODevice::suspend"); 568 qDebug("ODevice::suspend");
569 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 569 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
570 return false; 570 return false;
571 571
572 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 572 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
573 return false; 573 return false;
574 574
575 bool res = false; 575 bool res = false;
576 576
577 struct timeval tvs, tvn; 577 struct timeval tvs, tvn;
578 ::gettimeofday ( &tvs, 0 ); 578 ::gettimeofday ( &tvs, 0 );
579 579
580 ::sync ( ); // flush fs caches 580 ::sync ( ); // flush fs caches
581 res = ( ::system ( "apm --suspend" ) == 0 ); 581 res = ( ::system ( "apm --suspend" ) == 0 );
582 582
583 // This is needed because the iPAQ apm implementation is asynchronous and we 583 // This is needed because the iPAQ apm implementation is asynchronous and we
584 // can not be sure when exactly the device is really suspended 584 // can not be sure when exactly the device is really suspended
585 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 585 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
586 586
587 if ( res ) { 587 if ( res ) {
588 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 588 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
589 ::usleep ( 200 * 1000 ); 589 ::usleep ( 200 * 1000 );
590 ::gettimeofday ( &tvn, 0 ); 590 ::gettimeofday ( &tvn, 0 );
591 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 591 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
592 } 592 }
593 593
594 return res; 594 return res;
595} 595}
596 596
597//#include <linux/fb.h> better not rely on kernel headers in userspace ... 597//#include <linux/fb.h> better not rely on kernel headers in userspace ...
598 598
599#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 599#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
600 600
601/* VESA Blanking Levels */ 601/* VESA Blanking Levels */
602#define VESA_NO_BLANKING 0 602#define VESA_NO_BLANKING 0
603#define VESA_VSYNC_SUSPEND 1 603#define VESA_VSYNC_SUSPEND 1
604#define VESA_HSYNC_SUSPEND 2 604#define VESA_HSYNC_SUSPEND 2
605#define VESA_POWERDOWN 3 605#define VESA_POWERDOWN 3
606 606
607/** 607/**
608 * This sets the display on or off 608 * This sets the display on or off
609 */ 609 */
610bool ODevice::setDisplayStatus ( bool on ) 610bool ODevice::setDisplayStatus ( bool on )
611{ 611{
612 qDebug("ODevice::setDisplayStatus(%d)", on); 612 qDebug("ODevice::setDisplayStatus(%d)", on);
613 613
614 if ( d-> m_model == Model_Unknown ) 614 if ( d-> m_model == Model_Unknown )
615 return false; 615 return false;
616 616
617 bool res = false; 617 bool res = false;
618 int fd; 618 int fd;
619 619
620 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 620 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
621 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 621 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
622 ::close ( fd ); 622 ::close ( fd );
623 } 623 }
624 return res; 624 return res;
625} 625}
626 626
627/** 627/**
628 * This sets the display brightness 628 * This sets the display brightness
629 * 629 *
630 * @param p The brightness to be set on a scale from 0 to 255 630 * @param p The brightness to be set on a scale from 0 to 255
631 * @return success or failure 631 * @return success or failure
632 */ 632 */
633bool ODevice::setDisplayBrightness ( int p) 633bool ODevice::setDisplayBrightness ( int p)
634{ 634{
635 Q_UNUSED( p ) 635 Q_UNUSED( p )
636 return false; 636 return false;
637} 637}
638 638
639/** 639/**
640 * @return returns the number of steppings on the brightness slider 640 * @return returns the number of steppings on the brightness slider
641 * in the Light-'n-Power settings. 641 * in the Light-'n-Power settings.
642 */ 642 */
643int ODevice::displayBrightnessResolution ( ) const 643int ODevice::displayBrightnessResolution ( ) const
644{ 644{
645 return 16; 645 return 16;
646} 646}
647 647
648/** 648/**
649 * This sets the display contrast 649 * This sets the display contrast
650 * @param p The contrast to be set on a scale from 0 to 255 650 * @param p The contrast to be set on a scale from 0 to 255
651 * @return success or failure 651 * @return success or failure
652 */ 652 */
653bool ODevice::setDisplayContrast ( int p) 653bool ODevice::setDisplayContrast ( int p)
654{ 654{
655 Q_UNUSED( p ) 655 Q_UNUSED( p )
656 return false; 656 return false;
657} 657}
658 658
659/** 659/**
660 * @return return the max value for the brightness settings slider 660 * @return return the max value for the brightness settings slider
661 * or 0 if the device doesn't support setting of a contrast 661 * or 0 if the device doesn't support setting of a contrast
662 */ 662 */
663int ODevice::displayContrastResolution ( ) const 663int ODevice::displayContrastResolution ( ) const
664{ 664{
665 return 0; 665 return 0;
666} 666}
667 667
668/** 668/**
669 * This returns the vendor as string 669 * This returns the vendor as string
670 * @return Vendor as QString 670 * @return Vendor as QString
671 */ 671 */
672QString ODevice::vendorString ( ) const 672QString ODevice::vendorString ( ) const
673{ 673{
674 return d-> m_vendorstr; 674 return d-> m_vendorstr;
675} 675}
676 676
677/** 677/**
678 * This returns the vendor as one of the values of OVendor 678 * This returns the vendor as one of the values of OVendor
679 * @return OVendor 679 * @return OVendor
680 */ 680 */
681OVendor ODevice::vendor ( ) const 681OVendor ODevice::vendor ( ) const
682{ 682{
683 return d-> m_vendor; 683 return d-> m_vendor;
684} 684}
685 685
686/** 686/**
687 * This returns the model as a string 687 * This returns the model as a string
688 * @return A string representing the model 688 * @return A string representing the model
689 */ 689 */
690QString ODevice::modelString ( ) const 690QString ODevice::modelString ( ) const
691{ 691{
692 return d-> m_modelstr; 692 return d-> m_modelstr;
693} 693}
694 694
695/** 695/**
696 * This does return the OModel used 696 * This does return the OModel used
697 */ 697 */
698OModel ODevice::model ( ) const 698OModel ODevice::model ( ) const
699{ 699{
700 return d-> m_model; 700 return d-> m_model;
701} 701}
702 702
703/** 703/**
704 * This does return the systen name 704 * This does return the systen name
705 */ 705 */
706QString ODevice::systemString ( ) const 706QString ODevice::systemString ( ) const
707{ 707{
708 return d-> m_systemstr; 708 return d-> m_systemstr;
709} 709}
710 710
711/** 711/**
712 * Return System as OSystem value 712 * Return System as OSystem value
713 */ 713 */
714OSystem ODevice::system ( ) const 714OSystem ODevice::system ( ) const
715{ 715{
716 return d-> m_system; 716 return d-> m_system;
717} 717}
718 718
719/** 719/**
720 * @return the version string of the base system 720 * @return the version string of the base system
721 */ 721 */
722QString ODevice::systemVersionString ( ) const 722QString ODevice::systemVersionString ( ) const
723{ 723{
724 return d-> m_sysverstr; 724 return d-> m_sysverstr;
725} 725}
726 726
727/** 727/**
728 * @return the current Transformation 728 * @return the current Transformation
729 */ 729 */
730Transformation ODevice::rotation ( ) const 730Transformation ODevice::rotation ( ) const
731{ 731{
732 VirtRotation rot; 732 VirtRotation rot;
733 ODevice* that =(ODevice* )this; 733 ODevice* that =(ODevice* )this;
734 that->virtual_hook( VIRTUAL_ROTATION, &rot ); 734 that->virtual_hook( VIRTUAL_ROTATION, &rot );
735 return rot.trans; 735 return rot.trans;
736} 736}
737 737
738/** 738/**
739 * @return the current rotation direction 739 * @return the current rotation direction
740 */ 740 */
741ODirection ODevice::direction ( ) const 741ODirection ODevice::direction ( ) const
742{ 742{
743 VirtDirection dir; 743 VirtDirection dir;
744 ODevice* that =(ODevice* )this; 744 ODevice* that =(ODevice* )this;
745 that->virtual_hook( VIRTUAL_DIRECTION, &dir ); 745 that->virtual_hook( VIRTUAL_DIRECTION, &dir );
746 return dir.direct; 746 return dir.direct;
747} 747}
748 748
749/** 749/**
750 * This plays an alarmSound 750 * This plays an alarmSound
751 */ 751 */
752void ODevice::alarmSound ( ) 752void ODevice::alarmSound ( )
753{ 753{
754#ifndef QT_NO_SOUND 754#ifndef QT_NO_SOUND
755 static Sound snd ( "alarm" ); 755 static Sound snd ( "alarm" );
756 756
757 if ( snd. isFinished ( )) 757 if ( snd. isFinished ( ))
758 snd. play ( ); 758 snd. play ( );
759#endif 759#endif
760} 760}
761 761
762/** 762/**
763 * This plays a key sound 763 * This plays a key sound
764 */ 764 */
765void ODevice::keySound ( ) 765void ODevice::keySound ( )
766{ 766{
767#ifndef QT_NO_SOUND 767#ifndef QT_NO_SOUND
768 static Sound snd ( "keysound" ); 768 static Sound snd ( "keysound" );
769 769
770 if ( snd. isFinished ( )) 770 if ( snd. isFinished ( ))
771 snd. play ( ); 771 snd. play ( );
772#endif 772#endif
773} 773}
774 774
775/** 775/**
776 * This plays a touch sound 776 * This plays a touch sound
777 */ 777 */
778void ODevice::touchSound ( ) 778void ODevice::touchSound ( )
779{ 779{
780#ifndef QT_NO_SOUND 780#ifndef QT_NO_SOUND
781 static Sound snd ( "touchsound" ); 781 static Sound snd ( "touchsound" );
782 782
783 if ( snd. isFinished ( )) 783 if ( snd. isFinished ( ))
784 snd. play ( ); 784 snd. play ( );
785#endif 785#endif
786} 786}
787 787
788/** 788/**
789 * This method will return a list of leds 789 * This method will return a list of leds
790 * available on this device 790 * available on this device
791 * @return a list of LEDs. 791 * @return a list of LEDs.
792 */ 792 */
793QValueList <OLed> ODevice::ledList ( ) const 793QValueList <OLed> ODevice::ledList ( ) const
794{ 794{
795 return QValueList <OLed> ( ); 795 return QValueList <OLed> ( );
796} 796}
797 797
798/** 798/**
799 * This does return the state of the LEDs 799 * This does return the state of the LEDs
800 */ 800 */
801QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const 801QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const
802{ 802{
803 return QValueList <OLedState> ( ); 803 return QValueList <OLedState> ( );
804} 804}
805 805
806/** 806/**
807 * @return the state for a given OLed 807 * @return the state for a given OLed
808 */ 808 */
809OLedState ODevice::ledState ( OLed /*which*/ ) const 809OLedState ODevice::ledState ( OLed /*which*/ ) const
810{ 810{
811 return Led_Off; 811 return Led_Off;
812} 812}
813 813
814/** 814/**
815 * Set the state for a LED 815 * Set the state for a LED
816 * @param which Which OLed to use 816 * @param which Which OLed to use
817 * @param st The state to set 817 * @param st The state to set
818 * @return success or failure 818 * @return success or failure
819 */ 819 */
820bool ODevice::setLedState ( OLed which, OLedState st ) 820bool ODevice::setLedState ( OLed which, OLedState st )
821{ 821{
822 Q_UNUSED( which ) 822 Q_UNUSED( which )
823 Q_UNUSED( st ) 823 Q_UNUSED( st )
824 return false; 824 return false;
825} 825}
826 826
827/** 827/**
828 * @return if the device has a light sensor 828 * @return if the device has a light sensor
829 */ 829 */
830bool ODevice::hasLightSensor ( ) const 830bool ODevice::hasLightSensor ( ) const
831{ 831{
832 return false; 832 return false;
833} 833}
834 834
835/** 835/**
836 * @return a value from the light sensor 836 * @return a value from the light sensor
837 */ 837 */
838int ODevice::readLightSensor ( ) 838int ODevice::readLightSensor ( )
839{ 839{
840 return -1; 840 return -1;
841} 841}
842 842
843/** 843/**
844 * @return the light sensor resolution 844 * @return the light sensor resolution
845 */ 845 */
846int ODevice::lightSensorResolution ( ) const 846int ODevice::lightSensorResolution ( ) const
847{ 847{
848 return 0; 848 return 0;
849} 849}
850 850
851/** 851/**
852 * @return if the device has a hinge sensor 852 * @return if the device has a hinge sensor
853 */ 853 */
854bool ODevice::hasHingeSensor ( ) const 854bool ODevice::hasHingeSensor ( ) const
855{ 855{
856 VirtHasHinge hing; 856 VirtHasHinge hing;
857 ODevice* that =(ODevice* )this; 857 ODevice* that =(ODevice* )this;
858 that->virtual_hook( VIRTUAL_HAS_HINGE, &hing ); 858 that->virtual_hook( VIRTUAL_HAS_HINGE, &hing );
859 return hing.hasHinge; 859 return hing.hasHinge;
860} 860}
861 861
862/** 862/**
863 * @return a value from the hinge sensor 863 * @return a value from the hinge sensor
864 */ 864 */
865OHingeStatus ODevice::readHingeSensor ( ) 865OHingeStatus ODevice::readHingeSensor ( )
866{ 866{
867 VirtHingeStatus hing; 867 VirtHingeStatus hing;
868 virtual_hook( VIRTUAL_HINGE, &hing ); 868 virtual_hook( VIRTUAL_HINGE, &hing );
869 return hing.hingeStat; 869 return hing.hingeStat;
870} 870}
871 871
872/** 872/**
873 * @return a list with CPU frequencies supported by the hardware 873 * @return a list with CPU frequencies supported by the hardware
874 */ 874 */
875const QStrList &ODevice::allowedCpuFrequencies ( ) const 875const QStrList &ODevice::allowedCpuFrequencies ( ) const
876{ 876{
877 return *d->m_cpu_frequencies; 877 return *d->m_cpu_frequencies;
878} 878}
879 879
880 880
881/** 881/**
882 * Set desired CPU frequency 882 * Set desired CPU frequency
883 * 883 *
884 * @param index index into d->m_cpu_frequencies of the frequency to be set 884 * @param index index into d->m_cpu_frequencies of the frequency to be set
885 */ 885 */
886bool ODevice::setCurrentCpuFrequency(uint index) 886bool ODevice::setCurrentCpuFrequency(uint index)
887{ 887{
888 if (index >= d->m_cpu_frequencies->count()) 888 if (index >= d->m_cpu_frequencies->count())
889 return false; 889 return false;
890 890
891 char *freq = d->m_cpu_frequencies->at(index); 891 char *freq = d->m_cpu_frequencies->at(index);
892 qWarning("set freq to %s", freq); 892 qWarning("set freq to %s", freq);
893 893
894 int fd; 894 int fd;
895 895
896 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) { 896 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) {
897 char writeCommand[50]; 897 char writeCommand[50];
898 const int count = sprintf(writeCommand, "%s\n", freq); 898 const int count = sprintf(writeCommand, "%s\n", freq);
899 int res = (::write(fd, writeCommand, count) != -1); 899 int res = (::write(fd, writeCommand, count) != -1);
900 ::close(fd); 900 ::close(fd);
901 return res; 901 return res;
902 } 902 }
903 903
904 return false; 904 return false;
905} 905}
906 906
907 907
908/** 908/**
909 * @return a list of hardware buttons 909 * @return a list of hardware buttons
910 */ 910 */
911const QValueList <ODeviceButton> &ODevice::buttons ( ) 911const QValueList <ODeviceButton> &ODevice::buttons ( )
912{ 912{
913 initButtons ( ); 913 initButtons ( );
914 914
915 return *d-> m_buttons; 915 return *d-> m_buttons;
916} 916}
917 917
918/** 918/**
919 * @return The amount of time that would count as a hold 919 * @return The amount of time that would count as a hold
920 */ 920 */
921uint ODevice::buttonHoldTime ( ) const 921uint ODevice::buttonHoldTime ( ) const
922{ 922{
923 return d-> m_holdtime; 923 return d-> m_holdtime;
924} 924}
925 925
926/** 926/**
927 * This method return a ODeviceButton for a key code 927 * This method return a ODeviceButton for a key code
928 * or 0 if no special hardware button is available for the device 928 * or 0 if no special hardware button is available for the device
929 * 929 *
930 * @return The devicebutton or 0l 930 * @return The devicebutton or 0l
931 * @see ODeviceButton 931 * @see ODeviceButton
932 */ 932 */
933const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 933const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
934{ 934{
935 initButtons ( ); 935 initButtons ( );
936 936
937 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) { 937 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) {
938 if ( (*it). keycode ( ) == code ) 938 if ( (*it). keycode ( ) == code )
939 return &(*it); 939 return &(*it);
940 } 940 }
941 return 0; 941 return 0;
942} 942}
943 943
944void ODevice::reloadButtonMapping ( ) 944void ODevice::reloadButtonMapping ( )
945{ 945{
946 initButtons ( ); 946 initButtons ( );
947 947
948 Config cfg ( "ButtonSettings" ); 948 Config cfg ( "ButtonSettings" );
949 949
950 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 950 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
951 ODeviceButton &b = ( *d-> m_buttons ) [i]; 951 ODeviceButton &b = ( *d-> m_buttons ) [i];
952 QString group = "Button" + QString::number ( i ); 952 QString group = "Button" + QString::number ( i );
953 953
954 QCString pch, hch; 954 QCString pch, hch;
955 QCString pm, hm; 955 QCString pm, hm;
956 QByteArray pdata, hdata; 956 QByteArray pdata, hdata;
957 957
958 if ( cfg. hasGroup ( group )) { 958 if ( cfg. hasGroup ( group )) {
959 cfg. setGroup ( group ); 959 cfg. setGroup ( group );
960 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 960 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
961 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 961 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
962 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 962 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
963 963
964 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 964 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
965 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 965 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
966 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 966 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
967 } 967 }
968 968
969 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 969 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
970 970
971 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 971 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
972 } 972 }
973} 973}
974 974
975void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 975void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
976{ 976{
977 initButtons ( ); 977 initButtons ( );
978 978
979 QString mb_chan; 979 QString mb_chan;
980 980
981 if ( button >= (int) d-> m_buttons-> count ( )) 981 if ( button >= (int) d-> m_buttons-> count ( ))
982 return; 982 return;
983 983
984 ODeviceButton &b = ( *d-> m_buttons ) [button]; 984 ODeviceButton &b = ( *d-> m_buttons ) [button];
985 b. setPressedAction ( action ); 985 b. setPressedAction ( action );
986 986
987 mb_chan=b. pressedAction ( ). channel ( ); 987 mb_chan=b. pressedAction ( ). channel ( );
988 988
989 Config buttonFile ( "ButtonSettings" ); 989 Config buttonFile ( "ButtonSettings" );
990 buttonFile. setGroup ( "Button" + QString::number ( button )); 990 buttonFile. setGroup ( "Button" + QString::number ( button ));
991 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 991 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
992 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 992 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
993 993
994 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 994 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
995 995
996 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 996 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
997} 997}
998 998
999void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 999void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
1000{ 1000{
1001 initButtons ( ); 1001 initButtons ( );
1002 1002
1003 if ( button >= (int) d-> m_buttons-> count ( )) 1003 if ( button >= (int) d-> m_buttons-> count ( ))
1004 return; 1004 return;
1005 1005
1006 ODeviceButton &b = ( *d-> m_buttons ) [button]; 1006 ODeviceButton &b = ( *d-> m_buttons ) [button];
1007 b. setHeldAction ( action ); 1007 b. setHeldAction ( action );
1008 1008
1009 Config buttonFile ( "ButtonSettings" ); 1009 Config buttonFile ( "ButtonSettings" );
1010 buttonFile. setGroup ( "Button" + QString::number ( button )); 1010 buttonFile. setGroup ( "Button" + QString::number ( button ));
1011 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 1011 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
1012 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 1012 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
1013 1013
1014 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 1014 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
1015 1015
1016 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 1016 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
1017} 1017}
1018void ODevice::virtual_hook(int id, void* data){ 1018void ODevice::virtual_hook(int id, void* data){
1019 switch( id ) { 1019 switch( id ) {
1020 case VIRTUAL_ROTATION:{ 1020 case VIRTUAL_ROTATION:{
1021 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data ); 1021 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
1022 rot->trans = d->m_rotation; 1022 rot->trans = d->m_rotation;
1023 break; 1023 break;
1024 } 1024 }
1025 case VIRTUAL_DIRECTION:{ 1025 case VIRTUAL_DIRECTION:{
1026 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data ); 1026 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
1027 dir->direct = d->m_direction; 1027 dir->direct = d->m_direction;
1028 break; 1028 break;
1029 } 1029 }
1030 case VIRTUAL_HAS_HINGE:{ 1030 case VIRTUAL_HAS_HINGE:{
1031 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data ); 1031 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
1032 hin->hasHinge = false; 1032 hin->hasHinge = false;
1033 break; 1033 break;
1034 } 1034 }
1035 case VIRTUAL_HINGE:{ 1035 case VIRTUAL_HINGE:{
1036 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data ); 1036 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
1037 hin->hingeStat = CASE_UNKNOWN; 1037 hin->hingeStat = CASE_UNKNOWN;
1038 break; 1038 break;
1039 } 1039 }
1040 } 1040 }
1041} 1041}
1042 1042
1043/************************************************** 1043/**************************************************
1044 * 1044 *
1045 * Yopy 3500/3700 1045 * Yopy 3500/3700
1046 * 1046 *
1047 **************************************************/ 1047 **************************************************/
1048 1048
1049bool Yopy::isYopy ( ) 1049bool Yopy::isYopy ( )
1050{ 1050{
1051 QFile f( "/proc/cpuinfo" ); 1051 QFile f( "/proc/cpuinfo" );
1052 if ( f. open ( IO_ReadOnly ) ) { 1052 if ( f. open ( IO_ReadOnly ) ) {
1053 QTextStream ts ( &f ); 1053 QTextStream ts ( &f );
1054 QString line; 1054 QString line;
1055 while( line = ts. readLine ( ) ) { 1055 while( line = ts. readLine ( ) ) {
1056 if ( line. left ( 8 ) == "Hardware" ) { 1056 if ( line. left ( 8 ) == "Hardware" ) {
1057 int loc = line. find ( ":" ); 1057 int loc = line. find ( ":" );
1058 if ( loc != -1 ) { 1058 if ( loc != -1 ) {
1059 QString model = 1059 QString model =
1060 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1060 line. mid ( loc + 2 ). simplifyWhiteSpace( );
1061 return ( model == "Yopy" ); 1061 return ( model == "Yopy" );
1062 } 1062 }
1063 } 1063 }
1064 } 1064 }
1065 } 1065 }
1066 return false; 1066 return false;
1067} 1067}
1068 1068
1069void Yopy::init ( ) 1069void Yopy::init ( )
1070{ 1070{
1071 d-> m_vendorstr = "G.Mate"; 1071 d-> m_vendorstr = "G.Mate";
1072 d-> m_vendor = Vendor_GMate; 1072 d-> m_vendor = Vendor_GMate;
1073 d-> m_modelstr = "Yopy3700"; 1073 d-> m_modelstr = "Yopy3700";
1074 d-> m_model = Model_Yopy_3700; 1074 d-> m_model = Model_Yopy_3700;
1075 d-> m_rotation = Rot0; 1075 d-> m_rotation = Rot0;
1076 1076
1077 d-> m_systemstr = "Linupy"; 1077 d-> m_systemstr = "Linupy";
1078 d-> m_system = System_Linupy; 1078 d-> m_system = System_Linupy;
1079 1079
1080 QFile f ( "/etc/issue" ); 1080 QFile f ( "/etc/issue" );
1081 if ( f. open ( IO_ReadOnly )) { 1081 if ( f. open ( IO_ReadOnly )) {
1082 QTextStream ts ( &f ); 1082 QTextStream ts ( &f );
1083 ts.readLine(); 1083 ts.readLine();
1084 d-> m_sysverstr = ts. readLine ( ); 1084 d-> m_sysverstr = ts. readLine ( );
1085 f. close ( ); 1085 f. close ( );
1086 } 1086 }
1087} 1087}
1088 1088
1089void Yopy::initButtons ( ) 1089void Yopy::initButtons ( )
1090{ 1090{
1091 if ( d-> m_buttons ) 1091 if ( d-> m_buttons )
1092 return; 1092 return;
1093 1093
1094 d-> m_buttons = new QValueList <ODeviceButton>; 1094 d-> m_buttons = new QValueList <ODeviceButton>;
1095 1095
1096 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) { 1096 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
1097 1097
1098 yopy_button *ib = yopy_buttons + i; 1098 yopy_button *ib = yopy_buttons + i;
1099 1099
1100 ODeviceButton b; 1100 ODeviceButton b;
1101 1101
1102 b. setKeycode ( ib-> code ); 1102 b. setKeycode ( ib-> code );
1103 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1103 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1104 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1104 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1105 b. setFactoryPresetPressedAction 1105 b. setFactoryPresetPressedAction
1106 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); 1106 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1107 b. setFactoryPresetHeldAction 1107 b. setFactoryPresetHeldAction
1108 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); 1108 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1109 1109
1110 d-> m_buttons-> append ( b ); 1110 d-> m_buttons-> append ( b );
1111 } 1111 }
1112 reloadButtonMapping ( ); 1112 reloadButtonMapping ( );
1113 1113
1114 QCopChannel *sysch = new QCopChannel("QPE/System", this); 1114 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1115 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 1115 connect(sysch, SIGNAL(received(const QCString&,const QByteArray&)),
1116 this, SLOT(systemMessage(const QCString &, const QByteArray & ))); 1116 this, SLOT(systemMessage(const QCString&,const QByteArray&)));
1117} 1117}
1118 1118
1119bool Yopy::suspend() 1119bool Yopy::suspend()
1120{ 1120{
1121 /* Opie for Yopy does not implement its own power management at the 1121 /* Opie for Yopy does not implement its own power management at the
1122 moment. The public version runs parallel to X, and relies on the 1122 moment. The public version runs parallel to X, and relies on the
1123 existing power management features. */ 1123 existing power management features. */
1124 return false; 1124 return false;
1125} 1125}
1126 1126
1127bool Yopy::setDisplayBrightness(int bright) 1127bool Yopy::setDisplayBrightness(int bright)
1128{ 1128{
1129 /* The code here works, but is disabled as the current version runs 1129 /* The code here works, but is disabled as the current version runs
1130 parallel to X, and relies on the existing backlight demon. */ 1130 parallel to X, and relies on the existing backlight demon. */
1131#if 0 1131#if 0
1132 if ( QFile::exists("/proc/sys/pm/light") ) { 1132 if ( QFile::exists("/proc/sys/pm/light") ) {
1133 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1133 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1134 if (fd >= 0 ) { 1134 if (fd >= 0 ) {
1135 if (bright) 1135 if (bright)
1136 ::write(fd, "1\n", 2); 1136 ::write(fd, "1\n", 2);
1137 else 1137 else
1138 ::write(fd, "0\n", 2); 1138 ::write(fd, "0\n", 2);
1139 ::close(fd); 1139 ::close(fd);
1140 return true; 1140 return true;
1141 } 1141 }
1142 } 1142 }
1143#endif 1143#endif
1144 return false; 1144 return false;
1145} 1145}
1146 1146
1147int Yopy::displayBrightnessResolution() const 1147int Yopy::displayBrightnessResolution() const
1148{ 1148{
1149 return 2; 1149 return 2;
1150} 1150}
1151 1151
1152/************************************************** 1152/**************************************************
1153 * 1153 *
1154 * iPAQ 1154 * iPAQ
1155 * 1155 *
1156 **************************************************/ 1156 **************************************************/
1157 1157
1158void iPAQ::init ( ) 1158void iPAQ::init ( )
1159{ 1159{
1160 d-> m_vendorstr = "HP"; 1160 d-> m_vendorstr = "HP";
1161 d-> m_vendor = Vendor_HP; 1161 d-> m_vendor = Vendor_HP;
1162 1162
1163 QFile f ( "/proc/hal/model" ); 1163 QFile f ( "/proc/hal/model" );
1164 1164
1165 if ( f. open ( IO_ReadOnly )) { 1165 if ( f. open ( IO_ReadOnly )) {
1166 QTextStream ts ( &f ); 1166 QTextStream ts ( &f );
1167 1167
1168 d-> m_modelstr = "H" + ts. readLine ( ); 1168 d-> m_modelstr = "H" + ts. readLine ( );
1169 1169
1170 if ( d-> m_modelstr == "H3100" ) 1170 if ( d-> m_modelstr == "H3100" )
1171 d-> m_model = Model_iPAQ_H31xx; 1171 d-> m_model = Model_iPAQ_H31xx;
1172 else if ( d-> m_modelstr == "H3600" ) 1172 else if ( d-> m_modelstr == "H3600" )
1173 d-> m_model = Model_iPAQ_H36xx; 1173 d-> m_model = Model_iPAQ_H36xx;
1174 else if ( d-> m_modelstr == "H3700" ) 1174 else if ( d-> m_modelstr == "H3700" )
1175 d-> m_model = Model_iPAQ_H37xx; 1175 d-> m_model = Model_iPAQ_H37xx;
1176 else if ( d-> m_modelstr == "H3800" ) 1176 else if ( d-> m_modelstr == "H3800" )
1177 d-> m_model = Model_iPAQ_H38xx; 1177 d-> m_model = Model_iPAQ_H38xx;
1178 else if ( d-> m_modelstr == "H3900" ) 1178 else if ( d-> m_modelstr == "H3900" )
1179 d-> m_model = Model_iPAQ_H39xx; 1179 d-> m_model = Model_iPAQ_H39xx;
1180 else if ( d-> m_modelstr == "H5400" ) 1180 else if ( d-> m_modelstr == "H5400" )
1181 d-> m_model = Model_iPAQ_H5xxx; 1181 d-> m_model = Model_iPAQ_H5xxx;
1182 else 1182 else
1183 d-> m_model = Model_Unknown; 1183 d-> m_model = Model_Unknown;
1184 1184
1185 f. close ( ); 1185 f. close ( );
1186 } 1186 }
1187 1187
1188 switch ( d-> m_model ) { 1188 switch ( d-> m_model ) {
1189 case Model_iPAQ_H31xx: 1189 case Model_iPAQ_H31xx:
1190 case Model_iPAQ_H38xx: 1190 case Model_iPAQ_H38xx:
1191 d-> m_rotation = Rot90; 1191 d-> m_rotation = Rot90;
1192 break; 1192 break;
1193 case Model_iPAQ_H36xx: 1193 case Model_iPAQ_H36xx:
1194 case Model_iPAQ_H37xx: 1194 case Model_iPAQ_H37xx:
1195 case Model_iPAQ_H39xx: 1195 case Model_iPAQ_H39xx:
1196 1196
1197 default: 1197 default:
1198 d-> m_rotation = Rot270; 1198 d-> m_rotation = Rot270;
1199 break; 1199 break;
1200 case Model_iPAQ_H5xxx: 1200 case Model_iPAQ_H5xxx:
1201 d-> m_rotation = Rot0; 1201 d-> m_rotation = Rot0;
1202 } 1202 }
1203 1203
1204 f. setName ( "/etc/familiar-version" ); 1204 f. setName ( "/etc/familiar-version" );
1205 if ( f. open ( IO_ReadOnly )) { 1205 if ( f. open ( IO_ReadOnly )) {
1206 d-> m_systemstr = "Familiar"; 1206 d-> m_systemstr = "Familiar";
1207 d-> m_system = System_Familiar; 1207 d-> m_system = System_Familiar;
1208 1208
1209 QTextStream ts ( &f ); 1209 QTextStream ts ( &f );
1210 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1210 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1211 1211
1212 f. close ( ); 1212 f. close ( );
1213 } else { 1213 } else {
1214 f. setName ( "/etc/oz_version" ); 1214 f. setName ( "/etc/oz_version" );
1215 1215
1216 if ( f. open ( IO_ReadOnly )) { 1216 if ( f. open ( IO_ReadOnly )) {
1217 d-> m_systemstr = "OpenEmbedded/iPaq"; 1217 d-> m_systemstr = "OpenEmbedded/iPaq";
1218 d-> m_system = System_Familiar; 1218 d-> m_system = System_Familiar;
1219 1219
1220 QTextStream ts ( &f ); 1220 QTextStream ts ( &f );
1221 ts.setDevice ( &f ); 1221 ts.setDevice ( &f );
1222 d-> m_sysverstr = ts. readLine ( ); 1222 d-> m_sysverstr = ts. readLine ( );
1223 f. close ( ); 1223 f. close ( );
1224 } 1224 }
1225 } 1225 }
1226 1226
1227 1227
1228 1228
1229 1229
1230 1230
1231 m_leds [0] = m_leds [1] = Led_Off; 1231 m_leds [0] = m_leds [1] = Led_Off;
1232 1232
1233 m_power_timer = 0; 1233 m_power_timer = 0;
1234 1234
1235} 1235}
1236 1236
1237void iPAQ::initButtons ( ) 1237void iPAQ::initButtons ( )
1238{ 1238{
1239 if ( d-> m_buttons ) 1239 if ( d-> m_buttons )
1240 return; 1240 return;
1241 1241
1242 if ( isQWS( ) ) 1242 if ( isQWS( ) )
1243 QWSServer::setKeyboardFilter ( this ); 1243 QWSServer::setKeyboardFilter ( this );
1244 1244
1245 d-> m_buttons = new QValueList <ODeviceButton>; 1245 d-> m_buttons = new QValueList <ODeviceButton>;
1246 1246
1247 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 1247 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
1248 i_button *ib = ipaq_buttons + i; 1248 i_button *ib = ipaq_buttons + i;
1249 ODeviceButton b; 1249 ODeviceButton b;
1250 1250
1251 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1251 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1252 b. setKeycode ( ib-> code ); 1252 b. setKeycode ( ib-> code );
1253 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1253 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1254 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1254 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1255 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1255 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1256 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1256 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1257 1257
1258 d-> m_buttons-> append ( b ); 1258 d-> m_buttons-> append ( b );
1259 } 1259 }
1260 } 1260 }
1261 reloadButtonMapping ( ); 1261 reloadButtonMapping ( );
1262 1262
1263 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1263 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1264 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1264 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
1265} 1265}
1266 1266
1267 1267
1268//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1268//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1269 1269
1270typedef struct { 1270typedef struct {
1271 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1271 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1272 unsigned char TotalTime; /* Units of 5 seconds */ 1272 unsigned char TotalTime; /* Units of 5 seconds */
1273 unsigned char OnTime; /* units of 100m/s */ 1273 unsigned char OnTime; /* units of 100m/s */
1274 unsigned char OffTime; /* units of 100m/s */ 1274 unsigned char OffTime; /* units of 100m/s */
1275} LED_IN; 1275} LED_IN;
1276 1276
1277typedef struct { 1277typedef struct {
1278 unsigned char mode; 1278 unsigned char mode;
1279 unsigned char pwr; 1279 unsigned char pwr;
1280 unsigned char brightness; 1280 unsigned char brightness;
1281} FLITE_IN; 1281} FLITE_IN;
1282 1282
1283#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1283#define LED_ON OD_IOW( 'f', 5, LED_IN )
1284#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1284#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1285 1285
1286 1286
1287QValueList <OLed> iPAQ::ledList ( ) const 1287QValueList <OLed> iPAQ::ledList ( ) const
1288{ 1288{
1289 QValueList <OLed> vl; 1289 QValueList <OLed> vl;
1290 vl << Led_Power; 1290 vl << Led_Power;
1291 1291
1292 if ( d-> m_model == Model_iPAQ_H38xx ) 1292 if ( d-> m_model == Model_iPAQ_H38xx )
1293 vl << Led_BlueTooth; 1293 vl << Led_BlueTooth;
1294 return vl; 1294 return vl;
1295} 1295}
1296 1296
1297QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1297QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1298{ 1298{
1299 QValueList <OLedState> vl; 1299 QValueList <OLedState> vl;
1300 1300
1301 if ( l == Led_Power ) 1301 if ( l == Led_Power )
1302 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1302 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1303 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1303 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1304 vl << Led_Off; // << Led_On << ??? 1304 vl << Led_Off; // << Led_On << ???
1305 1305
1306 return vl; 1306 return vl;
1307} 1307}
1308 1308
1309OLedState iPAQ::ledState ( OLed l ) const 1309OLedState iPAQ::ledState ( OLed l ) const
1310{ 1310{
1311 switch ( l ) { 1311 switch ( l ) {
1312 case Led_Power: 1312 case Led_Power:
1313 return m_leds [0]; 1313 return m_leds [0];
1314 case Led_BlueTooth: 1314 case Led_BlueTooth:
1315 return m_leds [1]; 1315 return m_leds [1];
1316 default: 1316 default:
1317 return Led_Off; 1317 return Led_Off;
1318 } 1318 }
1319} 1319}
1320 1320
1321bool iPAQ::setLedState ( OLed l, OLedState st ) 1321bool iPAQ::setLedState ( OLed l, OLedState st )
1322{ 1322{
1323 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1323 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1324 1324
1325 if ( l == Led_Power ) { 1325 if ( l == Led_Power ) {
1326 if ( fd >= 0 ) { 1326 if ( fd >= 0 ) {
1327 LED_IN leds; 1327 LED_IN leds;
1328 ::memset ( &leds, 0, sizeof( leds )); 1328 ::memset ( &leds, 0, sizeof( leds ));
1329 leds. TotalTime = 0; 1329 leds. TotalTime = 0;
1330 leds. OnTime = 0; 1330 leds. OnTime = 0;
1331 leds. OffTime = 1; 1331 leds. OffTime = 1;
1332 leds. OffOnBlink = 2; 1332 leds. OffOnBlink = 2;
1333 1333
1334 switch ( st ) { 1334 switch ( st ) {
1335 case Led_Off : leds. OffOnBlink = 0; break; 1335 case Led_Off : leds. OffOnBlink = 0; break;
1336 case Led_On : leds. OffOnBlink = 1; break; 1336 case Led_On : leds. OffOnBlink = 1; break;
1337 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1337 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1338 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1338 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1339 } 1339 }
1340 1340
1341 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1341 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1342 m_leds [0] = st; 1342 m_leds [0] = st;
1343 return true; 1343 return true;
1344 } 1344 }
1345 } 1345 }
1346 } 1346 }
1347 return false; 1347 return false;
1348} 1348}
1349 1349
1350 1350
1351bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 1351bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
1352{ 1352{
1353 int newkeycode = keycode; 1353 int newkeycode = keycode;
1354 1354
1355 switch ( keycode ) { 1355 switch ( keycode ) {
1356 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 1356 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
1357 case HardKey_Menu: { 1357 case HardKey_Menu: {
1358 if (( d-> m_model == Model_iPAQ_H38xx ) || 1358 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1359 ( d-> m_model == Model_iPAQ_H39xx ) || 1359 ( d-> m_model == Model_iPAQ_H39xx ) ||
1360 ( d-> m_model == Model_iPAQ_H5xxx)) { 1360 ( d-> m_model == Model_iPAQ_H5xxx)) {
1361 newkeycode = HardKey_Mail; 1361 newkeycode = HardKey_Mail;
1362 } 1362 }
1363 break; 1363 break;
1364 } 1364 }
1365 1365
1366 // Rotate cursor keys 180° or 270° 1366 // Rotate cursor keys 180° or 270°
1367 case Key_Left : 1367 case Key_Left :
1368 case Key_Right: 1368 case Key_Right:
1369 case Key_Up : 1369 case Key_Up :
1370 case Key_Down : { 1370 case Key_Down : {
1371 1371
1372 if (( d-> m_model == Model_iPAQ_H31xx ) || 1372 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1373 ( d-> m_model == Model_iPAQ_H38xx )) { 1373 ( d-> m_model == Model_iPAQ_H38xx )) {
1374 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1374 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1375 } 1375 }
1376 // Rotate the cursor keys by 270° 1376 // Rotate the cursor keys by 270°
1377 // keycode - Key_Left = position of the button starting from left clockwise 1377 // keycode - Key_Left = position of the button starting from left clockwise
1378 // add the rotation to it and modolo. No we've the original offset 1378 // add the rotation to it and modolo. No we've the original offset
1379 // add the offset to the Key_Left key 1379 // add the offset to the Key_Left key
1380 if ( d-> m_model == Model_iPAQ_H5xxx ) 1380 if ( d-> m_model == Model_iPAQ_H5xxx )
1381 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 1381 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
1382 break; 1382 break;
1383 } 1383 }
1384 1384
1385 // map Power Button short/long press to F34/F35 1385 // map Power Button short/long press to F34/F35
1386 case Key_SysReq: { 1386 case Key_SysReq: {
1387 if ( isPress ) { 1387 if ( isPress ) {
1388 if ( m_power_timer ) 1388 if ( m_power_timer )
1389 killTimer ( m_power_timer ); 1389 killTimer ( m_power_timer );
1390 m_power_timer = startTimer ( 500 ); 1390 m_power_timer = startTimer ( 500 );
1391 } 1391 }
1392 else if ( m_power_timer ) { 1392 else if ( m_power_timer ) {
1393 killTimer ( m_power_timer ); 1393 killTimer ( m_power_timer );
1394 m_power_timer = 0; 1394 m_power_timer = 0;
1395 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1395 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1396 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1396 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1397 } 1397 }
1398 newkeycode = Key_unknown; 1398 newkeycode = Key_unknown;
1399 break; 1399 break;
1400 } 1400 }
1401 } 1401 }
1402 1402
1403 if ( newkeycode != keycode ) { 1403 if ( newkeycode != keycode ) {
1404 if ( newkeycode != Key_unknown ) 1404 if ( newkeycode != Key_unknown )
1405 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1405 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1406 return true; 1406 return true;
1407 } 1407 }
1408 else 1408 else
1409 return false; 1409 return false;
1410} 1410}
1411 1411
1412void iPAQ::timerEvent ( QTimerEvent * ) 1412void iPAQ::timerEvent ( QTimerEvent * )
1413{ 1413{
1414 killTimer ( m_power_timer ); 1414 killTimer ( m_power_timer );
1415 m_power_timer = 0; 1415 m_power_timer = 0;
1416 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1416 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1417 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1417 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1418} 1418}
1419 1419
1420 1420
1421void iPAQ::alarmSound ( ) 1421void iPAQ::alarmSound ( )
1422{ 1422{
1423#ifndef QT_NO_SOUND 1423#ifndef QT_NO_SOUND
1424 static Sound snd ( "alarm" ); 1424 static Sound snd ( "alarm" );
1425 int fd; 1425 int fd;
1426 int vol; 1426 int vol;
1427 bool vol_reset = false; 1427 bool vol_reset = false;
1428 1428
1429 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1429 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1430 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1430 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1431 Config cfg ( "qpe" ); 1431 Config cfg ( "qpe" );
1432 cfg. setGroup ( "Volume" ); 1432 cfg. setGroup ( "Volume" );
1433 1433
1434 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1434 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1435 if ( volalarm < 0 ) 1435 if ( volalarm < 0 )
1436 volalarm = 0; 1436 volalarm = 0;
1437 else if ( volalarm > 100 ) 1437 else if ( volalarm > 100 )
1438 volalarm = 100; 1438 volalarm = 100;
1439 volalarm |= ( volalarm << 8 ); 1439 volalarm |= ( volalarm << 8 );
1440 1440
1441 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1441 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1442 vol_reset = true; 1442 vol_reset = true;
1443 } 1443 }
1444 } 1444 }
1445 1445
1446 snd. play ( ); 1446 snd. play ( );
1447 while ( !snd. isFinished ( )) 1447 while ( !snd. isFinished ( ))
1448 qApp-> processEvents ( ); 1448 qApp-> processEvents ( );
1449 1449
1450 if ( fd >= 0 ) { 1450 if ( fd >= 0 ) {
1451 if ( vol_reset ) 1451 if ( vol_reset )
1452 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1452 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1453 ::close ( fd ); 1453 ::close ( fd );
1454 } 1454 }
1455#endif 1455#endif
1456} 1456}
1457 1457
1458 1458
1459bool iPAQ::setSoftSuspend ( bool soft ) 1459bool iPAQ::setSoftSuspend ( bool soft )
1460{ 1460{
1461 bool res = false; 1461 bool res = false;
1462 int fd; 1462 int fd;
1463 1463
1464 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1464 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1465 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1465 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1466 res = true; 1466 res = true;
1467 else 1467 else
1468 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1468 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1469 1469
1470 ::close ( fd ); 1470 ::close ( fd );
1471 } 1471 }
1472 else 1472 else
1473 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1473 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1474 1474
1475 return res; 1475 return res;
1476} 1476}
1477 1477
1478 1478
1479bool iPAQ::setDisplayBrightness ( int bright ) 1479bool iPAQ::setDisplayBrightness ( int bright )
1480{ 1480{
1481 bool res = false; 1481 bool res = false;
1482 int fd; 1482 int fd;
1483 1483
1484 if ( bright > 255 ) 1484 if ( bright > 255 )
1485 bright = 255; 1485 bright = 255;
1486 if ( bright < 0 ) 1486 if ( bright < 0 )
1487 bright = 0; 1487 bright = 0;
1488 1488
1489 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1489 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1490 FLITE_IN bl; 1490 FLITE_IN bl;
1491 bl. mode = 1; 1491 bl. mode = 1;
1492 bl. pwr = bright ? 1 : 0; 1492 bl. pwr = bright ? 1 : 0;
1493 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1493 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1494 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1494 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1495 ::close ( fd ); 1495 ::close ( fd );
1496 } 1496 }
1497 return res; 1497 return res;
1498} 1498}
1499 1499
1500int iPAQ::displayBrightnessResolution ( ) const 1500int iPAQ::displayBrightnessResolution ( ) const
1501{ 1501{
1502 switch ( model ( )) { 1502 switch ( model ( )) {
1503 case Model_iPAQ_H31xx: 1503 case Model_iPAQ_H31xx:
1504 case Model_iPAQ_H36xx: 1504 case Model_iPAQ_H36xx:
1505 case Model_iPAQ_H37xx: 1505 case Model_iPAQ_H37xx:
1506 return 128; // really 256, but >128 could damage the LCD 1506 return 128; // really 256, but >128 could damage the LCD
1507 1507
1508 case Model_iPAQ_H38xx: 1508 case Model_iPAQ_H38xx:
1509 case Model_iPAQ_H39xx: 1509 case Model_iPAQ_H39xx:
1510 return 64; 1510 return 64;
1511 case Model_iPAQ_H5xxx: 1511 case Model_iPAQ_H5xxx:
1512 return 255; 1512 return 255;
1513 1513
1514 default: 1514 default:
1515 return 2; 1515 return 2;
1516 } 1516 }
1517} 1517}
1518 1518
1519 1519
1520bool iPAQ::hasLightSensor ( ) const 1520bool iPAQ::hasLightSensor ( ) const
1521{ 1521{
1522 return true; 1522 return true;
1523} 1523}
1524 1524
1525int iPAQ::readLightSensor ( ) 1525int iPAQ::readLightSensor ( )
1526{ 1526{
1527 int fd; 1527 int fd;
1528 int val = -1; 1528 int val = -1;
1529 1529
1530 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1530 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1531 char buffer [8]; 1531 char buffer [8];
1532 1532
1533 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1533 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1534 char *endptr; 1534 char *endptr;
1535 1535
1536 buffer [4] = 0; 1536 buffer [4] = 0;
1537 val = ::strtol ( buffer + 2, &endptr, 16 ); 1537 val = ::strtol ( buffer + 2, &endptr, 16 );
1538 1538
1539 if ( *endptr != 0 ) 1539 if ( *endptr != 0 )
1540 val = -1; 1540 val = -1;
1541 } 1541 }
1542 ::close ( fd ); 1542 ::close ( fd );
1543 } 1543 }
1544 1544
1545 return val; 1545 return val;
1546} 1546}
1547 1547
1548int iPAQ::lightSensorResolution ( ) const 1548int iPAQ::lightSensorResolution ( ) const
1549{ 1549{
1550 return 256; 1550 return 256;
1551} 1551}
1552 1552
1553/************************************************** 1553/**************************************************
1554 * 1554 *
1555 * Zaurus 1555 * Zaurus
1556 * 1556 *
1557 **************************************************/ 1557 **************************************************/
1558 1558
1559// Check whether this device is the sharp zaurus.. 1559// Check whether this device is the sharp zaurus..
1560// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 1560// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
1561// class up into individual classes. We need three classes 1561// class up into individual classes. We need three classes
1562// 1562//
1563// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 1563// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
1564// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 1564// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
1565// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 1565// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
1566// 1566//
1567// Only question right now is: Do we really need to do it? Because as soon 1567// Only question right now is: Do we really need to do it? Because as soon
1568// as the OpenZaurus kernel is ready, there will be a unified interface for all 1568// as the OpenZaurus kernel is ready, there will be a unified interface for all
1569// Zaurus models (concerning apm, backlight, buttons, etc.) 1569// Zaurus models (concerning apm, backlight, buttons, etc.)
1570// 1570//
1571// Comments? - mickeyl. 1571// Comments? - mickeyl.
1572 1572
1573bool Zaurus::isZaurus() 1573bool Zaurus::isZaurus()
1574{ 1574{
1575 1575
1576 // If the special devices by embedix exist, it is quite simple: it is a Zaurus ! 1576 // If the special devices by embedix exist, it is quite simple: it is a Zaurus !
1577 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1577 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1578 return true; 1578 return true;
1579 } 1579 }
1580 1580
1581 // On non-embedix kernels, we have to look closer. 1581 // On non-embedix kernels, we have to look closer.
1582 bool is_zaurus = false; 1582 bool is_zaurus = false;
1583 QFile f ( "/proc/cpuinfo" ); 1583 QFile f ( "/proc/cpuinfo" );
1584 if ( f. open ( IO_ReadOnly ) ) { 1584 if ( f. open ( IO_ReadOnly ) ) {
1585 QString model; 1585 QString model;
1586 QFile f ( "/proc/cpuinfo" ); 1586 QFile f ( "/proc/cpuinfo" );
1587 1587
1588 QTextStream ts ( &f ); 1588 QTextStream ts ( &f );
1589 QString line; 1589 QString line;
1590 while( line = ts. readLine ( ) ) { 1590 while( line = ts. readLine ( ) ) {
1591 if ( line. left ( 8 ) == "Hardware" ) 1591 if ( line. left ( 8 ) == "Hardware" )
1592 break; 1592 break;
1593 } 1593 }
1594 int loc = line. find ( ":" ); 1594 int loc = line. find ( ":" );
1595 if ( loc != -1 ) 1595 if ( loc != -1 )
1596 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1596 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1597 1597
1598 if ( model == "Sharp-Collie" 1598 if ( model == "Sharp-Collie"
1599 || model == "Collie" 1599 || model == "Collie"
1600 || model == "SHARP Corgi" 1600 || model == "SHARP Corgi"
1601 || model == "SHARP Shepherd" 1601 || model == "SHARP Shepherd"
1602 || model == "SHARP Poodle" 1602 || model == "SHARP Poodle"
1603 || model == "SHARP Husky" 1603 || model == "SHARP Husky"
1604 ) 1604 )
1605 is_zaurus = true; 1605 is_zaurus = true;
1606 1606
1607 } 1607 }
1608 return is_zaurus; 1608 return is_zaurus;
1609} 1609}
1610 1610
1611 1611
1612void Zaurus::init ( ) 1612void Zaurus::init ( )
1613{ 1613{
1614 d-> m_vendorstr = "Sharp"; 1614 d-> m_vendorstr = "Sharp";
1615 d-> m_vendor = Vendor_Sharp; 1615 d-> m_vendor = Vendor_Sharp;
1616 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1616 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1617 1617
1618 // QFile f ( "/proc/filesystems" ); 1618 // QFile f ( "/proc/filesystems" );
1619 QString model; 1619 QString model;
1620 1620
1621 // It isn't a good idea to check the system configuration to 1621 // It isn't a good idea to check the system configuration to
1622 // detect the distribution ! 1622 // detect the distribution !
1623 // Otherwise it may happen that any other distribution is detected as openzaurus, just 1623 // Otherwise it may happen that any other distribution is detected as openzaurus, just
1624 // because it uses a jffs2 filesystem.. 1624 // because it uses a jffs2 filesystem..
1625 // (eilers) 1625 // (eilers)
1626 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1626 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1627 QFile f ("/etc/oz_version"); 1627 QFile f ("/etc/oz_version");
1628 if ( f.exists() ){ 1628 if ( f.exists() ){
1629 d-> m_vendorstr = "OpenZaurus Team"; 1629 d-> m_vendorstr = "OpenZaurus Team";
1630 d-> m_systemstr = "OpenZaurus"; 1630 d-> m_systemstr = "OpenZaurus";
1631 d-> m_system = System_OpenZaurus; 1631 d-> m_system = System_OpenZaurus;
1632 1632
1633 if ( f. open ( IO_ReadOnly )) { 1633 if ( f. open ( IO_ReadOnly )) {
1634 QTextStream ts ( &f ); 1634 QTextStream ts ( &f );
1635 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1635 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1636 f. close ( ); 1636 f. close ( );
1637 } 1637 }
1638 1638
1639 // Openzaurus sometimes uses the embedix kernel! 1639 // Openzaurus sometimes uses the embedix kernel!
1640 // => Check whether this is an embedix kernel 1640 // => Check whether this is an embedix kernel
1641 FILE *uname = popen("uname -r", "r"); 1641 FILE *uname = popen("uname -r", "r");
1642 QString line; 1642 QString line;
1643 if ( f.open(IO_ReadOnly, uname) ) { 1643 if ( f.open(IO_ReadOnly, uname) ) {
1644 QTextStream ts ( &f ); 1644 QTextStream ts ( &f );
1645 line = ts. readLine ( ); 1645 line = ts. readLine ( );
1646 int loc = line. find ( "embedix" ); 1646 int loc = line. find ( "embedix" );
1647 if ( loc != -1 ) 1647 if ( loc != -1 )
1648 m_embedix = true; 1648 m_embedix = true;
1649 else 1649 else
1650 m_embedix = false; 1650 m_embedix = false;
1651 f. close ( ); 1651 f. close ( );
1652 } 1652 }
1653 pclose(uname); 1653 pclose(uname);
1654 } 1654 }
1655 else { 1655 else {
1656 d-> m_systemstr = "Zaurus"; 1656 d-> m_systemstr = "Zaurus";
1657 d-> m_system = System_Zaurus; 1657 d-> m_system = System_Zaurus;
1658 } 1658 }
1659 1659
1660 f. setName ( "/proc/cpuinfo" ); 1660 f. setName ( "/proc/cpuinfo" );
1661 if ( f. open ( IO_ReadOnly ) ) { 1661 if ( f. open ( IO_ReadOnly ) ) {
1662 QTextStream ts ( &f ); 1662 QTextStream ts ( &f );
1663 QString line; 1663 QString line;
1664 while( line = ts. readLine ( ) ) { 1664 while( line = ts. readLine ( ) ) {
1665 if ( line. left ( 8 ) == "Hardware" ) 1665 if ( line. left ( 8 ) == "Hardware" )
1666 break; 1666 break;
1667 } 1667 }
1668 int loc = line. find ( ":" ); 1668 int loc = line. find ( ":" );
1669 if ( loc != -1 ) 1669 if ( loc != -1 )
1670 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1670 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1671 } 1671 }
1672 1672
1673 if ( model == "SHARP Corgi" ) { 1673 if ( model == "SHARP Corgi" ) {
1674 d-> m_model = Model_Zaurus_SLC7x0; 1674 d-> m_model = Model_Zaurus_SLC7x0;
1675 d-> m_modelstr = "Zaurus SL-C700"; 1675 d-> m_modelstr = "Zaurus SL-C700";
1676 } else if ( model == "SHARP Shepherd" ) { 1676 } else if ( model == "SHARP Shepherd" ) {
1677 d-> m_model = Model_Zaurus_SLC7x0; 1677 d-> m_model = Model_Zaurus_SLC7x0;
1678 d-> m_modelstr = "Zaurus SL-C750"; 1678 d-> m_modelstr = "Zaurus SL-C750";
1679 } else if ( model == "SHARP Husky" ) { 1679 } else if ( model == "SHARP Husky" ) {
1680 d-> m_model = Model_Zaurus_SLC7x0; 1680 d-> m_model = Model_Zaurus_SLC7x0;
1681 d-> m_modelstr = "Zaurus SL-C760"; 1681 d-> m_modelstr = "Zaurus SL-C760";
1682 } else if ( model == "SHARP Poodle" ) { 1682 } else if ( model == "SHARP Poodle" ) {
1683 d-> m_model = Model_Zaurus_SLB600; 1683 d-> m_model = Model_Zaurus_SLB600;
1684 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1684 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1685 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1685 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1686 d-> m_model = Model_Zaurus_SL5500; 1686 d-> m_model = Model_Zaurus_SL5500;
1687 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1687 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1688 } else { 1688 } else {
1689 d-> m_model = Model_Zaurus_SL5500; 1689 d-> m_model = Model_Zaurus_SL5500;
1690 d-> m_modelstr = "Zaurus (Model unknown)"; 1690 d-> m_modelstr = "Zaurus (Model unknown)";
1691 } 1691 }
1692 1692
1693 bool flipstate = false; 1693 bool flipstate = false;
1694 switch ( d-> m_model ) { 1694 switch ( d-> m_model ) {
1695 case Model_Zaurus_SLA300: 1695 case Model_Zaurus_SLA300:
1696 d-> m_rotation = Rot0; 1696 d-> m_rotation = Rot0;
1697 break; 1697 break;
1698 case Model_Zaurus_SLC7x0: 1698 case Model_Zaurus_SLC7x0:
1699 d-> m_rotation = rotation(); 1699 d-> m_rotation = rotation();
1700 d-> m_direction = direction(); 1700 d-> m_direction = direction();
1701 break; 1701 break;
1702 case Model_Zaurus_SLB600: 1702 case Model_Zaurus_SLB600:
1703 case Model_Zaurus_SL5500: 1703 case Model_Zaurus_SL5500:
1704 case Model_Zaurus_SL5000: 1704 case Model_Zaurus_SL5000:
1705 default: 1705 default:
1706 d-> m_rotation = Rot270; 1706 d-> m_rotation = Rot270;
1707 break; 1707 break;
1708 } 1708 }
1709 m_leds [0] = Led_Off; 1709 m_leds [0] = Led_Off;
1710} 1710}
1711 1711
1712void Zaurus::initButtons ( ) 1712void Zaurus::initButtons ( )
1713{ 1713{
1714 if ( d-> m_buttons ) 1714 if ( d-> m_buttons )
1715 return; 1715 return;
1716 1716
1717 d-> m_buttons = new QValueList <ODeviceButton>; 1717 d-> m_buttons = new QValueList <ODeviceButton>;
1718 1718
1719 struct z_button * pz_buttons; 1719 struct z_button * pz_buttons;
1720 int buttoncount; 1720 int buttoncount;
1721 switch ( d-> m_model ) { 1721 switch ( d-> m_model ) {
1722 case Model_Zaurus_SLC7x0: 1722 case Model_Zaurus_SLC7x0:
1723 pz_buttons = z_buttons_c700; 1723 pz_buttons = z_buttons_c700;
1724 buttoncount = ARRAY_SIZE(z_buttons_c700); 1724 buttoncount = ARRAY_SIZE(z_buttons_c700);
1725 break; 1725 break;
1726 default: 1726 default:
1727 pz_buttons = z_buttons; 1727 pz_buttons = z_buttons;
1728 buttoncount = ARRAY_SIZE(z_buttons); 1728 buttoncount = ARRAY_SIZE(z_buttons);
1729 break; 1729 break;
1730 } 1730 }
1731 1731
1732 for ( int i = 0; i < buttoncount; i++ ) { 1732 for ( int i = 0; i < buttoncount; i++ ) {
1733 struct z_button *zb = pz_buttons + i; 1733 struct z_button *zb = pz_buttons + i;
1734 ODeviceButton b; 1734 ODeviceButton b;
1735 1735
1736 b. setKeycode ( zb-> code ); 1736 b. setKeycode ( zb-> code );
1737 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1737 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1738 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1738 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1739 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1739 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1740 zb-> fpressedaction )); 1740 zb-> fpressedaction ));
1741 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1741 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1742 zb-> fheldaction )); 1742 zb-> fheldaction ));
1743 1743
1744 d-> m_buttons-> append ( b ); 1744 d-> m_buttons-> append ( b );
1745 } 1745 }
1746 1746
1747 reloadButtonMapping ( ); 1747 reloadButtonMapping ( );
1748 1748
1749 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1749 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1750 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1750 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)),
1751 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1751 this, SLOT( systemMessage(const QCString&,const QByteArray&)));
1752} 1752}
1753 1753
1754#include <unistd.h> 1754#include <unistd.h>
1755#include <fcntl.h> 1755#include <fcntl.h>
1756#include <sys/ioctl.h> 1756#include <sys/ioctl.h>
1757 1757
1758//#include <asm/sharp_char.h> // including kernel headers is evil ... 1758//#include <asm/sharp_char.h> // including kernel headers is evil ...
1759 1759
1760#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1760#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1761 1761
1762 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1762 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1763#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1763#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1764 1764
1765#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1765#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1766#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1766#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1767#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1767#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1768 1768
1769/* --- for SHARP_BUZZER device --- */ 1769/* --- for SHARP_BUZZER device --- */
1770 1770
1771 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1771 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1772//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1772//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1773 1773
1774#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1774#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1775#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1775#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1776#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1776#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1777#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1777#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1778#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1778#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1779 1779
1780//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1780//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1781//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1781//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1782 1782
1783//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1783//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1784//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1784//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1785//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1785//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1786//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1786//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1787//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1787//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1788//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1788//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1789//#define SHARP_PDA_APPSTART 9 /* application start */ 1789//#define SHARP_PDA_APPSTART 9 /* application start */
1790//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1790//#define SHARP_PDA_APPQUIT 10 /* application ends */
1791 1791
1792//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1792//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1793//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1793//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1794//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1794//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1795//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1795//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1796// 1796//
1797 1797
1798 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1798 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1799#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1799#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1800 1800
1801#define SHARP_IOCTL_GET_ROTATION 0x413c 1801#define SHARP_IOCTL_GET_ROTATION 0x413c
1802 1802
1803typedef struct sharp_led_status { 1803typedef struct sharp_led_status {
1804 int which; /* select which LED status is wanted. */ 1804 int which; /* select which LED status is wanted. */
1805 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1805 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1806} sharp_led_status; 1806} sharp_led_status;
1807 1807
1808#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1808#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1809 1809
1810#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1810#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1811#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1811#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1812#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1812#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1813 1813
1814// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1814// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1815 1815
1816#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1816#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1817#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1817#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1818#define APM_EVT_POWER_BUTTON (1 << 0) 1818#define APM_EVT_POWER_BUTTON (1 << 0)
1819 1819
1820#define FL_IOCTL_STEP_CONTRAST 100 1820#define FL_IOCTL_STEP_CONTRAST 100
1821 1821
1822 1822
1823void Zaurus::buzzer ( int sound ) 1823void Zaurus::buzzer ( int sound )
1824{ 1824{
1825#ifndef QT_NO_SOUND 1825#ifndef QT_NO_SOUND
1826 QString soundname; 1826 QString soundname;
1827 1827
1828 // Not all devices have real sound 1828 // Not all devices have real sound
1829 if ( d->m_model == Model_Zaurus_SLC7x0 1829 if ( d->m_model == Model_Zaurus_SLC7x0
1830 || d->m_model == Model_Zaurus_SLB600 ){ 1830 || d->m_model == Model_Zaurus_SLB600 ){
1831 1831
1832 switch ( sound ){ 1832 switch ( sound ){
1833 case SHARP_BUZ_SCHEDULE_ALARM: 1833 case SHARP_BUZ_SCHEDULE_ALARM:
1834 soundname = "alarm"; 1834 soundname = "alarm";
1835 break; 1835 break;
1836 case SHARP_BUZ_TOUCHSOUND: 1836 case SHARP_BUZ_TOUCHSOUND:
1837 soundname = "touchsound"; 1837 soundname = "touchsound";
1838 break; 1838 break;
1839 case SHARP_BUZ_KEYSOUND: 1839 case SHARP_BUZ_KEYSOUND:
1840 soundname = "keysound"; 1840 soundname = "keysound";
1841 break; 1841 break;
1842 default: 1842 default:
1843 soundname = "alarm"; 1843 soundname = "alarm";
1844 1844
1845 } 1845 }
1846 } 1846 }
1847 1847
1848 // If a soundname is defined, we expect that this device has 1848 // If a soundname is defined, we expect that this device has
1849 // sound capabilities.. Otherwise we expect to have the buzzer 1849 // sound capabilities.. Otherwise we expect to have the buzzer
1850 // device.. 1850 // device..
1851 if ( !soundname.isEmpty() ){ 1851 if ( !soundname.isEmpty() ){
1852 int fd; 1852 int fd;
1853 int vol; 1853 int vol;
1854 bool vol_reset = false; 1854 bool vol_reset = false;
1855 1855
1856 Sound snd ( soundname ); 1856 Sound snd ( soundname );
1857 1857
1858 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1858 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1859 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1859 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1860 Config cfg ( "qpe" ); 1860 Config cfg ( "qpe" );
1861 cfg. setGroup ( "Volume" ); 1861 cfg. setGroup ( "Volume" );
1862 1862
1863 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1863 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1864 if ( volalarm < 0 ) 1864 if ( volalarm < 0 )
1865 volalarm = 0; 1865 volalarm = 0;
1866 else if ( volalarm > 100 ) 1866 else if ( volalarm > 100 )
1867 volalarm = 100; 1867 volalarm = 100;
1868 volalarm |= ( volalarm << 8 ); 1868 volalarm |= ( volalarm << 8 );
1869 1869
1870 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1870 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1871 vol_reset = true; 1871 vol_reset = true;
1872 } 1872 }
1873 } 1873 }
1874 1874
1875 snd. play ( ); 1875 snd. play ( );
1876 while ( !snd. isFinished ( )) 1876 while ( !snd. isFinished ( ))
1877 qApp-> processEvents ( ); 1877 qApp-> processEvents ( );
1878 1878
1879 if ( fd >= 0 ) { 1879 if ( fd >= 0 ) {
1880 if ( vol_reset ) 1880 if ( vol_reset )
1881 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1881 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1882 ::close ( fd ); 1882 ::close ( fd );
1883 } 1883 }
1884 } else { 1884 } else {
1885 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1885 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1886 1886
1887 if ( fd >= 0 ) { 1887 if ( fd >= 0 ) {
1888 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1888 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1889 ::close ( fd ); 1889 ::close ( fd );
1890 } 1890 }
1891 1891
1892 } 1892 }
1893#endif 1893#endif
1894} 1894}
1895 1895
1896 1896
1897void Zaurus::alarmSound ( ) 1897void Zaurus::alarmSound ( )
1898{ 1898{
1899 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1899 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1900} 1900}
1901 1901
1902void Zaurus::touchSound ( ) 1902void Zaurus::touchSound ( )
1903{ 1903{
1904 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1904 buzzer ( SHARP_BUZ_TOUCHSOUND );
1905} 1905}
1906 1906
1907void Zaurus::keySound ( ) 1907void Zaurus::keySound ( )
1908{ 1908{
1909 buzzer ( SHARP_BUZ_KEYSOUND ); 1909 buzzer ( SHARP_BUZ_KEYSOUND );
1910} 1910}
1911 1911
1912 1912
1913QValueList <OLed> Zaurus::ledList ( ) const 1913QValueList <OLed> Zaurus::ledList ( ) const
1914{ 1914{
1915 QValueList <OLed> vl; 1915 QValueList <OLed> vl;
1916 vl << Led_Mail; 1916 vl << Led_Mail;
1917 return vl; 1917 return vl;
1918} 1918}
1919 1919
1920QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1920QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1921{ 1921{
1922 QValueList <OLedState> vl; 1922 QValueList <OLedState> vl;
1923 1923
1924 if ( l == Led_Mail ) 1924 if ( l == Led_Mail )
1925 vl << Led_Off << Led_On << Led_BlinkSlow; 1925 vl << Led_Off << Led_On << Led_BlinkSlow;
1926 return vl; 1926 return vl;
1927} 1927}
1928 1928
1929OLedState Zaurus::ledState ( OLed which ) const 1929OLedState Zaurus::ledState ( OLed which ) const
1930{ 1930{
1931 if ( which == Led_Mail ) 1931 if ( which == Led_Mail )
1932 return m_leds [0]; 1932 return m_leds [0];
1933 else 1933 else
1934 return Led_Off; 1934 return Led_Off;
1935} 1935}
1936 1936
1937bool Zaurus::setLedState ( OLed which, OLedState st ) 1937bool Zaurus::setLedState ( OLed which, OLedState st )
1938{ 1938{
1939 if (!m_embedix) // Currently not supported on non_embedix kernels 1939 if (!m_embedix) // Currently not supported on non_embedix kernels
1940 return false; 1940 return false;
1941 1941
1942 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1942 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1943 1943
1944 if ( which == Led_Mail ) { 1944 if ( which == Led_Mail ) {
1945 if ( fd >= 0 ) { 1945 if ( fd >= 0 ) {
1946 struct sharp_led_status leds; 1946 struct sharp_led_status leds;
1947 ::memset ( &leds, 0, sizeof( leds )); 1947 ::memset ( &leds, 0, sizeof( leds ));
1948 leds. which = SHARP_LED_MAIL_EXISTS; 1948 leds. which = SHARP_LED_MAIL_EXISTS;
1949 bool ok = true; 1949 bool ok = true;
1950 1950
1951 switch ( st ) { 1951 switch ( st ) {
1952 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1952 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1953 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1953 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1954 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1954 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1955 default : ok = false; 1955 default : ok = false;
1956 } 1956 }
1957 1957
1958 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1958 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1959 m_leds [0] = st; 1959 m_leds [0] = st;
1960 return true; 1960 return true;
1961 } 1961 }
1962 } 1962 }
1963 } 1963 }
1964 return false; 1964 return false;
1965} 1965}
1966 1966
1967bool Zaurus::setSoftSuspend ( bool soft ) 1967bool Zaurus::setSoftSuspend ( bool soft )
1968{ 1968{
1969 if (!m_embedix) { 1969 if (!m_embedix) {
1970 /* non-Embedix kernels dont have kernel autosuspend */ 1970 /* non-Embedix kernels dont have kernel autosuspend */
1971 return ODevice::setSoftSuspend( soft ); 1971 return ODevice::setSoftSuspend( soft );
1972 } 1972 }
1973 1973
1974 bool res = false; 1974 bool res = false;
1975 int fd; 1975 int fd;
1976 1976
1977 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1977 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1978 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1978 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
1979 1979
1980 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 1980 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
1981 1981
1982 if ( sources >= 0 ) { 1982 if ( sources >= 0 ) {
1983 if ( soft ) 1983 if ( soft )
1984 sources &= ~APM_EVT_POWER_BUTTON; 1984 sources &= ~APM_EVT_POWER_BUTTON;
1985 else 1985 else
1986 sources |= APM_EVT_POWER_BUTTON; 1986 sources |= APM_EVT_POWER_BUTTON;
1987 1987
1988 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1988 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1989 res = true; 1989 res = true;
1990 else 1990 else
1991 perror ( "APM_IOCGEVTSRC" ); 1991 perror ( "APM_IOCGEVTSRC" );
1992 } 1992 }
1993 else 1993 else
1994 perror ( "APM_IOCGEVTSRC" ); 1994 perror ( "APM_IOCGEVTSRC" );
1995 1995
1996 ::close ( fd ); 1996 ::close ( fd );
1997 } 1997 }
1998 else 1998 else
1999 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1999 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
2000 2000
2001 return res; 2001 return res;
2002} 2002}
2003 2003
2004 2004
2005bool Zaurus::setDisplayBrightness ( int bright ) 2005bool Zaurus::setDisplayBrightness ( int bright )
2006{ 2006{
2007 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright ); 2007 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright );
2008 bool res = false; 2008 bool res = false;
2009 int fd; 2009 int fd;
2010 2010
2011 if ( bright > 255 ) bright = 255; 2011 if ( bright > 255 ) bright = 255;
2012 if ( bright < 0 ) bright = 0; 2012 if ( bright < 0 ) bright = 0;
2013 2013
2014 if ( m_embedix ) 2014 if ( m_embedix )
2015 { 2015 {
2016 if ( d->m_model == Model_Zaurus_SLC7x0 ) 2016 if ( d->m_model == Model_Zaurus_SLC7x0 )
2017 { 2017 {
2018 //qDebug( "using special treatment for devices with the corgi backlight interface" ); 2018 //qDebug( "using special treatment for devices with the corgi backlight interface" );
2019 // special treatment for devices with the corgi backlight interface 2019 // special treatment for devices with the corgi backlight interface
2020 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 ) 2020 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
2021 { 2021 {
2022 int value = ( bright == 1 ) ? 1 : bright * ( 17.0 / 255.0 ); 2022 int value = ( bright == 1 ) ? 1 : bright * ( 17.0 / 255.0 );
2023 char writeCommand[100]; 2023 char writeCommand[100];
2024 const int count = sprintf( writeCommand, "0x%x\n", value ); 2024 const int count = sprintf( writeCommand, "0x%x\n", value );
2025 res = ( ::write ( fd, writeCommand, count ) != -1 ); 2025 res = ( ::write ( fd, writeCommand, count ) != -1 );
2026 ::close ( fd ); 2026 ::close ( fd );
2027 } 2027 }
2028 return res; 2028 return res;
2029 } 2029 }
2030 else 2030 else
2031 { 2031 {
2032 // standard treatment for devices with the dumb embedix frontlight interface 2032 // standard treatment for devices with the dumb embedix frontlight interface
2033 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 2033 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
2034 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 2034 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
2035 if ( bright && !bl ) 2035 if ( bright && !bl )
2036 bl = 1; 2036 bl = 1;
2037 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 2037 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
2038 ::close ( fd ); 2038 ::close ( fd );
2039 } 2039 }
2040 } 2040 }
2041 } 2041 }
2042 else 2042 else
2043 { 2043 {
2044 // special treatment for the OpenZaurus unified interface 2044 // special treatment for the OpenZaurus unified interface
2045 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 2045 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
2046 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) { 2046 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
2047 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 ); 2047 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
2048 ::close ( fd ); 2048 ::close ( fd );
2049 } 2049 }
2050 } 2050 }
2051 return res; 2051 return res;
2052} 2052}
2053 2053
2054bool Zaurus::suspend ( ) 2054bool Zaurus::suspend ( )
2055{ 2055{
2056 qDebug("ODevice::suspend"); 2056 qDebug("ODevice::suspend");
2057 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 2057 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
2058 return false; 2058 return false;
2059 2059
2060 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 2060 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
2061 return false; 2061 return false;
2062 2062
2063 bool res = false; 2063 bool res = false;
2064 2064
2065 struct timeval tvs, tvn; 2065 struct timeval tvs, tvn;
2066 ::gettimeofday ( &tvs, 0 ); 2066 ::gettimeofday ( &tvs, 0 );
2067 2067
2068 ::sync ( ); // flush fs caches 2068 ::sync ( ); // flush fs caches
2069 res = ( ::system ( "apm --suspend" ) == 0 ); 2069 res = ( ::system ( "apm --suspend" ) == 0 );
2070 2070
2071 // This is needed because the iPAQ apm implementation is asynchronous and we 2071 // This is needed because the iPAQ apm implementation is asynchronous and we
2072 // can not be sure when exactly the device is really suspended 2072 // can not be sure when exactly the device is really suspended
2073 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 2073 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
2074 2074
2075 if ( res ) { 2075 if ( res ) {
2076 do { // Yes, wait 15 seconds. This APM bug sucks big time. 2076 do { // Yes, wait 15 seconds. This APM bug sucks big time.
2077 ::usleep ( 200 * 1000 ); 2077 ::usleep ( 200 * 1000 );
2078 ::gettimeofday ( &tvn, 0 ); 2078 ::gettimeofday ( &tvn, 0 );
2079 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 2079 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
2080 } 2080 }
2081 2081
2082 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); 2082 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" );
2083 return res; 2083 return res;
2084} 2084}
2085 2085
2086 2086
2087Transformation Zaurus::rotation ( ) const 2087Transformation Zaurus::rotation ( ) const
2088{ 2088{
2089 Transformation rot; 2089 Transformation rot;
2090 int handle = 0; 2090 int handle = 0;
2091 int retval = 0; 2091 int retval = 0;
2092 2092
2093 switch ( d-> m_model ) { 2093 switch ( d-> m_model ) {
2094 case Model_Zaurus_SLC7x0: 2094 case Model_Zaurus_SLC7x0:
2095 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2095 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2096 if (handle == -1) { 2096 if (handle == -1) {
2097 return Rot270; 2097 return Rot270;
2098 } else { 2098 } else {
2099 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2099 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2100 ::close (handle); 2100 ::close (handle);
2101 2101
2102 if (retval == 2 ) 2102 if (retval == 2 )
2103 rot = Rot0; 2103 rot = Rot0;
2104 else 2104 else
2105 rot = Rot270; 2105 rot = Rot270;
2106 } 2106 }
2107 break; 2107 break;
2108 case Model_Zaurus_SLA300: 2108 case Model_Zaurus_SLA300:
2109 case Model_Zaurus_SLB600: 2109 case Model_Zaurus_SLB600:
2110 case Model_Zaurus_SL5500: 2110 case Model_Zaurus_SL5500:
2111 case Model_Zaurus_SL5000: 2111 case Model_Zaurus_SL5000:
2112 default: 2112 default:
2113 rot = d-> m_rotation; 2113 rot = d-> m_rotation;
2114 break; 2114 break;
2115 } 2115 }
2116 2116
2117 return rot; 2117 return rot;
2118} 2118}
2119ODirection Zaurus::direction ( ) const 2119ODirection Zaurus::direction ( ) const
2120{ 2120{
2121 ODirection dir; 2121 ODirection dir;
2122 int handle = 0; 2122 int handle = 0;
2123 int retval = 0; 2123 int retval = 0;
2124 switch ( d-> m_model ) { 2124 switch ( d-> m_model ) {
2125 case Model_Zaurus_SLC7x0: 2125 case Model_Zaurus_SLC7x0:
2126 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2126 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2127 if (handle == -1) { 2127 if (handle == -1) {
2128 dir = CW; 2128 dir = CW;
2129 } else { 2129 } else {
2130 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2130 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2131 ::close (handle); 2131 ::close (handle);
2132 if (retval == 2 ) 2132 if (retval == 2 )
2133 dir = CCW; 2133 dir = CCW;
2134 else 2134 else
2135 dir = CW; 2135 dir = CW;
2136 } 2136 }
2137 break; 2137 break;
2138 case Model_Zaurus_SLA300: 2138 case Model_Zaurus_SLA300:
2139 case Model_Zaurus_SLB600: 2139 case Model_Zaurus_SLB600:
2140 case Model_Zaurus_SL5500: 2140 case Model_Zaurus_SL5500:
2141 case Model_Zaurus_SL5000: 2141 case Model_Zaurus_SL5000:
2142 default: 2142 default:
2143 dir = d-> m_direction; 2143 dir = d-> m_direction;
2144 break; 2144 break;
2145 } 2145 }
2146 return dir; 2146 return dir;
2147 2147
2148} 2148}
2149 2149
2150int Zaurus::displayBrightnessResolution ( ) const 2150int Zaurus::displayBrightnessResolution ( ) const
2151{ 2151{
2152 if (m_embedix) 2152 if (m_embedix)
2153 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5; 2153 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5;
2154 else 2154 else
2155 return 256; 2155 return 256;
2156} 2156}
2157 2157
2158bool Zaurus::hasHingeSensor() const 2158bool Zaurus::hasHingeSensor() const
2159{ 2159{
2160 return d->m_model == Model_Zaurus_SLC7x0; 2160 return d->m_model == Model_Zaurus_SLC7x0;
2161} 2161}
2162 2162
2163OHingeStatus Zaurus::readHingeSensor() 2163OHingeStatus Zaurus::readHingeSensor()
2164{ 2164{
2165 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2165 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2166 if (handle == -1) 2166 if (handle == -1)
2167 { 2167 {
2168 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 2168 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
2169 return CASE_UNKNOWN; 2169 return CASE_UNKNOWN;
2170 } 2170 }
2171 else 2171 else
2172 { 2172 {
2173 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2173 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2174 ::close (handle); 2174 ::close (handle);
2175 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) 2175 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
2176 { 2176 {
2177 qDebug( "Zaurus::readHingeSensor() - result = %d", retval ); 2177 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
2178 return static_cast<OHingeStatus>( retval ); 2178 return static_cast<OHingeStatus>( retval );
2179 } 2179 }
2180 else 2180 else
2181 { 2181 {
2182 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 2182 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
2183 return CASE_UNKNOWN; 2183 return CASE_UNKNOWN;
2184 } 2184 }
2185 } 2185 }
2186} 2186}
2187 2187
2188 2188
2189void Zaurus::virtual_hook( int id, void *data ) { 2189void Zaurus::virtual_hook( int id, void *data ) {
2190 switch( id ) { 2190 switch( id ) {
2191 case VIRTUAL_ROTATION:{ 2191 case VIRTUAL_ROTATION:{
2192 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data ); 2192 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
2193 rot->trans = rotation(); 2193 rot->trans = rotation();
2194 break; 2194 break;
2195 } 2195 }
2196 case VIRTUAL_DIRECTION:{ 2196 case VIRTUAL_DIRECTION:{
2197 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data ); 2197 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
2198 dir->direct = direction(); 2198 dir->direct = direction();
2199 break; 2199 break;
2200 } 2200 }
2201 case VIRTUAL_HAS_HINGE:{ 2201 case VIRTUAL_HAS_HINGE:{
2202 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data ); 2202 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
2203 hin->hasHinge = hasHingeSensor(); 2203 hin->hasHinge = hasHingeSensor();
2204 break; 2204 break;
2205 } 2205 }
2206 case VIRTUAL_HINGE:{ 2206 case VIRTUAL_HINGE:{
2207 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data ); 2207 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
2208 hin->hingeStat = readHingeSensor(); 2208 hin->hingeStat = readHingeSensor();
2209 break; 2209 break;
2210 } 2210 }
2211 default: 2211 default:
2212 ODevice::virtual_hook( id, data ); 2212 ODevice::virtual_hook( id, data );
2213 break; 2213 break;
2214 } 2214 }
2215} 2215}
2216 2216
2217/************************************************** 2217/**************************************************
2218 * 2218 *
2219 * SIMpad 2219 * SIMpad
2220 * 2220 *
2221 **************************************************/ 2221 **************************************************/
2222 2222
2223void SIMpad::init ( ) 2223void SIMpad::init ( )
2224{ 2224{
2225 d-> m_vendorstr = "SIEMENS"; 2225 d-> m_vendorstr = "SIEMENS";
2226 d-> m_vendor = Vendor_SIEMENS; 2226 d-> m_vendor = Vendor_SIEMENS;
2227 2227
2228 QFile f ( "/proc/hal/model" ); 2228 QFile f ( "/proc/hal/model" );
2229 2229
2230 //TODO Implement model checking 2230 //TODO Implement model checking
2231 //FIXME For now we assume an SL4 2231 //FIXME For now we assume an SL4
2232 2232
2233 d-> m_modelstr = "SL4"; 2233 d-> m_modelstr = "SL4";
2234 d-> m_model = Model_SIMpad_SL4; 2234 d-> m_model = Model_SIMpad_SL4;
2235 2235
2236 switch ( d-> m_model ) { 2236 switch ( d-> m_model ) {
2237 default: 2237 default:
2238 d-> m_rotation = Rot0; 2238 d-> m_rotation = Rot0;
2239 d-> m_direction = CCW; 2239 d-> m_direction = CCW;
2240 d-> m_holdtime = 1000; // 1000ms 2240 d-> m_holdtime = 1000; // 1000ms
2241 2241
2242 break; 2242 break;
2243 } 2243 }
2244 2244
2245 f. setName ( "/etc/familiar-version" ); 2245 f. setName ( "/etc/familiar-version" );
2246 if ( f. open ( IO_ReadOnly )) { 2246 if ( f. open ( IO_ReadOnly )) {
2247 d-> m_systemstr = "Familiar"; 2247 d-> m_systemstr = "Familiar";
2248 d-> m_system = System_Familiar; 2248 d-> m_system = System_Familiar;
2249 2249
2250 QTextStream ts ( &f ); 2250 QTextStream ts ( &f );
2251 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 2251 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
2252 2252
2253 f. close ( ); 2253 f. close ( );
2254 } else { 2254 } else {
2255 f. setName ( "/etc/oz_version" ); 2255 f. setName ( "/etc/oz_version" );
2256 2256
2257 if ( f. open ( IO_ReadOnly )) { 2257 if ( f. open ( IO_ReadOnly )) {
2258 d-> m_systemstr = "OpenEmbedded/SIMpad"; 2258 d-> m_systemstr = "OpenEmbedded/SIMpad";
2259 d-> m_system = System_OpenZaurus; 2259 d-> m_system = System_OpenZaurus;
2260 2260
2261 QTextStream ts ( &f ); 2261 QTextStream ts ( &f );
2262 ts.setDevice ( &f ); 2262 ts.setDevice ( &f );
2263 d-> m_sysverstr = ts. readLine ( ); 2263 d-> m_sysverstr = ts. readLine ( );
2264 f. close ( ); 2264 f. close ( );
2265 } 2265 }
2266 } 2266 }
2267 2267
2268 m_leds [0] = m_leds [1] = Led_Off; 2268 m_leds [0] = m_leds [1] = Led_Off;
2269 2269
2270 m_power_timer = 0; 2270 m_power_timer = 0;
2271 2271
2272} 2272}
2273 2273
2274void SIMpad::initButtons ( ) 2274void SIMpad::initButtons ( )
2275{ 2275{
2276 if ( d-> m_buttons ) 2276 if ( d-> m_buttons )
2277 return; 2277 return;
2278 2278
2279 if ( isQWS( ) ) 2279 if ( isQWS( ) )
2280 QWSServer::setKeyboardFilter ( this ); 2280 QWSServer::setKeyboardFilter ( this );
2281 2281
2282 d-> m_buttons = new QValueList <ODeviceButton>; 2282 d-> m_buttons = new QValueList <ODeviceButton>;
2283 2283
2284 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) { 2284 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) {
2285 s_button *sb = simpad_buttons + i; 2285 s_button *sb = simpad_buttons + i;
2286 ODeviceButton b; 2286 ODeviceButton b;
2287 2287
2288 if (( sb-> model & d-> m_model ) == d-> m_model ) { 2288 if (( sb-> model & d-> m_model ) == d-> m_model ) {
2289 b. setKeycode ( sb-> code ); 2289 b. setKeycode ( sb-> code );
2290 b. setUserText ( QObject::tr ( "Button", sb-> utext )); 2290 b. setUserText ( QObject::tr ( "Button", sb-> utext ));
2291 b. setPixmap ( Resource::loadPixmap ( sb-> pix )); 2291 b. setPixmap ( Resource::loadPixmap ( sb-> pix ));
2292 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb-> fpressedservice ), sb-> fpressedaction )); 2292 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb-> fpressedservice ), sb-> fpressedaction ));
2293 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb-> fheldservice ), sb-> fheldaction )); 2293 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb-> fheldservice ), sb-> fheldaction ));
2294 2294
2295 d-> m_buttons-> append ( b ); 2295 d-> m_buttons-> append ( b );
2296 } 2296 }
2297 } 2297 }
2298 reloadButtonMapping ( ); 2298 reloadButtonMapping ( );
2299 2299
2300 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 2300 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
2301 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 2301 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
2302} 2302}
2303 2303
2304// SIMpad boardcontrol register CS3 2304// SIMpad boardcontrol register CS3
2305#define SIMPAD_BOARDCONTROL "/proc/cs3" 2305#define SIMPAD_BOARDCONTROL "/proc/cs3"
2306#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA 2306#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA
2307#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA 2307#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA
2308#define SIMPAD_EN1 0x0004 // This is only for EPROM's 2308#define SIMPAD_EN1 0x0004 // This is only for EPROM's
2309#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V 2309#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V
2310#define SIMPAD_DISPLAY_ON 0x0010 2310#define SIMPAD_DISPLAY_ON 0x0010
2311#define SIMPAD_PCMCIA_BUFF_DIS 0x0020 2311#define SIMPAD_PCMCIA_BUFF_DIS 0x0020
2312#define SIMPAD_MQ_RESET 0x0040 2312#define SIMPAD_MQ_RESET 0x0040
2313#define SIMPAD_PCMCIA_RESET 0x0080 2313#define SIMPAD_PCMCIA_RESET 0x0080
2314#define SIMPAD_DECT_POWER_ON 0x0100 2314#define SIMPAD_DECT_POWER_ON 0x0100
2315#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave 2315#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave
2316#define SIMPAD_RS232_ON 0x0400 2316#define SIMPAD_RS232_ON 0x0400
2317#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave 2317#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave
2318#define SIMPAD_LED2_ON 0x1000 2318#define SIMPAD_LED2_ON 0x1000
2319#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode 2319#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode
2320#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit 2320#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit
2321#define SIMPAD_RESET_SIMCARD 0x8000 2321#define SIMPAD_RESET_SIMCARD 0x8000
2322 2322
2323//SIMpad touchscreen backlight strength control 2323//SIMpad touchscreen backlight strength control
2324#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL" 2324#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL"
2325#define SIMPAD_BACKLIGHT_MASK 0x00a10044 2325#define SIMPAD_BACKLIGHT_MASK 0x00a10044
2326 2326
2327QValueList <OLed> SIMpad::ledList ( ) const 2327QValueList <OLed> SIMpad::ledList ( ) const
2328{ 2328{
2329 QValueList <OLed> vl; 2329 QValueList <OLed> vl;
2330 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one? 2330 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one?
2331 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway 2331 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway
2332 return vl; 2332 return vl;
2333} 2333}
2334 2334
2335QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const 2335QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const
2336{ 2336{
2337 QValueList <OLedState> vl; 2337 QValueList <OLedState> vl;
2338 2338
2339 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one? 2339 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one?
2340 vl << Led_Off << Led_On; 2340 vl << Led_Off << Led_On;
2341 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway 2341 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway
2342 //vl << Led_Off; 2342 //vl << Led_Off;
2343 return vl; 2343 return vl;
2344} 2344}
2345 2345
2346OLedState SIMpad::ledState ( OLed l ) const 2346OLedState SIMpad::ledState ( OLed l ) const
2347{ 2347{
2348 switch ( l ) { 2348 switch ( l ) {
2349 case Led_Power: 2349 case Led_Power:
2350 return m_leds [0]; 2350 return m_leds [0];
2351 //case Led_Mail: 2351 //case Led_Mail:
2352 //return m_leds [1]; 2352 //return m_leds [1];
2353 default: 2353 default:
2354 return Led_Off; 2354 return Led_Off;
2355 } 2355 }
2356} 2356}
2357 2357
2358bool SIMpad::setLedState ( OLed l, OLedState st ) 2358bool SIMpad::setLedState ( OLed l, OLedState st )
2359{ 2359{
2360 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK ); 2360 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK );
2361 2361
2362 if ( l == Led_Power ) { 2362 if ( l == Led_Power ) {
2363 if ( fd >= 0 ) { 2363 if ( fd >= 0 ) {
2364 LED_IN leds; 2364 LED_IN leds;
2365 ::memset ( &leds, 0, sizeof( leds )); 2365 ::memset ( &leds, 0, sizeof( leds ));
2366 leds. TotalTime = 0; 2366 leds. TotalTime = 0;
2367 leds. OnTime = 0; 2367 leds. OnTime = 0;
2368 leds. OffTime = 1; 2368 leds. OffTime = 1;
2369 leds. OffOnBlink = 2; 2369 leds. OffOnBlink = 2;
2370 2370
2371 switch ( st ) { 2371 switch ( st ) {
2372 case Led_Off : leds. OffOnBlink = 0; break; 2372 case Led_Off : leds. OffOnBlink = 0; break;
2373 case Led_On : leds. OffOnBlink = 1; break; 2373 case Led_On : leds. OffOnBlink = 1; break;
2374 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 2374 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
2375 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 2375 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
2376 } 2376 }
2377 2377
2378 { 2378 {
2379 /*TODO Implement this like that: 2379 /*TODO Implement this like that:
2380 read from cs3 2380 read from cs3
2381 && with SIMPAD_LED2_ON 2381 && with SIMPAD_LED2_ON
2382 write to cs3 */ 2382 write to cs3 */
2383 m_leds [0] = st; 2383 m_leds [0] = st;
2384 return true; 2384 return true;
2385 } 2385 }
2386 } 2386 }
2387 } 2387 }
2388 return false; 2388 return false;
2389} 2389}
2390 2390
2391 2391
2392bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 2392bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
2393{ 2393{
2394 //TODO 2394 //TODO
2395 return false; 2395 return false;
2396} 2396}
2397 2397
2398void SIMpad::timerEvent ( QTimerEvent * ) 2398void SIMpad::timerEvent ( QTimerEvent * )
2399{ 2399{
2400 killTimer ( m_power_timer ); 2400 killTimer ( m_power_timer );
2401 m_power_timer = 0; 2401 m_power_timer = 0;
2402 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 2402 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
2403 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 2403 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
2404} 2404}
2405 2405
2406 2406
2407void SIMpad::alarmSound ( ) 2407void SIMpad::alarmSound ( )
2408{ 2408{
2409#ifndef QT_NO_SOUND 2409#ifndef QT_NO_SOUND
2410 static Sound snd ( "alarm" ); 2410 static Sound snd ( "alarm" );
2411 int fd; 2411 int fd;
2412 int vol; 2412 int vol;
2413 bool vol_reset = false; 2413 bool vol_reset = false;
2414 2414
2415 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 2415 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
2416 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 2416 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
2417 Config cfg ( "qpe" ); 2417 Config cfg ( "qpe" );
2418 cfg. setGroup ( "Volume" ); 2418 cfg. setGroup ( "Volume" );
2419 2419
2420 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 2420 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
2421 if ( volalarm < 0 ) 2421 if ( volalarm < 0 )
2422 volalarm = 0; 2422 volalarm = 0;
2423 else if ( volalarm > 100 ) 2423 else if ( volalarm > 100 )
2424 volalarm = 100; 2424 volalarm = 100;
2425 volalarm |= ( volalarm << 8 ); 2425 volalarm |= ( volalarm << 8 );
2426 2426
2427 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 2427 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
2428 vol_reset = true; 2428 vol_reset = true;
2429 } 2429 }
2430 } 2430 }
2431 2431
2432 snd. play ( ); 2432 snd. play ( );
2433 while ( !snd. isFinished ( )) 2433 while ( !snd. isFinished ( ))
2434 qApp-> processEvents ( ); 2434 qApp-> processEvents ( );
2435 2435
2436 if ( fd >= 0 ) { 2436 if ( fd >= 0 ) {
2437 if ( vol_reset ) 2437 if ( vol_reset )
2438 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 2438 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
2439 ::close ( fd ); 2439 ::close ( fd );
2440 } 2440 }
2441#endif 2441#endif
2442} 2442}
2443 2443
2444 2444
2445bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm 2445bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm
2446{ 2446{
2447 qDebug( "ODevice for SIMpad: suspend()" ); 2447 qDebug( "ODevice for SIMpad: suspend()" );
2448 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 2448 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
2449 return false; 2449 return false;
2450 2450
2451 bool res = false; 2451 bool res = false;
2452 2452
2453 struct timeval tvs, tvn; 2453 struct timeval tvs, tvn;
2454 ::gettimeofday ( &tvs, 0 ); 2454 ::gettimeofday ( &tvs, 0 );
2455 2455
2456 ::sync ( ); // flush fs caches 2456 ::sync ( ); // flush fs caches
2457 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :) 2457 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :)
2458 2458
2459 return res; 2459 return res;
2460} 2460}
2461 2461
2462 2462
2463bool SIMpad::setSoftSuspend ( bool soft ) 2463bool SIMpad::setSoftSuspend ( bool soft )
2464{ 2464{
2465 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" ); 2465 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" );
2466 return false; 2466 return false;
2467} 2467}
2468 2468
2469 2469
2470bool SIMpad::setDisplayStatus ( bool on ) 2470bool SIMpad::setDisplayStatus ( bool on )
2471{ 2471{
2472 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" ); 2472 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" );
2473 2473
2474 bool res = false; 2474 bool res = false;
2475 int fd; 2475 int fd;
2476 2476
2477 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :) 2477 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :)
2478 2478
2479 res = ( ::system( (const char*) cmdline ) == 0 ); 2479 res = ( ::system( (const char*) cmdline ) == 0 );
2480 2480
2481 return res; 2481 return res;
2482} 2482}
2483 2483
2484 2484
2485bool SIMpad::setDisplayBrightness ( int bright ) 2485bool SIMpad::setDisplayBrightness ( int bright )
2486{ 2486{
2487 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright ); 2487 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright );
2488 bool res = false; 2488 bool res = false;
2489 int fd; 2489 int fd;
2490 2490
2491 if ( bright > 255 ) 2491 if ( bright > 255 )
2492 bright = 255; 2492 bright = 255;
2493 if ( bright < 1 ) 2493 if ( bright < 1 )
2494 bright = 0; 2494 bright = 0;
2495 2495
2496 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { 2496 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) {
2497 int value = 255 - bright; 2497 int value = 255 - bright;
2498 const int mask = SIMPAD_BACKLIGHT_MASK; 2498 const int mask = SIMPAD_BACKLIGHT_MASK;
2499 value = value << 8; 2499 value = value << 8;
2500 value += mask; 2500 value += mask;
2501 char writeCommand[100]; 2501 char writeCommand[100];
2502 const int count = sprintf( writeCommand, "0x%x\n", value ); 2502 const int count = sprintf( writeCommand, "0x%x\n", value );
2503 res = ( ::write ( fd, writeCommand, count ) != -1 ); 2503 res = ( ::write ( fd, writeCommand, count ) != -1 );
2504 ::close ( fd ); 2504 ::close ( fd );
2505 } 2505 }
2506 return res; 2506 return res;
2507} 2507}
2508 2508
2509 2509
2510int SIMpad::displayBrightnessResolution ( ) const 2510int SIMpad::displayBrightnessResolution ( ) const
2511{ 2511{
2512 return 255; // All SIMpad models share the same display 2512 return 255; // All SIMpad models share the same display
2513} 2513}
2514 2514
2515/************************************************** 2515/**************************************************
2516 * 2516 *
2517 * Ramses 2517 * Ramses
2518 * 2518 *
2519 **************************************************/ 2519 **************************************************/
2520 2520
2521void Ramses::init() 2521void Ramses::init()
2522{ 2522{
2523 d->m_vendorstr = "M und N"; 2523 d->m_vendorstr = "M und N";
2524 d->m_vendor = Vendor_MundN; 2524 d->m_vendor = Vendor_MundN;
2525 2525
2526 QFile f("/proc/sys/board/ramses"); 2526 QFile f("/proc/sys/board/ramses");
2527 2527
2528 d->m_modelstr = "Ramses"; 2528 d->m_modelstr = "Ramses";
2529 d->m_model = Model_Ramses_MNCI; 2529 d->m_model = Model_Ramses_MNCI;
2530 2530
2531 d->m_rotation = Rot0; 2531 d->m_rotation = Rot0;
2532 d->m_holdtime = 1000; 2532 d->m_holdtime = 1000;
2533 2533
2534 f.setName("/etc/oz_version"); 2534 f.setName("/etc/oz_version");
2535 2535
2536 if (f.open(IO_ReadOnly)) { 2536 if (f.open(IO_ReadOnly)) {
2537 d->m_systemstr = "OpenEmbedded/Ramses"; 2537 d->m_systemstr = "OpenEmbedded/Ramses";
2538 d->m_system = System_OpenZaurus; 2538 d->m_system = System_OpenZaurus;
2539 2539
2540 QTextStream ts(&f); 2540 QTextStream ts(&f);
2541 ts.setDevice(&f); 2541 ts.setDevice(&f);
2542 d->m_sysverstr = ts.readLine(); 2542 d->m_sysverstr = ts.readLine();
2543 f.close(); 2543 f.close();
2544 } 2544 }
2545 2545
2546 m_power_timer = 0; 2546 m_power_timer = 0;
2547 2547
2548#ifdef QT_QWS_ALLOW_OVERCLOCK 2548#ifdef QT_QWS_ALLOW_OVERCLOCK
2549#warning *** Overclocking enabled - this may fry your hardware - you have been warned *** 2549#warning *** Overclocking enabled - this may fry your hardware - you have been warned ***
2550#define OC(x...) x 2550#define OC(x...) x
2551#else 2551#else
2552#define OC(x...) 2552#define OC(x...)
2553#endif 2553#endif
2554 2554
2555 2555
2556 // This table is true for a Intel XScale PXA 255 2556 // This table is true for a Intel XScale PXA 255
2557 2557
2558 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50 2558 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50
2559 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem 2559 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem
2560 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99 2560 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99
2561 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem 2561 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem
2562 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99 2562 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99
2563 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem 2563 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem
2564 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99 2564 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99
2565 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196 2565 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196
2566 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus 2566 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus
2567 2567
2568} 2568}
2569 2569
2570bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat) 2570bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat)
2571{ 2571{
2572 Q_UNUSED( keycode ); 2572 Q_UNUSED( keycode );
2573 Q_UNUSED( modifiers ); 2573 Q_UNUSED( modifiers );
2574 Q_UNUSED( isPress ); 2574 Q_UNUSED( isPress );
2575 Q_UNUSED( autoRepeat ); 2575 Q_UNUSED( autoRepeat );
2576 return false; 2576 return false;
2577} 2577}
2578 2578
2579void Ramses::timerEvent(QTimerEvent *) 2579void Ramses::timerEvent(QTimerEvent *)
2580{ 2580{
2581 killTimer(m_power_timer); 2581 killTimer(m_power_timer);
2582 m_power_timer = 0; 2582 m_power_timer = 0;
2583 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false); 2583 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false);
2584 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false); 2584 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false);
2585} 2585}
2586 2586
2587 2587
2588bool Ramses::setSoftSuspend(bool soft) 2588bool Ramses::setSoftSuspend(bool soft)
2589{ 2589{
2590 qDebug("Ramses::setSoftSuspend(%d)", soft); 2590 qDebug("Ramses::setSoftSuspend(%d)", soft);
2591#if 0 2591#if 0
2592 bool res = false; 2592 bool res = false;
2593 int fd; 2593 int fd;
2594 2594
2595 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) || 2595 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) ||
2596 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) { 2596 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) {
2597 2597
2598 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources 2598 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources
2599 2599
2600 if (sources >= 0) { 2600 if (sources >= 0) {
2601 if (soft) 2601 if (soft)
2602 sources &= ~APM_EVT_POWER_BUTTON; 2602 sources &= ~APM_EVT_POWER_BUTTON;
2603 else 2603 else
2604 sources |= APM_EVT_POWER_BUTTON; 2604 sources |= APM_EVT_POWER_BUTTON;
2605 2605
2606 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources 2606 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources
2607 res = true; 2607 res = true;
2608 else 2608 else
2609 perror("APM_IOCGEVTSRC"); 2609 perror("APM_IOCGEVTSRC");
2610 } 2610 }
2611 else 2611 else
2612 perror("APM_IOCGEVTSRC"); 2612 perror("APM_IOCGEVTSRC");
2613 2613
2614 ::close(fd); 2614 ::close(fd);
2615 } 2615 }
2616 else 2616 else
2617 perror("/dev/apm_bios or /dev/misc/apm_bios"); 2617 perror("/dev/apm_bios or /dev/misc/apm_bios");
2618 2618
2619 return res; 2619 return res;
2620#else 2620#else
2621 return true; 2621 return true;
2622#endif 2622#endif
2623} 2623}
2624 2624
2625bool Ramses::suspend ( ) 2625bool Ramses::suspend ( )
2626{ 2626{
2627 qDebug("Ramses::suspend"); 2627 qDebug("Ramses::suspend");
2628 return false; 2628 return false;
2629} 2629}
2630 2630
2631/** 2631/**
2632 * This sets the display on or off 2632 * This sets the display on or off
2633 */ 2633 */
2634bool Ramses::setDisplayStatus(bool on) 2634bool Ramses::setDisplayStatus(bool on)
2635{ 2635{
2636 qDebug("Ramses::setDisplayStatus(%d)", on); 2636 qDebug("Ramses::setDisplayStatus(%d)", on);
2637#if 0 2637#if 0
2638 bool res = false; 2638 bool res = false;
2639 int fd; 2639 int fd;
2640 2640
2641 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) { 2641 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) {
2642 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0); 2642 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0);
2643 ::close(fd); 2643 ::close(fd);
2644 } 2644 }
2645 return res; 2645 return res;
2646#else 2646#else
2647 return true; 2647 return true;
2648#endif 2648#endif
2649} 2649}
2650 2650
2651 2651
2652/* 2652/*
2653 * We get something between 0..255 into us 2653 * We get something between 0..255 into us
2654*/ 2654*/
2655bool Ramses::setDisplayBrightness(int bright) 2655bool Ramses::setDisplayBrightness(int bright)
2656{ 2656{
2657 qDebug("Ramses::setDisplayBrightness(%d)", bright); 2657 qDebug("Ramses::setDisplayBrightness(%d)", bright);
2658 bool res = false; 2658 bool res = false;
2659 int fd; 2659 int fd;
2660 2660
2661 // pwm1 brighness: 20 steps 500..0 (dunkel->hell) 2661 // pwm1 brighness: 20 steps 500..0 (dunkel->hell)
2662 2662
2663 if (bright > 255 ) 2663 if (bright > 255 )
2664 bright = 255; 2664 bright = 255;
2665 if (bright < 0) 2665 if (bright < 0)
2666 bright = 0; 2666 bright = 0;
2667 2667
2668 // Turn backlight completely off 2668 // Turn backlight completely off
2669 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) { 2669 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) {
2670 char writeCommand[10]; 2670 char writeCommand[10];
2671 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0); 2671 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0);
2672 res = (::write(fd, writeCommand, count) != -1); 2672 res = (::write(fd, writeCommand, count) != -1);
2673 ::close(fd); 2673 ::close(fd);
2674 } 2674 }
2675 2675
2676 // scale backlight brightness to hardware 2676 // scale backlight brightness to hardware
2677 bright = 500-(bright * 500 / 255); 2677 bright = 500-(bright * 500 / 255);
2678 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) { 2678 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) {
2679 qDebug(" %d -> pwm1", bright); 2679 qDebug(" %d -> pwm1", bright);
2680 char writeCommand[100]; 2680 char writeCommand[100];
2681 const int count = sprintf(writeCommand, "%d\n", bright); 2681 const int count = sprintf(writeCommand, "%d\n", bright);
2682 res = (::write(fd, writeCommand, count) != -1); 2682 res = (::write(fd, writeCommand, count) != -1);
2683 ::close(fd); 2683 ::close(fd);
2684 } 2684 }
2685 return res; 2685 return res;
2686} 2686}
2687 2687
2688 2688
2689int Ramses::displayBrightnessResolution() const 2689int Ramses::displayBrightnessResolution() const
2690{ 2690{
2691 return 32; 2691 return 32;
2692} 2692}
2693 2693
2694bool Ramses::setDisplayContrast(int contr) 2694bool Ramses::setDisplayContrast(int contr)
2695{ 2695{
2696 qDebug("Ramses::setDisplayContrast(%d)", contr); 2696 qDebug("Ramses::setDisplayContrast(%d)", contr);
2697 bool res = false; 2697 bool res = false;
2698 int fd; 2698 int fd;
2699 2699
2700 // pwm0 contrast: 20 steps 79..90 (dunkel->hell) 2700 // pwm0 contrast: 20 steps 79..90 (dunkel->hell)
2701 2701
2702 if (contr > 255 ) 2702 if (contr > 255 )
2703 contr = 255; 2703 contr = 255;
2704 if (contr < 0) 2704 if (contr < 0)
2705 contr = 0; 2705 contr = 0;
2706 contr = 90 - (contr * 20 / 255); 2706 contr = 90 - (contr * 20 / 255);
2707 2707
2708 if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) { 2708 if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) {
2709 qDebug(" %d -> pwm0", contr); 2709 qDebug(" %d -> pwm0", contr);
2710 char writeCommand[100]; 2710 char writeCommand[100];
2711 const int count = sprintf(writeCommand, "%d\n", contr); 2711 const int count = sprintf(writeCommand, "%d\n", contr);
2712 res = (::write(fd, writeCommand, count) != -1); 2712 res = (::write(fd, writeCommand, count) != -1);
2713 res = true; 2713 res = true;
2714 ::close(fd); 2714 ::close(fd);
2715 } 2715 }
2716 return res; 2716 return res;
2717} 2717}
2718 2718
2719 2719
2720int Ramses::displayContrastResolution() const 2720int Ramses::displayContrastResolution() const
2721{ 2721{
2722 return 20; 2722 return 20;
2723} 2723}
2724 2724
2725 2725
2726/************************************************** 2726/**************************************************
2727 * * 2727 * *
2728 * Jornada * 2728 * Jornada *
2729 * * 2729 * *
2730 **************************************************/ 2730 **************************************************/
2731 2731
2732 2732
2733bool Jornada::isJornada ( ) 2733bool Jornada::isJornada ( )
2734{ 2734{
2735 QFile f( "/proc/cpuinfo" ); 2735 QFile f( "/proc/cpuinfo" );
2736 if ( f. open ( IO_ReadOnly ) ) { 2736 if ( f. open ( IO_ReadOnly ) ) {
2737 QTextStream ts ( &f ); 2737 QTextStream ts ( &f );
2738 QString line; 2738 QString line;
2739 while( line = ts. readLine ( ) ) { 2739 while( line = ts. readLine ( ) ) {
2740 if ( line. left ( 8 ) == "Hardware" ) { 2740 if ( line. left ( 8 ) == "Hardware" ) {
2741 int loc = line. find ( ":" ); 2741 int loc = line. find ( ":" );
2742 if ( loc != -1 ) { 2742 if ( loc != -1 ) {
2743 QString model = 2743 QString model =
2744 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 2744 line. mid ( loc + 2 ). simplifyWhiteSpace( );
2745 return ( model == "HP Jornada 56x" ); 2745 return ( model == "HP Jornada 56x" );
2746 } 2746 }
2747 } 2747 }
2748 } 2748 }
2749 } 2749 }
2750 return false; 2750 return false;
2751} 2751}
2752 2752
2753void Jornada::init ( ) 2753void Jornada::init ( )
2754{ 2754{
2755 d-> m_vendorstr = "HP"; 2755 d-> m_vendorstr = "HP";
2756 d-> m_vendor = Vendor_HP; 2756 d-> m_vendor = Vendor_HP;
2757 d-> m_modelstr = "Jornada 56x"; 2757 d-> m_modelstr = "Jornada 56x";
2758 d-> m_model = Model_Jornada_56x; 2758 d-> m_model = Model_Jornada_56x;
2759 d-> m_systemstr = "Familiar"; 2759 d-> m_systemstr = "Familiar";
2760 d-> m_system = System_Familiar; 2760 d-> m_system = System_Familiar;
2761 d-> m_rotation = Rot0; 2761 d-> m_rotation = Rot0;
2762 2762
2763 QFile f ( "/etc/familiar-version" ); 2763 QFile f ( "/etc/familiar-version" );
2764 f. setName ( "/etc/familiar-version" ); 2764 f. setName ( "/etc/familiar-version" );
2765 if ( f. open ( IO_ReadOnly )) { 2765 if ( f. open ( IO_ReadOnly )) {
2766 2766
2767 QTextStream ts ( &f ); 2767 QTextStream ts ( &f );
2768 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 2768 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
2769 2769
2770 f. close ( ); 2770 f. close ( );
2771 } 2771 }
2772} 2772}
2773 2773
2774#if 0 2774#if 0
2775void Jornada::initButtons ( ) 2775void Jornada::initButtons ( )
2776{ 2776{
2777 if ( d-> m_buttons ) 2777 if ( d-> m_buttons )
2778 return; 2778 return;
2779 2779
2780 // Simulation uses iPAQ 3660 device buttons 2780 // Simulation uses iPAQ 3660 device buttons
2781 2781
2782 qDebug ( "init Buttons" ); 2782 qDebug ( "init Buttons" );
2783 d-> m_buttons = new QValueList <ODeviceButton>; 2783 d-> m_buttons = new QValueList <ODeviceButton>;
2784 2784
2785 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 2785 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
2786 i_button *ib = ipaq_buttons + i; 2786 i_button *ib = ipaq_buttons + i;
2787 ODeviceButton b; 2787 ODeviceButton b;
2788 2788
2789 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 2789 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
2790 b. setKeycode ( ib-> code ); 2790 b. setKeycode ( ib-> code );
2791 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 2791 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
2792 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 2792 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
2793 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 2793 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
2794 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 2794 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
2795 d-> m_buttons-> append ( b ); 2795 d-> m_buttons-> append ( b );
2796 } 2796 }
2797 } 2797 }
2798 reloadButtonMapping ( ); 2798 reloadButtonMapping ( );
2799 2799
2800 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 2800 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
2801 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 2801 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
2802} 2802}
2803#endif 2803#endif
2804int Jornada::displayBrightnessResolution ( ) const 2804int Jornada::displayBrightnessResolution ( ) const
2805{ 2805{
2806} 2806}
2807 2807
2808bool Jornada::setDisplayBrightness ( int bright ) 2808bool Jornada::setDisplayBrightness ( int bright )
2809{ 2809{
2810 bool res = false; 2810 bool res = false;
2811 int fd; 2811 int fd;
2812 2812
2813 if ( bright > 255 ) 2813 if ( bright > 255 )
2814 bright = 255; 2814 bright = 255;
2815 if ( bright < 0 ) 2815 if ( bright < 0 )
2816 bright = 0; 2816 bright = 0;
2817 2817
2818 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 2818 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
2819 FLITE_IN bl; 2819 FLITE_IN bl;
2820 bl. mode = 1; 2820 bl. mode = 1;
2821 bl. pwr = bright ? 1 : 0; 2821 bl. pwr = bright ? 1 : 0;
2822 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 2822 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
2823 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 2823 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
2824 ::close ( fd ); 2824 ::close ( fd );
2825 } 2825 }
2826 return res; 2826 return res;
2827} 2827}
2828 2828
2829bool Jornada::setSoftSuspend ( bool soft ) 2829bool Jornada::setSoftSuspend ( bool soft )
2830{ 2830{
2831 bool res = false; 2831 bool res = false;
2832 int fd; 2832 int fd;
2833 2833
2834 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 2834 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
2835 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 2835 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
2836 res = true; 2836 res = true;
2837 else 2837 else
2838 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 2838 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
2839 2839
2840 ::close ( fd ); 2840 ::close ( fd );
2841 } 2841 }
2842 else 2842 else
2843 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 2843 ::perror ( "/proc/sys/ts/suspend_button_mode" );
2844 2844
2845 return res; 2845 return res;
2846} 2846}