summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authorchicken <chicken>2004-03-01 15:44:36 (UTC)
committer chicken <chicken>2004-03-01 15:44:36 (UTC)
commitc50e4c32d34a0550f167480b6306aac632fb201c (patch) (unidiff)
treea0795fa171d7410624717f120d1bd17f6c8f3224 /libopie/odevice.cpp
parent01abceaeb00bc35fa9bf5792eb51aa70b68f110d (diff)
downloadopie-c50e4c32d34a0550f167480b6306aac632fb201c.zip
opie-c50e4c32d34a0550f167480b6306aac632fb201c.tar.gz
opie-c50e4c32d34a0550f167480b6306aac632fb201c.tar.bz2
fix includes
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp1
1 files changed, 0 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index c5342e1..c0b6efa 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1,1567 +1,1566 @@
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#include <qapplication.h>
32 31
33#include <qfile.h> 32#include <qfile.h>
34#include <qtextstream.h> 33#include <qtextstream.h>
35#include <qpe/sound.h> 34#include <qpe/sound.h>
36#include <qpe/resource.h> 35#include <qpe/resource.h>
37#include <qpe/config.h> 36#include <qpe/config.h>
38#include <qpe/qcopenvelope_qws.h> 37#include <qpe/qcopenvelope_qws.h>
39 38
40#include "odevice.h" 39#include "odevice.h"
41 40
42#include <qwindowsystem_qws.h> 41#include <qwindowsystem_qws.h>
43 42
44#ifndef ARRAY_SIZE 43#ifndef ARRAY_SIZE
45#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 44#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
46#endif 45#endif
47 46
48// _IO and friends are only defined in kernel headers ... 47// _IO and friends are only defined in kernel headers ...
49 48
50#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 ))
51 50
52#define OD_IO(type,number) OD_IOC(0,type,number,0) 51#define OD_IO(type,number) OD_IOC(0,type,number,0)
53#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))
54#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))
55#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))
56 55
57using namespace Opie; 56using namespace Opie;
58 57
59class ODeviceData { 58class ODeviceData {
60public: 59public:
61 QString m_vendorstr; 60 QString m_vendorstr;
62 OVendor m_vendor; 61 OVendor m_vendor;
63 62
64 QString m_modelstr; 63 QString m_modelstr;
65 OModel m_model; 64 OModel m_model;
66 65
67 QString m_systemstr; 66 QString m_systemstr;
68 OSystem m_system; 67 OSystem m_system;
69 68
70 QString m_sysverstr; 69 QString m_sysverstr;
71 70
72 Transformation m_rotation; 71 Transformation m_rotation;
73 ODirection m_direction; 72 ODirection m_direction;
74 73
75 QValueList <ODeviceButton> *m_buttons; 74 QValueList <ODeviceButton> *m_buttons;
76 uint m_holdtime; 75 uint m_holdtime;
77 QStrList *m_cpu_frequencies; 76 QStrList *m_cpu_frequencies;
78 77
79}; 78};
80 79
81class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 80class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
82protected: 81protected:
83 virtual void init ( ); 82 virtual void init ( );
84 virtual void initButtons ( ); 83 virtual void initButtons ( );
85 84
86public: 85public:
87 virtual bool setSoftSuspend ( bool soft ); 86 virtual bool setSoftSuspend ( bool soft );
88 87
89 virtual bool setDisplayBrightness ( int b ); 88 virtual bool setDisplayBrightness ( int b );
90 virtual int displayBrightnessResolution ( ) const; 89 virtual int displayBrightnessResolution ( ) const;
91 90
92 virtual void alarmSound ( ); 91 virtual void alarmSound ( );
93 92
94 virtual QValueList <OLed> ledList ( ) const; 93 virtual QValueList <OLed> ledList ( ) const;
95 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 94 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
96 virtual OLedState ledState ( OLed led ) const; 95 virtual OLedState ledState ( OLed led ) const;
97 virtual bool setLedState ( OLed led, OLedState st ); 96 virtual bool setLedState ( OLed led, OLedState st );
98 97
99 virtual bool hasLightSensor ( ) const; 98 virtual bool hasLightSensor ( ) const;
100 virtual int readLightSensor ( ); 99 virtual int readLightSensor ( );
101 virtual int lightSensorResolution ( ) const; 100 virtual int lightSensorResolution ( ) const;
102 101
103protected: 102protected:
104 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 );
105 virtual void timerEvent ( QTimerEvent *te ); 104 virtual void timerEvent ( QTimerEvent *te );
106 105
107 int m_power_timer; 106 int m_power_timer;
108 107
109 OLedState m_leds [2]; 108 OLedState m_leds [2];
110}; 109};
111 110
112class Jornada : public ODevice { 111class Jornada : public ODevice {
113protected: 112protected:
114 virtual void init ( ); 113 virtual void init ( );
115 //virtual void initButtons ( ); 114 //virtual void initButtons ( );
116public: 115public:
117 virtual bool setSoftSuspend ( bool soft ); 116 virtual bool setSoftSuspend ( bool soft );
118 virtual bool setDisplayBrightness ( int b ); 117 virtual bool setDisplayBrightness ( int b );
119 virtual int displayBrightnessResolution ( ) const; 118 virtual int displayBrightnessResolution ( ) const;
120 static bool isJornada(); 119 static bool isJornada();
121 120
122}; 121};
123 122
124class Zaurus : public ODevice { 123class Zaurus : public ODevice {
125protected: 124protected:
126 virtual void init ( ); 125 virtual void init ( );
127 virtual void initButtons ( ); 126 virtual void initButtons ( );
128 127
129public: 128public:
130 virtual bool setSoftSuspend ( bool soft ); 129 virtual bool setSoftSuspend ( bool soft );
131 130
132 virtual bool setDisplayBrightness ( int b ); 131 virtual bool setDisplayBrightness ( int b );
133 virtual int displayBrightnessResolution ( ) const; 132 virtual int displayBrightnessResolution ( ) const;
134 133
135 virtual void alarmSound ( ); 134 virtual void alarmSound ( );
136 virtual void keySound ( ); 135 virtual void keySound ( );
137 virtual void touchSound ( ); 136 virtual void touchSound ( );
138 137
139 virtual QValueList <OLed> ledList ( ) const; 138 virtual QValueList <OLed> ledList ( ) const;
140 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 139 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
141 virtual OLedState ledState ( OLed led ) const; 140 virtual OLedState ledState ( OLed led ) const;
142 virtual bool setLedState ( OLed led, OLedState st ); 141 virtual bool setLedState ( OLed led, OLedState st );
143 142
144 bool hasHingeSensor() const; 143 bool hasHingeSensor() const;
145 OHingeStatus readHingeSensor(); 144 OHingeStatus readHingeSensor();
146 145
147 static bool isZaurus(); 146 static bool isZaurus();
148 147
149 // Does this break BC? 148 // Does this break BC?
150 virtual bool suspend ( ); 149 virtual bool suspend ( );
151 Transformation rotation ( ) const; 150 Transformation rotation ( ) const;
152 ODirection direction ( ) const; 151 ODirection direction ( ) const;
153 152
154protected: 153protected:
155 virtual void buzzer ( int snd ); 154 virtual void buzzer ( int snd );
156 155
157 OLedState m_leds [1]; 156 OLedState m_leds [1];
158 bool m_embedix; 157 bool m_embedix;
159 void virtual_hook( int id, void *data ); 158 void virtual_hook( int id, void *data );
160}; 159};
161 160
162class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 161class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
163protected: 162protected:
164 virtual void init ( ); 163 virtual void init ( );
165 virtual void initButtons ( ); 164 virtual void initButtons ( );
166 165
167public: 166public:
168 virtual bool setSoftSuspend ( bool soft ); 167 virtual bool setSoftSuspend ( bool soft );
169 virtual bool suspend(); 168 virtual bool suspend();
170 169
171 virtual bool setDisplayStatus( bool on ); 170 virtual bool setDisplayStatus( bool on );
172 virtual bool setDisplayBrightness ( int b ); 171 virtual bool setDisplayBrightness ( int b );
173 virtual int displayBrightnessResolution ( ) const; 172 virtual int displayBrightnessResolution ( ) const;
174 173
175 virtual void alarmSound ( ); 174 virtual void alarmSound ( );
176 175
177 virtual QValueList <OLed> ledList ( ) const; 176 virtual QValueList <OLed> ledList ( ) const;
178 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 177 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
179 virtual OLedState ledState ( OLed led ) const; 178 virtual OLedState ledState ( OLed led ) const;
180 virtual bool setLedState ( OLed led, OLedState st ); 179 virtual bool setLedState ( OLed led, OLedState st );
181 180
182protected: 181protected:
183 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 );
184 virtual void timerEvent ( QTimerEvent *te ); 183 virtual void timerEvent ( QTimerEvent *te );
185 184
186 int m_power_timer; 185 int m_power_timer;
187 186
188 OLedState m_leds [1]; //FIXME check if really only one 187 OLedState m_leds [1]; //FIXME check if really only one
189}; 188};
190 189
191class Ramses : public ODevice, public QWSServer::KeyboardFilter { 190class Ramses : public ODevice, public QWSServer::KeyboardFilter {
192protected: 191protected:
193 virtual void init ( ); 192 virtual void init ( );
194 193
195public: 194public:
196 virtual bool setSoftSuspend ( bool soft ); 195 virtual bool setSoftSuspend ( bool soft );
197 virtual bool suspend ( ); 196 virtual bool suspend ( );
198 197
199 virtual bool setDisplayStatus( bool on ); 198 virtual bool setDisplayStatus( bool on );
200 virtual bool setDisplayBrightness ( int b ); 199 virtual bool setDisplayBrightness ( int b );
201 virtual int displayBrightnessResolution ( ) const; 200 virtual int displayBrightnessResolution ( ) const;
202 virtual bool setDisplayContrast ( int b ); 201 virtual bool setDisplayContrast ( int b );
203 virtual int displayContrastResolution ( ) const; 202 virtual int displayContrastResolution ( ) const;
204 203
205protected: 204protected:
206 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 );
207 virtual void timerEvent ( QTimerEvent *te ); 206 virtual void timerEvent ( QTimerEvent *te );
208 207
209 int m_power_timer; 208 int m_power_timer;
210}; 209};
211 210
212struct i_button { 211struct i_button {
213 uint model; 212 uint model;
214 Qt::Key code; 213 Qt::Key code;
215 char *utext; 214 char *utext;
216 char *pix; 215 char *pix;
217 char *fpressedservice; 216 char *fpressedservice;
218 char *fpressedaction; 217 char *fpressedaction;
219 char *fheldservice; 218 char *fheldservice;
220 char *fheldaction; 219 char *fheldaction;
221} ipaq_buttons [] = { 220} ipaq_buttons [] = {
222 { 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,
223 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 222 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
224 "devicebuttons/ipaq_calendar", 223 "devicebuttons/ipaq_calendar",
225 "datebook", "nextView()", 224 "datebook", "nextView()",
226 "today", "raise()" }, 225 "today", "raise()" },
227 { 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,
228 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 227 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
229 "devicebuttons/ipaq_contact", 228 "devicebuttons/ipaq_contact",
230 "addressbook", "raise()", 229 "addressbook", "raise()",
231 "addressbook", "beamBusinessCard()" }, 230 "addressbook", "beamBusinessCard()" },
232 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 231 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
233 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 232 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
234 "devicebuttons/ipaq_menu", 233 "devicebuttons/ipaq_menu",
235 "QPE/TaskBar", "toggleMenu()", 234 "QPE/TaskBar", "toggleMenu()",
236 "QPE/TaskBar", "toggleStartMenu()" }, 235 "QPE/TaskBar", "toggleStartMenu()" },
237 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 236 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
238 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 237 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
239 "devicebuttons/ipaq_mail", 238 "devicebuttons/ipaq_mail",
240 "mail", "raise()", 239 "mail", "raise()",
241 "mail", "newMail()" }, 240 "mail", "newMail()" },
242 { 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,
243 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 242 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
244 "devicebuttons/ipaq_home", 243 "devicebuttons/ipaq_home",
245 "QPE/Launcher", "home()", 244 "QPE/Launcher", "home()",
246 "buttonsettings", "raise()" }, 245 "buttonsettings", "raise()" },
247 { 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,
248 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 247 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
249 "devicebuttons/ipaq_record", 248 "devicebuttons/ipaq_record",
250 "QPE/VMemo", "toggleRecord()", 249 "QPE/VMemo", "toggleRecord()",
251 "sound", "raise()" }, 250 "sound", "raise()" },
252}; 251};
253 252
254struct z_button { 253struct z_button {
255 Qt::Key code; 254 Qt::Key code;
256 char *utext; 255 char *utext;
257 char *pix; 256 char *pix;
258 char *fpressedservice; 257 char *fpressedservice;
259 char *fpressedaction; 258 char *fpressedaction;
260 char *fheldservice; 259 char *fheldservice;
261 char *fheldaction; 260 char *fheldaction;
262} z_buttons [] = { 261} z_buttons [] = {
263 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 262 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
264 "devicebuttons/z_calendar", 263 "devicebuttons/z_calendar",
265 "datebook", "nextView()", 264 "datebook", "nextView()",
266 "today", "raise()" }, 265 "today", "raise()" },
267 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 266 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
268 "devicebuttons/z_contact", 267 "devicebuttons/z_contact",
269 "addressbook", "raise()", 268 "addressbook", "raise()",
270 "addressbook", "beamBusinessCard()" }, 269 "addressbook", "beamBusinessCard()" },
271 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 270 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
272 "devicebuttons/z_home", 271 "devicebuttons/z_home",
273 "QPE/Launcher", "home()", 272 "QPE/Launcher", "home()",
274 "buttonsettings", "raise()" }, 273 "buttonsettings", "raise()" },
275 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 274 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
276 "devicebuttons/z_menu", 275 "devicebuttons/z_menu",
277 "QPE/TaskBar", "toggleMenu()", 276 "QPE/TaskBar", "toggleMenu()",
278 "QPE/TaskBar", "toggleStartMenu()" }, 277 "QPE/TaskBar", "toggleStartMenu()" },
279 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 278 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
280 "devicebuttons/z_mail", 279 "devicebuttons/z_mail",
281 "mail", "raise()", 280 "mail", "raise()",
282 "mail", "newMail()" }, 281 "mail", "newMail()" },
283}; 282};
284 283
285struct z_button z_buttons_c700 [] = { 284struct z_button z_buttons_c700 [] = {
286 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 285 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
287 "devicebuttons/z_calendar", 286 "devicebuttons/z_calendar",
288 "datebook", "nextView()", 287 "datebook", "nextView()",
289 "today", "raise()" }, 288 "today", "raise()" },
290 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 289 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
291 "devicebuttons/z_contact", 290 "devicebuttons/z_contact",
292 "addressbook", "raise()", 291 "addressbook", "raise()",
293 "addressbook", "beamBusinessCard()" }, 292 "addressbook", "beamBusinessCard()" },
294 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 293 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
295 "devicebuttons/z_home", 294 "devicebuttons/z_home",
296 "QPE/Launcher", "home()", 295 "QPE/Launcher", "home()",
297 "buttonsettings", "raise()" }, 296 "buttonsettings", "raise()" },
298 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 297 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
299 "devicebuttons/z_menu", 298 "devicebuttons/z_menu",
300 "QPE/TaskBar", "toggleMenu()", 299 "QPE/TaskBar", "toggleMenu()",
301 "QPE/TaskBar", "toggleStartMenu()" }, 300 "QPE/TaskBar", "toggleStartMenu()" },
302 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 301 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
303 "devicebuttons/z_hinge", 302 "devicebuttons/z_hinge",
304 "QPE/Rotation", "rotateDefault()", 303 "QPE/Rotation", "rotateDefault()",
305 "QPE/Dummy", "doNothing()" }, 304 "QPE/Dummy", "doNothing()" },
306}; 305};
307 306
308struct s_button { 307struct s_button {
309 uint model; 308 uint model;
310 Qt::Key code; 309 Qt::Key code;
311 char *utext; 310 char *utext;
312 char *pix; 311 char *pix;
313 char *fpressedservice; 312 char *fpressedservice;
314 char *fpressedaction; 313 char *fpressedaction;
315 char *fheldservice; 314 char *fheldservice;
316 char *fheldaction; 315 char *fheldaction;
317} simpad_buttons [] = { 316} simpad_buttons [] = {
318 { 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,
319 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"), 318 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"),
320 "devicebuttons/simpad_lower_up", 319 "devicebuttons/simpad_lower_up",
321 "datebook", "nextView()", 320 "datebook", "nextView()",
322 "today", "raise()" }, 321 "today", "raise()" },
323 { 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,
324 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"), 323 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"),
325 "devicebuttons/simpad_lower_down", 324 "devicebuttons/simpad_lower_down",
326 "addressbook", "raise()", 325 "addressbook", "raise()",
327 "addressbook", "beamBusinessCard()" }, 326 "addressbook", "beamBusinessCard()" },
328 { 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,
329 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"), 328 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"),
330 "devicebuttons/simpad_lower_right", 329 "devicebuttons/simpad_lower_right",
331 "QPE/TaskBar", "toggleMenu()", 330 "QPE/TaskBar", "toggleMenu()",
332 "QPE/TaskBar", "toggleStartMenu()" }, 331 "QPE/TaskBar", "toggleStartMenu()" },
333 { 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,
334 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 333 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
335 "devicebuttons/simpad_lower_left", 334 "devicebuttons/simpad_lower_left",
336 "mail", "raise()", 335 "mail", "raise()",
337 "mail", "newMail()" }, 336 "mail", "newMail()" },
338 337
339 { 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,
340 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 339 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
341 "devicebuttons/simpad_upper_up", 340 "devicebuttons/simpad_upper_up",
342 "QPE/Launcher", "home()", 341 "QPE/Launcher", "home()",
343 "buttonsettings", "raise()" }, 342 "buttonsettings", "raise()" },
344 { 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,
345 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 344 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
346 "devicebuttons/simpad_upper_down", 345 "devicebuttons/simpad_upper_down",
347 "addressbook", "raise()", 346 "addressbook", "raise()",
348 "addressbook", "beamBusinessCard()" }, 347 "addressbook", "beamBusinessCard()" },
349 { 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,
350 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 349 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
351 "devicebuttons/simpad_upper_right", 350 "devicebuttons/simpad_upper_right",
352 "QPE/TaskBar", "toggleMenu()", 351 "QPE/TaskBar", "toggleMenu()",
353 "QPE/TaskBar", "toggleStartMenu()" }, 352 "QPE/TaskBar", "toggleStartMenu()" },
354 { 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,
355 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 354 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
356 "devicebuttons/simpad_upper_left", 355 "devicebuttons/simpad_upper_left",
357 "QPE/Rotation", "flip()", 356 "QPE/Rotation", "flip()",
358 "QPE/Rotation", "flip()" }, 357 "QPE/Rotation", "flip()" },
359 /* 358 /*
360 { 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,
361 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 360 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
362 "devicebuttons/simpad_lower_upper", 361 "devicebuttons/simpad_lower_upper",
363 "QPE/Launcher", "home()", 362 "QPE/Launcher", "home()",
364 "buttonsettings", "raise()" }, 363 "buttonsettings", "raise()" },
365 { 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,
366 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 365 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
367 "devicebuttons/simpad_upper_lower", 366 "devicebuttons/simpad_upper_lower",
368 "QPE/Launcher", "home()", 367 "QPE/Launcher", "home()",
369 "buttonsettings", "raise()" }, 368 "buttonsettings", "raise()" },
370 */ 369 */
371}; 370};
372 371
373struct r_button { 372struct r_button {
374 uint model; 373 uint model;
375 Qt::Key code; 374 Qt::Key code;
376 char *utext; 375 char *utext;
377 char *pix; 376 char *pix;
378 char *fpressedservice; 377 char *fpressedservice;
379 char *fpressedaction; 378 char *fpressedaction;
380 char *fheldservice; 379 char *fheldservice;
381 char *fheldaction; 380 char *fheldaction;
382} ramses_buttons [] = { 381} ramses_buttons [] = {
383 { Model_Ramses_MNCI, 382 { Model_Ramses_MNCI,
384 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 383 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
385 "devicebuttons/z_menu", 384 "devicebuttons/z_menu",
386 "QPE/TaskBar", "toggleMenu()", 385 "QPE/TaskBar", "toggleMenu()",
387 "QPE/TaskBar", "toggleStartMenu()" }, 386 "QPE/TaskBar", "toggleStartMenu()" },
388 { Model_Ramses_MNCI, 387 { Model_Ramses_MNCI,
389 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 388 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
390 "devicebuttons/ipaq_home", 389 "devicebuttons/ipaq_home",
391 "QPE/Launcher", "home()", 390 "QPE/Launcher", "home()",
392 "buttonsettings", "raise()" }, 391 "buttonsettings", "raise()" },
393}; 392};
394 393
395class Yopy : public ODevice { 394class Yopy : public ODevice {
396protected: 395protected:
397 virtual void init ( ); 396 virtual void init ( );
398 virtual void initButtons ( ); 397 virtual void initButtons ( );
399 398
400public: 399public:
401 virtual bool suspend ( ); 400 virtual bool suspend ( );
402 401
403 virtual bool setDisplayBrightness ( int b ); 402 virtual bool setDisplayBrightness ( int b );
404 virtual int displayBrightnessResolution ( ) const; 403 virtual int displayBrightnessResolution ( ) const;
405 404
406 static bool isYopy ( ); 405 static bool isYopy ( );
407}; 406};
408 407
409struct yopy_button { 408struct yopy_button {
410 Qt::Key code; 409 Qt::Key code;
411 char *utext; 410 char *utext;
412 char *pix; 411 char *pix;
413 char *fpressedservice; 412 char *fpressedservice;
414 char *fpressedaction; 413 char *fpressedaction;
415 char *fheldservice; 414 char *fheldservice;
416 char *fheldaction; 415 char *fheldaction;
417} yopy_buttons [] = { 416} yopy_buttons [] = {
418 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"), 417 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
419 "devicebuttons/yopy_action", 418 "devicebuttons/yopy_action",
420 "datebook", "nextView()", 419 "datebook", "nextView()",
421 "today", "raise()" }, 420 "today", "raise()" },
422 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"), 421 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
423 "devicebuttons/yopy_ok", 422 "devicebuttons/yopy_ok",
424 "addressbook", "raise()", 423 "addressbook", "raise()",
425 "addressbook", "beamBusinessCard()" }, 424 "addressbook", "beamBusinessCard()" },
426 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"), 425 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
427 "devicebuttons/yopy_end", 426 "devicebuttons/yopy_end",
428 "QPE/Launcher", "home()", 427 "QPE/Launcher", "home()",
429 "buttonsettings", "raise()" }, 428 "buttonsettings", "raise()" },
430}; 429};
431 430
432static QCString makeChannel ( const char *str ) 431static QCString makeChannel ( const char *str )
433{ 432{
434 if ( str && !::strchr ( str, '/' )) 433 if ( str && !::strchr ( str, '/' ))
435 return QCString ( "QPE/Application/" ) + str; 434 return QCString ( "QPE/Application/" ) + str;
436 else 435 else
437 return str; 436 return str;
438} 437}
439 438
440static inline bool isQWS() 439static inline bool isQWS()
441{ 440{
442 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 441 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
443} 442}
444 443
445ODevice *ODevice::inst ( ) 444ODevice *ODevice::inst ( )
446{ 445{
447 static ODevice *dev = 0; 446 static ODevice *dev = 0;
448 447
449 if ( !dev ) { 448 if ( !dev ) {
450 if ( QFile::exists ( "/proc/hal/model" )) 449 if ( QFile::exists ( "/proc/hal/model" ))
451 dev = new iPAQ ( ); 450 dev = new iPAQ ( );
452 else if ( Zaurus::isZaurus() ) 451 else if ( Zaurus::isZaurus() )
453 dev = new Zaurus ( ); 452 dev = new Zaurus ( );
454 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) 453 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" ))
455 dev = new SIMpad ( ); 454 dev = new SIMpad ( );
456 else if ( QFile::exists ( "/proc/sys/board/name" )) 455 else if ( QFile::exists ( "/proc/sys/board/name" ))
457 dev = new Ramses ( ); 456 dev = new Ramses ( );
458 else if ( Yopy::isYopy() ) 457 else if ( Yopy::isYopy() )
459 dev = new Yopy ( ); 458 dev = new Yopy ( );
460 else if ( Jornada::isJornada() ) 459 else if ( Jornada::isJornada() )
461 dev = new Jornada ( ); 460 dev = new Jornada ( );
462 else 461 else
463 dev = new ODevice ( ); 462 dev = new ODevice ( );
464 dev-> init ( ); 463 dev-> init ( );
465 } 464 }
466 return dev; 465 return dev;
467} 466}
468 467
469 468
470/************************************************** 469/**************************************************
471 * 470 *
472 * common 471 * common
473 * 472 *
474 **************************************************/ 473 **************************************************/
475 474
476 475
477ODevice::ODevice ( ) 476ODevice::ODevice ( )
478{ 477{
479 d = new ODeviceData; 478 d = new ODeviceData;
480 479
481 d-> m_modelstr = "Unknown"; 480 d-> m_modelstr = "Unknown";
482 d-> m_model = Model_Unknown; 481 d-> m_model = Model_Unknown;
483 d-> m_vendorstr = "Unknown"; 482 d-> m_vendorstr = "Unknown";
484 d-> m_vendor = Vendor_Unknown; 483 d-> m_vendor = Vendor_Unknown;
485 d-> m_systemstr = "Unknown"; 484 d-> m_systemstr = "Unknown";
486 d-> m_system = System_Unknown; 485 d-> m_system = System_Unknown;
487 d-> m_sysverstr = "0.0"; 486 d-> m_sysverstr = "0.0";
488 d-> m_rotation = Rot0; 487 d-> m_rotation = Rot0;
489 d-> m_direction = CW; 488 d-> m_direction = CW;
490 489
491 d-> m_holdtime = 1000; // 1000ms 490 d-> m_holdtime = 1000; // 1000ms
492 d-> m_buttons = 0; 491 d-> m_buttons = 0;
493 d-> m_cpu_frequencies = new QStrList; 492 d-> m_cpu_frequencies = new QStrList;
494} 493}
495 494
496void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 495void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
497{ 496{
498 if ( msg == "deviceButtonMappingChanged()" ) { 497 if ( msg == "deviceButtonMappingChanged()" ) {
499 reloadButtonMapping ( ); 498 reloadButtonMapping ( );
500 } 499 }
501} 500}
502 501
503void ODevice::init ( ) 502void ODevice::init ( )
504{ 503{
505} 504}
506 505
507/** 506/**
508 * This method initialises the button mapping 507 * This method initialises the button mapping
509 */ 508 */
510void ODevice::initButtons ( ) 509void ODevice::initButtons ( )
511{ 510{
512 if ( d-> m_buttons ) 511 if ( d-> m_buttons )
513 return; 512 return;
514 513
515 // Simulation uses iPAQ 3660 device buttons 514 // Simulation uses iPAQ 3660 device buttons
516 515
517 qDebug ( "init Buttons" ); 516 qDebug ( "init Buttons" );
518 d-> m_buttons = new QValueList <ODeviceButton>; 517 d-> m_buttons = new QValueList <ODeviceButton>;
519 518
520 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++ ) {
521 i_button *ib = ipaq_buttons + i; 520 i_button *ib = ipaq_buttons + i;
522 ODeviceButton b; 521 ODeviceButton b;
523 522
524 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 523 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
525 b. setKeycode ( ib-> code ); 524 b. setKeycode ( ib-> code );
526 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 525 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
527 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 526 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
528 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 527 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
529 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 528 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
530 d-> m_buttons-> append ( b ); 529 d-> m_buttons-> append ( b );
531 } 530 }
532 } 531 }
533 reloadButtonMapping ( ); 532 reloadButtonMapping ( );
534 533
535 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 534 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
536 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 & )));
537} 536}
538 537
539ODevice::~ODevice ( ) 538ODevice::~ODevice ( )
540{ 539{
541// we leak m_devicebuttons and m_cpu_frequency 540// we leak m_devicebuttons and m_cpu_frequency
542// but it's a singleton and it is not so importantant 541// but it's a singleton and it is not so importantant
543// -zecke 542// -zecke
544 delete d; 543 delete d;
545} 544}
546 545
547bool ODevice::setSoftSuspend ( bool /*soft*/ ) 546bool ODevice::setSoftSuspend ( bool /*soft*/ )
548{ 547{
549 return false; 548 return false;
550} 549}
551 550
552//#include <linux/apm_bios.h> 551//#include <linux/apm_bios.h>
553 552
554#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 553#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
555 554
556/** 555/**
557 * This method will try to suspend the device 556 * This method will try to suspend the device
558 * 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
559 * is installed. 558 * is installed.
560 * 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
561 * do have asynchronus apm implementations. 560 * do have asynchronus apm implementations.
562 * 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
563 * device and return once the device got woken up 562 * device and return once the device got woken up
564 * 563 *
565 * @return if the device got suspended 564 * @return if the device got suspended
566 */ 565 */
567bool ODevice::suspend ( ) 566bool ODevice::suspend ( )
568{ 567{
569 qDebug("ODevice::suspend"); 568 qDebug("ODevice::suspend");
570 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 569 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
571 return false; 570 return false;
572 571
573 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
574 return false; 573 return false;
575 574
576 bool res = false; 575 bool res = false;
577 576
578 struct timeval tvs, tvn; 577 struct timeval tvs, tvn;
579 ::gettimeofday ( &tvs, 0 ); 578 ::gettimeofday ( &tvs, 0 );
580 579
581 ::sync ( ); // flush fs caches 580 ::sync ( ); // flush fs caches
582 res = ( ::system ( "apm --suspend" ) == 0 ); 581 res = ( ::system ( "apm --suspend" ) == 0 );
583 582
584 // 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
585 // can not be sure when exactly the device is really suspended 584 // can not be sure when exactly the device is really suspended
586 // 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.
587 586
588 if ( res ) { 587 if ( res ) {
589 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
590 ::usleep ( 200 * 1000 ); 589 ::usleep ( 200 * 1000 );
591 ::gettimeofday ( &tvn, 0 ); 590 ::gettimeofday ( &tvn, 0 );
592 } 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 );
593 } 592 }
594 593
595 return res; 594 return res;
596} 595}
597 596
598//#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 ...
599 598
600#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 599#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
601 600
602/* VESA Blanking Levels */ 601/* VESA Blanking Levels */
603#define VESA_NO_BLANKING 0 602#define VESA_NO_BLANKING 0
604#define VESA_VSYNC_SUSPEND 1 603#define VESA_VSYNC_SUSPEND 1
605#define VESA_HSYNC_SUSPEND 2 604#define VESA_HSYNC_SUSPEND 2
606#define VESA_POWERDOWN 3 605#define VESA_POWERDOWN 3
607 606
608/** 607/**
609 * This sets the display on or off 608 * This sets the display on or off
610 */ 609 */
611bool ODevice::setDisplayStatus ( bool on ) 610bool ODevice::setDisplayStatus ( bool on )
612{ 611{
613 qDebug("ODevice::setDisplayStatus(%d)", on); 612 qDebug("ODevice::setDisplayStatus(%d)", on);
614 613
615 if ( d-> m_model == Model_Unknown ) 614 if ( d-> m_model == Model_Unknown )
616 return false; 615 return false;
617 616
618 bool res = false; 617 bool res = false;
619 int fd; 618 int fd;
620 619
621 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 620 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
622 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 621 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
623 ::close ( fd ); 622 ::close ( fd );
624 } 623 }
625 return res; 624 return res;
626} 625}
627 626
628/** 627/**
629 * This sets the display brightness 628 * This sets the display brightness
630 * 629 *
631 * @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
632 * @return success or failure 631 * @return success or failure
633 */ 632 */
634bool ODevice::setDisplayBrightness ( int p) 633bool ODevice::setDisplayBrightness ( int p)
635{ 634{
636 Q_UNUSED( p ) 635 Q_UNUSED( p )
637 return false; 636 return false;
638} 637}
639 638
640/** 639/**
641 * @return returns the number of steppings on the brightness slider 640 * @return returns the number of steppings on the brightness slider
642 * in the Light-'n-Power settings. 641 * in the Light-'n-Power settings.
643 */ 642 */
644int ODevice::displayBrightnessResolution ( ) const 643int ODevice::displayBrightnessResolution ( ) const
645{ 644{
646 return 16; 645 return 16;
647} 646}
648 647
649/** 648/**
650 * This sets the display contrast 649 * This sets the display contrast
651 * @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
652 * @return success or failure 651 * @return success or failure
653 */ 652 */
654bool ODevice::setDisplayContrast ( int p) 653bool ODevice::setDisplayContrast ( int p)
655{ 654{
656 Q_UNUSED( p ) 655 Q_UNUSED( p )
657 return false; 656 return false;
658} 657}
659 658
660/** 659/**
661 * @return return the max value for the brightness settings slider 660 * @return return the max value for the brightness settings slider
662 * 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
663 */ 662 */
664int ODevice::displayContrastResolution ( ) const 663int ODevice::displayContrastResolution ( ) const
665{ 664{
666 return 0; 665 return 0;
667} 666}
668 667
669/** 668/**
670 * This returns the vendor as string 669 * This returns the vendor as string
671 * @return Vendor as QString 670 * @return Vendor as QString
672 */ 671 */
673QString ODevice::vendorString ( ) const 672QString ODevice::vendorString ( ) const
674{ 673{
675 return d-> m_vendorstr; 674 return d-> m_vendorstr;
676} 675}
677 676
678/** 677/**
679 * This returns the vendor as one of the values of OVendor 678 * This returns the vendor as one of the values of OVendor
680 * @return OVendor 679 * @return OVendor
681 */ 680 */
682OVendor ODevice::vendor ( ) const 681OVendor ODevice::vendor ( ) const
683{ 682{
684 return d-> m_vendor; 683 return d-> m_vendor;
685} 684}
686 685
687/** 686/**
688 * This returns the model as a string 687 * This returns the model as a string
689 * @return A string representing the model 688 * @return A string representing the model
690 */ 689 */
691QString ODevice::modelString ( ) const 690QString ODevice::modelString ( ) const
692{ 691{
693 return d-> m_modelstr; 692 return d-> m_modelstr;
694} 693}
695 694
696/** 695/**
697 * This does return the OModel used 696 * This does return the OModel used
698 */ 697 */
699OModel ODevice::model ( ) const 698OModel ODevice::model ( ) const
700{ 699{
701 return d-> m_model; 700 return d-> m_model;
702} 701}
703 702
704/** 703/**
705 * This does return the systen name 704 * This does return the systen name
706 */ 705 */
707QString ODevice::systemString ( ) const 706QString ODevice::systemString ( ) const
708{ 707{
709 return d-> m_systemstr; 708 return d-> m_systemstr;
710} 709}
711 710
712/** 711/**
713 * Return System as OSystem value 712 * Return System as OSystem value
714 */ 713 */
715OSystem ODevice::system ( ) const 714OSystem ODevice::system ( ) const
716{ 715{
717 return d-> m_system; 716 return d-> m_system;
718} 717}
719 718
720/** 719/**
721 * @return the version string of the base system 720 * @return the version string of the base system
722 */ 721 */
723QString ODevice::systemVersionString ( ) const 722QString ODevice::systemVersionString ( ) const
724{ 723{
725 return d-> m_sysverstr; 724 return d-> m_sysverstr;
726} 725}
727 726
728/** 727/**
729 * @return the current Transformation 728 * @return the current Transformation
730 */ 729 */
731Transformation ODevice::rotation ( ) const 730Transformation ODevice::rotation ( ) const
732{ 731{
733 VirtRotation rot; 732 VirtRotation rot;
734 ODevice* that =(ODevice* )this; 733 ODevice* that =(ODevice* )this;
735 that->virtual_hook( VIRTUAL_ROTATION, &rot ); 734 that->virtual_hook( VIRTUAL_ROTATION, &rot );
736 return rot.trans; 735 return rot.trans;
737} 736}
738 737
739/** 738/**
740 * @return the current rotation direction 739 * @return the current rotation direction
741 */ 740 */
742ODirection ODevice::direction ( ) const 741ODirection ODevice::direction ( ) const
743{ 742{
744 VirtDirection dir; 743 VirtDirection dir;
745 ODevice* that =(ODevice* )this; 744 ODevice* that =(ODevice* )this;
746 that->virtual_hook( VIRTUAL_DIRECTION, &dir ); 745 that->virtual_hook( VIRTUAL_DIRECTION, &dir );
747 return dir.direct; 746 return dir.direct;
748} 747}
749 748
750/** 749/**
751 * This plays an alarmSound 750 * This plays an alarmSound
752 */ 751 */
753void ODevice::alarmSound ( ) 752void ODevice::alarmSound ( )
754{ 753{
755#ifndef QT_NO_SOUND 754#ifndef QT_NO_SOUND
756 static Sound snd ( "alarm" ); 755 static Sound snd ( "alarm" );
757 756
758 if ( snd. isFinished ( )) 757 if ( snd. isFinished ( ))
759 snd. play ( ); 758 snd. play ( );
760#endif 759#endif
761} 760}
762 761
763/** 762/**
764 * This plays a key sound 763 * This plays a key sound
765 */ 764 */
766void ODevice::keySound ( ) 765void ODevice::keySound ( )
767{ 766{
768#ifndef QT_NO_SOUND 767#ifndef QT_NO_SOUND
769 static Sound snd ( "keysound" ); 768 static Sound snd ( "keysound" );
770 769
771 if ( snd. isFinished ( )) 770 if ( snd. isFinished ( ))
772 snd. play ( ); 771 snd. play ( );
773#endif 772#endif
774} 773}
775 774
776/** 775/**
777 * This plays a touch sound 776 * This plays a touch sound
778 */ 777 */
779void ODevice::touchSound ( ) 778void ODevice::touchSound ( )
780{ 779{
781#ifndef QT_NO_SOUND 780#ifndef QT_NO_SOUND
782 static Sound snd ( "touchsound" ); 781 static Sound snd ( "touchsound" );
783 782
784 if ( snd. isFinished ( )) 783 if ( snd. isFinished ( ))
785 snd. play ( ); 784 snd. play ( );
786#endif 785#endif
787} 786}
788 787
789/** 788/**
790 * This method will return a list of leds 789 * This method will return a list of leds
791 * available on this device 790 * available on this device
792 * @return a list of LEDs. 791 * @return a list of LEDs.
793 */ 792 */
794QValueList <OLed> ODevice::ledList ( ) const 793QValueList <OLed> ODevice::ledList ( ) const
795{ 794{
796 return QValueList <OLed> ( ); 795 return QValueList <OLed> ( );
797} 796}
798 797
799/** 798/**
800 * This does return the state of the LEDs 799 * This does return the state of the LEDs
801 */ 800 */
802QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const 801QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const
803{ 802{
804 return QValueList <OLedState> ( ); 803 return QValueList <OLedState> ( );
805} 804}
806 805
807/** 806/**
808 * @return the state for a given OLed 807 * @return the state for a given OLed
809 */ 808 */
810OLedState ODevice::ledState ( OLed /*which*/ ) const 809OLedState ODevice::ledState ( OLed /*which*/ ) const
811{ 810{
812 return Led_Off; 811 return Led_Off;
813} 812}
814 813
815/** 814/**
816 * Set the state for a LED 815 * Set the state for a LED
817 * @param which Which OLed to use 816 * @param which Which OLed to use
818 * @param st The state to set 817 * @param st The state to set
819 * @return success or failure 818 * @return success or failure
820 */ 819 */
821bool ODevice::setLedState ( OLed which, OLedState st ) 820bool ODevice::setLedState ( OLed which, OLedState st )
822{ 821{
823 Q_UNUSED( which ) 822 Q_UNUSED( which )
824 Q_UNUSED( st ) 823 Q_UNUSED( st )
825 return false; 824 return false;
826} 825}
827 826
828/** 827/**
829 * @return if the device has a light sensor 828 * @return if the device has a light sensor
830 */ 829 */
831bool ODevice::hasLightSensor ( ) const 830bool ODevice::hasLightSensor ( ) const
832{ 831{
833 return false; 832 return false;
834} 833}
835 834
836/** 835/**
837 * @return a value from the light sensor 836 * @return a value from the light sensor
838 */ 837 */
839int ODevice::readLightSensor ( ) 838int ODevice::readLightSensor ( )
840{ 839{
841 return -1; 840 return -1;
842} 841}
843 842
844/** 843/**
845 * @return the light sensor resolution 844 * @return the light sensor resolution
846 */ 845 */
847int ODevice::lightSensorResolution ( ) const 846int ODevice::lightSensorResolution ( ) const
848{ 847{
849 return 0; 848 return 0;
850} 849}
851 850
852/** 851/**
853 * @return if the device has a hinge sensor 852 * @return if the device has a hinge sensor
854 */ 853 */
855bool ODevice::hasHingeSensor ( ) const 854bool ODevice::hasHingeSensor ( ) const
856{ 855{
857 VirtHasHinge hing; 856 VirtHasHinge hing;
858 ODevice* that =(ODevice* )this; 857 ODevice* that =(ODevice* )this;
859 that->virtual_hook( VIRTUAL_HAS_HINGE, &hing ); 858 that->virtual_hook( VIRTUAL_HAS_HINGE, &hing );
860 return hing.hasHinge; 859 return hing.hasHinge;
861} 860}
862 861
863/** 862/**
864 * @return a value from the hinge sensor 863 * @return a value from the hinge sensor
865 */ 864 */
866OHingeStatus ODevice::readHingeSensor ( ) 865OHingeStatus ODevice::readHingeSensor ( )
867{ 866{
868 VirtHingeStatus hing; 867 VirtHingeStatus hing;
869 virtual_hook( VIRTUAL_HINGE, &hing ); 868 virtual_hook( VIRTUAL_HINGE, &hing );
870 return hing.hingeStat; 869 return hing.hingeStat;
871} 870}
872 871
873/** 872/**
874 * @return a list with CPU frequencies supported by the hardware 873 * @return a list with CPU frequencies supported by the hardware
875 */ 874 */
876const QStrList &ODevice::allowedCpuFrequencies ( ) const 875const QStrList &ODevice::allowedCpuFrequencies ( ) const
877{ 876{
878 return *d->m_cpu_frequencies; 877 return *d->m_cpu_frequencies;
879} 878}
880 879
881 880
882/** 881/**
883 * Set desired CPU frequency 882 * Set desired CPU frequency
884 * 883 *
885 * @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
886 */ 885 */
887bool ODevice::setCurrentCpuFrequency(uint index) 886bool ODevice::setCurrentCpuFrequency(uint index)
888{ 887{
889 if (index >= d->m_cpu_frequencies->count()) 888 if (index >= d->m_cpu_frequencies->count())
890 return false; 889 return false;
891 890
892 char *freq = d->m_cpu_frequencies->at(index); 891 char *freq = d->m_cpu_frequencies->at(index);
893 qWarning("set freq to %s", freq); 892 qWarning("set freq to %s", freq);
894 893
895 int fd; 894 int fd;
896 895
897 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) { 896 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) {
898 char writeCommand[50]; 897 char writeCommand[50];
899 const int count = sprintf(writeCommand, "%s\n", freq); 898 const int count = sprintf(writeCommand, "%s\n", freq);
900 int res = (::write(fd, writeCommand, count) != -1); 899 int res = (::write(fd, writeCommand, count) != -1);
901 ::close(fd); 900 ::close(fd);
902 return res; 901 return res;
903 } 902 }
904 903
905 return false; 904 return false;
906} 905}
907 906
908 907
909/** 908/**
910 * @return a list of hardware buttons 909 * @return a list of hardware buttons
911 */ 910 */
912const QValueList <ODeviceButton> &ODevice::buttons ( ) 911const QValueList <ODeviceButton> &ODevice::buttons ( )
913{ 912{
914 initButtons ( ); 913 initButtons ( );
915 914
916 return *d-> m_buttons; 915 return *d-> m_buttons;
917} 916}
918 917
919/** 918/**
920 * @return The amount of time that would count as a hold 919 * @return The amount of time that would count as a hold
921 */ 920 */
922uint ODevice::buttonHoldTime ( ) const 921uint ODevice::buttonHoldTime ( ) const
923{ 922{
924 return d-> m_holdtime; 923 return d-> m_holdtime;
925} 924}
926 925
927/** 926/**
928 * This method return a ODeviceButton for a key code 927 * This method return a ODeviceButton for a key code
929 * 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
930 * 929 *
931 * @return The devicebutton or 0l 930 * @return The devicebutton or 0l
932 * @see ODeviceButton 931 * @see ODeviceButton
933 */ 932 */
934const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 933const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
935{ 934{
936 initButtons ( ); 935 initButtons ( );
937 936
938 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 ) {
939 if ( (*it). keycode ( ) == code ) 938 if ( (*it). keycode ( ) == code )
940 return &(*it); 939 return &(*it);
941 } 940 }
942 return 0; 941 return 0;
943} 942}
944 943
945void ODevice::reloadButtonMapping ( ) 944void ODevice::reloadButtonMapping ( )
946{ 945{
947 initButtons ( ); 946 initButtons ( );
948 947
949 Config cfg ( "ButtonSettings" ); 948 Config cfg ( "ButtonSettings" );
950 949
951 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 950 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
952 ODeviceButton &b = ( *d-> m_buttons ) [i]; 951 ODeviceButton &b = ( *d-> m_buttons ) [i];
953 QString group = "Button" + QString::number ( i ); 952 QString group = "Button" + QString::number ( i );
954 953
955 QCString pch, hch; 954 QCString pch, hch;
956 QCString pm, hm; 955 QCString pm, hm;
957 QByteArray pdata, hdata; 956 QByteArray pdata, hdata;
958 957
959 if ( cfg. hasGroup ( group )) { 958 if ( cfg. hasGroup ( group )) {
960 cfg. setGroup ( group ); 959 cfg. setGroup ( group );
961 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 960 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
962 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 961 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
963 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 962 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
964 963
965 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 964 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
966 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 965 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
967 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 966 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
968 } 967 }
969 968
970 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 969 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
971 970
972 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 971 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
973 } 972 }
974} 973}
975 974
976void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 975void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
977{ 976{
978 initButtons ( ); 977 initButtons ( );
979 978
980 QString mb_chan; 979 QString mb_chan;
981 980
982 if ( button >= (int) d-> m_buttons-> count ( )) 981 if ( button >= (int) d-> m_buttons-> count ( ))
983 return; 982 return;
984 983
985 ODeviceButton &b = ( *d-> m_buttons ) [button]; 984 ODeviceButton &b = ( *d-> m_buttons ) [button];
986 b. setPressedAction ( action ); 985 b. setPressedAction ( action );
987 986
988 mb_chan=b. pressedAction ( ). channel ( ); 987 mb_chan=b. pressedAction ( ). channel ( );
989 988
990 Config buttonFile ( "ButtonSettings" ); 989 Config buttonFile ( "ButtonSettings" );
991 buttonFile. setGroup ( "Button" + QString::number ( button )); 990 buttonFile. setGroup ( "Button" + QString::number ( button ));
992 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 991 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
993 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 992 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
994 993
995 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 994 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
996 995
997 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 996 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
998} 997}
999 998
1000void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 999void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
1001{ 1000{
1002 initButtons ( ); 1001 initButtons ( );
1003 1002
1004 if ( button >= (int) d-> m_buttons-> count ( )) 1003 if ( button >= (int) d-> m_buttons-> count ( ))
1005 return; 1004 return;
1006 1005
1007 ODeviceButton &b = ( *d-> m_buttons ) [button]; 1006 ODeviceButton &b = ( *d-> m_buttons ) [button];
1008 b. setHeldAction ( action ); 1007 b. setHeldAction ( action );
1009 1008
1010 Config buttonFile ( "ButtonSettings" ); 1009 Config buttonFile ( "ButtonSettings" );
1011 buttonFile. setGroup ( "Button" + QString::number ( button )); 1010 buttonFile. setGroup ( "Button" + QString::number ( button ));
1012 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 1011 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
1013 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 1012 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
1014 1013
1015 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 1014 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
1016 1015
1017 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 1016 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
1018} 1017}
1019void ODevice::virtual_hook(int id, void* data){ 1018void ODevice::virtual_hook(int id, void* data){
1020 switch( id ) { 1019 switch( id ) {
1021 case VIRTUAL_ROTATION:{ 1020 case VIRTUAL_ROTATION:{
1022 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data ); 1021 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
1023 rot->trans = d->m_rotation; 1022 rot->trans = d->m_rotation;
1024 break; 1023 break;
1025 } 1024 }
1026 case VIRTUAL_DIRECTION:{ 1025 case VIRTUAL_DIRECTION:{
1027 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data ); 1026 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
1028 dir->direct = d->m_direction; 1027 dir->direct = d->m_direction;
1029 break; 1028 break;
1030 } 1029 }
1031 case VIRTUAL_HAS_HINGE:{ 1030 case VIRTUAL_HAS_HINGE:{
1032 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data ); 1031 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
1033 hin->hasHinge = false; 1032 hin->hasHinge = false;
1034 break; 1033 break;
1035 } 1034 }
1036 case VIRTUAL_HINGE:{ 1035 case VIRTUAL_HINGE:{
1037 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data ); 1036 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
1038 hin->hingeStat = CASE_UNKNOWN; 1037 hin->hingeStat = CASE_UNKNOWN;
1039 break; 1038 break;
1040 } 1039 }
1041 } 1040 }
1042} 1041}
1043 1042
1044/************************************************** 1043/**************************************************
1045 * 1044 *
1046 * Yopy 3500/3700 1045 * Yopy 3500/3700
1047 * 1046 *
1048 **************************************************/ 1047 **************************************************/
1049 1048
1050bool Yopy::isYopy ( ) 1049bool Yopy::isYopy ( )
1051{ 1050{
1052 QFile f( "/proc/cpuinfo" ); 1051 QFile f( "/proc/cpuinfo" );
1053 if ( f. open ( IO_ReadOnly ) ) { 1052 if ( f. open ( IO_ReadOnly ) ) {
1054 QTextStream ts ( &f ); 1053 QTextStream ts ( &f );
1055 QString line; 1054 QString line;
1056 while( line = ts. readLine ( ) ) { 1055 while( line = ts. readLine ( ) ) {
1057 if ( line. left ( 8 ) == "Hardware" ) { 1056 if ( line. left ( 8 ) == "Hardware" ) {
1058 int loc = line. find ( ":" ); 1057 int loc = line. find ( ":" );
1059 if ( loc != -1 ) { 1058 if ( loc != -1 ) {
1060 QString model = 1059 QString model =
1061 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1060 line. mid ( loc + 2 ). simplifyWhiteSpace( );
1062 return ( model == "Yopy" ); 1061 return ( model == "Yopy" );
1063 } 1062 }
1064 } 1063 }
1065 } 1064 }
1066 } 1065 }
1067 return false; 1066 return false;
1068} 1067}
1069 1068
1070void Yopy::init ( ) 1069void Yopy::init ( )
1071{ 1070{
1072 d-> m_vendorstr = "G.Mate"; 1071 d-> m_vendorstr = "G.Mate";
1073 d-> m_vendor = Vendor_GMate; 1072 d-> m_vendor = Vendor_GMate;
1074 d-> m_modelstr = "Yopy3700"; 1073 d-> m_modelstr = "Yopy3700";
1075 d-> m_model = Model_Yopy_3700; 1074 d-> m_model = Model_Yopy_3700;
1076 d-> m_rotation = Rot0; 1075 d-> m_rotation = Rot0;
1077 1076
1078 d-> m_systemstr = "Linupy"; 1077 d-> m_systemstr = "Linupy";
1079 d-> m_system = System_Linupy; 1078 d-> m_system = System_Linupy;
1080 1079
1081 QFile f ( "/etc/issue" ); 1080 QFile f ( "/etc/issue" );
1082 if ( f. open ( IO_ReadOnly )) { 1081 if ( f. open ( IO_ReadOnly )) {
1083 QTextStream ts ( &f ); 1082 QTextStream ts ( &f );
1084 ts.readLine(); 1083 ts.readLine();
1085 d-> m_sysverstr = ts. readLine ( ); 1084 d-> m_sysverstr = ts. readLine ( );
1086 f. close ( ); 1085 f. close ( );
1087 } 1086 }
1088} 1087}
1089 1088
1090void Yopy::initButtons ( ) 1089void Yopy::initButtons ( )
1091{ 1090{
1092 if ( d-> m_buttons ) 1091 if ( d-> m_buttons )
1093 return; 1092 return;
1094 1093
1095 d-> m_buttons = new QValueList <ODeviceButton>; 1094 d-> m_buttons = new QValueList <ODeviceButton>;
1096 1095
1097 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++) {
1098 1097
1099 yopy_button *ib = yopy_buttons + i; 1098 yopy_button *ib = yopy_buttons + i;
1100 1099
1101 ODeviceButton b; 1100 ODeviceButton b;
1102 1101
1103 b. setKeycode ( ib-> code ); 1102 b. setKeycode ( ib-> code );
1104 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1103 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1105 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1104 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1106 b. setFactoryPresetPressedAction 1105 b. setFactoryPresetPressedAction
1107 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); 1106 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1108 b. setFactoryPresetHeldAction 1107 b. setFactoryPresetHeldAction
1109 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); 1108 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1110 1109
1111 d-> m_buttons-> append ( b ); 1110 d-> m_buttons-> append ( b );
1112 } 1111 }
1113 reloadButtonMapping ( ); 1112 reloadButtonMapping ( );
1114 1113
1115 QCopChannel *sysch = new QCopChannel("QPE/System", this); 1114 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1116 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 1115 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )),
1117 this, SLOT(systemMessage(const QCString &, const QByteArray & ))); 1116 this, SLOT(systemMessage(const QCString &, const QByteArray & )));
1118} 1117}
1119 1118
1120bool Yopy::suspend() 1119bool Yopy::suspend()
1121{ 1120{
1122 /* 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
1123 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
1124 existing power management features. */ 1123 existing power management features. */
1125 return false; 1124 return false;
1126} 1125}
1127 1126
1128bool Yopy::setDisplayBrightness(int bright) 1127bool Yopy::setDisplayBrightness(int bright)
1129{ 1128{
1130 /* 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
1131 parallel to X, and relies on the existing backlight demon. */ 1130 parallel to X, and relies on the existing backlight demon. */
1132#if 0 1131#if 0
1133 if ( QFile::exists("/proc/sys/pm/light") ) { 1132 if ( QFile::exists("/proc/sys/pm/light") ) {
1134 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1133 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1135 if (fd >= 0 ) { 1134 if (fd >= 0 ) {
1136 if (bright) 1135 if (bright)
1137 ::write(fd, "1\n", 2); 1136 ::write(fd, "1\n", 2);
1138 else 1137 else
1139 ::write(fd, "0\n", 2); 1138 ::write(fd, "0\n", 2);
1140 ::close(fd); 1139 ::close(fd);
1141 return true; 1140 return true;
1142 } 1141 }
1143 } 1142 }
1144#endif 1143#endif
1145 return false; 1144 return false;
1146} 1145}
1147 1146
1148int Yopy::displayBrightnessResolution() const 1147int Yopy::displayBrightnessResolution() const
1149{ 1148{
1150 return 2; 1149 return 2;
1151} 1150}
1152 1151
1153/************************************************** 1152/**************************************************
1154 * 1153 *
1155 * iPAQ 1154 * iPAQ
1156 * 1155 *
1157 **************************************************/ 1156 **************************************************/
1158 1157
1159void iPAQ::init ( ) 1158void iPAQ::init ( )
1160{ 1159{
1161 d-> m_vendorstr = "HP"; 1160 d-> m_vendorstr = "HP";
1162 d-> m_vendor = Vendor_HP; 1161 d-> m_vendor = Vendor_HP;
1163 1162
1164 QFile f ( "/proc/hal/model" ); 1163 QFile f ( "/proc/hal/model" );
1165 1164
1166 if ( f. open ( IO_ReadOnly )) { 1165 if ( f. open ( IO_ReadOnly )) {
1167 QTextStream ts ( &f ); 1166 QTextStream ts ( &f );
1168 1167
1169 d-> m_modelstr = "H" + ts. readLine ( ); 1168 d-> m_modelstr = "H" + ts. readLine ( );
1170 1169
1171 if ( d-> m_modelstr == "H3100" ) 1170 if ( d-> m_modelstr == "H3100" )
1172 d-> m_model = Model_iPAQ_H31xx; 1171 d-> m_model = Model_iPAQ_H31xx;
1173 else if ( d-> m_modelstr == "H3600" ) 1172 else if ( d-> m_modelstr == "H3600" )
1174 d-> m_model = Model_iPAQ_H36xx; 1173 d-> m_model = Model_iPAQ_H36xx;
1175 else if ( d-> m_modelstr == "H3700" ) 1174 else if ( d-> m_modelstr == "H3700" )
1176 d-> m_model = Model_iPAQ_H37xx; 1175 d-> m_model = Model_iPAQ_H37xx;
1177 else if ( d-> m_modelstr == "H3800" ) 1176 else if ( d-> m_modelstr == "H3800" )
1178 d-> m_model = Model_iPAQ_H38xx; 1177 d-> m_model = Model_iPAQ_H38xx;
1179 else if ( d-> m_modelstr == "H3900" ) 1178 else if ( d-> m_modelstr == "H3900" )
1180 d-> m_model = Model_iPAQ_H39xx; 1179 d-> m_model = Model_iPAQ_H39xx;
1181 else if ( d-> m_modelstr == "H5400" ) 1180 else if ( d-> m_modelstr == "H5400" )
1182 d-> m_model = Model_iPAQ_H5xxx; 1181 d-> m_model = Model_iPAQ_H5xxx;
1183 else 1182 else
1184 d-> m_model = Model_Unknown; 1183 d-> m_model = Model_Unknown;
1185 1184
1186 f. close ( ); 1185 f. close ( );
1187 } 1186 }
1188 1187
1189 switch ( d-> m_model ) { 1188 switch ( d-> m_model ) {
1190 case Model_iPAQ_H31xx: 1189 case Model_iPAQ_H31xx:
1191 case Model_iPAQ_H38xx: 1190 case Model_iPAQ_H38xx:
1192 d-> m_rotation = Rot90; 1191 d-> m_rotation = Rot90;
1193 break; 1192 break;
1194 case Model_iPAQ_H36xx: 1193 case Model_iPAQ_H36xx:
1195 case Model_iPAQ_H37xx: 1194 case Model_iPAQ_H37xx:
1196 case Model_iPAQ_H39xx: 1195 case Model_iPAQ_H39xx:
1197 1196
1198 default: 1197 default:
1199 d-> m_rotation = Rot270; 1198 d-> m_rotation = Rot270;
1200 break; 1199 break;
1201 case Model_iPAQ_H5xxx: 1200 case Model_iPAQ_H5xxx:
1202 d-> m_rotation = Rot0; 1201 d-> m_rotation = Rot0;
1203 } 1202 }
1204 1203
1205 f. setName ( "/etc/familiar-version" ); 1204 f. setName ( "/etc/familiar-version" );
1206 if ( f. open ( IO_ReadOnly )) { 1205 if ( f. open ( IO_ReadOnly )) {
1207 d-> m_systemstr = "Familiar"; 1206 d-> m_systemstr = "Familiar";
1208 d-> m_system = System_Familiar; 1207 d-> m_system = System_Familiar;
1209 1208
1210 QTextStream ts ( &f ); 1209 QTextStream ts ( &f );
1211 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1210 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1212 1211
1213 f. close ( ); 1212 f. close ( );
1214 } else { 1213 } else {
1215 f. setName ( "/etc/oz_version" ); 1214 f. setName ( "/etc/oz_version" );
1216 1215
1217 if ( f. open ( IO_ReadOnly )) { 1216 if ( f. open ( IO_ReadOnly )) {
1218 d-> m_systemstr = "OpenEmbedded/iPaq"; 1217 d-> m_systemstr = "OpenEmbedded/iPaq";
1219 d-> m_system = System_Familiar; 1218 d-> m_system = System_Familiar;
1220 1219
1221 QTextStream ts ( &f ); 1220 QTextStream ts ( &f );
1222 ts.setDevice ( &f ); 1221 ts.setDevice ( &f );
1223 d-> m_sysverstr = ts. readLine ( ); 1222 d-> m_sysverstr = ts. readLine ( );
1224 f. close ( ); 1223 f. close ( );
1225 } 1224 }
1226 } 1225 }
1227 1226
1228 1227
1229 1228
1230 1229
1231 1230
1232 m_leds [0] = m_leds [1] = Led_Off; 1231 m_leds [0] = m_leds [1] = Led_Off;
1233 1232
1234 m_power_timer = 0; 1233 m_power_timer = 0;
1235 1234
1236} 1235}
1237 1236
1238void iPAQ::initButtons ( ) 1237void iPAQ::initButtons ( )
1239{ 1238{
1240 if ( d-> m_buttons ) 1239 if ( d-> m_buttons )
1241 return; 1240 return;
1242 1241
1243 if ( isQWS( ) ) 1242 if ( isQWS( ) )
1244 QWSServer::setKeyboardFilter ( this ); 1243 QWSServer::setKeyboardFilter ( this );
1245 1244
1246 d-> m_buttons = new QValueList <ODeviceButton>; 1245 d-> m_buttons = new QValueList <ODeviceButton>;
1247 1246
1248 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++ ) {
1249 i_button *ib = ipaq_buttons + i; 1248 i_button *ib = ipaq_buttons + i;
1250 ODeviceButton b; 1249 ODeviceButton b;
1251 1250
1252 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1251 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1253 b. setKeycode ( ib-> code ); 1252 b. setKeycode ( ib-> code );
1254 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1253 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1255 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1254 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1256 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1255 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1257 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1256 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1258 1257
1259 d-> m_buttons-> append ( b ); 1258 d-> m_buttons-> append ( b );
1260 } 1259 }
1261 } 1260 }
1262 reloadButtonMapping ( ); 1261 reloadButtonMapping ( );
1263 1262
1264 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1263 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1265 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 & )));
1266} 1265}
1267 1266
1268 1267
1269//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1268//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1270 1269
1271typedef struct { 1270typedef struct {
1272 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1271 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1273 unsigned char TotalTime; /* Units of 5 seconds */ 1272 unsigned char TotalTime; /* Units of 5 seconds */
1274 unsigned char OnTime; /* units of 100m/s */ 1273 unsigned char OnTime; /* units of 100m/s */
1275 unsigned char OffTime; /* units of 100m/s */ 1274 unsigned char OffTime; /* units of 100m/s */
1276} LED_IN; 1275} LED_IN;
1277 1276
1278typedef struct { 1277typedef struct {
1279 unsigned char mode; 1278 unsigned char mode;
1280 unsigned char pwr; 1279 unsigned char pwr;
1281 unsigned char brightness; 1280 unsigned char brightness;
1282} FLITE_IN; 1281} FLITE_IN;
1283 1282
1284#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1283#define LED_ON OD_IOW( 'f', 5, LED_IN )
1285#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1284#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1286 1285
1287 1286
1288QValueList <OLed> iPAQ::ledList ( ) const 1287QValueList <OLed> iPAQ::ledList ( ) const
1289{ 1288{
1290 QValueList <OLed> vl; 1289 QValueList <OLed> vl;
1291 vl << Led_Power; 1290 vl << Led_Power;
1292 1291
1293 if ( d-> m_model == Model_iPAQ_H38xx ) 1292 if ( d-> m_model == Model_iPAQ_H38xx )
1294 vl << Led_BlueTooth; 1293 vl << Led_BlueTooth;
1295 return vl; 1294 return vl;
1296} 1295}
1297 1296
1298QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1297QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1299{ 1298{
1300 QValueList <OLedState> vl; 1299 QValueList <OLedState> vl;
1301 1300
1302 if ( l == Led_Power ) 1301 if ( l == Led_Power )
1303 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1302 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1304 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1303 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1305 vl << Led_Off; // << Led_On << ??? 1304 vl << Led_Off; // << Led_On << ???
1306 1305
1307 return vl; 1306 return vl;
1308} 1307}
1309 1308
1310OLedState iPAQ::ledState ( OLed l ) const 1309OLedState iPAQ::ledState ( OLed l ) const
1311{ 1310{
1312 switch ( l ) { 1311 switch ( l ) {
1313 case Led_Power: 1312 case Led_Power:
1314 return m_leds [0]; 1313 return m_leds [0];
1315 case Led_BlueTooth: 1314 case Led_BlueTooth:
1316 return m_leds [1]; 1315 return m_leds [1];
1317 default: 1316 default:
1318 return Led_Off; 1317 return Led_Off;
1319 } 1318 }
1320} 1319}
1321 1320
1322bool iPAQ::setLedState ( OLed l, OLedState st ) 1321bool iPAQ::setLedState ( OLed l, OLedState st )
1323{ 1322{
1324 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1323 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1325 1324
1326 if ( l == Led_Power ) { 1325 if ( l == Led_Power ) {
1327 if ( fd >= 0 ) { 1326 if ( fd >= 0 ) {
1328 LED_IN leds; 1327 LED_IN leds;
1329 ::memset ( &leds, 0, sizeof( leds )); 1328 ::memset ( &leds, 0, sizeof( leds ));
1330 leds. TotalTime = 0; 1329 leds. TotalTime = 0;
1331 leds. OnTime = 0; 1330 leds. OnTime = 0;
1332 leds. OffTime = 1; 1331 leds. OffTime = 1;
1333 leds. OffOnBlink = 2; 1332 leds. OffOnBlink = 2;
1334 1333
1335 switch ( st ) { 1334 switch ( st ) {
1336 case Led_Off : leds. OffOnBlink = 0; break; 1335 case Led_Off : leds. OffOnBlink = 0; break;
1337 case Led_On : leds. OffOnBlink = 1; break; 1336 case Led_On : leds. OffOnBlink = 1; break;
1338 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1337 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1339 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1338 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1340 } 1339 }
1341 1340
1342 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1341 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1343 m_leds [0] = st; 1342 m_leds [0] = st;
1344 return true; 1343 return true;
1345 } 1344 }
1346 } 1345 }
1347 } 1346 }
1348 return false; 1347 return false;
1349} 1348}
1350 1349
1351 1350
1352bool 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 )
1353{ 1352{
1354 int newkeycode = keycode; 1353 int newkeycode = keycode;
1355 1354
1356 switch ( keycode ) { 1355 switch ( keycode ) {
1357 // 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
1358 case HardKey_Menu: { 1357 case HardKey_Menu: {
1359 if (( d-> m_model == Model_iPAQ_H38xx ) || 1358 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1360 ( d-> m_model == Model_iPAQ_H39xx ) || 1359 ( d-> m_model == Model_iPAQ_H39xx ) ||
1361 ( d-> m_model == Model_iPAQ_H5xxx)) { 1360 ( d-> m_model == Model_iPAQ_H5xxx)) {
1362 newkeycode = HardKey_Mail; 1361 newkeycode = HardKey_Mail;
1363 } 1362 }
1364 break; 1363 break;
1365 } 1364 }
1366 1365
1367 // Rotate cursor keys 180° or 270° 1366 // Rotate cursor keys 180° or 270°
1368 case Key_Left : 1367 case Key_Left :
1369 case Key_Right: 1368 case Key_Right:
1370 case Key_Up : 1369 case Key_Up :
1371 case Key_Down : { 1370 case Key_Down : {
1372 1371
1373 if (( d-> m_model == Model_iPAQ_H31xx ) || 1372 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1374 ( d-> m_model == Model_iPAQ_H38xx )) { 1373 ( d-> m_model == Model_iPAQ_H38xx )) {
1375 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1374 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1376 } 1375 }
1377 // Rotate the cursor keys by 270° 1376 // Rotate the cursor keys by 270°
1378 // keycode - Key_Left = position of the button starting from left clockwise 1377 // keycode - Key_Left = position of the button starting from left clockwise
1379 // 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
1380 // add the offset to the Key_Left key 1379 // add the offset to the Key_Left key
1381 if ( d-> m_model == Model_iPAQ_H5xxx ) 1380 if ( d-> m_model == Model_iPAQ_H5xxx )
1382 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 1381 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
1383 break; 1382 break;
1384 } 1383 }
1385 1384
1386 // map Power Button short/long press to F34/F35 1385 // map Power Button short/long press to F34/F35
1387 case Key_SysReq: { 1386 case Key_SysReq: {
1388 if ( isPress ) { 1387 if ( isPress ) {
1389 if ( m_power_timer ) 1388 if ( m_power_timer )
1390 killTimer ( m_power_timer ); 1389 killTimer ( m_power_timer );
1391 m_power_timer = startTimer ( 500 ); 1390 m_power_timer = startTimer ( 500 );
1392 } 1391 }
1393 else if ( m_power_timer ) { 1392 else if ( m_power_timer ) {
1394 killTimer ( m_power_timer ); 1393 killTimer ( m_power_timer );
1395 m_power_timer = 0; 1394 m_power_timer = 0;
1396 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1395 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1397 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1396 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1398 } 1397 }
1399 newkeycode = Key_unknown; 1398 newkeycode = Key_unknown;
1400 break; 1399 break;
1401 } 1400 }
1402 } 1401 }
1403 1402
1404 if ( newkeycode != keycode ) { 1403 if ( newkeycode != keycode ) {
1405 if ( newkeycode != Key_unknown ) 1404 if ( newkeycode != Key_unknown )
1406 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1405 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1407 return true; 1406 return true;
1408 } 1407 }
1409 else 1408 else
1410 return false; 1409 return false;
1411} 1410}
1412 1411
1413void iPAQ::timerEvent ( QTimerEvent * ) 1412void iPAQ::timerEvent ( QTimerEvent * )
1414{ 1413{
1415 killTimer ( m_power_timer ); 1414 killTimer ( m_power_timer );
1416 m_power_timer = 0; 1415 m_power_timer = 0;
1417 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1416 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1418 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1417 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1419} 1418}
1420 1419
1421 1420
1422void iPAQ::alarmSound ( ) 1421void iPAQ::alarmSound ( )
1423{ 1422{
1424#ifndef QT_NO_SOUND 1423#ifndef QT_NO_SOUND
1425 static Sound snd ( "alarm" ); 1424 static Sound snd ( "alarm" );
1426 int fd; 1425 int fd;
1427 int vol; 1426 int vol;
1428 bool vol_reset = false; 1427 bool vol_reset = false;
1429 1428
1430 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1429 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1431 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1430 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1432 Config cfg ( "qpe" ); 1431 Config cfg ( "qpe" );
1433 cfg. setGroup ( "Volume" ); 1432 cfg. setGroup ( "Volume" );
1434 1433
1435 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1434 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1436 if ( volalarm < 0 ) 1435 if ( volalarm < 0 )
1437 volalarm = 0; 1436 volalarm = 0;
1438 else if ( volalarm > 100 ) 1437 else if ( volalarm > 100 )
1439 volalarm = 100; 1438 volalarm = 100;
1440 volalarm |= ( volalarm << 8 ); 1439 volalarm |= ( volalarm << 8 );
1441 1440
1442 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1441 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1443 vol_reset = true; 1442 vol_reset = true;
1444 } 1443 }
1445 } 1444 }
1446 1445
1447 snd. play ( ); 1446 snd. play ( );
1448 while ( !snd. isFinished ( )) 1447 while ( !snd. isFinished ( ))
1449 qApp-> processEvents ( ); 1448 qApp-> processEvents ( );
1450 1449
1451 if ( fd >= 0 ) { 1450 if ( fd >= 0 ) {
1452 if ( vol_reset ) 1451 if ( vol_reset )
1453 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1452 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1454 ::close ( fd ); 1453 ::close ( fd );
1455 } 1454 }
1456#endif 1455#endif
1457} 1456}
1458 1457
1459 1458
1460bool iPAQ::setSoftSuspend ( bool soft ) 1459bool iPAQ::setSoftSuspend ( bool soft )
1461{ 1460{
1462 bool res = false; 1461 bool res = false;
1463 int fd; 1462 int fd;
1464 1463
1465 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 ) {
1466 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1465 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1467 res = true; 1466 res = true;
1468 else 1467 else
1469 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1468 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1470 1469
1471 ::close ( fd ); 1470 ::close ( fd );
1472 } 1471 }
1473 else 1472 else
1474 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1473 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1475 1474
1476 return res; 1475 return res;
1477} 1476}
1478 1477
1479 1478
1480bool iPAQ::setDisplayBrightness ( int bright ) 1479bool iPAQ::setDisplayBrightness ( int bright )
1481{ 1480{
1482 bool res = false; 1481 bool res = false;
1483 int fd; 1482 int fd;
1484 1483
1485 if ( bright > 255 ) 1484 if ( bright > 255 )
1486 bright = 255; 1485 bright = 255;
1487 if ( bright < 0 ) 1486 if ( bright < 0 )
1488 bright = 0; 1487 bright = 0;
1489 1488
1490 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1489 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1491 FLITE_IN bl; 1490 FLITE_IN bl;
1492 bl. mode = 1; 1491 bl. mode = 1;
1493 bl. pwr = bright ? 1 : 0; 1492 bl. pwr = bright ? 1 : 0;
1494 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1493 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1495 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1494 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1496 ::close ( fd ); 1495 ::close ( fd );
1497 } 1496 }
1498 return res; 1497 return res;
1499} 1498}
1500 1499
1501int iPAQ::displayBrightnessResolution ( ) const 1500int iPAQ::displayBrightnessResolution ( ) const
1502{ 1501{
1503 switch ( model ( )) { 1502 switch ( model ( )) {
1504 case Model_iPAQ_H31xx: 1503 case Model_iPAQ_H31xx:
1505 case Model_iPAQ_H36xx: 1504 case Model_iPAQ_H36xx:
1506 case Model_iPAQ_H37xx: 1505 case Model_iPAQ_H37xx:
1507 return 128; // really 256, but >128 could damage the LCD 1506 return 128; // really 256, but >128 could damage the LCD
1508 1507
1509 case Model_iPAQ_H38xx: 1508 case Model_iPAQ_H38xx:
1510 case Model_iPAQ_H39xx: 1509 case Model_iPAQ_H39xx:
1511 return 64; 1510 return 64;
1512 case Model_iPAQ_H5xxx: 1511 case Model_iPAQ_H5xxx:
1513 return 255; 1512 return 255;
1514 1513
1515 default: 1514 default:
1516 return 2; 1515 return 2;
1517 } 1516 }
1518} 1517}
1519 1518
1520 1519
1521bool iPAQ::hasLightSensor ( ) const 1520bool iPAQ::hasLightSensor ( ) const
1522{ 1521{
1523 return true; 1522 return true;
1524} 1523}
1525 1524
1526int iPAQ::readLightSensor ( ) 1525int iPAQ::readLightSensor ( )
1527{ 1526{
1528 int fd; 1527 int fd;
1529 int val = -1; 1528 int val = -1;
1530 1529
1531 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1530 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1532 char buffer [8]; 1531 char buffer [8];
1533 1532
1534 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1533 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1535 char *endptr; 1534 char *endptr;
1536 1535
1537 buffer [4] = 0; 1536 buffer [4] = 0;
1538 val = ::strtol ( buffer + 2, &endptr, 16 ); 1537 val = ::strtol ( buffer + 2, &endptr, 16 );
1539 1538
1540 if ( *endptr != 0 ) 1539 if ( *endptr != 0 )
1541 val = -1; 1540 val = -1;
1542 } 1541 }
1543 ::close ( fd ); 1542 ::close ( fd );
1544 } 1543 }
1545 1544
1546 return val; 1545 return val;
1547} 1546}
1548 1547
1549int iPAQ::lightSensorResolution ( ) const 1548int iPAQ::lightSensorResolution ( ) const
1550{ 1549{
1551 return 256; 1550 return 256;
1552} 1551}
1553 1552
1554/************************************************** 1553/**************************************************
1555 * 1554 *
1556 * Zaurus 1555 * Zaurus
1557 * 1556 *
1558 **************************************************/ 1557 **************************************************/
1559 1558
1560// Check whether this device is the sharp zaurus.. 1559// Check whether this device is the sharp zaurus..
1561// 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
1562// class up into individual classes. We need three classes 1561// class up into individual classes. We need three classes
1563// 1562//
1564// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 1563// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
1565// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 1564// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
1566// 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)
1567// 1566//