summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authorzecke <zecke>2003-04-13 16:57:28 (UTC)
committer zecke <zecke>2003-04-13 16:57:28 (UTC)
commit0b311079ff19798866291034663757103c6ba935 (patch) (unidiff)
tree70ddccf3a3147475050fa06cc2d807a71ab1d5ee /libopie/odevice.cpp
parent1537ccb435ca725c793db6e94e0b9e83484b57e7 (diff)
downloadopie-0b311079ff19798866291034663757103c6ba935.zip
opie-0b311079ff19798866291034663757103c6ba935.tar.gz
opie-0b311079ff19798866291034663757103c6ba935.tar.bz2
Jumbo API documentation update
and some API fixed ColorDialog is now OColorDialog!!! keep the namespace tidy! ColorPopupMenu is now OColorPopupMenu!!! keep the namespace tidy ColorDialog TT couldn't break bc we can so make it const QColor& OTimePicker add some convience methods more I might have forgot
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp108
1 files changed, 102 insertions, 6 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 9b2a954..8f954b1 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1,1281 +1,1377 @@
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 42
43// _IO and friends are only defined in kernel headers ... 43// _IO and friends are only defined in kernel headers ...
44 44
45#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 45#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
46 46
47#define OD_IO(type,number) OD_IOC(0,type,number,0) 47#define OD_IO(type,number) OD_IOC(0,type,number,0)
48#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 48#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
49#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 49#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
50#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 50#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
51 51
52using namespace Opie; 52using namespace Opie;
53 53
54class ODeviceData { 54class ODeviceData {
55public: 55public:
56 bool m_qwsserver; 56 bool m_qwsserver : 1;
57 57
58 QString m_vendorstr; 58 QString m_vendorstr;
59 OVendor m_vendor; 59 OVendor m_vendor;
60 60
61 QString m_modelstr; 61 QString m_modelstr;
62 OModel m_model; 62 OModel m_model;
63 63
64 QString m_systemstr; 64 QString m_systemstr;
65 OSystem m_system; 65 OSystem m_system;
66 66
67 QString m_sysverstr; 67 QString m_sysverstr;
68 68
69 Transformation m_rotation; 69 Transformation m_rotation;
70 70
71 QValueList <ODeviceButton> *m_buttons; 71 QValueList <ODeviceButton> *m_buttons;
72 uint m_holdtime; 72 uint m_holdtime;
73}; 73};
74 74
75 75
76class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 76class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
77protected: 77protected:
78 virtual void init ( ); 78 virtual void init ( );
79 virtual void initButtons ( ); 79 virtual void initButtons ( );
80 80
81public: 81public:
82 virtual bool setSoftSuspend ( bool soft ); 82 virtual bool setSoftSuspend ( bool soft );
83 83
84 virtual bool setDisplayBrightness ( int b ); 84 virtual bool setDisplayBrightness ( int b );
85 virtual int displayBrightnessResolution ( ) const; 85 virtual int displayBrightnessResolution ( ) const;
86 86
87 virtual void alarmSound ( ); 87 virtual void alarmSound ( );
88 88
89 virtual QValueList <OLed> ledList ( ) const; 89 virtual QValueList <OLed> ledList ( ) const;
90 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 90 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
91 virtual OLedState ledState ( OLed led ) const; 91 virtual OLedState ledState ( OLed led ) const;
92 virtual bool setLedState ( OLed led, OLedState st ); 92 virtual bool setLedState ( OLed led, OLedState st );
93 93
94 virtual bool hasLightSensor ( ) const; 94 virtual bool hasLightSensor ( ) const;
95 virtual int readLightSensor ( ); 95 virtual int readLightSensor ( );
96 virtual int lightSensorResolution ( ) const; 96 virtual int lightSensorResolution ( ) const;
97 97
98protected: 98protected:
99 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 99 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
100 virtual void timerEvent ( QTimerEvent *te ); 100 virtual void timerEvent ( QTimerEvent *te );
101 101
102 int m_power_timer; 102 int m_power_timer;
103 103
104 OLedState m_leds [2]; 104 OLedState m_leds [2];
105}; 105};
106 106
107class Zaurus : public ODevice { 107class Zaurus : public ODevice {
108protected: 108protected:
109 virtual void init ( ); 109 virtual void init ( );
110 virtual void initButtons ( ); 110 virtual void initButtons ( );
111 111
112public: 112public:
113 virtual bool setSoftSuspend ( bool soft ); 113 virtual bool setSoftSuspend ( bool soft );
114 114
115 virtual bool setDisplayBrightness ( int b ); 115 virtual bool setDisplayBrightness ( int b );
116 virtual int displayBrightnessResolution ( ) const; 116 virtual int displayBrightnessResolution ( ) const;
117 117
118 virtual void alarmSound ( ); 118 virtual void alarmSound ( );
119 virtual void keySound ( ); 119 virtual void keySound ( );
120 virtual void touchSound ( ); 120 virtual void touchSound ( );
121 121
122 virtual QValueList <OLed> ledList ( ) const; 122 virtual QValueList <OLed> ledList ( ) const;
123 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 123 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
124 virtual OLedState ledState ( OLed led ) const; 124 virtual OLedState ledState ( OLed led ) const;
125 virtual bool setLedState ( OLed led, OLedState st ); 125 virtual bool setLedState ( OLed led, OLedState st );
126 126
127protected: 127protected:
128 virtual void buzzer ( int snd ); 128 virtual void buzzer ( int snd );
129 129
130 OLedState m_leds [1]; 130 OLedState m_leds [1];
131}; 131};
132 132
133 133
134struct i_button { 134struct i_button {
135 uint model; 135 uint model;
136 Qt::Key code; 136 Qt::Key code;
137 char *utext; 137 char *utext;
138 char *pix; 138 char *pix;
139 char *fpressedservice; 139 char *fpressedservice;
140 char *fpressedaction; 140 char *fpressedaction;
141 char *fheldservice; 141 char *fheldservice;
142 char *fheldaction; 142 char *fheldaction;
143} ipaq_buttons [] = { 143} ipaq_buttons [] = {
144 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 144 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
145 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 145 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
146 "devicebuttons/ipaq_calendar", 146 "devicebuttons/ipaq_calendar",
147 "datebook", "nextView()", 147 "datebook", "nextView()",
148 "today", "raise()" }, 148 "today", "raise()" },
149 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 149 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
150 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 150 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
151 "devicebuttons/ipaq_contact", 151 "devicebuttons/ipaq_contact",
152 "addressbook", "raise()", 152 "addressbook", "raise()",
153 "addressbook", "beamBusinessCard()" }, 153 "addressbook", "beamBusinessCard()" },
154 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 154 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
155 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 155 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
156 "devicebuttons/ipaq_menu", 156 "devicebuttons/ipaq_menu",
157 "QPE/TaskBar", "toggleMenu()", 157 "QPE/TaskBar", "toggleMenu()",
158 "QPE/TaskBar", "toggleStartMenu()" }, 158 "QPE/TaskBar", "toggleStartMenu()" },
159 { Model_iPAQ_H38xx | Model_iPAQ_H39xx, 159 { Model_iPAQ_H38xx | Model_iPAQ_H39xx,
160 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 160 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
161 "devicebuttons/ipaq_mail", 161 "devicebuttons/ipaq_mail",
162 "mail", "raise()", 162 "mail", "raise()",
163 "mail", "newMail()" }, 163 "mail", "newMail()" },
164 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 164 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
165 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 165 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
166 "devicebuttons/ipaq_home", 166 "devicebuttons/ipaq_home",
167 "QPE/Launcher", "home()", 167 "QPE/Launcher", "home()",
168 "buttonsettings", "raise()" }, 168 "buttonsettings", "raise()" },
169 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 169 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
170 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 170 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
171 "devicebuttons/ipaq_record", 171 "devicebuttons/ipaq_record",
172 "QPE/VMemo", "toggleRecord()", 172 "QPE/VMemo", "toggleRecord()",
173 "sound", "raise()" }, 173 "sound", "raise()" },
174}; 174};
175 175
176struct z_button { 176struct z_button {
177 Qt::Key code; 177 Qt::Key code;
178 char *utext; 178 char *utext;
179 char *pix; 179 char *pix;
180 char *fpressedservice; 180 char *fpressedservice;
181 char *fpressedaction; 181 char *fpressedaction;
182 char *fheldservice; 182 char *fheldservice;
183 char *fheldaction; 183 char *fheldaction;
184} z_buttons [] = { 184} z_buttons [] = {
185 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 185 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
186 "devicebuttons/z_calendar", 186 "devicebuttons/z_calendar",
187 "datebook", "nextView()", 187 "datebook", "nextView()",
188 "today", "raise()" }, 188 "today", "raise()" },
189 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 189 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
190 "devicebuttons/z_contact", 190 "devicebuttons/z_contact",
191 "addressbook", "raise()", 191 "addressbook", "raise()",
192 "addressbook", "beamBusinessCard()" }, 192 "addressbook", "beamBusinessCard()" },
193 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 193 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
194 "devicebuttons/z_home", 194 "devicebuttons/z_home",
195 "QPE/Launcher", "home()", 195 "QPE/Launcher", "home()",
196 "buttonsettings", "raise()" }, 196 "buttonsettings", "raise()" },
197 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 197 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
198 "devicebuttons/z_menu", 198 "devicebuttons/z_menu",
199 "QPE/TaskBar", "toggleMenu()", 199 "QPE/TaskBar", "toggleMenu()",
200 "QPE/TaskBar", "toggleStartMenu()" }, 200 "QPE/TaskBar", "toggleStartMenu()" },
201 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 201 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
202 "devicebuttons/z_mail", 202 "devicebuttons/z_mail",
203 "mail", "raise()", 203 "mail", "raise()",
204 "mail", "newMail()" }, 204 "mail", "newMail()" },
205}; 205};
206 206
207static QCString makeChannel ( const char *str ) 207static QCString makeChannel ( const char *str )
208{ 208{
209 if ( str && !::strchr ( str, '/' )) 209 if ( str && !::strchr ( str, '/' ))
210 return QCString ( "QPE/Application/" ) + str; 210 return QCString ( "QPE/Application/" ) + str;
211 else 211 else
212 return str; 212 return str;
213} 213}
214 214
215 215
216 216
217 217
218ODevice *ODevice::inst ( ) 218ODevice *ODevice::inst ( )
219{ 219{
220 static ODevice *dev = 0; 220 static ODevice *dev = 0;
221 221
222 if ( !dev ) { 222 if ( !dev ) {
223 if ( QFile::exists ( "/proc/hal/model" )) 223 if ( QFile::exists ( "/proc/hal/model" ))
224 dev = new iPAQ ( ); 224 dev = new iPAQ ( );
225 else if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" )) 225 else if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ))
226 dev = new Zaurus ( ); 226 dev = new Zaurus ( );
227 else 227 else
228 dev = new ODevice ( ); 228 dev = new ODevice ( );
229 229
230 dev-> init ( ); 230 dev-> init ( );
231 } 231 }
232 return dev; 232 return dev;
233} 233}
234 234
235 235
236/************************************************** 236/**************************************************
237 * 237 *
238 * common 238 * common
239 * 239 *
240 **************************************************/ 240 **************************************************/
241 241
242 242
243ODevice::ODevice ( ) 243ODevice::ODevice ( )
244{ 244{
245 d = new ODeviceData; 245 d = new ODeviceData;
246 246
247 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 247 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
248 248
249 d-> m_modelstr = "Unknown"; 249 d-> m_modelstr = "Unknown";
250 d-> m_model = Model_Unknown; 250 d-> m_model = Model_Unknown;
251 d-> m_vendorstr = "Unknown"; 251 d-> m_vendorstr = "Unknown";
252 d-> m_vendor = Vendor_Unknown; 252 d-> m_vendor = Vendor_Unknown;
253 d-> m_systemstr = "Unknown"; 253 d-> m_systemstr = "Unknown";
254 d-> m_system = System_Unknown; 254 d-> m_system = System_Unknown;
255 d-> m_sysverstr = "0.0"; 255 d-> m_sysverstr = "0.0";
256 d-> m_rotation = Rot0; 256 d-> m_rotation = Rot0;
257 257
258 d-> m_holdtime = 1000; // 1000ms 258 d-> m_holdtime = 1000; // 1000ms
259 d-> m_buttons = 0; 259 d-> m_buttons = 0;
260} 260}
261 261
262void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 262void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
263{ 263{
264 if ( msg == "deviceButtonMappingChanged()" ) { 264 if ( msg == "deviceButtonMappingChanged()" ) {
265 reloadButtonMapping ( ); 265 reloadButtonMapping ( );
266 } 266 }
267} 267}
268 268
269void ODevice::init ( ) 269void ODevice::init ( )
270{ 270{
271} 271}
272 272
273/**
274 * This method initialises the button mapping
275 */
273void ODevice::initButtons ( ) 276void ODevice::initButtons ( )
274{ 277{
275 if ( d-> m_buttons ) 278 if ( d-> m_buttons )
276 return; 279 return;
277 280
278 // Simulation uses iPAQ 3660 device buttons 281 // Simulation uses iPAQ 3660 device buttons
279 282
280 qDebug ( "init Buttons" ); 283 qDebug ( "init Buttons" );
281 d-> m_buttons = new QValueList <ODeviceButton>; 284 d-> m_buttons = new QValueList <ODeviceButton>;
282 285
283 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 286 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
284 i_button *ib = ipaq_buttons + i; 287 i_button *ib = ipaq_buttons + i;
285 ODeviceButton b; 288 ODeviceButton b;
286 289
287 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 290 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
288 b. setKeycode ( ib-> code ); 291 b. setKeycode ( ib-> code );
289 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 292 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
290 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 293 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
291 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 294 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
292 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 295 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
293 d-> m_buttons-> append ( b ); 296 d-> m_buttons-> append ( b );
294 } 297 }
295 } 298 }
296 reloadButtonMapping ( ); 299 reloadButtonMapping ( );
297 300
298 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 301 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
299 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 302 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
300} 303}
301 304
302ODevice::~ODevice ( ) 305ODevice::~ODevice ( )
303{ 306{
304 delete d; 307 delete d;
305} 308}
306 309
307bool ODevice::setSoftSuspend ( bool /*soft*/ ) 310bool ODevice::setSoftSuspend ( bool /*soft*/ )
308{ 311{
309 return false; 312 return false;
310} 313}
311 314
312//#include <linux/apm_bios.h> 315//#include <linux/apm_bios.h>
313 316
314#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 317#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
315 318
316 319/**
320 * This method will try to suspend the device
321 * It only works if the user is the QWS Server and the apm application
322 * is installed.
323 * It tries to suspend and then waits some time cause some distributions
324 * do have asynchronus apm implementations.
325 * This method will either fail and return false or it'll suspend the
326 * device and return once the device got woken up
327 *
328 * @return if the device got suspended
329 */
317bool ODevice::suspend ( ) 330bool ODevice::suspend ( )
318{ 331{
319 if ( !d-> m_qwsserver ) // only qwsserver is allowed to suspend 332 if ( !d-> m_qwsserver ) // only qwsserver is allowed to suspend
320 return false; 333 return false;
321 334
322 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 335 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
323 return false; 336 return false;
324 337
325 bool res = false; 338 bool res = false;
326 339
327 struct timeval tvs, tvn; 340 struct timeval tvs, tvn;
328 ::gettimeofday ( &tvs, 0 ); 341 ::gettimeofday ( &tvs, 0 );
329 342
330 ::sync ( ); // flush fs caches 343 ::sync ( ); // flush fs caches
331 res = ( ::system ( "apm --suspend" ) == 0 ); 344 res = ( ::system ( "apm --suspend" ) == 0 );
332 345
333 // This is needed because the iPAQ apm implementation is asynchronous and we 346 // This is needed because the iPAQ apm implementation is asynchronous and we
334 // can not be sure when exactly the device is really suspended 347 // can not be sure when exactly the device is really suspended
335 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 348 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
336 349
337 if ( res ) { 350 if ( res ) {
338 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 351 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
339 ::usleep ( 200 * 1000 ); 352 ::usleep ( 200 * 1000 );
340 ::gettimeofday ( &tvn, 0 ); 353 ::gettimeofday ( &tvn, 0 );
341 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 354 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
342 } 355 }
343 356
344 return res; 357 return res;
345} 358}
346 359
347//#include <linux/fb.h> better not rely on kernel headers in userspace ... 360//#include <linux/fb.h> better not rely on kernel headers in userspace ...
348 361
349#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 362#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
350 363
351/* VESA Blanking Levels */ 364/* VESA Blanking Levels */
352#define VESA_NO_BLANKING 0 365#define VESA_NO_BLANKING 0
353#define VESA_VSYNC_SUSPEND 1 366#define VESA_VSYNC_SUSPEND 1
354#define VESA_HSYNC_SUSPEND 2 367#define VESA_HSYNC_SUSPEND 2
355#define VESA_POWERDOWN 3 368#define VESA_POWERDOWN 3
356 369
357 370/**
371 * This sets the display on or off
372 */
358bool ODevice::setDisplayStatus ( bool on ) 373bool ODevice::setDisplayStatus ( bool on )
359{ 374{
360 if ( d-> m_model == Model_Unknown ) 375 if ( d-> m_model == Model_Unknown )
361 return false; 376 return false;
362 377
363 bool res = false; 378 bool res = false;
364 int fd; 379 int fd;
365 380
366 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 381 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
367 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 382 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
368 ::close ( fd ); 383 ::close ( fd );
369 } 384 }
370 return res; 385 return res;
371} 386}
372 387
373bool ODevice::setDisplayBrightness ( int ) 388/**
389 * This sets the display brightness
390 * @return success or failure
391 */
392bool ODevice::setDisplayBrightness ( int p)
374{ 393{
394 Q_UNUSED( p )
375 return false; 395 return false;
376} 396}
377 397
378int ODevice::displayBrightnessResolution ( ) const 398int ODevice::displayBrightnessResolution ( ) const
379{ 399{
380 return 16; 400 return 16;
381} 401}
382 402
403/**
404 * This returns the vendor as string
405 * @return Vendor as QString
406 */
383QString ODevice::vendorString ( ) const 407QString ODevice::vendorString ( ) const
384{ 408{
385 return d-> m_vendorstr; 409 return d-> m_vendorstr;
386} 410}
387 411
412/**
413 * This returns the vendor as one of the values of OVendor
414 * @return OVendor
415 */
388OVendor ODevice::vendor ( ) const 416OVendor ODevice::vendor ( ) const
389{ 417{
390 return d-> m_vendor; 418 return d-> m_vendor;
391} 419}
392 420
421/**
422 * This returns the model as a string
423 * @return A string representing the model
424 */
393QString ODevice::modelString ( ) const 425QString ODevice::modelString ( ) const
394{ 426{
395 return d-> m_modelstr; 427 return d-> m_modelstr;
396} 428}
397 429
430/**
431 * This does return the OModel used
432 */
398OModel ODevice::model ( ) const 433OModel ODevice::model ( ) const
399{ 434{
400 return d-> m_model; 435 return d-> m_model;
401} 436}
402 437
438/**
439 * This does return the systen name
440 */
403QString ODevice::systemString ( ) const 441QString ODevice::systemString ( ) const
404{ 442{
405 return d-> m_systemstr; 443 return d-> m_systemstr;
406} 444}
407 445
446/**
447 * Return System as OSystem value
448 */
408OSystem ODevice::system ( ) const 449OSystem ODevice::system ( ) const
409{ 450{
410 return d-> m_system; 451 return d-> m_system;
411} 452}
412 453
454/**
455 * @return the version string of the base system
456 */
413QString ODevice::systemVersionString ( ) const 457QString ODevice::systemVersionString ( ) const
414{ 458{
415 return d-> m_sysverstr; 459 return d-> m_sysverstr;
416} 460}
417 461
462/**
463 * @return the current Transformation
464 */
418Transformation ODevice::rotation ( ) const 465Transformation ODevice::rotation ( ) const
419{ 466{
420 return d-> m_rotation; 467 return d-> m_rotation;
421} 468}
422 469
470/**
471 * This plays an alarmSound
472 */
423void ODevice::alarmSound ( ) 473void ODevice::alarmSound ( )
424{ 474{
425#ifndef QT_NO_SOUND 475#ifndef QT_NO_SOUND
426 static Sound snd ( "alarm" ); 476 static Sound snd ( "alarm" );
427 477
428 if ( snd. isFinished ( )) 478 if ( snd. isFinished ( ))
429 snd. play ( ); 479 snd. play ( );
430#endif 480#endif
431} 481}
432 482
483/**
484 * This plays a key sound
485 */
433void ODevice::keySound ( ) 486void ODevice::keySound ( )
434{ 487{
435#ifndef QT_NO_SOUND 488#ifndef QT_NO_SOUND
436 static Sound snd ( "keysound" ); 489 static Sound snd ( "keysound" );
437 490
438 if ( snd. isFinished ( )) 491 if ( snd. isFinished ( ))
439 snd. play ( ); 492 snd. play ( );
440#endif 493#endif
441} 494}
442 495
496/**
497 * This plays a touch sound
498 */
443void ODevice::touchSound ( ) 499void ODevice::touchSound ( )
444{ 500{
445 501
446#ifndef QT_NO_SOUND 502#ifndef QT_NO_SOUND
447 static Sound snd ( "touchsound" ); 503 static Sound snd ( "touchsound" );
448 504
449 if ( snd. isFinished ( )) 505 if ( snd. isFinished ( ))
450 snd. play ( ); 506 snd. play ( );
451#endif 507#endif
452} 508}
453 509
454 510/**
511 * This method will return a list of leds
512 * available on this device
513 * @return a list of LEDs.
514 */
455QValueList <OLed> ODevice::ledList ( ) const 515QValueList <OLed> ODevice::ledList ( ) const
456{ 516{
457 return QValueList <OLed> ( ); 517 return QValueList <OLed> ( );
458} 518}
459 519
520/**
521 * This does return the state of the LEDs
522 */
460QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const 523QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const
461{ 524{
462 return QValueList <OLedState> ( ); 525 return QValueList <OLedState> ( );
463} 526}
464 527
528/**
529 * @return the state for a given OLed
530 */
465OLedState ODevice::ledState ( OLed /*which*/ ) const 531OLedState ODevice::ledState ( OLed /*which*/ ) const
466{ 532{
467 return Led_Off; 533 return Led_Off;
468} 534}
469 535
470bool ODevice::setLedState ( OLed /*which*/, OLedState /*st*/ ) 536/**
537 * Set the state for a LED
538 * @param which Which OLed to use
539 * @param st The state to set
540 * @return success or failure
541 */
542bool ODevice::setLedState ( OLed which, OLedState st )
471{ 543{
544 Q_UNUSED( which )
545 Q_UNUSED( st )
472 return false; 546 return false;
473} 547}
474 548
549/**
550 * @return if the device has a light sensor
551 */
475bool ODevice::hasLightSensor ( ) const 552bool ODevice::hasLightSensor ( ) const
476{ 553{
477 return false; 554 return false;
478} 555}
479 556
557/**
558 * @return a value from the light senso
559 */
480int ODevice::readLightSensor ( ) 560int ODevice::readLightSensor ( )
481{ 561{
482 return -1; 562 return -1;
483} 563}
484 564
565/**
566 * @return the light sensor resolution whatever that is ;)
567 */
485int ODevice::lightSensorResolution ( ) const 568int ODevice::lightSensorResolution ( ) const
486{ 569{
487 return 0; 570 return 0;
488} 571}
489 572
573/**
574 * @return a list of hardware buttons
575 */
490const QValueList <ODeviceButton> &ODevice::buttons ( ) 576const QValueList <ODeviceButton> &ODevice::buttons ( )
491{ 577{
492 initButtons ( ); 578 initButtons ( );
493 579
494 return *d-> m_buttons; 580 return *d-> m_buttons;
495} 581}
496 582
583/**
584 * @return The amount of time that would count as a hold
585 */
497uint ODevice::buttonHoldTime ( ) const 586uint ODevice::buttonHoldTime ( ) const
498{ 587{
499 return d-> m_holdtime; 588 return d-> m_holdtime;
500} 589}
501 590
591/**
592 * This method return a ODeviceButton for a key code
593 * or 0 if no special hardware button is available for the device
594 *
595 * @return The devicebutton or 0l
596 * @see ODeviceButton
597 */
502const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 598const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
503{ 599{
504 initButtons ( ); 600 initButtons ( );
505 601
506 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) { 602 for ( QValueListConstIterator<ODeviceButton> it = d-> m_buttons-> begin ( ); it != d-> m_buttons-> end ( ); ++it ) {
507 if ( (*it). keycode ( ) == code ) 603 if ( (*it). keycode ( ) == code )
508 return &(*it); 604 return &(*it);
509 } 605 }
510 return 0; 606 return 0;
511} 607}
512 608
513void ODevice::reloadButtonMapping ( ) 609void ODevice::reloadButtonMapping ( )
514{ 610{
515 initButtons ( ); 611 initButtons ( );
516 612
517 Config cfg ( "ButtonSettings" ); 613 Config cfg ( "ButtonSettings" );
518 614
519 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 615 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
520 ODeviceButton &b = ( *d-> m_buttons ) [i]; 616 ODeviceButton &b = ( *d-> m_buttons ) [i];
521 QString group = "Button" + QString::number ( i ); 617 QString group = "Button" + QString::number ( i );
522 618
523 QCString pch, hch; 619 QCString pch, hch;
524 QCString pm, hm; 620 QCString pm, hm;
525 QByteArray pdata, hdata; 621 QByteArray pdata, hdata;
526 622
527 if ( cfg. hasGroup ( group )) { 623 if ( cfg. hasGroup ( group )) {
528 cfg. setGroup ( group ); 624 cfg. setGroup ( group );
529 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 625 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
530 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 626 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
531 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 627 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
532 628
533 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 629 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
534 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 630 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
535 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 631 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
536 } 632 }
537 633
538 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 634 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
539 635
540 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 636 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
541 } 637 }
542} 638}
543 639
544void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 640void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
545{ 641{
546 initButtons ( ); 642 initButtons ( );
547 643
548 QString mb_chan; 644 QString mb_chan;
549 645
550 if ( button >= (int) d-> m_buttons-> count ( )) 646 if ( button >= (int) d-> m_buttons-> count ( ))
551 return; 647 return;
552 648
553 ODeviceButton &b = ( *d-> m_buttons ) [button]; 649 ODeviceButton &b = ( *d-> m_buttons ) [button];
554 b. setPressedAction ( action ); 650 b. setPressedAction ( action );
555 651
556 mb_chan=b. pressedAction ( ). channel ( ); 652 mb_chan=b. pressedAction ( ). channel ( );
557 653
558 Config buttonFile ( "ButtonSettings" ); 654 Config buttonFile ( "ButtonSettings" );
559 buttonFile. setGroup ( "Button" + QString::number ( button )); 655 buttonFile. setGroup ( "Button" + QString::number ( button ));
560 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 656 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
561 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 657 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
562 658
563 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 659 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
564 660
565 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 661 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
566} 662}
567 663
568void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 664void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
569{ 665{
570 initButtons ( ); 666 initButtons ( );
571 667
572 if ( button >= (int) d-> m_buttons-> count ( )) 668 if ( button >= (int) d-> m_buttons-> count ( ))
573 return; 669 return;
574 670
575 ODeviceButton &b = ( *d-> m_buttons ) [button]; 671 ODeviceButton &b = ( *d-> m_buttons ) [button];
576 b. setHeldAction ( action ); 672 b. setHeldAction ( action );
577 673
578 Config buttonFile ( "ButtonSettings" ); 674 Config buttonFile ( "ButtonSettings" );
579 buttonFile. setGroup ( "Button" + QString::number ( button )); 675 buttonFile. setGroup ( "Button" + QString::number ( button ));
580 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 676 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
581 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 677 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
582 678
583 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 679 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
584 680
585 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 681 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
586} 682}
587 683
588 684
589 685
590 686
591/************************************************** 687/**************************************************
592 * 688 *
593 * iPAQ 689 * iPAQ
594 * 690 *
595 **************************************************/ 691 **************************************************/
596 692
597void iPAQ::init ( ) 693void iPAQ::init ( )
598{ 694{
599 d-> m_vendorstr = "HP"; 695 d-> m_vendorstr = "HP";
600 d-> m_vendor = Vendor_HP; 696 d-> m_vendor = Vendor_HP;
601 697
602 QFile f ( "/proc/hal/model" ); 698 QFile f ( "/proc/hal/model" );
603 699
604 if ( f. open ( IO_ReadOnly )) { 700 if ( f. open ( IO_ReadOnly )) {
605 QTextStream ts ( &f ); 701 QTextStream ts ( &f );
606 702
607 d-> m_modelstr = "H" + ts. readLine ( ); 703 d-> m_modelstr = "H" + ts. readLine ( );
608 704
609 if ( d-> m_modelstr == "H3100" ) 705 if ( d-> m_modelstr == "H3100" )
610 d-> m_model = Model_iPAQ_H31xx; 706 d-> m_model = Model_iPAQ_H31xx;
611 else if ( d-> m_modelstr == "H3600" ) 707 else if ( d-> m_modelstr == "H3600" )
612 d-> m_model = Model_iPAQ_H36xx; 708 d-> m_model = Model_iPAQ_H36xx;
613 else if ( d-> m_modelstr == "H3700" ) 709 else if ( d-> m_modelstr == "H3700" )
614 d-> m_model = Model_iPAQ_H37xx; 710 d-> m_model = Model_iPAQ_H37xx;
615 else if ( d-> m_modelstr == "H3800" ) 711 else if ( d-> m_modelstr == "H3800" )
616 d-> m_model = Model_iPAQ_H38xx; 712 d-> m_model = Model_iPAQ_H38xx;
617 else if ( d-> m_modelstr == "H3900" ) 713 else if ( d-> m_modelstr == "H3900" )
618 d-> m_model = Model_iPAQ_H39xx; 714 d-> m_model = Model_iPAQ_H39xx;
619 else 715 else
620 d-> m_model = Model_Unknown; 716 d-> m_model = Model_Unknown;
621 717
622 f. close ( ); 718 f. close ( );
623 } 719 }
624 720
625 switch ( d-> m_model ) { 721 switch ( d-> m_model ) {
626 case Model_iPAQ_H31xx: 722 case Model_iPAQ_H31xx:
627 case Model_iPAQ_H38xx: 723 case Model_iPAQ_H38xx:
628 d-> m_rotation = Rot90; 724 d-> m_rotation = Rot90;
629 break; 725 break;
630 case Model_iPAQ_H36xx: 726 case Model_iPAQ_H36xx:
631 case Model_iPAQ_H37xx: 727 case Model_iPAQ_H37xx:
632 case Model_iPAQ_H39xx: 728 case Model_iPAQ_H39xx:
633 default: 729 default:
634 d-> m_rotation = Rot270; 730 d-> m_rotation = Rot270;
635 break; 731 break;
636 } 732 }
637 733
638 f. setName ( "/etc/familiar-version" ); 734 f. setName ( "/etc/familiar-version" );
639 if ( f. open ( IO_ReadOnly )) { 735 if ( f. open ( IO_ReadOnly )) {
640 d-> m_systemstr = "Familiar"; 736 d-> m_systemstr = "Familiar";
641 d-> m_system = System_Familiar; 737 d-> m_system = System_Familiar;
642 738
643 QTextStream ts ( &f ); 739 QTextStream ts ( &f );
644 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 740 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
645 741
646 f. close ( ); 742 f. close ( );
647 } else { 743 } else {
648 f. setName ( "/etc/oz_version" ); 744 f. setName ( "/etc/oz_version" );
649 745
650 if ( f. open ( IO_ReadOnly )) { 746 if ( f. open ( IO_ReadOnly )) {
651 d-> m_systemstr = "OpenEmbedded/iPaq"; 747 d-> m_systemstr = "OpenEmbedded/iPaq";
652 d-> m_system = System_Familiar; 748 d-> m_system = System_Familiar;
653 749
654 QTextStream ts ( &f ); 750 QTextStream ts ( &f );
655 ts.setDevice ( &f ); 751 ts.setDevice ( &f );
656 d-> m_sysverstr = ts. readLine ( ); 752 d-> m_sysverstr = ts. readLine ( );
657 f. close ( ); 753 f. close ( );
658 } 754 }
659 } 755 }
660 756
661 757
662 758
663 759
664 760
665 m_leds [0] = m_leds [1] = Led_Off; 761 m_leds [0] = m_leds [1] = Led_Off;
666 762
667 m_power_timer = 0; 763 m_power_timer = 0;
668 764
669 if ( d-> m_qwsserver ) 765 if ( d-> m_qwsserver )
670 QWSServer::setKeyboardFilter ( this ); 766 QWSServer::setKeyboardFilter ( this );
671} 767}
672 768
673void iPAQ::initButtons ( ) 769void iPAQ::initButtons ( )
674{ 770{
675 if ( d-> m_buttons ) 771 if ( d-> m_buttons )
676 return; 772 return;
677 773
678 d-> m_buttons = new QValueList <ODeviceButton>; 774 d-> m_buttons = new QValueList <ODeviceButton>;
679 775
680 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 776 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
681 i_button *ib = ipaq_buttons + i; 777 i_button *ib = ipaq_buttons + i;
682 ODeviceButton b; 778 ODeviceButton b;
683 779
684 if (( ib-> model & d-> m_model ) == d-> m_model ) { 780 if (( ib-> model & d-> m_model ) == d-> m_model ) {
685 b. setKeycode ( ib-> code ); 781 b. setKeycode ( ib-> code );
686 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 782 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
687 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 783 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
688 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 784 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
689 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 785 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
690 786
691 d-> m_buttons-> append ( b ); 787 d-> m_buttons-> append ( b );
692 } 788 }
693 } 789 }
694 reloadButtonMapping ( ); 790 reloadButtonMapping ( );
695 791
696 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 792 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
697 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 793 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
698} 794}
699 795
700 796
701//#include <linux/h3600_ts.h> // including kernel headers is evil ... 797//#include <linux/h3600_ts.h> // including kernel headers is evil ...
702 798
703typedef struct { 799typedef struct {
704 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 800 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
705 unsigned char TotalTime; /* Units of 5 seconds */ 801 unsigned char TotalTime; /* Units of 5 seconds */
706 unsigned char OnTime; /* units of 100m/s */ 802 unsigned char OnTime; /* units of 100m/s */
707 unsigned char OffTime; /* units of 100m/s */ 803 unsigned char OffTime; /* units of 100m/s */
708} LED_IN; 804} LED_IN;
709 805
710typedef struct { 806typedef struct {
711 unsigned char mode; 807 unsigned char mode;
712 unsigned char pwr; 808 unsigned char pwr;
713 unsigned char brightness; 809 unsigned char brightness;
714} FLITE_IN; 810} FLITE_IN;
715 811
716#define LED_ON OD_IOW( 'f', 5, LED_IN ) 812#define LED_ON OD_IOW( 'f', 5, LED_IN )
717#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 813#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
718 814
719 815
720QValueList <OLed> iPAQ::ledList ( ) const 816QValueList <OLed> iPAQ::ledList ( ) const
721{ 817{
722 QValueList <OLed> vl; 818 QValueList <OLed> vl;
723 vl << Led_Power; 819 vl << Led_Power;
724 820
725 if ( d-> m_model == Model_iPAQ_H38xx ) 821 if ( d-> m_model == Model_iPAQ_H38xx )
726 vl << Led_BlueTooth; 822 vl << Led_BlueTooth;
727 return vl; 823 return vl;
728} 824}
729 825
730QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 826QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
731{ 827{
732 QValueList <OLedState> vl; 828 QValueList <OLedState> vl;
733 829
734 if ( l == Led_Power ) 830 if ( l == Led_Power )
735 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 831 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
736 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 832 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
737 vl << Led_Off; // << Led_On << ??? 833 vl << Led_Off; // << Led_On << ???
738 834
739 return vl; 835 return vl;
740} 836}
741 837
742OLedState iPAQ::ledState ( OLed l ) const 838OLedState iPAQ::ledState ( OLed l ) const
743{ 839{
744 switch ( l ) { 840 switch ( l ) {
745 case Led_Power: 841 case Led_Power:
746 return m_leds [0]; 842 return m_leds [0];
747 case Led_BlueTooth: 843 case Led_BlueTooth:
748 return m_leds [1]; 844 return m_leds [1];
749 default: 845 default:
750 return Led_Off; 846 return Led_Off;
751 } 847 }
752} 848}
753 849
754bool iPAQ::setLedState ( OLed l, OLedState st ) 850bool iPAQ::setLedState ( OLed l, OLedState st )
755{ 851{
756 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 852 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
757 853
758 if ( l == Led_Power ) { 854 if ( l == Led_Power ) {
759 if ( fd >= 0 ) { 855 if ( fd >= 0 ) {
760 LED_IN leds; 856 LED_IN leds;
761 ::memset ( &leds, 0, sizeof( leds )); 857 ::memset ( &leds, 0, sizeof( leds ));
762 leds. TotalTime = 0; 858 leds. TotalTime = 0;
763 leds. OnTime = 0; 859 leds. OnTime = 0;
764 leds. OffTime = 1; 860 leds. OffTime = 1;
765 leds. OffOnBlink = 2; 861 leds. OffOnBlink = 2;
766 862
767 switch ( st ) { 863 switch ( st ) {
768 case Led_Off : leds. OffOnBlink = 0; break; 864 case Led_Off : leds. OffOnBlink = 0; break;
769 case Led_On : leds. OffOnBlink = 1; break; 865 case Led_On : leds. OffOnBlink = 1; break;
770 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 866 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
771 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 867 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
772 } 868 }
773 869
774 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 870 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
775 m_leds [0] = st; 871 m_leds [0] = st;
776 return true; 872 return true;
777 } 873 }
778 } 874 }
779 } 875 }
780 return false; 876 return false;
781} 877}
782 878
783 879
784bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 880bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
785{ 881{
786 int newkeycode = keycode; 882 int newkeycode = keycode;
787 883
788 switch ( keycode ) { 884 switch ( keycode ) {
789 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 885 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
790 case HardKey_Menu: { 886 case HardKey_Menu: {
791 if (( d-> m_model == Model_iPAQ_H38xx ) || 887 if (( d-> m_model == Model_iPAQ_H38xx ) ||
792 ( d-> m_model == Model_iPAQ_H39xx )) { 888 ( d-> m_model == Model_iPAQ_H39xx )) {
793 newkeycode = HardKey_Mail; 889 newkeycode = HardKey_Mail;
794 } 890 }
795 break; 891 break;
796 } 892 }
797 893
798 // Rotate cursor keys 180° 894 // Rotate cursor keys 180°
799 case Key_Left : 895 case Key_Left :
800 case Key_Right: 896 case Key_Right:
801 case Key_Up : 897 case Key_Up :
802 case Key_Down : { 898 case Key_Down : {
803 if (( d-> m_model == Model_iPAQ_H31xx ) || 899 if (( d-> m_model == Model_iPAQ_H31xx ) ||
804 ( d-> m_model == Model_iPAQ_H38xx )) { 900 ( d-> m_model == Model_iPAQ_H38xx )) {
805 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 901 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
806 } 902 }
807 break; 903 break;
808 } 904 }
809 905
810 // map Power Button short/long press to F34/F35 906 // map Power Button short/long press to F34/F35
811 case Key_SysReq: { 907 case Key_SysReq: {
812 if ( isPress ) { 908 if ( isPress ) {
813 if ( m_power_timer ) 909 if ( m_power_timer )
814 killTimer ( m_power_timer ); 910 killTimer ( m_power_timer );
815 m_power_timer = startTimer ( 500 ); 911 m_power_timer = startTimer ( 500 );
816 } 912 }
817 else if ( m_power_timer ) { 913 else if ( m_power_timer ) {
818 killTimer ( m_power_timer ); 914 killTimer ( m_power_timer );
819 m_power_timer = 0; 915 m_power_timer = 0;
820 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 916 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
821 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 917 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
822 } 918 }
823 newkeycode = Key_unknown; 919 newkeycode = Key_unknown;
824 break; 920 break;
825 } 921 }
826 } 922 }
827 923
828 if ( newkeycode != keycode ) { 924 if ( newkeycode != keycode ) {
829 if ( newkeycode != Key_unknown ) 925 if ( newkeycode != Key_unknown )
830 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 926 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
831 return true; 927 return true;
832 } 928 }
833 else 929 else
834 return false; 930 return false;
835} 931}
836 932
837void iPAQ::timerEvent ( QTimerEvent * ) 933void iPAQ::timerEvent ( QTimerEvent * )
838{ 934{
839 killTimer ( m_power_timer ); 935 killTimer ( m_power_timer );
840 m_power_timer = 0; 936 m_power_timer = 0;
841 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 937 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
842 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 938 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
843} 939}
844 940
845 941
846void iPAQ::alarmSound ( ) 942void iPAQ::alarmSound ( )
847{ 943{
848#ifndef QT_NO_SOUND 944#ifndef QT_NO_SOUND
849 static Sound snd ( "alarm" ); 945 static Sound snd ( "alarm" );
850 int fd; 946 int fd;
851 int vol; 947 int vol;
852 bool vol_reset = false; 948 bool vol_reset = false;
853 949
854 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 950 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
855 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 951 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
856 Config cfg ( "qpe" ); 952 Config cfg ( "qpe" );
857 cfg. setGroup ( "Volume" ); 953 cfg. setGroup ( "Volume" );
858 954
859 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 955 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
860 if ( volalarm < 0 ) 956 if ( volalarm < 0 )
861 volalarm = 0; 957 volalarm = 0;
862 else if ( volalarm > 100 ) 958 else if ( volalarm > 100 )
863 volalarm = 100; 959 volalarm = 100;
864 volalarm |= ( volalarm << 8 ); 960 volalarm |= ( volalarm << 8 );
865 961
866 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 962 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
867 vol_reset = true; 963 vol_reset = true;
868 } 964 }
869 } 965 }
870 966
871 snd. play ( ); 967 snd. play ( );
872 while ( !snd. isFinished ( )) 968 while ( !snd. isFinished ( ))
873 qApp-> processEvents ( ); 969 qApp-> processEvents ( );
874 970
875 if ( fd >= 0 ) { 971 if ( fd >= 0 ) {
876 if ( vol_reset ) 972 if ( vol_reset )
877 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 973 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
878 ::close ( fd ); 974 ::close ( fd );
879 } 975 }
880#endif 976#endif
881} 977}
882 978
883 979
884bool iPAQ::setSoftSuspend ( bool soft ) 980bool iPAQ::setSoftSuspend ( bool soft )
885{ 981{
886 bool res = false; 982 bool res = false;
887 int fd; 983 int fd;
888 984
889 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 985 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
890 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 986 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
891 res = true; 987 res = true;
892 else 988 else
893 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 989 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
894 990
895 ::close ( fd ); 991 ::close ( fd );
896 } 992 }
897 else 993 else
898 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 994 ::perror ( "/proc/sys/ts/suspend_button_mode" );
899 995
900 return res; 996 return res;
901} 997}
902 998
903 999
904bool iPAQ::setDisplayBrightness ( int bright ) 1000bool iPAQ::setDisplayBrightness ( int bright )
905{ 1001{
906 bool res = false; 1002 bool res = false;
907 int fd; 1003 int fd;
908 1004
909 if ( bright > 255 ) 1005 if ( bright > 255 )
910 bright = 255; 1006 bright = 255;
911 if ( bright < 0 ) 1007 if ( bright < 0 )
912 bright = 0; 1008 bright = 0;
913 1009
914 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1010 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
915 FLITE_IN bl; 1011 FLITE_IN bl;
916 bl. mode = 1; 1012 bl. mode = 1;
917 bl. pwr = bright ? 1 : 0; 1013 bl. pwr = bright ? 1 : 0;
918 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1014 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
919 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1015 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
920 ::close ( fd ); 1016 ::close ( fd );
921 } 1017 }
922 return res; 1018 return res;
923} 1019}
924 1020
925int iPAQ::displayBrightnessResolution ( ) const 1021int iPAQ::displayBrightnessResolution ( ) const
926{ 1022{
927 switch ( model ( )) { 1023 switch ( model ( )) {
928 case Model_iPAQ_H31xx: 1024 case Model_iPAQ_H31xx:
929 case Model_iPAQ_H36xx: 1025 case Model_iPAQ_H36xx:
930 case Model_iPAQ_H37xx: 1026 case Model_iPAQ_H37xx:
931 return 128; // really 256, but >128 could damage the LCD 1027 return 128; // really 256, but >128 could damage the LCD
932 1028
933 case Model_iPAQ_H38xx: 1029 case Model_iPAQ_H38xx:
934 case Model_iPAQ_H39xx: 1030 case Model_iPAQ_H39xx:
935 return 64; 1031 return 64;
936 1032
937 default: 1033 default:
938 return 2; 1034 return 2;
939 } 1035 }
940} 1036}
941 1037
942 1038
943bool iPAQ::hasLightSensor ( ) const 1039bool iPAQ::hasLightSensor ( ) const
944{ 1040{
945 return true; 1041 return true;
946} 1042}
947 1043
948int iPAQ::readLightSensor ( ) 1044int iPAQ::readLightSensor ( )
949{ 1045{
950 int fd; 1046 int fd;
951 int val = -1; 1047 int val = -1;
952 1048
953 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1049 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
954 char buffer [8]; 1050 char buffer [8];
955 1051
956 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1052 if ( ::read ( fd, buffer, 5 ) == 5 ) {
957 char *endptr; 1053 char *endptr;
958 1054
959 buffer [4] = 0; 1055 buffer [4] = 0;
960 val = ::strtol ( buffer + 2, &endptr, 16 ); 1056 val = ::strtol ( buffer + 2, &endptr, 16 );
961 1057
962 if ( *endptr != 0 ) 1058 if ( *endptr != 0 )
963 val = -1; 1059 val = -1;
964 } 1060 }
965 ::close ( fd ); 1061 ::close ( fd );
966 } 1062 }
967 1063
968 return val; 1064 return val;
969} 1065}
970 1066
971int iPAQ::lightSensorResolution ( ) const 1067int iPAQ::lightSensorResolution ( ) const
972{ 1068{
973 return 256; 1069 return 256;
974} 1070}
975 1071
976/************************************************** 1072/**************************************************
977 * 1073 *
978 * Zaurus 1074 * Zaurus
979 * 1075 *
980 **************************************************/ 1076 **************************************************/
981 1077
982 1078
983 1079
984void Zaurus::init ( ) 1080void Zaurus::init ( )
985{ 1081{
986 d-> m_vendorstr = "Sharp"; 1082 d-> m_vendorstr = "Sharp";
987 d-> m_vendor = Vendor_Sharp; 1083 d-> m_vendor = Vendor_Sharp;
988 1084
989 QFile f ( "/proc/filesystems" ); 1085 QFile f ( "/proc/filesystems" );
990 1086
991 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1087 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
992 d-> m_vendorstr = "OpenZaurus Team"; 1088 d-> m_vendorstr = "OpenZaurus Team";
993 d-> m_systemstr = "OpenZaurus"; 1089 d-> m_systemstr = "OpenZaurus";
994 d-> m_system = System_OpenZaurus; 1090 d-> m_system = System_OpenZaurus;
995 1091
996 f. close ( ); 1092 f. close ( );
997 1093
998 f. setName ( "/etc/oz_version" ); 1094 f. setName ( "/etc/oz_version" );
999 if ( f. open ( IO_ReadOnly )) { 1095 if ( f. open ( IO_ReadOnly )) {
1000 QTextStream ts ( &f ); 1096 QTextStream ts ( &f );
1001 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1097 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1002 f. close ( ); 1098 f. close ( );
1003 } 1099 }
1004 } 1100 }
1005 else { 1101 else {
1006 d-> m_systemstr = "Zaurus"; 1102 d-> m_systemstr = "Zaurus";
1007 d-> m_system = System_Zaurus; 1103 d-> m_system = System_Zaurus;
1008 } 1104 }
1009 1105
1010 f. setName ( "/proc/deviceinfo/product" ); 1106 f. setName ( "/proc/deviceinfo/product" );
1011 if ( f. open ( IO_ReadOnly ) ) { 1107 if ( f. open ( IO_ReadOnly ) ) {
1012 QTextStream ts ( &f ); 1108 QTextStream ts ( &f );
1013 QString model = ts. readLine ( ); 1109 QString model = ts. readLine ( );
1014 f. close ( ); 1110 f. close ( );
1015 1111
1016 d-> m_modelstr = QString("Zaurus ") + model; 1112 d-> m_modelstr = QString("Zaurus ") + model;
1017 if ( model == "SL-5500" ) 1113 if ( model == "SL-5500" )
1018 d-> m_model = Model_Zaurus_SL5500; 1114 d-> m_model = Model_Zaurus_SL5500;
1019 else if ( model == "SL-C700" ) 1115 else if ( model == "SL-C700" )
1020 d-> m_model = Model_Zaurus_SLC700; 1116 d-> m_model = Model_Zaurus_SLC700;
1021 else if ( model == "SL-A300" ) 1117 else if ( model == "SL-A300" )
1022 d-> m_model = Model_Zaurus_SLA300; 1118 d-> m_model = Model_Zaurus_SLA300;
1023 else if ( model == "SL-B600" || model == "SL-5600" ) 1119 else if ( model == "SL-B600" || model == "SL-5600" )
1024 d-> m_model = Model_Zaurus_SLB600; 1120 d-> m_model = Model_Zaurus_SLB600;
1025 else 1121 else
1026 d-> m_model = Model_Zaurus_SL5000; 1122 d-> m_model = Model_Zaurus_SL5000;
1027 } 1123 }
1028 else { 1124 else {
1029 d-> m_model = Model_Zaurus_SL5000; 1125 d-> m_model = Model_Zaurus_SL5000;
1030 d-> m_modelstr = "Zaurus (model unknown)"; 1126 d-> m_modelstr = "Zaurus (model unknown)";
1031 } 1127 }
1032 1128
1033 switch ( d-> m_model ) { 1129 switch ( d-> m_model ) {
1034 case Model_Zaurus_SLA300: 1130 case Model_Zaurus_SLA300:
1035 d-> m_rotation = Rot0; 1131 d-> m_rotation = Rot0;
1036 break; 1132 break;
1037 case Model_Zaurus_SLC700: 1133 case Model_Zaurus_SLC700:
1038 /* note for C700, we must check the display rotation 1134 /* note for C700, we must check the display rotation
1039 * sensor to set an appropriate value 1135 * sensor to set an appropriate value
1040 */ 1136 */
1041 case Model_Zaurus_SLB600: 1137 case Model_Zaurus_SLB600:
1042 case Model_Zaurus_SL5500: 1138 case Model_Zaurus_SL5500:
1043 case Model_Zaurus_SL5000: 1139 case Model_Zaurus_SL5000:
1044 default: 1140 default:
1045 d-> m_rotation = Rot270; 1141 d-> m_rotation = Rot270;
1046 break; 1142 break;
1047 } 1143 }
1048 m_leds [0] = Led_Off; 1144 m_leds [0] = Led_Off;
1049} 1145}
1050 1146
1051void Zaurus::initButtons ( ) 1147void Zaurus::initButtons ( )
1052{ 1148{
1053 if ( d-> m_buttons ) 1149 if ( d-> m_buttons )
1054 return; 1150 return;
1055 1151
1056 d-> m_buttons = new QValueList <ODeviceButton>; 1152 d-> m_buttons = new QValueList <ODeviceButton>;
1057 1153
1058 for ( uint i = 0; i < ( sizeof( z_buttons ) / sizeof( z_button )); i++ ) { 1154 for ( uint i = 0; i < ( sizeof( z_buttons ) / sizeof( z_button )); i++ ) {
1059 z_button *zb = z_buttons + i; 1155 z_button *zb = z_buttons + i;
1060 ODeviceButton b; 1156 ODeviceButton b;
1061 1157
1062 b. setKeycode ( zb-> code ); 1158 b. setKeycode ( zb-> code );
1063 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1159 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1064 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1160 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1065 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1161 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1066 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1162 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1067 1163
1068 d-> m_buttons-> append ( b ); 1164 d-> m_buttons-> append ( b );
1069 } 1165 }
1070 1166
1071 reloadButtonMapping ( ); 1167 reloadButtonMapping ( );
1072 1168
1073 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1169 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1074 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1170 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1075} 1171}
1076 1172
1077#include <unistd.h> 1173#include <unistd.h>
1078#include <fcntl.h> 1174#include <fcntl.h>
1079#include <sys/ioctl.h> 1175#include <sys/ioctl.h>
1080 1176
1081//#include <asm/sharp_char.h> // including kernel headers is evil ... 1177//#include <asm/sharp_char.h> // including kernel headers is evil ...
1082 1178
1083#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1179#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1084 1180
1085 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1181 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1086#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1182#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1087 1183
1088#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1184#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1089#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1185#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1090#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1186#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1091 1187
1092/* --- for SHARP_BUZZER device --- */ 1188/* --- for SHARP_BUZZER device --- */
1093 1189
1094 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1190 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1095//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1191//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1096 1192
1097#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1193#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1098#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1194#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1099#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1195#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1100#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1196#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1101#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1197#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1102 1198
1103//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1199//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1104//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1200//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1105 1201
1106//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1202//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1107//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1203//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1108//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1204//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1109//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1205//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1110//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1206//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1111//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1207//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1112//#define SHARP_PDA_APPSTART 9 /* application start */ 1208//#define SHARP_PDA_APPSTART 9 /* application start */
1113//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1209//#define SHARP_PDA_APPQUIT 10 /* application ends */
1114 1210
1115//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1211//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1116//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1212//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1117//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1213//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1118//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1214//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1119// 1215//
1120 1216
1121 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1217 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1122#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1218#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1123 1219
1124typedef struct sharp_led_status { 1220typedef struct sharp_led_status {
1125 int which; /* select which LED status is wanted. */ 1221 int which; /* select which LED status is wanted. */
1126 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1222 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1127} sharp_led_status; 1223} sharp_led_status;
1128 1224
1129#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1225#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1130 1226
1131#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1227#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1132#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1228#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1133#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1229#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1134 1230
1135// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1231// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1136 1232
1137#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1233#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1138#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1234#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1139#define APM_EVT_POWER_BUTTON (1 << 0) 1235#define APM_EVT_POWER_BUTTON (1 << 0)
1140 1236
1141#define FL_IOCTL_STEP_CONTRAST 100 1237#define FL_IOCTL_STEP_CONTRAST 100
1142 1238
1143 1239
1144void Zaurus::buzzer ( int sound ) 1240void Zaurus::buzzer ( int sound )
1145{ 1241{
1146 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1242 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1147 1243
1148 if ( fd >= 0 ) { 1244 if ( fd >= 0 ) {
1149 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1245 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1150 ::close ( fd ); 1246 ::close ( fd );
1151 } 1247 }
1152} 1248}
1153 1249
1154 1250
1155void Zaurus::alarmSound ( ) 1251void Zaurus::alarmSound ( )
1156{ 1252{
1157 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1253 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1158} 1254}
1159 1255
1160void Zaurus::touchSound ( ) 1256void Zaurus::touchSound ( )
1161{ 1257{
1162 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1258 buzzer ( SHARP_BUZ_TOUCHSOUND );
1163} 1259}
1164 1260
1165void Zaurus::keySound ( ) 1261void Zaurus::keySound ( )
1166{ 1262{
1167 buzzer ( SHARP_BUZ_KEYSOUND ); 1263 buzzer ( SHARP_BUZ_KEYSOUND );
1168} 1264}
1169 1265
1170 1266
1171QValueList <OLed> Zaurus::ledList ( ) const 1267QValueList <OLed> Zaurus::ledList ( ) const
1172{ 1268{
1173 QValueList <OLed> vl; 1269 QValueList <OLed> vl;
1174 vl << Led_Mail; 1270 vl << Led_Mail;
1175 return vl; 1271 return vl;
1176} 1272}
1177 1273
1178QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1274QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1179{ 1275{
1180 QValueList <OLedState> vl; 1276 QValueList <OLedState> vl;
1181 1277
1182 if ( l == Led_Mail ) 1278 if ( l == Led_Mail )
1183 vl << Led_Off << Led_On << Led_BlinkSlow; 1279 vl << Led_Off << Led_On << Led_BlinkSlow;
1184 return vl; 1280 return vl;
1185} 1281}
1186 1282
1187OLedState Zaurus::ledState ( OLed which ) const 1283OLedState Zaurus::ledState ( OLed which ) const
1188{ 1284{
1189 if ( which == Led_Mail ) 1285 if ( which == Led_Mail )
1190 return m_leds [0]; 1286 return m_leds [0];
1191 else 1287 else
1192 return Led_Off; 1288 return Led_Off;
1193} 1289}
1194 1290
1195bool Zaurus::setLedState ( OLed which, OLedState st ) 1291bool Zaurus::setLedState ( OLed which, OLedState st )
1196{ 1292{
1197 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1293 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1198 1294
1199 if ( which == Led_Mail ) { 1295 if ( which == Led_Mail ) {
1200 if ( fd >= 0 ) { 1296 if ( fd >= 0 ) {
1201 struct sharp_led_status leds; 1297 struct sharp_led_status leds;
1202 ::memset ( &leds, 0, sizeof( leds )); 1298 ::memset ( &leds, 0, sizeof( leds ));
1203 leds. which = SHARP_LED_MAIL_EXISTS; 1299 leds. which = SHARP_LED_MAIL_EXISTS;
1204 bool ok = true; 1300 bool ok = true;
1205 1301
1206 switch ( st ) { 1302 switch ( st ) {
1207 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1303 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1208 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1304 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1209 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1305 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1210 default : ok = false; 1306 default : ok = false;
1211 } 1307 }
1212 1308
1213 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1309 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1214 m_leds [0] = st; 1310 m_leds [0] = st;
1215 return true; 1311 return true;
1216 } 1312 }
1217 } 1313 }
1218 } 1314 }
1219 return false; 1315 return false;
1220} 1316}
1221 1317
1222bool Zaurus::setSoftSuspend ( bool soft ) 1318bool Zaurus::setSoftSuspend ( bool soft )
1223{ 1319{
1224 bool res = false; 1320 bool res = false;
1225 int fd; 1321 int fd;
1226 1322
1227 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1323 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1228 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1324 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
1229 1325
1230 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 1326 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
1231 1327
1232 if ( sources >= 0 ) { 1328 if ( sources >= 0 ) {
1233 if ( soft ) 1329 if ( soft )
1234 sources &= ~APM_EVT_POWER_BUTTON; 1330 sources &= ~APM_EVT_POWER_BUTTON;
1235 else 1331 else
1236 sources |= APM_EVT_POWER_BUTTON; 1332 sources |= APM_EVT_POWER_BUTTON;
1237 1333
1238 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1334 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1239 res = true; 1335 res = true;
1240 else 1336 else
1241 perror ( "APM_IOCGEVTSRC" ); 1337 perror ( "APM_IOCGEVTSRC" );
1242 } 1338 }
1243 else 1339 else
1244 perror ( "APM_IOCGEVTSRC" ); 1340 perror ( "APM_IOCGEVTSRC" );
1245 1341
1246 ::close ( fd ); 1342 ::close ( fd );
1247 } 1343 }
1248 else 1344 else
1249 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1345 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1250 1346
1251 return res; 1347 return res;
1252} 1348}
1253 1349
1254 1350
1255bool Zaurus::setDisplayBrightness ( int bright ) 1351bool Zaurus::setDisplayBrightness ( int bright )
1256{ 1352{
1257 bool res = false; 1353 bool res = false;
1258 int fd; 1354 int fd;
1259 1355
1260 if ( bright > 255 ) 1356 if ( bright > 255 )
1261 bright = 255; 1357 bright = 255;
1262 if ( bright < 0 ) 1358 if ( bright < 0 )
1263 bright = 0; 1359 bright = 0;
1264 1360
1265 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1361 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1266 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1362 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1267 if ( bright && !bl ) 1363 if ( bright && !bl )
1268 bl = 1; 1364 bl = 1;
1269 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1365 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1270 ::close ( fd ); 1366 ::close ( fd );
1271 } 1367 }
1272 return res; 1368 return res;
1273} 1369}
1274 1370
1275 1371
1276int Zaurus::displayBrightnessResolution ( ) const 1372int Zaurus::displayBrightnessResolution ( ) const
1277{ 1373{
1278 return 5; 1374 return 5;
1279} 1375}
1280 1376
1281 1377