summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authorchicken <chicken>2003-11-02 20:12:26 (UTC)
committer chicken <chicken>2003-11-02 20:12:26 (UTC)
commit559f4034cd483845b107aa7180f56e701c1444e6 (patch) (unidiff)
treece5ed970a0cb49429b39d72173953adb24280a4e /libopie/odevice.cpp
parent1b73bc0cb5c1d6fe7363d7bf30d8ca1a467e3e8d (diff)
downloadopie-559f4034cd483845b107aa7180f56e701c1444e6.zip
opie-559f4034cd483845b107aa7180f56e701c1444e6.tar.gz
opie-559f4034cd483845b107aa7180f56e701c1444e6.tar.bz2
add iPAQ H5xxx support
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 13b4330..3edf8e7 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1,491 +1,491 @@
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#include <linux/soundcard.h> 26#include <linux/soundcard.h>
27#include <math.h> 27#include <math.h>
28 28
29#include <qapplication.h> 29#include <qapplication.h>
30 30
31#include <qfile.h> 31#include <qfile.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qpe/sound.h> 33#include <qpe/sound.h>
34#include <qpe/resource.h> 34#include <qpe/resource.h>
35#include <qpe/config.h> 35#include <qpe/config.h>
36#include <qpe/qcopenvelope_qws.h> 36#include <qpe/qcopenvelope_qws.h>
37 37
38#include "odevice.h" 38#include "odevice.h"
39 39
40#include <qwindowsystem_qws.h> 40#include <qwindowsystem_qws.h>
41 41
42#ifndef ARRAY_SIZE 42#ifndef ARRAY_SIZE
43#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 43#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
44#endif 44#endif
45 45
46// _IO and friends are only defined in kernel headers ... 46// _IO and friends are only defined in kernel headers ...
47 47
48#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 48#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
49 49
50#define OD_IO(type,number) OD_IOC(0,type,number,0) 50#define OD_IO(type,number) OD_IOC(0,type,number,0)
51#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 51#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
52#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 52#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
53#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 53#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
54 54
55using namespace Opie; 55using namespace Opie;
56 56
57class ODeviceData { 57class ODeviceData {
58public: 58public:
59 QString m_vendorstr; 59 QString m_vendorstr;
60 OVendor m_vendor; 60 OVendor m_vendor;
61 61
62 QString m_modelstr; 62 QString m_modelstr;
63 OModel m_model; 63 OModel m_model;
64 64
65 QString m_systemstr; 65 QString m_systemstr;
66 OSystem m_system; 66 OSystem m_system;
67 67
68 QString m_sysverstr; 68 QString m_sysverstr;
69 69
70 Transformation m_rotation; 70 Transformation m_rotation;
71 ODirection m_direction; 71 ODirection m_direction;
72 72
73 QValueList <ODeviceButton> *m_buttons; 73 QValueList <ODeviceButton> *m_buttons;
74 uint m_holdtime; 74 uint m_holdtime;
75 QStrList *m_cpu_frequencies; 75 QStrList *m_cpu_frequencies;
76}; 76};
77 77
78class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 78class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
79protected: 79protected:
80 virtual void init ( ); 80 virtual void init ( );
81 virtual void initButtons ( ); 81 virtual void initButtons ( );
82 82
83public: 83public:
84 virtual bool setSoftSuspend ( bool soft ); 84 virtual bool setSoftSuspend ( bool soft );
85 85
86 virtual bool setDisplayBrightness ( int b ); 86 virtual bool setDisplayBrightness ( int b );
87 virtual int displayBrightnessResolution ( ) const; 87 virtual int displayBrightnessResolution ( ) const;
88 88
89 virtual void alarmSound ( ); 89 virtual void alarmSound ( );
90 90
91 virtual QValueList <OLed> ledList ( ) const; 91 virtual QValueList <OLed> ledList ( ) const;
92 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 92 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
93 virtual OLedState ledState ( OLed led ) const; 93 virtual OLedState ledState ( OLed led ) const;
94 virtual bool setLedState ( OLed led, OLedState st ); 94 virtual bool setLedState ( OLed led, OLedState st );
95 95
96 virtual bool hasLightSensor ( ) const; 96 virtual bool hasLightSensor ( ) const;
97 virtual int readLightSensor ( ); 97 virtual int readLightSensor ( );
98 virtual int lightSensorResolution ( ) const; 98 virtual int lightSensorResolution ( ) const;
99 99
100protected: 100protected:
101 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 101 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
102 virtual void timerEvent ( QTimerEvent *te ); 102 virtual void timerEvent ( QTimerEvent *te );
103 103
104 int m_power_timer; 104 int m_power_timer;
105 105
106 OLedState m_leds [2]; 106 OLedState m_leds [2];
107}; 107};
108 108
109class Jornada : public ODevice { 109class Jornada : public ODevice {
110protected: 110protected:
111 virtual void init ( ); 111 virtual void init ( );
112 virtual void initButtons ( ); 112 //virtual void initButtons ( );
113public: 113public:
114 virtual bool setSoftSuspend ( bool soft ); 114 virtual bool setSoftSuspend ( bool soft );
115 virtual bool setDisplayBrightness ( int b ); 115 virtual bool setDisplayBrightness ( int b );
116 virtual int displayBrightnessResolution ( ) const; 116 virtual int displayBrightnessResolution ( ) const;
117 static bool isJornada(); 117 static bool isJornada();
118 118
119}; 119};
120 120
121class Zaurus : public ODevice { 121class Zaurus : public ODevice {
122protected: 122protected:
123 virtual void init ( ); 123 virtual void init ( );
124 virtual void initButtons ( ); 124 virtual void initButtons ( );
125 125
126public: 126public:
127 virtual bool setSoftSuspend ( bool soft ); 127 virtual bool setSoftSuspend ( bool soft );
128 128
129 virtual bool setDisplayBrightness ( int b ); 129 virtual bool setDisplayBrightness ( int b );
130 virtual int displayBrightnessResolution ( ) const; 130 virtual int displayBrightnessResolution ( ) const;
131 131
132 virtual void alarmSound ( ); 132 virtual void alarmSound ( );
133 virtual void keySound ( ); 133 virtual void keySound ( );
134 virtual void touchSound ( ); 134 virtual void touchSound ( );
135 135
136 virtual QValueList <OLed> ledList ( ) const; 136 virtual QValueList <OLed> ledList ( ) const;
137 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 137 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
138 virtual OLedState ledState ( OLed led ) const; 138 virtual OLedState ledState ( OLed led ) const;
139 virtual bool setLedState ( OLed led, OLedState st ); 139 virtual bool setLedState ( OLed led, OLedState st );
140 140
141 static bool isZaurus(); 141 static bool isZaurus();
142 142
143protected: 143protected:
144 virtual void buzzer ( int snd ); 144 virtual void buzzer ( int snd );
145 145
146 OLedState m_leds [1]; 146 OLedState m_leds [1];
147 bool m_embedix; 147 bool m_embedix;
148}; 148};
149 149
150class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 150class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
151protected: 151protected:
152 virtual void init ( ); 152 virtual void init ( );
153 virtual void initButtons ( ); 153 virtual void initButtons ( );
154 154
155public: 155public:
156 virtual bool setSoftSuspend ( bool soft ); 156 virtual bool setSoftSuspend ( bool soft );
157 virtual bool suspend(); 157 virtual bool suspend();
158 158
159 virtual bool setDisplayStatus( bool on ); 159 virtual bool setDisplayStatus( bool on );
160 virtual bool setDisplayBrightness ( int b ); 160 virtual bool setDisplayBrightness ( int b );
161 virtual int displayBrightnessResolution ( ) const; 161 virtual int displayBrightnessResolution ( ) const;
162 162
163 virtual void alarmSound ( ); 163 virtual void alarmSound ( );
164 164
165 virtual QValueList <OLed> ledList ( ) const; 165 virtual QValueList <OLed> ledList ( ) const;
166 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 166 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
167 virtual OLedState ledState ( OLed led ) const; 167 virtual OLedState ledState ( OLed led ) const;
168 virtual bool setLedState ( OLed led, OLedState st ); 168 virtual bool setLedState ( OLed led, OLedState st );
169 169
170protected: 170protected:
171 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 171 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
172 virtual void timerEvent ( QTimerEvent *te ); 172 virtual void timerEvent ( QTimerEvent *te );
173 173
174 int m_power_timer; 174 int m_power_timer;
175 175
176 OLedState m_leds [1]; //FIXME check if really only one 176 OLedState m_leds [1]; //FIXME check if really only one
177}; 177};
178 178
179class Ramses : public ODevice, public QWSServer::KeyboardFilter { 179class Ramses : public ODevice, public QWSServer::KeyboardFilter {
180protected: 180protected:
181 virtual void init ( ); 181 virtual void init ( );
182 182
183public: 183public:
184 virtual bool setSoftSuspend ( bool soft ); 184 virtual bool setSoftSuspend ( bool soft );
185 virtual bool suspend ( ); 185 virtual bool suspend ( );
186 186
187 virtual bool setDisplayStatus( bool on ); 187 virtual bool setDisplayStatus( bool on );
188 virtual bool setDisplayBrightness ( int b ); 188 virtual bool setDisplayBrightness ( int b );
189 virtual int displayBrightnessResolution ( ) const; 189 virtual int displayBrightnessResolution ( ) const;
190 virtual bool setDisplayContrast ( int b ); 190 virtual bool setDisplayContrast ( int b );
191 virtual int displayContrastResolution ( ) const; 191 virtual int displayContrastResolution ( ) const;
192 192
193protected: 193protected:
194 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 194 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
195 virtual void timerEvent ( QTimerEvent *te ); 195 virtual void timerEvent ( QTimerEvent *te );
196 196
197 int m_power_timer; 197 int m_power_timer;
198}; 198};
199 199
200struct i_button { 200struct i_button {
201 uint model; 201 uint model;
202 Qt::Key code; 202 Qt::Key code;
203 char *utext; 203 char *utext;
204 char *pix; 204 char *pix;
205 char *fpressedservice; 205 char *fpressedservice;
206 char *fpressedaction; 206 char *fpressedaction;
207 char *fheldservice; 207 char *fheldservice;
208 char *fheldaction; 208 char *fheldaction;
209} ipaq_buttons [] = { 209} ipaq_buttons [] = {
210 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 210 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
211 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 211 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
212 "devicebuttons/ipaq_calendar", 212 "devicebuttons/ipaq_calendar",
213 "datebook", "nextView()", 213 "datebook", "nextView()",
214 "today", "raise()" }, 214 "today", "raise()" },
215 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 215 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
216 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 216 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
217 "devicebuttons/ipaq_contact", 217 "devicebuttons/ipaq_contact",
218 "addressbook", "raise()", 218 "addressbook", "raise()",
219 "addressbook", "beamBusinessCard()" }, 219 "addressbook", "beamBusinessCard()" },
220 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 220 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
221 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 221 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
222 "devicebuttons/ipaq_menu", 222 "devicebuttons/ipaq_menu",
223 "QPE/TaskBar", "toggleMenu()", 223 "QPE/TaskBar", "toggleMenu()",
224 "QPE/TaskBar", "toggleStartMenu()" }, 224 "QPE/TaskBar", "toggleStartMenu()" },
225 { Model_iPAQ_H38xx | Model_iPAQ_H39xx, 225 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
226 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 226 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
227 "devicebuttons/ipaq_mail", 227 "devicebuttons/ipaq_mail",
228 "mail", "raise()", 228 "mail", "raise()",
229 "mail", "newMail()" }, 229 "mail", "newMail()" },
230 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 230 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
231 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 231 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
232 "devicebuttons/ipaq_home", 232 "devicebuttons/ipaq_home",
233 "QPE/Launcher", "home()", 233 "QPE/Launcher", "home()",
234 "buttonsettings", "raise()" }, 234 "buttonsettings", "raise()" },
235 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 235 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
236 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 236 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
237 "devicebuttons/ipaq_record", 237 "devicebuttons/ipaq_record",
238 "QPE/VMemo", "toggleRecord()", 238 "QPE/VMemo", "toggleRecord()",
239 "sound", "raise()" }, 239 "sound", "raise()" },
240}; 240};
241 241
242struct z_button { 242struct z_button {
243 Qt::Key code; 243 Qt::Key code;
244 char *utext; 244 char *utext;
245 char *pix; 245 char *pix;
246 char *fpressedservice; 246 char *fpressedservice;
247 char *fpressedaction; 247 char *fpressedaction;
248 char *fheldservice; 248 char *fheldservice;
249 char *fheldaction; 249 char *fheldaction;
250} z_buttons [] = { 250} z_buttons [] = {
251 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 251 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
252 "devicebuttons/z_calendar", 252 "devicebuttons/z_calendar",
253 "datebook", "nextView()", 253 "datebook", "nextView()",
254 "today", "raise()" }, 254 "today", "raise()" },
255 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 255 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
256 "devicebuttons/z_contact", 256 "devicebuttons/z_contact",
257 "addressbook", "raise()", 257 "addressbook", "raise()",
258 "addressbook", "beamBusinessCard()" }, 258 "addressbook", "beamBusinessCard()" },
259 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 259 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
260 "devicebuttons/z_home", 260 "devicebuttons/z_home",
261 "QPE/Launcher", "home()", 261 "QPE/Launcher", "home()",
262 "buttonsettings", "raise()" }, 262 "buttonsettings", "raise()" },
263 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 263 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
264 "devicebuttons/z_menu", 264 "devicebuttons/z_menu",
265 "QPE/TaskBar", "toggleMenu()", 265 "QPE/TaskBar", "toggleMenu()",
266 "QPE/TaskBar", "toggleStartMenu()" }, 266 "QPE/TaskBar", "toggleStartMenu()" },
267 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 267 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
268 "devicebuttons/z_mail", 268 "devicebuttons/z_mail",
269 "mail", "raise()", 269 "mail", "raise()",
270 "mail", "newMail()" }, 270 "mail", "newMail()" },
271}; 271};
272 272
273struct z_button z_buttons_c700 [] = { 273struct z_button z_buttons_c700 [] = {
274 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 274 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
275 "devicebuttons/z_calendar", 275 "devicebuttons/z_calendar",
276 "datebook", "nextView()", 276 "datebook", "nextView()",
277 "today", "raise()" }, 277 "today", "raise()" },
278 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 278 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
279 "devicebuttons/z_contact", 279 "devicebuttons/z_contact",
280 "addressbook", "raise()", 280 "addressbook", "raise()",
281 "addressbook", "beamBusinessCard()" }, 281 "addressbook", "beamBusinessCard()" },
282 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 282 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
283 "devicebuttons/z_home", 283 "devicebuttons/z_home",
284 "QPE/Launcher", "home()", 284 "QPE/Launcher", "home()",
285 "buttonsettings", "raise()" }, 285 "buttonsettings", "raise()" },
286 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 286 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
287 "devicebuttons/z_menu", 287 "devicebuttons/z_menu",
288 "QPE/TaskBar", "toggleMenu()", 288 "QPE/TaskBar", "toggleMenu()",
289 "QPE/TaskBar", "toggleStartMenu()" }, 289 "QPE/TaskBar", "toggleStartMenu()" },
290 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 290 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
291 "", 291 "",
292 "QPE/Rotation", "flip()", 292 "QPE/Rotation", "flip()",
293 "QPE/Rotation", "flip()" }, 293 "QPE/Rotation", "flip()" },
294}; 294};
295 295
296struct s_button { 296struct s_button {
297 uint model; 297 uint model;
298 Qt::Key code; 298 Qt::Key code;
299 char *utext; 299 char *utext;
300 char *pix; 300 char *pix;
301 char *fpressedservice; 301 char *fpressedservice;
302 char *fpressedaction; 302 char *fpressedaction;
303 char *fheldservice; 303 char *fheldservice;
304 char *fheldaction; 304 char *fheldaction;
305} simpad_buttons [] = { 305} simpad_buttons [] = {
306 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 306 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
307 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"), 307 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"),
308 "devicebuttons/simpad_lower_up", 308 "devicebuttons/simpad_lower_up",
309 "datebook", "nextView()", 309 "datebook", "nextView()",
310 "today", "raise()" }, 310 "today", "raise()" },
311 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 311 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
312 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"), 312 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"),
313 "devicebuttons/simpad_lower_down", 313 "devicebuttons/simpad_lower_down",
314 "addressbook", "raise()", 314 "addressbook", "raise()",
315 "addressbook", "beamBusinessCard()" }, 315 "addressbook", "beamBusinessCard()" },
316 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 316 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
317 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"), 317 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"),
318 "devicebuttons/simpad_lower_right", 318 "devicebuttons/simpad_lower_right",
319 "QPE/TaskBar", "toggleMenu()", 319 "QPE/TaskBar", "toggleMenu()",
320 "QPE/TaskBar", "toggleStartMenu()" }, 320 "QPE/TaskBar", "toggleStartMenu()" },
321 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 321 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
322 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 322 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
323 "devicebuttons/simpad_lower_left", 323 "devicebuttons/simpad_lower_left",
324 "mail", "raise()", 324 "mail", "raise()",
325 "mail", "newMail()" }, 325 "mail", "newMail()" },
326 326
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_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 328 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
329 "devicebuttons/simpad_upper_up", 329 "devicebuttons/simpad_upper_up",
330 "QPE/Launcher", "home()", 330 "QPE/Launcher", "home()",
331 "buttonsettings", "raise()" }, 331 "buttonsettings", "raise()" },
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_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 333 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
334 "devicebuttons/simpad_upper_down", 334 "devicebuttons/simpad_upper_down",
335 "addressbook", "raise()", 335 "addressbook", "raise()",
336 "addressbook", "beamBusinessCard()" }, 336 "addressbook", "beamBusinessCard()" },
337 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 337 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
338 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 338 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
339 "devicebuttons/simpad_upper_right", 339 "devicebuttons/simpad_upper_right",
340 "QPE/TaskBar", "toggleMenu()", 340 "QPE/TaskBar", "toggleMenu()",
341 "QPE/TaskBar", "toggleStartMenu()" }, 341 "QPE/TaskBar", "toggleStartMenu()" },
342 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 342 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
343 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 343 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
344 "devicebuttons/simpad_upper_left", 344 "devicebuttons/simpad_upper_left",
345 "QPE/Rotation", "flip()", 345 "QPE/Rotation", "flip()",
346 "QPE/Rotation", "flip()" }, 346 "QPE/Rotation", "flip()" },
347 /* 347 /*
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_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 349 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
350 "devicebuttons/simpad_lower_upper", 350 "devicebuttons/simpad_lower_upper",
351 "QPE/Launcher", "home()", 351 "QPE/Launcher", "home()",
352 "buttonsettings", "raise()" }, 352 "buttonsettings", "raise()" },
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_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 354 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
355 "devicebuttons/simpad_upper_lower", 355 "devicebuttons/simpad_upper_lower",
356 "QPE/Launcher", "home()", 356 "QPE/Launcher", "home()",
357 "buttonsettings", "raise()" }, 357 "buttonsettings", "raise()" },
358 */ 358 */
359}; 359};
360 360
361struct r_button { 361struct r_button {
362 uint model; 362 uint model;
363 Qt::Key code; 363 Qt::Key code;
364 char *utext; 364 char *utext;
365 char *pix; 365 char *pix;
366 char *fpressedservice; 366 char *fpressedservice;
367 char *fpressedaction; 367 char *fpressedaction;
368 char *fheldservice; 368 char *fheldservice;
369 char *fheldaction; 369 char *fheldaction;
370} ramses_buttons [] = { 370} ramses_buttons [] = {
371 { Model_Ramses_MNCI, 371 { Model_Ramses_MNCI,
372 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 372 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
373 "devicebuttons/z_menu", 373 "devicebuttons/z_menu",
374 "QPE/TaskBar", "toggleMenu()", 374 "QPE/TaskBar", "toggleMenu()",
375 "QPE/TaskBar", "toggleStartMenu()" }, 375 "QPE/TaskBar", "toggleStartMenu()" },
376 { Model_Ramses_MNCI, 376 { Model_Ramses_MNCI,
377 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 377 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
378 "devicebuttons/ipaq_home", 378 "devicebuttons/ipaq_home",
379 "QPE/Launcher", "home()", 379 "QPE/Launcher", "home()",
380 "buttonsettings", "raise()" }, 380 "buttonsettings", "raise()" },
381}; 381};
382 382
383class Yopy : public ODevice { 383class Yopy : public ODevice {
384protected: 384protected:
385 virtual void init ( ); 385 virtual void init ( );
386 virtual void initButtons ( ); 386 virtual void initButtons ( );
387 387
388public: 388public:
389 virtual bool suspend ( ); 389 virtual bool suspend ( );
390 390
391 virtual bool setDisplayBrightness ( int b ); 391 virtual bool setDisplayBrightness ( int b );
392 virtual int displayBrightnessResolution ( ) const; 392 virtual int displayBrightnessResolution ( ) const;
393 393
394 static bool isYopy ( ); 394 static bool isYopy ( );
395}; 395};
396 396
397struct yopy_button { 397struct yopy_button {
398 Qt::Key code; 398 Qt::Key code;
399 char *utext; 399 char *utext;
400 char *pix; 400 char *pix;
401 char *fpressedservice; 401 char *fpressedservice;
402 char *fpressedaction; 402 char *fpressedaction;
403 char *fheldservice; 403 char *fheldservice;
404 char *fheldaction; 404 char *fheldaction;
405} yopy_buttons [] = { 405} yopy_buttons [] = {
406 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"), 406 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
407 "devicebuttons/yopy_action", 407 "devicebuttons/yopy_action",
408 "datebook", "nextView()", 408 "datebook", "nextView()",
409 "today", "raise()" }, 409 "today", "raise()" },
410 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"), 410 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
411 "devicebuttons/yopy_ok", 411 "devicebuttons/yopy_ok",
412 "addressbook", "raise()", 412 "addressbook", "raise()",
413 "addressbook", "beamBusinessCard()" }, 413 "addressbook", "beamBusinessCard()" },
414 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"), 414 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
415 "devicebuttons/yopy_end", 415 "devicebuttons/yopy_end",
416 "QPE/Launcher", "home()", 416 "QPE/Launcher", "home()",
417 "buttonsettings", "raise()" }, 417 "buttonsettings", "raise()" },
418}; 418};
419 419
420static QCString makeChannel ( const char *str ) 420static QCString makeChannel ( const char *str )
421{ 421{
422 if ( str && !::strchr ( str, '/' )) 422 if ( str && !::strchr ( str, '/' ))
423 return QCString ( "QPE/Application/" ) + str; 423 return QCString ( "QPE/Application/" ) + str;
424 else 424 else
425 return str; 425 return str;
426} 426}
427 427
428static inline bool isQWS() 428static inline bool isQWS()
429{ 429{
430 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 430 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
431} 431}
432 432
433ODevice *ODevice::inst ( ) 433ODevice *ODevice::inst ( )
434{ 434{
435 static ODevice *dev = 0; 435 static ODevice *dev = 0;
436 436
437 if ( !dev ) { 437 if ( !dev ) {
438 if ( QFile::exists ( "/proc/hal/model" )) 438 if ( QFile::exists ( "/proc/hal/model" ))
439 dev = new iPAQ ( ); 439 dev = new iPAQ ( );
440 else if ( Zaurus::isZaurus() ) 440 else if ( Zaurus::isZaurus() )
441 dev = new Zaurus ( ); 441 dev = new Zaurus ( );
442 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) 442 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" ))
443 dev = new SIMpad ( ); 443 dev = new SIMpad ( );
444 else if ( QFile::exists ( "/proc/sys/board/name" )) 444 else if ( QFile::exists ( "/proc/sys/board/name" ))
445 dev = new Ramses ( ); 445 dev = new Ramses ( );
446 else if ( Yopy::isYopy() ) 446 else if ( Yopy::isYopy() )
447 dev = new Yopy ( ); 447 dev = new Yopy ( );
448 else if ( Jornada::isJornada() ) 448 else if ( Jornada::isJornada() )
449 dev = new Jornada ( ); 449 dev = new Jornada ( );
450 else 450 else
451 dev = new ODevice ( ); 451 dev = new ODevice ( );
452 dev-> init ( ); 452 dev-> init ( );
453 } 453 }
454 return dev; 454 return dev;
455} 455}
456 456
457 457
458/************************************************** 458/**************************************************
459 * 459 *
460 * common 460 * common
461 * 461 *
462 **************************************************/ 462 **************************************************/
463 463
464 464
465ODevice::ODevice ( ) 465ODevice::ODevice ( )
466{ 466{
467 d = new ODeviceData; 467 d = new ODeviceData;
468 468
469 d-> m_modelstr = "Unknown"; 469 d-> m_modelstr = "Unknown";
470 d-> m_model = Model_Unknown; 470 d-> m_model = Model_Unknown;
471 d-> m_vendorstr = "Unknown"; 471 d-> m_vendorstr = "Unknown";
472 d-> m_vendor = Vendor_Unknown; 472 d-> m_vendor = Vendor_Unknown;
473 d-> m_systemstr = "Unknown"; 473 d-> m_systemstr = "Unknown";
474 d-> m_system = System_Unknown; 474 d-> m_system = System_Unknown;
475 d-> m_sysverstr = "0.0"; 475 d-> m_sysverstr = "0.0";
476 d-> m_rotation = Rot0; 476 d-> m_rotation = Rot0;
477 d-> m_direction = CW; 477 d-> m_direction = CW;
478 478
479 d-> m_holdtime = 1000; // 1000ms 479 d-> m_holdtime = 1000; // 1000ms
480 d-> m_buttons = 0; 480 d-> m_buttons = 0;
481 d-> m_cpu_frequencies = new QStrList; 481 d-> m_cpu_frequencies = new QStrList;
482} 482}
483 483
484void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 484void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
485{ 485{
486 if ( msg == "deviceButtonMappingChanged()" ) { 486 if ( msg == "deviceButtonMappingChanged()" ) {
487 reloadButtonMapping ( ); 487 reloadButtonMapping ( );
488 } 488 }
489} 489}
490 490
491void ODevice::init ( ) 491void ODevice::init ( )
@@ -865,830 +865,837 @@ bool ODevice::setCurrentCpuFrequency(uint index)
865 865
866 return false; 866 return false;
867} 867}
868 868
869 869
870/** 870/**
871 * @return a list of hardware buttons 871 * @return a list of hardware buttons
872 */ 872 */
873const QValueList <ODeviceButton> &ODevice::buttons ( ) 873const QValueList <ODeviceButton> &ODevice::buttons ( )
874{ 874{
875 initButtons ( ); 875 initButtons ( );
876 876
877 return *d-> m_buttons; 877 return *d-> m_buttons;
878} 878}
879 879
880/** 880/**
881 * @return The amount of time that would count as a hold 881 * @return The amount of time that would count as a hold
882 */ 882 */
883uint ODevice::buttonHoldTime ( ) const 883uint ODevice::buttonHoldTime ( ) const
884{ 884{
885 return d-> m_holdtime; 885 return d-> m_holdtime;
886} 886}
887 887
888/** 888/**
889 * This method return a ODeviceButton for a key code 889 * This method return a ODeviceButton for a key code
890 * or 0 if no special hardware button is available for the device 890 * or 0 if no special hardware button is available for the device
891 * 891 *
892 * @return The devicebutton or 0l 892 * @return The devicebutton or 0l
893 * @see ODeviceButton 893 * @see ODeviceButton
894 */ 894 */
895const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 895const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
896{ 896{
897 initButtons ( ); 897 initButtons ( );
898 898
899 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) { 899 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) {
900 if ( (*it). keycode ( ) == code ) 900 if ( (*it). keycode ( ) == code )
901 return &(*it); 901 return &(*it);
902 } 902 }
903 return 0; 903 return 0;
904} 904}
905 905
906void ODevice::reloadButtonMapping ( ) 906void ODevice::reloadButtonMapping ( )
907{ 907{
908 initButtons ( ); 908 initButtons ( );
909 909
910 Config cfg ( "ButtonSettings" ); 910 Config cfg ( "ButtonSettings" );
911 911
912 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 912 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
913 ODeviceButton &b = ( *d-> m_buttons ) [i]; 913 ODeviceButton &b = ( *d-> m_buttons ) [i];
914 QString group = "Button" + QString::number ( i ); 914 QString group = "Button" + QString::number ( i );
915 915
916 QCString pch, hch; 916 QCString pch, hch;
917 QCString pm, hm; 917 QCString pm, hm;
918 QByteArray pdata, hdata; 918 QByteArray pdata, hdata;
919 919
920 if ( cfg. hasGroup ( group )) { 920 if ( cfg. hasGroup ( group )) {
921 cfg. setGroup ( group ); 921 cfg. setGroup ( group );
922 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 922 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
923 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 923 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
924 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 924 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
925 925
926 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 926 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
927 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 927 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
928 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 928 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
929 } 929 }
930 930
931 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 931 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
932 932
933 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 933 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
934 } 934 }
935} 935}
936 936
937void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 937void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
938{ 938{
939 initButtons ( ); 939 initButtons ( );
940 940
941 QString mb_chan; 941 QString mb_chan;
942 942
943 if ( button >= (int) d-> m_buttons-> count ( )) 943 if ( button >= (int) d-> m_buttons-> count ( ))
944 return; 944 return;
945 945
946 ODeviceButton &b = ( *d-> m_buttons ) [button]; 946 ODeviceButton &b = ( *d-> m_buttons ) [button];
947 b. setPressedAction ( action ); 947 b. setPressedAction ( action );
948 948
949 mb_chan=b. pressedAction ( ). channel ( ); 949 mb_chan=b. pressedAction ( ). channel ( );
950 950
951 Config buttonFile ( "ButtonSettings" ); 951 Config buttonFile ( "ButtonSettings" );
952 buttonFile. setGroup ( "Button" + QString::number ( button )); 952 buttonFile. setGroup ( "Button" + QString::number ( button ));
953 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 953 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
954 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 954 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
955 955
956 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 956 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
957 957
958 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 958 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
959} 959}
960 960
961void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 961void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
962{ 962{
963 initButtons ( ); 963 initButtons ( );
964 964
965 if ( button >= (int) d-> m_buttons-> count ( )) 965 if ( button >= (int) d-> m_buttons-> count ( ))
966 return; 966 return;
967 967
968 ODeviceButton &b = ( *d-> m_buttons ) [button]; 968 ODeviceButton &b = ( *d-> m_buttons ) [button];
969 b. setHeldAction ( action ); 969 b. setHeldAction ( action );
970 970
971 Config buttonFile ( "ButtonSettings" ); 971 Config buttonFile ( "ButtonSettings" );
972 buttonFile. setGroup ( "Button" + QString::number ( button )); 972 buttonFile. setGroup ( "Button" + QString::number ( button ));
973 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 973 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
974 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 974 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
975 975
976 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 976 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
977 977
978 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 978 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
979} 979}
980void ODevice::virtual_hook(int, void* ){ 980void ODevice::virtual_hook(int, void* ){
981 981
982} 982}
983 983
984/************************************************** 984/**************************************************
985 * 985 *
986 * Yopy 3500/3700 986 * Yopy 3500/3700
987 * 987 *
988 **************************************************/ 988 **************************************************/
989 989
990bool Yopy::isYopy ( ) 990bool Yopy::isYopy ( )
991{ 991{
992 QFile f( "/proc/cpuinfo" ); 992 QFile f( "/proc/cpuinfo" );
993 if ( f. open ( IO_ReadOnly ) ) { 993 if ( f. open ( IO_ReadOnly ) ) {
994 QTextStream ts ( &f ); 994 QTextStream ts ( &f );
995 QString line; 995 QString line;
996 while( line = ts. readLine ( ) ) { 996 while( line = ts. readLine ( ) ) {
997 if ( line. left ( 8 ) == "Hardware" ) { 997 if ( line. left ( 8 ) == "Hardware" ) {
998 int loc = line. find ( ":" ); 998 int loc = line. find ( ":" );
999 if ( loc != -1 ) { 999 if ( loc != -1 ) {
1000 QString model = 1000 QString model =
1001 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1001 line. mid ( loc + 2 ). simplifyWhiteSpace( );
1002 return ( model == "Yopy" ); 1002 return ( model == "Yopy" );
1003 } 1003 }
1004 } 1004 }
1005 } 1005 }
1006 } 1006 }
1007 return false; 1007 return false;
1008} 1008}
1009 1009
1010void Yopy::init ( ) 1010void Yopy::init ( )
1011{ 1011{
1012 d-> m_vendorstr = "G.Mate"; 1012 d-> m_vendorstr = "G.Mate";
1013 d-> m_vendor = Vendor_GMate; 1013 d-> m_vendor = Vendor_GMate;
1014 d-> m_modelstr = "Yopy3700"; 1014 d-> m_modelstr = "Yopy3700";
1015 d-> m_model = Model_Yopy_3700; 1015 d-> m_model = Model_Yopy_3700;
1016 d-> m_rotation = Rot0; 1016 d-> m_rotation = Rot0;
1017 1017
1018 d-> m_systemstr = "Linupy"; 1018 d-> m_systemstr = "Linupy";
1019 d-> m_system = System_Linupy; 1019 d-> m_system = System_Linupy;
1020 1020
1021 QFile f ( "/etc/issue" ); 1021 QFile f ( "/etc/issue" );
1022 if ( f. open ( IO_ReadOnly )) { 1022 if ( f. open ( IO_ReadOnly )) {
1023 QTextStream ts ( &f ); 1023 QTextStream ts ( &f );
1024 ts.readLine(); 1024 ts.readLine();
1025 d-> m_sysverstr = ts. readLine ( ); 1025 d-> m_sysverstr = ts. readLine ( );
1026 f. close ( ); 1026 f. close ( );
1027 } 1027 }
1028} 1028}
1029 1029
1030void Yopy::initButtons ( ) 1030void Yopy::initButtons ( )
1031{ 1031{
1032 if ( d-> m_buttons ) 1032 if ( d-> m_buttons )
1033 return; 1033 return;
1034 1034
1035 d-> m_buttons = new QValueList <ODeviceButton>; 1035 d-> m_buttons = new QValueList <ODeviceButton>;
1036 1036
1037 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) { 1037 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
1038 1038
1039 yopy_button *ib = yopy_buttons + i; 1039 yopy_button *ib = yopy_buttons + i;
1040 1040
1041 ODeviceButton b; 1041 ODeviceButton b;
1042 1042
1043 b. setKeycode ( ib-> code ); 1043 b. setKeycode ( ib-> code );
1044 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1044 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1045 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1045 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1046 b. setFactoryPresetPressedAction 1046 b. setFactoryPresetPressedAction
1047 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); 1047 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1048 b. setFactoryPresetHeldAction 1048 b. setFactoryPresetHeldAction
1049 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); 1049 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1050 1050
1051 d-> m_buttons-> append ( b ); 1051 d-> m_buttons-> append ( b );
1052 } 1052 }
1053 reloadButtonMapping ( ); 1053 reloadButtonMapping ( );
1054 1054
1055 QCopChannel *sysch = new QCopChannel("QPE/System", this); 1055 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1056 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 1056 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )),
1057 this, SLOT(systemMessage(const QCString &, const QByteArray & ))); 1057 this, SLOT(systemMessage(const QCString &, const QByteArray & )));
1058} 1058}
1059 1059
1060bool Yopy::suspend() 1060bool Yopy::suspend()
1061{ 1061{
1062 /* Opie for Yopy does not implement its own power management at the 1062 /* Opie for Yopy does not implement its own power management at the
1063 moment. The public version runs parallel to X, and relies on the 1063 moment. The public version runs parallel to X, and relies on the
1064 existing power management features. */ 1064 existing power management features. */
1065 return false; 1065 return false;
1066} 1066}
1067 1067
1068bool Yopy::setDisplayBrightness(int bright) 1068bool Yopy::setDisplayBrightness(int bright)
1069{ 1069{
1070 /* The code here works, but is disabled as the current version runs 1070 /* The code here works, but is disabled as the current version runs
1071 parallel to X, and relies on the existing backlight demon. */ 1071 parallel to X, and relies on the existing backlight demon. */
1072#if 0 1072#if 0
1073 if ( QFile::exists("/proc/sys/pm/light") ) { 1073 if ( QFile::exists("/proc/sys/pm/light") ) {
1074 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1074 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1075 if (fd >= 0 ) { 1075 if (fd >= 0 ) {
1076 if (bright) 1076 if (bright)
1077 ::write(fd, "1\n", 2); 1077 ::write(fd, "1\n", 2);
1078 else 1078 else
1079 ::write(fd, "0\n", 2); 1079 ::write(fd, "0\n", 2);
1080 ::close(fd); 1080 ::close(fd);
1081 return true; 1081 return true;
1082 } 1082 }
1083 } 1083 }
1084#endif 1084#endif
1085 return false; 1085 return false;
1086} 1086}
1087 1087
1088int Yopy::displayBrightnessResolution() const 1088int Yopy::displayBrightnessResolution() const
1089{ 1089{
1090 return 2; 1090 return 2;
1091} 1091}
1092 1092
1093/************************************************** 1093/**************************************************
1094 * 1094 *
1095 * iPAQ 1095 * iPAQ
1096 * 1096 *
1097 **************************************************/ 1097 **************************************************/
1098 1098
1099void iPAQ::init ( ) 1099void iPAQ::init ( )
1100{ 1100{
1101 d-> m_vendorstr = "HP"; 1101 d-> m_vendorstr = "HP";
1102 d-> m_vendor = Vendor_HP; 1102 d-> m_vendor = Vendor_HP;
1103 1103
1104 QFile f ( "/proc/hal/model" ); 1104 QFile f ( "/proc/hal/model" );
1105 1105
1106 if ( f. open ( IO_ReadOnly )) { 1106 if ( f. open ( IO_ReadOnly )) {
1107 QTextStream ts ( &f ); 1107 QTextStream ts ( &f );
1108 1108
1109 d-> m_modelstr = "H" + ts. readLine ( ); 1109 d-> m_modelstr = "H" + ts. readLine ( );
1110 1110
1111 if ( d-> m_modelstr == "H3100" ) 1111 if ( d-> m_modelstr == "H3100" )
1112 d-> m_model = Model_iPAQ_H31xx; 1112 d-> m_model = Model_iPAQ_H31xx;
1113 else if ( d-> m_modelstr == "H3600" ) 1113 else if ( d-> m_modelstr == "H3600" )
1114 d-> m_model = Model_iPAQ_H36xx; 1114 d-> m_model = Model_iPAQ_H36xx;
1115 else if ( d-> m_modelstr == "H3700" ) 1115 else if ( d-> m_modelstr == "H3700" )
1116 d-> m_model = Model_iPAQ_H37xx; 1116 d-> m_model = Model_iPAQ_H37xx;
1117 else if ( d-> m_modelstr == "H3800" ) 1117 else if ( d-> m_modelstr == "H3800" )
1118 d-> m_model = Model_iPAQ_H38xx; 1118 d-> m_model = Model_iPAQ_H38xx;
1119 else if ( d-> m_modelstr == "H3900" ) 1119 else if ( d-> m_modelstr == "H3900" )
1120 d-> m_model = Model_iPAQ_H39xx; 1120 d-> m_model = Model_iPAQ_H39xx;
1121 else if ( d-> m_modelstr == "H5400" )
1122 d-> m_model = Model_iPAQ_H5xxx;
1121 else 1123 else
1122 d-> m_model = Model_Unknown; 1124 d-> m_model = Model_Unknown;
1123 1125
1124 f. close ( ); 1126 f. close ( );
1125 } 1127 }
1126 1128
1127 switch ( d-> m_model ) { 1129 switch ( d-> m_model ) {
1128 case Model_iPAQ_H31xx: 1130 case Model_iPAQ_H31xx:
1129 case Model_iPAQ_H38xx: 1131 case Model_iPAQ_H38xx:
1130 d-> m_rotation = Rot90; 1132 d-> m_rotation = Rot90;
1131 break; 1133 break;
1132 case Model_iPAQ_H36xx: 1134 case Model_iPAQ_H36xx:
1133 case Model_iPAQ_H37xx: 1135 case Model_iPAQ_H37xx:
1134 case Model_iPAQ_H39xx: 1136 case Model_iPAQ_H39xx:
1135 default: 1137 default:
1136 d-> m_rotation = Rot270; 1138 d-> m_rotation = Rot270;
1137 break; 1139 break;
1138 } 1140 case Model_iPAQ_H5xxx:
1141 d-> m_rotation = Rot0;
1142 }
1139 1143
1140 f. setName ( "/etc/familiar-version" ); 1144 f. setName ( "/etc/familiar-version" );
1141 if ( f. open ( IO_ReadOnly )) { 1145 if ( f. open ( IO_ReadOnly )) {
1142 d-> m_systemstr = "Familiar"; 1146 d-> m_systemstr = "Familiar";
1143 d-> m_system = System_Familiar; 1147 d-> m_system = System_Familiar;
1144 1148
1145 QTextStream ts ( &f ); 1149 QTextStream ts ( &f );
1146 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1150 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1147 1151
1148 f. close ( ); 1152 f. close ( );
1149 } else { 1153 } else {
1150 f. setName ( "/etc/oz_version" ); 1154 f. setName ( "/etc/oz_version" );
1151 1155
1152 if ( f. open ( IO_ReadOnly )) { 1156 if ( f. open ( IO_ReadOnly )) {
1153 d-> m_systemstr = "OpenEmbedded/iPaq"; 1157 d-> m_systemstr = "OpenEmbedded/iPaq";
1154 d-> m_system = System_Familiar; 1158 d-> m_system = System_Familiar;
1155 1159
1156 QTextStream ts ( &f ); 1160 QTextStream ts ( &f );
1157 ts.setDevice ( &f ); 1161 ts.setDevice ( &f );
1158 d-> m_sysverstr = ts. readLine ( ); 1162 d-> m_sysverstr = ts. readLine ( );
1159 f. close ( ); 1163 f. close ( );
1160 } 1164 }
1161 } 1165 }
1162 1166
1163 1167
1164 1168
1165 1169
1166 1170
1167 m_leds [0] = m_leds [1] = Led_Off; 1171 m_leds [0] = m_leds [1] = Led_Off;
1168 1172
1169 m_power_timer = 0; 1173 m_power_timer = 0;
1170 1174
1171} 1175}
1172 1176
1173void iPAQ::initButtons ( ) 1177void iPAQ::initButtons ( )
1174{ 1178{
1175 if ( d-> m_buttons ) 1179 if ( d-> m_buttons )
1176 return; 1180 return;
1177 1181
1178 if ( isQWS( ) ) 1182 if ( isQWS( ) )
1179 QWSServer::setKeyboardFilter ( this ); 1183 QWSServer::setKeyboardFilter ( this );
1180 1184
1181 d-> m_buttons = new QValueList <ODeviceButton>; 1185 d-> m_buttons = new QValueList <ODeviceButton>;
1182 1186
1183 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 1187 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
1184 i_button *ib = ipaq_buttons + i; 1188 i_button *ib = ipaq_buttons + i;
1185 ODeviceButton b; 1189 ODeviceButton b;
1186 1190
1187 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1191 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1188 b. setKeycode ( ib-> code ); 1192 b. setKeycode ( ib-> code );
1189 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1193 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1190 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1194 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1191 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1195 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1192 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1196 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1193 1197
1194 d-> m_buttons-> append ( b ); 1198 d-> m_buttons-> append ( b );
1195 } 1199 }
1196 } 1200 }
1197 reloadButtonMapping ( ); 1201 reloadButtonMapping ( );
1198 1202
1199 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1203 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1200 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1204 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1201} 1205}
1202 1206
1203 1207
1204//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1208//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1205 1209
1206typedef struct { 1210typedef struct {
1207 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1211 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1208 unsigned char TotalTime; /* Units of 5 seconds */ 1212 unsigned char TotalTime; /* Units of 5 seconds */
1209 unsigned char OnTime; /* units of 100m/s */ 1213 unsigned char OnTime; /* units of 100m/s */
1210 unsigned char OffTime; /* units of 100m/s */ 1214 unsigned char OffTime; /* units of 100m/s */
1211} LED_IN; 1215} LED_IN;
1212 1216
1213typedef struct { 1217typedef struct {
1214 unsigned char mode; 1218 unsigned char mode;
1215 unsigned char pwr; 1219 unsigned char pwr;
1216 unsigned char brightness; 1220 unsigned char brightness;
1217} FLITE_IN; 1221} FLITE_IN;
1218 1222
1219#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1223#define LED_ON OD_IOW( 'f', 5, LED_IN )
1220#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1224#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1221 1225
1222 1226
1223QValueList <OLed> iPAQ::ledList ( ) const 1227QValueList <OLed> iPAQ::ledList ( ) const
1224{ 1228{
1225 QValueList <OLed> vl; 1229 QValueList <OLed> vl;
1226 vl << Led_Power; 1230 vl << Led_Power;
1227 1231
1228 if ( d-> m_model == Model_iPAQ_H38xx ) 1232 if ( d-> m_model == Model_iPAQ_H38xx )
1229 vl << Led_BlueTooth; 1233 vl << Led_BlueTooth;
1230 return vl; 1234 return vl;
1231} 1235}
1232 1236
1233QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1237QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1234{ 1238{
1235 QValueList <OLedState> vl; 1239 QValueList <OLedState> vl;
1236 1240
1237 if ( l == Led_Power ) 1241 if ( l == Led_Power )
1238 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1242 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1239 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1243 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1240 vl << Led_Off; // << Led_On << ??? 1244 vl << Led_Off; // << Led_On << ???
1241 1245
1242 return vl; 1246 return vl;
1243} 1247}
1244 1248
1245OLedState iPAQ::ledState ( OLed l ) const 1249OLedState iPAQ::ledState ( OLed l ) const
1246{ 1250{
1247 switch ( l ) { 1251 switch ( l ) {
1248 case Led_Power: 1252 case Led_Power:
1249 return m_leds [0]; 1253 return m_leds [0];
1250 case Led_BlueTooth: 1254 case Led_BlueTooth:
1251 return m_leds [1]; 1255 return m_leds [1];
1252 default: 1256 default:
1253 return Led_Off; 1257 return Led_Off;
1254 } 1258 }
1255} 1259}
1256 1260
1257bool iPAQ::setLedState ( OLed l, OLedState st ) 1261bool iPAQ::setLedState ( OLed l, OLedState st )
1258{ 1262{
1259 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1263 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1260 1264
1261 if ( l == Led_Power ) { 1265 if ( l == Led_Power ) {
1262 if ( fd >= 0 ) { 1266 if ( fd >= 0 ) {
1263 LED_IN leds; 1267 LED_IN leds;
1264 ::memset ( &leds, 0, sizeof( leds )); 1268 ::memset ( &leds, 0, sizeof( leds ));
1265 leds. TotalTime = 0; 1269 leds. TotalTime = 0;
1266 leds. OnTime = 0; 1270 leds. OnTime = 0;
1267 leds. OffTime = 1; 1271 leds. OffTime = 1;
1268 leds. OffOnBlink = 2; 1272 leds. OffOnBlink = 2;
1269 1273
1270 switch ( st ) { 1274 switch ( st ) {
1271 case Led_Off : leds. OffOnBlink = 0; break; 1275 case Led_Off : leds. OffOnBlink = 0; break;
1272 case Led_On : leds. OffOnBlink = 1; break; 1276 case Led_On : leds. OffOnBlink = 1; break;
1273 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1277 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1274 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1278 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1275 } 1279 }
1276 1280
1277 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1281 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1278 m_leds [0] = st; 1282 m_leds [0] = st;
1279 return true; 1283 return true;
1280 } 1284 }
1281 } 1285 }
1282 } 1286 }
1283 return false; 1287 return false;
1284} 1288}
1285 1289
1286 1290
1287bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 1291bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
1288{ 1292{
1289 int newkeycode = keycode; 1293 int newkeycode = keycode;
1290 1294
1291 switch ( keycode ) { 1295 switch ( keycode ) {
1292 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 1296 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
1293 case HardKey_Menu: { 1297 case HardKey_Menu: {
1294 if (( d-> m_model == Model_iPAQ_H38xx ) || 1298 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1295 ( d-> m_model == Model_iPAQ_H39xx )) { 1299 ( d-> m_model == Model_iPAQ_H39xx ) ||
1300 ( d-> m_model == Model_iPAQ_H5xxx)) {
1296 newkeycode = HardKey_Mail; 1301 newkeycode = HardKey_Mail;
1297 } 1302 }
1298 break; 1303 break;
1299 } 1304 }
1300 1305
1301 // Rotate cursor keys 180° 1306 // Rotate cursor keys 180°
1302 case Key_Left : 1307 case Key_Left :
1303 case Key_Right: 1308 case Key_Right:
1304 case Key_Up : 1309 case Key_Up :
1305 case Key_Down : { 1310 case Key_Down : {
1306 if (( d-> m_model == Model_iPAQ_H31xx ) || 1311 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1307 ( d-> m_model == Model_iPAQ_H38xx )) { 1312 ( d-> m_model == Model_iPAQ_H38xx )) {
1308 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1313 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1309 } 1314 }
1310 break; 1315 break;
1311 } 1316 }
1312 1317
1313 // map Power Button short/long press to F34/F35 1318 // map Power Button short/long press to F34/F35
1314 case Key_SysReq: { 1319 case Key_SysReq: {
1315 if ( isPress ) { 1320 if ( isPress ) {
1316 if ( m_power_timer ) 1321 if ( m_power_timer )
1317 killTimer ( m_power_timer ); 1322 killTimer ( m_power_timer );
1318 m_power_timer = startTimer ( 500 ); 1323 m_power_timer = startTimer ( 500 );
1319 } 1324 }
1320 else if ( m_power_timer ) { 1325 else if ( m_power_timer ) {
1321 killTimer ( m_power_timer ); 1326 killTimer ( m_power_timer );
1322 m_power_timer = 0; 1327 m_power_timer = 0;
1323 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1328 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1324 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1329 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1325 } 1330 }
1326 newkeycode = Key_unknown; 1331 newkeycode = Key_unknown;
1327 break; 1332 break;
1328 } 1333 }
1329 } 1334 }
1330 1335
1331 if ( newkeycode != keycode ) { 1336 if ( newkeycode != keycode ) {
1332 if ( newkeycode != Key_unknown ) 1337 if ( newkeycode != Key_unknown )
1333 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1338 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1334 return true; 1339 return true;
1335 } 1340 }
1336 else 1341 else
1337 return false; 1342 return false;
1338} 1343}
1339 1344
1340void iPAQ::timerEvent ( QTimerEvent * ) 1345void iPAQ::timerEvent ( QTimerEvent * )
1341{ 1346{
1342 killTimer ( m_power_timer ); 1347 killTimer ( m_power_timer );
1343 m_power_timer = 0; 1348 m_power_timer = 0;
1344 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1349 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1345 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1350 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1346} 1351}
1347 1352
1348 1353
1349void iPAQ::alarmSound ( ) 1354void iPAQ::alarmSound ( )
1350{ 1355{
1351#ifndef QT_NO_SOUND 1356#ifndef QT_NO_SOUND
1352 static Sound snd ( "alarm" ); 1357 static Sound snd ( "alarm" );
1353 int fd; 1358 int fd;
1354 int vol; 1359 int vol;
1355 bool vol_reset = false; 1360 bool vol_reset = false;
1356 1361
1357 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1362 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1358 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1363 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1359 Config cfg ( "qpe" ); 1364 Config cfg ( "qpe" );
1360 cfg. setGroup ( "Volume" ); 1365 cfg. setGroup ( "Volume" );
1361 1366
1362 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1367 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1363 if ( volalarm < 0 ) 1368 if ( volalarm < 0 )
1364 volalarm = 0; 1369 volalarm = 0;
1365 else if ( volalarm > 100 ) 1370 else if ( volalarm > 100 )
1366 volalarm = 100; 1371 volalarm = 100;
1367 volalarm |= ( volalarm << 8 ); 1372 volalarm |= ( volalarm << 8 );
1368 1373
1369 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1374 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1370 vol_reset = true; 1375 vol_reset = true;
1371 } 1376 }
1372 } 1377 }
1373 1378
1374 snd. play ( ); 1379 snd. play ( );
1375 while ( !snd. isFinished ( )) 1380 while ( !snd. isFinished ( ))
1376 qApp-> processEvents ( ); 1381 qApp-> processEvents ( );
1377 1382
1378 if ( fd >= 0 ) { 1383 if ( fd >= 0 ) {
1379 if ( vol_reset ) 1384 if ( vol_reset )
1380 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1385 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1381 ::close ( fd ); 1386 ::close ( fd );
1382 } 1387 }
1383#endif 1388#endif
1384} 1389}
1385 1390
1386 1391
1387bool iPAQ::setSoftSuspend ( bool soft ) 1392bool iPAQ::setSoftSuspend ( bool soft )
1388{ 1393{
1389 bool res = false; 1394 bool res = false;
1390 int fd; 1395 int fd;
1391 1396
1392 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1397 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1393 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1398 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1394 res = true; 1399 res = true;
1395 else 1400 else
1396 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1401 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1397 1402
1398 ::close ( fd ); 1403 ::close ( fd );
1399 } 1404 }
1400 else 1405 else
1401 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1406 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1402 1407
1403 return res; 1408 return res;
1404} 1409}
1405 1410
1406 1411
1407bool iPAQ::setDisplayBrightness ( int bright ) 1412bool iPAQ::setDisplayBrightness ( int bright )
1408{ 1413{
1409 bool res = false; 1414 bool res = false;
1410 int fd; 1415 int fd;
1411 1416
1412 if ( bright > 255 ) 1417 if ( bright > 255 )
1413 bright = 255; 1418 bright = 255;
1414 if ( bright < 0 ) 1419 if ( bright < 0 )
1415 bright = 0; 1420 bright = 0;
1416 1421
1417 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1422 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1418 FLITE_IN bl; 1423 FLITE_IN bl;
1419 bl. mode = 1; 1424 bl. mode = 1;
1420 bl. pwr = bright ? 1 : 0; 1425 bl. pwr = bright ? 1 : 0;
1421 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1426 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1422 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1427 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1423 ::close ( fd ); 1428 ::close ( fd );
1424 } 1429 }
1425 return res; 1430 return res;
1426} 1431}
1427 1432
1428int iPAQ::displayBrightnessResolution ( ) const 1433int iPAQ::displayBrightnessResolution ( ) const
1429{ 1434{
1430 switch ( model ( )) { 1435 switch ( model ( )) {
1431 case Model_iPAQ_H31xx: 1436 case Model_iPAQ_H31xx:
1432 case Model_iPAQ_H36xx: 1437 case Model_iPAQ_H36xx:
1433 case Model_iPAQ_H37xx: 1438 case Model_iPAQ_H37xx:
1434 return 128; // really 256, but >128 could damage the LCD 1439 return 128; // really 256, but >128 could damage the LCD
1435 1440
1436 case Model_iPAQ_H38xx: 1441 case Model_iPAQ_H38xx:
1437 case Model_iPAQ_H39xx: 1442 case Model_iPAQ_H39xx:
1438 return 64; 1443 return 64;
1444 case Model_iPAQ_H5xxx:
1445 return 255;
1439 1446
1440 default: 1447 default:
1441 return 2; 1448 return 2;
1442 } 1449 }
1443} 1450}
1444 1451
1445 1452
1446bool iPAQ::hasLightSensor ( ) const 1453bool iPAQ::hasLightSensor ( ) const
1447{ 1454{
1448 return true; 1455 return true;
1449} 1456}
1450 1457
1451int iPAQ::readLightSensor ( ) 1458int iPAQ::readLightSensor ( )
1452{ 1459{
1453 int fd; 1460 int fd;
1454 int val = -1; 1461 int val = -1;
1455 1462
1456 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1463 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1457 char buffer [8]; 1464 char buffer [8];
1458 1465
1459 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1466 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1460 char *endptr; 1467 char *endptr;
1461 1468
1462 buffer [4] = 0; 1469 buffer [4] = 0;
1463 val = ::strtol ( buffer + 2, &endptr, 16 ); 1470 val = ::strtol ( buffer + 2, &endptr, 16 );
1464 1471
1465 if ( *endptr != 0 ) 1472 if ( *endptr != 0 )
1466 val = -1; 1473 val = -1;
1467 } 1474 }
1468 ::close ( fd ); 1475 ::close ( fd );
1469 } 1476 }
1470 1477
1471 return val; 1478 return val;
1472} 1479}
1473 1480
1474int iPAQ::lightSensorResolution ( ) const 1481int iPAQ::lightSensorResolution ( ) const
1475{ 1482{
1476 return 256; 1483 return 256;
1477} 1484}
1478 1485
1479/************************************************** 1486/**************************************************
1480 * 1487 *
1481 * Zaurus 1488 * Zaurus
1482 * 1489 *
1483 **************************************************/ 1490 **************************************************/
1484 1491
1485// Check whether this device is the sharp zaurus.. 1492// Check whether this device is the sharp zaurus..
1486bool Zaurus::isZaurus() 1493bool Zaurus::isZaurus()
1487{ 1494{
1488 1495
1489 // If the special devices by embedix exist, it is quite simple: it is a Zaurus ! 1496 // If the special devices by embedix exist, it is quite simple: it is a Zaurus !
1490 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1497 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1491 return true; 1498 return true;
1492 } 1499 }
1493 1500
1494 // On non-embedix kenrnels, we have too look closer. 1501 // On non-embedix kenrnels, we have too look closer.
1495 bool is_zaurus = false; 1502 bool is_zaurus = false;
1496 QFile f ( "/proc/cpuinfo" ); 1503 QFile f ( "/proc/cpuinfo" );
1497 if ( f. open ( IO_ReadOnly ) ) { 1504 if ( f. open ( IO_ReadOnly ) ) {
1498 QString model; 1505 QString model;
1499 QFile f ( "/proc/cpuinfo" ); 1506 QFile f ( "/proc/cpuinfo" );
1500 1507
1501 QTextStream ts ( &f ); 1508 QTextStream ts ( &f );
1502 QString line; 1509 QString line;
1503 while( line = ts. readLine ( ) ) { 1510 while( line = ts. readLine ( ) ) {
1504 if ( line. left ( 8 ) == "Hardware" ) 1511 if ( line. left ( 8 ) == "Hardware" )
1505 break; 1512 break;
1506 } 1513 }
1507 int loc = line. find ( ":" ); 1514 int loc = line. find ( ":" );
1508 if ( loc != -1 ) 1515 if ( loc != -1 )
1509 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1516 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1510 1517
1511 if ( model == "Sharp-Collie" 1518 if ( model == "Sharp-Collie"
1512 || model == "Collie" 1519 || model == "Collie"
1513 || model == "SHARP Corgi" 1520 || model == "SHARP Corgi"
1514 || model == "SHARP Shepherd" 1521 || model == "SHARP Shepherd"
1515 || model == "SHARP Poodle" 1522 || model == "SHARP Poodle"
1516 ) 1523 )
1517 is_zaurus = true; 1524 is_zaurus = true;
1518 1525
1519 } 1526 }
1520 return is_zaurus; 1527 return is_zaurus;
1521} 1528}
1522 1529
1523 1530
1524void Zaurus::init ( ) 1531void Zaurus::init ( )
1525{ 1532{
1526 d-> m_vendorstr = "Sharp"; 1533 d-> m_vendorstr = "Sharp";
1527 d-> m_vendor = Vendor_Sharp; 1534 d-> m_vendor = Vendor_Sharp;
1528 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1535 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1529 1536
1530 // QFile f ( "/proc/filesystems" ); 1537 // QFile f ( "/proc/filesystems" );
1531 QString model; 1538 QString model;
1532 1539
1533 // It isn't a good idea to check the system configuration to 1540 // It isn't a good idea to check the system configuration to
1534 // detect the distribution ! 1541 // detect the distribution !
1535 // Otherwise it may happen that any other distribution is detected as openzaurus, just 1542 // Otherwise it may happen that any other distribution is detected as openzaurus, just
1536 // because it uses a jffs2 filesystem.. 1543 // because it uses a jffs2 filesystem..
1537 // (eilers) 1544 // (eilers)
1538 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1545 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1539 QFile f ("/etc/oz_version"); 1546 QFile f ("/etc/oz_version");
1540 if ( f.exists() ){ 1547 if ( f.exists() ){
1541 d-> m_vendorstr = "OpenZaurus Team"; 1548 d-> m_vendorstr = "OpenZaurus Team";
1542 d-> m_systemstr = "OpenZaurus"; 1549 d-> m_systemstr = "OpenZaurus";
1543 d-> m_system = System_OpenZaurus; 1550 d-> m_system = System_OpenZaurus;
1544 1551
1545 if ( f. open ( IO_ReadOnly )) { 1552 if ( f. open ( IO_ReadOnly )) {
1546 QTextStream ts ( &f ); 1553 QTextStream ts ( &f );
1547 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1554 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1548 f. close ( ); 1555 f. close ( );
1549 } 1556 }
1550 1557
1551 // Openzaurus sometimes uses the embedix kernel! 1558 // Openzaurus sometimes uses the embedix kernel!
1552 // => Check whether this is an embedix kernel 1559 // => Check whether this is an embedix kernel
1553 FILE *uname = popen("uname -r", "r"); 1560 FILE *uname = popen("uname -r", "r");
1554 QString line; 1561 QString line;
1555 if ( f.open(IO_ReadOnly, uname) ) { 1562 if ( f.open(IO_ReadOnly, uname) ) {
1556 QTextStream ts ( &f ); 1563 QTextStream ts ( &f );
1557 line = ts. readLine ( ); 1564 line = ts. readLine ( );
1558 int loc = line. find ( "embedix" ); 1565 int loc = line. find ( "embedix" );
1559 if ( loc != -1 ) 1566 if ( loc != -1 )
1560 m_embedix = true; 1567 m_embedix = true;
1561 else 1568 else
1562 m_embedix = false; 1569 m_embedix = false;
1563 f. close ( ); 1570 f. close ( );
1564 } 1571 }
1565 pclose(uname); 1572 pclose(uname);
1566 } 1573 }
1567 else { 1574 else {
1568 d-> m_systemstr = "Zaurus"; 1575 d-> m_systemstr = "Zaurus";
1569 d-> m_system = System_Zaurus; 1576 d-> m_system = System_Zaurus;
1570 } 1577 }
1571 1578
1572 f. setName ( "/proc/cpuinfo" ); 1579 f. setName ( "/proc/cpuinfo" );
1573 if ( f. open ( IO_ReadOnly ) ) { 1580 if ( f. open ( IO_ReadOnly ) ) {
1574 QTextStream ts ( &f ); 1581 QTextStream ts ( &f );
1575 QString line; 1582 QString line;
1576 while( line = ts. readLine ( ) ) { 1583 while( line = ts. readLine ( ) ) {
1577 if ( line. left ( 8 ) == "Hardware" ) 1584 if ( line. left ( 8 ) == "Hardware" )
1578 break; 1585 break;
1579 } 1586 }
1580 int loc = line. find ( ":" ); 1587 int loc = line. find ( ":" );
1581 if ( loc != -1 ) 1588 if ( loc != -1 )
1582 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1589 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1583 } 1590 }
1584 1591
1585 if ( model == "SHARP Corgi" ) { 1592 if ( model == "SHARP Corgi" ) {
1586 d-> m_model = Model_Zaurus_SLC700; 1593 d-> m_model = Model_Zaurus_SLC700;
1587 d-> m_modelstr = "Zaurus SL-C700"; 1594 d-> m_modelstr = "Zaurus SL-C700";
1588 } else if ( model == "SHARP Shepherd" ) { 1595 } else if ( model == "SHARP Shepherd" ) {
1589 d-> m_model = Model_Zaurus_SLC700; // Do we need a special type for the C750 ? (eilers) 1596 d-> m_model = Model_Zaurus_SLC700; // Do we need a special type for the C750 ? (eilers)
1590 d-> m_modelstr = "Zaurus SL-C750"; 1597 d-> m_modelstr = "Zaurus SL-C750";
1591 } else if ( model == "SHARP Poodle" ) { 1598 } else if ( model == "SHARP Poodle" ) {
1592 d-> m_model = Model_Zaurus_SLB600; 1599 d-> m_model = Model_Zaurus_SLB600;
1593 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1600 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1594 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1601 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1595 d-> m_model = Model_Zaurus_SL5500; 1602 d-> m_model = Model_Zaurus_SL5500;
1596 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1603 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1597 } else { 1604 } else {
1598 d-> m_model = Model_Zaurus_SL5500; 1605 d-> m_model = Model_Zaurus_SL5500;
1599 d-> m_modelstr = "Zaurus (Model unknown)"; 1606 d-> m_modelstr = "Zaurus (Model unknown)";
1600 } 1607 }
1601 1608
1602 bool flipstate = false; 1609 bool flipstate = false;
1603 switch ( d-> m_model ) { 1610 switch ( d-> m_model ) {
1604 case Model_Zaurus_SLA300: 1611 case Model_Zaurus_SLA300:
1605 d-> m_rotation = Rot0; 1612 d-> m_rotation = Rot0;
1606 break; 1613 break;
1607 case Model_Zaurus_SLC700: 1614 case Model_Zaurus_SLC700:
1608 // Note: need to 1) set flipstate based on physical screen orientation 1615 // Note: need to 1) set flipstate based on physical screen orientation
1609 // and 2) check to see if the user overrode the rotation direction 1616 // and 2) check to see if the user overrode the rotation direction
1610 // using appearance, and if so, remove that item from the Config to 1617 // using appearance, and if so, remove that item from the Config to
1611 // ensure the rotate applet flips us back to the previous state. 1618 // ensure the rotate applet flips us back to the previous state.
1612 if ( flipstate ) { 1619 if ( flipstate ) {
1613 // 480x640 1620 // 480x640
1614 d-> m_rotation = Rot0; 1621 d-> m_rotation = Rot0;
1615 d-> m_direction = CW; 1622 d-> m_direction = CW;
1616 } else { 1623 } else {
1617 // 640x480 1624 // 640x480
1618 d-> m_rotation = Rot270; 1625 d-> m_rotation = Rot270;
1619 d-> m_direction = CCW; 1626 d-> m_direction = CCW;
1620 } 1627 }
1621 break; 1628 break;
1622 case Model_Zaurus_SLB600: 1629 case Model_Zaurus_SLB600:
1623 case Model_Zaurus_SL5500: 1630 case Model_Zaurus_SL5500:
1624 case Model_Zaurus_SL5000: 1631 case Model_Zaurus_SL5000:
1625 default: 1632 default:
1626 d-> m_rotation = Rot270; 1633 d-> m_rotation = Rot270;
1627 break; 1634 break;
1628 } 1635 }
1629 m_leds [0] = Led_Off; 1636 m_leds [0] = Led_Off;
1630} 1637}
1631 1638
1632void Zaurus::initButtons ( ) 1639void Zaurus::initButtons ( )
1633{ 1640{
1634 if ( d-> m_buttons ) 1641 if ( d-> m_buttons )
1635 return; 1642 return;
1636 1643
1637 d-> m_buttons = new QValueList <ODeviceButton>; 1644 d-> m_buttons = new QValueList <ODeviceButton>;
1638 1645
1639 struct z_button * pz_buttons; 1646 struct z_button * pz_buttons;
1640 int buttoncount; 1647 int buttoncount;
1641 switch ( d-> m_model ) { 1648 switch ( d-> m_model ) {
1642 case Model_Zaurus_SLC700: 1649 case Model_Zaurus_SLC700:
1643 pz_buttons = z_buttons_c700; 1650 pz_buttons = z_buttons_c700;
1644 buttoncount = ARRAY_SIZE(z_buttons_c700); 1651 buttoncount = ARRAY_SIZE(z_buttons_c700);
1645 break; 1652 break;
1646 default: 1653 default:
1647 pz_buttons = z_buttons; 1654 pz_buttons = z_buttons;
1648 buttoncount = ARRAY_SIZE(z_buttons); 1655 buttoncount = ARRAY_SIZE(z_buttons);
1649 break; 1656 break;
1650 } 1657 }
1651 1658
1652 for ( int i = 0; i < buttoncount; i++ ) { 1659 for ( int i = 0; i < buttoncount; i++ ) {
1653 struct z_button *zb = pz_buttons + i; 1660 struct z_button *zb = pz_buttons + i;
1654 ODeviceButton b; 1661 ODeviceButton b;
1655 1662
1656 b. setKeycode ( zb-> code ); 1663 b. setKeycode ( zb-> code );
1657 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1664 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1658 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1665 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1659 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1666 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1660 zb-> fpressedaction )); 1667 zb-> fpressedaction ));
1661 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1668 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1662 zb-> fheldaction )); 1669 zb-> fheldaction ));
1663 1670
1664 d-> m_buttons-> append ( b ); 1671 d-> m_buttons-> append ( b );
1665 } 1672 }
1666 1673
1667 reloadButtonMapping ( ); 1674 reloadButtonMapping ( );
1668 1675
1669 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1676 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1670 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1677 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
1671 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1678 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1672} 1679}
1673 1680
1674#include <unistd.h> 1681#include <unistd.h>
1675#include <fcntl.h> 1682#include <fcntl.h>
1676#include <sys/ioctl.h> 1683#include <sys/ioctl.h>
1677 1684
1678//#include <asm/sharp_char.h> // including kernel headers is evil ... 1685//#include <asm/sharp_char.h> // including kernel headers is evil ...
1679 1686
1680#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1687#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1681 1688
1682 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1689 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1683#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1690#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1684 1691
1685#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1692#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1686#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1693#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1687#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1694#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1688 1695
1689/* --- for SHARP_BUZZER device --- */ 1696/* --- for SHARP_BUZZER device --- */
1690 1697
1691 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1698 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1692//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1699//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1693 1700
1694#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1701#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
@@ -2263,329 +2270,329 @@ int SIMpad::displayBrightnessResolution ( ) const
2263 * 2270 *
2264 **************************************************/ 2271 **************************************************/
2265 2272
2266void Ramses::init() 2273void Ramses::init()
2267{ 2274{
2268 d->m_vendorstr = "M und N"; 2275 d->m_vendorstr = "M und N";
2269 d->m_vendor = Vendor_MundN; 2276 d->m_vendor = Vendor_MundN;
2270 2277
2271 QFile f("/proc/sys/board/ramses"); 2278 QFile f("/proc/sys/board/ramses");
2272 2279
2273 d->m_modelstr = "Ramses"; 2280 d->m_modelstr = "Ramses";
2274 d->m_model = Model_Ramses_MNCI; 2281 d->m_model = Model_Ramses_MNCI;
2275 2282
2276 d->m_rotation = Rot0; 2283 d->m_rotation = Rot0;
2277 d->m_holdtime = 1000; 2284 d->m_holdtime = 1000;
2278 2285
2279 f.setName("/etc/oz_version"); 2286 f.setName("/etc/oz_version");
2280 2287
2281 if (f.open(IO_ReadOnly)) { 2288 if (f.open(IO_ReadOnly)) {
2282 d->m_systemstr = "OpenEmbedded/Ramses"; 2289 d->m_systemstr = "OpenEmbedded/Ramses";
2283 d->m_system = System_OpenZaurus; 2290 d->m_system = System_OpenZaurus;
2284 2291
2285 QTextStream ts(&f); 2292 QTextStream ts(&f);
2286 ts.setDevice(&f); 2293 ts.setDevice(&f);
2287 d->m_sysverstr = ts.readLine(); 2294 d->m_sysverstr = ts.readLine();
2288 f.close(); 2295 f.close();
2289 } 2296 }
2290 2297
2291 m_power_timer = 0; 2298 m_power_timer = 0;
2292 2299
2293#ifdef QT_QWS_ALLOW_OVERCLOCK 2300#ifdef QT_QWS_ALLOW_OVERCLOCK
2294#warning *** Overclocking enabled - this may fry your hardware - you have been warned *** 2301#warning *** Overclocking enabled - this may fry your hardware - you have been warned ***
2295#define OC(x...) x 2302#define OC(x...) x
2296#else 2303#else
2297#define OC(x...) 2304#define OC(x...)
2298#endif 2305#endif
2299 2306
2300 2307
2301 // This table is true for a Intel XScale PXA 255 2308 // This table is true for a Intel XScale PXA 255
2302 2309
2303 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50 2310 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50
2304 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem 2311 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem
2305 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99 2312 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99
2306 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem 2313 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem
2307 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99 2314 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99
2308 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem 2315 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem
2309 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99 2316 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99
2310 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196 2317 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196
2311 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus 2318 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus
2312 2319
2313} 2320}
2314 2321
2315bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat) 2322bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat)
2316{ 2323{
2317 Q_UNUSED( keycode ); 2324 Q_UNUSED( keycode );
2318 Q_UNUSED( modifiers ); 2325 Q_UNUSED( modifiers );
2319 Q_UNUSED( isPress ); 2326 Q_UNUSED( isPress );
2320 Q_UNUSED( autoRepeat ); 2327 Q_UNUSED( autoRepeat );
2321 return false; 2328 return false;
2322} 2329}
2323 2330
2324void Ramses::timerEvent(QTimerEvent *) 2331void Ramses::timerEvent(QTimerEvent *)
2325{ 2332{
2326 killTimer(m_power_timer); 2333 killTimer(m_power_timer);
2327 m_power_timer = 0; 2334 m_power_timer = 0;
2328 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false); 2335 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false);
2329 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false); 2336 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false);
2330} 2337}
2331 2338
2332 2339
2333bool Ramses::setSoftSuspend(bool soft) 2340bool Ramses::setSoftSuspend(bool soft)
2334{ 2341{
2335 qDebug("Ramses::setSoftSuspend(%d)", soft); 2342 qDebug("Ramses::setSoftSuspend(%d)", soft);
2336#if 0 2343#if 0
2337 bool res = false; 2344 bool res = false;
2338 int fd; 2345 int fd;
2339 2346
2340 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) || 2347 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) ||
2341 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) { 2348 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) {
2342 2349
2343 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources 2350 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources
2344 2351
2345 if (sources >= 0) { 2352 if (sources >= 0) {
2346 if (soft) 2353 if (soft)
2347 sources &= ~APM_EVT_POWER_BUTTON; 2354 sources &= ~APM_EVT_POWER_BUTTON;
2348 else 2355 else
2349 sources |= APM_EVT_POWER_BUTTON; 2356 sources |= APM_EVT_POWER_BUTTON;
2350 2357
2351 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources 2358 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources
2352 res = true; 2359 res = true;
2353 else 2360 else
2354 perror("APM_IOCGEVTSRC"); 2361 perror("APM_IOCGEVTSRC");
2355 } 2362 }
2356 else 2363 else
2357 perror("APM_IOCGEVTSRC"); 2364 perror("APM_IOCGEVTSRC");
2358 2365
2359 ::close(fd); 2366 ::close(fd);
2360 } 2367 }
2361 else 2368 else
2362 perror("/dev/apm_bios or /dev/misc/apm_bios"); 2369 perror("/dev/apm_bios or /dev/misc/apm_bios");
2363 2370
2364 return res; 2371 return res;
2365#else 2372#else
2366 return true; 2373 return true;
2367#endif 2374#endif
2368} 2375}
2369 2376
2370bool Ramses::suspend ( ) 2377bool Ramses::suspend ( )
2371{ 2378{
2372 qDebug("Ramses::suspend"); 2379 qDebug("Ramses::suspend");
2373 return false; 2380 return false;
2374} 2381}
2375 2382
2376/** 2383/**
2377 * This sets the display on or off 2384 * This sets the display on or off
2378 */ 2385 */
2379bool Ramses::setDisplayStatus(bool on) 2386bool Ramses::setDisplayStatus(bool on)
2380{ 2387{
2381 qDebug("Ramses::setDisplayStatus(%d)", on); 2388 qDebug("Ramses::setDisplayStatus(%d)", on);
2382#if 0 2389#if 0
2383 bool res = false; 2390 bool res = false;
2384 int fd; 2391 int fd;
2385 2392
2386 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) { 2393 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) {
2387 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0); 2394 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0);
2388 ::close(fd); 2395 ::close(fd);
2389 } 2396 }
2390 return res; 2397 return res;
2391#else 2398#else
2392 return true; 2399 return true;
2393#endif 2400#endif
2394} 2401}
2395 2402
2396 2403
2397/* 2404/*
2398 * We get something between 0..255 into us 2405 * We get something between 0..255 into us
2399*/ 2406*/
2400bool Ramses::setDisplayBrightness(int bright) 2407bool Ramses::setDisplayBrightness(int bright)
2401{ 2408{
2402 qDebug("Ramses::setDisplayBrightness(%d)", bright); 2409 qDebug("Ramses::setDisplayBrightness(%d)", bright);
2403 bool res = false; 2410 bool res = false;
2404 int fd; 2411 int fd;
2405 2412
2406 // pwm1 brighness: 20 steps 500..0 (dunkel->hell) 2413 // pwm1 brighness: 20 steps 500..0 (dunkel->hell)
2407 2414
2408 if (bright > 255 ) 2415 if (bright > 255 )
2409 bright = 255; 2416 bright = 255;
2410 if (bright < 0) 2417 if (bright < 0)
2411 bright = 0; 2418 bright = 0;
2412 2419
2413 // Turn backlight completely off 2420 // Turn backlight completely off
2414 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) { 2421 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) {
2415 char writeCommand[10]; 2422 char writeCommand[10];
2416 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0); 2423 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0);
2417 res = (::write(fd, writeCommand, count) != -1); 2424 res = (::write(fd, writeCommand, count) != -1);
2418 ::close(fd); 2425 ::close(fd);
2419 } 2426 }
2420 2427
2421 // scale backlight brightness to hardware 2428 // scale backlight brightness to hardware
2422 bright = 500-(bright * 500 / 255); 2429 bright = 500-(bright * 500 / 255);
2423 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) { 2430 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) {
2424 qDebug(" %d -> pwm1", bright); 2431 qDebug(" %d -> pwm1", bright);
2425 char writeCommand[100]; 2432 char writeCommand[100];
2426 const int count = sprintf(writeCommand, "%d\n", bright); 2433 const int count = sprintf(writeCommand, "%d\n", bright);
2427 res = (::write(fd, writeCommand, count) != -1); 2434 res = (::write(fd, writeCommand, count) != -1);
2428 ::close(fd); 2435 ::close(fd);
2429 } 2436 }
2430 return res; 2437 return res;
2431} 2438}
2432 2439
2433 2440
2434int Ramses::displayBrightnessResolution() const 2441int Ramses::displayBrightnessResolution() const
2435{ 2442{
2436 return 32; 2443 return 32;
2437} 2444}
2438 2445
2439bool Ramses::setDisplayContrast(int contr) 2446bool Ramses::setDisplayContrast(int contr)
2440{ 2447{
2441 qDebug("Ramses::setDisplayContrast(%d)", contr); 2448 qDebug("Ramses::setDisplayContrast(%d)", contr);
2442 bool res = false; 2449 bool res = false;
2443 int fd; 2450 int fd;
2444 2451
2445 // pwm0 contrast: 20 steps 79..90 (dunkel->hell) 2452 // pwm0 contrast: 20 steps 79..90 (dunkel->hell)
2446 2453
2447 if (contr > 255 ) 2454 if (contr > 255 )
2448 contr = 255; 2455 contr = 255;
2449 if (contr < 0) 2456 if (contr < 0)
2450 contr = 0; 2457 contr = 0;
2451 contr = 90 - (contr * 20 / 255); 2458 contr = 90 - (contr * 20 / 255);
2452 2459
2453 if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) { 2460 if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) {
2454 qDebug(" %d -> pwm0", contr); 2461 qDebug(" %d -> pwm0", contr);
2455 char writeCommand[100]; 2462 char writeCommand[100];
2456 const int count = sprintf(writeCommand, "%d\n", contr); 2463 const int count = sprintf(writeCommand, "%d\n", contr);
2457 res = (::write(fd, writeCommand, count) != -1); 2464 res = (::write(fd, writeCommand, count) != -1);
2458 res = true; 2465 res = true;
2459 ::close(fd); 2466 ::close(fd);
2460 } 2467 }
2461 return res; 2468 return res;
2462} 2469}
2463 2470
2464 2471
2465int Ramses::displayContrastResolution() const 2472int Ramses::displayContrastResolution() const
2466{ 2473{
2467 return 20; 2474 return 20;
2468} 2475}
2469 2476
2470 2477
2471/************************************************** 2478/**************************************************
2472 * * 2479 * *
2473 * Jornada * 2480 * Jornada *
2474 * * 2481 * *
2475 **************************************************/ 2482 **************************************************/
2476 2483
2477 2484
2478bool Jornada::isJornada ( ) 2485bool Jornada::isJornada ( )
2479{ 2486{
2480 QFile f( "/proc/cpuinfo" ); 2487 QFile f( "/proc/cpuinfo" );
2481 if ( f. open ( IO_ReadOnly ) ) { 2488 if ( f. open ( IO_ReadOnly ) ) {
2482 QTextStream ts ( &f ); 2489 QTextStream ts ( &f );
2483 QString line; 2490 QString line;
2484 while( line = ts. readLine ( ) ) { 2491 while( line = ts. readLine ( ) ) {
2485 if ( line. left ( 8 ) == "Hardware" ) { 2492 if ( line. left ( 8 ) == "Hardware" ) {
2486 int loc = line. find ( ":" ); 2493 int loc = line. find ( ":" );
2487 if ( loc != -1 ) { 2494 if ( loc != -1 ) {
2488 QString model = 2495 QString model =
2489 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 2496 line. mid ( loc + 2 ). simplifyWhiteSpace( );
2490 return ( model == "HP Jornada 56x" ); 2497 return ( model == "HP Jornada 56x" );
2491 } 2498 }
2492 } 2499 }
2493 } 2500 }
2494 } 2501 }
2495 return false; 2502 return false;
2496} 2503}
2497 2504
2498void Jornada::init ( ) 2505void Jornada::init ( )
2499{ 2506{
2500 d-> m_vendorstr = "HP"; 2507 d-> m_vendorstr = "HP";
2501 d-> m_vendor = Vendor_HP; 2508 d-> m_vendor = Vendor_HP;
2502 d-> m_modelstr = "Jornada 56x"; 2509 d-> m_modelstr = "Jornada 56x";
2503 d-> m_model = Model_Jornada_56x; 2510 d-> m_model = Model_Jornada_56x;
2504 d-> m_systemstr = "Familiar"; 2511 d-> m_systemstr = "Familiar";
2505 d-> m_system = System_Familiar; 2512 d-> m_system = System_Familiar;
2506 d-> m_rotation = Rot0; 2513 d-> m_rotation = Rot0;
2507 2514
2508 QFile f ( "/etc/familiar-version" ); 2515 QFile f ( "/etc/familiar-version" );
2509 f. setName ( "/etc/familiar-version" ); 2516 f. setName ( "/etc/familiar-version" );
2510 if ( f. open ( IO_ReadOnly )) { 2517 if ( f. open ( IO_ReadOnly )) {
2511 2518
2512 QTextStream ts ( &f ); 2519 QTextStream ts ( &f );
2513 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 2520 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
2514 2521
2515 f. close ( ); 2522 f. close ( );
2516 } 2523 }
2517} 2524}
2518 2525
2519 2526#if 0
2520void Jornada::initButtons ( ) 2527void Jornada::initButtons ( )
2521{ 2528{
2522 if ( d-> m_buttons ) 2529 if ( d-> m_buttons )
2523 return; 2530 return;
2524 2531
2525 // Simulation uses iPAQ 3660 device buttons 2532 // Simulation uses iPAQ 3660 device buttons
2526 2533
2527 qDebug ( "init Buttons" ); 2534 qDebug ( "init Buttons" );
2528 d-> m_buttons = new QValueList <ODeviceButton>; 2535 d-> m_buttons = new QValueList <ODeviceButton>;
2529 2536
2530 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 2537 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
2531 i_button *ib = ipaq_buttons + i; 2538 i_button *ib = ipaq_buttons + i;
2532 ODeviceButton b; 2539 ODeviceButton b;
2533 2540
2534 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 2541 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
2535 b. setKeycode ( ib-> code ); 2542 b. setKeycode ( ib-> code );
2536 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 2543 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
2537 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 2544 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
2538 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 2545 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
2539 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 2546 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
2540 d-> m_buttons-> append ( b ); 2547 d-> m_buttons-> append ( b );
2541 } 2548 }
2542 } 2549 }
2543 reloadButtonMapping ( ); 2550 reloadButtonMapping ( );
2544 2551
2545 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 2552 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
2546 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 2553 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
2547} 2554}
2548 2555#endif
2549int Jornada::displayBrightnessResolution ( ) const 2556int Jornada::displayBrightnessResolution ( ) const
2550{ 2557{
2551} 2558}
2552 2559
2553bool Jornada::setDisplayBrightness ( int bright ) 2560bool Jornada::setDisplayBrightness ( int bright )
2554{ 2561{
2555 bool res = false; 2562 bool res = false;
2556 int fd; 2563 int fd;
2557 2564
2558 if ( bright > 255 ) 2565 if ( bright > 255 )
2559 bright = 255; 2566 bright = 255;
2560 if ( bright < 0 ) 2567 if ( bright < 0 )
2561 bright = 0; 2568 bright = 0;
2562 2569
2563 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 2570 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
2564 FLITE_IN bl; 2571 FLITE_IN bl;
2565 bl. mode = 1; 2572 bl. mode = 1;
2566 bl. pwr = bright ? 1 : 0; 2573 bl. pwr = bright ? 1 : 0;
2567 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 2574 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
2568 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 2575 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
2569 ::close ( fd ); 2576 ::close ( fd );
2570 } 2577 }
2571 return res; 2578 return res;
2572} 2579}
2573 2580
2574bool Jornada::setSoftSuspend ( bool soft ) 2581bool Jornada::setSoftSuspend ( bool soft )
2575{ 2582{
2576 bool res = false; 2583 bool res = false;
2577 int fd; 2584 int fd;
2578 2585
2579 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 2586 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
2580 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 2587 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
2581 res = true; 2588 res = true;
2582 else 2589 else
2583 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 2590 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
2584 2591
2585 ::close ( fd ); 2592 ::close ( fd );
2586 } 2593 }
2587 else 2594 else
2588 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 2595 ::perror ( "/proc/sys/ts/suspend_button_mode" );
2589 2596
2590 return res; 2597 return res;
2591} 2598}